account.data.ts 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. import { appointment, appointPos, roleList } from '/@/api/sys/user';
  2. import { isAccountExist, IsPhoneExist } from '/@/api/system/system';
  3. import { BasicColumn } from '/@/components/Table';
  4. import { FormSchema } from '/@/components/Table';
  5. import { copyTransFun } from '/@/utils/fnUtils';
  6. import { emailRule, ChineseRegexp, EmailRegexp, phoneRegexp } from '/@/utils/rules';
  7. let olderPhoneNumber;
  8. export const columns: BasicColumn[] = [
  9. {
  10. title: '用户名',
  11. dataIndex: 'NAME',
  12. width: 120,
  13. },
  14. {
  15. title: '登录姓名',
  16. dataIndex: 'LOGIN_NAME',
  17. width: 120,
  18. },
  19. {
  20. title: '用户ID',
  21. dataIndex: 'EMPLOYEE_ID',
  22. width: 200,
  23. },
  24. {
  25. title: '性别',
  26. dataIndex: 'SEX',
  27. width: 80,
  28. slots: { customRender: 'SEX' },
  29. },
  30. ];
  31. export const searchFormSchema: FormSchema[] = [
  32. {
  33. field: 'username',
  34. label: '用户名',
  35. component: 'Input',
  36. colProps: { span: 8 },
  37. componentProps: {
  38. maxLength: 255,
  39. placeholder: '请输入用户名',
  40. },
  41. },
  42. {
  43. field: 'realName',
  44. label: '姓名',
  45. component: 'Input',
  46. colProps: { span: 8 },
  47. componentProps: {
  48. maxLength: 255,
  49. placeholder: '请输入姓名',
  50. },
  51. },
  52. ];
  53. export const accountFormSchema: FormSchema[] = [
  54. {
  55. field: 'id',
  56. label: 'id',
  57. component: 'Input',
  58. show: false,
  59. componentProps: {
  60. maxLength: 36,
  61. },
  62. },
  63. {
  64. field: 'loginName',
  65. label: '平台登录名',
  66. component: 'Input',
  67. colProps: { span: 12 },
  68. dynamicDisabled: false,
  69. componentProps: {
  70. maxLength: 36,
  71. placeholder: '请输入用户名',
  72. },
  73. dynamicRules: ({ values }) => {
  74. return [
  75. {
  76. required: true,
  77. validator(_, value) {
  78. return new Promise((resolve, reject) => {
  79. if (value == '') {
  80. reject('请输入用户名');
  81. } else if (ChineseRegexp.test(value)) {
  82. reject('用户名不能含有中文');
  83. } else if (EmailRegexp.test(value)) {
  84. reject('用户名不能为电子邮箱格式');
  85. } else {
  86. if (values.username != undefined && values.id == undefined) {
  87. isAccountExist(value).then(({ data }) => {
  88. if (data != null) {
  89. reject('用户名已存在');
  90. } else {
  91. resolve();
  92. }
  93. });
  94. } else {
  95. resolve();
  96. }
  97. }
  98. });
  99. },
  100. },
  101. ];
  102. },
  103. },
  104. {
  105. field: 'userName',
  106. label: '姓名',
  107. component: 'Input',
  108. colProps: { span: 12 },
  109. required: true,
  110. componentProps: {
  111. maxLength: 10,
  112. },
  113. },
  114. {
  115. label: '手机号',
  116. field: 'mobile',
  117. component: 'Input',
  118. colProps: { span: 12 },
  119. dynamicRules: ({ values }) => {
  120. return [
  121. {
  122. required: true,
  123. validator(_, value) {
  124. return new Promise((resolve, reject) => {
  125. if (value == '') {
  126. reject('请输入手机号');
  127. } else if (!phoneRegexp.test(value)) {
  128. reject('请输入正确的手机号');
  129. } else {
  130. if (values.phoneNumber != undefined) {
  131. // 此处可以用防抖函数优化性能
  132. IsPhoneExist(value).then(({ data }) => {
  133. if (data != null) {
  134. reject('手机号已存在');
  135. } else {
  136. resolve();
  137. }
  138. });
  139. } else {
  140. resolve();
  141. }
  142. }
  143. });
  144. },
  145. },
  146. ];
  147. },
  148. componentProps({ formActionType }) {
  149. const { clearValidate } = formActionType;
  150. return {
  151. onChange(value) {
  152. if (value == olderPhoneNumber) {
  153. clearValidate('phoneNumber');
  154. }
  155. },
  156. };
  157. },
  158. },
  159. {
  160. field: 'pwd',
  161. label: '密码',
  162. component: 'InputPassword',
  163. required: true,
  164. colProps: { span: 12 },
  165. rules: [
  166. { required: true, message: '密码不能为空' },
  167. { pattern: /^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*\W)[\S]{8,30}$/, message: '密码中必须包含大小写 字母、数字、特殊字符,至少8个字符,最多30个字符' }
  168. ]
  169. },
  170. {
  171. field: 'sex',
  172. label: '性别',
  173. component: 'RadioButtonGroup',
  174. required: true,
  175. componentProps: {
  176. options: [
  177. { label: "男", value: '1' },
  178. { label: "女", value: '0' },
  179. ],
  180. },
  181. },
  182. {
  183. field: 'sszw',
  184. component: 'ApiTreeSelect',
  185. label: '所属职位',
  186. componentProps: {
  187. placeholder: '请选择职位',
  188. api: async () => {
  189. var data = await appointment();
  190. copyTransFun(data as any as any[]);
  191. return data;
  192. },
  193. onChange(value) {
  194. sszw.value = value;
  195. },
  196. },
  197. },
  198. {
  199. field: 'ssgw',
  200. label: '所属岗位',
  201. colProps: { span: 24 },
  202. component: 'ApiTreeSelect',
  203. componentProps: ({ formModel }) => {
  204. const selectValue = formModel.sszw;
  205. return {
  206. params: selectValue,
  207. api: async (params) => {
  208. return params ? await appointPos(params) : [];
  209. },
  210. onChange(value) {
  211. ssgw.value = value;
  212. },
  213. }
  214. }
  215. },
  216. // {
  217. // field: 'userjs',
  218. // component: 'ApiTreeSelect',
  219. // label: '角色列表',
  220. // componentProps: {
  221. // placeholder: '请选择角色',
  222. // api: async () => {
  223. // var data = await roleList();
  224. // return data;
  225. // },
  226. // onChange(value) {
  227. // userjs.value = value;
  228. // },
  229. // },
  230. // },
  231. {
  232. label: '角色',
  233. field: 'userjs',
  234. component: 'Select',
  235. colProps: { span: 24 },
  236. slot: 'roleSlot',
  237. rules: [
  238. {
  239. required: true,
  240. message: '请选择角色',
  241. type: 'array',
  242. },
  243. ],
  244. },
  245. ];