generated from liutk/owl-admin-base
完善机构管理
parent
f34124e307
commit
6aedd1c91c
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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');
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) :[];
|
||||
}
|
||||
}
|
||||
|
|
@ -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],//图书类型
|
||||
|
|
|
|||
|
|
@ -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' => []],
|
||||
|
|
|
|||
|
|
@ -307,5 +307,17 @@ return [
|
|||
'mini_id' => '小程序ID',
|
||||
'mini_link'=> '小程序路径'
|
||||
],
|
||||
],
|
||||
'institutions' => [
|
||||
'name' => '名称',
|
||||
'code' => '简码',
|
||||
'parent' => '上级',
|
||||
'parent_id' => '上级',
|
||||
'type' => '属性',
|
||||
'type_id' => '属性',
|
||||
'address' => '地址',
|
||||
'person' => '负责人',
|
||||
'person_id' => '负责人',
|
||||
'sort' => '排序',
|
||||
]
|
||||
];
|
||||
|
|
|
|||
Loading…
Reference in New Issue