Files
his/docs/UPGRADE_PLAN_v2.0.md
华佗 f144dd7e2c feat(frontend): 合入 RuoYi 3.9.2 前端升级
- 升级 vue-router 4.3 → 4.6.4 (router4 新写法)
- 升级 echarts 5.4 → 5.6.0
- 修复 permission.js router4 过期 next() 写法
- 新增 isPathMatch 通配符白名单匹配
- 新增 TreePanel 树分割组件 (左树右表)
- 新增 ExcelImportDialog 导入组件
- 新增锁屏功能 (lock.js + lock.vue)
- 新增密码规则校验 (passwordRule.js)
- 新增 HeaderNotice 顶部通知组件
- 新增 TopBar 顶部工具栏组件
- 新增 Copyright 版权组件
- 增强 TagsView 持久化标签页
- 添加升级计划文档 (UPGRADE_PLAN_v2.0.md)
2026-06-04 10:17:42 +08:00

6.3 KiB
Raw Blame History

OpenHIS 二次开发版本 — 组件升级计划

编制日期: 2026-06-03 对比基线: Gitee tntlinking-opensource/openhis-itai-pro 2.0 分支 目标: 在不破坏现有业务的前提下,逐步引入高价值组件升级


升级原则

  1. 独立可验证 — 每个 Phase 完成后必须独立通过编译 + 冒烟测试
  2. 不破坏业务 — 一次只升级一个组件,出问题可快速回滚
  3. 先补丁后重构 — 小版本升级直接改版本号,大版本升级单独评估
  4. 文档同步 — 每次升级后更新 UPGRADE_LOG.md

Phase 0: 安全修复(预估 0.5 天)

🔴 最高优先级 — 安全漏洞,必须立即处理

0.1 BouncyCastle 1.69 → 1.80

项目 详情
文件 openhis-server-new/pom.xml
变更 <bcprov-jdk15on.version>1.69</bcprov-jdk15on.version> → 删除,改用 jdk18on
新依赖 org.bouncycastle:bcprov-jdk18on:1.80 + org.bouncycastle:bcpkix-jdk18on:1.80
原因 1.69 有已知安全漏洞1.80 支持国密 SM2/SM3 算法
影响面 rg "bouncycastle|bcprov|bcpkix" --type java 搜索所有引用
验证 mvn compile + 启动后检查加解密功能登录、token 签发)

0.2 vue-router 4.3 → 4.5

项目 详情
文件 openhis-ui-vue3/package.json
变更 "vue-router": "^4.3.0""^4.5.1"
风险 低 — 4.x 小版本API 兼容
验证 前端 npm run dev → 测试所有页面路由跳转、返回、权限拦截

Phase 1: 核心组件升级(预估 1-2 天)

🟡 高价值 — 改动可控,收益明显

1.1 echarts 5.4 → 6.0

项目 详情
文件 openhis-ui-vue3/package.json
变更 "echarts": "^5.4.3""^6.0.0"
影响面 rg "echarts" --type vue --type js 搜索所有图表组件
Breaking Changes ECharts 6 主要变更Tree-shaking 更彻底、部分 API 重命名
验证清单 首页统计图表、门诊量趋势、药品销售报表、住院床位占用图
回滚方案 改回 "^5.4.3" 即可

1.2 lodash-es → es-toolkit

项目 详情
文件 openhis-ui-vue3/package.json + 所有引用文件
变更 "lodash-es": "^4.17.21" → 删除,添加 "es-toolkit": "^1.41.0"
迁移映射 _.cloneDeepcloneDeep_.debouncedebounce_.isEqualisEqual_.getget
影响面 rg "from 'lodash-es'" --type vue --type js 逐个替换
风险 中 — 需逐个替换 import但 API 基本一致
验证 全站功能冒烟测试

1.3 引入 MapStruct后端

项目 详情
文件 openhis-server-new/pom.xml (parent) + openhis-application/pom.xml
新增依赖 org.mapstruct:mapstruct:1.5.5.Final + mapstruct-processor + lombok-mapstruct-binding
使用方式 新增 @Mapper(componentModel = "spring") 接口替代 BeanUtils.copyProperties
策略 渐进式 — 不改造现有代码,仅新功能使用 MapStruct
验证 mvn compile 确认注解处理器工作

Phase 2: 富文本 + 数据库迁移(预估 3-5 天)

🟢 中等工作量 — 需要一定的改造

2.1 tiptap 富文本编辑器(替代 vue-quill

项目 详情
新增依赖 @tiptap/vue-3@tiptap/starter-kit@tiptap/extension-* 系列
替换目标 @vueup/vue-quill(当前用于病历编辑、处方备注等)
影响面 rg "vue-quill|Quill" --type vue 搜索所有引用
新增能力 表格编辑、图片内嵌、协作编辑、自定义节点
策略 新页面用 tiptap旧页面逐步迁移
验证 病历编辑器、处方备注、各种富文本输入场景

2.2 引入 Flyway 数据库迁移

项目 详情
新增依赖 org.flywaydb:flyway-core + flyway-database-postgresql
配置 application-dev.yml 添加 Flyway 配置
目录 src/main/resources/db/migration/
迁移文件命名 V1__init.sqlV2__add_xxx.sql
策略 不对现有表做迁移,仅新功能的 DDL 用 Flyway 管理
风险 中 — 需确保现有数据库与 Flyway 基线一致
验证 启动时 Flyway 自动执行 → 检查 flyway_schema_history

Phase 3: UI 框架评估(预估 5-10 天,可选)

长期规划 — 工作量大,收益高但风险也高

3.1 Tailwind CSS 引入

项目 详情
新增依赖 tailwindcssautoprefixerpostcss
策略 渐进式 — Tailwind 与现有 SCSS 共存,新页面用 Tailwind
影响面 全局样式可能冲突,需仔细测试
建议 先在 help-center 或独立页面试水

3.2 Vben Admin 组件库评估

项目 详情
可引入的包 @vben/access(权限)、@vben/request(请求封装)、@vben/preferences(偏好设置)
风险 高 — Vben 组件与我们现有架构耦合度未知
策略 仅评估,不做实施。等 Phase 0-2 完成后再决定

升级路线图

Week 1:  Phase 0 (BouncyCastle + vue-router)     ← 立即执行
Week 1:  Phase 1.1 (echarts 6)                    ← 紧随其后
Week 2:  Phase 1.2 (es-toolkit) + 1.3 (MapStruct)
Week 3:  Phase 2.1 (tiptap)                       ← 可并行
Week 3:  Phase 2.2 (Flyway)                       ← 可并行
Week 4+: Phase 3 (Tailwind + Vben 评估)           ← 按需

升级日志模板

## [日期] 升级记录

### 组件: XXX Y.Y → Z.Z
- **Phase**: 0/1/2/3
- **变更文件**: list...
- **验证结果**: ✅ 编译通过 / ✅ 冒烟测试通过
- **回滚方案**: 改回旧版本号
- **备注**: ...

风险矩阵

风险 概率 影响 缓解措施
echarts 6 API 不兼容 先在测试环境验证所有图表
es-toolkit 行为差异 逐个替换,每个改完跑测试
Flyway 与现有 SQL 冲突 设置 baseline不管理已有表
tiptap 与现有编辑器冲突 新旧共存,逐步迁移
Tailwind 样式覆盖 使用 CSS Module 隔离