diff --git a/src/api/demo/model/systemModel.ts b/src/api/demo/model/systemModel.ts index 1d8e3cc..6fc6a36 100644 --- a/src/api/demo/model/systemModel.ts +++ b/src/api/demo/model/systemModel.ts @@ -71,7 +71,7 @@ export interface addDept { status: number } export interface PositionByOrgParams { - orgid: string + orgId: string } /** diff --git a/src/api/demo/system.ts b/src/api/demo/system.ts index 42c0678..538e638 100644 --- a/src/api/demo/system.ts +++ b/src/api/demo/system.ts @@ -57,13 +57,13 @@ enum Api { UpdatePosition = '/api/SysPosition/Update', } -export const getPositionsTree = (params: AccountParams) => +export const getPositionsTree = (params?: AccountParams) => defHttp.get({ url: Api.PositionsTree, params }); export const getPositionList = (params: AccountParams) => defHttp.get({ url: Api.PositionList, params }); -export const getPosGroupList = (params: AccountParams) => +export const getPosGroupList = (params?: AccountParams) => defHttp.get({ url: Api.PosGroupList, params }); export const getAccountList = (params: AccountParams) => diff --git a/src/components/SelectPos/index.vue b/src/components/SelectPos/index.vue index 7869d9c..e8e0ed7 100644 --- a/src/components/SelectPos/index.vue +++ b/src/components/SelectPos/index.vue @@ -10,7 +10,7 @@ import { reactive,nextTick} from 'vue'; import { BasicTable, useTable, TableAction } from '@/components/Table'; - import { getLoadPositionByOrg, deleteAccount } from '@/api/demo/system'; + import { getPositionsTree, deleteAccount } from '@/api/demo/system'; import { PageWrapper } from '@/components/Page'; import DeptTree from './DeptTree.vue'; import { useMessage } from '/@/hooks/web/useMessage'; @@ -22,8 +22,8 @@ const searchInfo = reactive < Recordable > ({}); const [registerTable, { expandAll,reload, updateTableDataRecord, getSelectRows, clearSelectedRowKeys }] = useTable({ - title: '账号列表', - api: getLoadPositionByOrg, + title: '职级列表', + api: getPositionsTree, rowKey: 'id', columns, formConfig: { diff --git a/src/components/SelectRole/index.vue b/src/components/SelectRole/index.vue index f85aea7..2ee575f 100644 --- a/src/components/SelectRole/index.vue +++ b/src/components/SelectRole/index.vue @@ -1,17 +1,17 @@ \ No newline at end of file + diff --git a/src/views/demo/system/account/OrgPositonModal.vue b/src/views/demo/system/account/OrgPositonModal.vue index d347b35..41a067e 100644 --- a/src/views/demo/system/account/OrgPositonModal.vue +++ b/src/views/demo/system/account/OrgPositonModal.vue @@ -1,18 +1,41 @@ @@ -20,111 +43,103 @@ import { ref, unref, onMounted, nextTick } from 'vue'; import { BasicModal, useModalInner } from '@/components/Modal'; import { BasicTree, TreeItem, TreeActionType } from '@/components/Tree'; - import { getOrgPositonTree, userOrgs } from '@/api/demo/system'; + import { getDeptList, userOrgs, getPositionsTree } from '@/api/demo/system'; import { useMessage } from '@/hooks/web/useMessage'; - defineOptions({ name: 'OrgPositonModal' }); - const emit = defineEmits(['success', 'register', 'select']); - const treeData = ref([]); + const treeDeptData = ref([]); + const treePosData = ref([]); const asyncExpandTreeRef = ref>(null); + const asyncExpandTreePosRef = ref>(null); const { createMessage } = useMessage(); - function treeIterator(tree) { + const okTextVal = ref('下一步'); + function treeIterator(tree, orgId) { tree.forEach((node) => { - if (node.key == 0) { - node.name = '部门--' + node.name; - } else { - node.name = '职级--' + node.name; - } - node.children && treeIterator(node.children); + node.orgId = orgId; + node.children && treeIterator(node.children, orgId); }); } async function fetch() { - const data = (await getOrgPositonTree()) as unknown as TreeItem[]; - treeIterator(data); - treeData.value = await data; + const data = (await getDeptList()) as unknown as TreeItem[]; + treeDeptData.value = data; // 展开全部 nextTick(() => { unref(asyncExpandTreeRef)?.expandAll(true); }); } - let orgList:any = ref([]); - let posList:any = ref([]); - function handleSelect(checkedKeys, e: { checked: boolean; checkedNodes; node; event }) { - const list = e.checkedNodes; - orgList.value = []; - posList.value = []; - list.forEach((element) => { - if (element.key > 0) { - posList.value.push({ - orgId: Number(element.tag), - posId: element.id, - }); - } else { - orgList.value.push({ - orgId: element.id, - posId: 0, - }); - } - }); + let orgList: any = ref([]); + let posList: any = ref([]); + async function handleDeptSelect(checkedKeys, e: { checked: boolean; checkedNodes; node; event }) { + console.log(e.checkedNodes); + orgList.value = e.checkedNodes; + } + async function handlePosSelect(checkedKeys, e: { checked: boolean; checkedNodes; node; event }) { + posList.value = e.checkedNodes; } - - onMounted(() => { - fetch(); - }); const rowId = ref(''); const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => { // unref(asyncExpandTreeRef)?.setCheckedKeys([1]); setModalProps({ confirmLoading: false }); + orgList.value = [] + posList.value = [] + fetch() rowId.value = data.record.id; + okTextVal.value = '下一步'; }); + async function handleSubmit() { try { - let duplicates = {}; - for (let i = 0; i < posList.value.length; i++) { - if (!duplicates[posList.value[i].orgId]) { - duplicates[posList.value[i].orgId] = 1; - } else { - duplicates[posList.value[i].orgId]++; + if (okTextVal.value == '下一步') { + console.log(orgList) + if (orgList.value.length == 0) { + return createMessage.warn('请先选择部门'); } - } - for (let key in duplicates) { - if (duplicates[key] > 1) { - return createMessage.warn('一个部门只能选择一个职级'); - } - } - var query = {}; - const arrs = posList.value.map((item) => { - const data = orgList.value.find((i) => item.orgId == i.orgId); - return { - ...data, - ...item, - }; - }); - if (posList.value.length == 0) { - query = { - userId: rowId.value, - orgPoses: orgList.value, - }; - } else if (orgList.length == 0) { - query = { - userId: rowId.value, - orgPoses: posList.value, - }; + okTextVal.value = '确认'; + // 获取职级 + treePosData.value = []; + orgList.value.forEach(async (element) => { + const data = (await getPositionsTree({ + orgId: element.id, + })) as unknown as TreeItem[]; + treeIterator(data, element.id); + treePosData.value = treePosData.value.concat(data); + // 展开全部 + nextTick(() => { + unref(asyncExpandTreePosRef)?.expandAll(true); + }); + }); } else { - query = { + let duplicates = {}; + let arr: any = []; + for (let i = 0; i < posList.value.length; i++) { + if (!duplicates[posList.value[i].orgId]) { + arr.push({ + orgId: posList.value[i].orgId, + posId: posList.value[i].id, + }); + duplicates[posList.value[i].orgId] = 1; + } else { + duplicates[posList.value[i].orgId]++; + } + } + for (let key in duplicates) { + if (duplicates[key] > 1) { + return createMessage.warn('一个部门只能选择一个职级'); + } + } + var query = { userId: rowId.value, - orgPoses: arrs, + orgPoses: arr, }; - } - const data = await userOrgs(query); - if(data){ - setModalProps({ confirmLoading: true }); - closeModal(); - emit('success'); - return createMessage.success('成功'); - }else{ - return createMessage.error('失败'); + const data = await userOrgs(query); + if (data) { + setModalProps({ confirmLoading: true }); + closeModal(); + emit('success'); + return createMessage.success('成功'); + } else { + return createMessage.error('失败'); + } } } finally { setModalProps({ confirmLoading: false }); diff --git a/src/views/demo/system/position/PositionDrawer.vue b/src/views/demo/system/position/PositionDrawer.vue index ab72cf7..00c000c 100644 --- a/src/views/demo/system/position/PositionDrawer.vue +++ b/src/views/demo/system/position/PositionDrawer.vue @@ -17,7 +17,14 @@ import { BasicDrawer, useDrawerInner } from '@/components/Drawer'; import { useMessage } from '@/hooks/web/useMessage'; const { createMessage } = useMessage(); - import { addPosGroup, editMenu, addPosition, getPosInfo ,updatePosition} from '@/api/demo/system'; + import { + addPosGroup, + getDeptList, + addPosition, + getPosInfo, + updatePosition, + getPositionsTree, + } from '@/api/demo/system'; defineOptions({ name: 'MenuDrawer' }); @@ -25,7 +32,7 @@ const isUpdate = ref(true); - const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({ + const [registerForm, { resetFields, setFieldsValue, validate, updateSchema }] = useForm({ labelWidth: 100, schemas: formSchema, showActionButtonGroup: false, @@ -47,6 +54,18 @@ ...obj, }); } + const posData = await getPositionsTree(); + const treeData = await getDeptList(); + updateSchema([ + { + field: 'parentId', + componentProps: { treeData:posData }, + }, + { + field: 'orgId', + componentProps: { treeData }, + }, + ]); }); const getTitle = computed(() => (!unref(isUpdate) ? '新增' : '编辑')); diff --git a/src/views/demo/system/position/PositionTree.vue b/src/views/demo/system/position/PositionTree.vue index b89713e..c9967f3 100644 --- a/src/views/demo/system/position/PositionTree.vue +++ b/src/views/demo/system/position/PositionTree.vue @@ -28,7 +28,7 @@ \ No newline at end of file + diff --git a/src/views/demo/system/position/position.data.ts b/src/views/demo/system/position/position.data.ts index dd8d6e2..254edf4 100644 --- a/src/views/demo/system/position/position.data.ts +++ b/src/views/demo/system/position/position.data.ts @@ -2,7 +2,7 @@ import { BasicColumn, FormSchema } from '@/components/Table'; import { h } from 'vue'; import { Tag } from 'ant-design-vue'; import Icon from '@/components/Icon/Icon.vue'; -import { getPosGroupList, getPositionsTree } from '@/api/demo/system'; +import { getDeptList, getPositionsTree } from '@/api/demo/system'; export const columns: BasicColumn[] = [ { @@ -29,11 +29,11 @@ export const formSchema: FormSchema[] = [ field: 'type', label: '类型', component: 'RadioButtonGroup', - defaultValue: '1', + defaultValue: '2', componentProps: { options: [ // { label: '目录', value: '0' }, - { label: '职级组', value: '1' }, + // { label: '职级组', value: '1' }, { label: '职级', value: '2' }, ], }, @@ -53,38 +53,18 @@ export const formSchema: FormSchema[] = [ required: true, }, { - field: 'groupId', - component: 'ApiSelect', - label: '职级组', - required: true, - componentProps: ({ formActionType, formModel }) => { - return { - api: getPosGroupList, // 接口 - // 接口参数 - params: { - site: formModel.site || '', - placeId: formModel.placeId || '', - }, - resultField: 'result', - labelField: 'name', - valueField: 'id', - onChange: (e: any) => { - formModel.parentId = undefined - async function getList() { - const treeData = await getPositionsTree({groupId:e}) - const { updateSchema } = formActionType; - updateSchema({ - field: 'parentId', - componentProps: { - treeData, - }, - }); - } - getList() - } - }; + field: 'orgId', + label: '所属部门', + component: 'TreeSelect', + componentProps: { + fieldNames: { + label: 'name', + key: 'id', + value: 'id', + }, + getPopupContainer: () => document.body, }, - ifShow: ({ values }) => isButton(values.type), + required: true, }, { field: 'parentId', @@ -98,7 +78,6 @@ export const formSchema: FormSchema[] = [ }, getPopupContainer: () => document.body, }, - ifShow: ({ values }) => isButton(values.type), }, { field: 'remark', diff --git a/src/views/demo/system/role/AccountModal.vue b/src/views/demo/system/role/AccountModal.vue index 89e6ed8..ae92eb8 100644 --- a/src/views/demo/system/role/AccountModal.vue +++ b/src/views/demo/system/role/AccountModal.vue @@ -1,5 +1,12 @@ @@ -12,7 +19,6 @@ defineOptions({ name: 'DeptModal' }); const emit = defineEmits(['success', 'register']); - const rowId = ref(''); const searchInfo = reactive({}); @@ -20,28 +26,25 @@ setModalProps({ confirmLoading: false }); rowId.value = data.record.id; searchInfo.roleId = rowId.value; - reload() + reload(); }); - const [registerTable,{reload}] = useTable({ + // 异步传参后查询历史记录表格 + const [registerTable, { reload }] = useTable({ + canResize: true, + resizeHeightOffset: 150, api: loadByRole, columns: [ { title: '用户名', dataIndex: 'account', - width: 120, }, { title: '昵称', dataIndex: 'name', - width: 120, }, ], - useSearchForm: false, - showTableSetting: false, - tableSetting: { fullScreen: true }, - showIndexColumn: false, - isCanResizeParent: true, rowKey: 'id', + showTableSetting: false, handleSearchInfoFn(info) { return info; }, @@ -49,3 +52,9 @@ onMounted(() => {}); +