ソースを参照

提交机柜管理的详情返回按钮

pm 5 ヶ月 前
コミット
49313f4809
3 ファイル変更77 行追加4 行削除
  1. 51 2
      src/Dashboard.tsx
  2. 18 2
      src/components/lockCabinet/LockCabinetDetail.tsx
  3. 8 0
      src/routes/index.tsx

+ 51 - 2
src/Dashboard.tsx

@@ -513,13 +513,62 @@ export default function Dashboard() {
   const filteredSubMenuConfig = enhancedSubMenuConfig;
 
 
-  // 监听路径变化,处理详情页显示
+  // 监听路径变化,处理详情页显示和菜单状态更新
   useEffect(() => {
     // 如果是详情页,设置 activeMenu 为空,直接显示详情页
     if (location.pathname.startsWith('/lock-cabinet/detail')) {
       setActiveMenu('');
+      return;
+    }
+    
+    // 如果路径是 /dashboard,不处理(使用当前状态)
+    if (location.pathname === '/dashboard') {
+      return;
+    }
+    
+    // 根据路径更新菜单状态
+    const path = location.pathname;
+    const menuKey = mapBackendPathToFrontendKey(path);
+    
+    if (menuKey) {
+      console.log('根据路径更新菜单:', { path, menuKey });
+      
+      // 如果是系统配置的子菜单,需要设置对应的子菜单key
+      if (menuKey === 'systemConfig' || menuKey === 'departmentManagement' || menuKey === 'menuManagement' || 
+          menuKey === 'positionManagement' || menuKey === 'roleManagement' || menuKey === 'dictionaryManagement' || 
+          menuKey === 'cabinetManagement') {
+        // 确定是哪个子菜单
+        let subMenuKey = 'menuManagement'; // 默认值
+        
+        if (path.includes('/dept') || menuKey === 'departmentManagement') {
+          subMenuKey = 'departmentManagement';
+        } else if (path.includes('/menu') || menuKey === 'menuManagement') {
+          subMenuKey = 'menuManagement';
+        } else if (path.includes('/post') || menuKey === 'positionManagement') {
+          subMenuKey = 'positionManagement';
+        } else if (path.includes('/role') || menuKey === 'roleManagement') {
+          subMenuKey = 'roleManagement';
+        } else if (path.includes('/dict') || menuKey === 'dictionaryManagement') {
+          subMenuKey = 'dictionaryManagement';
+        } else if (path.includes('/cabinet') || menuKey === 'cabinetManagement') {
+          subMenuKey = 'cabinetManagement';
+        }
+        
+        console.log('设置系统配置子菜单:', { menuKey: 'systemConfig', subMenuKey });
+        setActiveMenu('systemConfig');
+        setActiveSubMenu(subMenuKey);
+      } else if (menuKey === 'cabinet' || menuKey === 'key' || menuKey === 'padlock' || menuKey === 'portable') {
+        // 硬件管理的子菜单
+        setActiveMenu('hardwareManagement');
+        setActiveSubMenu(menuKey);
+      } else if (filteredSubMenuConfig[menuKey] && filteredSubMenuConfig[menuKey].length > 0) {
+        // 其他菜单,设置第一个子菜单
+        setActiveMenu(menuKey);
+        setActiveSubMenu(filteredSubMenuConfig[menuKey][0].key);
+      }
     }
-  }, [location.pathname]);
+    // eslint-disable-next-line react-hooks/exhaustive-deps
+  }, [location.pathname, filteredSubMenuConfig]);
 
   // 根据URL路径初始化菜单状态(仅在首次加载时执行)
   useEffect(() => {

+ 18 - 2
src/components/lockCabinet/LockCabinetDetail.tsx

@@ -1,19 +1,35 @@
 import React, { useState } from 'react';
-import { useSearchParams } from 'react-router-dom';
+import { useSearchParams, useNavigate } from 'react-router-dom';
 import { Radio } from 'antd';
+import { ArrowLeft } from 'lucide-react';
+import { Button } from '../ui/button';
 import SlotsList from './SlotsList';
 import MapData from './MapData';
 
 export default function LockCabinetDetail() {
   const [searchParams] = useSearchParams();
+  const navigate = useNavigate();
   const cabinetId = searchParams.get('cabinetId') || '';
   const [tabPosition, setTabPosition] = useState<'first' | 'second'>('first');
 
   const currentComponent = tabPosition === 'first' ? <MapData cabinetId={cabinetId} /> : <SlotsList cabinetId={cabinetId} />;
 
+  const handleBack = () => {
+    // 导航到机柜管理页面,Dashboard 会根据路径自动设置菜单
+    navigate('/system/cabinet');
+  };
+
   return (
     <div className="p-4">
-      <div className="mb-4">
+      <div className="mb-4 flex items-center justify-between">
+        <Button
+          variant="ghost"
+          onClick={handleBack}
+          className="flex items-center gap-2"
+        >
+          <ArrowLeft className="w-4 h-4" />
+          返回机柜列表
+        </Button>
         <Radio.Group value={tabPosition} onChange={(e) => setTabPosition(e.target.value)}>
           <Radio.Button value="first">锁柜视图</Radio.Button>
           <Radio.Button value="second">列表视图</Radio.Button>

+ 8 - 0
src/routes/index.tsx

@@ -36,6 +36,14 @@ export const router = createBrowserRouter([
       </ProtectedRoute>
     ),
   },
+  {
+    path: '/system/cabinet',
+    element: (
+      <ProtectedRoute>
+        <Dashboard />
+      </ProtectedRoute>
+    ),
+  },
   {
     path: '*',
     element: <Navigate to="/login" replace />,