diff --git a/Merge/front/src/components/SuperAdmin.js b/Merge/front/src/components/SuperAdmin.js
index f24e5d4..0fa6722 100644
--- a/Merge/front/src/components/SuperAdmin.js
+++ b/Merge/front/src/components/SuperAdmin.js
@@ -1,33 +1,48 @@
-import React, { useState, useEffect } from 'react';
-import { NavLink, Outlet } from 'react-router-dom';
-import { Spin } from 'antd';
-import { fetchUserList } from '../api/posts_trm';
-import '../style/SuperAdmin.css';
+// src/components/SuperAdmin.jsx
+import React, { useState, useEffect } from 'react'
+import { NavLink, Outlet, useParams } from 'react-router-dom'
+import { Spin } from 'antd'
+import { fetchUserList } from '../api/posts_trm'
+import '../style/SuperAdmin.css'
 
 export default function SuperAdmin() {
-  const SUPERADMIN_USER_ID = 3;
-  const [loading, setLoading] = useState(true);
-  const [hasPermission, setHasPermission] = useState(true);
+  const { userId } = useParams()             // ← 从路由拿到
+  const [loading, setLoading] = useState(true)
+  const [hasPermission, setHasPermission] = useState(true)
 
   useEffect(() => {
     async function check() {
       try {
-        await fetchUserList(SUPERADMIN_USER_ID);
+        await fetchUserList(userId)          // ← 传入 userId
       } catch (e) {
         if (e.message === 'Unauthorized') {
-          setHasPermission(false);
+          setHasPermission(false)
         } else {
-          console.error(e);
+          console.error(e)
         }
       } finally {
-        setLoading(false);
+        setLoading(false)
       }
     }
-    check();
-  }, []);
+    check()
+  }, [userId])
 
-  if (loading) return <Spin spinning tip="加载中…" style={{ width: '100%', marginTop: 100 }} />;
-  if (!hasPermission) return <div style={{ textAlign: 'center', marginTop: 100 }}>权限不足</div>;
+  if (loading) {
+    return (
+      <Spin
+        spinning
+        tip="加载中…"
+        style={{ width: '100%', marginTop: 100 }}
+      />
+    )
+  }
+  if (!hasPermission) {
+    return (
+      <div style={{ textAlign: 'center', marginTop: 100 }}>
+        权限不足
+      </div>
+    )
+  }
 
   return (
     <div className="super-admin-container">
@@ -36,18 +51,22 @@
         <nav>
           <ul>
             <li>
-              <NavLink 
-                to="users" 
-                end 
-                className={({ isActive }) => isActive ? 'active' : ''}
+              <NavLink
+                to="users"
+                end
+                className={({ isActive }) =>
+                  isActive ? 'active' : ''
+                }
               >
                 用户管理
               </NavLink>
             </li>
             <li>
-              <NavLink 
-                to="dashboard" 
-                className={({ isActive }) => isActive ? 'active' : ''}
+              <NavLink
+                to="dashboard"
+                className={({ isActive }) =>
+                  isActive ? 'active' : ''
+                }
               >
                 平台运行监控
               </NavLink>
@@ -60,5 +79,5 @@
         <Outlet />
       </main>
     </div>
-  );
-}
\ No newline at end of file
+  )
+}
