diff --git a/app/Admin/Controllers/MonitorModeController.php b/app/Admin/Controllers/MonitorModeController.php index afc436a..bc8b521 100644 --- a/app/Admin/Controllers/MonitorModeController.php +++ b/app/Admin/Controllers/MonitorModeController.php @@ -10,6 +10,7 @@ use Slowlyo\OwlAdmin\Controllers\AdminController; use App\Services\Admin\MonitorModeService; use App\Admin\Components; use App\Models\MonitorMode; +use App\Models\Device; /** * @property MonitorModeService $service @@ -39,6 +40,7 @@ class MonitorModeController extends AdminController TableColumn::make()->name('type')->type('mapping')->map(MonitorMode::typeMap())->label('类型'), TableColumn::make()->name('created_at')->label(__('admin.created_at'))->type('datetime')->sortable(true), amisMake()->Operation()->label(__('admin.actions'))->buttons([ + $this->setAboutDevice(), $this->rowDeleteButton() ]), ]); @@ -58,12 +60,147 @@ class MonitorModeController extends AdminController ]); } - public function detail(): Form - { - return $this->baseDetail()->body([ - TextControl::make()->static()->name('id')->label('ID'), - TextControl::make()->static()->name('created_at')->label(__('admin.created_at')), - TextControl::make()->static()->name('updated_at')->label(__('admin.updated_at')) - ]); + 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(''))//--todo + ->initApi($this->getEditGetDataPath()) + ->mode('normal') + ->data(['id' => '${id}']) + ->body([ + amisMake()->RadiosControl()->name('type')->label('类型')->options(MonitorMode::typeMap())->disabled(true), + amisMake()->PickerControl('monitor_devices', '监控设备')->visibleOn('data.type == '.MonitorMode::TYPE_MONITOR) + ->valueField('id') + ->labelField('name') + ->multiple(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('soil_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', '监测设备'), + ]), + ), + amisMake()->ArrayControl('water_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', '监测设备'), + ]), + ), + amisMake()->ArrayControl('meteorological_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', '监测设备'), + ]), + ), + amisMake()->PickerControl('air_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('atomizing_devices', '喷雾设备')->visibleOn('data.type == '.MonitorMode::TYPE_ATOMIZING) + ->valueField('id') + ->labelField('name') + ->multiple(true) + ->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'), + ]) + ); } } diff --git a/app/Models/Device.php b/app/Models/Device.php index ee5e6af..39e3263 100644 --- a/app/Models/Device.php +++ b/app/Models/Device.php @@ -46,7 +46,7 @@ class Device extends Model return [ self::TYPE_MONITOR => '监控设备', self::TYPE_SOIL => '土壤设备', - self::TYPE_WATER_QUALITY => '水质设备', + // self::TYPE_WATER_QUALITY => '水质设备', self::TYPE_METEOROLOGICAL => '气象设备', self::TYPE_AIR => '通风设备', self::TYPE_ATOMIZING => '喷雾设备' diff --git a/app/Models/MonitorMode.php b/app/Models/MonitorMode.php index bd27561..0f51f13 100644 --- a/app/Models/MonitorMode.php +++ b/app/Models/MonitorMode.php @@ -27,13 +27,49 @@ class MonitorMode extends Model return [ self::TYPE_MONITOR => '视频监控', self::TYPE_SOIL => '土壤监测', - self::TYPE_WATER_QUALITY => '水质监测', + // self::TYPE_WATER_QUALITY => '水质监测', self::TYPE_METEOROLOGICAL => '气象监测', self::TYPE_AIR => '通风控制', self::TYPE_ATOMIZING => '喷雾控制' ]; } + public static function fieldMap($type) + { + $arr = []; + switch ($type) { + case self::TYPE_SOIL: + $arr = [ + 'conductivity'=>'导电率', + 'humidity'=>'湿度', + 'temperature'=>'温度', + 'n'=>'氮', + 'p'=>'磷', + 'k'=>'钾' + ]; + break; + case self::TYPE_WATER_QUALITY: + $arr = [ + ]; + break; + case self::TYPE_METEOROLOGICAL: + $arr = [ + 'box_temperature' => '温度', + 'box_humidity' => '湿度', + 'box_illumination' => '光照强度', + 'moment_rainfall' => '降雨量', + 'wind_speed' => '风速', + 'wind_direction' => '风向', + 'box_noise' => '噪音', + 'pm10' => 'PM10', + 'pm25' => 'PM25', + 'box_co2' => 'CO2' + ]; + break; + } + return $arr; + } + protected function serializeDate(\DateTimeInterface $date){ return $date->format('Y-m-d H:i:s'); } diff --git a/app/Models/RegionDevice.php b/app/Models/RegionDevice.php deleted file mode 100644 index 08b13e0..0000000 --- a/app/Models/RegionDevice.php +++ /dev/null @@ -1,11 +0,0 @@ -