修复相关bug

This commit is contained in:
fuenmao
2026-09-17 16:03:40 +08:00
parent 7cffe57e4d
commit 2f0d04b982
2 changed files with 95 additions and 2 deletions
+48 -2
View File
@@ -346,6 +346,14 @@
</div>
</div>
<el-alert
v-if="contractConfigurationError"
:title="contractConfigurationError"
type="error"
show-icon
:closable="false"
class="mb-3"
/>
<!-- 3. 合同逐份预览与确认 -->
<div v-if="contractPreviews.length" class="form-card-section">
<div class="section-title contract-preview-section-title">
@@ -1653,6 +1661,7 @@ interface ContractPreviewState {
}
const contractPreviews = ref<ContractPreviewState[]>([]);
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;