Sfoglia il codice sorgente

Merge branch 'master' of http://code.pacsonline.cn/ddx/dros

szy 1 settimana fa
parent
commit
cb456418b0

+ 77 - 0
CHANGELOG.md

@@ -2,6 +2,83 @@
 
 本项目的所有重要变更都将记录在此文件中。
 
+## [1.49.7] - 2026-01-05 19:30
+
+### 修复 (Fixed)
+
+- **解决 bug 189 - 修复多次选择同一标记不触发事件的问题** - 将 Select 组件的 onChange 改为 onSelect,确保多次选择同一选项时都能触发事件
+
+**改动文件:**
+- src/pages/view/components/MarkPanel.tsx
+
+## [1.49.6] - 2026-01-05 19:22
+
+### 修复 (Fixed)
+
+- **修复注册成功后未清理已选择视图列表的问题** - 在executeRegisterLogic中添加注册成功后的状态清理逻辑,确保每次注册后可以开始新的流程
+
+**改动文件:**
+- src/domain/patient/registerLogic.ts
+- src/pages/patient/register.tsx
+
+## [1.49.5] - 2026-01-05 18:32
+
+### 修复 (Fixed)
+
+- **修复反色对比缩略图列表显示拒绝状态体位问题** - 过滤掉 judged_status 为 'Reject' 的体位,避免在反色对比中显示拒绝的图像
+
+**改动文件:**
+- src/pages/view/components/InvertContrastThumbnailList.tsx
+
+## [1.49.4] - 2026-01-05 18:19
+
+### 重构 (Refactored)
+
+- **优化反色对比模态框界面** - 移除图像标签显示,简化用户界面
+
+**改动文件:**
+- src/pages/view/components/InvertContrastModal.tsx
+
+## [1.49.3] - 2026-01-05 14:00
+
+### 重构 (Refactored)
+
+- **重构网络设置模块组件命名** - 重构网络设置相关组件和配置的命名,提升代码可读性和可维护性
+  - 将 Connection 组件重命名为 TaskNode (管接 → 任务节点)
+  - 将 NetworkPreferences 组件重命名为 ArchiveNode (首选项 → 归档节点)
+  - 将 TagMapping 组件重命名为 PrintNode (标记映射 → 打印节点)
+  - 将 NetworkTest 组件重命名为 MppsNode (测试 → MPPS节点)
+  - 更新配置文件以使用新的组件名称和ID
+  - 删除注释掉的代码,提高代码可维护性
+
+**改动文件:**
+- src/pages/system/SettingsModal/sections/Network/index.tsx
+- src/pages/system/SettingsModal/config.tsx
+
+## [1.49.2] - 2026-01-05 12:45
+
+### 样式 (Style)
+
+- **优化任意角度旋转图标设计** - 简化SVG图标结构,提升视觉呈现和渲染性能
+  - 将复杂的多路径SVG设计替换为单一路径结构
+  - 优化图标视觉呈现,提升UI一致性和可读性
+  - 减少SVG代码复杂度,提高渲染性能
+
+**改动文件:**
+- src/assets/Icons/base/module-process/theme-default/2x/RotateAnyDegree_normal.svg
+
+## [1.49.1] - 2026-01-05 11:59
+
+### 样式 (Style)
+
+- **优化缩略图列表布局和显示** - 调整响应式网格布局,隐藏状态标识以简化界面
+  - 在 ThumbnailList 中调整响应式列配置,大屏幕显示更多列(lg从6改为3,xl从4改为2)
+  - 注释掉判断状态徽章(judged_status badge)的显示
+  - 注释掉曝光状态标签(expose_status tag)的显示
+
+**改动文件:**
+- src/pages/patient/components/ThumbnailList.tsx
+
 ## [1.49.0] - 2026-01-03 20:25
 
 ### 新增 (Added)

+ 2 - 2
config/dev.ts

