import type { VxeTableGridOptions } from '@vben/plugins/vxe-table'; import type { VbenFormSchema } from '#/adapter/form'; import type { OnActionClickFn } from '#/adapter/vxe-table'; import type { SystemDeptApi } from '#/api/system/dept'; import { z } from '#/adapter/form'; import { getDeptList } from '#/api/system/dept'; import { $t } from '#/locales'; import { DICT_TYPE } from '#/utils/dict'; /** 获取编辑表单的字段配置 */ // TODO @芋艿:表单的整理 export function useSchema(): VbenFormSchema[] { return [ { component: 'ApiTreeSelect', componentProps: { allowClear: true, api: getDeptList, class: 'w-full', labelField: 'name', valueField: 'id', childrenField: 'children' }, fieldName: 'parentId', label: '上级部门', }, { component: 'Input', fieldName: 'name', label: $t('system.dept.deptName'), rules: z .string() .min(2, $t('ui.formRules.minLength', [$t('system.dept.deptName'), 2])) .max( 20, $t('ui.formRules.maxLength', [$t('system.dept.deptName'), 20]), ), }, { component: 'RadioGroup', componentProps: { buttonStyle: 'solid', options: [ { label: $t('common.enabled'), value: 1 }, { label: $t('common.disabled'), value: 0 }, ], optionType: 'button', }, defaultValue: 1, fieldName: 'status', label: $t('system.dept.status'), }, { component: 'Textarea', componentProps: { maxLength: 50, rows: 3, showCount: true, }, fieldName: 'remark', label: $t('system.dept.remark'), rules: z .string() .max(50, $t('ui.formRules.maxLength', [$t('system.dept.remark'), 50])) .optional(), }, ]; } /** 获取表格列配置 */ export function useColumns( onActionClick?: OnActionClickFn, ): VxeTableGridOptions['columns'] { return [ { align: 'left', field: 'name', fixed: 'left', title: '部门名称', treeNode: true, minWidth: 150, }, // TODO @芋艿:需要通过 userList 翻译 { field: 'leader', title: '负责人', minWidth: 150, }, { field: 'sort', title: '排序', minWidth: 100, }, { cellRender: { name: 'CellDict', props: { type: DICT_TYPE.COMMON_STATUS } }, field: 'status', title: '状态', minWidth: 100, }, { field: 'createTime', title: '创建时间', minWidth: 180, formatter: 'formatDateTime', }, { align: 'right', cellRender: { attrs: { nameField: 'name', nameTitle: '部门', onClick: onActionClick, }, name: 'CellOperation', options: [ { code: 'append', text: '新增下级', }, 'edit', // 默认的编辑按钮 { code: 'delete', // 默认的删除按钮 disabled: (row: SystemDeptApi.SystemDept) => { return !!(row.children && row.children.length > 0); }, }, ], }, field: 'operation', fixed: 'right', headerAlign: 'center', showOverflow: false, title: '操作', minWidth: 200, }, ]; }