user.data.ts 9.1 KB

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