From bcf8353fdc736b50507c4a28fcdea535e241d65b Mon Sep 17 00:00:00 2001 From: xingyuv Date: Tue, 21 Mar 2023 14:30:53 +0800 Subject: [PATCH] feat: dept --- .../Form/src/components/ApiTreeSelect.vue | 7 +- src/views/system/dept/DeptModel.vue | 58 ++++++++ src/views/system/dept/dept.data.ts | 130 +++++++++++++++++ src/views/system/dept/index.vue | 131 +++++++++++++++++- src/views/system/menu/index.vue | 2 +- 5 files changed, 325 insertions(+), 3 deletions(-) create mode 100644 src/views/system/dept/DeptModel.vue create mode 100644 src/views/system/dept/dept.data.ts diff --git a/src/components/Form/src/components/ApiTreeSelect.vue b/src/components/Form/src/components/ApiTreeSelect.vue index a68e1c2..71974e0 100644 --- a/src/components/Form/src/components/ApiTreeSelect.vue +++ b/src/components/Form/src/components/ApiTreeSelect.vue @@ -15,12 +15,14 @@ import { isArray, isFunction } from '@/utils/is' import { get } from 'lodash-es' import { propTypes } from '@/utils/propTypes' import { LoadingOutlined } from '@ant-design/icons-vue' +import { handleTree } from '@/utils/tree' const props = defineProps({ api: { type: Function as PropType<(arg?: Recordable) => Promise> }, params: { type: Object }, immediate: { type: Boolean, default: true }, - resultField: propTypes.string.def('') + resultField: propTypes.string.def(''), + handleTree: { type: String, default: '' } }) const emit = defineEmits(['options-change', 'change']) const attrs = useAttrs() @@ -74,6 +76,9 @@ async function fetch() { if (!isArray(result)) { result = get(result, props.resultField) } + if (props.handleTree) { + result = handleTree(result, props.handleTree) + } treeData.value = (result as Recordable[]) || [] isFirstLoaded.value = true emit('options-change', treeData.value) diff --git a/src/views/system/dept/DeptModel.vue b/src/views/system/dept/DeptModel.vue new file mode 100644 index 0000000..db7e071 --- /dev/null +++ b/src/views/system/dept/DeptModel.vue @@ -0,0 +1,58 @@ + + diff --git a/src/views/system/dept/dept.data.ts b/src/views/system/dept/dept.data.ts new file mode 100644 index 0000000..0fffeb6 --- /dev/null +++ b/src/views/system/dept/dept.data.ts @@ -0,0 +1,130 @@ +import { listSimpleDeptApi } from '@/api/system/dept' +import { getListSimpleUsersApi } from '@/api/system/user' +import { BasicColumn, FormSchema, useRender } from '@/components/Table' +import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' + +export const columns: BasicColumn[] = [ + { + title: '部门名称', + dataIndex: 'name', + width: 260, + align: 'left' + }, + { + title: '负责人', + dataIndex: 'leader', + width: 120 + }, + { + title: '排序', + dataIndex: 'sort', + width: 60 + }, + { + title: '状态', + dataIndex: 'status', + width: 180, + customRender: ({ text }) => { + return useRender.renderDict(text, DICT_TYPE.COMMON_STATUS) + } + }, + { + title: '创建时间', + dataIndex: 'createTime', + width: 180, + customRender: ({ text }) => { + return useRender.renderDate(text) + } + } +] + +export const searchFormSchema: FormSchema[] = [ + { + label: '部门名称', + field: 'name', + component: 'Input', + colProps: { span: 8 } + }, + { + label: '状态', + field: 'status', + component: 'Select', + componentProps: { + options: getIntDictOptions(DICT_TYPE.COMMON_STATUS) + }, + colProps: { span: 8 } + } +] +export const formSchema: FormSchema[] = [ + { + label: '编号', + field: 'id', + show: false, + component: 'Input' + }, + { + label: '上级部门', + field: 'parentId', + required: true, + component: 'ApiTreeSelect', + componentProps: { + api: () => listSimpleDeptApi(), + fieldNames: { + label: 'name', + key: 'id', + value: 'id' + }, + handleTree: 'id' + } + }, + { + label: '部门名称', + field: 'name', + required: true, + component: 'Input' + }, + { + label: '岗位顺序', + field: 'sort', + required: true, + component: 'InputNumber' + }, + { + label: '负责人', + field: 'leaderUserId', + component: 'ApiSelect', + componentProps: { + api: () => getListSimpleUsersApi(), + labelField: 'nickname', + valueField: 'id' + } + }, + { + label: '联系电话', + field: 'phone', + required: true, + rules: [ + { + pattern: /^(?:(?:\+|00)86)?1(?:3[\d]|4[5-79]|5[0-35-9]|6[5-7]|7[0-8]|8[\d]|9[189])\d{8}$/, + message: '请输入正确的手机号码', + trigger: 'blur' + } + ], + component: 'Input' + }, + { + label: '邮箱', + field: 'email', + required: true, + component: 'Input' + }, + { + label: '部门状态', + field: 'status', + component: 'Select', + defaultValue: 0, + componentProps: { + options: getIntDictOptions(DICT_TYPE.COMMON_STATUS) + } + } +] diff --git a/src/views/system/dept/index.vue b/src/views/system/dept/index.vue index 3b64cfc..4132724 100644 --- a/src/views/system/dept/index.vue +++ b/src/views/system/dept/index.vue @@ -1,3 +1,132 @@ + diff --git a/src/views/system/menu/index.vue b/src/views/system/menu/index.vue index c5af08f..1d56bb4 100644 --- a/src/views/system/menu/index.vue +++ b/src/views/system/menu/index.vue @@ -8,7 +8,7 @@ -