修复相关bug
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user