From 2f0d04b982c55876a2deb9dfef2b56ac4324b3a9 Mon Sep 17 00:00:00 2001 From: fuenmao <980740792@qq.com> Date: Thu, 17 Sep 2026 16:03:40 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=9B=B8=E5=85=B3bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components.d.ts | 47 +++++++++++++++++++++++ src/views/biz/onboarding/task/index.vue | 50 ++++++++++++++++++++++++- 2 files changed, 95 insertions(+), 2 deletions(-) diff --git a/components.d.ts b/components.d.ts index 8256656..1cff276 100644 --- a/components.d.ts +++ b/components.d.ts @@ -19,23 +19,70 @@ declare module 'vue' { DatePicker: typeof import('./src/components/Form/DatePicker/index.vue')['default'] ECharts: typeof import('./src/components/ECharts/index.vue')['default'] ElAlert: typeof import('element-plus/es')['ElAlert'] + ElAside: typeof import('element-plus/es')['ElAside'] + ElAvatar: typeof import('element-plus/es')['ElAvatar'] + ElBadge: typeof import('element-plus/es')['ElBadge'] + ElBreadcrumb: typeof import('element-plus/es')['ElBreadcrumb'] + ElBreadcrumbItem: typeof import('element-plus/es')['ElBreadcrumbItem'] ElButton: typeof import('element-plus/es')['ElButton'] + ElCard: typeof import('element-plus/es')['ElCard'] + ElCascader: typeof import('element-plus/es')['ElCascader'] ElCheckbox: typeof import('element-plus/es')['ElCheckbox'] ElCol: typeof import('element-plus/es')['ElCol'] + ElCollapse: typeof import('element-plus/es')['ElCollapse'] + ElCollapseItem: typeof import('element-plus/es')['ElCollapseItem'] + ElColorPicker: typeof import('element-plus/es')['ElColorPicker'] + ElContainer: typeof import('element-plus/es')['ElContainer'] ElDatePicker: typeof import('element-plus/es')['ElDatePicker'] + ElDescriptions: typeof import('element-plus/es')['ElDescriptions'] + ElDescriptionsItem: typeof import('element-plus/es')['ElDescriptionsItem'] + ElDialog: typeof import('element-plus/es')['ElDialog'] + ElDivider: typeof import('element-plus/es')['ElDivider'] + ElDrawer: typeof import('element-plus/es')['ElDrawer'] + ElDropdown: typeof import('element-plus/es')['ElDropdown'] + ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem'] + ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu'] ElEmpty: typeof import('element-plus/es')['ElEmpty'] + ElFooter: typeof import('element-plus/es')['ElFooter'] ElForm: typeof import('element-plus/es')['ElForm'] ElFormItem: typeof import('element-plus/es')['ElFormItem'] + ElHeader: typeof import('element-plus/es')['ElHeader'] ElIcon: typeof import('element-plus/es')['ElIcon'] ElImage: typeof import('element-plus/es')['ElImage'] + ElImageViewer: typeof import('element-plus/es')['ElImageViewer'] ElInput: typeof import('element-plus/es')['ElInput'] + ElInputNumber: typeof import('element-plus/es')['ElInputNumber'] + ElLink: typeof import('element-plus/es')['ElLink'] + ElMain: typeof import('element-plus/es')['ElMain'] + ElMenu: typeof import('element-plus/es')['ElMenu'] + ElMenuItem: typeof import('element-plus/es')['ElMenuItem'] ElOption: typeof import('element-plus/es')['ElOption'] + ElPagination: typeof import('element-plus/es')['ElPagination'] + ElPopover: typeof import('element-plus/es')['ElPopover'] + ElRadio: typeof import('element-plus/es')['ElRadio'] + ElRadioButton: typeof import('element-plus/es')['ElRadioButton'] + ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup'] + ElResult: typeof import('element-plus/es')['ElResult'] ElRow: typeof import('element-plus/es')['ElRow'] + ElScrollbar: typeof import('element-plus/es')['ElScrollbar'] ElSelect: typeof import('element-plus/es')['ElSelect'] + ElSlider: typeof import('element-plus/es')['ElSlider'] + ElSpace: typeof import('element-plus/es')['ElSpace'] ElStep: typeof import('element-plus/es')['ElStep'] ElSteps: typeof import('element-plus/es')['ElSteps'] + ElSubMenu: typeof import('element-plus/es')['ElSubMenu'] + ElSwitch: typeof import('element-plus/es')['ElSwitch'] + ElTable: typeof import('element-plus/es')['ElTable'] + ElTableColumn: typeof import('element-plus/es')['ElTableColumn'] + ElTabPane: typeof import('element-plus/es')['ElTabPane'] + ElTabs: typeof import('element-plus/es')['ElTabs'] ElTag: typeof import('element-plus/es')['ElTag'] + ElTimeline: typeof import('element-plus/es')['ElTimeline'] + ElTimelineItem: typeof import('element-plus/es')['ElTimelineItem'] + ElTooltip: typeof import('element-plus/es')['ElTooltip'] + ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect'] ElUpload: typeof import('element-plus/es')['ElUpload'] + ElWatermark: typeof import('element-plus/es')['ElWatermark'] ESign: typeof import('./src/components/ESign/index.vue')['default'] FormContainer: typeof import('./src/components/Form/FormContainer/index.vue')['default'] Grid: typeof import('./src/components/Grid/index.vue')['default'] diff --git a/src/views/biz/onboarding/task/index.vue b/src/views/biz/onboarding/task/index.vue index d83fefa..88592e1 100644 --- a/src/views/biz/onboarding/task/index.vue +++ b/src/views/biz/onboarding/task/index.vue @@ -346,6 +346,14 @@ +
@@ -1653,6 +1661,7 @@ interface ContractPreviewState { } const contractPreviews = ref([]); +const contractConfigurationError = ref(""); const confirmedContractCount = computed( () => contractPreviews.value.filter(item => item.confirmed).length ); @@ -2347,6 +2356,42 @@ async function onOnboardingTemplateChange(templateId: number) { const sortResult = (left.sortCode ?? 100) - (right.sortCode ?? 100); return sortResult || left.contractTemplateVersionId - right.contractTemplateVersionId; }); + const matchesCurrentScope = (item: OnboardingContractTemplate, contractTemplateId: number) => + item.id === contractTemplateId + && item.status === "enable" + && item.companyId === form.companyId + && item.departmentId === form.departmentId; + const unresolvedTemplateIds = contracts + .map(contract => contract.contractTemplateId) + .filter(contractTemplateId => + !contractTemplates.value.some(item => matchesCurrentScope(item, contractTemplateId)) + ) + .filter((contractTemplateId, index, values) => values.indexOf(contractTemplateId) === index); + if (unresolvedTemplateIds.length) { + const detailResults = await Promise.all( + unresolvedTemplateIds.map(id => + onboardingTaskApi.templateDetail({ id }).catch(() => ({ data: undefined })) + ) + ); + detailResults.forEach(result => { + const item = result.data; + if ( + item + && matchesCurrentScope(item, item.id) + && !contractTemplates.value.some(existing => existing.id === item.id) + ) { + contractTemplates.value.push(item); + } + }); + } + const unavailableContract = contracts.find(contract => + !contractTemplates.value.some(item => matchesCurrentScope(item, contract.contractTemplateId)) + ); + if (unavailableContract) { + contractConfigurationError.value = "原签署材料已失效,请重新配置入职模板"; + ElMessage.error(contractConfigurationError.value); + return; + } const variableResults = await Promise.all( contracts.map(contract => onboardingTaskApi.variablePage({ templateVersionId: contract.contractTemplateVersionId, @@ -2374,12 +2419,12 @@ async function onOnboardingTemplateChange(templateId: number) { })); }); - contractPreviews.value = contracts.map((contract, index) => ({ + contractPreviews.value = contracts.map(contract => ({ contractTemplateId: contract.contractTemplateId, contractTemplateVersionId: contract.contractTemplateVersionId, contractName: contractTemplates.value.find(item => item.id === contract.contractTemplateId) - ?.templateName || `合同${index + 1}`, + ?.templateName || "原签署材料已失效,请重新配置入职模板", required: contract.required, sortCode: contract.sortCode ?? 100, downloaded: false, @@ -2495,6 +2540,7 @@ function buildTaskCreatePayload() { } function resetContractPreviewState(clearContracts = false) { + contractConfigurationError.value = ""; if (clearContracts) { contractPreviews.value = []; return;