Appearance
1.项目实例:可疑医疗器械不良事件报表
本节将探讨打印模板在实际应用场景中的具体案例。 您可以参考案例,并结合自身需求,优化和完善您的打印模板设计。
场景概述
医疗器械的安全监测与监管
当医疗机构、生产企业、经营企业或患者在使用医疗器械过程中,怀疑发生了与器械相关的、导致或可能导致人体伤害的事件时,需要及时、规范地填写报告表,并逐级上报至国家食品药品监督管理总局
效果如下:

1. 案例分析
该案例的主要目标就是使用word模板,来规范生成上面提到的报告表
自动生成相关信息,并选择性留白相关内容(如签名,评价意见等交由打印完成后书写),确保报表的准确性
结合表单内容和实际需求,可将模板分为四个主要部分
头部与尾部
这部分用于标识报告的来源和日期等信息
患者资料
包含患者的基本情况,预期治疗效果
不良事件的情况
报告的核心,描述事件的本身及其后果
医疗器械情况
器械信息,后续状态及监管部门的评价等
2. 模板构建
下面我们使用药监局提供的模板
在其中添加需要从表单提取的字段
按照前面案例分析中的划分来逐步讲解
头部和尾部
报告日期:
<<toDate(R["成交日期"], "yyyy年MM月dd日")>>报告来源: 这里可以让用户手动勾选,也可以直接填充表单的对应字段:
<<R["报告来源"]>>当然,为了文档前后格式的一致性,也可以使用三元表达式来对对应的选项打勾
<<R["报告来源"] === "生产企业" ? "☑":"□">>生产企业 <<R["报告来源"] === "经营企业" ? "☑":"□">>经营企业 <<R["报告来源"] === "使用单位" ? "☑":"□">>使用单位若前面条件为真,则填充
?前的内容,否则填充?后的内容除此之外,考虑到后面还有多处用到单选框,为了简化工作,你也可以通过代码块来实现(代码要在调用前定义)
js<<EXEC function checkbox(fileds, text) { if (param1 === fileds) { return "☑" + text; } else { return "□" + text; } } >>调用定义的代码块实现上面功能,对比之下更加简便
<<checkbox(R["报告来源"],"生产企业"])>> <<checkbox(R["报告来源"],"经营企业"])>> <<checkbox(R["报告来源"],"使用单位"])>>联系信息:
<<R["联系地址"]>>,<<R["单位名称"]>>,<<R["联系电话"]>>,<<R["邮编"]>>。编码:
<<R["编码"]>>重要的唯一标识符,用于系统追踪。
患者资料
- 基本信息:
<<R["姓名"]>>,<<R["年龄"]>>, 性别等。 - 治疗背景:
<<R["预期治疗疾病或作用"]>>。
- 基本信息:
不良事件情况
事件描述:
<<R["事件主要表现"]>>,<<R["事件陈述"]>>。时间:
<<toDate(R["事件发生日期"], "yyyy年MM月dd日")>>,<<toDate(R["发现或知悉时间"], "yyyy年MM月dd日")>>。事件后果: 与前面类似,可以使用模板语句来自动填充选项
这里还可以拓展功能当选择患者死亡时自动生成死亡时间,下面使用条件语句来实现
<<IF R["事件后果"] === "死亡">> 死亡时间:<<toDate(R["死亡时间"], "yyyy-MM-dd")>> <<END-IF>>报告人身份: 同上面报告来源的内容
医疗器械情况
基础信息: 包括产品名称、商品名称、型号规格、等同上。
操作人与状态: (专业/非专业/患者)与前面相同;
原因,评价等: 对于这种文本量可能较多的内容,通过调整
<<R["国家检测技术机构评价意见"]>>命令的字号,填充的内容会继承命令的格式报告人签名:
<<IMAGE toSign(R["确认签名"], {width: 1, height: 1, caption: R["客户姓名"]})>>事件报告状态: 多选框,与之前单选框类似,可以直接填充对应字段
<<R["事件报告状态"]>>也可以生成选项框,
R["多选"]返回的是一个数组,我们可以使用includes()方法判断数组内是否有某内容,思路与单选等情况类似<<R["事件报告状态"].includes("已通知使用单位") ? "☑":"□">>已通知使用单位 <<R["事件报告状态"].includes("已通知生产企业") ? "☑":"□">>已通知生产企业 <<R["事件报告状态"].includes("已通知经营企业") ? "☑":"□">>已通知经营企业 <<R["事件报告状态"].includes("已通知药监部门") ? "☑":"□">>已通知药监部门如果数组中有对应的内容则填充带勾的选项框
☑否则填充不带勾的选项框□
至此模板的构建就基本完成了最终word模板下载
效果如下:

3.项目总结
| 功能模块 | 描述 | 使用语法/技巧 |
|---|---|---|
| 数据绑定 | 将表单数据源 R 中的字段值插入到 Word 模板指定位置。 | <<R["字段名"]>> |
| 日期格式化 | 将数据库原始日期格式转换为人类可读的指定格式(如中文年月日)。 | <<toDate(R["日期字段"], "yyyy年MM月dd日")>> |
| 单选框/多选框 | 根据数据动态显示“打勾”或“未打勾”的选项框(☑ 或 □)。 | 三元表达式: <<R["来源"] === "值" ? "☑":"□">> 数组判断(多选): <<R["多选"].includes("值") ? "☑":"□">> |
| 条件显示 | 根据特定条件(例如“事件后果”是否为“死亡”)决定是否显示某段内容或字段。 | <<IF 条件>> ... 内容 ... <<END-IF>> |
| 图片签名插入 | 将存储的电子签名图片动态插入到报告人签名区域,并控制图片尺寸。 | <<IMAGE toSign(R["签名"], {width: ..., height: ...})>> |
| 代码块复用 | 定义自定义 JavaScript 函数(如 checkbox 函数),简化多处重复的单选框逻辑。 |