From 3968270cf30e6212a8b33547b07804ef9769a03c Mon Sep 17 00:00:00 2001 From: vine_liutk <961510893@qq.com> Date: Tue, 9 May 2023 19:05:04 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=E5=AE=9E=E9=AA=8C=E7=94=B0?= =?UTF-8?q?=E7=82=B9=E5=87=BB=E6=89=93=E5=BC=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/CustomRegionController.php | 88 +++---------------- app/Admin/Controllers/RegionController.php | 17 +++- app/Admin/routes.php | 1 + app/Models/Region.php | 76 ++++++++++++++++ 4 files changed, 104 insertions(+), 78 deletions(-) diff --git a/app/Admin/Controllers/CustomRegionController.php b/app/Admin/Controllers/CustomRegionController.php index a9e3165..6bb167f 100644 --- a/app/Admin/Controllers/CustomRegionController.php +++ b/app/Admin/Controllers/CustomRegionController.php @@ -3,14 +3,11 @@ namespace App\Admin\Controllers; use Illuminate\Http\Request; -use Slowlyo\OwlAdmin\Renderers\Page; use Slowlyo\OwlAdmin\Controllers\AdminController; use App\Admin\Components; use App\Models\Region; -use App\Models\Device; use Slowlyo\OwlAdmin\Renderers\DialogAction; use Slowlyo\OwlAdmin\Renderers\Dialog; -use Slowlyo\OwlAdmin\Renderers\Service; class CustomRegionController extends AdminController { @@ -43,84 +40,13 @@ class CustomRegionController extends AdminController $regionList = Region::with('devices')->where('category_id', $categoryId)->get(); $resList = []; foreach($regionList as $region){ - $tabs = [ - [ - 'title' => '基地详情', - 'value' => 'detail', - 'tab'=>\amisMake()->Service()->schemaApi(admin_url('custom-region-detail?id='.$region->id)), - 'unmountOnExit' => true,//每次切换tab都要销毁 - 'sort' => 0, - ], - ]; - if($region->devices){ - foreach($region->devices as $device){ - switch($device->type) - { - case Device::TYPE_MONITOR: - $tabs[] = [//有监控设备才有 - 'title' => '监控视频', - 'value' => 'monitor', - 'tab'=>\amisMake()->Service()->schemaApi(admin_url('custom-region-monitor?id='.$region->id)), - 'unmountOnExit' => true,//每次切换tab都要销毁 - 'sort' => 1, - ]; - break; - case Device::TYPE_SOIL: - $tabs[] = [//有土壤设备才有 - 'title' => '土壤数据', - 'value' => 'turang', - 'tab'=>\amisMake()->Service()->schemaApi(admin_url('custom-region-soil?id='.$region->id)), - 'unmountOnExit' => true,//每次切换tab都要销毁 - 'sort' => 2, - ]; - break; - case Device::TYPE_WATER_QUALITY: - $tabs[] = [//有水质设备才有 - 'title' => '水质数据', - 'value' => 'shuizi', - 'tab'=>\amisMake()->Service()->schemaApi(admin_url('custom-region-water?id='.$region->id)), - 'unmountOnExit' => true,//每次切换tab都要销毁 - 'sort' => 3, - ]; - break; - case Device::TYPE_METEOROLOGICAL: - $tabs[] = [//有气象设备才有 - 'title' => '气象数据', - 'value' => 'qixiang', - 'tab'=>\amisMake()->Service()->schemaApi(admin_url('custom-region-meteorological?id='.$region->id)), - 'unmountOnExit' => true,//每次切换tab都要销毁 - 'sort' => 4, - ]; - break; - case Device::TYPE_AIR: - $tabs[] = [//有通风设备才有 - 'title' => '通风设备', - 'value' => 'air', - 'tab'=>\amisMake()->Service()->schemaApi(admin_url('custom-region-air?id='.$region->id)), - 'unmountOnExit' => true,//每次切换tab都要销毁 - 'sort' => 5, - ]; - break; - case Device::TYPE_ATOMIZING: - $tabs[] = [//有喷雾设备才有 - 'title' => '喷雾设备', - 'value' => 'wasserstrahl', - 'tab'=>\amisMake()->Service()->schemaApi(admin_url('custom-region-wasserstrahl?id='.$region->id)), - 'unmountOnExit' => true,//每次切换tab都要销毁 - 'sort' => 6, - ]; - break; - } - continue; - } - } - $tabs = array_merge(collect($tabs)->sortBy('sort')->toArray(), []); + $tabs = Region::regionTabConfig($region); $resList[] = [ "icon"=> $region->cover ?? '', "text"=> $region->name, 'clickAction' => DialogAction::make()->dialog( Dialog::make()->title($region['name'])->body([ - \amisMake()->Tabs()->tabsMode('simple')->name('detailTab')->tabs($tabs), + \amisMake()->Tabs()->tabsMode('simple')->tabs($tabs), ])->size('full') ), ]; @@ -128,6 +54,14 @@ class CustomRegionController extends AdminController return $resList; } + public function getRegionTabs(Request $request){ + $region = Region::find($request->id); + $tabs = Region::regionTabConfig($region); + $page = \amisMake()->Tabs()->tabsMode('simple')->tabs($tabs); + + return $this->response()->success($page); + } + public function regionDetail(Request $request) { $id = $request->id; @@ -141,7 +75,7 @@ class CustomRegionController extends AdminController ->body([ \amisMake()->TextControl()->static(true)->name('name')->label('名称')->value($region->name), \amisMake()->TextControl()->static(true)->name('director')->label('负责人')->value($region->director), - \amisMake()->TextControl()->static(true)->name('category')->label('分类')->value($region->category?->name ?? ''), + \amisMake()->TextControl()->static(true)->name('category_name')->label('分类')->value($region->category?->name ?? ''), \amisMake()->TextControl()->static(true)->name('area')->label('面积m²')->value($region?->area ?? ''), \amisMake()->TextControl()->static(true)->name('sort')->label('排序')->value($region?->sort ?? '0'), \amisMake()->SwitchControl()->static(true)->name('is_enable')->name('is_enable')->label('显示')->value($region?->is_enable ?? 0), diff --git a/app/Admin/Controllers/RegionController.php b/app/Admin/Controllers/RegionController.php index ff327f9..08b4c99 100644 --- a/app/Admin/Controllers/RegionController.php +++ b/app/Admin/Controllers/RegionController.php @@ -12,7 +12,9 @@ use Slowlyo\OwlAdmin\Renderers\Button; use Slowlyo\OwlAdmin\Renderers\Image; use App\Admin\Components; use App\Models\Device; +use App\Models\Region; use Slowlyo\OwlAdmin\Renderers\Html; +use Illuminate\Http\Request; class RegionController extends AdminController { @@ -48,7 +50,12 @@ class RegionController extends AdminController TableColumn::make()->name('is_enable')->type('switch')->label('显示')->quickEdit(Components::make()->enableControl('is_enable', '', 'inline')->saveImmediately(true)), TableColumn::make()->name('created_at')->label('创建时间')->type('datetime')->sortable(true), // TableColumn::make()->name('updated_at')->label('更新时间')->type('datetime')->sortable(true), - $this->rowActions(true, 'lg'), + amisMake()->Operation()->label(__('admin.actions'))->buttons([ + $this->showRegion(), + $this->rowEditButton(true, 'lg'), + $this->rowDeleteButton() + ]), + ]); return $this->baseList($crud); @@ -94,4 +101,12 @@ class RegionController extends AdminController TextControl::make()->static(true)->name('updated_at')->label('更新时间') ]); } + + private function showRegion(){ + return amisMake()->DialogAction()->icon('fa-regular fa-eye')->label('查看')->level('link')->dialog( + amisMake()->Dialog()->title('查看详情')->body([ + \amisMake()->Service()->schemaApi(admin_url('custom-region-tabs?id=${id}')) + ])->size('full')->actions([]) + ); + } } diff --git a/app/Admin/routes.php b/app/Admin/routes.php index 6831577..25cf941 100644 --- a/app/Admin/routes.php +++ b/app/Admin/routes.php @@ -58,6 +58,7 @@ Route::group([ //特殊菜单 $router->get('custom-region/{type}', '\App\Admin\Controllers\CustomRegionController@regionIndex'); + $router->post('custom-region-tabs', '\App\Admin\Controllers\CustomRegionController@getRegionTabs'); $router->post('custom-region-detail', '\App\Admin\Controllers\CustomRegionController@regionDetail'); $router->get('custom-region-monitor', '\App\Admin\Controllers\DeviceController@monitorList'); diff --git a/app/Models/Region.php b/app/Models/Region.php index b138c29..155c650 100644 --- a/app/Models/Region.php +++ b/app/Models/Region.php @@ -27,4 +27,80 @@ class Region extends Model public function devices(){ return $this->belongsToMany(Device::class, RegionDevice::class, 'region_id', 'device_id')->withTimestamps(); } + + public static function regionTabConfig($region = null){ + $tabs = [ + [ + 'title' => '基地详情', + 'value' => 'detail', + 'tab'=>\amisMake()->Service()->schemaApi(admin_url('custom-region-detail?id='.($region?->id ?? '${id}'))), + 'unmountOnExit' => true,//每次切换tab都要销毁 + 'sort' => 0, + ], + ]; + if($region?->devices){ + foreach($region->devices as $device){ + switch($device->type) + { + case Device::TYPE_MONITOR: + $tabs[] = [//有监控设备才有 + 'title' => '监控视频', + 'value' => 'monitor', + 'tab'=>\amisMake()->Service()->schemaApi(admin_url('custom-region-monitor?id='.$region->id)), + 'unmountOnExit' => true,//每次切换tab都要销毁 + 'sort' => 1, + ]; + break; + case Device::TYPE_SOIL: + $tabs[] = [//有土壤设备才有 + 'title' => '土壤数据', + 'value' => 'turang', + 'tab'=>\amisMake()->Service()->schemaApi(admin_url('custom-region-soil?id='.$region->id)), + 'unmountOnExit' => true,//每次切换tab都要销毁 + 'sort' => 2, + ]; + break; + case Device::TYPE_WATER_QUALITY: + $tabs[] = [//有水质设备才有 + 'title' => '水质数据', + 'value' => 'shuizi', + 'tab'=>\amisMake()->Service()->schemaApi(admin_url('custom-region-water?id='.$region->id)), + 'unmountOnExit' => true,//每次切换tab都要销毁 + 'sort' => 3, + ]; + break; + case Device::TYPE_METEOROLOGICAL: + $tabs[] = [//有气象设备才有 + 'title' => '气象数据', + 'value' => 'qixiang', + 'tab'=>\amisMake()->Service()->schemaApi(admin_url('custom-region-meteorological?id='.$region->id)), + 'unmountOnExit' => true,//每次切换tab都要销毁 + 'sort' => 4, + ]; + break; + case Device::TYPE_AIR: + $tabs[] = [//有通风设备才有 + 'title' => '通风设备', + 'value' => 'air', + 'tab'=>\amisMake()->Service()->schemaApi(admin_url('custom-region-air?id='.$region->id)), + 'unmountOnExit' => true,//每次切换tab都要销毁 + 'sort' => 5, + ]; + break; + case Device::TYPE_ATOMIZING: + $tabs[] = [//有喷雾设备才有 + 'title' => '喷雾设备', + 'value' => 'wasserstrahl', + 'tab'=>\amisMake()->Service()->schemaApi(admin_url('custom-region-wasserstrahl?id='.$region->id)), + 'unmountOnExit' => true,//每次切换tab都要销毁 + 'sort' => 6, + ]; + break; + } + continue; + } + } + $tabs = array_merge(collect($tabs)->sortBy('sort')->toArray(), []); + return $tabs; + } }