Files
xh-medical-sign-web/clinical-web/README.md
yelan a5e0a80191 feat(auth): 接入 MEDISIGN 登录接口
- 新增认证 API、类型与本地会话存储
- 登录页改为真实账号密码登录并移除验证码
- 请求拦截器改用 X-Token 并处理 401 跳转
- 添加 Vite /api 开发代理配置
2026-08-31 10:50:01 +08:00

142 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# clinical-web
医签通医护端 Web 应用,面向医生、护士、科室人员和系统管理人员。
## 使用场景
- 电脑浏览器;
- 电子病历 iframe 嵌入;
- 护士站电脑;
- 后续可适配医院平板;
- 电脑连接外接签字板。
签字板是医护端的一种硬件签署渠道,不是独立的移动端应用。
## 核心职责
### 医生端
- 从电子病历中发起知情同意;
- 自动带入患者、就诊和医嘱信息;
- 选择文书模板;
- 确认已完成病情解释;
- 发送手机签署或打开现场签署。
### 护士/现场端
- 调出待签署任务;
- 协助患者使用签字板;
- 查看签署结果和异常状态。
护士可以协助操作,但不应被系统误记为病情解释人员。
### 管理端
- 文书模板和版本管理;
- 用户、角色和文档权限;
- 签署记录查询;
- 统计和报表;
- 设备及系统配置。
## 重点业务流程
```text
电子病历中选择患者
→ 选择就诊/医嘱/项目
→ 选择或生成文书
→ 医生完成解释并发起
→ 手机、二维码或签字板签署
→ 查看状态
→ 回传电子病历
```
## 需要支持的异常
- 患者拒绝签署;
- 患者或家属无法联系;
- 实际陪同人和登记手机号不一致;
- 签署链接过期;
- 文书需要动态追加;
- 急诊抢救紧急例外;
- 签署成功但回传失败。
## 当前技术栈
```text
Vue 3
TypeScript
Vite
Vue Router
Pinia
Element Plus
Axios
```
TanStack Vue Query、PDF 预览、报表图表、自动化测试和签字板适配器暂不接入,等真实接口和业务流程稳定后再按需要增加。
签字板调用应通过独立的 `signature-adapter` 或本地桥接服务封装,业务页面不直接绑定具体厂商 SDK。
## 非目标
- 不在前端自行判断最终签署法律效力;
- 不在医护端直接修改已经签署的正式文书;
- 不把患者完整病历发送到患者手机端。
## 当前状态
已完成 Vite 基础初始化、路由、Pinia、原型主题 CSS、登录页、首页、签署工作台第一版 Mock 和文档库管理页面。报表、用户权限、文档权限和系统设置仍保留页面骨架;登录和签署流程使用演示数据,尚未接入真实后端。
## 当前路由结构
```text
公开页
└─ /login 登录页
ClinicalLayout
├─ 工作台
│ ├─ /workbench/home 首页
│ └─ /workbench/signing 签署工作台
└─ 管理
├─ /management/documents 文档库管理
├─ /management/reports 报表分析
├─ /management/users 用户与权限
├─ /management/document-permissions 文档权限
└─ /management/settings 系统设置
```
布局拆分为 `Menu``Header``Container` 三个公共组件,页面内容由各自的 View 负责。
页面目录按业务域组织:`auth` 保留登录页;工作台页面位于 `views/workbench`;管理页面位于 `views/management`。每个具体页面目录都有 `index.vue` 入口和 `components` 目录,用于继续拆分当前页面组件。
跨页面复用的业务组件和 composable 不放在具体 View 目录中:
- `components/signing/NewSigningTaskDialog.vue`:新增签署任务公共弹窗,供签署工作台和文档库管理复用;
- `composables/useSigningTaskForm.ts`:封装患者定位、就诊选择、模板选择、签署方式、校验和任务提交状态。
## API 与类型约定
API 模块与页面按业务域对应。工作台页面使用 `api/workbench` 下的页面文件,管理页面使用 `api/management` 下的直接文件:
- `api/workbench/home.ts`
- `api/workbench/signing.ts`
- `api/management/documents.ts`
- `api/management/reports.ts`
- `api/management/users.ts`
- `api/management/document-permissions.ts`
- `api/management/settings.ts`
API 请求和响应类型按业务域放在 `api/workbench/types.ts``api/management/types.ts`;页面展示和交互类型放在对应 View 目录的 `types.ts`;全局复用类型放在 `types/common.ts`
所有接口统一使用 `utils/request.ts` 导出的单例请求实例。登录接口已接入 MEDISIGN 后端:
- `POST /api/v1/auth/login`:账号密码登录;
- `GET /api/v1/auth/me`:查询当前用户;
- `POST /api/v1/auth/logout`:注销当前会话;
- 后续请求自动携带 `X-Token` 请求头。
开发环境默认使用 `/api` 作为同源接口前缀Vite 会将 `/api` 转发到 `https://ipad.shenynet.com`,因此浏览器不会直接跨域请求后端。代理配置位于 `vite.config.ts`,不改写 `/api/v1/...` 路径。修改代理配置后需要重启 Vite 开发服务。
生产环境不会使用 Vite 的开发代理,需要在 Nginx 或其他网关中配置同样的 `/api` 反向代理。
除登录外,当前业务 API 模块默认返回 mock 数据,设置 `VITE_USE_MOCK=false` 后切换为真实接口。使用本地开发代理时,`VITE_API_BASE_URL` 应填写 `/api`;如果改为直连后端,则需要后端配置允许当前前端源的 CORS。