diff --git a/apps/web-antd/src/views/system/dept/data.ts b/apps/web-antd/src/views/system/dept/data.ts new file mode 100644 index 000000000..39d7034b4 --- /dev/null +++ b/apps/web-antd/src/views/system/dept/data.ts @@ -0,0 +1,135 @@ +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'; + +/** + * 获取编辑表单的字段配置。如果没有使用多语言,可以直接export一个数组常量 + */ +export function useSchema(): VbenFormSchema[] { + return [ + { + 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: 'ApiTreeSelect', + // componentProps: { + // allowClear: true, + // api: getDeptList, + // class: 'w-full', + // labelField: 'name', + // valueField: 'id', + // childrenField: 'children', + // }, + // fieldName: 'pid', + // label: $t('system.dept.parentDept'), + // }, + { + 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(), + }, + ]; +} + +/** + * 获取表格列配置 + * @description 使用函数的形式返回列数据而不是直接export一个Array常量,是为了响应语言切换时重新翻译表头 + * @param onActionClick 表格操作按钮点击事件 + */ +export function useColumns( + onActionClick?: OnActionClickFn, +): VxeTableGridOptions['columns'] { + return [ + { + align: 'left', + field: 'name', + fixed: 'left', + title: $t('system.dept.deptName'), + treeNode: true, + width: 150, + }, + { + cellRender: { name: 'CellTag' }, + field: 'status', + title: $t('system.dept.status'), + width: 100, + }, + { + field: 'createTime', + title: $t('system.dept.createTime'), + width: 180, + }, + { + field: 'remark', + title: $t('system.dept.remark'), + }, + { + align: 'right', + cellRender: { + attrs: { + nameField: 'name', + nameTitle: $t('system.dept.name'), + 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: $t('system.dept.operation'), + width: 200, + }, + ]; +} diff --git a/apps/web-antd/src/views/system/dept/index.vue b/apps/web-antd/src/views/system/dept/index.vue new file mode 100644 index 000000000..4f7bfd1cd --- /dev/null +++ b/apps/web-antd/src/views/system/dept/index.vue @@ -0,0 +1,143 @@ + + diff --git a/apps/web-antd/src/views/system/dept/modules/form.vue b/apps/web-antd/src/views/system/dept/modules/form.vue new file mode 100644 index 000000000..0a03140a5 --- /dev/null +++ b/apps/web-antd/src/views/system/dept/modules/form.vue @@ -0,0 +1,78 @@ + + +