From 001e78a1113b5647d3a28c3fe0e58bb22d1fcbbc Mon Sep 17 00:00:00 2001 From: vine_liutk <961510893@qq.com> Date: Tue, 21 Mar 2023 17:46:30 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=E5=AE=9E=E9=AA=8C=E7=94=B0?= =?UTF-8?q?=E5=9F=BA=E7=A1=80=E6=A8=A1=E5=9D=97=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Admin/Components.php | 14 +++ app/Admin/Controllers/ArticleController.php | 4 + .../Controllers/CustomRegionController.php | 91 +++++++++++++++++++ app/Admin/Controllers/HomeController.php | 2 - .../Controllers/RegionCategoryController.php | 66 ++++++++++++++ app/Admin/Controllers/RegionController.php | 66 ++++++++++++++ app/Admin/routes.php | 11 ++- app/Models/PlantHarvestLog.php | 11 +++ app/Models/Region.php | 11 +++ app/Models/RegionCategory.php | 41 +++++++++ app/Models/RegionDevice.php | 11 +++ app/Models/RegionPlantLog.php | 11 +++ app/Services/Admin/RegionCategoryService.php | 15 +++ app/Services/Admin/RegionService.php | 15 +++ ..._102211_create_region_categories_table.php | 39 ++++++++ ...2023_03_21_104958_create_regions_table.php | 40 ++++++++ ..._21_105731_create_region_devices_table.php | 35 +++++++ ..._105801_create_region_plant_logs_table.php | 36 ++++++++ ...111915_create_plant_harvest_logs_table.php | 35 +++++++ database/seeders/AdminMenuSeeder.php | 6 +- 20 files changed, 554 insertions(+), 6 deletions(-) create mode 100644 app/Admin/Controllers/CustomRegionController.php create mode 100644 app/Admin/Controllers/RegionCategoryController.php create mode 100644 app/Admin/Controllers/RegionController.php create mode 100644 app/Models/PlantHarvestLog.php create mode 100644 app/Models/Region.php create mode 100644 app/Models/RegionCategory.php create mode 100644 app/Models/RegionDevice.php create mode 100644 app/Models/RegionPlantLog.php create mode 100644 app/Services/Admin/RegionCategoryService.php create mode 100644 app/Services/Admin/RegionService.php create mode 100644 database/migrations/2023_03_21_102211_create_region_categories_table.php create mode 100644 database/migrations/2023_03_21_104958_create_regions_table.php create mode 100644 database/migrations/2023_03_21_105731_create_region_devices_table.php create mode 100644 database/migrations/2023_03_21_105801_create_region_plant_logs_table.php create mode 100644 database/migrations/2023_03_21_111915_create_plant_harvest_logs_table.php diff --git a/app/Admin/Components.php b/app/Admin/Components.php index a765ddc..7b80c6f 100644 --- a/app/Admin/Components.php +++ b/app/Admin/Components.php @@ -25,10 +25,24 @@ class Components extends BaseRenderer { public function sortControl($name ='sort', $label = '排序'){ return amisMake()->NumberControl() ->name($name)->label($label) + ->displayMode('enhance') ->value(0) ->min(0); } + /** + * 2位小数输入框 + */ + public function decimalControl($name ='decimal', $label = '数值'){ + return amisMake()->NumberControl() + ->name($name)->label($label) + ->kilobitSeparator(true) + ->percision(2) + ->step(0.01) + ->value(0.00) + ->min(0); + } + /** * 富文本编辑器 */ diff --git a/app/Admin/Controllers/ArticleController.php b/app/Admin/Controllers/ArticleController.php index bc5d6d7..52fe735 100644 --- a/app/Admin/Controllers/ArticleController.php +++ b/app/Admin/Controllers/ArticleController.php @@ -27,6 +27,10 @@ class ArticleController extends AdminController ->columns([ TableColumn::make()->name('id')->label('ID')->sortable(true), TableColumn::make()->name('title')->label('标题'), + TableColumn::make()->name('category_id')->label('分类')->className('text-primary'), + TableColumn::make()->name('sub_title')->label('副标题'), + TableColumn::make()->name('is_enable')->type('switch')->label('显示'), + TableColumn::make()->name('published_at')->label('发布时间')->type('datetime')->sortable(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'), diff --git a/app/Admin/Controllers/CustomRegionController.php b/app/Admin/Controllers/CustomRegionController.php new file mode 100644 index 0000000..206f998 --- /dev/null +++ b/app/Admin/Controllers/CustomRegionController.php @@ -0,0 +1,91 @@ +basePage()->body([ + \amisMake()->GridNav()->options( + $this->regionList() + ) + ]); + + return $this->response()->success($page); + } + + private function regionList(){ + $regionList = [ + [ + 'id' => 1, + 'name' => '实验田1', + 'cover' => 'https://internal-amis-res.cdn.bcebos.com/images/icon-1.png' + ] + ]; + return array_map(function($region){ + return [ + "icon"=> $region['cover'], + "text"=> $region['name'], + 'clickAction' => [ + 'actionType'=> 'dialog', + 'dialog' => \amisMake()->Dialog()->title($region['name']) + ->size('full')->body([ + \amisMake()->Tabs()->tabsMode('simple')->name('detailTab')->tabs([ + [ + 'title' => '基地详情', + 'value' => 'detail', + 'tab'=>\amisMake()->Service()->schemaApi(admin_url('custom-region-detail?type=detail')) + ], + [//有监控设备才有 + 'title' => '监控视频', + 'value' => 'video', + 'tab'=>\amisMake()->Service()->schemaApi(admin_url('custom-region-detail?type=video')) + ], + [//有气象设备才有 + 'title' => '气象数据', + 'value' => 'qixiang', + 'tab'=>\amisMake()->Service()->schemaApi(admin_url('custom-region-detail?type=qixiang')) + ], + [//有水质设备才有 + 'title' => '水质数据', + 'value' => 'shuizi', + 'tab'=>\amisMake()->Service()->schemaApi(admin_url('custom-region-detail?type=shuizi')) + ], + [//有土壤设备才有 + 'title' => '土壤数据', + 'value' => 'turang', + 'tab'=>\amisMake()->Service()->schemaApi(admin_url('custom-region-detail?type=turang')) + ], + [//有通风设备才有 + 'title' => '通风设备', + 'value' => 'tongfeng', + 'tab'=>\amisMake()->Service()->schemaApi(admin_url('custom-region-detail?type=tongfeng')) + ], + [//有喷灌设备才有 + 'title' => '喷灌设备', + 'value' => 'penguan', + 'tab'=>\amisMake()->Service()->schemaApi(admin_url('custom-region-detail?type=penguan')) + ], + + ]), + ]) + ] + ]; + }, $regionList); + } + + public function regionDetail(Request $request) + { + return \amisMake()->Wrapper()->body($request->type ?? '找不到type'); + } +} diff --git a/app/Admin/Controllers/HomeController.php b/app/Admin/Controllers/HomeController.php index 5028ebe..9c687fd 100644 --- a/app/Admin/Controllers/HomeController.php +++ b/app/Admin/Controllers/HomeController.php @@ -17,8 +17,6 @@ use Slowlyo\OwlAdmin\Controllers\AdminController; class HomeController extends AdminController { - protected string $queryPath = 'dashboard'; - protected string $pageTitle = '首页'; public function index(): JsonResponse|JsonResource diff --git a/app/Admin/Controllers/RegionCategoryController.php b/app/Admin/Controllers/RegionCategoryController.php new file mode 100644 index 0000000..4ff9739 --- /dev/null +++ b/app/Admin/Controllers/RegionCategoryController.php @@ -0,0 +1,66 @@ +baseCRUD() + //关闭查询 + ->filterTogglable(false) + //去掉分页-start + ->loadDataOnce(true) + ->footerToolbar([]) + //去掉分页-end + ->headerToolbar([ + $this->createButton(true), + ...$this->baseHeaderToolBar(), + ]) + ->columns([ + TableColumn::make()->name('id')->label('ID')->sortable(true), + TableColumn::make()->name('name')->label('名称'), + // TableColumn::make()->name('parent.name')->label('父级ID'), + TableColumn::make()->name('sort')->label('排序'), + TableColumn::make()->name('is_enable')->type('switch')->label('显示'), + TableColumn::make()->name('created_at')->label('创建时间')->type('datetime')->sortable(true), + $this->rowActions(true), + ]); + + return $this->baseList($crud); + } + + public function form(): Form + { + return $this->baseForm()->body([ + amisMake()->TextControl()->name('name')->label('名称')->required(true), + amisMake()->ImageControl()->name('icon')->label('封面图')->autoUpload(true), + amisMake()->TextControl()->name('description')->label('描述'), + Components::make()->parentControl(), + Components::make()->sortControl(), + amisMake()->SwitchControl()->name('is_enable')->label('状态'), + ]); + } + + public function detail(): Form + { + return $this->baseDetail()->body([ + TextControl::make()->static(true)->name('id')->label('ID'), + TextControl::make()->static(true)->name('name')->label('名称'), + TextControl::make()->static(true)->name('created_at')->label('创建时间'), + TextControl::make()->static(true)->name('updated_at')->label('更新时间') + ]); + } +} diff --git a/app/Admin/Controllers/RegionController.php b/app/Admin/Controllers/RegionController.php new file mode 100644 index 0000000..d6b8741 --- /dev/null +++ b/app/Admin/Controllers/RegionController.php @@ -0,0 +1,66 @@ +baseCRUD() + ->filterTogglable(false) + ->headerToolbar([ + $this->createButton(true, 'lg'), + ...$this->baseHeaderToolBar(), + ]) + ->columns([ + TableColumn::make()->name('id')->label('ID')->sortable(true), + TableColumn::make()->name('name')->label('名称'), + TableColumn::make()->name('category_id')->label('分类')->className('text-primary'), + TableColumn::make()->name('area')->label('面积'), + TableColumn::make()->name('device_count')->label('设备数量'), + TableColumn::make()->name('is_enable')->type('switch')->label('显示'), + TableColumn::make()->name('created_at')->label('创建时间')->type('datetime')->sortable(true), + // TableColumn::make()->name('updated_at')->label('更新时间')->type('datetime')->sortable(true), + $this->rowActions(true, 'lg'), + ]); + + return $this->baseList($crud); + } + + public function form(): Form + { + return $this->baseForm()->body([ + TextControl::make()->name('name')->label('名称')->required(true), + Components::make()->parentControl('', 'category_id', '分类'), + Components::make()->fuEditorControl('description', '介绍'), + Components::make()->decimalControl('area', '面积m²'), + Components::make()->sortControl(), + \amisMake()->SwitchControl()->name('is_enable')->label('显示'), + \amisMake()->TransferControl()->name('devices')->label('关联设备') + ->selectMode('chained')->searchable(true)->options(), + + ]); + } + + public function detail(): Form + { + return $this->baseDetail()->body([ + TextControl::make()->static(true)->name('id')->label('ID'), + TextControl::make()->static(true)->name('name')->label('名称'), + TextControl::make()->static(true)->name('created_at')->label('创建时间'), + TextControl::make()->static(true)->name('updated_at')->label('更新时间') + ]); + } +} diff --git a/app/Admin/routes.php b/app/Admin/routes.php index f0de428..219071a 100644 --- a/app/Admin/routes.php +++ b/app/Admin/routes.php @@ -14,7 +14,7 @@ Route::group([ $router->get('keywords/tree-list', '\App\Admin\Controllers\KeywordController@getTreeList')->name('api.keywords.tree-list'); }); - $router->resource('dashboard', \App\Admin\Controllers\HomeController::class); + $router->get('dashboard', '\App\Admin\Controllers\HomeController@index'); //公告管理 $router->resource('admin-notices', \App\Admin\Controllers\AdminNoticeController::class); @@ -32,6 +32,15 @@ Route::group([ $router->resource('keywords', \App\Admin\Controllers\KeywordController::class); //设备管理 $router->resource('devices', \App\Admin\Controllers\DeviceController::class); + //区域分类 + $router->resource('region-categories', \App\Admin\Controllers\RegionCategoryController::class); + //区域列表 + $router->resource('regions', \App\Admin\Controllers\RegionController::class); + + //特殊菜单 + $router->get('custom-region', '\App\Admin\Controllers\CustomRegionController@index'); + $router->post('custom-region-detail', '\App\Admin\Controllers\CustomRegionController@regionDetail'); + $router->resource('system/settings', \App\Admin\Controllers\SettingController::class); }); diff --git a/app/Models/PlantHarvestLog.php b/app/Models/PlantHarvestLog.php new file mode 100644 index 0000000..92ad878 --- /dev/null +++ b/app/Models/PlantHarvestLog.php @@ -0,0 +1,11 @@ +parent_id) { + // 将层级设为 1 + $category->level = 1; + // 将 path 设为 - + $category->path = '-'; + } else { + // 将层级设为父类目的层级 + 1 + $category->level = $category->parent->level + 1; + // 将 path 值设为父类目的 path 追加父类目 ID 以及最后跟上一个 - 分隔符 + $category->path = $category->parent->path.$category->parent_id.'-'; + } + }); + } + + public function parent() + { + return $this->belongsTo(self::class, 'parent_id'); + } +} diff --git a/app/Models/RegionDevice.php b/app/Models/RegionDevice.php new file mode 100644 index 0000000..08b13e0 --- /dev/null +++ b/app/Models/RegionDevice.php @@ -0,0 +1,11 @@ +id(); + $table->string('name')->comment('分类名称'); + $table->string('icon')->nullable()->comment('封面图'); + $table->string('description')->nullable()->comment('描述'); + $table->unsignedBigInteger('parent_id')->default(0)->comment('父级ID'); + $table->unsignedInteger('level')->default(1)->comment('层级'); + $table->unsignedInteger('sort')->default(0)->comment('排序'); + $table->unsignedTinyInteger('is_enable')->default(1)->comment('状态'); + $table->string('path')->default('-')->comment('所有的父级ID'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('region_categories'); + } +}; diff --git a/database/migrations/2023_03_21_104958_create_regions_table.php b/database/migrations/2023_03_21_104958_create_regions_table.php new file mode 100644 index 0000000..621c197 --- /dev/null +++ b/database/migrations/2023_03_21_104958_create_regions_table.php @@ -0,0 +1,40 @@ +id(); + $table->string('name'); + $table->string('cover')->nullable()->comment('封面图'); + $table->decimal('area')->default(0.00)->comment('面积'); + $table->text('description')->nullable()->comment('描述'); + $table->unsignedBigInteger('category_id')->nullable()->comment('分类'); + $table->unsignedTinyInteger('is_recommend')->default(0)->comment('推荐开关'); + $table->unsignedTinyInteger('is_enable')->default(1)->comment('显示开关'); + $table->unsignedInteger('sort')->default(0)->comment('排序'); + $table->unsignedTinyInteger('status')->default(0)->comment('0未使用,1种植中,2维护中,3已废弃'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('regions'); + } +}; diff --git a/database/migrations/2023_03_21_105731_create_region_devices_table.php b/database/migrations/2023_03_21_105731_create_region_devices_table.php new file mode 100644 index 0000000..8f1654c --- /dev/null +++ b/database/migrations/2023_03_21_105731_create_region_devices_table.php @@ -0,0 +1,35 @@ +id(); + $table->unsignedBigInteger('region_id'); + $table->unsignedBigInteger('device_id'); + $table->unsignedTinyInteger('device_type')->comment('类型: 1 监控设备, 2 土壤设备, 3 水质设备, 4 气象设备'); + $table->text('config')->nullable()->comment('配置信息'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('region_devices'); + } +}; diff --git a/database/migrations/2023_03_21_105801_create_region_plant_logs_table.php b/database/migrations/2023_03_21_105801_create_region_plant_logs_table.php new file mode 100644 index 0000000..cd2b316 --- /dev/null +++ b/database/migrations/2023_03_21_105801_create_region_plant_logs_table.php @@ -0,0 +1,36 @@ +id(); + $table->unsignedBigInteger('region_id'); + $table->string('plant_name')->comment('种植名称'); + $table->text('description')->nullable()->comment('描述'); + $table->timestamp('start_at')->nullable()->comment('种植开始时间'); + $table->unsignedTinyInteger('status')->default(0)->comment('0未开始,1种植中,2已结束'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('region_plant_logs'); + } +}; diff --git a/database/migrations/2023_03_21_111915_create_plant_harvest_logs_table.php b/database/migrations/2023_03_21_111915_create_plant_harvest_logs_table.php new file mode 100644 index 0000000..ecbd8de --- /dev/null +++ b/database/migrations/2023_03_21_111915_create_plant_harvest_logs_table.php @@ -0,0 +1,35 @@ +id(); + $table->unsignedBigInteger('plant_id'); + $table->decimal('area')->default(0.00)->comment('面积/平米'); + $table->decimal('output')->default(0.00)->comment('产量/千克'); + $table->timestamp('harvest_at')->nullable()->comment('收获时间'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('plant_harvest_logs'); + } +}; diff --git a/database/seeders/AdminMenuSeeder.php b/database/seeders/AdminMenuSeeder.php index 8d62f48..3ab2151 100644 --- a/database/seeders/AdminMenuSeeder.php +++ b/database/seeders/AdminMenuSeeder.php @@ -32,20 +32,20 @@ class AdminMenuSeeder extends Seeder ['title' => '区域管理', 'icon' => 'icon-park:category-management', 'url' => '', 'children' => [ - ['title' => '分类管理', 'icon' => 'icon-park:graphic-stitching-four', 'url' => '/region-categories'], + ['title' => '区域分类', 'icon' => 'icon-park:graphic-stitching-four', 'url' => '/region-categories'], ['title' => '实验田', 'icon' => 'icon-park:freezing-line-column', 'url' => '/regions'], ] ], ['title' => '育秧中心', 'icon' => 'icon-park:lotus', 'url' => '', 'children' => [ ['title' => '大棚控制', 'icon' => 'icon-park:link-one', 'url' => 'https://www.baidu.com', 'url_type'=>2], - ['title' => '育秧列表', 'icon' => 'icon-park:more-app', 'url' => '/yuyang1'], + ['title' => '育秧列表', 'icon' => 'icon-park:more-app', 'url' => '/custom-region'], ] ], ['title' => '实验稻田', 'icon' => 'icon-park:four-leaves', 'url' => '', 'children' => [ ['title' => '农机控制', 'icon' => 'icon-park:link-one', 'url' => 'https://www.baidu.com', 'url_type'=>2], - ['title' => '稻田列表', 'icon' => 'icon-park:more-app', 'url' => '/daotian2'], + ['title' => '稻田列表', 'icon' => 'icon-park:more-app', 'url' => '/custom-region'], ] ],