129 lines
5.4 KiB
PHP
129 lines
5.4 KiB
PHP
<?php
|
|
|
|
namespace App\Admin\Controllers\System;
|
|
|
|
use App\Admin\Controllers\AdminController;
|
|
use App\Admin\Services\System\AdminMenuService;
|
|
use Slowlyo\OwlAdmin\Admin;
|
|
use Slowlyo\OwlAdmin\Renderers\Form;
|
|
use Slowlyo\OwlAdmin\Renderers\Page;
|
|
|
|
/**
|
|
* @property AdminMenuService $service
|
|
*/
|
|
class AdminMenuController extends AdminController
|
|
{
|
|
protected string $serviceName = AdminMenuService::class;
|
|
|
|
public function list(): Page
|
|
{
|
|
$crud = $this->baseCRUD()
|
|
->loadDataOnce()
|
|
->syncLocation(false)
|
|
->footerToolbar([])
|
|
->headerToolbar([
|
|
$this->createTypeButton('drawer', 'lg')->visible(Admin::user()->can('admin.system.admin_menus.create')),
|
|
...$this->baseHeaderToolBar(),
|
|
])
|
|
->filterTogglable(false)
|
|
->footerToolbar(['statistics'])
|
|
->bulkActions([
|
|
$this->bulkDeleteButton()->reload('window')->visible(Admin::user()->can('admin.system.admin_menus.delete')),
|
|
])
|
|
->columns([
|
|
amis()->TableColumn('id', 'ID')->sortable(),
|
|
amis()->TableColumn('title', __('admin.admin_menu.title')),
|
|
amis()->TableColumn('icon', __('admin.admin_menu.icon'))
|
|
->type('flex')
|
|
->justify('start')
|
|
->items([
|
|
amis()->SvgIcon()->icon('${icon}')->className('mr-2 text-lg'),
|
|
'${icon}',
|
|
]),
|
|
amis()->TableColumn('url', __('admin.admin_menu.url')),
|
|
amis()->TableColumn('order', __('admin.admin_menu.order'))->quickEdit(
|
|
amis()->NumberControl()->min(0)->saveImmediately(true)
|
|
),
|
|
amis()->TableColumn('visible', __('admin.admin_menu.visible'))->quickEdit(
|
|
amis()->SwitchControl()->mode('inline')->saveImmediately(true)
|
|
),
|
|
amis()->TableColumn('is_home', __('admin.admin_menu.is_home'))->quickEdit(
|
|
amis()->SwitchControl()->mode('inline')->saveImmediately(true)
|
|
),
|
|
$this->rowActions([
|
|
$this->rowEditTypeButton('drawer', 'lg')->visible(Admin::user()->can('admin.system.admin_menus.update')),
|
|
$this->rowDeleteButton()->visible(Admin::user()->can('admin.system.admin_menus.delete')),
|
|
]),
|
|
]);
|
|
|
|
return $this->baseList($crud);
|
|
}
|
|
|
|
public function form(): Form
|
|
{
|
|
return $this->baseForm()->body([
|
|
amis()->GroupControl()->body([
|
|
amis()->TextControl('title', __('admin.admin_menu.title'))->required(),
|
|
amis()->TextControl('icon', __('admin.admin_menu.icon'))
|
|
->description(
|
|
__('admin.admin_menu.icon_description').
|
|
'<a href="https://icones.js.org/collection/all" target="_blank"> https://icones.js.org</a>'
|
|
),
|
|
]),
|
|
amis()->GroupControl()->body([
|
|
amis()->TreeSelectControl('parent_id', __('admin.admin_menu.parent_id'))
|
|
->labelField('title')
|
|
->valueField('id')
|
|
->showIcon(false)
|
|
->value(0)
|
|
->source('/system/admin_menus?_action=getData'),
|
|
amis()
|
|
->TextControl('component', __('admin.admin_menu.component'))
|
|
->description(__('admin.admin_menu.component_desc'))
|
|
->value('amis'),
|
|
]),
|
|
amis()->TextControl('url', __('admin.admin_menu.url'))
|
|
->required()
|
|
->validateOnChange()
|
|
->validations(['matchRegexp' => '/^(http(s)?\:\/)?(\/)+/'])
|
|
->validationErrors(['matchRegexp' => __('admin.need_start_with_slash')])
|
|
->placeholder('eg: /admin_menus'),
|
|
amis()->NumberControl('order', __('admin.admin_menu.order'))
|
|
->required()
|
|
->displayMode('enhance')
|
|
->description(__('admin.order_asc'))
|
|
->min(0)
|
|
->value(0),
|
|
amis()->ListControl('url_type', __('admin.admin_menu.type'))
|
|
->options(Admin::adminMenuModel()::getType())
|
|
->value(Admin::adminMenuModel()::TYPE_ROUTE),
|
|
amis()->SwitchControl('visible', __('admin.admin_menu.visible'))
|
|
->onText(__('admin.admin_menu.show'))
|
|
->offText(__('admin.admin_menu.hide'))
|
|
->value(1),
|
|
amis()->SwitchControl('is_home', __('admin.admin_menu.is_home'))
|
|
->onText(__('admin.yes'))
|
|
->offText(__('admin.no'))
|
|
->description(__('admin.admin_menu.is_home_description'))
|
|
->value(0),
|
|
amis()->SwitchControl('is_full', __('admin.admin_menu.is_full'))
|
|
->onText(__('admin.yes'))
|
|
->offText(__('admin.no'))
|
|
->description(__('admin.admin_menu.is_full_description'))
|
|
->value(0),
|
|
])->onEvent([
|
|
'submitSucc' => [
|
|
'actions' => [
|
|
'actionType' => 'custom',
|
|
'script' => 'window.location.reload()',
|
|
],
|
|
],
|
|
]);
|
|
}
|
|
|
|
public function detail(): Form
|
|
{
|
|
return $this->baseDetail()->body([]);
|
|
}
|
|
}
|