@@ -82,7 +82,7 @@ export default {
       proxy: {
         '/dr': {
           // target: 'http://192.168.110.13', // 你的后端服务地址
-          target: 'http://192.168.110.245',
+          target: 'http://192.168.110.239',
           changeOrigin: true, // 允许跨域
           // pathRewrite: {
           //   '^/dr/api': '' // 可选,用于重写路径
@@ -90,7 +90,7 @@ export default {
         },
         '/mqtt': {
           // target: 'ws://192.168.110.13:8083', // MQTT WebSocket 服务地址
-          target: 'ws://192.168.110.245:8083',
+          target: 'ws://192.168.110.239:8083',
           changeOrigin: true,
           ws: true, // 启用 WebSocket 代理
           // pathRewrite: {

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "zsis",
-  "version": "1.49.0",
+  "version": "1.49.7",
   "private": true,
   "description": "医学成像系统",
   "main": "main.js",

File diff suppressed because it is too large
+ 1 - 5
src/assets/Icons/base/module-process/theme-default/2x/RotateAnyDegree_normal.svg


+ 6 - 1
src/domain/patient/registerLogic.ts

@@ -13,6 +13,9 @@ import { omitHumanSchemaMap } from '@/domain/humanSpecificInfo';
 import { RootState } from '@/states/store';
 import { View } from '@/API/patient/viewActions';
 import { checkPatientDuplicate } from './duplicateCheck';
+import { clearSelectedViews } from '@/states/patient/viewSelection';
+import storeOfRoot from '@/states/store';
+import { clearFormData } from '@/states/patient/register/formSlice';
 
 dayjs.extend(utc);
 
@@ -105,7 +108,9 @@ export async function executeRegisterLogic(store: {
       message.error(`注册失败: ${response.description}`);
       return { success: false, views: [] };
     }
-
+    //注册成功,清理
+    storeOfRoot.dispatch(clearFormData());
+    storeOfRoot.dispatch(clearSelectedViews());
     console.log('Work registered successfully:', response);
     message.info('Work registered successfully');
 

+ 5 - 5
src/pages/patient/components/ThumbnailList.tsx

@@ -86,7 +86,7 @@ const ThumbnailList: React.FC<ThumbnailListProps> = ({ className }) => {
       </Title> */}
       <Row >
         {thumbnails.map((thumbnail: dview) => (
-          <Col xs={24} sm={12} md={8} lg={6} xl={4} key={thumbnail.view_id}>
+          <Col xs={24} sm={12} md={8} lg={3} xl={2} key={thumbnail.view_id}>
             <Card
               size="small"
               hoverable
@@ -113,7 +113,7 @@ const ThumbnailList: React.FC<ThumbnailListProps> = ({ className }) => {
                     }}
                   />
                   {/* 左上角:判断状态badge */}
-                  {thumbnail.expose_status === 'Exposed' && thumbnail.judged_status && (
+                  {/* {thumbnail.expose_status === 'Exposed' && thumbnail.judged_status && (
                     <div className="absolute top-1 left-1">
                       <Badge
                         count={
@@ -128,9 +128,9 @@ const ThumbnailList: React.FC<ThumbnailListProps> = ({ className }) => {
                         }}
                       />
                     </div>
-                  )}
+                  )} */}
                   {/* 右上角:曝光状态tag */}
-                  <div className="absolute top-1 right-1">
+                  {/* <div className="absolute top-1 right-1">
                     <Tag
                       color={
                         thumbnail.expose_status === 'Exposed'
@@ -140,7 +140,7 @@ const ThumbnailList: React.FC<ThumbnailListProps> = ({ className }) => {
                     >
                       {thumbnail.expose_status}
                     </Tag>
-                  </div>
+                  </div> */}
                 </div>
               }
             >

+ 5 - 3
src/pages/patient/register.tsx

@@ -99,14 +99,16 @@ const RegisterPage: React.FC = () => {
     data?: RegisterWorkResponseData;
     views?: View[];
   }> => {
-    const result = await executeRegisterLogic({ getState: () => store.getState() });
+    const result = await executeRegisterLogic({
+      getState: () => store.getState()
+    });
     if (result.success) {
       // 清理时机1:注册成功后清理表单
       // 1. 清理 Redux formSlice
-      dispatch(clearFormData());
+      // dispatch(clearFormData()); //放到 executeRegisterLogic 中处理
       // 2. 清理 Ant Design Form
       form.resetFields();
-      // 3. selectedViews 会在 Redux 中自动清空(已在 viewSelectionSlice 中实现)
+      // 3. selectedViews 已在 executeRegisterLogic 中自动清空
       console.log('注册成功,表单已清空,可以开始新的注册');
     }
 

+ 14 - 14
src/pages/system/SettingsModal/config.tsx

@@ -193,30 +193,30 @@ export const settingsConfig: SettingsCategory[] = [
     icon: <ApiOutlined />,
     sections: [
       {
-        id: 'connection',
-        title: '管接',
-        component: Network.Connection,
+        id: 'task_node',
+        title: '任务节点',
+        component: Network.TaskNode,
       },
       {
-        id: 'network_preferences',
-        title: '首选项',
-        component: Network.NetworkPreferences,
+        id: 'archive_node',
+        title: '归档节点',
+        component: Network.ArchiveNode,
       },
       {
-        id: 'tag_mapping',
-        title: '标记映射',
-        component: Network.TagMapping,
+        id: 'print_node',
+        title: '打印节点',
+        component: Network.PrintNode,
+      },
+      {
+        id: 'mpps_node',
+        title: 'MPPS节点',
+        component: Network.MppsNode,
       },
       {
         id: 'ip',
         title: 'IP',
         component: Network.Ip,
       },
-      {
-        id: 'network_test',
-        title: '测试',
-        component: Network.NetworkTest,
-      },
     ],
   },
   {

+ 12 - 17
src/pages/system/SettingsModal/sections/Network/index.tsx

@@ -5,27 +5,22 @@ import React from 'react';
 import PlaceholderSection from '../PlaceholderSection';
 export { default as Ip } from './ip';
 
-// 管接
-export const Connection: React.FC = () => (
-  <PlaceholderSection title="管接" />
+// 任务节点
+export const TaskNode: React.FC = () => (
+  <PlaceholderSection title="任务节点" />
 );
 
-// 首选项
-export const NetworkPreferences: React.FC = () => (
-  <PlaceholderSection title="首选项" />
+// 归档节点
+export const ArchiveNode: React.FC = () => (
+  <PlaceholderSection title="归档节点" />
 );
 
-// 标记映射
-export const TagMapping: React.FC = () => (
-  <PlaceholderSection title="标记映射" />
+// 打印节点
+export const PrintNode: React.FC = () => (
+  <PlaceholderSection title="打印节点" />
 );
 
-// // IP
-// export const Ip: React.FC = () => (
-//   <PlaceholderSection title="IP" />
-// );
-
-// 测试
-export const NetworkTest: React.FC = () => (
-  <PlaceholderSection title="测试" />
+// MPPS节点
+export const MppsNode: React.FC = () => (
+  <PlaceholderSection title="MPPS节点" />
 );

+ 0 - 26
src/pages/view/components/InvertContrastModal.tsx

@@ -147,19 +147,6 @@ const InvertContrastModal: React.FC = () => {
             flexDirection: 'column',
             backgroundColor: '#000'
           }}>
-            <div style={{
-              position: 'absolute',
-              top: 8,
-              left: 8,
-              zIndex: 10,
-              background: 'rgba(0,0,0,0.7)',
-              color: '#fff',
-              padding: '4px 8px',
-              borderRadius: '4px',
-              fontSize: '14px'
-            }}>
-              {selectedPositions.length > 1 ? '原图' : '对比图'}
-            </div>
             {leftImageUrl && (
               <div style={{ flex: 1, overflow: 'hidden' }}>
                 <StackViewerWithErrorBoundary
@@ -181,19 +168,6 @@ const InvertContrastModal: React.FC = () => {
             flexDirection: 'column',
             backgroundColor: '#000'
           }}>
-            <div style={{
-              position: 'absolute',
-              top: 8,
-              left: 8,
-              zIndex: 10,
-              background: 'rgba(0,0,0,0.7)',
-              color: '#fff',
-              padding: '4px 8px',
-              borderRadius: '4px',
-              fontSize: '14px'
-            }}>
-              反色图
-            </div>
             {rightImageUrl && (
               <div style={{ flex: 1, overflow: 'hidden' }}>
                 <StackViewerWithErrorBoundary

+ 6 - 1
src/pages/view/components/InvertContrastThumbnailList.tsx

@@ -24,6 +24,11 @@ const InvertContrastThumbnailList: React.FC = () => {
   // 获取当前选中的体位URLs
   const selectedPositions = useSelector(selectSelectedPositions);
 
+  // 过滤掉拒绝的图像
+  const filteredBodyPositions = bodyPositions.filter(
+    (bodyPosition) => bodyPosition.dview.judged_status !== 'Reject'
+  );
+
   /**
    * 处理体位选择变更 - 单选模式,每次选择替换当前选择
    */
@@ -64,7 +69,7 @@ const InvertContrastThumbnailList: React.FC = () => {
         选择对比体位
       </div>
 
-      {bodyPositions.map((bodyPosition, index) => {
+      {filteredBodyPositions.map((bodyPosition, index) => {
         const imageUrl = getPositionImageUrl(bodyPosition);
         const isSelected = isPositionSelected(bodyPosition);
 

+ 1 - 1
src/pages/view/components/MarkPanel.tsx

@@ -213,7 +213,7 @@ const MarkPanel = () => {
           <Select
             className='w-full'
             value={selectedMark}
-            onChange={handleSelectMark}
+            onSelect={handleSelectMark}
             placeholder="选择要添加的标记(选择后自动添加到图像)"
             disabled={customMarks.length === 0}
           >

Some files were not shown because too many files changed in this diff