*/ namespace app\admin\page\system; use app\admin\model\system\Administrators as AdministratorsM; use app\admin\model\system\DataAuth; use app\admin\model\system\Role; use app\common\BaseModel; use app\common\BasePage; use sdModule\layui\defaultForm\FormData; use sdModule\layui\Layui; use sdModule\layui\TablePage; use sdModule\layui\tablePage\TableAux; use sdModule\layuiSearch\Form; use sdModule\layuiSearch\SearchForm; use think\facade\Db; class Administrators extends BasePage { public array $default_filter = [ 'edit' => ['id', 'account', 'name', 'status', 'role_id'] ]; /** * @return string */ public function listPageName(): string { return lang('administrator.administrator'); } /** * 获取创建列表table的数据 * @return TablePage */ public function getTablePageData(): TablePage { $field_data = [ TableAux::column(['type' => 'checkbox']), TableAux::column('id', '唯一ID'), TableAux::column('name', '用户名'), TableAux::column('account', '账号'), TableAux::column('error_number', '密码错误次数'), TableAux::column('lately_time', '最近登录'), TableAux::column('error_date', '错误日期'), TableAux::column('role', '角色'), TableAux::column('status', '状态'), TableAux::column('create_time', '创建时间'), ]; $table = TablePage::create($field_data); $table->addEvent(['directly_under', 'all']); $table->setBarEventHtml('directly_under', Layui::button('直属', 'username')->setEvent('directly_under')->normal('sm')); $table->setBarEventHtml('all', Layui::button('全部', 'group')->setEvent('all')->normal('sm')); $table->setBarEventJs('directly_under', TableAux::searchWhere(['mode' => 'directly_under'])); $table->setBarEventJs('all', TableAux::searchWhere(['mode' => 'all'])); return $table; } /** * @inheritDoc * @return array */ public function formData(): array { $form_data = [ FormData::hidden('id'), FormData::text('name', lang('administrator.name')), FormData::textShort('account', lang('administrator.account'), '', lang('administrator.login account')), FormData::password('password', lang('administrator.password'), lang('administrator.password require')), FormData::password('password_confirm', lang('administrator.password confirm'), lang('administrator.password require')), FormData::selects('role_id', lang('administrator.role'), Role::addSoftDelWhere(['administrators_id' => AdministratorsM::getSession('id')])->column('role', 'id')), FormData::radio('status', lang('administrator.status'), AdministratorsM::getStatusSc())->preset(AdministratorsM::STATUS_NORMAL), ]; if (env('APP.DATA_AUTH', false)){ $default = DataAuth::where(['delete_time' => 0])->where(['administrators_id' => request()->get('id')]) ->column('auth_id', 'table_names'); foreach (config('admin.data_auth') as $data){ $form_data[] = FormData::selects("data_auth_table_{$data['table']}", $data['remark'], self::dataAuth($data['table'])) ->preset(empty($default[$data['table']]) ? [] : explode(',', $default[$data['table']])); } } return $form_data; } /** * 数据权限的数据获取 * @param string $table * @return array|\think\Collection */ public static function dataAuth(string $table) { $data_auth = array_column(config('admin.data_auth'), null, 'table'); if (empty($data_auth[$table])){ return []; } try { return Db::name($table)->where(BaseModel::getSoftDeleteData()) ->column("{$data_auth[$table]['field']}", "id"); } catch (\Exception $exception) { return []; } } /** * @inheritDoc * @return string */ public function searchFormData():string { $form_data = [ SearchForm::Text('account%%', lang('administrator.account'))->label(true)->html(), SearchForm::Text('name%%', lang('administrator.administrator'))->label(true)->html(), SearchForm::Text('r.role%%', lang('administrator.role'))->label(true)->html(), SearchForm::Select('status', lang('administrator.status'))->label(true)->html([ AdministratorsM::STATUS_NORMAL => lang('normal'), AdministratorsM::STATUS_FROZEN => lang('disable'), ]), ]; return Form::CreateHTML($form_data); } /** * 快捷搜索设置 * @return array */ public function setQuickSearchField(): array { return [ 'name%%' => lang('administrator.administrator'), 'account%%' => lang('administrator.account') ]; } /** * @return array */ public function shortInput(): array { return [ 'password' => lang('administrator.6-16 digit password'), 'password_confirm' => lang('administrator.6-16 digit password'), ]; } }