diff --git a/src/api/oa/oaCompany/model/index.ts b/src/api/oa/oaCompany/model/index.ts index 9f56876..607d2e3 100644 --- a/src/api/oa/oaCompany/model/index.ts +++ b/src/api/oa/oaCompany/model/index.ts @@ -12,6 +12,7 @@ export interface OaCompany { companyName?: string; // 归属单位 parentCompany?: string; + parentCompanyId?: number; // 单位编号 companyNo?: string; // 企业标识 diff --git a/src/views/oa/oaCompany/components/oaCompanyEdit.vue b/src/views/oa/oaCompany/components/oaCompanyEdit.vue index ee613c1..60bc45e 100644 --- a/src/views/oa/oaCompany/components/oaCompanyEdit.vue +++ b/src/views/oa/oaCompany/components/oaCompanyEdit.vue @@ -35,11 +35,15 @@ v-model:value="form.companyName" /> - - + @@ -252,7 +256,11 @@ import { ref, reactive, watch } from 'vue'; import { Form, message } from 'ant-design-vue'; import { assignObject, uuid } from 'ele-admin-pro'; - import { addOaCompany, updateOaCompany } from '@/api/oa/oaCompany'; + import { + addOaCompany, + updateOaCompany, + listOaCompany + } from '@/api/oa/oaCompany'; import { OaCompany } from '@/api/oa/oaCompany/model'; import { useThemeStore } from '@/store/modules/theme'; import { storeToRefs } from 'pinia'; @@ -271,6 +279,13 @@ // 资料库响应式数据 const bizLibList = ref([]); const pubLibList = ref([]); + const parentCompanyOptions = ref<{ label: string; value: string }[]>([ + { + label: '本单位(自己)', + value: '本单位' + } + ]); + const parentCompanyList = ref([]); // 存储完整的资料库数据,用于查找名称 const allLibraries = ref([]); @@ -300,6 +315,7 @@ shortName: undefined, companyName: undefined, parentCompany: '本单位', + parentCompanyId: 0, companyCode: undefined, companyNo: undefined, companyType: undefined, @@ -385,6 +401,70 @@ form.companyLogo = ''; }; + // 获取归属单位下拉 + const fetchParentCompanyOptions = async () => { + const list = await listOaCompany(); + const currentCompanyId = props.data?.companyId; + parentCompanyList.value = list.filter( + (item) => item.companyId !== currentCompanyId + ); + const options = parentCompanyList.value + .map((item) => item.companyName) + .filter((name): name is string => !!name) + .filter((name, index, arr) => arr.indexOf(name) === index) + .map((name) => ({ + label: name, + value: name + })); + + parentCompanyOptions.value = [ + { + label: '本单位(自己)', + value: '本单位' + }, + ...options.filter((item) => item.value !== '本单位') + ]; + + if ( + form.parentCompany && + !parentCompanyOptions.value.some( + (item) => item.value === form.parentCompany + ) + ) { + parentCompanyOptions.value.push({ + label: form.parentCompany, + value: form.parentCompany + }); + } + }; + + const getParentCompanyIdByName = (name?: string) => { + if (!name || name === '本单位') { + return 0; + } + return ( + parentCompanyList.value.find((item) => item.companyName === name) + ?.companyId ?? 0 + ); + }; + + const handleParentCompanyChange = (value?: string) => { + form.parentCompany = value || '本单位'; + form.parentCompanyId = getParentCompanyIdByName(form.parentCompany); + }; + + const ensureParentCompanyOption = (value?: string) => { + if ( + value && + !parentCompanyOptions.value.some((item) => item.value === value) + ) { + parentCompanyOptions.value.push({ + label: value, + value + }); + } + }; + // 获取资料库列表 const fetchLibraries = () => { return listPwlProjectLibrary().then((res) => { @@ -433,6 +513,9 @@ libraryIds: allLibraryIds.join(',') // 保存为逗号分隔的字符串 }; if (!formData.parentCompany) formData.parentCompany = '本单位'; + formData.parentCompanyId = getParentCompanyIdByName( + formData.parentCompany + ); const saveOrUpdate = isUpdate.value ? updateOaCompany : addOaCompany; saveOrUpdate(formData) .then((msg) => { @@ -512,11 +595,16 @@ async (visible) => { if (visible) { // 等待资料库列表加载完成后再设置回显 - await fetchLibraries(); + await Promise.all([fetchLibraries(), fetchParentCompanyOptions()]); images.value = []; if (props.data) { assignObject(form, props.data); + form.parentCompany = props.data.parentCompany || '本单位'; + form.parentCompanyId = + props.data.parentCompanyId ?? + getParentCompanyIdByName(form.parentCompany); + ensureParentCompanyOption(form.parentCompany); if (props.data.companyLogo) { images.value.push({ uid: uuid(), @@ -530,10 +618,14 @@ isUpdate.value = true; } else { + form.parentCompany = '本单位'; + form.parentCompanyId = 0; isUpdate.value = false; } } else { resetFields(); + form.parentCompany = '本单位'; + form.parentCompanyId = 0; } }, { immediate: true }