diff --git a/README.md b/README.md index e9ad11b..e7eea5c 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ - `clinical-web`:医护端布局、工作台、签署任务、文书库、报表和设置页面; - `patient-h5`:签署入口、文书确认、签署人信息、手写签名和结果页面; -- 当前页面使用演示数据,尚未接入真实后端接口; +- 默认仍使用演示数据,但医护端已按 MEDISIGN 接口文档接入登录、患者/就诊、模板、签署任务、文件产物、投递、用户组织和模板权限等真实接口;患者 H5 已接入一次性 Token 消费和签名上传请求; - `packages` 目录暂时保留,等接口和公共类型稳定后再接入共享包。 ## 项目定位 diff --git a/clinical-web/README.md b/clinical-web/README.md index 1df10bd..2d6b79a 100644 --- a/clinical-web/README.md +++ b/clinical-web/README.md @@ -84,7 +84,7 @@ TanStack Vue Query、PDF 预览、报表图表、自动化测试和签字板适 ## 当前状态 -已完成 Vite 基础初始化、路由、Pinia、原型主题 CSS、登录页、首页、签署工作台第一版 Mock 和文档库管理页面。报表、用户权限、文档权限和系统设置仍保留页面骨架。登录接口和签署工作台的患者、就诊、模板、任务及审计查询/部分任务操作已接入 MEDISIGN 后端;其余页面仍使用 Mock 或占位实现。 +已完成 Vite 基础初始化、路由、Pinia、原型主题 CSS、登录页、首页、签署工作台第一版 Mock 和文档库管理页面。登录、首页统计、签署工作台的患者/就诊/模板/任务/审计、签署文件下载、短信重发、模板创建/版本工作流、用户组织查询与用户创建编辑,以及按模板维护文档权限已经接入 MEDISIGN 后端;系统设置仍保留 Mock,真实签字板/线上签名回调和打印服务仍需设备或后端能力。 ## 当前路由结构 @@ -119,10 +119,15 @@ API 模块与页面按业务域对应。工作台页面使用 `api/workbench` - `api/workbench/home.ts` - `api/workbench/signing.ts` +- `api/workbench/artifacts.ts` +- `api/workbench/deliveries.ts` - `api/management/documents.ts` - `api/management/reports.ts` - `api/management/users.ts` +- `api/management/roles.ts` +- `api/management/organization.ts` - `api/management/document-permissions.ts` +- `api/management/audit.ts` - `api/management/settings.ts` 所有接口统一使用 `utils/request.ts` 导出的单例请求实例。登录接口已接入 MEDISIGN 后端: @@ -142,10 +147,23 @@ API 模块与页面按业务域对应。工作台页面使用 `api/workbench` - `POST /api/v1/sign-tasks/{id}/void`、`/resend`、`/reopen`:作废、短信重发和重新开启; - `GET /api/v1/sign-tasks/{id}/events`:操作审计事件。 +已接入或封装的扩展接口包括: + +- `GET /api/v1/sign-artifacts/task/{taskId}`、`GET /api/v1/sign-artifacts/task/{taskId}/{artifactId}`:签署文件索引; +- `GET /api/v1/sign-artifacts/{artifactId}/download`:原始 PDF、签署后 PDF、签名原图下载; +- `POST /api/v1/sign-deliveries/{taskId}/sms/resend`:短信重发,自动携带幂等键; +- `GET/POST /api/v1/templates`、`GET /api/v1/templates/{id}`:模板列表、详情; +- `GET/POST /api/v1/templates/{id}/versions`、版本工作流接口:版本查询、创建、送审、驳回、通过、发布、停用、归档; +- `GET /api/v1/users`、`GET /api/v1/roles`、`GET /api/v1/campuses`、`GET /api/v1/departments`:用户页真实查询及组织字典; +- `GET/POST/DELETE /api/v1/templates/{id}/permissions`:按模板查询和维护文档权限; +- `GET /api/v1/audit-logs`:全局审计日志查询 API。 + +报表页在真实模式下使用 `GET /api/v1/sign-tasks` 聚合当前任务数据,并支持跳转任务和导出当前筛选结果;MEDISIGN 文档中暂无独立的报表统计接口。首页同样从模板、院区和签署任务接口聚合工作台概览。 + API 请求和响应类型按业务域放在 `api/workbench/types.ts`、`api/management/types.ts`;页面展示和交互类型放在对应 View 目录的 `types.ts`;全局复用类型放在 `types/common.ts`。页面提交模型会在 API 边界转换为后端 DTO,不向后端发送患者快照、文档名称或明文手机号等页面字段。 开发环境默认使用 `/api` 作为同源接口前缀,Vite 会将 `/api` 转发到 `https://ipad.shenynet.com`,因此浏览器不会直接跨域请求后端。代理配置位于 `vite.config.ts`,不改写 `/api/v1/...` 路径。修改代理或环境变量后需要重启 Vite 开发服务。 -生产环境不会使用 Vite 的开发代理,需要在 Nginx 或其他网关中配置同样的 `/api` 反向代理。除登录外,当前业务 API 模块默认返回 Mock 数据,设置 `VITE_USE_MOCK=false` 后切换签署工作台及其他已实现 API 的真实接口。使用本地开发代理时,`VITE_API_BASE_URL` 应填写 `/api`;如果改为直连后端,则需要后端配置允许当前前端源的 CORS。 +生产环境不会使用 Vite 的开发代理,需要在 Nginx 或其他网关中配置同样的 `/api` 反向代理。除登录外,当前业务 API 模块默认返回 Mock 数据,设置 `VITE_USE_MOCK=false` 后切换已实现的真实接口。使用本地开发代理时,`VITE_API_BASE_URL` 应填写 `/api`;如果改为直连后端,则需要后端配置允许当前前端源的 CORS。 -当前尚未接入的签署能力包括手写板设备桥接、线上签署页面/签名回调、PDF 原件下载、签名原图下载和打印服务。真实接口模式下这些演示按钮会隐藏或提示待接入;Mock 模式仍可用于演示完整交互。 +当前尚未接入的签署能力包括手写板设备桥接、线上签署页面/签名回调和打印服务。签署投递、一次性 Token 消费和真实 PNG 上传 API 已完成封装,但页面不能用 Canvas 演示数据冒充真实签名;需要接入设备适配器或患者 H5 回调后再启用。短信初次发送接口需要完整手机号,而患者查询只返回脱敏手机号,因此真实模式会要求当前操作人员确认完整投递地址;生产环境也可以改为由后端根据患者 ID 解析投递地址。默认 Mock 模式仍可用于演示完整交互,联调时设置 `VITE_USE_MOCK=false`。 diff --git a/patient-h5/.env.example b/patient-h5/.env.example index 1f6a7f0..13439b7 100644 --- a/patient-h5/.env.example +++ b/patient-h5/.env.example @@ -1,2 +1,3 @@ VITE_APP_NAME=medical-sign-patient VITE_API_BASE_URL=/api +VITE_USE_MOCK=true diff --git a/patient-h5/README.md b/patient-h5/README.md index 60a7e73..7e5de03 100644 --- a/patient-h5/README.md +++ b/patient-h5/README.md @@ -54,6 +54,19 @@ Vant、Zod、PDF 预览、第三方签名组件和自动化测试暂不接入; 患者端应采用移动优先设计,按钮、文字和签名区域需要适合老年患者使用。 +## 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 完成签署,后端统一保存结果: @@ -67,4 +80,4 @@ patient-h5 不直接访问医院完整电子病历。 ## 当前状态 -已完成 Vite 基础初始化、路由、签署流程状态管理和第一版移动端页面骨架。当前流程使用演示数据,尚未接入真实 Token 校验、文书接口和签署提交接口。 +已完成 Vite 基础初始化、路由、签署流程状态管理和第一版移动端页面骨架。Mock 模式可以演示完整交互;真实模式已经接入一次性 Token 消费和 PNG 签名上传请求,并增加路由保护、重复提交保护和服务端结果展示。正式文书公开读取接口尚未提供,因此真实模式暂不会进入签署步骤。