完善机构管理

main
vine_liutk 2024-01-17 20:02:03 +08:00
parent f34124e307
commit 6aedd1c91c
8 changed files with 133 additions and 3 deletions

View File

@ -0,0 +1,65 @@
<?php
namespace App\Admin\Controllers;
use Slowlyo\OwlAdmin\Admin;
use Slowlyo\OwlAdmin\Renderers\Page;
use Slowlyo\OwlAdmin\Renderers\Form;
use Slowlyo\OwlAdmin\Controllers\AdminController;
use App\Services\Admin\InstitutionService;
use App\Admin\Components;
use App\Models\Keyword;
use Illuminate\Http\Request;
class InstitutionController extends AdminController
{
protected string $serviceName = InstitutionService::class;
public function list(): Page
{
$crud = $this->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();
}
}

View File

@ -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);

View File

@ -0,0 +1,17 @@
<?php
namespace App\Models\Filters;
use Illuminate\Support\Arr;
use EloquentFilter\ModelFilter;
class InstitutionFilter extends ModelFilter
{
/**
* 主键
*/
public function id($id)
{
return $this->where('id', $id);
}
}

View File

@ -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');
}
}

View File

@ -0,0 +1,25 @@
<?php
namespace App\Services\Admin;
use App\Models\Institution;
use App\Models\Filters\InstitutionFilter;
use Illuminate\Support\Arr;
/**
* @method Institution getModel()
* @method Institution|\Illuminate\Database\Query\Builder query()
*/
class InstitutionService extends BaseService
{
protected string $modelName = Institution::class;
protected string $modelFilterName = InstitutionFilter::class;
public function getTree()
{
$list = $this->query()->filter(request()->all(), $this->modelFilterName)->orderByDesc('sort')->get();
$minNum = $list->min('parent_id');
return !$list->isEmpty() ? array2tree($list->toArray(), $minNum) :[];
}
}

View File

@ -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],//图书类型

View File

@ -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' => []],

View File

@ -307,5 +307,17 @@ return [
'mini_id' => '小程序ID',
'mini_link'=> '小程序路径'
],
],
'institutions' => [
'name' => '名称',
'code' => '简码',
'parent' => '上级',
'parent_id' => '上级',
'type' => '属性',
'type_id' => '属性',
'address' => '地址',
'person' => '负责人',
'person_id' => '负责人',
'sort' => '排序',
]
];