generated from liutk/owl-admin-base
Update
parent
90358ef4e7
commit
5935145ce0
|
|
@ -4,10 +4,7 @@ namespace App\Admin\Controllers;
|
||||||
|
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Arr;
|
use Illuminate\Support\Arr;
|
||||||
use Illuminate\Validation\ValidationException;
|
|
||||||
use Slowlyo\OwlAdmin\Controllers\AdminController as Controller;
|
use Slowlyo\OwlAdmin\Controllers\AdminController as Controller;
|
||||||
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
|
|
||||||
use Throwable;
|
|
||||||
use App\Traits\CustomActionTrait;
|
use App\Traits\CustomActionTrait;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -17,67 +14,27 @@ abstract class AdminController extends Controller
|
||||||
{
|
{
|
||||||
use CustomActionTrait;
|
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)
|
public function update(Request $request)
|
||||||
{
|
{
|
||||||
$input = $request->all();
|
$input = Arr::except($request->all(), $this->service->primaryKey());
|
||||||
|
|
||||||
if ($this->actionOfQuickEditItem()) {
|
if ($request->filled('_fields')) {
|
||||||
Arr::pull($input, $this->service->primaryKey());
|
$input = Arr::only($input, explode(',', $request->input('_fields')));
|
||||||
|
|
||||||
if ($request->filled('_editable')) {
|
|
||||||
$input = Arr::only($input, explode(',', $request->input('_editable')));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
$result = $this->service->update($this->getPrimaryValue($request), $input);
|
||||||
$result = $this->service->update($this->getPrimaryValue($request), $input);
|
|
||||||
} catch (Throwable $th) {
|
|
||||||
return $this->renderExceptionResponse(
|
|
||||||
tap($th, fn () => report($th))
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->autoResponse($result, __('admin.save'));
|
return $this->autoResponse($result, __('admin.save'));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getQuickEditItemPath(array $editable = ['*'])
|
public function getQuickEditItemPath(array $fields = ['*'])
|
||||||
{
|
{
|
||||||
$params = ['_action' => 'quickEditItem'];
|
$path = $this->getUpdatePath();
|
||||||
|
|
||||||
if ($editable != ['*']) {
|
if ($fields != ['*']) {
|
||||||
$params['_editable'] = implode(',', $editable);
|
$path .= '?_fields='.implode(',', $fields);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->getUpdatePath().'?'.http_build_query($params);
|
return $path;
|
||||||
}
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,11 +2,11 @@
|
||||||
|
|
||||||
namespace App\Admin\Controllers\System;
|
namespace App\Admin\Controllers\System;
|
||||||
|
|
||||||
|
use App\Admin\Controllers\AdminController;
|
||||||
|
use App\Admin\Services\System\AdminMenuService;
|
||||||
use Slowlyo\OwlAdmin\Admin;
|
use Slowlyo\OwlAdmin\Admin;
|
||||||
use Slowlyo\OwlAdmin\Controllers\AdminController;
|
|
||||||
use Slowlyo\OwlAdmin\Renderers\Form;
|
use Slowlyo\OwlAdmin\Renderers\Form;
|
||||||
use Slowlyo\OwlAdmin\Renderers\Page;
|
use Slowlyo\OwlAdmin\Renderers\Page;
|
||||||
use Slowlyo\OwlAdmin\Services\AdminMenuService;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @property AdminMenuService $service
|
* @property AdminMenuService $service
|
||||||
|
|
@ -22,7 +22,7 @@ class AdminMenuController extends AdminController
|
||||||
->syncLocation(false)
|
->syncLocation(false)
|
||||||
->footerToolbar([])
|
->footerToolbar([])
|
||||||
->headerToolbar([
|
->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(),
|
...$this->baseHeaderToolBar(),
|
||||||
])
|
])
|
||||||
->filterTogglable(false)
|
->filterTogglable(false)
|
||||||
|
|
@ -51,7 +51,7 @@ class AdminMenuController extends AdminController
|
||||||
amis()->SwitchControl()->mode('inline')->saveImmediately(true)
|
amis()->SwitchControl()->mode('inline')->saveImmediately(true)
|
||||||
),
|
),
|
||||||
$this->rowActions([
|
$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')),
|
$this->rowDeleteButton()->visible(Admin::user()->can('admin.system.admin_menus.delete')),
|
||||||
]),
|
]),
|
||||||
]);
|
]);
|
||||||
|
|
|
||||||
|
|
@ -2,12 +2,12 @@
|
||||||
|
|
||||||
namespace App\Admin\Controllers\System;
|
namespace App\Admin\Controllers\System;
|
||||||
|
|
||||||
use App\Admin\Services\AdminMenuService;
|
use App\Admin\Controllers\AdminController;
|
||||||
use App\Admin\Services\AdminPermissionService;
|
use App\Admin\Services\System\AdminMenuService;
|
||||||
|
use App\Admin\Services\System\AdminPermissionService;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
use Slowlyo\OwlAdmin\Admin;
|
use Slowlyo\OwlAdmin\Admin;
|
||||||
use Slowlyo\OwlAdmin\Controllers\AdminController;
|
|
||||||
use Slowlyo\OwlAdmin\Renderers\Form;
|
use Slowlyo\OwlAdmin\Renderers\Form;
|
||||||
use Slowlyo\OwlAdmin\Renderers\Page;
|
use Slowlyo\OwlAdmin\Renderers\Page;
|
||||||
use Slowlyo\OwlAdmin\Renderers\Tag;
|
use Slowlyo\OwlAdmin\Renderers\Tag;
|
||||||
|
|
@ -26,10 +26,8 @@ class AdminPermissionController extends AdminController
|
||||||
->filterTogglable(false)
|
->filterTogglable(false)
|
||||||
->footerToolbar([])
|
->footerToolbar([])
|
||||||
->headerToolbar([
|
->headerToolbar([
|
||||||
$this->createButton(true, 'lg')->visible(Admin::user()->can('admin.system.admin_permissions.create')),
|
$this->createTypeButton('drawer', 'lg')->visible(Admin::user()->can('admin.system.admin_permissions.create')),
|
||||||
'bulkActions',
|
...$this->baseHeaderToolBar(),
|
||||||
amis('reload')->align('right'),
|
|
||||||
amis('filter-toggler')->align('right'),
|
|
||||||
])
|
])
|
||||||
->bulkActions([
|
->bulkActions([
|
||||||
$this->bulkDeleteButton()->visible(Admin::user()->can('admin.system.admin_permissions.delete')),
|
$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')
|
Tag::make()->label('${item}')->className('my-1')
|
||||||
),
|
),
|
||||||
$this->rowActions([
|
$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')),
|
$this->rowDeleteButton()->visible(Admin::user()->can('admin.system.admin_permissions.delete')),
|
||||||
]),
|
]),
|
||||||
]);
|
]);
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,10 @@
|
||||||
|
|
||||||
namespace App\Admin\Controllers\System;
|
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\Admin;
|
||||||
use Slowlyo\OwlAdmin\Controllers\AdminController;
|
use Slowlyo\OwlAdmin\Renderers\DrawerAction;
|
||||||
use Slowlyo\OwlAdmin\Renderers\Form;
|
use Slowlyo\OwlAdmin\Renderers\Form;
|
||||||
use Slowlyo\OwlAdmin\Renderers\Page;
|
use Slowlyo\OwlAdmin\Renderers\Page;
|
||||||
use Slowlyo\OwlAdmin\Services\AdminMenuService;
|
use Slowlyo\OwlAdmin\Services\AdminMenuService;
|
||||||
|
|
@ -21,11 +22,11 @@ class AdminRoleController extends AdminController
|
||||||
{
|
{
|
||||||
$crud = $this->baseCRUD()
|
$crud = $this->baseCRUD()
|
||||||
->headerToolbar([
|
->headerToolbar([
|
||||||
$this->createButton(true)
|
$this->createTypeButton('drawer', 'lg')
|
||||||
->visible(Admin::user()->can('admin.system.admin_roles.create')),
|
->visible(Admin::user()->can('admin.system.admin_roles.create')),
|
||||||
amis('reload')->align('right'),
|
...$this->baseHeaderToolBar(),
|
||||||
amis('filter-toggler')->align('right'),
|
|
||||||
])
|
])
|
||||||
|
->bulkActions([])
|
||||||
->filterTogglable(false)
|
->filterTogglable(false)
|
||||||
->itemCheckableOn('${id !== 1}')
|
->itemCheckableOn('${id !== 1}')
|
||||||
->columns([
|
->columns([
|
||||||
|
|
@ -43,13 +44,13 @@ class AdminRoleController extends AdminController
|
||||||
->type('datetime')
|
->type('datetime')
|
||||||
->sortable(true),
|
->sortable(true),
|
||||||
amis()->Operation()->label(__('admin.actions'))->buttons([
|
amis()->Operation()->label(__('admin.actions'))->buttons([
|
||||||
$this->setMenu()
|
$this->rowSetMenuButton()
|
||||||
->visible(Admin::user()->can('admin.system.admin_roles.set_menus'))
|
->visible(Admin::user()->can('admin.system.admin_roles.set_menus'))
|
||||||
->visibleOn('${slug != "administrator"}'),
|
->visibleOn('${slug != "administrator"}'),
|
||||||
$this->setPermission()
|
$this->rowSetPermissionButton()
|
||||||
->visible(Admin::user()->can('admin.system.admin_roles.set_permissions'))
|
->visible(Admin::user()->can('admin.system.admin_roles.set_permissions'))
|
||||||
->visibleOn('${slug != "administrator"}'),
|
->visibleOn('${slug != "administrator"}'),
|
||||||
$this->rowEditButton(true)
|
$this->rowEditTypeButton('drawer', 'lg')
|
||||||
->visible(Admin::user()->can('admin.system.admin_roles.update'))
|
->visible(Admin::user()->can('admin.system.admin_roles.update'))
|
||||||
->visibleOn('${slug != "administrator"}'),
|
->visibleOn('${slug != "administrator"}'),
|
||||||
$this->rowDeleteButton()
|
$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(
|
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([
|
amis()->Drawer()->title(__('admin.admin_role.set_permissions'))->resizable()->closeOnOutside()->closeOnEsc()->body([
|
||||||
|
|
@ -96,7 +97,7 @@ class AdminRoleController extends AdminController
|
||||||
->labelField('name')
|
->labelField('name')
|
||||||
->valueField('id'),
|
->valueField('id'),
|
||||||
]),
|
]),
|
||||||
])
|
])->size('lg')
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -107,7 +108,7 @@ class AdminRoleController extends AdminController
|
||||||
return $this->autoResponse('success', __('admin.save'));
|
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(
|
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([
|
amis()->Drawer()->title(__('admin.admin_role.set_menus'))->resizable()->closeOnOutside()->closeOnEsc()->body([
|
||||||
|
|
@ -134,7 +135,7 @@ class AdminRoleController extends AdminController
|
||||||
->labelField('title')
|
->labelField('title')
|
||||||
->valueField('id'),
|
->valueField('id'),
|
||||||
]),
|
]),
|
||||||
])
|
])->size('lg')
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,13 +3,14 @@
|
||||||
namespace App\Admin\Controllers\System;
|
namespace App\Admin\Controllers\System;
|
||||||
|
|
||||||
use App\Admin\Controllers\AdminController;
|
use App\Admin\Controllers\AdminController;
|
||||||
use App\Admin\Requests\System\AdminUserChangePasswordRequest;
|
use App\Admin\Services\System\AdminUserService;
|
||||||
use App\Admin\Services\AdminUserService;
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\Validator;
|
||||||
use Slowlyo\OwlAdmin\Admin;
|
use Slowlyo\OwlAdmin\Admin;
|
||||||
|
use Slowlyo\OwlAdmin\Renderers\DrawerAction;
|
||||||
use Slowlyo\OwlAdmin\Renderers\Form;
|
use Slowlyo\OwlAdmin\Renderers\Form;
|
||||||
use Slowlyo\OwlAdmin\Renderers\Operation;
|
|
||||||
use Slowlyo\OwlAdmin\Renderers\Page;
|
use Slowlyo\OwlAdmin\Renderers\Page;
|
||||||
use Slowlyo\OwlAdmin\Renderers\SwitchControl;
|
use Slowlyo\OwlAdmin\Renderers\TableColumn;
|
||||||
use Slowlyo\OwlAdmin\Services\AdminRoleService;
|
use Slowlyo\OwlAdmin\Services\AdminRoleService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -23,31 +24,41 @@ class AdminUserController extends AdminController
|
||||||
{
|
{
|
||||||
$crud = $this->baseCRUD()
|
$crud = $this->baseCRUD()
|
||||||
->headerToolbar([
|
->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(),
|
...$this->baseHeaderToolBar(),
|
||||||
])
|
])
|
||||||
->filter($this->baseFilter()->body(
|
->filter($this->baseFilter()->body(
|
||||||
amisMake()->TextControl('keyword', __('admin.keyword'))
|
amis()->TextControl('keyword', __('admin.keyword'))
|
||||||
->size('md')
|
->size('md')
|
||||||
->placeholder(__('admin.admin_user.search_username'))
|
->placeholder(__('admin.admin_user.search_username'))
|
||||||
))
|
))
|
||||||
->quickSaveItemApi($this->getQuickEditItemPath(['lock']))
|
->quickSaveItemApi($this->getQuickEditItemPath(['lock']))
|
||||||
->itemCheckableOn('${id !== 1}')
|
->itemCheckableOn('${id !== 1}')
|
||||||
->columns([
|
->columns([
|
||||||
amisMake()->TableColumn('id', 'ID')->sortable(),
|
amis()->TableColumn('id', 'ID')->sortable(),
|
||||||
amisMake()->TableColumn('avatar', __('admin.admin_user.avatar'))->type('avatar')->src('${avatar}'),
|
amis()->TableColumn('avatar', __('admin.admin_user.avatar'))->type('avatar')->src('${avatar}'),
|
||||||
amisMake()->TableColumn('username', __('admin.username')),
|
amis()->TableColumn('username', __('admin.username')),
|
||||||
amisMake()->TableColumn('name', __('admin.admin_user.name')),
|
amis()->TableColumn('name', __('admin.admin_user.name')),
|
||||||
amisMake()->TableColumn('roles', __('admin.admin_user.roles'))->type('each')->items(
|
amis()->TableColumn('roles', __('admin.admin_user.roles'))->type('each')->items(
|
||||||
amisMake()->Tag()->label('${name}')->className('my-1')
|
amis()->Tag()->label('${name}')->className('my-1')
|
||||||
),
|
),
|
||||||
amisMake()->TableColumn('lock', __('admin.admin_user.lock'))->quickEdit(SwitchControl::make()->saveImmediately(true)->mode('inline')->disabledOn('${id === 1}')),
|
tap(amis()->TableColumn('lock', __('admin.admin_user.lock')), function (TableColumn $column) {
|
||||||
amisMake()->TableColumn('created_at', __('admin.created_at'))->type('datetime')->sortable(true),
|
if (Admin::user()->can('admin.system.admin_users.update')) {
|
||||||
Operation::make()->label(__('admin.actions'))->buttons([
|
return $column->quickEdit(
|
||||||
$this->changePasswordButton()
|
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'))
|
->visible(Admin::user()->can('admin.system.admin_users.change_password'))
|
||||||
->visibleOn('${id != 1}'),
|
->visibleOn('${id != 1}'),
|
||||||
$this->rowEditButton(true)
|
$this->rowEditTypeButton('drawer', 'lg')
|
||||||
->visible(Admin::user()->can('admin.system.admin_users.update'))
|
->visible(Admin::user()->can('admin.system.admin_users.update'))
|
||||||
->visibleOn('${id != 1}'),
|
->visibleOn('${id != 1}'),
|
||||||
$this->rowDeleteButton()
|
$this->rowDeleteButton()
|
||||||
|
|
@ -62,12 +73,12 @@ class AdminUserController extends AdminController
|
||||||
public function form(): Form
|
public function form(): Form
|
||||||
{
|
{
|
||||||
return $this->baseForm()->body([
|
return $this->baseForm()->body([
|
||||||
amisMake()->ImageControl('avatar', __('admin.admin_user.avatar'))->receiver($this->uploadImagePath()),
|
amis()->ImageControl('avatar', __('admin.admin_user.avatar'))->receiver($this->uploadImagePath()),
|
||||||
amisMake()->TextControl('name', __('admin.admin_user.name'))->required(),
|
amis()->TextControl('name', __('admin.admin_user.name'))->required(),
|
||||||
amisMake()->TextControl('username', __('admin.username'))->required(),
|
amis()->TextControl('username', __('admin.username'))->required(),
|
||||||
amisMake()->TextControl('password', __('admin.password'))->type('input-password')->required()->validations(['minLength' => 6])->hiddenOn('${id > 0}'),
|
amis()->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}'),
|
amis()->TextControl('confirm_password', __('admin.confirm_password'))->type('input-password')->required()->validations(['minLength' => 6])->hiddenOn('${id > 0}'),
|
||||||
amisMake()->SelectControl('roles', __('admin.admin_user.roles'))
|
amis()->SelectControl('roles', __('admin.admin_user.roles'))
|
||||||
->searchable()
|
->searchable()
|
||||||
->multiple()
|
->multiple()
|
||||||
->labelField('name')
|
->labelField('name')
|
||||||
|
|
@ -75,7 +86,7 @@ class AdminUserController extends AdminController
|
||||||
->joinValues(false)
|
->joinValues(false)
|
||||||
->extractValue()
|
->extractValue()
|
||||||
->options(AdminRoleService::make()->query()->get(['id', 'name'])),
|
->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([]);
|
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']));
|
$this->service->update($id, $request->only(['password']));
|
||||||
|
|
||||||
return $this->autoResponse('success', __('admin.save'));
|
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(
|
return amis()->DrawerAction()->icon('fa-regular fa-lightbulb')->label(__('admin.admin_user.edit_password'))->level('link')->drawer(
|
||||||
amisMake()->Dialog()->title(__('admin.admin_user.edit_password'))->body([
|
amis()->Drawer()->title(__('admin.admin_user.edit_password'))->body([
|
||||||
amisMake()->Form()->title('')
|
amis()->Form()->title('')
|
||||||
->api([
|
->api([
|
||||||
'method' => 'PUT',
|
'method' => 'POST',
|
||||||
'url' => admin_url('system/admin_users/$id/change-password'),
|
'url' => admin_url('system/admin_users/$id/change-password'),
|
||||||
])
|
])
|
||||||
->body([
|
->body([
|
||||||
amisMake()->TextControl('password', __('admin.password'))->type('input-password')->required()->validations(['minLength' => 6]),
|
amis()->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_confirmation', __('admin.confirm_password'))->type('input-password')->required()->validations(['minLength' => 6]),
|
||||||
]),
|
]),
|
||||||
])->size('md')
|
])->size('lg')
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,10 +3,10 @@
|
||||||
namespace App\Admin\Controllers\System;
|
namespace App\Admin\Controllers\System;
|
||||||
|
|
||||||
use App\Admin\Components;
|
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 Illuminate\Http\Request;
|
||||||
use Slowlyo\OwlAdmin\Admin;
|
use Slowlyo\OwlAdmin\Admin;
|
||||||
use Slowlyo\OwlAdmin\Controllers\AdminController;
|
|
||||||
use Slowlyo\OwlAdmin\Renderers\Form;
|
use Slowlyo\OwlAdmin\Renderers\Form;
|
||||||
use Slowlyo\OwlAdmin\Renderers\Page;
|
use Slowlyo\OwlAdmin\Renderers\Page;
|
||||||
use Slowlyo\OwlAdmin\Renderers\TableColumn;
|
use Slowlyo\OwlAdmin\Renderers\TableColumn;
|
||||||
|
|
@ -27,11 +27,11 @@ class KeywordController extends AdminController
|
||||||
->footerToolbar([])
|
->footerToolbar([])
|
||||||
//去掉分页-end
|
//去掉分页-end
|
||||||
->headerToolbar([
|
->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(),
|
$this->exportAction(),
|
||||||
amis('reload')->align('right'),
|
...$this->baseHeaderToolBar(),
|
||||||
amis('filter-toggler')->align('right'),
|
|
||||||
])
|
])
|
||||||
|
->bulkActions([])
|
||||||
->filter($this->baseFilter()->body([
|
->filter($this->baseFilter()->body([
|
||||||
amis()->TextControl('name', __('admin.keyword'))
|
amis()->TextControl('name', __('admin.keyword'))
|
||||||
->size('md')
|
->size('md')
|
||||||
|
|
@ -48,8 +48,9 @@ class KeywordController extends AdminController
|
||||||
TableColumn::make()->name('value')->label('值'),
|
TableColumn::make()->name('value')->label('值'),
|
||||||
TableColumn::make()->name('sort')->label('排序'),
|
TableColumn::make()->name('sort')->label('排序'),
|
||||||
TableColumn::make()->name('created_at')->label('创建时间')->type('datetime')->sortable(true),
|
TableColumn::make()->name('created_at')->label('创建时间')->type('datetime')->sortable(true),
|
||||||
amisMake()->Operation()->label(__('admin.actions'))->buttons([
|
amis()->Operation()->label(__('admin.actions'))->buttons([
|
||||||
$this->rowEditButton(true)->visible(Admin::user()->can('admin.system.keywords.update')),
|
$this->rowEditTypeButton('drawer', 'lg')
|
||||||
|
->visible(Admin::user()->can('admin.system.keywords.update')),
|
||||||
$this->rowDeleteButton()->visible(Admin::user()->can('admin.system.keywords.delete')),
|
$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('name')->label('名称')->required(true),
|
||||||
TextControl::make()->name('key')->label('KEY')->required(true),
|
TextControl::make()->name('key')->label('KEY')->required(true),
|
||||||
TextControl::make()->name('value')->label('值'),
|
TextControl::make()->name('value')->label('值'),
|
||||||
amisMake()->NumberControl()->name('sort')->value(0)->min()->label('排序'),
|
amis()->NumberControl()->name('sort')->value(0)->min()->label('排序'),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,28 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Admin\Requests\System;
|
|
||||||
|
|
||||||
use Illuminate\Foundation\Http\FormRequest;
|
|
||||||
|
|
||||||
class AdminUserChangePasswordRequest extends FormRequest
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
public function rules(): array
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
'password' => ['bail', 'required', 'confirmed', 'min:6'],
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
public function attributes()
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
'password' => '密码',
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,7 +1,8 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Admin\Services;
|
namespace App\Admin\Services\System;
|
||||||
|
|
||||||
|
use App\Admin\Services\BaseService;
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
use Illuminate\Support\Arr;
|
use Illuminate\Support\Arr;
|
||||||
use Slowlyo\OwlAdmin\Admin;
|
use Slowlyo\OwlAdmin\Admin;
|
||||||
|
|
@ -1,7 +1,8 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Admin\Services;
|
namespace App\Admin\Services\System;
|
||||||
|
|
||||||
|
use App\Admin\Services\BaseService;
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Support\Arr;
|
use Illuminate\Support\Arr;
|
||||||
|
|
@ -1,7 +1,8 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Admin\Services;
|
namespace App\Admin\Services\System;
|
||||||
|
|
||||||
|
use App\Admin\Services\BaseService;
|
||||||
use Slowlyo\OwlAdmin\Admin;
|
use Slowlyo\OwlAdmin\Admin;
|
||||||
|
|
||||||
class AdminRoleService extends BaseService
|
class AdminRoleService extends BaseService
|
||||||
|
|
@ -1,18 +1,14 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Admin\Services;
|
namespace App\Admin\Services\System;
|
||||||
|
|
||||||
|
use App\Admin\Services\BaseService;
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Support\Arr;
|
use Illuminate\Support\Arr;
|
||||||
use Illuminate\Support\Facades\Hash;
|
use Illuminate\Support\Facades\Hash;
|
||||||
use Slowlyo\OwlAdmin\Admin;
|
use Slowlyo\OwlAdmin\Admin;
|
||||||
use Slowlyo\OwlAdmin\Models\AdminUser;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @method AdminUser getModel()
|
|
||||||
* @method AdminUser|Builder query()
|
|
||||||
*/
|
|
||||||
class AdminUserService extends BaseService
|
class AdminUserService extends BaseService
|
||||||
{
|
{
|
||||||
protected string $modelName;
|
protected string $modelName;
|
||||||
|
|
@ -34,16 +30,16 @@ class AdminUserService extends BaseService
|
||||||
public function store($data): bool
|
public function store($data): bool
|
||||||
{
|
{
|
||||||
if ($this->checkUsernameUnique($data['username'])) {
|
if ($this->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')) {
|
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 (array_key_exists('confirm_password', $data)) {
|
||||||
if ($data['password'] !== $data['confirm_password']) {
|
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']);
|
unset($data['confirm_password']);
|
||||||
}
|
}
|
||||||
|
|
@ -65,15 +61,27 @@ class AdminUserService extends BaseService
|
||||||
public function update($primaryKey, $data): bool
|
public function update($primaryKey, $data): bool
|
||||||
{
|
{
|
||||||
if (isset($data['username']) && $this->checkUsernameUnique($data['username'], $primaryKey)) {
|
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'])) {
|
if (isset($data['password']) && Hash::needsRehash($data['password'])) {
|
||||||
$data['password'] = Hash::make($data['password']);
|
$data['password'] = Hash::make($data['password']);
|
||||||
}
|
}
|
||||||
|
|
||||||
$user = $this->query()->whereKey($primaryKey)->first();
|
$user = $this->query()->whereKey($primaryKey)->firstOrFail();
|
||||||
$user->update(Arr::except($data, ['roles']));
|
|
||||||
|
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'])) {
|
if (isset($data['roles'])) {
|
||||||
$user->roles()->detach();
|
$user->roles()->detach();
|
||||||
|
|
@ -93,31 +101,29 @@ class AdminUserService extends BaseService
|
||||||
|
|
||||||
public function updateUserSetting($primaryKey, $data): bool
|
public function updateUserSetting($primaryKey, $data): bool
|
||||||
{
|
{
|
||||||
if (! $this->passwordHandler($data, $primaryKey)) {
|
$this->passwordHandler($data, $primaryKey);
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return parent::update($primaryKey, $data);
|
return parent::update($primaryKey, $data);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function passwordHandler(&$data, $id = null): bool
|
public function passwordHandler(&$data, $id = null)
|
||||||
{
|
{
|
||||||
$password = Arr::get($data, 'password');
|
$password = Arr::get($data, 'password');
|
||||||
|
|
||||||
if ($password) {
|
if ($password) {
|
||||||
if ($password !== Arr::get($data, 'confirm_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 ($id) {
|
||||||
if (! Arr::get($data, 'old_password')) {
|
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');
|
$oldPassword = $this->query()->where('id', $id)->value('password');
|
||||||
|
|
||||||
if (! Hash::check($data['old_password'], $oldPassword)) {
|
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['confirm_password']);
|
||||||
unset($data['old_password']);
|
unset($data['old_password']);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function list()
|
public function list()
|
||||||
|
|
@ -1,8 +1,9 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Admin\Services;
|
namespace App\Admin\Services\System;
|
||||||
|
|
||||||
use App\Admin\Filters\KeywordFilter;
|
use App\Admin\Filters\KeywordFilter;
|
||||||
|
use App\Admin\Services\BaseService;
|
||||||
use App\Models\Keyword;
|
use App\Models\Keyword;
|
||||||
use Illuminate\Support\Arr;
|
use Illuminate\Support\Arr;
|
||||||
|
|
||||||
|
|
@ -156,7 +156,7 @@ Route::group([
|
||||||
], function (Router $router) {
|
], function (Router $router) {
|
||||||
// 账号管理
|
// 账号管理
|
||||||
$router->resource('admin_users', AdminUserController::class);
|
$router->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->resource('admin_roles', AdminRoleController::class);
|
||||||
$router->post('admin_roles/{admin_role}/menus', [AdminRoleController::class, 'saveMenus'])->name('admin_roles.set_menus');
|
$router->post('admin_roles/{admin_role}/menus', [AdminRoleController::class, 'saveMenus'])->name('admin_roles.set_menus');
|
||||||
|
|
|
||||||
|
|
@ -200,6 +200,11 @@ return [
|
||||||
'component_desc' => '默认为 amis , 非自定义前端页面请勿修改',
|
'component_desc' => '默认为 amis , 非自定义前端页面请勿修改',
|
||||||
],
|
],
|
||||||
|
|
||||||
|
'keywords' => [
|
||||||
|
'search_name' => '名称/KEY',
|
||||||
|
'parent_keyword' => '父级关键字',
|
||||||
|
],
|
||||||
|
|
||||||
'extensions' => [
|
'extensions' => [
|
||||||
'name_invalid' => '无效的扩展名称',
|
'name_invalid' => '无效的扩展名称',
|
||||||
'exists' => '该扩展已存在:',
|
'exists' => '该扩展已存在:',
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue