完成Work组件的界面和一些小修改
> 1. 修改优化路由守卫
> 2. 去除拦截器中的调试信息
> 3. 修改头部导航条下拉菜单的样式增加图标。
> 4. work组件现在使用mock数据

Change-Id: Ic602a35bb02e645a0d5253c5cbd12a68d70bfb33
diff --git a/src/routes/ProtectedRoute.tsx b/src/routes/ProtectedRoute.tsx
index 238fdf4..2764f5a 100644
--- a/src/routes/ProtectedRoute.tsx
+++ b/src/routes/ProtectedRoute.tsx
@@ -1,7 +1,10 @@
-import React, { useEffect } from 'react';
-import { useAppSelector, useAppDispatch } from '../store/hooks'; // 导入 hooks
+// src/routes/ProtectedRoute.tsx
+
+import React, { useEffect, useState } from 'react';
+import { useAppSelector, useAppDispatch } from '../store/hooks';
 import { useNavigate } from 'react-router';
-import { refreshToken } from '../feature/auth/authSlice'; // 导入刷新 token 的 thunk
+import { refreshToken } from '../feature/auth/authSlice';
+import { Spin } from 'antd';
 
 interface ProtectedRouteProps {
   children: React.ReactNode;
@@ -11,26 +14,68 @@
   const { isAuth, token } = useAppSelector((state) => state.auth);
   const navigate = useNavigate();
   const dispatch = useAppDispatch();
+  const [isLoading, setIsLoading] = useState(false);
 
   useEffect(() => {
     const tryRefreshToken = async () => {
+      // 如果没有token,直接跳转到登录页
       if (!token) {
-        navigate('/login'); // 如果没有 token,跳转到登录页
+        navigate('/login', { replace: true });
+        return;
       }
+
+      // 如果有token但未认证,尝试刷新token
       if (!isAuth && token) {
+        setIsLoading(true);
         try {
-          await dispatch(refreshToken(token)).unwrap(); // 尝试刷新 token
-        } catch {
-          navigate('/login');
+          await dispatch(refreshToken(token)).unwrap();
+        } catch (error) {
+          console.error('Token refresh failed:', error);
+          navigate('/login', { replace: true });
+        } finally {
+          setIsLoading(false);
         }
       }
     };
 
-    tryRefreshToken(); // 执行 token 刷新
+    tryRefreshToken();
   }, [isAuth, token, dispatch, navigate]);
 
-  // 如果已认证则渲染 children,否则返回 null
-  return isAuth ? <>{children}</> : null;
+  // 显示加载状态
+  if (isLoading) {
+    return (
+      <div style={{
+        display: 'flex',
+        justifyContent: 'center',
+        alignItems: 'center',
+        height: '100vh'
+      }}>
+        <Spin size="large" tip="验证身份中..." />
+      </div>
+    );
+  }
+
+  // 如果没有token,返回null(会触发导航)
+  if (!token) {
+    return null;
+  }
+
+  // 如果已认证,渲染children
+  if (isAuth) {
+    return <>{children}</>;
+  }
+
+  // 如果有token但还在验证中,显示加载状态
+  return (
+    <div style={{
+      display: 'flex',
+      justifyContent: 'center',
+      alignItems: 'center',
+      height: '100vh'
+    }}>
+      <Spin size="large" tip="验证身份中..." />
+    </div>
+  );
 };
 
-export default ProtectedRoute;
+export default ProtectedRoute;
\ No newline at end of file
diff --git a/src/routes/routes.ts b/src/routes/routes.ts
index 585b1f6..3bb3135 100644
--- a/src/routes/routes.ts
+++ b/src/routes/routes.ts
@@ -1,29 +1,45 @@
+// src/routes/routes.ts
+
 import { createBrowserRouter } from "react-router";
-import Home from "../feature/Home";
+import Home from "../feature/home/Home";
 import AuthLayout from "../feature/auth/AuthLayout";
 import Login from "../feature/auth/Login";
 import Register from "../feature/auth/Register";
 import Forget from "../feature/auth/Forget";
 import AppLayout from "../AppLayout";
 import withProtect from "./withProtect";
+import Work from "../feature/work/Work";
+import CreateWork from "../feature/work/CreateWork";
 
+// 创建受保护的组件
+const ProtectedHome = withProtect(Home);
+const ProtectedWork = withProtect(Work);
+const ProtectedCreatWork = withProtect(CreateWork)
 export default createBrowserRouter([
   {
+    path: "/",
     Component: AppLayout,
     children: [
       {
         path: "/",
-        // 使用 ProtectedRoute 来包裹需要保护的页面
-        element: withProtect(Home),
+        Component: ProtectedHome,
       },
       {
         Component: AuthLayout,
         children: [
-          { path: "login", Component: Login },
-          { path: "register", Component: Register },
-          { path: "forget", Component: Forget },
+          { path: "/login", Component: Login },
+          { path: "/register", Component: Register },
+          { path: "/forget", Component: Forget },
         ],
       },
+      {
+        path: "/work/:work_id",
+        Component: ProtectedWork,
+      },
+      {
+        path:"/work/creat",
+        Component: ProtectedCreatWork
+      }
     ],
   },
-]);
+]);
\ No newline at end of file
diff --git a/src/routes/withProtect.ts b/src/routes/withProtect.ts
index bcde943..f8ea125 100644
--- a/src/routes/withProtect.ts
+++ b/src/routes/withProtect.ts
@@ -1,10 +1,14 @@
-import React from 'react';
-import ProtectedRoute from './ProtectedRoute'; 
+// src/routes/withProtect.ts
 
-const withProtect = (Component: React.ComponentType) => {
-  return React.createElement(ProtectedRoute, {
-    children: React.createElement(Component)
-  });
+import React from 'react';
+import ProtectedRoute from './ProtectedRoute';
+
+const withProtect = <P extends object>(Component: React.ComponentType<P>) => {
+  return function ProtectedComponent(props: P) {
+    return React.createElement(ProtectedRoute, {
+      children: React.createElement(Component, props)
+    });
+  };
 };
 
 export default withProtect;
\ No newline at end of file