预先渲染字段
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
<template>
|
||||
<template>
|
||||
<a-modal
|
||||
v-model:open="visible"
|
||||
:title="modalTitle"
|
||||
@@ -709,6 +709,7 @@ watch(
|
||||
previewBlob.value = null;
|
||||
previewError.value = "";
|
||||
if (visible.value && creationMode.value === "template") {
|
||||
prefillFromMainFields();
|
||||
nextTick(() => {
|
||||
schedulePreview();
|
||||
});
|
||||
@@ -1126,12 +1127,55 @@ async function showModal(initialValues = {}, mode = "create") {
|
||||
? copyContractFormData(initialValues.detailState)
|
||||
: copyContractFormData(initialValues);
|
||||
|
||||
// 预填充:从主合同同名字段自动取值填入模板变量
|
||||
prefillFromMainFields(initialValues.detailState || initialValues);
|
||||
|
||||
syncManualBodyFileList();
|
||||
previewBlob.value = null;
|
||||
previewError.value = "";
|
||||
visible.value = true;
|
||||
}
|
||||
|
||||
function prefillFromMainFields(rawSource) {
|
||||
if (!contractDetailState.value) return;
|
||||
const values = { ...(contractDetailState.value.templateFieldValues || {}) };
|
||||
const mappings = (activeTemplate.value?.variableMappings || []);
|
||||
if (!mappings.length && !templateFieldList.value.length) return;
|
||||
|
||||
const keysToFill = new Set();
|
||||
mappings.forEach(item => {
|
||||
const key = item.bindField || item.variableKey;
|
||||
if (key) keysToFill.add(key);
|
||||
});
|
||||
// 也兜底检查字典中所有变量
|
||||
templateFieldList.value.forEach(item => {
|
||||
if (item.value) keysToFill.add(item.value);
|
||||
});
|
||||
|
||||
let changed = false;
|
||||
keysToFill.forEach(key => {
|
||||
if (values[key] !== undefined && values[key] !== null && values[key] !== "") return;
|
||||
// 1. 先尝试从当前合同详情直接取(同名字段)
|
||||
let srcVal = contractDetailState.value[key];
|
||||
// 2. 如果没取到,再尝试从原始数据中取
|
||||
if ((srcVal === undefined || srcVal === null || srcVal === "") && rawSource) {
|
||||
srcVal = rawSource[key];
|
||||
}
|
||||
// 3. 如果是对象类型(如布尔开关)转为字符串
|
||||
if (typeof srcVal === "boolean") {
|
||||
srcVal = srcVal ? "1" : "0";
|
||||
}
|
||||
if (srcVal !== undefined && srcVal !== null && srcVal !== "") {
|
||||
values[key] = String(srcVal);
|
||||
changed = true;
|
||||
}
|
||||
});
|
||||
|
||||
if (changed) {
|
||||
contractDetailState.value.templateFieldValues = values;
|
||||
}
|
||||
}
|
||||
|
||||
defineExpose({
|
||||
showModal,
|
||||
});
|
||||
@@ -1398,3 +1442,7 @@ onBeforeUnmount(() => {
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user