# patient-h5 医签通患者/家属手机签署端,是通过短信或二维码打开的移动 H5 页面。 ## 产品定位 patient-h5 只服务于一次或一组知情同意签署,不是完整的移动版电子病历,也不需要患者安装原生 App。 ## 用户流程 ```text 短信/二维码打开 → 短信验证码或签署 Token 校验 → 确认患者和实际签署人 → 选择与患者的关系 → 阅读文书 → 勾选同意/不同意项目 → 手写签名 → 提交 → 显示签署结果 ``` ## 页面规划 - 签署入口页; - 身份/手机号验证页; - 文书阅读页; - 签署人关系确认页; - 手写签名页; - 提交成功页; - 过期、拒签和异常页。 ## 安全要求 - 签署链接使用短时效、不可猜测的 Token; - 后端校验 Token、任务状态和文书版本; - URL 不直接携带身份证号、完整病历等敏感信息; - 避免在本地长期保存患者信息和签名数据; - 防止重复提交和重复签署; - 所有最终状态以服务端结果为准; - 需要兼容微信、手机浏览器和常见 iOS/Android 浏览器。 ## 当前技术栈 ```text Vue 3 TypeScript Vite Vue Router Axios ``` Vant、Zod、PDF 预览、第三方签名组件和自动化测试暂不接入;当前签名区域使用原生 Canvas,先验证业务流程和交互。 患者端应采用移动优先设计,按钮、文字和签名区域需要适合老年患者使用。 ## API 接入 开发环境默认使用 `/api`,由 `vite.config.ts` 代理到 `https://ipad.shenynet.com`;生产环境需要由 Nginx 或医院网关配置同路径反向代理。 已接入的真实接口: - `POST /api/v1/sign-deliveries/token/consume`:消费短信/二维码一次性签署 Token; - `POST /api/v1/sign-deliveries/{taskId}/signature`:以 `multipart/form-data` 上传真实 PNG 签名和签署元数据。 真实流程会在进入页面时消费 Token,并在提交时携带 `deliveryId`、`uploadToken` 和幂等键。Token 消费接口目前只返回投递凭证,不返回正式文书内容,因此真实模式会停在安全提示页,不会让患者在未阅读正式文书时提交签名。待后端提供患者端文书读取接口后,再接入 PDF/文书展示和正式提交闭环。 默认 `VITE_USE_MOCK=true` 时可以无 Token 演示完整页面交互;联调真实 Token 流程时设置 `VITE_USE_MOCK=false`,或直接使用带 `token`/`signToken`/`t` 查询参数的签署链接。 ## 与医护端的关系 医护端创建签署任务,patient-h5 完成签署,后端统一保存结果: ```text clinical-web → 后端签署任务 → patient-h5 patient-h5 → 后端提交签署结果 → clinical-web / 电子病历 ``` patient-h5 不直接访问医院完整电子病历。 ## 当前状态 已完成 Vite 基础初始化、路由、签署流程状态管理和第一版移动端页面骨架。Mock 模式可以演示完整交互;真实模式已经接入一次性 Token 消费和 PNG 签名上传请求,并增加路由保护、重复提交保护和服务端结果展示。正式文书公开读取接口尚未提供,因此真实模式暂不会进入签署步骤。