generated from liutk/owl-admin-base
145 lines
6.1 KiB
PHP
145 lines
6.1 KiB
PHP
<?php
|
|
|
|
namespace App\Admin\Controllers\System;
|
|
|
|
use App\Admin\Controllers\AdminController;
|
|
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\Page;
|
|
use Slowlyo\OwlAdmin\Renderers\TableColumn;
|
|
use Slowlyo\OwlAdmin\Services\AdminRoleService;
|
|
|
|
/**
|
|
* @property AdminUserService $service
|
|
*/
|
|
class AdminUserController extends AdminController
|
|
{
|
|
protected string $serviceName = AdminUserService::class;
|
|
|
|
public function list(): Page
|
|
{
|
|
$crud = $this->baseCRUD()
|
|
->headerToolbar([
|
|
// $this->createTypeButton('drawer', 'lg')->visible(Admin::user()->can('admin.system.admin_users.create')),
|
|
...$this->baseHeaderToolBar(),
|
|
])
|
|
->bulkActions([])
|
|
->filter($this->baseFilter()->body(
|
|
amis()->TextControl('keyword', __('admin.keyword'))
|
|
->size('md')
|
|
->placeholder(__('admin.admin_user.search_username'))
|
|
))
|
|
->filterDefaultVisible()
|
|
->quickSaveItemApi($this->getQuickEditItemPath(['lock']))
|
|
->itemCheckableOn('${id !== 1}')
|
|
->columns([
|
|
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')
|
|
),
|
|
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->rowEditTypeButton('drawer', 'lg')
|
|
->visible(Admin::user()->can('admin.system.admin_users.update'))
|
|
->visibleOn('${id != 1}'),
|
|
// $this->rowDeleteButton()
|
|
// ->visible(Admin::user()->can('admin.system.admin_users.delete'))
|
|
// ->visibleOn('${id != 1}'),
|
|
]),
|
|
]);
|
|
|
|
return $this->baseList($crud);
|
|
}
|
|
|
|
public function form(): Form
|
|
{
|
|
return $this->baseForm()->body([
|
|
amis()->ImageControl('avatar', __('admin.admin_user.avatar'))->receiver(admin_url('upload_image').'?full-url=1'),
|
|
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')
|
|
->valueField('id')
|
|
->joinValues(false)
|
|
->extractValue()
|
|
->options(AdminRoleService::make()->query()->get(['id', 'name'])),
|
|
amis()->SwitchControl()->name('lock')->label(__('admin.admin_user.lock'))->value(false),
|
|
]);
|
|
}
|
|
|
|
public function detail(): Form
|
|
{
|
|
return $this->baseDetail()->body([]);
|
|
}
|
|
|
|
/**
|
|
* 修改密码
|
|
*/
|
|
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 rowChangePasswordButton(): DrawerAction
|
|
{
|
|
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' => 'POST',
|
|
'url' => admin_url('system/admin_users/$id/change-password'),
|
|
])
|
|
->body([
|
|
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('lg')
|
|
);
|
|
}
|
|
}
|