## 1. 版本解析工具扩展(utils/version.ts) - [x] 1.1 新增导出 `VERSION_FILE_RAW`(`VERSION.md` 原文,取自 `__APP_VERSION_FILE__`,为空时返回空串) - [x] 1.2 新增 `suggestNextVersion(date?: string, logs?: VersionLog[])`:按 `v + YYYY.MM.DD + 当日最大序列号+1` 推算下一个版本号(当天无记录为 `01`,历史为空为 `v<今天>.01`) - [x] 1.2a `VersionLog` 增加 `publisher`(发布人)与 `modules: string[]`(影响模块)字段;解析版本段落中的 `- 发布人:X`、`- 影响模块:A、B`(分隔符支持 `、` / `,` / `,`),为空时字段为空串/空数组 - [x] 1.3 新增 `buildVersionFile({ version, date, desc, publisher, modules, groups })`:用新三行替换 `CURRENT_VERSION_START/END` 之间内容;在 `` 之后插入新版本段落(含 `- 发布人:`、`- 影响模块:`,值为空则省略该行);其余原文原样保留 - [x] 1.3a 新增 `buildVersionSection(...)`:仅生成新增版本段落文本,供「下载新增片段」使用 - [x] 1.4 `buildVersionFile` 增加标记区存在性校验:缺失时抛出明确中文错误,供页面降级为"仅生成片段" - [x] 1.5 保留既有导出 `APP_VERSION / APP_VERSION_DATE / APP_VERSION_DESC / VERSION_LOGS / CURRENT_VERSION_LOG`,解析行为不变 ## 2. 新增「版本更新维护」页面(pages/System/VersionMaintenance.tsx) - [x] 2.1 页面骨架:`Card` + 顶部当前版本信息(`Descriptions`,3 列,`labelStyle={{ width: 100 }}`)+ 常驻生效提示 `Alert`("版本号来源于项目根目录 VERSION.md,替换文件后需重新打包生效") - [x] 2.2 历史版本列表:按版本号倒序展示,使用 `Collapse` 展开显示「新增 / 优化 / 修复」条目与发布人、影响模块;条目为"无"的分类隐藏;无记录时 `Empty` 空状态 - [x] 2.3 「新增版本」按钮 + `Modal` 表单:版本号(自动预填 `suggestNextVersion()`,可编辑)、更新日期(`DatePicker` 中文:`import 'dayjs/locale/zh-cn'; dayjs.locale('zh-cn')` + `locale={zhCN}` + `format="YYYY年MM月DD日"`,改动日期时重算版本号)、版本说明(`Input`) - [x] 2.3a 表单新增「发布人」(`Input`,默认当前登录用户 `localStorage.userInfo.userName`,可改)与「影响模块」(`Select mode="tags"`,预置 DRG分组/DIP付费/医保控费预警/盈亏分析/基础数据/HIS数据/特例单议/系统管理/接口服务/其它,允许自由输入) - [x] 2.4 更新内容录入:三类(新增/优化/修复)各一组 `Form.List`,支持"添加一条"/删除,条目过滤空值与"无" - [x] 2.5 提交校验:版本号必填、三类内容不可全空、版本号不得与历史重复(重复/为空时 `message.warning` 拦截) - [x] 2.6 提交后生成结果区:只读预览(`
` 固定高度滚动)+「复制全文」「下载 VERSION.md」「下载新增片段」三个按钮
- [x] 2.7 下载实现:Blob + `a.download`(纯前端零依赖),文件 UTF-8;复制优先 `navigator.clipboard`,失败降级 `document.execCommand('copy')`;成功/失败均 `message` 提示
- [x] 2.8 antd v6 规范:不使用 `Select.Option` 子组件(用 `options` 属性)、`Modal` 用 `destroyOnHidden`、日期组件中文本地化
## 3. 路由与菜单注册
- [x] 3.1 `frontend/src/routes/menuRoutes.ts`:`keyToPath` 新增 `'system-version': '/system/version'`;`menuTitleMap` 新增 `'system-version': '版本更新维护'`
- [x] 3.2 `frontend/src/routes/menuRouteRegistry.tsx`:导入 `VersionMaintenance`(`../pages/System/VersionMaintenance`),`MENU_RENDERERS` 新增 `'system-version': () => `
- [ ] 3.3 本地 `npm run dev` 验证:控制台 `[menuRoutes] 一致性校验通过`,无 `system-version` 缺失告警;点击菜单可打开页面、URL 归一到 `#/system/version`
## 4. BS_DrgSystemMenu 菜单配置(在「菜单配置」页「编辑菜单」弹窗中新增)
- [ ] 4.1 菜单编码:`system-version`
- [ ] 4.2 菜单名称:版本更新维护
- [ ] 4.3 上级菜单:系统管理(与「菜单配置」`system-menu` 同级)
- [ ] 4.4 排序号:置于系统管理末位(如现有最大排序号 + 1)
- [ ] 4.5 菜单图标:`HistoryOutlined`(或 `TagsOutlined`)
- [ ] 4.6 状态:启用
- [ ] 4.7 菜单路径-路由:`/system/version`
- [ ] 4.8 在「角色权限/角色管理」中把该菜单授权给需要使用的角色
## 5. 验证与发布
- [ ] 5.1 页面验证:当前版本卡片(含发布人、影响模块)与左侧导航底部版本号一致;历史记录倒序且明细完整
- [ ] 5.2 录入验证:自动推算版本号正确(同日 +1 / 跨天归 01);改日期重算;发布人默认当前用户;空内容与重复版本号被拦截
- [ ] 5.3 产物验证:下载/复制得到的文本包含① 区新三行与② 区顶部新段落(含 `- 发布人:`、`- 影响模块:`),标记行完整、历史内容未被破坏(已用脚本验证 v2026.09.14.02 生成结果正确)
- [ ] 5.4 端到端验证:用生成内容覆盖根目录 `VERSION.md` → `npm run build` → 导航栏版本号更新为新版
- [ ] 5.5 打包部署:`npm run build` 后部署 `dist` 到生产目录(`E:\DRG\dist`)