baseCRUD() ->headerToolbar([ $this->createButton(true)->visible(Admin::user()->can('admin.system.admin_users.create')), ...$this->baseHeaderToolBar(), ]) ->filter($this->baseFilter()->body( amisMake()->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') ), 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() ->visible(Admin::user()->can('admin.system.admin_users.change_password')) ->visibleOn('${id != 1}'), $this->rowEditButton(true) ->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([ 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')) ->searchable() ->multiple() ->labelField('name') ->valueField('id') ->joinValues(false) ->extractValue() ->options(AdminRoleService::make()->query()->get(['id', 'name'])), SwitchControl::make()->name('lock')->label(__('admin.admin_user.lock'))->value(false), ]); } public function detail(): Form { return $this->baseDetail()->body([]); } public function changePassword($id, AdminUserChangePasswordRequest $request) { $model = Admin::adminUserModel(); $user = $model->findOrFail($id); $user->update([ 'password' => Hash::make($request->input('password')), ]); return $this->autoResponse('success', __('admin.save')); } protected function changePasswordButton() { 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('') ->api([ 'method' => 'PUT', '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]), ]), ])->size('md') ); } }