owl-admin-base/app/Admin/Controllers/System/AdminUserController.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')
);
}
}