department.data.ts 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import type { DepartmentVO } from '#/api/system';
  2. import { $t } from '@vben/locales';
  3. import { getPopupContainer } from '@vben/utils';
  4. import { defineStatusField } from '#/adapter/form';
  5. import { defineEditShell } from '#/adapter/shell/edit';
  6. import { defineGrid } from '#/adapter/vxe-table';
  7. import {
  8. DepartmentVOSchema,
  9. editDepartmentMethod,
  10. listDepartmentMethod,
  11. optionsDepartmentMethod,
  12. } from '#/api/system';
  13. export const departmentGrid = defineGrid<DepartmentVO>({
  14. scope: 'system.department',
  15. query: listDepartmentMethod,
  16. tree: true,
  17. fields: [
  18. {
  19. component: 'Input',
  20. fieldName: 'name',
  21. label: $t('system.department.field.name'),
  22. },
  23. ],
  24. columns: (col) => [
  25. col.seq({ width: 140, align: 'left', treeNode: true }),
  26. {
  27. field: 'name',
  28. title: $t('system.department.field.name'),
  29. width: 200,
  30. align: 'left',
  31. },
  32. { field: 'remark', title: $t('ui.field.remark'), minWidth: 120 },
  33. ...col.audit(),
  34. col.status({ confirm: true }),
  35. col.actions([{ code: 'append', text: '新增下级' }, 'edit', 'delete'], 180),
  36. ],
  37. });
  38. export const departmentForm = defineEditShell<DepartmentVO>({
  39. scope: 'system.department',
  40. submit: editDepartmentMethod,
  41. shell: 'modal',
  42. prepare(data) {
  43. if (data.pid === '0') Reflect.deleteProperty(data, 'pid');
  44. return data;
  45. },
  46. schema: [
  47. {
  48. component: 'ApiTreeSelect',
  49. componentProps: {
  50. api: optionsDepartmentMethod,
  51. filterTreeNode(input: string, node: Recordable<any>) {
  52. if (!input || input.length === 0) return true;
  53. const title: string = node.label.toString() ?? '';
  54. if (!title) return false;
  55. return title.includes(input) || $t(title).includes(input);
  56. },
  57. getPopupContainer,
  58. class: 'w-full',
  59. labelField: 'name',
  60. valueField: 'id',
  61. childrenField: 'children',
  62. showSearch: true,
  63. allowClear: true,
  64. },
  65. fieldName: 'pid',
  66. label: $t('system.department.name', ['', '上级']),
  67. },
  68. {
  69. component: 'Input',
  70. fieldName: 'name',
  71. label: $t('system.department.field.name'),
  72. rules: DepartmentVOSchema.shape.name,
  73. },
  74. defineStatusField(),
  75. {
  76. component: 'Textarea',
  77. fieldName: 'remark',
  78. label: $t('ui.field.remark'),
  79. rules: DepartmentVOSchema.shape.remark,
  80. },
  81. ],
  82. });