| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- <?php
- namespace App\Module\User\AdminControllers\Helper;
- use App\Module\User\Enums\STATUS2;
- use Dcat\Admin\Form;
- use Dcat\Admin\Form\Field;
- use Illuminate\Support\Facades\Hash;
- /**
- * 表单辅助特性
- *
- * 提供用户模块后台控制器的表单构建功能的具体实现
- * 只保留具有复用价值的方法
- */
- trait FormHelperTrait
- {
- /**
- * 添加用户名输入
- *
- * 复用价值:高 - 统一处理用户名输入,包括验证规则
- *
- * @param string $field 字段名
- * @param string $label 标签名
- * @return Field\Text
- */
- public function textUsername(string $field = 'username', string $label = '用户名'): Field\Text
- {
- return $this->form->text($field, $label)
- ->required()
- ->rules('required|min:3|max:20|unique:users,username,{{id}}')
- ->help('用户名长度为3-20个字符,且必须唯一');
- }
- /**
- * 添加密码输入
- *
- * 复用价值:高 - 统一处理密码输入,包括哈希处理
- *
- * @param string $field 字段名
- * @param string $label 标签名
- * @param bool $required 是否必填
- * @return Field\Password
- */
- public function passwordPassword(string $field = 'password', string $label = '密码', bool $required = false): Field\Password
- {
- $field = $this->form->password($field, $label)
- ->help('密码长度至少为6个字符,不修改请留空')
- ->saving(function ($value) {
- if ($value) {
- return Hash::make($value);
- }
- });
- if ($required) {
- $field->required()->rules('required|min:6');
- } else {
- $field->rules('nullable|min:6');
- }
- return $field;
- }
- /**
- * 添加用户状态选择
- *
- * 复用价值:高 - 统一处理用户状态的选择,使用枚举类型
- *
- * @param string $field 字段名
- * @param string $label 标签名
- * @return Field\Radio
- */
- public function radioStatus(string $field = 'status2', string $label = '状态'): Field\Radio
- {
- return $this->form->radio($field, $label)
- ->options(STATUS2::getNames())
- ->default(STATUS2::Normal->value);
- }
- /**
- * 添加用户头像上传
- *
- * 复用价值:高 - 统一处理用户头像上传,包括图片处理
- *
- * @param string $field 字段名
- * @param string $label 标签名
- * @return Field\Image
- */
- public function imageAvatar(string $field = 'avatar', string $label = '头像'): Field\Image
- {
- return $this->form->image($field, $label)
- ->autoUpload()
- ->uniqueName()
- ->help('建议上传正方形图片,系统会自动处理');
- }
- /**
- * 添加用户手机号输入
- *
- * 复用价值:高 - 统一处理用户手机号输入,包括验证规则
- *
- * @param string $field 字段名
- * @param string $label 标签名
- * @param bool $required 是否必填
- * @return Field\Text
- */
- public function textPhone(string $field = 'phone', string $label = '手机号', bool $required = false): Field\Text
- {
- $field = $this->form->text($field, $label)
- ->help('请输入有效的手机号码');
- if ($required) {
- $field->required()->rules('required|regex:/^1[3-9]\d{9}$/');
- } else {
- $field->rules('nullable|regex:/^1[3-9]\d{9}$/');
- }
- return $field;
- }
- /**
- * 添加用户邮箱输入
- *
- * 复用价值:高 - 统一处理用户邮箱输入,包括验证规则
- *
- * @param string $field 字段名
- * @param string $label 标签名
- * @param bool $required 是否必填
- * @return Field\Email
- */
- public function emailEmail(string $field = 'email', string $label = '邮箱', bool $required = false): Field\Email
- {
- $field = $this->form->email($field, $label)
- ->help('请输入有效的邮箱地址');
- if ($required) {
- $field->required()->rules('required|email');
- } else {
- $field->rules('nullable|email');
- }
- return $field;
- }
- /**
- * 添加用户基本信息表单组
- *
- * 复用价值:高 - 提供完整的用户基本信息表单组,包括用户名、密码、状态等
- *
- * @param bool $isCreate 是否为创建表单
- * @return void
- */
- public function addUserBasicFields(bool $isCreate = false): void
- {
- $this->form->display('id', 'ID');
- $this->textUsername();
- if ($isCreate) {
- $this->passwordPassword('password', '密码', true);
- } else {
- $this->passwordPassword();
- }
- $this->form->text('nickname', '昵称')
- ->help('用户昵称,可以与用户名不同');
- $this->imageAvatar();
- $this->radioStatus();
- }
- /**
- * 添加用户联系信息表单组
- *
- * 复用价值:高 - 提供完整的用户联系信息表单组,包括手机号、邮箱、微信号等
- *
- * @return void
- */
- public function addUserContactFields(): void
- {
- $this->form->divider('联系信息');
- $this->textPhone();
- $this->emailEmail();
- $this->form->text('wx_id', '微信号')
- ->help('用户微信号');
- }
- /**
- * 添加用户安全信息表单组
- *
- * 复用价值:高 - 提供完整的用户安全信息表单组,包括安全密码等
- *
- * @return void
- */
- public function addUserSecurityFields(): void
- {
- $this->form->divider('安全信息');
- $this->form->password('secret_password', '安全密码')
- ->help('用户安全密码,用于重要操作验证,不修改请留空')
- ->saving(function ($value) {
- if ($value) {
- return Hash::make($value);
- }
- });
- }
- }
|