diff --git a/app/Admin/Controllers/AdminController.php b/app/Admin/Controllers/AdminController.php index 3382a67..e1a01c6 100644 --- a/app/Admin/Controllers/AdminController.php +++ b/app/Admin/Controllers/AdminController.php @@ -4,10 +4,7 @@ namespace App\Admin\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Arr; -use Illuminate\Validation\ValidationException; use Slowlyo\OwlAdmin\Controllers\AdminController as Controller; -use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface; -use Throwable; use App\Traits\CustomActionTrait; /** @@ -17,67 +14,27 @@ abstract class AdminController extends Controller { use CustomActionTrait; - public function store(Request $request) - { - try { - if ($this->actionOfQuickEdit()) { - $result = $this->service->quickEdit($request->all()); - } else { - $result = $this->service->store($request->all()); - } - } catch (Throwable $th) { - return $this->renderExceptionResponse( - tap($th, fn () => report($th)) - ); - } - - return $this->autoResponse($result, __('admin.save')); - } - public function update(Request $request) { - $input = $request->all(); + $input = Arr::except($request->all(), $this->service->primaryKey()); - if ($this->actionOfQuickEditItem()) { - Arr::pull($input, $this->service->primaryKey()); - - if ($request->filled('_editable')) { - $input = Arr::only($input, explode(',', $request->input('_editable'))); - } + if ($request->filled('_fields')) { + $input = Arr::only($input, explode(',', $request->input('_fields'))); } - try { - $result = $this->service->update($this->getPrimaryValue($request), $input); - } catch (Throwable $th) { - return $this->renderExceptionResponse( - tap($th, fn () => report($th)) - ); - } + $result = $this->service->update($this->getPrimaryValue($request), $input); return $this->autoResponse($result, __('admin.save')); } - public function getQuickEditItemPath(array $editable = ['*']) + public function getQuickEditItemPath(array $fields = ['*']) { - $params = ['_action' => 'quickEditItem']; + $path = $this->getUpdatePath(); - if ($editable != ['*']) { - $params['_editable'] = implode(',', $editable); + if ($fields != ['*']) { + $path .= '?_fields='.implode(',', $fields); } - return $this->getUpdatePath().'?'.http_build_query($params); - } - - protected function renderExceptionResponse(Throwable $e) - { - $message = 'Server error'; - - if ($e instanceof ValidationException) { - $message = $e->validator->errors()->first(); - } elseif ($e instanceof HttpExceptionInterface) { - $message = $e->getMessage(); - } - - return $this->response()->fail($message); + return $path; } } diff --git a/app/Admin/Controllers/System/AdminMenuController.php b/app/Admin/Controllers/System/AdminMenuController.php index 7cc5b6f..5445719 100644 --- a/app/Admin/Controllers/System/AdminMenuController.php +++ b/app/Admin/Controllers/System/AdminMenuController.php @@ -2,11 +2,11 @@ namespace App\Admin\Controllers\System; +use App\Admin\Controllers\AdminController; +use App\Admin\Services\System\AdminMenuService; use Slowlyo\OwlAdmin\Admin; -use Slowlyo\OwlAdmin\Controllers\AdminController; use Slowlyo\OwlAdmin\Renderers\Form; use Slowlyo\OwlAdmin\Renderers\Page; -use Slowlyo\OwlAdmin\Services\AdminMenuService; /** * @property AdminMenuService $service @@ -22,7 +22,7 @@ class AdminMenuController extends AdminController ->syncLocation(false) ->footerToolbar([]) ->headerToolbar([ - $this->createButton(true, 'lg')->visible(Admin::user()->can('admin.system.admin_menus.create')), + $this->createTypeButton('drawer', 'lg')->visible(Admin::user()->can('admin.system.admin_menus.create')), ...$this->baseHeaderToolBar(), ]) ->filterTogglable(false) @@ -51,7 +51,7 @@ class AdminMenuController extends AdminController amis()->SwitchControl()->mode('inline')->saveImmediately(true) ), $this->rowActions([ - $this->rowEditButton(true, 'lg')->visible(Admin::user()->can('admin.system.admin_menus.update')), + $this->rowEditTypeButton('drawer', 'lg')->visible(Admin::user()->can('admin.system.admin_menus.update')), $this->rowDeleteButton()->visible(Admin::user()->can('admin.system.admin_menus.delete')), ]), ]); diff --git a/app/Admin/Controllers/System/AdminPermissionController.php b/app/Admin/Controllers/System/AdminPermissionController.php index 8d28826..75a9692 100644 --- a/app/Admin/Controllers/System/AdminPermissionController.php +++ b/app/Admin/Controllers/System/AdminPermissionController.php @@ -2,12 +2,12 @@ namespace App\Admin\Controllers\System; -use App\Admin\Services\AdminMenuService; -use App\Admin\Services\AdminPermissionService; +use App\Admin\Controllers\AdminController; +use App\Admin\Services\System\AdminMenuService; +use App\Admin\Services\System\AdminPermissionService; use Illuminate\Support\Facades\DB; use Illuminate\Support\Str; use Slowlyo\OwlAdmin\Admin; -use Slowlyo\OwlAdmin\Controllers\AdminController; use Slowlyo\OwlAdmin\Renderers\Form; use Slowlyo\OwlAdmin\Renderers\Page; use Slowlyo\OwlAdmin\Renderers\Tag; @@ -26,10 +26,8 @@ class AdminPermissionController extends AdminController ->filterTogglable(false) ->footerToolbar([]) ->headerToolbar([ - $this->createButton(true, 'lg')->visible(Admin::user()->can('admin.system.admin_permissions.create')), - 'bulkActions', - amis('reload')->align('right'), - amis('filter-toggler')->align('right'), + $this->createTypeButton('drawer', 'lg')->visible(Admin::user()->can('admin.system.admin_permissions.create')), + ...$this->baseHeaderToolBar(), ]) ->bulkActions([ $this->bulkDeleteButton()->visible(Admin::user()->can('admin.system.admin_permissions.delete')), @@ -50,7 +48,8 @@ class AdminPermissionController extends AdminController Tag::make()->label('${item}')->className('my-1') ), $this->rowActions([ - $this->rowEditButton(true, 'lg')->visible(Admin::user()->can('admin.system.admin_permissions.update')), + $this->rowEditTypeButton('drawer', 'lg') + ->visible(Admin::user()->can('admin.system.admin_permissions.update')), $this->rowDeleteButton()->visible(Admin::user()->can('admin.system.admin_permissions.delete')), ]), ]); diff --git a/app/Admin/Controllers/System/AdminRoleController.php b/app/Admin/Controllers/System/AdminRoleController.php index 239b9c2..fa012ab 100644 --- a/app/Admin/Controllers/System/AdminRoleController.php +++ b/app/Admin/Controllers/System/AdminRoleController.php @@ -2,9 +2,10 @@ namespace App\Admin\Controllers\System; -use App\Admin\Services\AdminRoleService; +use App\Admin\Controllers\AdminController; +use App\Admin\Services\System\AdminRoleService; use Slowlyo\OwlAdmin\Admin; -use Slowlyo\OwlAdmin\Controllers\AdminController; +use Slowlyo\OwlAdmin\Renderers\DrawerAction; use Slowlyo\OwlAdmin\Renderers\Form; use Slowlyo\OwlAdmin\Renderers\Page; use Slowlyo\OwlAdmin\Services\AdminMenuService; @@ -21,11 +22,11 @@ class AdminRoleController extends AdminController { $crud = $this->baseCRUD() ->headerToolbar([ - $this->createButton(true) + $this->createTypeButton('drawer', 'lg') ->visible(Admin::user()->can('admin.system.admin_roles.create')), - amis('reload')->align('right'), - amis('filter-toggler')->align('right'), + ...$this->baseHeaderToolBar(), ]) + ->bulkActions([]) ->filterTogglable(false) ->itemCheckableOn('${id !== 1}') ->columns([ @@ -43,13 +44,13 @@ class AdminRoleController extends AdminController ->type('datetime') ->sortable(true), amis()->Operation()->label(__('admin.actions'))->buttons([ - $this->setMenu() + $this->rowSetMenuButton() ->visible(Admin::user()->can('admin.system.admin_roles.set_menus')) ->visibleOn('${slug != "administrator"}'), - $this->setPermission() + $this->rowSetPermissionButton() ->visible(Admin::user()->can('admin.system.admin_roles.set_permissions')) ->visibleOn('${slug != "administrator"}'), - $this->rowEditButton(true) + $this->rowEditTypeButton('drawer', 'lg') ->visible(Admin::user()->can('admin.system.admin_roles.update')) ->visibleOn('${slug != "administrator"}'), $this->rowDeleteButton() @@ -69,7 +70,7 @@ class AdminRoleController extends AdminController ]); } - protected function setPermission() + protected function rowSetPermissionButton(): DrawerAction { return amis()->DrawerAction()->label(__('admin.admin_role.set_permissions'))->icon('fa-solid fa-gear')->level('link')->drawer( amis()->Drawer()->title(__('admin.admin_role.set_permissions'))->resizable()->closeOnOutside()->closeOnEsc()->body([ @@ -96,7 +97,7 @@ class AdminRoleController extends AdminController ->labelField('name') ->valueField('id'), ]), - ]) + ])->size('lg') ); } @@ -107,7 +108,7 @@ class AdminRoleController extends AdminController return $this->autoResponse('success', __('admin.save')); } - protected function setMenu() + protected function rowSetMenuButton(): DrawerAction { return amis()->DrawerAction()->label(__('admin.admin_role.set_menus'))->icon('fa-solid fa-gear')->level('link')->drawer( amis()->Drawer()->title(__('admin.admin_role.set_menus'))->resizable()->closeOnOutside()->closeOnEsc()->body([ @@ -134,7 +135,7 @@ class AdminRoleController extends AdminController ->labelField('title') ->valueField('id'), ]), - ]) + ])->size('lg') ); } diff --git a/app/Admin/Controllers/System/AdminUserController.php b/app/Admin/Controllers/System/AdminUserController.php index 09a510c..1448b04 100644 --- a/app/Admin/Controllers/System/AdminUserController.php +++ b/app/Admin/Controllers/System/AdminUserController.php @@ -3,13 +3,14 @@ namespace App\Admin\Controllers\System; use App\Admin\Controllers\AdminController; -use App\Admin\Requests\System\AdminUserChangePasswordRequest; -use App\Admin\Services\AdminUserService; +use App\Admin\Services\System\AdminUserService; +use Illuminate\Http\Request; +use Illuminate\Support\Facades\Validator; use Slowlyo\OwlAdmin\Admin; +use Slowlyo\OwlAdmin\Renderers\DrawerAction; use Slowlyo\OwlAdmin\Renderers\Form; -use Slowlyo\OwlAdmin\Renderers\Operation; use Slowlyo\OwlAdmin\Renderers\Page; -use Slowlyo\OwlAdmin\Renderers\SwitchControl; +use Slowlyo\OwlAdmin\Renderers\TableColumn; use Slowlyo\OwlAdmin\Services\AdminRoleService; /** @@ -23,31 +24,41 @@ class AdminUserController extends AdminController { $crud = $this->baseCRUD() ->headerToolbar([ - $this->createButton(true)->visible(Admin::user()->can('admin.system.admin_users.create')), + $this->createTypeButton('drawer', 'lg')->visible(Admin::user()->can('admin.system.admin_users.create')), ...$this->baseHeaderToolBar(), ]) ->filter($this->baseFilter()->body( - amisMake()->TextControl('keyword', __('admin.keyword')) + amis()->TextControl('keyword', __('admin.keyword')) ->size('md') ->placeholder(__('admin.admin_user.search_username')) )) ->quickSaveItemApi($this->getQuickEditItemPath(['lock'])) ->itemCheckableOn('${id !== 1}') ->columns([ - amisMake()->TableColumn('id', 'ID')->sortable(), - amisMake()->TableColumn('avatar', __('admin.admin_user.avatar'))->type('avatar')->src('${avatar}'), - amisMake()->TableColumn('username', __('admin.username')), - amisMake()->TableColumn('name', __('admin.admin_user.name')), - amisMake()->TableColumn('roles', __('admin.admin_user.roles'))->type('each')->items( - amisMake()->Tag()->label('${name}')->className('my-1') + amis()->TableColumn('id', 'ID')->sortable(), + amis()->TableColumn('avatar', __('admin.admin_user.avatar'))->type('avatar')->src('${avatar}'), + amis()->TableColumn('username', __('admin.username')), + amis()->TableColumn('name', __('admin.admin_user.name')), + amis()->TableColumn('roles', __('admin.admin_user.roles'))->type('each')->items( + amis()->Tag()->label('${name}')->className('my-1') ), - amisMake()->TableColumn('lock', __('admin.admin_user.lock'))->quickEdit(SwitchControl::make()->saveImmediately(true)->mode('inline')->disabledOn('${id === 1}')), - amisMake()->TableColumn('created_at', __('admin.created_at'))->type('datetime')->sortable(true), - Operation::make()->label(__('admin.actions'))->buttons([ - $this->changePasswordButton() + tap(amis()->TableColumn('lock', __('admin.admin_user.lock')), function (TableColumn $column) { + if (Admin::user()->can('admin.system.admin_users.update')) { + return $column->quickEdit( + amis()->SwitchControl()->saveImmediately()->mode('inline')->disabledOn('${id === 1}') + ); + } + return $column->type('status')->source([ + 0 => ['label' => '未锁定', 'icon' => 'fa fa-times-circle', 'color' => '#30bf13'], + 1 => ['label' => '已锁定', 'icon' => 'fa fa-check-circle', 'color' => '#f70e47'], + ]); + }), + amis()->TableColumn('created_at', __('admin.created_at'))->type('datetime')->sortable(true), + $this->rowActions([ + $this->rowChangePasswordButton() ->visible(Admin::user()->can('admin.system.admin_users.change_password')) ->visibleOn('${id != 1}'), - $this->rowEditButton(true) + $this->rowEditTypeButton('drawer', 'lg') ->visible(Admin::user()->can('admin.system.admin_users.update')) ->visibleOn('${id != 1}'), $this->rowDeleteButton() @@ -62,12 +73,12 @@ class AdminUserController extends AdminController public function form(): Form { return $this->baseForm()->body([ - amisMake()->ImageControl('avatar', __('admin.admin_user.avatar'))->receiver($this->uploadImagePath()), - amisMake()->TextControl('name', __('admin.admin_user.name'))->required(), - amisMake()->TextControl('username', __('admin.username'))->required(), - amisMake()->TextControl('password', __('admin.password'))->type('input-password')->required()->validations(['minLength' => 6])->hiddenOn('${id > 0}'), - amisMake()->TextControl('confirm_password', __('admin.confirm_password'))->type('input-password')->required()->validations(['minLength' => 6])->hiddenOn('${id > 0}'), - amisMake()->SelectControl('roles', __('admin.admin_user.roles')) + amis()->ImageControl('avatar', __('admin.admin_user.avatar'))->receiver($this->uploadImagePath()), + amis()->TextControl('name', __('admin.admin_user.name'))->required(), + amis()->TextControl('username', __('admin.username'))->required(), + amis()->TextControl('password', __('admin.password'))->type('input-password')->required()->validations(['minLength' => 6])->hiddenOn('${id > 0}'), + amis()->TextControl('confirm_password', __('admin.confirm_password'))->type('input-password')->required()->validations(['minLength' => 6])->hiddenOn('${id > 0}'), + amis()->SelectControl('roles', __('admin.admin_user.roles')) ->searchable() ->multiple() ->labelField('name') @@ -75,7 +86,7 @@ class AdminUserController extends AdminController ->joinValues(false) ->extractValue() ->options(AdminRoleService::make()->query()->get(['id', 'name'])), - SwitchControl::make()->name('lock')->label(__('admin.admin_user.lock'))->value(false), + amis()->SwitchControl()->name('lock')->label(__('admin.admin_user.lock'))->value(false), ]); } @@ -84,27 +95,47 @@ class AdminUserController extends AdminController return $this->baseDetail()->body([]); } - public function changePassword($id, AdminUserChangePasswordRequest $request) + /** + * 修改密码 + */ + public function changePassword($id, Request $request) { + $validator = Validator::make( + data: $request->input(), + rules: [ + 'password' => ['bail', 'required', 'confirmed', 'min:6'], + ], + attributes: [ + 'password' => '密码', + ], + ); + + if ($validator->fails()) { + admin_abort($validator->errors()->first()); + } + $this->service->update($id, $request->only(['password'])); return $this->autoResponse('success', __('admin.save')); } - protected function changePasswordButton() + /** + * 修改密码按钮 + */ + protected function rowChangePasswordButton(): DrawerAction { - return amisMake()->DialogAction()->icon('fa-regular fa-lightbulb')->label(__('admin.admin_user.edit_password'))->level('link')->dialog( - amisMake()->Dialog()->title(__('admin.admin_user.edit_password'))->body([ - amisMake()->Form()->title('') + return amis()->DrawerAction()->icon('fa-regular fa-lightbulb')->label(__('admin.admin_user.edit_password'))->level('link')->drawer( + amis()->Drawer()->title(__('admin.admin_user.edit_password'))->body([ + amis()->Form()->title('') ->api([ - 'method' => 'PUT', + 'method' => 'POST', 'url' => admin_url('system/admin_users/$id/change-password'), ]) ->body([ - amisMake()->TextControl('password', __('admin.password'))->type('input-password')->required()->validations(['minLength' => 6]), - amisMake()->TextControl('password_confirmation', __('admin.confirm_password'))->type('input-password')->required()->validations(['minLength' => 6]), + amis()->TextControl('password', __('admin.password'))->type('input-password')->required()->validations(['minLength' => 6]), + amis()->TextControl('password_confirmation', __('admin.confirm_password'))->type('input-password')->required()->validations(['minLength' => 6]), ]), - ])->size('md') + ])->size('lg') ); } } diff --git a/app/Admin/Controllers/System/KeywordController.php b/app/Admin/Controllers/System/KeywordController.php index 169182e..49c4688 100644 --- a/app/Admin/Controllers/System/KeywordController.php +++ b/app/Admin/Controllers/System/KeywordController.php @@ -3,10 +3,10 @@ namespace App\Admin\Controllers\System; use App\Admin\Components; -use App\Admin\Services\KeywordService; +use App\Admin\Controllers\AdminController; +use App\Admin\Services\System\KeywordService; use Illuminate\Http\Request; use Slowlyo\OwlAdmin\Admin; -use Slowlyo\OwlAdmin\Controllers\AdminController; use Slowlyo\OwlAdmin\Renderers\Form; use Slowlyo\OwlAdmin\Renderers\Page; use Slowlyo\OwlAdmin\Renderers\TableColumn; @@ -27,11 +27,11 @@ class KeywordController extends AdminController ->footerToolbar([]) //去掉分页-end ->headerToolbar([ - $this->createButton(true)->visible(Admin::user()->can('admin.system.keywords.create')), + $this->createTypeButton('drawer', 'lg')->visible(Admin::user()->can('admin.system.keywords.create')), $this->exportAction(), - amis('reload')->align('right'), - amis('filter-toggler')->align('right'), + ...$this->baseHeaderToolBar(), ]) + ->bulkActions([]) ->filter($this->baseFilter()->body([ amis()->TextControl('name', __('admin.keyword')) ->size('md') @@ -48,8 +48,9 @@ class KeywordController extends AdminController TableColumn::make()->name('value')->label('值'), TableColumn::make()->name('sort')->label('排序'), TableColumn::make()->name('created_at')->label('创建时间')->type('datetime')->sortable(true), - amisMake()->Operation()->label(__('admin.actions'))->buttons([ - $this->rowEditButton(true)->visible(Admin::user()->can('admin.system.keywords.update')), + amis()->Operation()->label(__('admin.actions'))->buttons([ + $this->rowEditTypeButton('drawer', 'lg') + ->visible(Admin::user()->can('admin.system.keywords.update')), $this->rowDeleteButton()->visible(Admin::user()->can('admin.system.keywords.delete')), ]), ]); @@ -64,7 +65,7 @@ class KeywordController extends AdminController TextControl::make()->name('name')->label('名称')->required(true), TextControl::make()->name('key')->label('KEY')->required(true), TextControl::make()->name('value')->label('值'), - amisMake()->NumberControl()->name('sort')->value(0)->min()->label('排序'), + amis()->NumberControl()->name('sort')->value(0)->min()->label('排序'), ]); } diff --git a/app/Admin/Requests/System/AdminUserChangePasswordRequest.php b/app/Admin/Requests/System/AdminUserChangePasswordRequest.php deleted file mode 100644 index 5dded2b..0000000 --- a/app/Admin/Requests/System/AdminUserChangePasswordRequest.php +++ /dev/null @@ -1,28 +0,0 @@ - ['bail', 'required', 'confirmed', 'min:6'], - ]; - } - - /** - * {@inheritdoc} - */ - public function attributes() - { - return [ - 'password' => '密码', - ]; - } -} diff --git a/app/Admin/Services/AdminMenuService.php b/app/Admin/Services/System/AdminMenuService.php similarity index 96% rename from app/Admin/Services/AdminMenuService.php rename to app/Admin/Services/System/AdminMenuService.php index e7d3278..e85486d 100644 --- a/app/Admin/Services/AdminMenuService.php +++ b/app/Admin/Services/System/AdminMenuService.php @@ -1,7 +1,8 @@ checkUsernameUnique($data['username'])) { - return $this->setError(__('admin.admin_user.username_already_exists')); + admin_abort(__('admin.admin_user.username_already_exists')); } if (! data_get($data, 'password')) { - return $this->setError(__('admin.required', ['attribute' => __('admin.password')])); + admin_abort(__('admin.required', ['attribute' => __('admin.password')])); } if (array_key_exists('confirm_password', $data)) { if ($data['password'] !== $data['confirm_password']) { - return $this->setError(__('admin.admin_user.password_confirmation')); + admin_abort(__('admin.admin_user.password_confirmation')); } unset($data['confirm_password']); } @@ -65,15 +61,27 @@ class AdminUserService extends BaseService public function update($primaryKey, $data): bool { if (isset($data['username']) && $this->checkUsernameUnique($data['username'], $primaryKey)) { - return $this->setError(__('admin.admin_user.username_already_exists')); + admin_abort(__('admin.admin_user.username_already_exists')); } if (isset($data['password']) && Hash::needsRehash($data['password'])) { $data['password'] = Hash::make($data['password']); } - $user = $this->query()->whereKey($primaryKey)->first(); - $user->update(Arr::except($data, ['roles'])); + $user = $this->query()->whereKey($primaryKey)->firstOrFail(); + + foreach (['username', 'password', 'name', 'avatar', 'lock'] as $attribute) { + if (array_key_exists($attribute, $data)) { + $user->{$attribute} = $data[$attribute]; + } + } + + if ($user->isDirty('lock') && $user->lock != 1) { + $user->error_num = 0; + $user->last_error_at = null; + } + + $user->save(); if (isset($data['roles'])) { $user->roles()->detach(); @@ -93,31 +101,29 @@ class AdminUserService extends BaseService public function updateUserSetting($primaryKey, $data): bool { - if (! $this->passwordHandler($data, $primaryKey)) { - return false; - } + $this->passwordHandler($data, $primaryKey); return parent::update($primaryKey, $data); } - public function passwordHandler(&$data, $id = null): bool + public function passwordHandler(&$data, $id = null) { $password = Arr::get($data, 'password'); if ($password) { if ($password !== Arr::get($data, 'confirm_password')) { - return $this->setError(__('admin.admin_user.password_confirmation')); + admin_abort(__('admin.admin_user.password_confirmation')); } if ($id) { if (! Arr::get($data, 'old_password')) { - return $this->setError(__('admin.admin_user.old_password_required')); + admin_abort(__('admin.admin_user.old_password_required')); } $oldPassword = $this->query()->where('id', $id)->value('password'); if (! Hash::check($data['old_password'], $oldPassword)) { - return $this->setError(__('admin.admin_user.old_password_error')); + admin_abort(__('admin.admin_user.old_password_error')); } } @@ -126,8 +132,6 @@ class AdminUserService extends BaseService unset($data['confirm_password']); unset($data['old_password']); } - - return true; } public function list() diff --git a/app/Admin/Services/KeywordService.php b/app/Admin/Services/System/KeywordService.php similarity index 97% rename from app/Admin/Services/KeywordService.php rename to app/Admin/Services/System/KeywordService.php index 3fa2cc7..05e65d7 100644 --- a/app/Admin/Services/KeywordService.php +++ b/app/Admin/Services/System/KeywordService.php @@ -1,8 +1,9 @@ resource('admin_users', AdminUserController::class); - $router->put('/admin_users/{admin_user}/change-password', [AdminUserController::class, 'changePassword'])->name('admin_users.change_password'); + $router->post('/admin_users/{admin_user}/change-password', [AdminUserController::class, 'changePassword'])->name('admin_users.change_password'); // 角色管理 $router->resource('admin_roles', AdminRoleController::class); $router->post('admin_roles/{admin_role}/menus', [AdminRoleController::class, 'saveMenus'])->name('admin_roles.set_menus'); diff --git a/lang/zh_CN/admin.php b/lang/zh_CN/admin.php index ec0f1ee..0a0ec87 100644 --- a/lang/zh_CN/admin.php +++ b/lang/zh_CN/admin.php @@ -200,6 +200,11 @@ return [ 'component_desc' => '默认为 amis , 非自定义前端页面请勿修改', ], + 'keywords' => [ + 'search_name' => '名称/KEY', + 'parent_keyword' => '父级关键字', + ], + 'extensions' => [ 'name_invalid' => '无效的扩展名称', 'exists' => '该扩展已存在:',