FormHelperTrait.php 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. <?php
  2. namespace App\Module\User\AdminControllers\Helper;
  3. use App\Module\User\Enums\STATUS2;
  4. use Dcat\Admin\Form;
  5. use Dcat\Admin\Form\Field;
  6. use Illuminate\Support\Facades\Hash;
  7. /**
  8. * 表单辅助特性
  9. *
  10. * 提供用户模块后台控制器的表单构建功能的具体实现
  11. * 只保留具有复用价值的方法
  12. */
  13. trait FormHelperTrait
  14. {
  15. /**
  16. * 添加用户名输入
  17. *
  18. * 复用价值:高 - 统一处理用户名输入,包括验证规则
  19. *
  20. * @param string $field 字段名
  21. * @param string $label 标签名
  22. * @return Field\Text
  23. */
  24. public function textUsername(string $field = 'username', string $label = '用户名'): Field\Text
  25. {
  26. return $this->form->text($field, $label)
  27. ->required()
  28. ->rules('required|min:3|max:20|unique:users,username,{{id}}')
  29. ->help('用户名长度为3-20个字符,且必须唯一');
  30. }
  31. /**
  32. * 添加密码输入
  33. *
  34. * 复用价值:高 - 统一处理密码输入,包括哈希处理
  35. *
  36. * @param string $field 字段名
  37. * @param string $label 标签名
  38. * @param bool $required 是否必填
  39. * @return Field\Password
  40. */
  41. public function passwordPassword(string $field = 'password', string $label = '密码', bool $required = false): Field\Password
  42. {
  43. $field = $this->form->password($field, $label)
  44. ->help('密码长度至少为6个字符,不修改请留空')
  45. ->saving(function ($value) {
  46. if ($value) {
  47. return Hash::make($value);
  48. }
  49. });
  50. if ($required) {
  51. $field->required()->rules('required|min:6');
  52. } else {
  53. $field->rules('nullable|min:6');
  54. }
  55. return $field;
  56. }
  57. /**
  58. * 添加用户状态选择
  59. *
  60. * 复用价值:高 - 统一处理用户状态的选择,使用枚举类型
  61. *
  62. * @param string $field 字段名
  63. * @param string $label 标签名
  64. * @return Field\Radio
  65. */
  66. public function radioStatus(string $field = 'status2', string $label = '状态'): Field\Radio
  67. {
  68. return $this->form->radio($field, $label)
  69. ->options(STATUS2::getNames())
  70. ->default(STATUS2::Normal->value);
  71. }
  72. /**
  73. * 添加用户头像上传
  74. *
  75. * 复用价值:高 - 统一处理用户头像上传,包括图片处理
  76. *
  77. * @param string $field 字段名
  78. * @param string $label 标签名
  79. * @return Field\Image
  80. */
  81. public function imageAvatar(string $field = 'avatar', string $label = '头像'): Field\Image
  82. {
  83. return $this->form->image($field, $label)
  84. ->autoUpload()
  85. ->uniqueName()
  86. ->help('建议上传正方形图片,系统会自动处理');
  87. }
  88. /**
  89. * 添加用户手机号输入
  90. *
  91. * 复用价值:高 - 统一处理用户手机号输入,包括验证规则
  92. *
  93. * @param string $field 字段名
  94. * @param string $label 标签名
  95. * @param bool $required 是否必填
  96. * @return Field\Text
  97. */
  98. public function textPhone(string $field = 'phone', string $label = '手机号', bool $required = false): Field\Text
  99. {
  100. $field = $this->form->text($field, $label)
  101. ->help('请输入有效的手机号码');
  102. if ($required) {
  103. $field->required()->rules('required|regex:/^1[3-9]\d{9}$/');
  104. } else {
  105. $field->rules('nullable|regex:/^1[3-9]\d{9}$/');
  106. }
  107. return $field;
  108. }
  109. /**
  110. * 添加用户邮箱输入
  111. *
  112. * 复用价值:高 - 统一处理用户邮箱输入,包括验证规则
  113. *
  114. * @param string $field 字段名
  115. * @param string $label 标签名
  116. * @param bool $required 是否必填
  117. * @return Field\Email
  118. */
  119. public function emailEmail(string $field = 'email', string $label = '邮箱', bool $required = false): Field\Email
  120. {
  121. $field = $this->form->email($field, $label)
  122. ->help('请输入有效的邮箱地址');
  123. if ($required) {
  124. $field->required()->rules('required|email');
  125. } else {
  126. $field->rules('nullable|email');
  127. }
  128. return $field;
  129. }
  130. /**
  131. * 添加用户基本信息表单组
  132. *
  133. * 复用价值:高 - 提供完整的用户基本信息表单组,包括用户名、密码、状态等
  134. *
  135. * @param bool $isCreate 是否为创建表单
  136. * @return void
  137. */
  138. public function addUserBasicFields(bool $isCreate = false): void
  139. {
  140. $this->form->display('id', 'ID');
  141. $this->textUsername();
  142. if ($isCreate) {
  143. $this->passwordPassword('password', '密码', true);
  144. } else {
  145. $this->passwordPassword();
  146. }
  147. $this->form->text('nickname', '昵称')
  148. ->help('用户昵称,可以与用户名不同');
  149. $this->imageAvatar();
  150. $this->radioStatus();
  151. }
  152. /**
  153. * 添加用户联系信息表单组
  154. *
  155. * 复用价值:高 - 提供完整的用户联系信息表单组,包括手机号、邮箱、微信号等
  156. *
  157. * @return void
  158. */
  159. public function addUserContactFields(): void
  160. {
  161. $this->form->divider('联系信息');
  162. $this->textPhone();
  163. $this->emailEmail();
  164. $this->form->text('wx_id', '微信号')
  165. ->help('用户微信号');
  166. }
  167. /**
  168. * 添加用户安全信息表单组
  169. *
  170. * 复用价值:高 - 提供完整的用户安全信息表单组,包括安全密码等
  171. *
  172. * @return void
  173. */
  174. public function addUserSecurityFields(): void
  175. {
  176. $this->form->divider('安全信息');
  177. $this->form->password('secret_password', '安全密码')
  178. ->help('用户安全密码,用于重要操作验证,不修改请留空')
  179. ->saving(function ($value) {
  180. if ($value) {
  181. return Hash::make($value);
  182. }
  183. });
  184. }
  185. }