feat(signing): 正文手打方框在导入粘贴时转为结构化勾选项
This commit is contained in:
@@ -91,6 +91,13 @@ const OPTION_CLASS = 'docopt'
|
||||
const OPTION_TICK_CLASS = 'tick'
|
||||
/** 已勾选标记(原型 .docopt.on) */
|
||||
const OPTION_ON_CLASS = 'on'
|
||||
/**
|
||||
* 无名称的单个勾选框的附加类名。
|
||||
*
|
||||
* 去掉「待患者勾选」那句说明文字后,这一格只剩一个 ☐,点击区域从上百像素缩到二十来像素,
|
||||
* 签署时患者不好点。样式里靠这个类把内边距补回来(见 styles/signing-document.css)。
|
||||
*/
|
||||
const OPTION_BARE_CLASS = 'bare'
|
||||
/** 选项取值的载体属性;表格勾选列与行内方框也用同一个,回读时只认它 */
|
||||
const OPTION_VALUE_ATTR = 'data-sign-item'
|
||||
/**
|
||||
@@ -101,7 +108,7 @@ const OPTION_VALUE_ATTR = 'data-sign-item'
|
||||
const GROUP_ATTR = 'data-sign-group'
|
||||
/**
|
||||
* 选项的显示名。与取值标识(data-sign-item)分开存:
|
||||
* 表格勾选列的取值标识是项目名,但那一格显示的是「待患者勾选」。
|
||||
* 表格勾选列的取值标识是项目名,但那一格只显示一个 ☐。
|
||||
* 切换勾选状态时要按显示名重建文案,所以它必须落成属性,不能从取值推。
|
||||
*/
|
||||
const OPTION_TEXT_ATTR = 'data-sign-text'
|
||||
@@ -236,20 +243,21 @@ function isMultiOptionGroup(field: SigningFieldDef): boolean {
|
||||
}
|
||||
|
||||
/**
|
||||
* 选项的显示文案(原型 fillDocHtml / tickDocOpt 的同一口径):
|
||||
* 勾选态用 ☑、未勾选用 ☐,空一格后跟选项名。
|
||||
* 选项的显示文案:勾选态用 ☑、未勾选用 ☐,空一格后跟选项名。
|
||||
*
|
||||
* 没有选项名的单个勾选框(占位符只写了 kind=checkbox 却没配选项)用固定文案
|
||||
* 说明它的语义——原型就是这么写的,也让科室一眼看出这一处是"待勾"而不是漏了内容。
|
||||
* **没有选项名的单个勾选框只落一个符号**,不再补说明文字。
|
||||
*
|
||||
* 这是**有意偏离原型 V10.2**(2026-10-06 定):原型给无选项名的勾选框补
|
||||
* 「☐ 待患者勾选」/「☑ 已勾选(结果固化归档)」,等于把方框当正文写。
|
||||
* 而方框本身就是"这里要勾",这一处在勾什么由旁边的文字(表格的其它列、
|
||||
* 正文的上一句)交代,补一句说明只会把版面挤开;编辑层同一处也只显示一个 ☑,
|
||||
* 签署层补一句中文会让同一处控件两副长相。
|
||||
* 字段名仍留在宿主 title 里,悬停可见。**别照原型改回去。**
|
||||
*/
|
||||
function optionDisplay(value: string, on: boolean): string {
|
||||
const mark = on ? '☑' : '☐'
|
||||
|
||||
if (value) {
|
||||
return `${mark} ${value}`
|
||||
}
|
||||
|
||||
return on ? `${mark} 已勾选(结果固化归档)` : `${mark} 待患者勾选`
|
||||
return value ? `${mark} ${value}` : mark
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -261,7 +269,7 @@ function optionDisplay(value: string, on: boolean): string {
|
||||
* 交互由签署端的事件委托完成(见 toggleOptionAt),所以这里只落一个 .tick 标记。
|
||||
*
|
||||
* displayValue 与 itemValue 分开:表格勾选列的项目名要写进 data-sign-item 当取值标识,
|
||||
* 但那一格显示的是「待患者勾选」——项目名在左边那一列已经写过了,重复一遍反而挤。
|
||||
* 但那一格只显示一个 ☐——项目名在左边那一列已经写过了,重复一遍反而挤。
|
||||
*/
|
||||
function buildOptionItem(
|
||||
doc: Document,
|
||||
@@ -271,7 +279,12 @@ function buildOptionItem(
|
||||
displayValue: string = itemValue,
|
||||
): HTMLElement {
|
||||
const item = doc.createElement('span')
|
||||
item.className = [OPTION_CLASS, on ? OPTION_ON_CLASS : '', interactive ? OPTION_TICK_CLASS : '']
|
||||
item.className = [
|
||||
OPTION_CLASS,
|
||||
on ? OPTION_ON_CLASS : '',
|
||||
interactive ? OPTION_TICK_CLASS : '',
|
||||
displayValue ? '' : OPTION_BARE_CLASS,
|
||||
]
|
||||
.filter(Boolean)
|
||||
.join(' ')
|
||||
if (interactive) {
|
||||
@@ -533,7 +546,7 @@ function renderStructuredFields(
|
||||
* 两种外观混在一篇文书里,会让人以为有一处没生效。
|
||||
*
|
||||
* 项目名仍写在 data-sign-item 上:它是这项勾选的**取值标识**,
|
||||
* 显示成「待患者勾选」只是因为它左边那一列已经写着项目名了。
|
||||
* 格子里只显示一个 ☐——项目名在左边那一列已经写着,重复一遍反而挤。
|
||||
*/
|
||||
function convertCheckboxTables(root: Element, interactive: boolean, selected: Set<string>) {
|
||||
const doc = root.ownerDocument
|
||||
|
||||
Reference in New Issue
Block a user