newBuilder();
$builder->define(function ($page) {
$page->title('短信管理')
->searchAttrs(['action' => '/message', 'class' => 'form-search search-panel'])
->buttons(function ($buttons) {
$buttons->modal('短信配置', '/config', '', [], 'config')
->open('查看报表', '/report', [], 'report')
->batchAction('批量删除', '/remove', 'id#{key}', '确定删除吗?', ['data-scene' => 'batch']);
})
->bootScript('let scenes = {};')
->search(function ($search) {
$search->input('smsid', '消息编号', '请输入消息编号')
->field(['type' => 'input', 'name' => 'scene_keyword', 'label' => '业务场景', 'class' => 'search-scene-keyword'])
->select('status', '执行结果', [0 => '失败', 1 => '成功'])
->dateRange('create_time', '发送时间', '请选择发送时间')
->hidden('source', 'system')
->submit('筛选', ['data-scene' => 'search-submit']);
})
->table('MessageData', '/message', function ($table) {
$table->checkbox()
->sortInput('/sort')
->column(['field' => 'smsid', 'title' => '消息编号', 'sort' => true])
->column(['field' => 'scene', 'title' => '业务场景', 'templet' => PageBuilder::js('function(d){ return d.scene; }')])
->statusSwitch('/state', [
'title' => '状态',
'activeHtml' => '成功',
'inactiveHtml' => '失败',
'text' => '成功|失败',
])
->rows(function ($rows) {
$rows->open('查看', '/detail?id={{d.id}}', '查看详情', [], 'view')
->modal('编辑', '/edit?id={{d.id}}', '编辑', [], 'edit');
})
->toolbar();
});
});
$builder->addInitScript('window.pageReady = true;')->build();
$schema = $builder->toArray();
$searches = $this->schemaNodesOfType($schema, 'search');
$tables = $this->schemaNodesOfType($schema, 'table');
$html = $this->invokePrivate($builder, 'render');
$this->assertSame('短信管理', $schema['title']);
$this->assertSame('MessageData', $tables[0]['id'] ?? null);
$this->assertSame('#SortInputMessageDataTpl', $tables[0]['columns'][1]['templet'] ?? null);
$this->assertSame('js', $tables[0]['columns'][3]['templet']['type'] ?? null);
$this->assertSame('#toolbarMessageData', $tables[0]['columns'][5]['toolbar'] ?? null);
$this->assertSame('config', $schema['buttons'][0]['auth'] ?? null);
$this->assertSame('open', $schema['buttons'][1]['type'] ?? null);
$this->assertSame('/report', $schema['buttons'][1]['url'] ?? null);
$this->assertSame('batch-action', $schema['buttons'][2]['type'] ?? null);
$this->assertSame('MessageData', $schema['buttons'][2]['attrs']['data-table-id'] ?? null);
$this->assertSame('hidden', $searches[0]['fields'][4]['type'] ?? null);
$this->assertSame('system', $searches[0]['fields'][4]['attrs']['value'] ?? null);
$this->assertSame('submit', $searches[0]['fields'][5]['type'] ?? null);
$this->assertStringContainsString('layui-card-header', $html);
$this->assertStringContainsString('layui-card-table', $html);
$this->assertStringContainsString('form-search', $html);
$this->assertStringContainsString('class="form-search search-panel layui-form layui-form-pane"', $html);
$this->assertStringContainsString('data-scene="batch"', $html);
$this->assertStringContainsString('type="hidden"', $html);
$this->assertStringContainsString('name="source"', $html);
$this->assertStringContainsString('value="system"', $html);
$this->assertStringContainsString('', $html);
$this->assertStringContainsString('data-scene="search-submit"', $html);
$this->assertStringContainsString('data-action="/remove"', $html);
$this->assertStringContainsString('data-rule="id#{key}"', $html);
$this->assertStringContainsString('data-confirm="确定删除吗?"', $html);
$this->assertStringContainsString('search-scene-keyword', $html);
$this->assertStringContainsString('data-url="/message"', $html);
$this->assertStringContainsString('id="PageSearchForm1"', $html);
$this->assertStringContainsString('data-target-search="#PageSearchForm1"', $html);
$this->assertStringContainsString('id="SortInputMessageDataTpl"', $html);
$this->assertStringContainsString('id="StatusSwitchMessageDataTpl"', $html);
$this->assertStringContainsString('lay-filter="StatusSwitchMessageData"', $html);
$this->assertStringContainsString('$.form.load("/state"', $html);
$this->assertStringContainsString("else {\n \$(\"#MessageData\").trigger(\"reload\");\n }", $html);
$this->assertTrue(
strpos($html, 'let scenes = {};') < strpos($html, "$('#MessageData').layTable(")
);
$this->assertTrue(
strpos($html, "$('#MessageData').layTable(") < strpos($html, 'window.pageReady = true;')
);
$this->assertStringContainsString('function(d){ return d.scene; }', $html);
$this->assertStringContainsString('