Pārlūkot izejas kodu

添加首页作业相关状态点击后跳转到作业管理页面功能;
隔离作用模块隐藏SOP管理tab按钮

wyn 3 mēneši atpakaļ
vecāks
revīzija
29cbf27fed

+ 8 - 1
src/Dashboard.tsx

@@ -679,7 +679,14 @@ export default function Dashboard() {
   const filteredMainMenus = mainMenus;
 
   // 过滤后的二级菜单配置(已经根据后端菜单过滤了,包含通知管理)
-  const filteredSubMenuConfig = enhancedSubMenuConfig;
+  // 隐藏隔离作业模块下的SOP管理功能tab
+  const filteredSubMenuConfig = useMemo(() => {
+    const config = { ...enhancedSubMenuConfig };
+    if (config.isolationWork) {
+      config.isolationWork = config.isolationWork.filter(item => item.key !== 'sopManagement');
+    }
+    return config;
+  }, [enhancedSubMenuConfig]);
 
 
   // 监听路径变化,处理详情页显示和菜单状态更新

+ 1 - 1
src/api/cockpit/index.ts

@@ -43,7 +43,7 @@ export interface CockpitStatisticsVO {
   loanList?: any[]; // 借用列表
   
   // 作业状态统计
-  pendingJobsCount?: number; // 待执行作业数
+  pendingJobsCount?: number; // 待发布作业数
   inProgressJobsCount?: number; // 进行中作业数
   completedJobsCount?: number; // 已完成作业数
   overdueJobsCount?: number; // 逾期作业数

+ 44 - 5
src/components/Dashboard.tsx

@@ -1660,10 +1660,23 @@ export default function Dashboard() {
       <div>
         {/* 作业状态统计卡片 */}
         <div className="flex mb-6 gap-8">
-          {/* 待执行作业 - 灰色主题 */}
-          <div className="flex-1 bg-white rounded-lg border border-gray-200 p-4 shadow-sm hover:shadow-md transition-shadow relative overflow-hidden">
+          {/* 待发布作业 - 灰色主题 */}
+          <div 
+            className="flex-1 bg-white rounded-lg border border-gray-200 p-4 shadow-sm hover:shadow-md transition-shadow relative overflow-hidden cursor-pointer"
+            onClick={() => {
+              // 保存status到 sessionStorage
+              sessionStorage.setItem('workManagementStatus', 'unreleased');
+              // 触发自定义事件切换菜单
+              window.dispatchEvent(new CustomEvent('switchToMenu', {
+                detail: {
+                  menu: 'isolationWork',
+                  subMenu: 'workManagement'
+                }
+              }));
+            }}
+          >
             <div className="flex items-start justify-between mb-3">
-              <div className="text-sm text-gray-500 font-medium">待执行作业</div>
+              <div className="text-sm text-gray-500 font-medium">待发布作业</div>
               <div className="p-3 rounded-xl flex items-center justify-center flex-shrink-0" style={{ backgroundColor: 'rgba(188, 185, 183, 0.2)' }}>
                 <Clock className="w-6 h-6 text-black-700" strokeWidth={2} />
               </div>
@@ -1676,7 +1689,20 @@ export default function Dashboard() {
           </div>
           
           {/* 进行中作业 - 蓝色主题 */}
-          <div className="flex-1 bg-white rounded-lg border border-gray-200 p-4 shadow-sm hover:shadow-md transition-shadow relative overflow-hidden">
+          <div 
+            className="flex-1 bg-white rounded-lg border border-gray-200 p-4 shadow-sm hover:shadow-md transition-shadow relative overflow-hidden cursor-pointer"
+            onClick={() => {
+              // 保存status到 sessionStorage
+              sessionStorage.setItem('workManagementStatus', 'running');
+              // 触发自定义事件切换菜单
+              window.dispatchEvent(new CustomEvent('switchToMenu', {
+                detail: {
+                  menu: 'isolationWork',
+                  subMenu: 'workManagement'
+                }
+              }));
+            }}
+          >
             <div className="flex items-start justify-between mb-3">
               <div className="text-sm text-gray-500 font-medium">进行中作业</div>
               <div className="p-3 rounded-xl flex items-center justify-center flex-shrink-0" style={{ backgroundColor: 'rgba(59, 130, 246, 0.2)' }}>
@@ -1691,7 +1717,20 @@ export default function Dashboard() {
           </div>
           
           {/* 已完成作业 - 绿色主题 */}
-          <div className="flex-1 bg-white rounded-lg border border-gray-200 p-4 shadow-sm hover:shadow-md transition-shadow relative overflow-hidden">
+          <div 
+            className="flex-1 bg-white rounded-lg border border-gray-200 p-4 shadow-sm hover:shadow-md transition-shadow relative overflow-hidden cursor-pointer"
+            onClick={() => {
+              // 保存status到 sessionStorage
+              sessionStorage.setItem('workManagementStatus', 'completed');
+              // 触发自定义事件切换菜单
+              window.dispatchEvent(new CustomEvent('switchToMenu', {
+                detail: {
+                  menu: 'isolationWork',
+                  subMenu: 'workManagement'
+                }
+              }));
+            }}
+          >
             <div className="flex items-start justify-between mb-3">
               <div className="text-sm text-gray-500 font-medium">已完成作业</div>
               <div className="p-3 rounded-xl flex items-center justify-center flex-shrink-0" style={{ backgroundColor: 'rgba(34, 197, 94, 0.2)' }}>

+ 29 - 3
src/components/IsolationWork.tsx

@@ -752,9 +752,15 @@ export default function IsolationWork({ subMenu }: IsolationWorkProps) {
   });
 
   // 作业管理搜索参数
+  // 从 sessionStorage 读取初始 status
+  const getInitialWorkStatus = () => {
+    const status = sessionStorage.getItem('workManagementStatus');
+    return status || undefined;
+  };
+
   const [workJobQuery, setWorkJobQuery] = useState({
     name: '',
-    status: undefined as string | undefined,
+    status: getInitialWorkStatus() as string | undefined,
   });
   const [workJobPagination, setWorkJobPagination] = useState({
     pageNo: 1,
@@ -1042,8 +1048,14 @@ export default function IsolationWork({ subMenu }: IsolationWorkProps) {
     } else if (subMenu === '作业管理') {
       // 重置分页到第一页
       setWorkJobPagination({ pageNo: 1, pageSize: 10 });
-      // 重置查询条件
-      setWorkJobQuery({ name: '', status: undefined });
+      // 检查是否有从 sessionStorage 传入的 status
+      const statusFromStorage = sessionStorage.getItem('workManagementStatus');
+      // 重置查询条件(如果有 status 则保留,否则清空)
+      setWorkJobQuery({ name: '', status: statusFromStorage || undefined });
+      // 如果读取了 status,清除 sessionStorage
+      if (statusFromStorage) {
+        sessionStorage.removeItem('workManagementStatus');
+      }
       // 加载数据
       getWorkJobList();
       // 加载作业分类字典数据
@@ -1103,6 +1115,20 @@ export default function IsolationWork({ subMenu }: IsolationWorkProps) {
     setWorkJobPagination({ pageNo: 1, pageSize: 10 });
   };
 
+  // 组件挂载时从 sessionStorage 读取 status
+  useEffect(() => {
+    const status = sessionStorage.getItem('workManagementStatus');
+    if (status) {
+      console.log('从 sessionStorage 读取到 workManagementStatus:', status);
+      setWorkJobQuery(prev => ({
+        ...prev,
+        status: status,
+      }));
+      // 读取后清除 sessionStorage,避免下次进入时自动应用
+      sessionStorage.removeItem('workManagementStatus');
+    }
+  }, []);
+
   // 作业管理页面加载时获取列表
   useEffect(() => {
     if (subMenu === '作业管理') {

+ 21 - 2
src/components/TaskManagement.tsx

@@ -198,10 +198,17 @@ export default function TaskManagement() {
   const [loading, setLoading] = useState(true);
   const [list, setList] = useState<MyTaskVO[]>([]);
   const [total, setTotal] = useState(0);
+  // 从 sessionStorage 读取 status 参数
+  const getInitialStatus = () => {
+    const status = sessionStorage.getItem('taskManagementStatus');
+    return status || undefined;
+  };
+
   const [queryParams, setQueryParams] = useState<MyTaskPageParam>({
     pageNo: 1,
     pageSize: 10,
     key: '',
+    status: getInitialStatus(),
   });
   const [searchKey, setSearchKey] = useState('');
   const [approvalStatusDictList, setApprovalStatusDictList] = useState<any[]>([]);
@@ -224,9 +231,20 @@ export default function TaskManagement() {
   const [submitLoading, setSubmitLoading] = useState(false); // 提交操作loading状态
   
   
-  // 组件挂载时打印调试信息
+  // 组件挂载时打印调试信息,并从 sessionStorage 读取 status
   useEffect(() => {
     console.log('TaskManagement 组件已加载');
+    const status = sessionStorage.getItem('taskManagementStatus');
+    if (status) {
+      console.log('从 sessionStorage 读取到 status:', status);
+      setQueryParams(prev => ({
+        ...prev,
+        status: status,
+        pageNo: 1, // 重置到第一页
+      }));
+      // 读取后清除 sessionStorage,避免下次进入时自动应用
+      sessionStorage.removeItem('taskManagementStatus');
+    }
   }, []);
   
   // 监听弹框状态变化
@@ -302,7 +320,7 @@ export default function TaskManagement() {
     console.log('TaskManagement: useEffect 触发,queryParams:', queryParams);
     getList();
     // eslint-disable-next-line react-hooks/exhaustive-deps
-  }, [queryParams.pageNo, queryParams.pageSize, queryParams.key]);
+  }, [queryParams.pageNo, queryParams.pageSize, queryParams.key, queryParams.status]);
 
   // 搜索
   const handleSearch = () => {
@@ -320,6 +338,7 @@ export default function TaskManagement() {
       ...queryParams,
       pageNo: 1,
       key: undefined,
+      status: undefined, // 重置时也清除 status
     });
   };