变更日志 (Changelog)
本项目的所有重要变更都将记录在此文件中。
[1.39.2] - 2025-12-31 16:09
修复 (Fixed)
- 标记面板按钮文字显示功能 - 实现标记面板按钮显示文字而不是图标,提升用户识别度
- 在 MarkButton 和 TimestampButton 中注释掉图标属性,添加文字显示
- 优化按钮交互体验,使用文字替代图标表示功能
改动文件:
- src/pages/view/components/MarkPanel.tsx
[1.39.1] - 2025-12-31 16:00
修复 (Fixed)
- 修复自定义标记添加时的坐标计算问题 - 修复预定义标记和自定义标记的坐标计算错误,确保标记正确显示在图像中心位置
- 在 MarkPanel.tsx 中修正预定义标记的 dispatch action payload
- 在 stack.image.viewer.tsx 中实现正确的 canvas 到 world 坐标转换
- 添加渲染引擎存在性检查和用户错误提示
- 提升标记功能的准确性和稳定性
改动文件:
- src/pages/view/components/MarkPanel.tsx
- src/pages/view/components/viewers/stack.image.viewer.tsx
[1.39.0] - 2025-12-31 15:18
新增 (Added)
- 更新服务器配置API端口设置 - 更新开发和测试环境的API端口从6001改为80,提升配置标准化程度
改动文件:
- src/features/serverConfig/services/ConfigService.ts
- src/features/serverConfig/state/serverConfigSlice.ts
[1.38.1] - 2025-12-31 14:37
修复 (Fixed)
- 修复"Add R Mark"按钮功能失效问题 - 修复R标记坐标计算错误导致标记超出SVG视口不可见的问题
- 重构 addRLabel 函数,使用简单可靠的固定坐标代替复杂的图像边界计算
- 将坐标从错误的巨大值改为固定坐标 [200, 100, 0],确保R标记显示在L标记右侧
- 移除不必要的图像尺寸和边界计算逻辑,避免坐标计算错误
- 修复TypeScript类型注解和函数签名,提升代码质量
核心改进:
- 功能修复:R标记现在能正常显示在图像上,不再超出SVG视口范围
- 代码简化:移除复杂的坐标计算,使用可靠的固定坐标方案
- 稳定性提升:避免因图像变换导致的坐标计算错误
改动文件:
- src/pages/view/components/viewers/stack.image.viewer.tsx
- package.json (版本更新: 1.38.0 -> 1.38.1)
[1.38.0] - 2025-12-31 14:07
新增 (Added)
- 发生器就绪状态管理和宠物专用测量功能条件显示 - 实现发生器状态监听和UI条件化显示
- 在 mqttService.ts 中添加 GENReady 消息处理,发送 GENStatus_TRUE/FALSE 事件
- 在 deviceAreaSlice.ts 中添加 generatorReady 状态管理,支持 setgeneratorReady action
- 在 DeviceArea.tsx 中简化发生器图标逻辑,基于 generatorReady 状态显示颜色
- 在 MeasurementPanel.tsx 中条件化显示宠物专用测量功能,仅在 VETDROS 产品中显示
核心功能实现:
- 发生器状态监听:MQTT 服务监听 GENReady 字段,实时更新设备就绪状态
- UI 状态同步:设备区域组件根据 generatorReady 状态动态调整图标颜色
- 产品功能区分:测量面板根据产品名称条件渲染宠物专用测量工具
- 状态管理扩展:Redux slice 新增 generatorReady 状态,支持事件驱动更新
改动文件:
- src/domain/mqttService.ts
- src/pages/exam/DeviceArea.tsx
- src/pages/view/components/MeasurementPanel.tsx
- src/states/exam/deviceAreaSlice.ts
- package.json (版本更新: 1.37.0 -> 1.38.0)
[1.37.0] - 2025-12-31 13:06
新增 (Added)
- 图像处理页面多语言支持 - 为图像处理页面的各个组件添加完整的国际化支持
- 在 ImageInfoArea.tsx 中添加 useIntl hook,实现图像详情和tag信息按钮的多语言化
- 在 MeasurementPanel.tsx 中集成 React Intl,支持基础测量、专业测量和宠物专用测量的多语言显示
- 在 MorePanel.tsx 中添加国际化支持,包括选择操作、信息查看和相关说明文本
- 在 RectCropPanel.tsx 中实现矩形裁剪面板的多语言化,包括按钮标题和操作说明
- 在 SliderAdjustmentPanel.tsx 中添加 useIntl,支持滑动参数调节面板的所有标签和文本
- 更新 en.js 和 zh.js 文件,新增相关的多语言键值对,支持中英文双语界面
核心功能实现:
- 多语言键值对:新增 imageInfoArea、measurementPanel、morePanel、rectCropPanel、sliderAdjustmentPanel 等相关翻译键
- 动态翻译:所有UI文本使用 intl.formatMessage 动态获取当前语言
- 组件集成:5个组件完整集成 React Intl 多语言支持
- 双语支持:中文和英文翻译完整覆盖所有新增界面文本
技术实现:
- 在各个组件中导入 useIntl hook,添加 intl 实例
- 使用 intl.formatMessage({ id: 'xxx' }) 替换所有硬编码文本
- 在 en.js 和 zh.js 中添加翻译资源
- Modal.confirm 的 title、content、okText、cancelText 全部动态化
- 按钮 title 支持条件渲染,根据禁用状态显示不同文本
改动文件:
- src/assets/i18n/messages/en.js
- src/assets/i18n/messages/zh.js
- src/pages/view/components/ImageInfoArea.tsx
- src/pages/view/components/MeasurementPanel.tsx
- src/pages/view/components/MorePanel.tsx
- src/pages/view/components/RectCropPanel.tsx
- src/pages/view/components/SliderAdjustmentPanel.tsx
- package.json (版本更新: 1.36.0 -> 1.37.0)
[1.36.0] - 2025-12-31 11:20
新增 (Added)
- 图像状态控制和传输区域多语言化支持 - 为 ImageStateControl 和 TransferArea 组件添加完整的国际化支持
- 在 ImageStateControl.tsx 中集成 React Intl,实现 Modal 对话框、消息提示和按钮 title 的多语言化
- 在 TransferArea.tsx 中添加 useIntl hook,支持 Send 和 Download 按钮的动态翻译
- 在 i18n 文件中新增 imageStateControl 和 transferArea 相关的多语言键,支持中英文双语
- 实现 Modal 确认对话框的动态标题和内容翻译,包括拒绝、恢复和另存为操作
- 优化按钮 title 提示,支持多分格模式下的禁用状态显示
- 提升国际化用户体验,确保所有用户界面文本都能根据语言设置正确显示
核心功能实现:
- 多语言键值对:新增 imageStateControl.confirmReject、transferArea.send 等 19 个翻译键
- 动态翻译:Modal 标题、内容、按钮文本全部支持 intl.formatMessage 动态获取
- 组件集成:ImageStateControl 和 TransferArea 组件完整集成 React Intl
- 双语支持:中文和英文翻译完整覆盖所有新增界面文本
技术实现:
- 在两个组件中导入 useIntl hook,添加 intl 实例
- 使用 intl.formatMessage({ id: 'xxx' }) 替换所有硬编码文本
- 在 scripts/output/i18n/ 和 src/assets/i18n/messages/ 中添加翻译资源
- Modal.confirm 的 title、content、okText、cancelText 全部动态化
- 按钮 title 支持条件渲染,根据禁用状态显示不同文本
改动文件:
- scripts/output/i18n/en.js - 添加 19 个英文翻译键
- scripts/output/i18n/zh.js - 添加 19 个中文翻译键
- src/assets/i18n/messages/en.js - 添加 19 个英文翻译键
- src/assets/i18n/messages/zh.js - 添加 19 个中文翻译键
- src/pages/view/components/ImageStateControl.tsx - 集成 React Intl 多语言支持
- src/pages/view/components/TransferArea.tsx - 集成 React Intl 多语言支持
- package.json - 版本更新: 1.35.0 -> 1.36.0
[1.35.0] - 2025-12-31 11:06
新增 (Added)
- FunctionArea功能区国际化支持 - 实现功能按钮的完整多语言支持,提升国际化用户体验
- 在 FunctionArea.tsx 中集成 React Intl,使用 useIntl hook 和 formatMessage 实现动态翻译
- 为所有功能按钮添加国际化键值对,包括标记、翻转、旋转、裁剪、遮罩、布局、测量等功能
- 在 i18n 文件中新增 34 个 functionArea 相关的多语言键,支持中英文双语
- 优化禁用状态提示文本的国际化处理,使用 disabledTooltipSuffix 键统一管理
- 确保所有功能按钮在中英文界面下都能正确显示对应语言的提示文本
核心功能实现:
- 多语言键值对:新增 functionArea.addLMark、addRMark、horizontalFlip、rotateClockwise90 等 34 个翻译键
- 动态翻译:所有按钮 title 属性使用 intl.formatMessage 动态获取当前语言文本
- 一致性设计:禁用提示使用统一的 suffix 键,保持界面文本一致性
- 双语支持:中文和英文翻译完整覆盖所有功能按钮
技术实现:
- 在 FunctionArea.tsx 中导入 useIntl hook
- 使用 intl.formatMessage({ id: 'functionArea.xxx' }) 替换硬编码文本
- 在 scripts/output/i18n/ 和 src/assets/i18n/messages/ 中添加翻译资源
- 禁用提示使用模板字符串拼接 suffix 实现统一管理
改动文件:
- scripts/output/i18n/en.js - 添加 34 个英文翻译键
- scripts/output/i18n/zh.js - 添加 34 个中文翻译键
- src/assets/i18n/messages/en.js - 添加 34 个英文翻译键
- src/assets/i18n/messages/zh.js - 添加 34 个中文翻译键
- src/pages/view/components/FunctionArea.tsx - 集成 React Intl 多语言支持
- package.json - 版本更新: 1.34.9 -> 1.35.0
[1.34.9] - 2025-12-30 18:17
修复 (Fixed)
- 修复复制体位功能 - 重构 copyPositionThunk,支持完整的体位复制流程
- 从简单的图像复制扩展为完整的体位追加API调用
- 集成选中的体位信息获取和验证
- 添加新体位数据处理和状态管理
- 优化错误处理和用户提示信息
- 确保UI正确同步更新新复制的体位
改动文件:
- src/states/exam/examWorksCacheSlice.ts
[1.34.8] - 2025-12-30 16:45
修复 (Fixed)
- 修复bug 177 - 顺时针旋转90度功能实际执行逆时针旋转的问题 - 修正了RotateClockwise90函数中的viewUp向量计算公式,确保顺时针旋转功能正确工作
- 修复了顺时针和逆时针旋转90度功能使用相同计算公式的问题
- 更新了viewUp向量计算,使用正确的顺时针旋转矩阵公式
- 确保图像旋转方向与按钮功能描述一致,提升用户操作体验
核心改进:
- 功能正确性:顺时针旋转现在执行真正的顺时针旋转
- 用户体验:旋转方向与用户期望完全一致
- 代码准确性:修复了数学计算公式的错误
改动文件:
- src/pages/view/components/viewers/stack.image.viewer.tsx
[1.34.7] - 2025-12-30 16:20
修复 (Fixed)
- 修复日志序列化中的循环引用问题 - 在 main.js 中添加 safeStringify 函数,避免 JSON.stringify 处理循环引用时出错
- 在 render-process-gone 和 child-process-gone 事件中替换 JSON.stringify 为 safeStringify
- 确保日志记录时不会因循环引用导致序列化失败
核心改进:
- 错误处理优化:添加循环引用检测和处理逻辑
- 系统稳定性:防止因对象循环引用导致的日志序列化错误
- 调试能力:确保所有错误信息都能正确记录和显示
改动文件:
[1.34.6] - 2025-12-30 15:58
修复 (Fixed)
- 修复体位选择后服务器通信失败时错误提示不消失的问题 - 移除 message.error 调用中的错误对象参数,解决选择体位后同步失败时错误提示无法自动消失的问题
核心改进:
- 用户体验提升:错误提示现在能正常自动消失
- 错误处理优化:避免因传递错误对象导致的UI问题
改动文件:
- src/domain/exam/bodyPositionSelection.ts
[1.34.5] - 2025-12-30 14:51
修复 (Fixed)
- 修复 Redux 序列化错误 - 移除未使用的 annotation slice 状态管理,避免控制台出现序列化错误信息
- 注释掉 annotationSlice.ts 中的所有代码,避免 Map 对象序列化问题
- 注释掉 annotation.ts 中的类型定义
- 从 store.ts 中移除 annotation reducer 注册
- 彻底移除未使用的 Redux annotation 状态管理,避免控制台出现
annotation.annotations 序列化错误
核心改进:
- 代码清理:移除未使用的 Redux slice,减少代码复杂度
- 错误修复:解决 Redux 序列化检查器报错的问题
- 系统稳定性:避免因未使用状态导致的潜在序列化问题
改动文件:
- src/features/imageAnnotation/state/annotationSlice.ts
- src/features/imageAnnotation/types/annotation.ts
- src/states/store.ts
[1.34.4] - 2025-12-30 12:37
修复 (Fixed)
- 体位复制错误提示功能 - 在体位复制失败时添加用户友好的错误消息提示
- 在 examWorksCacheSlice.ts 中导入 antd 的 message 组件
- 在 copyPositionThunk 的错误处理中添加错误提示消息
- 显示错误原因,帮助用户了解复制失败的具体情况
- 错误消息将在 3 秒后自动关闭,避免长时间占用界面
核心改进:
- 用户体验提升:复制失败时立即显示错误提示,用户能快速了解问题
- 错误信息展示:显示具体的错误消息内容,便于问题排查
- 交互友好性:3秒自动关闭的提示设计,既传达了信息又不打扰用户
改动文件:
- src/states/exam/examWorksCacheSlice.ts
[1.34.3] - 2025-12-29 21:55
修复
- 修复软件包下载进度显示问题,进度百分比计算和状态管理优化
[1.34.2] - 2025-12-29 19:43
修复 (Fixed)
- 检查开始时间显示问题修复 - 修复工作列表表格中检查开始时间显示不正确的问题
- 在 WorklistTable 组件中为 StudyStartDatetime 字段添加时间格式化 render 函数
- 实现从 {seconds, nanos} 对象转换为本地时间字符串的正确显示
- 优化 i18n 翻译,将"检查开始日期时间"简化为"检查开始时间"
核心改进:
- 时间显示修复:确保检查开始时间正确显示为本地时间格式
- 国际化优化:简化翻译文本,提升用户体验
改动文件:
- cypress/support/mock/handlers/i18n.ts
- src/pages/patient/components/WorklistTable.tsx
[1.34.1] - 2025-12-29 18:25
[1.34.0] - 2025-12-29 18:25
新增 (Added)
- 在体位操作按钮中添加追加视图功能 - 实现体位列表的追加视图按钮功能
- 在 BodyPositionActionButtons 组件中添加追加视图按钮
- 集成 AppendViewModal 组件,支持体位追加操作
- 添加 btn_AppendView.svg 图标资源
- 优化按钮样式,设置 fontSize 为 48px 提升图标显示效果
核心功能实现:
- 按钮添加:在 BodyPositionActionButtons 组件中添加追加视图按钮
- 模态框集成:集成 AppendViewModal 组件,支持体位追加操作
- 图标资源:添加 btn_AppendView.svg 图标资源
- 样式优化:设置按钮字体大小为 48px,提升图标显示效果
技术实现:
- 在 BodyPositionActionButtons.tsx 中添加 Tooltip 和 Button 组件
- 导入 AppendViewModal 并实现状态管理
- 使用 Icon 组件渲染 btn_AppendView 图标
- 添加 onClick 处理函数打开追加视图模态框
改动文件:
- src/pages/exam/components/BodyPositionActionButtons.tsx
- src/assets/Icons/base/module-exam/theme-default/1x/btn_AppendView.svg
[1.33.2] - 2025-12-29 15:59
修复 (Fixed)
- 修复诊断报告模板获取失败问题 - 在 fetchTemplatesThunk 中添加空值检查,确保返回空数组而不是undefined
- 在 fetchTemplatesThunk 中将 return response.data.templates; 改为 return response.data.templates || [];
- 确保当 templates 为 undefined 时返回空数组,避免后续处理错误
核心改进:
- 数据安全性:添加空值检查,防止模板数据为undefined导致的错误
- 错误处理:返回空数组确保后续代码能正常处理
- 代码健壮性:提升API响应处理的稳定性
改动文件:
- src/states/patient/DiagnosticReport/templateSlice.ts
[1.33.1] - 2025-12-29 12:59
修复 (Fixed)
- 修复反复切换曝光体位时DCM图右侧不显示问题 (#172) - 在 StackViewer 组件中添加清理函数确保 viewport 正确清理
- 在 StackViewer 组件的 useEffect 中添加清理函数
- 确保组件卸载时调用 disableElement 正确清理 viewport
- 添加错误处理和日志输出以便调试
- 解决因 viewport 未正确清理导致的显示问题
核心改进:
- 资源管理优化:组件卸载时自动清理 viewport,避免资源泄漏
- 稳定性提升:防止反复切换体位时出现图像显示异常
- 调试增强:添加清理日志,便于问题排查
- 用户体验:确保在处理流程中反复切换体位时图像始终正常显示
技术实现:
- 在 useEffect 中添加 return 清理函数
- 使用 cornerstone.getRenderingEngine 获取渲染引擎实例
- 调用 renderingEngine.disableElement(viewportId) 清理 viewport
- 添加 try-catch 错误处理和 console.log 日志输出
- 确保清理函数在组件卸载时正确执行
改动文件:
- src/pages/view/components/viewers/stack.image.viewer.tsx
- CHANGELOG.md
- package.json (版本更新: 1.33.0 -> 1.33.1)
[1.33.0] - 2025-12-29 12:31
新增 (Added)
- 图像处理页面 DICOM 下载功能 - 实现在处理页面下载当前查看图像的功能
- 在 TransferArea 组件中添加下载按钮,支持下载当前显示的 DICOM 图像
- 使用 Cornerstone 获取当前 viewport 的图像 URL 和索引信息
- 实现从服务器获取完整 DICOM 文件的下载逻辑
- 支持自动生成带时间戳的文件名(格式:dicom-image-{timestamp}.dcm)
- 添加下载状态管理,防止重复点击和提供加载反馈
- 集成 Ant Design message 组件提供下载进度和结果提示
- 添加完善的错误处理机制,确保下载失败时有明确的提示信息
核心功能实现:
- 图像定位:通过 Cornerstone API 获取当前查看的图像索引和 URL
- 文件下载:使用 fetch API 从服务器获取完整的 DICOM 文件
- 用户体验:下载过程中显示加载提示,完成后自动保存到本地
- 状态管理:使用 React useState 管理下载状态,防止并发下载
- 错误处理:网络错误、图像未找到等异常情况都有相应的错误提示
技术实现:
- 导入 Cornerstone Core 库获取 viewport 和图像信息
- 使用 getEnabledElements() 获取当前激活的 viewport
- 通过 getCurrentImageIdIndex() 获取当前图像索引
- 使用 getImageIds() 获取完整的图像 URL 列表
- 实现 Blob 下载和本地文件保存逻辑
- 添加时间戳生成器创建唯一文件名
改动文件:
- src/pages/view/components/TransferArea.tsx
- CHANGELOG.md
- package.json (版本更新: 1.32.1 -> 1.33.0)
[1.32.1] - 2025-12-29 12:00
修复 (Fixed)
- 简化服务器配置检查逻辑 - 移除默认配置检查,避免跳过配置流程
- 在 checkServerConnection 中注释掉默认配置检查逻辑
- 确保无论配置状态如何都能进入配置流程,提升灵活性
核心改进:
- 配置流程简化:移除硬编码的默认配置判断逻辑
- 用户体验优化:始终允许用户进行服务器配置检查
- 代码重构:注释掉不必要的默认配置验证步骤
改动文件:
- src/features/serverConfig/state/serverConfigSlice.ts
- package.json (版本更新: 1.32.0 -> 1.32.1)
[1.32.0] - 2025-12-26 20:37
新增 (Added)
- 全局错误处理功能 - 实现完整的应用错误捕获和处理机制
- 在 Electron 主进程中添加 uncaughtException、unhandledRejection、render-process-gone、child-process-gone 事件监听
- 在浏览器环境中添加 uncaught_error 和 unhandled_rejection 事件监听
- 创建全局错误处理工具类,支持日志记录和错误信息格式化
- 在应用初始化时自动设置全局错误监听器
核心改进:
- 系统稳定性提升:全面捕获和记录应用运行时的各类错误
- 错误追踪能力增强:详细的错误信息记录,便于问题排查和调试
- 用户体验优化:优雅的错误处理,避免应用崩溃影响正常使用
- 开发调试便利:结构化的错误日志输出,支持不同环境下的错误监控
改动文件:
- main.js
- src/app.tsx
- src/utils/errorHandler.ts
- package.json (版本更新: 1.31.1 -> 1.32.0)
[1.31.1] - 2025-12-26 19:21
修复 (Fixed)
- 修复bug 168 - 添加曝光进度列 - 在worklist表格中添加曝光进度列,显示已曝光图像数量/总图像数量
- 新增曝光进度列配置,在默认列中显示
- 实现曝光进度获取逻辑,统计已曝光图像数量
- 在worklist表格中添加曝光进度列渲染逻辑
- 优化MaskTool注释过滤,不保存到服务器
核心改进:
- 用户体验提升:在工作列表中可以直接查看每个检查的曝光进度
- 数据可视化:曝光进度以"已曝光/总数"的格式显示,便于快速了解检查完成情况
- 代码优化:过滤MaskTool注释,减少服务器存储负担
改动文件:
- src/config/tableColumns/adapters/LocalColumnConfigAdapter.ts
- src/features/imageAnnotation/services/AnnotationManager.ts
- src/pages/patient/components/WorklistTable.tsx
- src/pages/patient/worklist.tsx
- src/domain/patient/getExposureProgress.ts
- package.json (版本更新: 1.31.0 -> 1.31.1)
[1.31.0] - 2025-12-26 19:16
新增 (Added)
- IP 地址管理功能模块 - 实现完整的 IP 地址管理流程
- 可用 IP 列表展示:启动时自动扫描并显示可用 IP 地址
- 用户交互选择:提供友好的界面让用户选择要使用的 IP 地址
- 配置本地保存:用户选择的 IP 配置自动保存到本地
- 下次启动自动加载:应用重启后自动加载上次保存的 IP 配置
- 减少用户重复手动输入/选择 IP 的操作,确保模块启动后可快速使用指定 IP 访问服务器
核心改进:
- 用户体验提升:IP 配置流程自动化,减少手动操作
- 配置持久化:本地保存和自动加载,保持用户偏好
- 网络连接优化:快速连接到指定的服务器 IP,提升工作效率
改动文件:
[1.30.4] - 2025-12-26 15:33
修复 (Fixed)
- 解决了从处理不能进入打印的问题 - 修复从处理页面无法切换到打印界面的问题
- 在 BusinessZone.tsx 中为 'process' 键添加了检查曝光状态的条件
- 确保从处理页面可以正确进入打印界面
核心改进:
- 用户体验提升:处理页面现在支持打印功能切换
- 功能完整性:修复了页面切换逻辑的缺失问题
改动文件:
- src/layouts/BusinessZone.tsx
- CHANGELOG.md
- package.json (版本更新: 1.30.3 -> 1.30.4)
[1.30.3] - 2025-12-26 15:11
修复 (Fixed)
- 修复从检查和处理不能进入打印的问题 - 解决从检查和处理页面无法切换到打印界面的问题
- 在 BasicLayout.tsx 的 handleMenuClick 函数中为 'exam' 和 'process' 页面添加打印按钮切换逻辑
- 当 currentKey 为 'exam' 或 'process' 时,调用 dispatch(setBusinessFlow(key)) 进行页面切换
- 确保从检查和处理页面点击打印按钮能正确跳转到打印界面
核心改进:
- 用户体验提升:检查和处理页面现在支持打印功能切换
- 代码一致性:统一了不同页面的打印按钮处理逻辑
- 功能完整性:修复了页面切换逻辑的缺失问题
改动文件:
- src/layouts/BasicLayout.tsx
- CHANGELOG.md
- package.json (版本更新: 1.30.2 -> 1.30.3)
[1.30.2] - 2025-12-26 14:19
修复 (Fixed)
- 修复任务清单打印按钮无响应问题 - 重构打印功能,支持从任务清单和历史清单正确进入打印页面
- 重构
historyToPrint 函数为 selectedWorksToPrint,添加 source 参数动态选择数据源
- 修复从任务清单页面点击打印时,代码错误地从
historyEntities 而非 workEntities 查找数据的问题
- 在
BasicLayout.tsx 中传递当前页面类型参数,确保数据源选择正确
- 添加详细的调试日志,便于问题排查和功能验证
- 重命名文件从
historyToPrint.ts 到 selectedWorksToPrint.ts,提升代码语义性
核心改进:
- 数据源选择修复:根据页面类型动态选择正确的实体数据(workEntities 或 historyEntities)
- 代码重构:函数重命名和参数化,提升代码复用性和可维护性
- 调试增强:添加关键步骤的日志输出,方便问题定位
- 用户体验:确保任务清单和历史清单的打印功能都正常工作
技术实现:
- 重构
selectedWorksToPrint 函数,添加 source: 'worklist' | 'historylist' 参数
- 动态实体选择:
const entityData = source === 'worklist' ? state.workEntities.data : state.historyEntities.data
- 函数调用更新:
selectedWorksToPrint(selectedIds, currentKey as 'worklist' | 'historylist')
- 文件重命名:从
historyToPrint.ts 重命名为 selectedWorksToPrint.ts
- 调试日志:添加数据源选择、实体数量、匹配任务数量等关键信息输出
改动文件:
- src/domain/patient/selectedWorksToPrint.ts (新增,重构自 historyToPrint.ts)
- src/layouts/BasicLayout.tsx (修改,更新函数调用和导入)
- src/domain/patient/historyToPrint.ts (删除)
- CHANGELOG.md
- package.json (版本更新: 1.30.1 -> 1.30.2)
[1.30.1] - 2025-12-26 12:53
修复 (Fixed)
- 修复bug 166 - 任务清单/历史清单打印功能只在有已曝光图像时激活 - 优化打印按钮激活条件,确保只有存在实际图像时才能打印
- 在 DataState 接口中添加
hasImage 字段,用于标识是否有实际图像
- 修改 getBtnAvailability 函数,worklist/historylist 的打印按钮要求同时满足
hasSelection && hasImage
- 在 BusinessZone.tsx 中使用 thumbnailList 判断是否有已曝光的图像(expose_status === 'Exposed')
- 利用现有的 API 数据流,thumbnailList 已通过 API 获取完整的图像曝光状态信息
- 确保打印功能只在有实际可打印内容时才被激活,提升用户体验
核心改进:
- 权限控制精确化:打印按钮现在基于实际图像存在性,而非仅检查选中状态
- 数据验证增强:使用服务器返回的 expose_status 判断图像是否可打印
- 用户体验优化:避免用户在没有图像时误点打印按钮
- 架构合理性:复用现有 thumbnailList 数据流,无需额外 API 调用
技术实现:
- 扩展 DataState 接口:添加
hasImage?: boolean 字段
- 优化权限判断:worklist/historylist 的 print 按钮改为
hasSelection && hasImage
- 状态计算:使用
state.thumbnailList.thumbnails.some(t => t.expose_status === 'Exposed')
- 数据来源:thumbnailList 通过 updateThumbnailsFromWorkSelection/updateThumbnailsFromHistorySelection 异步获取
改动文件:
- src/domain/permissionMap.ts
- src/layouts/BusinessZone.tsx
- CHANGELOG.md
- package.json (版本更新: 1.30.0 -> 1.30.1)
[1.30.0] - 2025-12-25 21:05
新增 (Added)
- 业务区图标布局调整 - 优化业务区图标位置和布局逻辑,提升用户界面一致性
- 在 BusinessZone.tsx 中调整图标位置从left改为right,并为子项添加iconPlace="right"
- 在 IconButton.tsx 中重构flex类使用条件渲染,优化布局逻辑
核心功能实现:
- 图标位置调整: 将业务区图标位置从左侧移至右侧,提升视觉平衡
- 布局优化: 重构IconButton组件的flex布局逻辑,使用条件渲染替代对象语法
- 代码改进: 注释掉不必要的图标属性,简化组件结构
技术实现:
- 修改 BusinessZone.tsx 图标位置和子项布局
- 在 IconButton.tsx 中使用 isVertical ? 'flex-col' : 'flex-row' 条件渲染
改动文件:
- src/layouts/BusinessZone.tsx
- src/components/IconButton.tsx
[1.29.0] - 2025-12-25 20:29
新增 (Added)
- BusinessZone急诊按钮功能 - 实现BusinessZone中的急诊按钮功能和权限控制
- 在权限映射表中添加急诊按钮类型和可用性控制
- 实现急诊按钮点击处理,与登录页面急诊功能一致
- 急诊按钮只在特定页面可用,其他页面不可用
核心功能实现:
- 权限控制:急诊按钮根据权限映射表控制可用性
- 功能一致性:与登录页面急诊按钮功能完全一致
- 用户体验:只在合适页面显示急诊按钮
技术实现:
- 权限映射表扩展:在 permissionMap.ts 中添加 emergency 按钮类型
- 组件逻辑优化:在 BusinessZone.tsx 中实现急诊按钮的点击和显示逻辑
- 类型安全:完整的 TypeScript 类型定义支持
改动文件:
- src/domain/permissionMap.ts
- src/layouts/BusinessZone.tsx
[1.28.1] - 2025-12-25 17:59
修复 (Fixed)
- 修复bug 161 - 体位操作按钮根据产品类型条件渲染
- 新增 BodyPositionActionButtons 组件,提供添加、删除、复制体位按钮
- 修改 BodyPositionList 组件,根据 productName 为 'VETDROS' 条件渲染操作按钮
- 对于 VETDROS 产品显示完整的操作按钮组,其他产品显示原有的添加按钮
- 确保体位操作功能根据产品类型正确显示,提升用户界面一致性
改动文件:
- src/pages/exam/components/BodyPositionList.tsx
- src/pages/exam/components/BodyPositionActionButtons.tsx
[1.28.0] - 2025-12-25 17:37
新增 (Added)
- 图像处理页面患者信息显示功能 - 在图像处理页面顶部添加患者ID和姓名的显示
- 使用 Redux state 获取当前选中体位的患者信息
- 在 ImageProcessingPageLarge 组件中添加患者信息显示区域
- 将原有的 Layout 布局改为 Flex 布局,提升布局灵活性
- 确保患者信息在图像处理界面中始终可见,提升用户体验
核心功能实现:
- 患者信息展示:在图像处理页面顶部显示当前选中体位的患者ID和姓名
- 状态管理集成:通过 useAppSelector 从 bodyPositionList 状态获取数据
- 布局优化:使用 Flex 布局替代原有的 Layout,提升页面结构
- 用户体验提升:患者信息始终可见,方便医生确认当前处理对象
技术实现:
- 在 ImageProcessingPageLarge.tsx 中导入 useAppSelector 和 Flex 组件
- 添加患者信息提取逻辑,从 selectedBodyPosition 中获取 PatientID 和 PatientName
- 重构页面布局,使用 Flex 容器包裹患者信息区域和原有内容
- 保持原有功能完整性,确保 OperationPanel 和 BodyPositionList 正常工作
改动文件:
- src/pages/view/ImageProcessingPageLarge.tsx
- CHANGELOG.md
- package.json (版本更新: 1.27.0 -> 1.28.0)
[1.27.0] - 2025-12-25 14:24
新增 (Added)
- 诊断报告模板编辑功能 - 实现完整的诊断报告模板管理系统,包括模板的创建、编辑、删除、应用等功能
- 新增诊断报告模板管理对话框,支持模板的增删改查操作
- 实现模板列表展示,支持常用模板标记和搜索过滤
- 添加"另存为诊断报告模板"功能,从当前报告内容创建模板
- 完善Redux状态管理,支持模板数据的异步操作
- 集成完整的用户界面和交互流程
核心功能实现:
- 模板管理:创建、编辑、删除、复制诊断报告模板
- 模板应用:从模板快速填充报告内容,支持内容覆盖确认
- 常用模板:支持设置和筛选常用诊断报告模板
- 搜索过滤:按模板名称和标签进行搜索过滤
- 数据持久化:通过API实现模板数据的后端存储
技术实现:
- 新增TemplateManagementModal组件,实现模板管理对话框
- 新增TemplateListItem组件,实现模板列表项展示
- 重构TemplatePanel组件,实现模板面板功能
- 修改FindingsSection组件,集成"另存为模板"功能
- 完善templateSlice,实现完整的Redux状态管理
- 简化findingsSlice,移除不必要的模板保存逻辑
改动文件:
- docs/实现/诊断报告模板编辑功能设计.md (新增)
- src/pages/patient/DiagnosticReport/components/FindingsSection.tsx (修改)
- src/pages/patient/DiagnosticReport/components/TemplatePanel.tsx (修改)
- src/states/patient/DiagnosticReport/findingsSlice.ts (修改)
- src/states/patient/DiagnosticReport/templateSlice.ts (修改)
- src/pages/patient/DiagnosticReport/components/TemplateListItem.tsx (新增)
- src/pages/patient/DiagnosticReport/components/TemplateManagementModal.tsx (新增)
- CHANGELOG.md
- package.json (版本更新: 1.26.2 -> 1.27.0)
[1.26.2] - 2025-12-24 18:18
修复 (Fixed)
- Pan工具图标主题颜色支持修复 - 修复Pan工具图标在主题切换时颜色不跟随的问题
- 将Pan_normal.svg图标的硬编码颜色改为currentColor
- 确保图标在深色和浅色主题下都能正确显示
核心改进:
- 主题一致性:Pan工具图标现在完全跟随主题系统,颜色会根据主题自动切换
- 用户体验:切换主题时Pan工具图标颜色立即响应,无需刷新
改动文件:
- src/assets/Icons/base/module-process/theme-default/2x/Pan_normal.svg
- CHANGELOG.md
- package.json (版本更新: 1.26.1 -> 1.26.2)
[1.26.1] - 2025-12-24 17:41
修复 (Fixed)
核心改进:
- 初始化稳定性:重用主渲染引擎避免初始化冲突
- 用户体验:第一次使用反色对比功能不再出现空白右侧
- 代码简化:移除不必要的渲染引擎管理逻辑
- 性能优化:减少内存占用和渲染引擎数量
技术实现:
- 修改 renderingEngineId 从 'invertContrastEngine' 改为 'myRenderingEngine'
- 移除 useEffect 中的渲染引擎创建和初始化逻辑
- 直接使用主程序已初始化的渲染引擎实例
- 保持其他反色应用逻辑不变
改动文件:
- src/pages/view/components/InvertContrastModal.tsx
- CHANGELOG.md
- package.json (版本更新: 1.26.0 -> 1.26.1)
[1.26.0] - 2025-12-24 17:24
新增 (Added)
- 诊断报告批量下载功能 - 实现完整的诊断报告批量下载系统,支持日期范围选择和批量下载
- 新增诊断报告批量下载模态框组件,支持日期范围选择和批量下载报告
- 在操作面板中添加批量下载报告按钮,集成到历史列表界面
- 修改报告下载API,将 downloadReportXlsx 从POST改为GET方法,调整参数传递方式
- 新增诊断报告批量下载服务,处理下载逻辑和数据验证
- 新增日期范围验证工具类,确保下载日期范围的有效性
- 新增诊断报告批量下载相关的TypeScript类型定义
- 完善Redux状态管理,添加诊断报告批量下载slice和状态处理
- 更新Redux store配置,集成新的状态管理模块
核心功能实现:
- 批量下载界面:用户可以选择日期范围,批量下载指定时间段内的诊断报告
- API优化:调整下载接口为GET方法,提升兼容性和易用性
- 用户界面集成:在患者历史列表页面添加批量下载按钮
- 数据验证:内置日期范围验证,确保输入数据的有效性
- 状态管理:完整的Redux状态管理,支持下载状态跟踪和错误处理
技术实现:
- 新增组件层:DiagnosticReportBatchDownloadModal 模态框组件
- 服务层扩展:diagnosticReportBatchDownloadService 处理下载业务逻辑
- 状态管理扩展:diagnosticReportBatchDownloadSlice 处理UI状态
- 类型安全:完善的TypeScript类型定义和接口
- 工具类:dateRangeValidator 提供日期验证功能
- API层更新:ReportActions.ts 调整下载接口实现
改动文件:
- docs/实现/诊断报告批量下载功能实现文档.md (新增)
- src/components/DiagnosticReportBatchDownloadModal.tsx (新增)
- src/services/diagnosticReportBatchDownloadService.ts (新增)
- src/states/patient/DiagnosticReport/diagnosticReportBatchDownloadSlice.ts (新增)
- src/types/diagnosticReportBatchDownload.ts (新增)
- src/utils/dateRangeValidator.ts (新增)
- src/API/report/ReportActions.ts (修改)
- src/pages/patient/components/ActionPanel.tsx (修改)
- src/states/store.ts (修改)
- CHANGELOG.md
- package.json (版本更新: 1.25.0 -> 1.26.0)
[1.25.0] - 2025-12-24 12:42
新增 (Added)
- 跨平台文件下载和保存功能 - 实现完整的文件下载服务,支持浏览器、Electron和Cordova平台
- 新增 download 服务模块,包含 DownloadManager 和多平台适配器
- 在 main.js 中添加 save-blob IPC handler,支持通用的文件保存功能
- 在 preload.js 中暴露 saveFile API,便于前端调用
- 在 PdfPreviewModal 中集成 PDF 下载功能,支持诊断报告下载
- 更新全局类型定义,支持文件下载相关的类型安全
- 实现跨平台兼容性,确保在不同环境中都能正常工作
核心功能实现:
- 下载服务架构:抽象出 IDownloadAdapter 接口,支持多平台适配
- 文件保存功能:通过 IPC 实现安全的文件保存对话框
- PDF 下载集成:诊断报告预览模态框中添加下载按钮
- 类型安全:完善的 TypeScript 类型定义
- 跨平台支持:支持浏览器、Electron和Cordova环境的下载功能
技术实现:
- 新增 src/services/download/ 模块,包含核心服务类和适配器
- 使用适配器模式实现不同平台的下载逻辑
- 集成 Ant Design 组件实现用户界面
- 添加详细的错误处理和日志记录
- 确保与现有代码风格和架构的一致性
改动文件:
- main.js
- preload.js
- src/services/download/DownloadManager.ts (新增)
- src/services/download/IDownloadAdapter.ts (新增)
- src/services/download/adapters/BrowserDownloadAdapter.ts (新增)
- src/services/download/adapters/CordovaDownloadAdapter.ts (新增)
- src/services/download/adapters/ElectronDownloadAdapter.ts (新增)
- src/services/download/index.ts (新增)
- src/services/download/types.ts (新增)
- src/states/patient/DiagnosticReport/PdfPreviewModal.tsx
- types/global.d.ts
- CHANGELOG.md
- package.json (版本更新: 1.24.1 -> 1.25.0)
[1.24.1] - 2025-12-23 20:05
修复 (Fixed)
- 诊断报告页面背景色不跟随主题问题 - 修复诊断报告页面在切换主题时背景色不更新的问题
- 重构 DiagnosisSection 组件,从使用 Layout/Header/Content 改为普通的 div/span,移除硬编码背景色
- 移除 ReportFooter 的硬编码白色背景类,确保背景色跟随主题
- 在 DiagnosticReport 页面添加主题背景色设置,使用 currentTheme.token.colorBgContainer
- 确保诊断报告页面在浅色和深色主题下都能正确显示背景色
核心改进:
- 主题一致性:诊断报告页面现在完全跟随主题系统,背景色会根据主题自动切换
- 用户体验:切换主题时诊断报告页面背景色立即响应,无需刷新
技术实现:
- DiagnosisSection.tsx:重构组件结构,移除 Ant Design Layout 相关组件和硬编码样式
- ReportFooter.tsx:移除
bg-white 类,依赖主题系统提供背景色
- index.tsx:添加主题状态获取和背景色样式设置
改动文件:
- src/pages/patient/DiagnosticReport/components/DiagnosisSection.tsx
- src/pages/patient/DiagnosticReport/components/ReportFooter.tsx
- src/pages/patient/DiagnosticReport/index.tsx
- CHANGELOG.md
- package.json (版本更新: 1.24.0 -> 1.24.1)
[1.24.0] - 2025-12-23 19:20
新增 (Added)
- 测量工具一次性模式和光标恢复功能 - 实现测量工具绘制完成后自动关闭和光标恢复的功能
- 新增 MeasurementToolManager.initializeOneTimeMode() 初始化方法,在应用启动时自动设置一次性模式监听器
- 监听 cornerstoneTools.Enums.Events.ANNOTATION_COMPLETED 事件,测量完成时自动停用工具
- 实现一次性工具列表管理,只对 Length 和 Angle 工具启用一次性模式
- 在 deactivateToolByName 方法中添加光标恢复逻辑,工具停用时自动将光标重置为默认样式
- 为所有测量工具激活方法添加一次性模式设置逻辑
- 优化用户体验:测量完成后工具自动关闭,光标恢复正常状态
核心功能实现:
- 一次性模式管理:Length 和 Angle 工具绘制完成后自动停用,避免连续绘制
- 事件驱动架构:基于 Cornerstone 事件系统实现自动化工具管理
- 光标状态恢复:工具停用时自动恢复默认光标样式
- 用户体验优化:减少手动操作步骤,提升操作流畅度
- 状态管理:通过 Redux 清除测量状态,确保界面状态同步
技术实现:
- 在 MeasurementToolManager.ts 中添加事件监听逻辑
- 使用 Map 数据结构跟踪一次性模式状态
- 在 deactivateToolByName 中统一处理光标恢复
- 在 app.tsx 中添加应用初始化调用
- 集成 cornerstone eventTarget 进行事件监听
改动文件:
- src/app.tsx - 添加 MeasurementToolManager 初始化调用
- src/utils/measurementToolManager.ts - 实现一次性模式和光标恢复功能
- CHANGELOG.md
- package.json (版本更新: 1.23.0 -> 1.24.0)
[1.23.0] - 2025-12-23 16:58
新增 (Added)
- 诊断报告功能完整实现 - 实现完整的诊断报告系统,包括图像选择、报告模板管理和报告预览保存
- 新增报告相关API接口:报告列表查询、批量下载、预览、模板管理(增删改查)
- 实现报告图像选择功能:从检查曝光图像中选择图像添加到报告
- 完善报告预览和保存流程:支持图像列表提取和文件名处理
- 优化报告创建流程:限制单选检查项目,避免多选冲突
- 增强报告数据初始化:根据选中工作自动填充患者基本信息
- 集成报告模板系统:支持模板的创建、修改、删除和列表查询
核心功能实现:
- 报告创建流程:用户从工作列表选择单个检查项目进入报告创建界面
- 图像选择系统:自动获取检查的曝光图像,用户可以选择添加到报告
- 报告模板管理:完整的CRUD操作,支持报告模板的复用
- 报告预览保存:支持PDF预览和数据保存,包含选中的图像列表
- 数据初始化:根据选中工作自动填充患者姓名、年龄、性别等信息
- 用户界面优化:中英文界面支持,加载状态和错误处理
技术实现:
- 新增API层:创建 report/ 目录下的 ReportActions.ts 和 ReportTemplateActions.ts
- 增强诊断报告API:添加 fetchDiagnosisReportContent 和 downloadDiagnosisReportPdf
- 状态管理扩展:更新 slice 支持当前工作数据传递
- 组件重构:ImageList 和 ImageSelection 组件实现图像选择逻辑
- 异步流程优化:previewReportThunk 和 saveReportThunk 支持图像处理
- 表单初始化:DiagnosticReport 组件根据工作数据自动填充
改动文件:
- src/API/report/index.ts (新增)
- src/API/report/ReportActions.ts (新增)
- src/API/report/ReportTemplateActions.ts (新增)
- src/API/patient/DiagnosisReportActions.ts (修改)
- src/pages/patient/DiagnosticReport/components/ImageList.tsx (修改)
- src/pages/patient/DiagnosticReport/components/ImageSelection.tsx (修改)
- src/pages/patient/DiagnosticReport/index.tsx (修改)
- src/pages/patient/components/ActionPanel.tsx (修改)
- src/states/patient/DiagnosticReport/previewReportThunk.ts (修改)
- src/states/patient/DiagnosticReport/saveReportThunk.ts (修改)
- src/states/patient/DiagnosticReport/slice.ts (修改)
- CHANGELOG.md
- package.json (版本更新: 1.22.1 -> 1.23.0)
[1.22.1] - 2025-12-23 13:33
变更 (Changed)
- MQTT服务连接稳定性和事件管理增强 - 系统性优化两个MQTT服务的连接管理和事件处理机制
- 增强MQTT连接配置,添加keepalive(120秒)和reconnectPeriod(5秒)参数
- 为每个客户端生成唯一ID,避免连接冲突
- 添加连接状态管理(isConnecting标志),防止重复连接调用
- 实现旧连接清理机制,调用removeAllListeners()防止内存泄漏
- 完善连接生命周期事件监听:reconnect、close、offline、disconnect
- 增强日志记录系统,添加ISO时间戳和状态emoji图标(✅🔄🚪📡⚠️❌)
- 改进错误处理,将错误事件发送到应用层(MQTT_ERROR、DEVICE_MQTT_ERROR)
- 实现优雅的连接关闭逻辑,支持错误处理和资源释放
- 为两个MQTT服务(mqttService和mqttServiceForDevice)同步实施相同优化
核心改进:
- 连接稳定性:通过心跳和自动重连机制减少连接中断
- 内存管理:清理旧连接和事件监听器,避免内存泄漏
- 状态可见性:完整的事件监听和日志记录,便于监控和调试
- 错误恢复:优雅的错误处理和重连机制,提升系统健壮性
- 资源管理:正确的连接关闭流程,确保资源释放
技术实现:
- 连接配置优化:
- 添加 keepalive: 120 和 reconnectPeriod: 5000
- 使用随机生成的唯一 clientId
- 状态管理:
- 添加 isConnecting 标志防止重复调用
- mqttClient 类型改为 any 并初始化为 null
- 连接生命周期:
- startListening 前清理旧连接
- connect 事件接收 connack 参数并发送成功事件
- 添加 reconnect、close、offline、disconnect 事件监听
- 日志增强:
- 使用 ISO 时间戳函数
() => new Date().toISOString()
- 添加 emoji 图标标识不同状态
- 错误日志只记录第一行堆栈信息
- 错误处理:
- 发送 MQTT_CONNECTED/DEVICE_MQTT_CONNECTED 事件
- 发送 MQTT_ERROR/DEVICE_MQTT_ERROR 事件到应用层
- error 事件重置 isConnecting 标志
- 优雅关闭:
- 检查 mqttClient 是否存在
- 调用 removeAllListeners() 清理监听器
- 使用 end(false, callback) 优雅关闭
- catch 块中强制关闭 end(true)
改动文件:
- src/domain/mqttService.ts
- src/domain/mqttServiceForDevice.ts
- CHANGELOG.md
- package.json (版本更新: 1.22.0 -> 1.22.1)
[1.22.0] - 2025-12-22 19:27
新增 (Added)
- 软件包在线升级功能基础实现 - 实现应用启动时检查软件版本更新并显示提示框的功能
- 创建版本更新服务(VersionUpdateService),负责检查新版本可用性
- 实现版本更新状态管理(Redux slice),管理更新状态和版本信息
- 添加版本更新API接口,封装后端版本检查请求
- 创建版本更新提示模态框(VersionUpdateModal),显示新版本可用信息
- 创建下载进度模态框(DownloadProgressModal),预留下载进度显示功能
- 在应用初始化时集成版本检查逻辑,用户登录后自动触发
- 在主页面集成版本更新模态框显示控制逻辑
- 添加版本更新相关的Cypress测试用例和Mock数据
- 更新Redux store配置,集成版本更新状态管理
- 添加MQTT工具类和版本工具类,为后续功能扩展做准备
- 更新全局类型定义,添加版本更新相关类型
核心功能实现:
- 版本检查:应用启动后自动检查是否有新版本可用
- 提示显示:检测到新版本时显示更新提示模态框
- 用户交互:用户可以选择稍后提醒或关闭提示框
- 状态管理:通过Redux统一管理版本更新状态
- 错误处理:版本检查失败不影响应用正常启动
- 预留扩展:为下载、安装等后续功能预留接口和组件
技术实现:
- 服务层:VersionUpdateService 单例服务管理版本检查业务逻辑
- 状态管理:versionUpdateSlice 处理状态变更和副作用
- API层:versionUpdate.ts 封装HTTP请求接口
- 组件层:VersionUpdateModal 和 DownloadProgressModal 提供用户界面
- 测试层:Cypress E2E测试和Mock服务确保功能稳定性
- 工具层:mqttUtils.ts 和 versionUtils.ts 为后续功能提供支持
改动文件:
- cypress/e2e/versionUpdate.cy.ts (新增)
- cypress/support/mock/handlers/versionUpdate.ts (新增)
- docs/实现/软件包在线升级功能设计与实现方案.md (新增)
- src/API/versionUpdate.ts (新增)
- src/components/DownloadProgressModal.tsx (新增)
- src/components/VersionUpdateModal.tsx (新增)
- src/services/VersionUpdateService.ts (新增)
- src/states/versionUpdateSlice.ts (新增)
- src/types/global.d.ts (修改)
- src/utils/mqttUtils.ts (新增)
- src/utils/versionUtils.ts (新增)
- cypress/support/mock/index.ts (修改)
- package-lock.json (修改)
- src/app.tsx (修改)
- src/pages/index/AppInitializer.tsx (修改)
- src/pages/index/index.tsx (修改)
- src/states/store.ts (修改)
- CHANGELOG.md
- package.json (版本更新: 1.21.0 -> 1.22.0)
[1.21.0] - 2025-12-22 17:24
新增 (Added)
- 国际化改进 - 添加宠物类型键并完善组件多语言支持 - 实现完整的宠物产品和诊断报告界面的国际化支持
- 在 RegisterAvailableFilterBar.tsx 中添加基于产品的患者类型选择器国际化,区分人类和宠物产品
- 在 AnimalBaseInfo.tsx 中添加完整多语言支持,包括患者姓名、性别、年龄、主人类别和报告相关字段
- 在 i18n 文件中添加宠物类型和报告字段的多语言键,包括申请科室、检查号、检查方法、放射科医生、审核医师等
- 支持 VETDROS(宠物产品)和 DROS(人类产品)的动态文本切换
核心功能实现:
- 产品区分支持:根据 productName 动态选择不同的国际化键
- 诊断报告国际化:AnimalBaseInfo 组件所有标签支持多语言
- 宠物类型键:新增 "animal.register.patientType" 支持宠物产品
- 报告字段键:新增 "report." 前缀的诊断报告相关多语言键
技术实现:
- 在 RegisterAvailableFilterBar 组件中添加 productName 选择器
- 使用条件表达式根据产品名称选择患者类型标签
- 在 AnimalBaseInfo 组件中为所有表单项添加 FormattedMessage
- 新增多语言键到 zh.js 和 en.js 文件
- 保持与现有 register.form.tsx 组件的一致性设计模式
改动文件:
- src/pages/patient/components/RegisterAvailableFilterBar.tsx
- src/pages/patient/DiagnosticReport/components/AnimalBaseInfo.tsx
- src/assets/i18n/messages/zh.js
- src/assets/i18n/messages/en.js
- scripts/output/i18n/zh.js
- scripts/output/i18n/en.js
- CHANGELOG.md
- package.json (版本更新: 1.20.2 -> 1.21.0)
[1.20.2] - 2025-12-22 16:36
新增 (Added)
- 编辑任务模态框和操作面板宠物专用国际化支持 - 为编辑任务界面添加产品类型区分的国际化支持
- 在 EditTaskModal.tsx 中根据 productName 动态切换标题、患者信息标题和字段标签
- 在 ActionPanel.tsx 中为编辑按钮工具提示添加产品区分支持
- 在 zh.js 和 en.js 中添加动物相关的多语言 key
- 支持 VETDROS(动物产品)和普通产品显示不同的界面文本
核心功能实现:
- 模态框标题区分:动物产品显示"编辑动物",普通产品显示"编辑患者"
- 患者信息标题区分:动物产品显示"动物信息",普通产品显示"患者信息"
- 字段标签区分:动物姓名/宠物昵称,动物ID/宠物编号等
- 操作面板工具提示:编辑按钮根据产品类型显示相应提示
技术实现:
- 在 EditTaskModal 组件中添加 productName 选择器
- 使用条件表达式根据产品名称选择不同的翻译 key
- 新增动物相关多语言键值对到国际化文件
- 保持与现有 SearchPanel 组件的一致性设计模式
改动文件:
- src/pages/patient/components/EditTaskModal.tsx
- src/pages/patient/components/ActionPanel.tsx
- src/assets/i18n/messages/zh.js
- src/assets/i18n/messages/en.js
- CHANGELOG.md
- package.json (版本更新: 1.20.1 -> 1.20.2)
[1.20.1] - 2025-12-22 15:36
新增 (Added)
- 搜索面板宠物专用国际化支持 - 添加搜索框占位符文本的宠物专用版本
- 在 SearchPanel.tsx 中根据 productName 动态切换搜索框占位符文本
- 在 zh.js 和 en.js 中添加宠物专用搜索面板国际化 key
改动文件:
- src/pages/patient/components/SearchPanel.tsx
- src/assets/i18n/messages/zh.js
- src/assets/i18n/messages/en.js
- CHANGELOG.md
- package.json (版本更新: 1.20.0 -> 1.20.1)
[1.20.0] - 2025-12-22 15:24
新增 (Added)
- 调整注册表单patient_name字段位置 - 将patient_name字段从gender字段之后移动到species字段之后,提升表单字段逻辑顺序
- 修改 BasicInfoForm 组件中字段排列顺序
- 确保patient_name字段紧跟在species字段之后,更符合用户填写逻辑
改动文件:
- src/pages/patient/components/register.form.tsx
- CHANGELOG.md
- package.json (版本更新: 1.19.0 -> 1.20.0)
[1.19.0] - 2025-12-22 14:46
新增 (Added)
- 系统设置中添加"关于系统"模块 - 实现系统版本信息展示功能
- 创建 AboutSystem 组件,展示系统名称、版本号和项目标识
- 使用 Ant Design Descriptions 和 Card 组件实现信息展示
- 直接从 package.json 读取版本号,确保版本信息自动同步
- 在系统设置的"系统之家"分类中添加"关于系统"二级模块
- 模块位于"软件许可"之后,方便用户快速查看系统版本信息
核心功能实现:
- 版本信息展示:显示系统名称(医学成像系统)、当前版本(1.19.0)和项目标识(zsis)
- 自动同步:版本号直接从 package.json 读取,无需手动维护
- 界面设计:与现有 SiteInfo 组件保持一致的布局风格
- 配置管理:在系统设置配置中添加 about_system 配置项
技术实现:
- 创建 AboutSystem.tsx 组件
- 使用
import packageJson from '../../../../../package.json' 导入版本信息
- 添加 @ts-ignore 注释处理 TypeScript 类型检查
- 使用 Descriptions 组件展示系统信息
- 使用 Card 组件包裹,保持视觉一致性
- 更新 SystemHome/index.tsx
- 导出 AboutSystem 组件
- 添加"关于系统 - 已实现"注释
- 更新 config.tsx
- 在 software_license 后添加 about_system 配置项
- 配置 id、title 和 component 属性
改动文件:
- src/pages/system/SettingsModal/sections/SystemHome/AboutSystem.tsx (新增)
- src/pages/system/SettingsModal/sections/SystemHome/index.tsx
- src/pages/system/SettingsModal/config.tsx
- CHANGELOG.md
- package.json (版本更新: 1.18.2 -> 1.19.0)
[1.18.2] - 2025-12-22 14:07
修复 (Fixed)
- 从历史清单进入检查后体位列表未更新问题 (src/domain/patient/worklistToExam.ts)
- 修复从 Worklist/History 双击进入检查界面时,体位列表不更新为最新选中 work 的问题
- 将体位列表转换和设置(
transformWorksToBodyPositions 和 setBodyPositions)提前到判断曝光状态之前执行
- 确保无论进入检查界面还是处理界面,体位列表都能被正确更新
- 添加 await 关键字优化异步 dispatch 调用(
clearWorks 和 addWork)
- 添加调试日志便于问题排查
核心改进:
- 数据同步优化:体位列表现在在进入任何界面前都会正确更新
- 异步流程优化:使用 await 确保状态更新的顺序性
- 问题排查增强:添加关键步骤的调试日志
- 代码格式规范:修正
judged_status 字段的空格格式
技术实现:
- 修改
worklistToExam 函数中的执行顺序
- 将体位列表更新逻辑从
if (allExposed) 分支移到分支判断之前
- 添加
await 关键字到 clearWorks() 和 addWork() dispatch 调用
- 添加
console.log 调试输出跟踪执行流程
- 格式修正:
judged_status:image.judged_status → judged_status: image.judged_status
改动文件:
- src/domain/patient/worklistToExam.ts
- docs/从任务清单进入检查的流程.md (新增)
- CHANGELOG.md
- package.json (版本更新: 1.18.1 -> 1.18.2)
[1.18.1] - 2025-12-22 13:00
修复 (Fixed)
- Original Size 功能在不同体位间表现不一致问题 (src/pages/view/components/viewers/stack.image.viewer.tsx)
- 重写 setOriginalSize 函数,完全忽略 DICOM spacing,实现真正的像素级 1:1 显示
- 修复因不同体位 spacing 不同导致的缩放结果差异
- 第一个体位 spacing=1 时:zoomFactor=0.278,图像正确放大 ✅
- 第二个体位 spacing=0.14 时:zoomFactor=1.987,图像意外缩小 ❌
- 改为只基于像素尺寸计算:fitScale = min(canvas宽/图像宽, canvas高/图像高),finalZoom = 1 / fitScale
- 添加详细的调试日志输出,包括图像尺寸、canvas 尺寸、fitScale 和 finalZoom
- 确保所有体位都能得到一致的像素级 1:1 显示效果
核心改进:
- 缩放算法优化:移除对 spacing 的依赖,简化计算逻辑
- 一致性保证:不同 spacing 的体位现在都能正确放大到原始尺寸
- 调试增强:详细的日志输出便于问题排查
改动文件:
- src/pages/view/components/viewers/stack.image.viewer.tsx
- CHANGELOG.md
- package.json (版本更新: 1.18.0 -> 1.18.1)
[1.18.0] - 2025-12-22 11:27
新增 (Added)
- 图标主题化和高分辨率升级 - 实现完整的图标系统主题化和资源优化
- 在 ActionPanel 和 FunctionArea 中统一图标主题支持
- 添加动态主题色和尺寸控制,使用 Ant Design useToken
- 创建 SVG 处理脚本,自动替换 fill/stroke 为 currentColor
- 删除低分辨率 1x PNG/SVG 图标资源,减少项目体积
- 新增高分辨率 2x 图标目录,提升视觉质量
核心功能实现:
- 图标主题化: 所有图标支持动态主题色,自动适配深色/浅色主题
- 样式统一: 使用 fontSize 和 Tailwind CSS 实现灵活的图标尺寸控制
- SVG 处理: 自动化脚本批量处理 SVG 文件,替换硬编码颜色为 currentColor
- 资源优化: 清理旧的 1x 图标,升级到 2x 高分辨率图标
- 代码重构: 简化图标使用方式,移除硬编码的主题和状态属性
技术实现:
- 在 ActionPanel.tsx 中:
- 导入 antd theme 和 useToken hook
- 将图标 theme 属性从 "default" 改为 {themeType}
- 添加 style={{fontSize: '48px'}} 控制图标大小
- 添加 className={
text-[${useToken().token.colorPrimary}]} 动态主题色
- 在 FunctionArea.tsx 中:
- 导入 antd theme 和 useToken hook
- 重构 getIconStyle 函数,添加 fontSize 基础样式
- 将激活状态颜色从硬编码改为动态 colorPrimary
- 修改图标 theme 属性为 "default"
- 添加动态 className 支持主题色
- 优化按钮边框和背景色,使用主题色
- 创建 scripts/replace-svg-fill.js:
- 递归扫描 SVG 文件
- 自动替换 fill="#000000" 为 fill="currentColor"
- 自动替换 stroke="#000000" 为 stroke="currentColor"
- 统计处理结果和修改文件数量
- 图标资源升级:
- 删除 src/assets/Icons/base/module-process/theme-default/1x/ 目录下的所有图标
- 删除 src/assets/Icons/base/module-patient/theme-dark/1x/report.svg
- 新增 src/assets/Icons/base/module-process/theme-default/2x/ 目录
- 新增 src/assets/Icons/base/module-patient/theme-default/2x/ 目录
改动文件:
- scripts/replace-svg-fill.js (新增)
- src/assets/Icons/base/module-patient/theme-default/2x/ (新增目录)
- src/assets/Icons/base/module-process/theme-default/2x/ (新增目录)
- src/pages/patient/components/ActionPanel.tsx
- src/pages/view/components/FunctionArea.tsx
- src/assets/Icons/base/module-process/theme-default/1x/ (删除大量图标)
- src/assets/Icons/base/module-patient/theme-dark/1x/report.svg (删除)
- CHANGELOG.md
- package.json (版本更新: 1.17.1 -> 1.18.0)
[1.17.1] - 2025-12-20 16:25
修复 (Fixed)
核心改进:
- 用户体验优化:日期选择器现在自动禁用未来日期,避免用户输入错误
- 数据验证增强:通过 UI 层面限制,配合表单验证确保数据正确性
- 代码简洁:利用 Ant Design DatePicker 的 disabledDate 属性实现,无需额外验证逻辑
改动文件:
- src/pages/patient/components/register.form.tsx
- CHANGELOG.md
- package.json (版本更新: 1.17.0 -> 1.17.1)
[1.17.0] - 2025-12-20 16:00
新增 (Added)
- 有状态按钮工具状态自动同步功能 - 实现cornerstone工具激活状态与按钮状态的自动同步
- 新增
ToolStateListener 类,监听cornerstone工具状态变化事件
- 实现Redux状态管理,维护激活工具的状态映射
- 修改按钮状态判断逻辑,有状态按钮基于工具激活状态显示激活效果
- 在应用初始化时自动启动工具状态监听器
- 支持"Adjust Brightness and Contrast"和"Magnifier"按钮的状态自动同步
核心功能实现:
- 工具状态监听:监听
TOOL_MODE_CHANGED事件,自动更新Redux状态
- 按钮状态同步:有状态按钮的激活状态自动反映cornerstone工具的实际状态
- 单例模式:确保只有一个工具状态监听器实例,避免重复监听
- 错误处理:完善的异常处理和日志记录,确保系统稳定性
技术实现:
- 创建
src/utils/toolStateListener.ts工具状态监听器
- 扩展
functionAreaSlice.ts添加工具激活状态管理
- 修改
FunctionArea.tsx按钮状态基于工具激活状态判断
- 在
app.tsx应用初始化时启动监听器
改动文件:
- src/utils/toolStateListener.ts (新增)
- src/states/view/functionAreaSlice.ts
- src/pages/view/components/FunctionArea.tsx
- src/app.tsx
- CHANGELOG.md
- package.json (版本更新: 1.16.0 -> 1.17.0)
[1.16.0] - 2025-12-20 14:06
新增 (Added)
- 添加掩码功能 - 实现完整的医学图像多边形遮罩系统
- 新增 MaskTool 核心工具类,支持多边形绘制和遮罩效果应用
- 集成测量工具管理系统,支持多视口遮罩独立管理
- 实现 Redux 状态管理,统一 Add Mask 和 Delete Mask 操作
- 支持工具注册和全局激活,确保跨环境兼容性
核心功能实现:
- 多边形绘制:用户可以在图像上绘制多边形区域作为遮罩
- 遮罩效果:多边形内部区域保持可见,外部区域变黑
- 工具管理:支持激活、停用和清除遮罩工具
- 交互优化:在 FunctionArea 和 RectCropPanel 中提供遮罩按钮
技术实现:
- 新增 MaskTool.ts 工具类,继承 AnnotationTool
- 扩展 MeasurementToolManager,支持遮罩工具生命周期管理
- 更新 ViewerContainer,添加 Add Mask 和 Delete Mask 动作处理
- 集成 stack.image.viewer.tsx,注册并导出遮罩相关函数
- 更新 cornerstoneToolsSetup.ts,全局注册 MaskTool
改动文件:
- docs/实现/添加掩码功能实现方案.md
- src/components/tools/MaskTool.ts
- src/pages/view/components/FunctionArea.tsx
- src/pages/view/components/ViewerContainer.tsx
- src/pages/view/components/viewers/stack.image.viewer.tsx
- src/utils/cornerstoneToolsSetup.ts
- src/utils/measurementToolManager.ts
- CHANGELOG.md
- package.json (版本更新: 1.15.1 -> 1.16.0)
[1.15.1] - 2025-12-20 11:22
修复 (Fixed)
核心改进:
- 预定义标记处理优化:支持未选中viewport时自动添加到所有可见图像
- 自定义标记处理优化:从下拉列表选择的标记现在能正确添加到图像
- 时间戳处理优化:时间戳标记支持自动添加到所有可见图像
- 交互一致性:与其他功能(如测量工具)保持相同的交互模式
技术实现:
- 添加 selectedViewportIds.length 检查条件
- 未选中时使用 getVisibleViewportCount() 获取可见viewport数量
- 遍历所有可见viewport并调用 addCustomMark() 函数
- 使用 getViewportIdByUrl() 正确转换imageUrl到viewportId
改动文件:
- src/pages/view/components/ViewerContainer.tsx
- CHANGELOG.md
- package.json (版本更新: 1.15.0 -> 1.15.1)
[1.15.0] - 2025-12-19 18:50
新增 (Added)
- 二维码扫码录入病人信息功能 - 实现完整的跨平台二维码扫描录入系统
- 支持浏览器、Electron、Cordova Android三平台二维码扫描
- 浏览器/Electron平台使用html5-qrcode库实时扫描
- Cordova平台使用拍照+jsQR识别方案
- 支持解析制表符分隔的文本格式(姓名、年龄、身份证号)
- 自动填充注册表单并支持体位自动注册
- 完善的数据验证、错误处理和跨平台兼容性
- 集成完整的Redux状态管理和用户交互流程
核心功能实现:
- 跨平台兼容:智能检测运行平台,自动选择最佳扫描方案
- 文本格式解析:支持"贾桂霞 32 岁 122410551217111712"格式的病人信息
- 自动表单填充:扫描成功后自动填充姓名、年龄、身份证等字段
- 体位自动注册:如果二维码包含体位信息,自动创建检查并进入检查页面
- 用户体验优化:扫描结果确认、错误处理、状态反馈
技术实现:
- 新增
src/components/QRCodeScanner/ 组件模块
- 新增
src/domain/qrcode/ 业务逻辑层
- 新增
src/states/patient/register/qrCodeScanSlice.ts 状态管理
- 新增
src/types/qrcode.ts 类型定义
- 新增
docs/实现/二维码扫码录入功能.md 详细设计文档
- 集成
html5-qrcode 和 jsqr 库支持
- 更新 Cordova 配置支持摄像头插件
改动文件:
新增文件:
src/components/QRCodeScanner/QRCodeScanButton.tsx
src/components/QRCodeScanner/QRCodeScanModal.tsx
src/components/QRCodeScanner/index.ts
src/domain/qrcode/qrCodeDataProcessor.ts
src/domain/qrcode/qrCodeValidator.ts
src/domain/qrcode/autoRegisterHandler.ts
src/states/patient/register/qrCodeScanSlice.ts
src/types/qrcode.ts
docs/实现/二维码扫码录入功能.md
修改文件:
src/pages/patient/register.tsx - 添加扫码按钮
src/states/store.ts - 注册 qrCodeScanSlice
package.json - 添加 html5-qrcode 和 jsQR 依赖
.build/config.xml - 移除有问题的二维码插件
CHANGELOG.md - 新增变更记录
[1.14.3] - 2025-12-19 18:17
修复 (Fixed)
核心改进:
- 异步初始化:确保Cordova插件在deviceready后初始化
- 错误处理:添加超时机制和错误日志
- 性能优化:避免插件未准备好时的操作失败
改动文件:
- src/features/serverConfig/storage/CordovaStorageAdapter.ts
- CHANGELOG.md
- package.json (版本更新: 1.14.2 -> 1.14.3)
[1.14.2] - 2025-12-19 18:05
新增 (Added)
核心改进:
- 用户体验增强:按钮现在提供清晰的视觉反馈,悬停时显示边框和背景变化
- 状态管理优化:集成 Redux 状态管理,支持按钮激活状态检测
- 样式系统完善:根据按钮状态动态调整图标和按钮样式
- 交互友好性:悬停状态提供即时反馈,提升操作流畅度
改动文件:
- src/pages/view/components/FunctionArea.tsx
- CHANGELOG.md
- package.json (版本更新: 1.14.1 -> 1.14.2)
[1.14.1] - 2025-12-18 17:30
修复 (Fixed)
核心改进:
- 界面优化:移除调试边框,提升组件的视觉呈现效果
- 代码清理:删除不必要的调试样式,保持代码整洁
改动文件:
- src/components/HumanBody.tsx
- CHANGELOG.md
- package.json (版本更新: 1.14.0 -> 1.14.1)
[1.14.0] - 2025-12-18 15:00
新增 (Added)
核心改进:
- 用户体验优化:追加成功后自动关闭弹框,操作流程更流畅
- 组件交互增强:支持成功回调处理,提升组件复用性
改动文件:
- src/pages/exam/components/BodyPositionList.tsx
- CHANGELOG.md
- package.json (版本更新: 1.13.1 -> 1.14.0)
[1.13.1] - 2025-12-18 14:35
修复 (Fixed)
核心改进:
- 数据验证增强:确保操作者ID字段必填,提升数据完整性
- 用户体验优化:明确必填字段要求,减少表单提交错误
改动文件:
- src/validation/patient/registerSchema.ts
- CHANGELOG.md
- package.json (版本更新: 1.13.0 -> 1.13.1)
[1.13.0] - 2025-12-18 14:18
新增 (Added)
核心改进:
- 用户体验提升:追加按钮现在有清晰的提示信息
- 国际化支持:支持中文"添加更多体位"和英文"Add More Positions"
- 代码架构优化:使用标准的 React Intl 多语言方案
- 视觉反馈增强:悬停时显示提示,提升交互友好性
技术实现:
- 新增多语言键值对到 zh.js 和 en.js
- 在 BodyPositionList 组件中导入 Tooltip 和 useIntl
- 使用 Tooltip 包裹追加按钮区域
- 动态获取当前语言对应的提示文本
改动文件:
- src/assets/i18n/messages/zh.js - 添加中文翻译
- src/assets/i18n/messages/en.js - 添加英文翻译
- src/pages/view/components/MarkPanel.tsx - 实施 Tooltip 功能
- CHANGELOG.md
- package.json (版本更新: 1.12.5 -> 1.13.0)
格式基于 Keep a Changelog,
版本号遵循 语义化版本。
版本号说明
本项目遵循语义化版本 2.0.0规范:
- 主版本号 (Major):当你做了不兼容的 API 修改
- 次版本号 (Minor):当你做了向下兼容的功能性新增
- 修订号 (Patch):当你做了向下兼容的问题修正
变更类型说明
- 新增 (Added): 添加的新功能
- 变更 (Changed): 对现有功能的变更
- 弃用 (Deprecated): 即将移除的功能
- 移除 (Removed): 已移除的功能
- 修复 (Fixed): 任何 bug 修复
- 安全 (Security): 针对安全漏洞的修复
链接说明