# 变更日志 (Changelog) 本项目的所有重要变更都将记录在此文件中。 ## [1.12.2] - 2025-12-18 09:54 ### 修复 (Fixed) - **体位卡片高度不一致和文本显示问题** ([src/pages/patient/components/register.available.view.list.tsx](src/pages/patient/components/register.available.view.list.tsx)) - 修复图片大小不同导致卡片高度不一致的问题 - 将图片尺寸从响应式(100% / auto)改为固定尺寸(100px / 100px) - 添加文本省略样式(overflow: hidden, textOverflow: ellipsis, whiteSpace: nowrap) - 引入 Ant Design Tooltip 组件,鼠标悬停时显示完整的体位名称 - 确保所有体位卡片保持统一高度,提升界面整齐度 **核心改进:** - 布局优化:固定图片高度确保所有卡片高度一致 - 文本处理:过长文本显示省略号,不换行撑开卡片 - 用户体验:Tooltip 悬停提示显示完整文本内容 - 视觉统一:所有体位卡片整齐排列,界面更加美观 **技术实现:** - 添加 Tooltip 组件到 antd 导入列表 - 修改 Image 组件样式:width: '100px', height: '100px' - 为文本 div 添加省略号样式 - 使用 Tooltip 包裹文本 div,title 属性设为完整文本 **改动文件:** - src/pages/patient/components/register.available.view.list.tsx - package.json (版本更新: 1.12.1 -> 1.12.2) --- ## [1.12.1] - 2025-12-18 09:48 ### 修复 (Fixed) - **患者类型默认值问题** ([src/states/patientTypeSlice.ts](src/states/patientTypeSlice.ts)) - 修复登录后进入注册页面时患者类型默认为 DOG 的问题 - 将 initialState.current 从硬编码的 DOG 对象改为 null - 确保患者类型选择框初始为空,需要用户手动选择 - 避免因默认值导致的误操作 **核心改进:** - 数据规范化:移除硬编码的默认患者类型 - 用户体验:强制用户手动选择患者类型,避免误操作 - 代码简化:简化初始状态配置 **改动文件:** - src/states/patientTypeSlice.ts - package.json (版本更新: 1.12.0 -> 1.12.1) --- ## [1.12.0] - 2025-12-18 09:25 ### 新增 (Added) - **SVG图标组件化并支持主题颜色** ([#svg-icon-componentization](config/index.ts)) - 在 config/index.ts 中配置 @svgr/webpack 支持 SVG 转 React 组件 - 在 package.json 中添加 @svgr/webpack 依赖 - 在 ActionPanel.tsx 中更新图标使用方式,支持主题颜色 - 修改 report.svg 使用 currentColor 以支持动态主题 - 清理未使用的图标文件,优化项目结构 **核心改进:** - Webpack 配置增强:添加 @svgr/webpack loader,将 SVG 转换为 React 组件 - 图标主题支持:使用 currentColor 实现动态主题颜色适配 - 项目结构优化:删除 120+ 个未使用图标文件,减少项目体积 - 组件化升级:图标使用 fontSize 和 Tailwind CSS 实现灵活样式控制 **技术实现:** - 配置 webpack chain API 排除 SVG 被当作普通图片处理 - 使用 @svgr/webpack 将 Icons 目录下的 SVG 转换为 React 组件 - 在 ActionPanel 中引入 antd theme,使用 useToken 获取主题颜色 - SVG 文件使用 fill="currentColor" 支持动态颜色 - 删除多个模块的未使用图标:common、configuration、device、exam、output、patient、process、security **改动文件:** - config/index.ts - package.json (版本更新: 1.11.6 -> 1.12.0) - package-lock.json - src/pages/patient/components/ActionPanel.tsx - src/assets/Icons/base/module-patient/theme-dark/1x/report.svg - 删除 120+ 个未使用图标文件 --- ## [1.11.6] - 2025-12-17 15:20 ### 新增 (Added) - **检查页面多语言化改造** ([#exam-page-internationalization](src/pages/exam/ContentAreaLarge.tsx)) - 实现检查页面完整多语言化,支持中文和英文界面切换 - 新增检查页面相关的多语言翻译键值对 - 在 ContentAreaLarge 组件中集成 React Intl 国际化方案 - 将所有硬编码中文文本替换为 FormattedMessage 和 useIntl 调用 - 实现体型选择、厚度设置、曝光模式、AEC开关、按钮提示等多项功能的国际化 **核心改进:** - 用户体验国际化:支持多语言界面切换,提升全球化使用体验 - 代码架构优化:使用 React Intl 标准国际化方案,提高代码可维护性 - 功能完整性:覆盖检查页面所有用户可见文本的国际化转换 **技术实现:** - 新增多语言键值对:exam.bodysize.placeholder、exam.thickness.label 等 - 集成 useIntl hook:提供 formatMessage 函数支持动态文本格式化 - FormattedMessage 组件:用于静态文本的国际化显示 - 保持功能一致性:所有交互逻辑和API调用保持不变 **改动文件:** - src/assets/i18n/messages/zh.js - 添加中文翻译 - src/assets/i18n/messages/en.js - 添加英文翻译 - src/pages/exam/ContentAreaLarge.tsx - 实施多语言化改造 - package.json (版本更新: 1.11.5 -> 1.11.6) --- ## [1.11.5] - 2025-12-17 13:30 ### 修复 (Fixed) - **UI布局调整优化** (bug 101) - 在 ImageStateControl.tsx 中为 Flex 组件添加 wrap 和 padding 样式 - 在 TransferArea.tsx 中引入 Flex 组件并调整布局结构 - 优化组件响应式布局和视觉一致性 **核心改进:** - 提升UI组件的布局灵活性:通过 Flex wrap 实现更好的自适应布局 - 统一样式规范:添加一致的 padding 样式,提升视觉统一性 - 代码结构优化:TransferArea 组件从 div 改为 Flex,提高布局控制能力 **技术实现:** - Flex 组件添加 wrap 属性支持内容换行 - 统一添加 className="p-1" 提供标准 padding - TransferArea 布局从 div 改为 Flex,保持一致的布局系统 **改动文件:** - src/pages/view/components/ImageStateControl.tsx - src/pages/view/components/TransferArea.tsx - package.json (版本更新: 1.11.4 -> 1.11.5) --- ## [1.11.4] - 2025-12-17 13:14 ### 修复 (Fixed) - **宠物产品患者管理翻译动态切换功能** (bug 101) - 在 BusinessZone.tsx 中根据产品类型动态选择翻译 key - VETDROS 产品显示"宠物管理",DROS 产品显示"患者管理" - 在中英文翻译文件中添加 animal.patient 翻译 key - 利用 isAnimalProduct 判断条件实现自动切换 **核心改进:** - 产品适配性:自动根据产品类型(DROS/VETDROS)显示对应的翻译文本 - 用户体验:宠物影像工作站显示更贴切的"宠物管理"而非"患者管理" - 代码可维护性:遵循现有的 animal.* 命名约定,保持翻译体系一致性 - 国际化支持:同步更新中英文翻译文件 **技术实现:** - 使用三元表达式动态选择翻译 key:`isAnimalProduct ? "animal.patient" : "patient"` - 在 FormattedMessage 组件中应用动态 id 属性 - 扩展翻译文件:zh.js 添加"宠物管理",en.js 添加"Animal Management" **改动文件:** - src/layouts/BusinessZone.tsx - src/assets/i18n/messages/zh.js - src/assets/i18n/messages/en.js - scripts/output/i18n/zh.js - scripts/output/i18n/en.js - package.json (版本更新: 1.11.3 -> 1.11.4) --- ## [1.11.3] - 2025-12-17 10:54 ### 修复 (Fixed) - **患者注册表单输入限制** (bug 101) - 修复宠物编号、登记号和操作人员ID可以输入汉字的问题 - 在 registerSchema.ts 中为三个字段添加正则验证规则 - 限制输入只能是数字、英文字符、下划线和连字符 - accession_number(登记号): 使用正则 `/^[a-zA-Z0-9_-]+$/`,必须至少包含一个有效字符 - patient_id(宠物编号): 使用正则 `/^[a-zA-Z0-9_-]+$/`,必须至少包含一个有效字符 - operator_id(操作人员ID): 使用正则 `/^[a-zA-Z0-9_-]*$/`,可以为空或包含零个或多个有效字符 - 验证失败时显示中文错误提示:"只能输入数字、英文字符、下划线和连字符" **核心改进:** - 数据规范化:确保关键标识字段符合系统要求的格式 - 用户体验:清晰的错误提示,帮助用户了解输入规则 - 数据一致性:防止因输入特殊字符导致的数据问题 - 类型安全:利用 Zod 验证规则确保数据格式正确 **技术实现:** - 使用 Zod 的 `.regex()` 方法添加正则验证 - 通过 `zodToAntdRules` 函数自动转换为 Ant Design Form 的 pattern 规则 - 必填字段使用 `+` 量词(至少一个字符) - 可选字段使用 `*` 量词(零个或多个字符) **改动文件:** - src/validation/patient/registerSchema.ts - package.json (版本更新: 1.11.2 -> 1.11.3) --- ## [1.11.2] - 2025-12-17 10:32 ### 修复 (Fixed) - **DatePicker 中英文混合显示问题** ([#datepicker-locale-fix](src/utils/localeHelper.ts)) - 修复 Ant Design DatePicker 组件面板中出现中英文混合的问题 - 新增 `localeHelper.ts` 统一管理 Ant Design 和 dayjs 的 locale 配置 - 在 `app.tsx` 中配置 ConfigProvider 的 locale 属性 - 添加 useEffect 监听语言切换并同步更新 dayjs locale - 确保 DatePicker 及所有日期相关组件完全显示为一致的语言 **核心改进:** - 统一 locale 管理:创建独立的 locale 工具文件,集中管理所有语言配置 - 双端同步:同时配置 Ant Design locale 和 dayjs locale,确保完全一致性 - 自动切换:语言切换时自动同步更新两个系统的 locale - 易于扩展:预留了多语言支持的扩展接口(日语、韩语、法语等) **技术实现:** - 创建 `LOCALE_MAP` 和 `DAYJS_LOCALE_MAP` 映射配置对象 - 导出 `getAntdLocale` 函数获取 Ant Design locale 配置 - 导出 `setDayjsLocale` 函数设置 dayjs 全局 locale - 在 ConfigProvider 中使用 `locale={antdLocale}` 属性 - 使用 useEffect 监听 currentLocale 变化并调用 setDayjsLocale **改动文件:** - src/utils/localeHelper.ts (新增) - src/app.tsx --- ## [1.11.1] - 2025-12-16 19:16 ### 修复 (Fixed) - **工作列表布局优化** (bug 101 部分修复) - 优化工作列表表格和缩略图区域的布局和滚动行为 - 在 WorklistTable 组件中添加可选的 className prop,支持外部样式定制 - 替换硬编码样式为动态样式传递,提升组件复用性 **核心改进:** - 提升布局灵活性:通过 className prop 支持外部样式定制 - 优化滚动行为:改进表格和缩略图区域的滚动体验 - 增强组件复用:WorklistTable 组件支持更多样式配置 **技术实现:** - 添加 className?: string prop 到 WorklistTableProps 接口 - 将 Table 组件的 className 从 "px-4" 改为动态 {className} - 调整页面布局结构,优化高度和滚动容器配置 **改动文件:** - src/pages/patient/components/WorklistTable.tsx - src/pages/patient/worklist.tsx --- ## [1.11.0] - 2025-12-16 18:26 ### 新增 (Added) - **注释跨环境渲染问题Bug修复文档** ([docs/bug/bug-annotation-cross-environment-rendering-fix.md](docs/bug/bug-annotation-cross-environment-rendering-fix.md)) - 新增完整的bug分析文档,详细描述注释跨环境渲染问题的前因后果 - 包含问题现象、根本原因分析、解决方案和验证方案 - 记录技术实现细节、容错处理和日志输出 - 提供测试场景和核心改进总结 **核心改进:** - 文档化bug修复过程,便于团队成员理解和维护 - 建立bug修复的标准化文档格式 - 为类似问题提供参考解决方案 - 提升代码的可维护性和可追溯性 **技术实现:** - 结构化文档格式:Bug描述 → 根本原因 → 解决方案 → 验证方案 - 完整的代码示例和技术细节说明 - 详细的版本信息和提交记录 - 标准化的文档编号和标识 **改动文件:** - docs/bug/bug-annotation-cross-environment-rendering-fix.md --- ## [1.11.0] - 2025-12-16 18:10 ### 新增 (Added) - **高级处理双端保存方案文档** ([docs/实现/高级处理双端保存方案.md](docs/实现/高级处理双端保存方案.md)) - 新增高级处理双端保存机制的详细设计文档 - 明确双端保存的触发时机和实现策略 - 优化前端预览和后端持久化的交互流程 ### 变更 (Changed) - **滑动参数调节面板双端保存机制优化** ([src/pages/view/components/SliderAdjustmentPanel.tsx](src/pages/view/components/SliderAdjustmentPanel.tsx)) - 移除风格切换和重置参数时的自动保存逻辑 - 改为仅更新前端预览,不触发后端保存 - 保持手动保存按钮的立即保存功能 - 提升用户体验,减少不必要的API调用 **核心改进:** - 优化参数调节交互:滑动参数时仅预览,不自动保存 - 明确保存时机:仅在用户点击"保存参数"按钮时调用rebuildDcm - 提升性能:减少防抖期间的API调用,提升响应速度 - 用户控制:给予用户完全的保存控制权 **技术实现:** - 修改handleStyleChange:移除setTimeout保存逻辑 - 修改handleReset:移除setTimeout保存逻辑 - 保持handleSave:保留立即保存功能 - 更新注释:明确说明仅前端预览的行为 **改动文件:** - src/pages/view/components/SliderAdjustmentPanel.tsx - docs/实现/高级处理双端保存方案.md 格式基于 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.0.0/), 版本号遵循 [语义化版本](https://semver.org/lang/zh-CN/)。 ## [1.10.2] - 2025-12-16 16:55 ### 新增 (Added) - **图像处理参数扩展支持对比度和亮度系数** ([src/API/imageActions.ts](src/API/imageActions.ts), [src/pages/view/components/SliderAdjustmentPanel.tsx](src/pages/view/components/SliderAdjustmentPanel.tsx)) - 在图像处理API中新增对比度系数(ww_coef)和亮度系数(wl_coef)参数支持 - 修改saveWindowCenterWidth函数为getImageProcessingParams,实现获取当前图像处理参数功能 - 在SliderAdjustmentPanel组件中集成新的参数传递逻辑 - 扩展GetProcessingParamsResponse、SaveProcessingParamsRequest、GetProcessedDcmRequest等接口定义 - 更新buildProcessedDcmUrl和getProcessedDcm函数支持新的参数处理 **核心改进:** - 扩展图像处理参数:新增对比度系数和亮度系数支持,丰富图像调节选项 - API功能增强:saveWindowCenterWidth函数重构为getImageProcessingParams,提供更完整的数据获取能力 - 类型安全:完善TypeScript接口定义,确保参数传递的类型正确性 - 前后端一致性:SliderAdjustmentPanel组件同步更新参数处理逻辑 **技术实现:** - 扩展接口定义:GetProcessingParamsResponse、SaveProcessingParamsRequest、GetProcessedDcmRequest - 函数重构:saveWindowCenterWidth → getImageProcessingParams,功能从保存改为获取 - 参数映射:brightness → ww_coef, sharpness → wl_coef - URL构建:buildProcessedDcmUrl函数集成新参数处理 **改动文件:** - src/API/imageActions.ts - src/pages/view/components/SliderAdjustmentPanel.tsx ### 变更 (Changed) - **API文档重构和设置功能增强** ([docs/DR.md](docs/DR.md)) - 重构API文档结构,重新编号所有API端点确保逻辑顺序 - 新增设置相关API:修改密码、获取新版本信息、下载安装包、安装指定版本软件包 - 优化API接口文档格式和描述信息,提升可读性和维护性 **核心改进:** - 文档结构优化:API端点重新编号,确保逻辑连贯性和易读性 - 设置功能扩展:新增密码管理、版本控制、软件包管理等系统设置API - 文档质量提升:统一格式标准,完善接口描述和示例 **技术实现:** - API端点重排序:调整原有API编号,确保功能分组合理 - 新增设置API:密码修改、版本信息获取、软件包下载安装 - 文档格式统一:标准化请求/响应格式和参数说明 **改动文件:** - docs/DR.md --- ## [1.10.2] - 2025-12-16 15:01 ### 修复 (Fixed) - **注释跨环境渲染问题** ([src/features/imageAnnotation/services/AnnotationManager.ts](src/features/imageAnnotation/services/AnnotationManager.ts)) - 新增 `updateAnnotationUrls` 方法,自动更新注释对象中的服务器地址 - 修复浏览器端保存的注释数据在桌面端(Electron)无法渲染的问题 - 在渲染注释时自动替换 referencedImageId 和 referencedImageURI 中的服务器地址 - 使用正则表达式匹配并替换 URL 中的协议+域名/IP+端口部分 - 新增服务器地址获取失败的容错处理和日志记录 **核心改进:** - 跨环境兼容性:注释数据可以在不同服务器环境之间正确渲染 - 自动 URL 更新:无需手动修改注释数据中的服务器地址 - 容错处理:服务器地址获取失败时跳过更新,不影响渲染流程 - 完整日志:记录 URL 更新前后的详细信息,便于调试 **技术实现:** - 使用 `getIpPort()` 获取当前服务器地址 - 正则表达式 `/(https?:\\/\\/[^\\/]+)/` 匹配 URL 中的服务器部分 - 更新 metadata.referencedImageId 和 metadata.referencedImageURI - 在 renderAnnotations 中调用 updateAnnotationUrls 处理每个注释 **改动文件:** - src/features/imageAnnotation/services/AnnotationManager.ts - package.json (版本更新: 1.10.1 -> 1.10.2) --- ## [1.10.1] - 2025-12-16 13:04 ### 修复 (Fixed) - **注释渲染时基于SOP Instance UID的图像匹配问题** ([src/features/imageAnnotation/services/AnnotationManager.ts](src/features/imageAnnotation/services/AnnotationManager.ts)) - 实现基于SOP Instance UID的图像比较逻辑,替代原有的直接字符串比较 - 新增 `hasImageBySopInstanceUid` 方法,通过提取和比较SOP Instance UID来判断图像是否匹配 - 修改 `renderAnnotations` 方法,正确查找包含指定图像的viewport element - 修改 `findElementsByFOR` 方法,使用基于SOP Instance UID的比较逻辑 - 修复 TypeScript 类型检查警告,优化函数调用和条件判断 - 解决加载并渲染注释后不能二次编辑注释的问题 **核心改进:** - 更准确的图像匹配:即使URL路径不同,只要SOP Instance UID相同就能正确匹配 - 更好的兼容性:支持不同格式的DICOM URL(如dicomweb:前缀等) - 容错性增强:完善的错误处理和日志输出 - 代码复用:利用现有的 `extractSopInstanceUid` 工具函数 - 注释编辑能力:确保加载的注释可以被正确选中和编辑 **技术实现:** - 使用可选链调用 `viewport.getImageIds?.()` 获取所有图像ID - 遍历比较每个imageId的SOP Instance UID - 优先级检测:文本框 → 手柄 → 线段 → 整体 - 动态调整渲染参数,确保注释正确显示在对应的viewport **改动文件:** - src/features/imageAnnotation/services/AnnotationManager.ts - package.json (版本更新: 1.10.0 -> 1.10.1) --- ## [1.10.0] - 2025-12-15 20:27 ### 新增 (Added) - **Cordova环境日志保存功能** ([src/log/](src/log/)) - 实现Cordova环境下使用文件系统保存日志,支持本地离线存储 - 新增CordovaLogWriter类,支持2MB文件大小限制和自动轮转机制 - 文件命名格式:`YYYY-MM-DD_XXX.log`,XXX从000开始递增 - 集成到主日志系统中,支持动态环境检测和写入器选择 - 自动等待Cordova deviceready事件,确保文件系统可用性 - 完善的错误处理,避免应用崩溃 **核心功能:** - 文件大小轮转:超过2MB自动创建新文件,避免单文件过大 - 异步写入:不阻塞应用主线程,提升用户体验 - 跨平台兼容:支持Android和iOS的文件系统路径 - 错误容忍:文件操作失败时只记录警告,不抛出异常 **技术实现:** - 使用cordova-plugin-file API进行文件操作 - 单例模式确保只有一个日志写入器实例 - 动态导入避免在非Cordova环境下加载相关代码 **改动文件:** - src/log/logger.js - 添加Cordova环境检测和日志写入逻辑 - src/log/cordova-log-writer.js (新增) - Cordova日志写入器实现 - src/log/cordova-log-writer.js.md (新增) - 详细使用文档 - .build/build-android.js - 自动安装cordova-plugin-file插件 --- ## [1.9.0] - 2025-12-15 18:40 ### 新增 (Added) - **注释删除逻辑优化** ([src/features/imageAnnotation/services/AnnotationManager.ts](src/features/imageAnnotation/services/AnnotationManager.ts)) - 重构 `deleteAnnotation` 方法,实现基于 `FrameOfReferenceUID` 的正确删除逻辑 - 新增 `findElementsByFOR` 方法,支持通过 `referencedImageId` 查找相关 viewport elements - 使用 `annotation.state.getAnnotations()` 获取删除操作后的完整注释状态 - 修复 `annotation` 命名冲突,重命名为 `corAnnotation` 避免与参数冲突 - 实现注释数据的完整性验证和错误处理 **核心改进:** - 基于 FrameOfReference 级别的注释管理,确保多视口场景下的数据一致性 - 正确处理 Cornerstone3D v3.28 的注释状态获取机制 - 提升注释删除操作的可靠性和性能 **改动文件:** - src/features/imageAnnotation/services/AnnotationManager.ts --- ## [1.8.0] - 2025-12-15 17:03 ### 重构 (Refactored) - **构建脚本重构,移除硬编码环境变量** ([.build/h5_for_electron.build.linux.arm.js](.build/h5_for_electron.build.linux.arm.js)) - 移除注释和硬编码的TARO_API_URL、TARO_MQTT_URL常量 - 修改execSync调用,不再传递这些环境变量 - 删除run函数 **改动文件:** - .build/h5_for_electron.build.linux.arm.js --- ## [1.8.0] - 2025-12-15 16:54 ### 重构 (Refactored) - **构建脚本重构,移除硬编码环境变量** ([.build/h5_for_electron.build.win.x64.js](.build/h5_for_electron.build.win.x64.js)) - 移除注释和硬编码的TARO_API_URL、TARO_MQTT_URL常量 - 修改execSync调用,不再传递这些环境变量 - 删除run函数 **改动文件:** - .build/h5_for_electron.build.win.x64.js --- ## [1.8.0] - 2025-12-15 16:47 ### 变更 (Changed) - **Git工作流程文档优化** ([.clinerules/workflows/git-commit-and-push.md](.clinerules/workflows/git-commit-and-push.md)) - 添加自动更新CHANGELOG.md的步骤说明,确保每次提交都记录变更历史 - 调整步骤顺序:先更新CHANGELOG.md(第3步),再更新package.json版本(第4步) - 明确CHANGELOG条目格式要求:标题需包含日期和时间(如 ## [1.8.0] - 2025-12-15 16:14) - 优化步骤编号,确保文档结构更加清晰合理 **核心改进:** - 规范化提交流程,确保变更历史完整记录 - 新增CHANGELOG条目始终放在顶部,便于查看最新变更 - 提高文档可维护性,为自动化工作流提供明确指导 **改动文件:** - .clinerules/workflows/git-commit-and-push.md - CHANGELOG.md --- ## [1.8.0] - 2025-12-15 16:36 ### 变更 (Changed) - **开发环境配置优化** ([config/dev.ts](config/dev.ts)) - 添加 MQTT WebSocket 代理配置,指向 ws://192.168.110.245:8083 - 启用 WebSocket 代理支持,便于开发环境下的 MQTT 通信调试 - 注释掉 HTTPS 服务器配置,简化开发环境启动流程 **技术实现:** - 新增 `/mqtt` 代理路径配置 - 启用 `ws: true` 支持 WebSocket 协议代理 - 保留路径不重写,确保 MQTT 连接正确转发 **改动文件:** - config/dev.ts --- ## [1.8.0] - 2025-12-15 16:14 ### 重构 (Refactored) - **服务器配置统一到单一数据源** ([#server-config-unification](src/features/serverConfig)) - 在 ConfigService 中定义并导出 `DEFAULT_SERVER_CONFIG` 常量作为唯一默认配置源 - 更新 serverConfigSlice 的 prod 预设使用 `DEFAULT_SERVER_CONFIG` - 更新 ServerConfigModal 的表单默认值使用 `DEFAULT_SERVER_CONFIG` - 重构配置接口:将 `apiBaseUrl`/`mqttBrokerUrl` 改为 `ip`/`apiPort`/`mqttPort` 结构 - 重构 API 配置获取逻辑,适配新的配置结构 - 删除 `mqttConfig.ts`,将功能合并到 `config.ts` 中 - 更新所有 MQTT 服务使用新的配置导入方式 - 更新图像查看器使用动态 `getIpPort()` 函数 **核心改进:** - 单一数据源:只在 ConfigService.ts 中定义默认配置 - 完全统一:所有使用默认配置的地方都引用同一个常量 - 自动同步:修改一处,所有地方自动更新 - 架构合理:组件和状态管理层都依赖服务层,符合依赖倒置原则 - 类型安全:TypeScript 检查通过,没有引入新的类型错误 - 易于维护:未来修改默认配置只需要改一处 **改动文件:** - src/features/serverConfig/services/ConfigService.ts - src/features/serverConfig/state/serverConfigSlice.ts - src/features/serverConfig/components/ServerConfigModal.tsx - src/features/serverConfig/types/index.ts - src/API/config.ts - src/domain/mqttService.ts - src/domain/mqttServiceForDevice.ts - src/domain/mqttConfig.ts (删除) - src/pages/view/components/viewers/stack.image.viewer.tsx - package.json (版本更新: 1.7.1 -> 1.8.0) --- ## [1.7.1] - 2025-12-12 17:48 ### 修复 (Fixed) - **测量工具删除操作崩溃问题** ([src/utils/measurementToolManager.ts](src/utils/measurementToolManager.ts)) - 修复点击删除测量导致崩溃的问题 - 新增 `getLengthMeasurements` 方法获取指定 viewport 的所有线段测量结果 - 新增 `activateLengthToolForViewports` 方法为多个 viewport 批量激活线段测量工具 - 新增 `deactivateLengthToolForViewports` 方法为多个 viewport 批量停用线段测量工具 - 新增 `clearLengthMeasurementsForViewports` 方法为多个 viewport 批量清除线段测量 **技术实现:** - 增强测量工具管理器的批量操作能力 - 添加完整的错误处理和边界检查 - 支持多 viewport 场景的测量工具管理 **改动文件:** - package.json (版本更新: 1.7.0 -> 1.7.1) - src/utils/measurementToolManager.ts --- ## [1.7.0] - 2025-12-12 17:14 ### 修复 (Fixed) - **Android模拟器ES5兼容性问题** ([config/index.ts](config/index.ts)) - 添加webpack配置强制转换node_modules中的ES2020+语法为ES5 - 解决雷神模拟器上运行Android时不支持ES2020语法的问题 - 配置babel-loader处理ahooks、lodash-es、dayjs、antd-mobile、@ant-design、@cornerstonejs、react-query等常用库 - 在h5配置中添加esnextModules空数组 - 设置目标环境为Chrome 91,确保良好的兼容性 **技术实现:** - 使用webpack chain API配置force-es5规则 - 针对特定node_modules包应用babel-loader转换 - 配置@babel/preset-env实现ES2020+到ES5的语法降级 - 启用useBuiltIns: 'usage'和corejs: 3实现按需polyfill **改动文件:** - config/index.ts --- ## [1.7.0] - 2025-12-12 14:47 ### 变更 (Changed) - **Android构建流程改进** ([.build/build-android.js](.build/build-android.js)) - 实现index.html自动注入cordova.js脚本功能 - 添加智能检测机制,避免重复添加cordova.js引用 - 在业务代码执行前确保Cordova环境就绪 - 新增cordova-plugin-nativestorage插件安装,支持本地数据存储 - 优化构建流程注释,提高代码可读性 **技术实现:** - 自动读取并修改生成的index.html文件 - 在``标签后插入cordova.js脚本引用 - 检查现有内容避免重复注入 - 输出清晰的构建日志信息 **改动文件:** - `.build/build-android.js` --- ## [1.6.0] - 2025-12-11 17:40 ### 新增 (Added) - **Android构建系统统一化改造** ([.build/build-android.js](.build/build-android.js)) - 将Android SDK安装和构建功能合并到单个脚本中 - 实现完整的自动化构建流程:先安装SDK,然后构建APK - 新增Gradle wrapper配置功能,强制使用预装的Gradle 9.0.0版本 - 集成智能SDK路径检测,支持多平台路径fallback策略 - 添加跨平台环境变量管理,确保构建一致性 ### 变更 (Changed) - **CI工作流优化** ([.github/workflows/build-linux-arm-appimage.yml](.github/workflows/build-linux-arm-appimage.yml)) - 简化Android构建工作流,移除重复的SDK安装步骤 - 优化步骤顺序,确保依赖关系正确 - 移除平台特定的shell配置,支持跨平台构建 - 清理注释和冗余配置,提高可维护性 - **H5构建环境变量传递** ([.build/build-h5-smart.js](.build/build-h5-smart.js)) - 实现自定义API和MQTT服务器地址配置传递 - 支持动态配置TARO_API_URL和TARO_MQTT_URL环境变量 - 保持构建缓存机制的完整性 ### 移除 (Removed) - **独立的setup-android-sdk.js脚本** - 功能已完全合并到build-android.js中 --- ## [1.7.0] - 2025-12-11 19:02 ### 新增 (Added) - **注释保存和加载渲染功能** - 实现完整的注释数据持久化系统 - 新增注释序列化/反序列化服务,支持Cornerstone注释对象的JSON存储 - 实现注释管理器,监听Cornerstone事件并自动保存注释数据 - 新增注释验证器,确保数据完整性和格式正确性 - 集成Redux状态管理,支持注释数据的全局状态维护 - 实现延迟批量保存机制,提升性能和用户体验 - 支持多工具类型注释:LengthTool、AngleTool、LabelTool、HipNHAAngleMeasurementTool等 **核心功能实现:** - 注释自动保存:监听Cornerstone注释完成事件,实时保存到后端 - 注释自动加载:图像加载时自动从后端获取并渲染注释 - 注释状态管理:支持注释的高亮、选中等状态控制 - 数据验证:确保注释数据的格式和完整性 - 错误处理:完善的异常处理和用户反馈机制 **技术架构:** - 基于Feature模块化设计,代码组织清晰 - TypeScript类型安全,支持完整的类型检查 - 异步操作和状态机管理,确保数据一致性 - 优化的性能:延迟保存、批量操作、最小化API调用 **改动文件:** - 新增 `src/features/imageAnnotation/` Feature模块 - `src/features/imageAnnotation/services/AnnotationSerializer.ts` - 注释序列化服务 - `src/features/imageAnnotation/services/AnnotationManager.ts` - 注释管理器 - `src/features/imageAnnotation/services/AnnotationValidator.ts` - 注释验证器 - `src/features/imageAnnotation/state/annotationSlice.ts` - Redux状态管理 - `src/features/imageAnnotation/types/annotation.ts` - 类型定义 - `src/features/imageAnnotation/index.ts` - 模块导出 - `src/API/annotation.ts` - API接口定义 - `src/states/store.ts` - 注册annotation slice - `package.json` - 版本号更新至1.7.0 --- ## [未发布] (Unreleased) ### 新增 (Added) - 待添加的新功能 ### 变更 (Changed) - 待变更的现有功能 ### 修复 (Fixed) - 待修复的问题 ### 移除 (Removed) - 待移除的功能 --- ## [1.6.0] - 2025-12-11 ### 新增 (Added) - **运行时配置后端 API 地址功能** ([#server-config-runtime](docs/实现/运行时配置后端地址功能.md)) - 实现完整的服务器配置管理系统,支持 Electron、Cordova、浏览器三端 - 新增 `serverConfig` Feature 模块,包含类型定义、服务层、状态管理和UI组件 - 支持用户手动配置 API 基础地址和 MQTT Broker 地址 - 实现跨平台存储适配器:Electron使用文件系统,Cordova使用NativeStorage,浏览器使用内存存储 - 添加服务器连接检测机制,启动时自动验证配置有效性 - 实现智能配置优先级:用户配置 > 浏览器动态检测 > webpack编译配置 > 默认值 - 新增服务器配置对话框,支持地址验证和测试连接功能 - 集成 MQTT 服务动态配置,确保设备通信正常工作 - 优化应用初始化流程,添加连接检查和错误处理 **核心架构改进:** - 新增 `src/features/serverConfig/` Feature 模块 - 新增 `src/utils/platform.ts` 统一平台检测工具 - 新增 `src/domain/mqttConfig.ts` MQTT 配置服务 - 改造 `src/API/config.ts` 支持动态配置 - 优化 `src/app.tsx` 初始化流程和错误处理 **技术实现亮点:** - Feature-based 架构设计,支持模块化开发 - 统一的存储适配器接口,支持多平台存储策略 - 状态机驱动的初始化流程,确保可靠的启动顺序 - 完整的 TypeScript 类型支持和错误处理 - 用户友好的配置界面和连接测试功能 **改动文件:** - 新增文件: - `src/features/serverConfig/types/index.ts` - `src/features/serverConfig/storage/IStorageAdapter.ts` - `src/features/serverConfig/storage/ElectronStorageAdapter.ts` - `src/features/serverConfig/storage/CordovaStorageAdapter.ts` - `src/features/serverConfig/storage/BrowserStorageAdapter.ts` - `src/features/serverConfig/storage/index.ts` - `src/features/serverConfig/services/ConfigService.ts` - `src/features/serverConfig/state/serverConfigSlice.ts` - `src/features/serverConfig/components/ServerConfigModal.tsx` - `src/features/serverConfig/index.ts` - `src/domain/mqttConfig.ts` - `src/utils/platform.ts` - `docs/实现/运行时配置后端地址功能.md` - `docs/实现/初始化管道系统设计方案.md` - 修改文件: - `src/app.tsx` - 添加服务器连接检查和配置对话框 - `src/API/config.ts` - 改为动态配置函数 - `src/API/interceptor.ts` - 支持动态修改 baseURL - `src/states/store.ts` - 注册 serverConfig slice - `src/domain/mqttService.ts` - 使用动态 MQTT 配置 - `src/domain/mqttServiceForDevice.ts` - 使用动态 MQTT 配置 - `main.js` - 修复 ES 模块兼容性 - `preload.js` - 更新存储 API - `types/global.d.ts` - 添加平台类型定义 - `package.json` - 更新版本号至 1.6.0 --- ## [1.5.0] - 2025-12-11 ### 新增 (Added) - **矩形灰度测量工具完整交互功能** ([#rectangle-grayscale-interaction](src/components/measures/RectangleGrayscaleMeasurementTool.ts)) - 实现线段精确检测功能,支持点击矩形边框进行整体拖拽 - 实现文本框独立拖拽功能,支持自由移动测量结果显示位置 - 实现智能光标反馈系统: - 文本框悬停显示手型光标(pointer) - 线段和手柄悬停显示十字准星光标(crosshair) - 矩形内部显示默认光标 - 实现选中状态下手柄半径动态调整(默认6 → 悬停9 → 选中12) - 实现三级交互优先级:文本框 → 手柄 → 线段 → 内部区域 - 优化矩形内部点击行为:仅选中,不触发拖拽 ### 修复 (Fixed) - **矩形拖拽坐标计算问题修复** - 修复整体拖拽时坐标计算错误导致工具跑出视区的问题 - 简化偏移计算逻辑:新质心位置 = 当前鼠标位置 - 初始偏移 - 确保矩形能够准确跟随鼠标移动,不产生额外偏移 **核心改进:** - 新增 `_isPointNearLine` 和 `_isPointNearLineSegment` 方法实现精确线段检测 - 新增 `_isPointInTextBox` 和 `_checkTextBoxBounds` 方法实现文本框检测 - 优化 `_mouseDownModifyCallback` 实现文本框、手柄、线段的优先级检测 - 优化 `_mouseDragModifyCallback` 支持文本框拖拽和修复整体拖拽坐标计算 - 优化 `_mouseMoveModifyCallback` 实现智能光标样式切换和悬停高亮 - 优化 `renderAnnotation` 根据选中和高亮状态动态调整手柄大小 **改动文件:** - src/components/measures/RectangleGrayscaleMeasurementTool.ts --- ## [1.4.2] - 2025-12-11 ### 新增 (Added) - **直线灰度测量工具文本框交互功能** ([#line-grayscale-text-interaction](src/components/measures/LineGrayscaleMeasurementTool.ts)) - 实现文本框拖拽功能,支持自由移动测量结果显示位置 - 实现文本框悬停时显示手型光标,提供清晰的交互提示 - 实现点击文本框选中整个工具,统一选中行为 - 优化文本框检测逻辑,使用默认位置作为备选值 - 调整检测区域 padding 从 50 减小到 10,提高检测精度 **核心改进:** - 修复文本框位置未定义时检测逻辑不执行的问题 - 实现三级交互优先级:文本框 → 手柄 → 线段 - 确保所有文本框交互功能正常工作 **改动文件:** - src/components/measures/LineGrayscaleMeasurementTool.ts --- ## [1.4.1] - 2025-12-11 ### 新增 (Added) - **直线灰度测量工具交互功能增强** ([#line-grayscale-measurement-interaction](src/components/measures/LineGrayscaleMeasurementTool.ts)) - 实现整个工具平移功能,点击线段可拖拽移动整个测量工具 - 实现手柄拖拽功能,支持单独调整端点位置 - 实现选中状态管理,选中时手柄半径从6增大到12 - 实现线段和手柄悬停时显示十字准星光标 - 实现悬停高亮效果,提供更好的视觉反馈 - 点击空白区域可取消工具选中状态 - 优化数据更新逻辑,只在必要时重新计算统计数据 **核心改进:** - 使用 `handleIndex = -1` 标识整个工具的拖拽操作 - 使用 `wholeToolOffset` 追踪工具平移的拖拽状态 - 实现优先级检测:手柄 → 线段 - 选中状态下保持高亮,提供更好的用户体验 **改动文件:** - src/components/measures/LineGrayscaleMeasurementTool.ts --- ## [1.4.0] - 2025-12-10 ### 新增 (Added) - **矩形区域灰度测量功能** ([#rectangle-grayscale-measurement](docs/实现/矩形区域灰度测量的实现方案.md)) - 实现完整的矩形区域灰度测量工具,提供医学影像选区统计分析 - 新增 `RectangleGrayscaleMeasurementTool` 类,基于Cornerstone3D实现 - 支持在医学图像上绘制矩形选区并自动计算平均、最小、最大灰度值 - 集成完整的测量工具管理系统,支持多视口和状态管理 - 修复矩形手柄拖拽算法,确保角点移动时矩形形状保持正确 - 测量结果实时显示,包括像素平均值、极值和选区面积信息 - 支持工具切换、清除和历史记录管理 **核心文件变更:** - `src/components/measures/RectangleGrayscaleMeasurementTool.ts` (新增) - `src/utils/measurementToolManager.ts` (更新测量工具管理) - `src/pages/view/components/viewers/stack.image.viewer.tsx` (工具集成) - `docs/实现/矩形区域灰度测量的实现方案.md` (功能设计文档) --- ## [1.3.5] - 2025-12-10 ### 修复 (Fixed) - **工作列表患者照片显示逻辑修复** ([#worklist.tsx](src/pages/patient/worklist.tsx)) - 修复患者照片查找条件类型比较错误,解决 undefined === '' 导致照片不显示的问题 ## [1.2.7] - 2025-12-09 ### 修复 (Fixed) - **Reset Image 功能反色问题** ([#stack.image.viewer.tsx](src/pages/view/components/viewers/stack.image.viewer.tsx)) - 修复了点击 Reset Image 按钮后,DICOM 图像显示反色的问题 - 从图像缓存中正确获取原始 `photometricInterpretation` 元数据 - 发现并处理 `resetProperties()` 后需要反转 invert 值的特殊行为 - 解决了 MONOCHROME1/MONOCHROME2 格式图像的正确显示问题 **关键技术发现:** - `resetProperties()` 会重置 VOI LUT 等渲染参数 - 导致需要与初始加载相反的 invert 值才能正确显示 - MONOCHROME1: 初始 `invert=true`,Reset 后需要 `invert=false` - MONOCHROME2: 初始 `invert=false`,Reset 后需要 `invert=true` **影响范围:** - 确保无论用户是否使用"反色对比"功能,Reset 都能正确恢复初始显示 - 所有使用 Cornerstone3D 显示的 DICOM 图像 --- ## [1.2.6] - 2025-12-XX ### 说明 - 历史版本,具体变更待补充 --- ## 版本号说明 本项目遵循[语义化版本 2.0.0](https://semver.org/lang/zh-CN/)规范: - **主版本号 (Major)**:当你做了不兼容的 API 修改 - **次版本号 (Minor)**:当你做了向下兼容的功能性新增 - **修订号 (Patch)**:当你做了向下兼容的问题修正 ### 变更类型说明 - **新增 (Added)**: 添加的新功能 - **变更 (Changed)**: 对现有功能的变更 - **弃用 (Deprecated)**: 即将移除的功能 - **移除 (Removed)**: 已移除的功能 - **修复 (Fixed)**: 任何 bug 修复 - **安全 (Security)**: 针对安全漏洞的修复 --- ## 链接说明 - [未发布]: 当前开发中的版本 - [1.2.7]: https://github.com/usernamedd/zsis/compare/v1.2.6...v1.2.7 - [1.2.6]: https://github.com/usernamedd/zsis/releases/tag/v1.2.6