feat(患者签署): 接入签署上下文接口并补齐文书渲染与手写签名链路
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
/**
|
||||
* 演示模式(`VITE_USE_MOCK=true`)用的文书正文与「医生已填」结果。
|
||||
*
|
||||
* 为什么不能继续用页面上写死的假段落:患者端现在要渲染**结构化占位符**
|
||||
* (`<span data-field data-kind data-label>`),写死的纯文字演示不出
|
||||
* 「医生填了什么、患者该签哪里」这条链路,等于演示模式验不了真实交互。
|
||||
*
|
||||
* 占位符的属性名与 clinical-web 的 `utils/signing-fields.ts` 保持一致:
|
||||
* `data-field`(字段 id)/ `data-kind`(text|date|choice|checkbox|signature)/ `data-label`。
|
||||
* 那边改名要同步改这里,否则演示模式会渲染成一片没有值的标签。
|
||||
*/
|
||||
|
||||
/** 患者签名位的字段 id,与 clinical-web 的 PRIMARY_SIGNATURE_FIELD_ID 同口径 */
|
||||
export const DEMO_PATIENT_FIELD_ID = 'signature'
|
||||
|
||||
export const DEMO_DOCUMENT_HTML = [
|
||||
'<h2>CT 增强扫描知情同意书</h2>',
|
||||
'<table><tbody>',
|
||||
'<tr><td>患者姓名</td><td><span data-field="patient" data-kind="text" data-label="患者姓名" data-required="true">患者姓名</span></td>',
|
||||
'<td>性别</td><td><span data-field="sex" data-kind="text" data-label="性别">性别</span></td></tr>',
|
||||
'<tr><td>年龄</td><td><span data-field="age" data-kind="text" data-label="年龄">年龄</span></td>',
|
||||
'<td>就诊号</td><td><span data-field="visit" data-kind="text" data-label="就诊号">就诊号</span></td></tr>',
|
||||
'<tr><td>检查项目</td><td colspan="3"><span data-field="examItem" data-kind="choice" data-label="检查项目" data-options="胸部增强CT|头颅增强CT|腹部增强CT">检查项目</span></td></tr>',
|
||||
'</tbody></table>',
|
||||
'<h3>一、检查说明</h3>',
|
||||
'<p>医生已向患者或监护人说明本次 CT 增强扫描的目的、操作过程、使用对比剂可能出现的风险及替代方案。患者可就相关内容向医务人员提出问题。</p>',
|
||||
'<h3>二、对比剂使用</h3>',
|
||||
'<p>本次检查需静脉注射碘对比剂,可能引起温热感、恶心、皮疹等不适,极少数情况下可能出现严重过敏反应。</p>',
|
||||
'<p><span data-field="allergy" data-kind="checkbox" data-label="无碘对比剂过敏史" data-options="无碘对比剂过敏史">无碘对比剂过敏史</span> '
|
||||
+ '<span data-field="renalOk" data-kind="checkbox" data-label="肾功能正常" data-options="肾功能正常">肾功能正常</span></p>',
|
||||
'<h3>三、患者知情同意</h3>',
|
||||
'<p>本人已充分理解上述内容,自愿接受本次 CT 增强扫描,并同意使用碘对比剂。</p>',
|
||||
'<table><tbody>',
|
||||
'<tr><td>患者(或监护人)签名</td>'
|
||||
+ '<td><span data-field="signature" data-kind="signature" data-label="患者签名" data-required="true">患者签名</span></td>',
|
||||
'<td>签署日期</td><td><span data-field="signedDate" data-kind="date" data-label="签署日期" data-required="true">签署日期</span></td></tr>',
|
||||
'<tr><td>告知医师签名</td>'
|
||||
+ '<td><span data-field="doctor" data-kind="signature" data-label="告知医师签名" data-required="true">告知医师签名</span></td>',
|
||||
'<td>科室</td><td><span data-field="department" data-kind="text" data-label="科室">科室</span></td></tr>',
|
||||
'</tbody></table>',
|
||||
'<p>本文书采用电子方式签署,签名图片与文档原件一并存档。</p>',
|
||||
].join('')
|
||||
|
||||
/**
|
||||
* 演示用的「医生已填」结果。
|
||||
*
|
||||
* 刻意**不含** `signature`(患者签名)—— 那一格要留给患者当场签,
|
||||
* 提前填上会让演示看不出「待患者签名」这个关键状态。
|
||||
*/
|
||||
export const DEMO_STAFF_ANSWERS: Record<string, string> = {
|
||||
patient: '张*',
|
||||
sex: '男',
|
||||
age: '42 岁',
|
||||
visit: 'MZ20260827018',
|
||||
examItem: '胸部增强CT',
|
||||
allergy: '1',
|
||||
renalOk: '1',
|
||||
signedDate: '2026-08-27',
|
||||
department: '儿科急诊',
|
||||
// 演示用的医师签名图(一段 SVG 手写线)。用 dataURL 而不是外链,
|
||||
// 演示时不依赖任何网络资源 —— 离线打开也能看到签名位被正确渲染
|
||||
doctor:
|
||||
'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="120" height="40">'
|
||||
+ '<path d="M8 30 Q26 6 44 24 T78 18 Q96 12 112 26" stroke="%23173b56" stroke-width="2" fill="none" stroke-linecap="round"/></svg>',
|
||||
}
|
||||
Reference in New Issue
Block a user