baseCRUD() ->filterTogglable(false) ->headerToolbar([ $this->createButton(true, 'lg'), ...$this->baseHeaderToolBar(), ]) ->filter($this->baseFilter()->actions([])->body([ TextControl::make()->name('name')->label('名称')->size('md'), amisMake()->SelectControl()->name('type')->label('类型')->options(MonitorMode::typeMap())->size('md'), Components::make()->keywordsTagControl('group_tags', '分组', 'monitor-mode-group')->size('md'), amis('button')->label(__('admin.reset'))->actionType('clear-and-submit'), amis('submit')->label(__('admin.search'))->level('primary'), ])) ->columns([ TableColumn::make()->name('id')->label('ID')->sortable(true), TableColumn::make()->name('name')->label('名称'), TableColumn::make()->name('type')->type('mapping')->map(MonitorMode::typeMap())->label('类型'), TableColumn::make()->name('tags')->type('mapping')->map(Keyword::tagsMap('monitor-mode-group'))->label('分组'), TableColumn::make()->name('created_at')->label(__('admin.created_at'))->type('datetime')->sortable(true), amisMake()->Operation()->label(__('admin.actions'))->buttons([ $this->setAboutDevice(), $this->rowEditButton(true, 'lg'), $this->rowDeleteButton() ]), ]); return $this->baseList($crud); } public function form(): Form { return $this->baseForm()->body([ TextControl::make()->name('name')->label('名称'), \amisMake()->RadiosControl()->name('type')->label('类型')->options(MonitorMode::typeMap())->required(true)->disabledOn('data.id > 0'), Components::make()->keywordsTagControl('group_tags', '分组', 'monitor-mode-group'), // Components::make()->sortControl('sort', __('admin.order')), // TextControl::make()->name('is_enable')->type('switch')->default(1)->label('显示'), // TextControl::make()->name('is_recommend')->type('switch')->default(0)->label('推荐'), ]); } private function setAboutDevice(){ return amisMake()->DrawerAction()->label('设置监测设备')->icon('fa-solid fa-gear')->level('link')->drawer( amisMake()->Drawer()->title('设置监测设备')->resizable(true)->closeOnOutside(true)->closeOnEsc(true)->body([ amisMake() ->Form() ->api(admin_url('monitor-mode-save-devices')) ->initApi($this->getEditGetDataPath()) ->mode('normal') ->data(['id' => '${id}']) ->body([ amisMake()->RadiosControl()->name('type')->label('类型')->options(MonitorMode::typeMap())->disabled(true), amisMake()->PickerControl('picker_devices', '监控设备')->visibleOn('data.type == '.MonitorMode::TYPE_MONITOR) ->valueField('id') ->labelField('name') ->multiple(true)->joinValues(false)->extractValue(true) ->size('lg') ->source([ 'method' => 'get', 'url' => admin_url('devices?_action=getData&type='.Device::TYPE_MONITOR), 'data' => [ 'name'=>'${device_name}', ] ]) ->pickerSchema( [ 'mode' => 'table', 'name' => 'monitor_list', 'headerToolbar' => amisMake()->form() ->wrapWithPanel(false) ->className('text-right') ->target('monitor_list') ->mode('inline') ->body([ amisMake()->TextControl('device_name', '名称')->addOn( amis('submit')->label(__('admin.search'))->level('primary') ) ]), 'columns' => [ TableColumn::make()->name('id')->label('ID')->sortable(true), TableColumn::make()->name('name')->label('名称'), TableColumn::make()->name('sn')->label('编号'), TableColumn::make()->name('created_at')->label('创建时间')->type('datetime')->sortable(true), TableColumn::make()->name('updated_at')->label('更新时间')->type('datetime')->sortable(true), ] ] ), amisMake()->ArrayControl('array_devices', '土壤监测')->visibleOn('data.type == '.MonitorMode::TYPE_SOIL) ->items( amisMake()->ComboControl()->items([ \amisMake()->CheckboxesControl('device_fields', '监测字段')->checkAll(true)->options(MonitorMode::fieldMap(MonitorMode::TYPE_SOIL)), \amisMake()->SelectControl('device_id', '监测设备')->options(Device::where('type', Device::TYPE_SOIL)->get()->pluck('name', 'id')), ]), ), amisMake()->ArrayControl('array_devices', '水质监测')->visibleOn('data.type == '.MonitorMode::TYPE_WATER_QUALITY) ->items( amisMake()->ComboControl()->items([ \amisMake()->CheckboxesControl('device_fields', '监测字段')->checkAll(true)->options(MonitorMode::fieldMap(MonitorMode::TYPE_WATER_QUALITY)), \amisMake()->SelectControl('device_id', '监测设备')->options(Device::where('type', Device::TYPE_WATER_QUALITY)->get()->pluck('name', 'id')), ]), ), amisMake()->ArrayControl('array_devices', '气象监测')->visibleOn('data.type == '.MonitorMode::TYPE_METEOROLOGICAL) ->items( amisMake()->ComboControl()->items([ \amisMake()->CheckboxesControl('device_fields', '监测字段')->checkAll(true)->options(MonitorMode::fieldMap(MonitorMode::TYPE_METEOROLOGICAL)), \amisMake()->SelectControl('device_id', '监测设备')->options(Device::where('type', Device::TYPE_METEOROLOGICAL)->get()->pluck('name', 'id')), ]), ), amisMake()->PickerControl('picker_devices', '通风设备')->visibleOn('data.type == '.MonitorMode::TYPE_AIR) ->valueField('id') ->labelField('name') ->multiple(true) ->size('lg') ->source([ 'method' => 'get', 'url' => admin_url('devices?_action=getData&type='.Device::TYPE_AIR), 'data' => [ 'name'=>'${device_name}', ] ]) ->pickerSchema( [ 'mode' => 'table', 'name' => 'monitor_list', 'headerToolbar' => amisMake()->form() ->wrapWithPanel(false) ->className('text-right') ->target('monitor_list') ->mode('inline') ->body([ amisMake()->TextControl('device_name', '名称')->addOn( amis('submit')->label(__('admin.search'))->level('primary') ) ]), 'columns' => [ TableColumn::make()->name('id')->label('ID')->sortable(true), TableColumn::make()->name('name')->label('名称'), TableColumn::make()->name('sn')->label('编号'), TableColumn::make()->name('created_at')->label('创建时间')->type('datetime')->sortable(true), TableColumn::make()->name('updated_at')->label('更新时间')->type('datetime')->sortable(true), ] ] ), amisMake()->PickerControl('picker_devices', '喷雾设备')->visibleOn('data.type == '.MonitorMode::TYPE_ATOMIZING) ->valueField('id') ->labelField('name') ->multiple(false)//喷雾设备只能选择一个 ->size('lg') ->source([ 'method' => 'get', 'url' => admin_url('devices?_action=getData&type='.Device::TYPE_ATOMIZING), 'data' => [ 'name'=>'${device_name}', ] ]) ->pickerSchema( [ 'mode' => 'table', 'name' => 'monitor_list', 'headerToolbar' => amisMake()->form() ->wrapWithPanel(false) ->className('text-right') ->target('monitor_list') ->mode('inline') ->body([ amisMake()->TextControl('device_name', '名称')->addOn( amis('submit')->label(__('admin.search'))->level('primary') ) ]), 'columns' => [ TableColumn::make()->name('id')->label('ID')->sortable(true), TableColumn::make()->name('name')->label('名称'), TableColumn::make()->name('sn')->label('编号'), TableColumn::make()->name('created_at')->label('创建时间')->type('datetime')->sortable(true), TableColumn::make()->name('updated_at')->label('更新时间')->type('datetime')->sortable(true), ] ] ), ]) ])->footer([ amisMake()->Button()->label('保存')->type('submit')->level('primary'), ]) ); } public function saveDevices() { $result = $this->service->saveDevices(request('id'), request()); return $this->autoResponse($result, __('admin.save')); } }