feat(signing): 将签署占位符改为原子节点并支持多选选项组

This commit is contained in:
yelan
2026-09-24 12:13:24 +08:00
parent ec24e85829
commit 9a6ac93e21
13 changed files with 2141 additions and 121 deletions
@@ -140,6 +140,9 @@ export function buildSignatureFieldsPayload(contentHtml: string): unknown[] {
kind: field.kind,
required: field.required,
options: field.options,
// 单/多选必须一起上报:后端靠它渲染签署控件与做取值校验,
// 缺了这个字段就只能按 kind 猜,多选组会被当成单个勾选框
...(field.multi === undefined ? {} : { multi: field.multi }),
...(field.risk ? { risk: field.risk } : {}),
}))
}
+19 -1
View File
@@ -189,11 +189,29 @@ export interface SigningFieldDef {
required: boolean
/** choice / checkbox 的可选项 */
options: string[]
/**
* 有选项时是否允许多选(渲染成一组 checkbox 而不是互斥单选)。
*
* 必须显式声明,不能靠"这一块里有几个方框"去猜:
* 「□高血压 □糖尿病 □冠心病」是三项可同时成立的多选,
* 猜成互斥单选会让科室只能勾一个,且当场看不出错。
*
* 缺省口径:choice 默认单选;checkbox 带选项时默认多选(勾选本来就是"可勾多个"),
* 不带选项时是单个布尔勾选(options 为空,multi 无意义)。
*/
multi?: boolean
/** 取值等于该字符串时视为异常项(如风险筛查选了"是") */
risk?: string
}
export type SigningFieldValue = string | boolean
/**
* 填写项取值。
* - text / date:字符串
* - choice:字符串(选中的那一项)
* - checkbox:布尔(单个勾选);带选项且多选时是字符串数组
* - signature:签名图的 dataURL
*/
export type SigningFieldValue = string | boolean | string[]
/** 填写项取值,key 为 SigningFieldDef.id。 */
export type SigningAnswers = Record<string, SigningFieldValue>