feat(签署文书): 通用文本项按出现位置独立成项并插入文本框占位符

This commit is contained in:
yelan
2026-09-18 13:30:06 +08:00
parent d2cd3f2489
commit 11fe83d807
5 changed files with 184 additions and 47 deletions
@@ -30,6 +30,7 @@ import type { IEditorConfig } from '@wangeditor/editor'
import {
createFieldTokenPattern,
isCustomFieldId,
resolveFieldByLabel,
SIGNING_FIELD_KIND_LABELS,
SIGNING_OPTION_MARKERS,
@@ -57,6 +58,8 @@ interface SigningLeafMark {
/** 控件类型的中文名,渲染在胶囊右侧 */
signTag?: string
signRequired?: boolean
/** 是否目录外的自定义文本项(现场手填),决定悬浮提示里说"自动填充"还是"现场填写" */
signCustom?: boolean
/** 原文,如 {患者姓名},用于悬浮提示 */
signRaw?: string
}
@@ -97,6 +100,7 @@ export function decorateSigningMarkers([node, path]: DecoratedEntry): DecoratedR
signKind: field.kind,
signTag: SIGNING_FIELD_KIND_LABELS[field.kind] ?? '文本',
signRequired: field.required,
signCustom: isCustomFieldId(field.id),
signRaw: text.slice(start, end),
}
@@ -177,8 +181,11 @@ function renderSigningMarker(node: StyledNode, vnode: StyledVNode): StyledVNode
if (mark.signPart === 'label') {
const kind = mark.signTag ?? '文本'
// 提示必须分开说:目录里的字段签署时自动填充,自定义文本项是留给现场手填的空框。
// 一律写成"自动填充",科室会以为写了占位符就有人替他填。
const source = mark.signCustom ? '签署时由患者/家属现场填写' : '签署时按患者与就诊信息自动填充'
props.className = 'ms-sign-chip'
props.title = `待填写项:${mark.signRaw ?? ''}(${kind}${mark.signRequired ? ',必填' : ''}),签署时按患者与就诊信息自动填充`
props.title = `待填写项:${mark.signRaw ?? ''}(${kind}${mark.signRequired ? ',必填' : ''}),${source}`
if (mark.signTag) {
dataset.signTag = mark.signTag