user.data.ts 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444
  1. import { BasicColumn } from '/@/components/Table';
  2. import { FormSchema } from '/@/components/Table';
  3. import { getAllRolesList, getAllTenantList } from './user.api';
  4. import { rules } from '/@/utils/helper/validator';
  5. import { render } from '/@/utils/common/renderUtils';
  6. export const columns: BasicColumn[] = [
  7. {
  8. title: '用户账号',
  9. dataIndex: 'username',
  10. width: 120,
  11. },
  12. {
  13. title: '用户姓名',
  14. dataIndex: 'realname',
  15. width: 100,
  16. },
  17. {
  18. title: '头像',
  19. dataIndex: 'avatar',
  20. width: 120,
  21. customRender: render.renderAvatar,
  22. },
  23. {
  24. title: '所属角色',
  25. dataIndex: 'userRoles',
  26. width: 100,
  27. customRender: ({ value }) => {
  28. if (value) {
  29. const nameList = [];
  30. value.forEach((item) => {
  31. nameList.push(item['roleName']);
  32. });
  33. return nameList.toString();
  34. }
  35. return '';
  36. },
  37. },
  38. {
  39. title: '性别',
  40. dataIndex: 'sex',
  41. width: 80,
  42. sorter: true,
  43. customRender: ({ text }) => {
  44. return render.renderDict(text, 'sex');
  45. },
  46. },
  47. {
  48. title: '生日',
  49. dataIndex: 'birthday',
  50. width: 100,
  51. },
  52. {
  53. title: '手机号',
  54. dataIndex: 'phone',
  55. width: 100,
  56. },
  57. {
  58. title: '部门',
  59. width: 150,
  60. dataIndex: 'orgCodeTxt',
  61. },
  62. {
  63. title: '负责部门',
  64. width: 150,
  65. dataIndex: 'departIds_dictText',
  66. },
  67. {
  68. title: '状态',
  69. dataIndex: 'status_dictText',
  70. width: 80,
  71. },
  72. ];
  73. export const recycleColumns: BasicColumn[] = [
  74. {
  75. title: '用户账号',
  76. dataIndex: 'username',
  77. width: 100,
  78. },
  79. {
  80. title: '用户姓名',
  81. dataIndex: 'realname',
  82. width: 100,
  83. },
  84. {
  85. title: '头像',
  86. dataIndex: 'avatar',
  87. width: 80,
  88. customRender: render.renderAvatar,
  89. },
  90. {
  91. title: '性别',
  92. dataIndex: 'sex',
  93. width: 80,
  94. sorter: true,
  95. customRender: ({ text }) => {
  96. return render.renderDict(text, 'sex');
  97. },
  98. },
  99. ];
  100. export const searchFormSchema: FormSchema[] = [
  101. {
  102. label: '账号',
  103. field: 'username',
  104. component: 'JInput',
  105. colProps: { span: 6 },
  106. },
  107. {
  108. label: '名字',
  109. field: 'realname',
  110. component: 'JInput',
  111. colProps: { span: 6 },
  112. },
  113. {
  114. label: '性别',
  115. field: 'sex',
  116. component: 'JDictSelectTag',
  117. componentProps: {
  118. dictCode: 'sex',
  119. placeholder: '请选择性别',
  120. stringToNumber: true,
  121. },
  122. colProps: { span: 6 },
  123. },
  124. {
  125. label: '手机号码',
  126. field: 'phone',
  127. component: 'Input',
  128. colProps: { span: 6 },
  129. },
  130. {
  131. label: '用户状态',
  132. field: 'status',
  133. component: 'JDictSelectTag',
  134. componentProps: {
  135. dictCode: 'user_status',
  136. placeholder: '请选择状态',
  137. stringToNumber: true,
  138. },
  139. colProps: { span: 6 },
  140. },
  141. ];
  142. export const formSchema: FormSchema[] = [
  143. {
  144. label: '',
  145. field: 'id',
  146. component: 'Input',
  147. show: false,
  148. },
  149. {
  150. label: '用户账号',
  151. field: 'username',
  152. component: 'Input',
  153. dynamicDisabled: ({ values }) => {
  154. return !!values.id;
  155. },
  156. dynamicRules: ({ model, schema }) => rules.duplicateCheckRule('sys_user', 'username', model, schema, true),
  157. },
  158. {
  159. label: '登录密码',
  160. field: 'password',
  161. component: 'StrengthMeter',
  162. rules: [
  163. {
  164. required: true,
  165. message: '请输入登录密码',
  166. },
  167. ],
  168. },
  169. {
  170. label: '确认密码',
  171. field: 'confirmPassword',
  172. component: 'InputPassword',
  173. dynamicRules: ({ values }) => rules.confirmPassword(values, true),
  174. },
  175. {
  176. label: '用户姓名',
  177. field: 'realname',
  178. required: true,
  179. component: 'Input',
  180. },
  181. {
  182. label: '工号',
  183. field: 'workNo',
  184. required: true,
  185. component: 'Input',
  186. dynamicRules: ({ model, schema }) => rules.duplicateCheckRule('sys_user', 'work_no', model, schema, true),
  187. },
  188. {
  189. label: '职务',
  190. field: 'post',
  191. required: false,
  192. component: 'JSelectPosition',
  193. componentProps: {
  194. rowKey: 'code',
  195. labelKey: 'name',
  196. },
  197. },
  198. {
  199. label: '角色',
  200. field: 'selectedroles',
  201. component: 'ApiSelect',
  202. componentProps: {
  203. mode: 'multiple',
  204. api: getAllRolesList,
  205. labelField: 'roleName',
  206. valueField: 'id',
  207. },
  208. },
  209. {
  210. label: '所属部门',
  211. field: 'selecteddeparts',
  212. component: 'JSelectDept',
  213. required: true,
  214. componentProps: ({ formActionType, formModel }) => {
  215. return {
  216. sync: false,
  217. checkStrictly: true,
  218. defaultExpandLevel: 2,
  219. onSelect: (options, values) => {
  220. const { updateSchema } = formActionType;
  221. //所属部门修改后更新负责部门下拉框数据
  222. updateSchema([
  223. {
  224. field: 'departIds',
  225. componentProps: { options },
  226. },
  227. ]);
  228. //所属部门修改后更新负责部门数据
  229. formModel.departIds && (formModel.departIds = formModel.departIds.filter((item) => values.value.indexOf(item) > -1));
  230. },
  231. };
  232. },
  233. },
  234. {
  235. label: '租户',
  236. field: 'relTenantIds',
  237. component: 'ApiSelect',
  238. componentProps: {
  239. mode: 'multiple',
  240. api: getAllTenantList,
  241. numberToString: true,
  242. labelField: 'name',
  243. valueField: 'id',
  244. },
  245. },
  246. {
  247. label: '身份',
  248. field: 'userIdentity',
  249. component: 'RadioGroup',
  250. defaultValue: 1,
  251. componentProps: ({ formModel }) => {
  252. return {
  253. options: [
  254. { label: '普通用户', value: 1, key: '1' },
  255. { label: '上级', value: 2, key: '2' },
  256. ],
  257. onChange: () => {
  258. formModel.userIdentity == 1 && (formModel.departIds = []);
  259. },
  260. };
  261. },
  262. },
  263. {
  264. label: '负责部门',
  265. field: 'departIds',
  266. component: 'Select',
  267. componentProps: {
  268. mode: 'multiple',
  269. },
  270. ifShow: ({ values }) => values.userIdentity == 2,
  271. },
  272. {
  273. label: '头像',
  274. field: 'avatar',
  275. component: 'JImageUpload',
  276. componentProps: {
  277. fileMax: 1,
  278. },
  279. },
  280. {
  281. label: '签名',
  282. field: 'elcSignPath',
  283. component: 'JUpload',
  284. componentProps: {
  285. fileMax: 1,
  286. fileType: 'image',
  287. bizPath: 'elcSign',
  288. returnUrl: true,
  289. },
  290. },
  291. {
  292. label: '生日',
  293. field: 'birthday',
  294. component: 'DatePicker',
  295. },
  296. {
  297. label: '性别',
  298. field: 'sex',
  299. component: 'JDictSelectTag',
  300. componentProps: {
  301. dictCode: 'sex',
  302. placeholder: '请选择性别',
  303. stringToNumber: true,
  304. },
  305. },
  306. {
  307. label: '区队',
  308. field: 'districtTeam',
  309. component: 'JDictSelectTag',
  310. componentProps: {
  311. dictCode: 'districtTeam',
  312. placeholder: '请选择区队',
  313. },
  314. },
  315. {
  316. label: '邮箱',
  317. field: 'email',
  318. component: 'Input',
  319. rules: rules.rule('email', false),
  320. },
  321. {
  322. label: '手机号码',
  323. field: 'phone',
  324. component: 'Input',
  325. dynamicRules: ({ model, schema }) => {
  326. return [
  327. { ...rules.duplicateCheckRule('sys_user', 'phone', model, schema, true)[0] },
  328. { pattern: /^1[3|4|5|7|8|9][0-9]\d{8}$/, message: '手机号码格式有误' },
  329. ];
  330. },
  331. },
  332. {
  333. label: '座机',
  334. field: 'telephone',
  335. component: 'Input',
  336. rules: [{ pattern: /^0\d{2,3}-[1-9]\d{6,7}$/, message: '请输入正确的座机号码' }],
  337. },
  338. {
  339. label: '工作流引擎',
  340. field: 'activitiSync',
  341. defaultValue: 1,
  342. component: 'JDictSelectTag',
  343. componentProps: {
  344. dictCode: 'activiti_sync',
  345. type: 'radio',
  346. stringToNumber: true,
  347. },
  348. },
  349. ];
  350. export const formPasswordSchema: FormSchema[] = [
  351. {
  352. label: '用户账号',
  353. field: 'username',
  354. component: 'Input',
  355. componentProps: { readOnly: true },
  356. },
  357. {
  358. label: '登录密码',
  359. field: 'password',
  360. component: 'StrengthMeter',
  361. componentProps: {
  362. placeholder: '请输入登录密码',
  363. },
  364. rules: [
  365. {
  366. required: true,
  367. message: '请输入登录密码',
  368. },
  369. ],
  370. },
  371. {
  372. label: '确认密码',
  373. field: 'confirmPassword',
  374. component: 'InputPassword',
  375. dynamicRules: ({ values }) => rules.confirmPassword(values, true),
  376. },
  377. ];
  378. export const formAgentSchema: FormSchema[] = [
  379. {
  380. label: '',
  381. field: 'id',
  382. component: 'Input',
  383. show: false,
  384. },
  385. {
  386. field: 'userName',
  387. label: '用户名',
  388. component: 'Input',
  389. componentProps: {
  390. readOnly: true,
  391. allowClear: false,
  392. },
  393. },
  394. {
  395. field: 'agentUserName',
  396. label: '代理人用户名',
  397. required: true,
  398. component: 'JSelectUser',
  399. componentProps: {
  400. rowKey: 'username',
  401. labelKey: 'realname',
  402. maxSelectCount: 10,
  403. },
  404. },
  405. {
  406. field: 'startTime',
  407. label: '代理开始时间',
  408. component: 'DatePicker',
  409. required: true,
  410. componentProps: {
  411. showTime: true,
  412. valueFormat: 'YYYY-MM-DD HH:mm:ss',
  413. placeholder: '请选择代理开始时间',
  414. },
  415. },
  416. {
  417. field: 'endTime',
  418. label: '代理结束时间',
  419. component: 'DatePicker',
  420. required: true,
  421. componentProps: {
  422. showTime: true,
  423. valueFormat: 'YYYY-MM-DD HH:mm:ss',
  424. placeholder: '请选择代理结束时间',
  425. },
  426. },
  427. {
  428. field: 'status',
  429. label: '状态',
  430. component: 'JDictSelectTag',
  431. defaultValue: '1',
  432. componentProps: {
  433. dictCode: 'valid_status',
  434. type: 'radioButton',
  435. },
  436. },
  437. ];