diff --git a/app/Admin/Controllers/InstitutionController.php b/app/Admin/Controllers/InstitutionController.php new file mode 100644 index 0000000..584e99a --- /dev/null +++ b/app/Admin/Controllers/InstitutionController.php @@ -0,0 +1,65 @@ +baseCRUD() + ->headerToolbar([ + $this->createButton(true, 'md'), + amis('reload')->align('right'), + amis('filter-toggler')->align('right'), + ]) + ->filter($this->baseFilter()->body([ + + ] + )) + ->columns([ + amis()->TableColumn()->make()->name('id')->label('ID')->sortable(true), + amis()->TableColumn('parent.name', __('admin.institutions.parent')), + amis()->TableColumn('name', __('admin.institutions.name')), + amis()->TableColumn('code', __('admin.institutions.code'))->copyable(true), + amis()->TableColumn('type.name', __('admin.institutions.type'))->className('text-primary'), + amis()->TableColumn('address', __('admin.institutions.address')), + amis()->TableColumn('person.name', __('admin.institutions.person')), + amis()->TableColumn('sort', __('admin.institutions.sort')), + amis()->TableColumn('created_at', __('admin.created_at'))->type('datetime')->sortable(true), + amisMake()->Operation()->label(__('admin.actions'))->buttons([ + $this->rowEditButton(true, 'md'), + $this->rowDeleteButton(), + ]), + ]); + + return $this->baseList($crud); + } + + public function form(): Form + { + return $this->baseForm()->body([ + amis()->SelectControl('type_id', __('admin.institutions.type'))->options(Keyword::where('parent_key', 'institution_type')->pluck('name', 'id')->toArray()), + Components::make()->parentControl(admin_url('api/institutions/tree-list'), 'parent_id', __('admin.institutions.parent'), 'name', 'id'), + amis()->TextControl('name', __('admin.institutions.name'))->required(true), + amis()->TextControl('code', __('admin.institutions.code')), + amis()->TextControl('address', __('admin.institutions.address')), + amis()->SelectControl('person_id', __('admin.institutions.person'))->options([]),//搜索人-todo, + Components::make()->sortControl('sort', __('admin.institutions.sort')), + ]); + } + + public function getTreeList(Request $request){ + return $this->service->getTree(); + } +} \ No newline at end of file diff --git a/app/Admin/routes.php b/app/Admin/routes.php index 0cc5c48..50050a6 100644 --- a/app/Admin/routes.php +++ b/app/Admin/routes.php @@ -13,6 +13,7 @@ Route::group([ 'prefix' => 'api', ], function (Router $router) { $router->get('keywords/tree-list', '\App\Admin\Controllers\KeywordController@getTreeList')->name('api.keywords.tree-list'); + $router->get('institutions/tree-list', '\App\Admin\Controllers\InstitutionController@getTreeList')->name('api.institution.tree-list'); }); $router->resource('index', \App\Admin\Controllers\HomeController::class); @@ -45,7 +46,7 @@ Route::group([ $router->resource('nation', \App\Admin\Controllers\KeywordController::class); $router->resource('political_face', \App\Admin\Controllers\KeywordController::class); $router->resource('educational_level', \App\Admin\Controllers\KeywordController::class); - $router->resource('institution', \App\Admin\Controllers\KeywordController::class);//机构管理-todo + $router->resource('institutions', \App\Admin\Controllers\InstitutionController::class);//机构管理 $router->resource('oral_disputes', \App\Admin\Controllers\KeywordController::class); $router->resource('sanitary_inspection', \App\Admin\Controllers\KeywordController::class); $router->resource('book_cate', \App\Admin\Controllers\KeywordController::class); diff --git a/app/Models/Filters/InstitutionFilter.php b/app/Models/Filters/InstitutionFilter.php new file mode 100644 index 0000000..4594c22 --- /dev/null +++ b/app/Models/Filters/InstitutionFilter.php @@ -0,0 +1,17 @@ +where('id', $id); + } +} diff --git a/app/Models/Institution.php b/app/Models/Institution.php index b5baf60..f77ed08 100644 --- a/app/Models/Institution.php +++ b/app/Models/Institution.php @@ -24,4 +24,14 @@ class Institution extends Model 'sort', 'remarks' ]; + + public function parent() + { + return $this->belongsTo(static::class, 'parent_id'); + } + + public function type() + { + return $this->belongsTo(Keyword::class, 'type_id'); + } } diff --git a/app/Services/Admin/InstitutionService.php b/app/Services/Admin/InstitutionService.php new file mode 100644 index 0000000..5ac9384 --- /dev/null +++ b/app/Services/Admin/InstitutionService.php @@ -0,0 +1,25 @@ +query()->filter(request()->all(), $this->modelFilterName)->orderByDesc('sort')->get(); + $minNum = $list->min('parent_id'); + return !$list->isEmpty() ? array2tree($list->toArray(), $minNum) :[]; + } +} \ No newline at end of file diff --git a/database/seeders/AdminMenuSeeder.php b/database/seeders/AdminMenuSeeder.php index 84d72c4..0f238e2 100644 --- a/database/seeders/AdminMenuSeeder.php +++ b/database/seeders/AdminMenuSeeder.php @@ -44,7 +44,7 @@ class AdminMenuSeeder extends Seeder ['title' => 'nation', 'icon' => 'fluent:people-community-16-regular', 'url' => '/nation?parent_name=nation&has_owner=0', 'order'=>8],//民族管理 ['title' => 'political_face', 'icon' => 'fluent:people-star-24-regular', 'url' => '/political_face?parent_name=political_face&has_owner=0', 'order'=>9],//政治面貌 ['title' => 'educational_level', 'icon' => 'fluent:people-edit-24-regular', 'url' => '/educational_level?parent_name=educational_level&has_owner=0', 'order'=>10],//文化程度 - ['title' => 'institution', 'icon' => 'fluent:people-call-20-regular', 'url' => '/institution', 'order'=>11],//机构管理-todo + ['title' => 'institution', 'icon' => 'fluent:people-call-20-regular', 'url' => '/institutions', 'order'=>11],//机构管理-todo ['title' => 'oral_disputes', 'icon' => 'icon-park-outline:people-speak', 'url' => '/oral_disputes?parent_name=oral_disputes&has_owner=0', 'order'=>12],//口头纠纷 ['title' => 'sanitary_inspection', 'icon' => 'carbon:clean', 'url' => '/sanitary_inspection?parent_name=sanitary_inspection&has_owner=0', 'order'=>13],//卫生检查 ['title' => 'book_cate', 'icon' => 'ic:twotone-menu-book', 'url' => '/book_cate?parent_name=book_cate&has_owner=0', 'order'=>14],//图书类型 diff --git a/database/seeders/KeywordSeeder.php b/database/seeders/KeywordSeeder.php index 61c967f..638d8e4 100644 --- a/database/seeders/KeywordSeeder.php +++ b/database/seeders/KeywordSeeder.php @@ -21,7 +21,7 @@ class KeywordSeeder extends Seeder //标签value填写色号,指定标签颜色 ['key' => 'article_tag', 'name' => '文章标签', 'list' => []], ['key' => 'banner_address', 'name' => '广告位置', 'list' => []], - ['key' => 'institution_cate', 'name' => '组织属性', 'list' => []], + ['key' => 'institution_type', 'name' => '组织属性', 'list' => []], //菜单 ['key' => 'financial_cate', 'name' => '财务报表类型', 'list' => []], ['key' => 'file_cate', 'name' => '档案类型', 'list' => []], diff --git a/lang/zh_CN/admin.php b/lang/zh_CN/admin.php index f69b279..803066f 100644 --- a/lang/zh_CN/admin.php +++ b/lang/zh_CN/admin.php @@ -307,5 +307,17 @@ return [ 'mini_id' => '小程序ID', 'mini_link'=> '小程序路径' ], + ], + 'institutions' => [ + 'name' => '名称', + 'code' => '简码', + 'parent' => '上级', + 'parent_id' => '上级', + 'type' => '属性', + 'type_id' => '属性', + 'address' => '地址', + 'person' => '负责人', + 'person_id' => '负责人', + 'sort' => '排序', ] ];