修复相关bug
This commit is contained in:
Vendored
+47
@@ -19,23 +19,70 @@ declare module 'vue' {
|
|||||||
DatePicker: typeof import('./src/components/Form/DatePicker/index.vue')['default']
|
DatePicker: typeof import('./src/components/Form/DatePicker/index.vue')['default']
|
||||||
ECharts: typeof import('./src/components/ECharts/index.vue')['default']
|
ECharts: typeof import('./src/components/ECharts/index.vue')['default']
|
||||||
ElAlert: typeof import('element-plus/es')['ElAlert']
|
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']
|
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']
|
ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
|
||||||
ElCol: typeof import('element-plus/es')['ElCol']
|
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']
|
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']
|
ElEmpty: typeof import('element-plus/es')['ElEmpty']
|
||||||
|
ElFooter: typeof import('element-plus/es')['ElFooter']
|
||||||
ElForm: typeof import('element-plus/es')['ElForm']
|
ElForm: typeof import('element-plus/es')['ElForm']
|
||||||
ElFormItem: typeof import('element-plus/es')['ElFormItem']
|
ElFormItem: typeof import('element-plus/es')['ElFormItem']
|
||||||
|
ElHeader: typeof import('element-plus/es')['ElHeader']
|
||||||
ElIcon: typeof import('element-plus/es')['ElIcon']
|
ElIcon: typeof import('element-plus/es')['ElIcon']
|
||||||
ElImage: typeof import('element-plus/es')['ElImage']
|
ElImage: typeof import('element-plus/es')['ElImage']
|
||||||
|
ElImageViewer: typeof import('element-plus/es')['ElImageViewer']
|
||||||
ElInput: typeof import('element-plus/es')['ElInput']
|
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']
|
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']
|
ElRow: typeof import('element-plus/es')['ElRow']
|
||||||
|
ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
|
||||||
ElSelect: typeof import('element-plus/es')['ElSelect']
|
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']
|
ElStep: typeof import('element-plus/es')['ElStep']
|
||||||
ElSteps: typeof import('element-plus/es')['ElSteps']
|
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']
|
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']
|
ElUpload: typeof import('element-plus/es')['ElUpload']
|
||||||
|
ElWatermark: typeof import('element-plus/es')['ElWatermark']
|
||||||
ESign: typeof import('./src/components/ESign/index.vue')['default']
|
ESign: typeof import('./src/components/ESign/index.vue')['default']
|
||||||
FormContainer: typeof import('./src/components/Form/FormContainer/index.vue')['default']
|
FormContainer: typeof import('./src/components/Form/FormContainer/index.vue')['default']
|
||||||
Grid: typeof import('./src/components/Grid/index.vue')['default']
|
Grid: typeof import('./src/components/Grid/index.vue')['default']
|
||||||
|
|||||||
@@ -346,6 +346,14 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<el-alert
|
||||||
|
v-if="contractConfigurationError"
|
||||||
|
:title="contractConfigurationError"
|
||||||
|
type="error"
|
||||||
|
show-icon
|
||||||
|
:closable="false"
|
||||||
|
class="mb-3"
|
||||||
|
/>
|
||||||
<!-- 3. 合同逐份预览与确认 -->
|
<!-- 3. 合同逐份预览与确认 -->
|
||||||
<div v-if="contractPreviews.length" class="form-card-section">
|
<div v-if="contractPreviews.length" class="form-card-section">
|
||||||
<div class="section-title contract-preview-section-title">
|
<div class="section-title contract-preview-section-title">
|
||||||
@@ -1653,6 +1661,7 @@ interface ContractPreviewState {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const contractPreviews = ref<ContractPreviewState[]>([]);
|
const contractPreviews = ref<ContractPreviewState[]>([]);
|
||||||
|
const contractConfigurationError = ref("");
|
||||||
const confirmedContractCount = computed(
|
const confirmedContractCount = computed(
|
||||||
() => contractPreviews.value.filter(item => item.confirmed).length
|
() => contractPreviews.value.filter(item => item.confirmed).length
|
||||||
);
|
);
|
||||||
@@ -2347,6 +2356,42 @@ async function onOnboardingTemplateChange(templateId: number) {
|
|||||||
const sortResult = (left.sortCode ?? 100) - (right.sortCode ?? 100);
|
const sortResult = (left.sortCode ?? 100) - (right.sortCode ?? 100);
|
||||||
return sortResult || left.contractTemplateVersionId - right.contractTemplateVersionId;
|
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(
|
const variableResults = await Promise.all(
|
||||||
contracts.map(contract => onboardingTaskApi.variablePage({
|
contracts.map(contract => onboardingTaskApi.variablePage({
|
||||||
templateVersionId: contract.contractTemplateVersionId,
|
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,
|
contractTemplateId: contract.contractTemplateId,
|
||||||
contractTemplateVersionId: contract.contractTemplateVersionId,
|
contractTemplateVersionId: contract.contractTemplateVersionId,
|
||||||
contractName:
|
contractName:
|
||||||
contractTemplates.value.find(item => item.id === contract.contractTemplateId)
|
contractTemplates.value.find(item => item.id === contract.contractTemplateId)
|
||||||
?.templateName || `合同${index + 1}`,
|
?.templateName || "原签署材料已失效,请重新配置入职模板",
|
||||||
required: contract.required,
|
required: contract.required,
|
||||||
sortCode: contract.sortCode ?? 100,
|
sortCode: contract.sortCode ?? 100,
|
||||||
downloaded: false,
|
downloaded: false,
|
||||||
@@ -2495,6 +2540,7 @@ function buildTaskCreatePayload() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function resetContractPreviewState(clearContracts = false) {
|
function resetContractPreviewState(clearContracts = false) {
|
||||||
|
contractConfigurationError.value = "";
|
||||||
if (clearContracts) {
|
if (clearContracts) {
|
||||||
contractPreviews.value = [];
|
contractPreviews.value = [];
|
||||||
return;
|
return;
|
||||||
|
|||||||
Reference in New Issue
Block a user