预先渲染字段

This commit is contained in:
2026-06-15 14:28:57 +08:00
parent ae22b2eecf
commit 66c385cbef
@@ -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>