修复相关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
+47
View File
@@ -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']
+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;