feat(signing): 正文手打方框在导入粘贴时转为结构化勾选项

This commit is contained in:
yelan
2026-10-06 17:57:43 +08:00
parent a0e4aa6bb7
commit b3210c5fac
6 changed files with 224 additions and 20 deletions
@@ -6,6 +6,7 @@ import {
allocateCustomFieldId,
collectFieldDefs,
convertCheckboxColumnsToFields,
convertInlineBoxesToFields,
SIGNING_FIELD_KIND_LABELS,
SIGNING_FIELD_PRESETS,
upgradeFieldTokensToStructured,
@@ -249,7 +250,11 @@ watch(
// 打开时统一升级成结构化占位符(原子节点、一次退格整块删除)。
// 升级沿用同一套解析口径,字段键前后完全一致,历史 fieldAnswers 不受影响;
// 正文里没有 { 时这一步原样返回,不会白白做一次 DOM 往返。
valueHtml.value = upgradeFieldTokensToStructured(rawContent)
//
// 再把手打的方框(□)也换成结构化勾选项:这一步会改写正文,但存量模板里的 □
// 在签署渲染期本来就会被 convertInlineOptions 转成勾选控件,换成占位符只是把
// 同一件事提前到编辑期做,让科室在保存前就能核对、能改名称。
valueHtml.value = convertInlineBoxesToFields(upgradeFieldTokensToStructured(rawContent))
needConfirm.value = Boolean(props.template?.needConfirm)
message.text = ''
message.tone = ''
@@ -481,8 +486,11 @@ async function handleDocxChange(event: Event) {
const mammoth = await import('mammoth/mammoth.browser')
const result = await mammoth.convertToHtml({ arrayBuffer })
// 表头含「勾选」的表格在导入时就转成结构化占位符(原型 docCheckboxize 的口径),
// 这样科室在保存前就能点开核对每一项勾选,而不是留一张看不出要勾哪儿的空表格
const html = convertCheckboxColumnsToFields(result.value || '<p><br></p>')
// 这样科室在保存前就能点开核对每一项勾选,而不是留一张看不出要勾哪儿的空表格。
// 再扫一遍手打的方框(表头不叫「勾选」、或直接写在格子里的 □),同样换成结构化勾选项。
const html = convertInlineBoxesToFields(
convertCheckboxColumnsToFields(result.value || '<p><br></p>'),
)
valueHtml.value = html
previewing.value = false