fix(document): 去掉签署态的系统页眉,患者信息改由正文占位符承载

This commit is contained in:
yelan
2026-09-30 11:43:25 +08:00
parent 1d271ef1bd
commit 3a330bcf69
11 changed files with 47 additions and 230 deletions
+5 -38
View File
@@ -31,7 +31,6 @@ import {
readFieldFromElement,
resolveAnswersFromSystem,
scanFieldTokens,
SIGNING_DOCUMENT_HEADER,
SIGNING_OPTION_MARKERS,
type SigningSystemSnapshot,
} from './signing-fields'
@@ -714,39 +713,6 @@ function convertInlineOptions(root: Element, interactive: boolean, selected: Set
})
}
/**
* 生成固定页眉:患者姓名 / 性别 / 年龄 / 住院号·门诊号,取值全部来自 HIS。
* 只读展示,不挂 data-sign-field —— 页眉不是"待填写项",也不进签署证据,
* 患者信息以任务快照为准,页眉只负责把快照呈现出来。
*/
function buildDocumentHeader(doc: Document, answers: SigningAnswers): HTMLElement {
const header = doc.createElement('header')
header.className = 'sign-doc-header'
SIGNING_DOCUMENT_HEADER.forEach(({ id, label, valueWidthEm }) => {
const item = doc.createElement('span')
item.className = 'sign-doc-header__item'
const labelElement = doc.createElement('span')
labelElement.className = 'sign-doc-header__label'
labelElement.textContent = `${label}:`
const value = answers[id]
const valueElement = doc.createElement('span')
valueElement.className = 'sign-doc-header__value'
valueElement.textContent = typeof value === 'string' ? value : ''
// 宽度随字段走(而不是写死在样式里):页眉四项要挤在一行,
// 各字段需要的下划线长度差别很大,样式里只能给一个统一值,容易撑到换行
valueElement.style.minWidth = `${valueWidthEm}em`
item.appendChild(labelElement)
item.appendChild(valueElement)
header.appendChild(item)
})
return header
}
/** 渲染开关。默认全部关闭,只读展示是"安全侧"缺省。 */
export interface SigningDocumentRenderOptions {
/**
@@ -825,9 +791,10 @@ export function buildSigningDocumentHtml(
convertCheckboxTables(root, interactive, selected)
convertInlineOptions(root, interactive, selected)
// 页眉最后插入:保证 HIS 取值不会被当成文书内容参与占位符/方框识别
root.insertBefore(buildDocumentHeader(doc, answers), root.firstChild)
// 渲染只**填值**,不往正文里添任何内容:文书长什么样就是编辑器里那一份。
// 这里曾经最后插入一条系统页眉(患者姓名 / 性别 / 年龄 / 住院号),2026-09-30 去掉:
// 编辑器里没有它,编辑时看不到、签出来和下载的 PDF 上却多一条。
// 患者信息要出现在文书上,就在正文里插对应占位符(编辑器「HIS 自动填充」里有这几个按钮)。
return root.innerHTML
}
@@ -1099,7 +1066,7 @@ export function applySignatureToRoot(root: HTMLElement, fieldId: string, dataUrl
/**
* 统计填写项进度:已填数量、未填的必填项、命中的异常项。
*
* 按字段键去重:同一个字段在文书里可能出现多次(页眉的患者姓名/就诊号与正文重复是常态),
* 按字段键去重:同一个字段在文书里可能出现多次(签名位每页都有、患者姓名在正文里反复提到),
* 它们共用一份取值,只能算一个填写项,否则分母会被重复计数撑大。
*
* 「已填」的判据见 isEmptyFieldValue:多选取值只有空数组才算没填——