diff --git a/nkebao/src/router/index.tsx b/nkebao/src/router/index.tsx index 0c58db7e..2c7c0311 100644 --- a/nkebao/src/router/index.tsx +++ b/nkebao/src/router/index.tsx @@ -1,10 +1,23 @@ import React from "react"; -import { BrowserRouter, useRoutes } from "react-router-dom"; -import homeRoutes from "./module/home"; -import aboutRoutes from "./module/about"; +import { BrowserRouter, useRoutes, RouteObject } from "react-router-dom"; import PermissionRoute from "./permissionRoute"; -function wrapWithPermission(route) { +// 动态导入所有 module 下的 ts/tsx 路由模块 +const modules = import.meta.glob("./module/*.{ts,tsx}", { eager: true }); + +// 合并所有模块的默认导出(假设每个模块都是 export default 路由数组) +const allRoutes: (RouteObject & { auth?: boolean; requiredRole?: string })[] = + []; +Object.values(modules).forEach((mod: any) => { + if (Array.isArray(mod.default)) { + allRoutes.push(...mod.default); + } +}); + +// 权限包装 +function wrapWithPermission( + route: RouteObject & { auth?: boolean; requiredRole?: string } +) { if (route.auth) { return { ...route, @@ -18,10 +31,7 @@ function wrapWithPermission(route) { return route; } -const routes = [ - ...homeRoutes.map(wrapWithPermission), - ...aboutRoutes.map(wrapWithPermission), -]; +const routes = allRoutes.map(wrapWithPermission); const AppRoutes = () => useRoutes(routes); diff --git a/nkebao/src/store/createPersistStore.ts b/nkebao/src/store/createPersistStore.ts new file mode 100644 index 00000000..cdfbbb07 --- /dev/null +++ b/nkebao/src/store/createPersistStore.ts @@ -0,0 +1,16 @@ +// src/store/createPersistStore.ts +import { create } from 'zustand'; +import { persist, PersistOptions } from 'zustand/middleware'; + +export function createPersistStore( + createState: (set: any, get: any) => T, + name: string, + partialize?: (state: T) => Partial +) { + return create()( + persist(createState, { + name, + partialize, + } as PersistOptions) + ); +} diff --git a/nkebao/src/store/module/user.ts b/nkebao/src/store/module/user.ts index 63202e04..876c8a77 100644 --- a/nkebao/src/store/module/user.ts +++ b/nkebao/src/store/module/user.ts @@ -1,20 +1,23 @@ -// src/store/user.ts -import { create } from 'zustand'; - -export interface User { - name: string; - role: string; - token: string; -} - -interface UserState { - user: User | null; - setUser: (user: User) => void; - clearUser: () => void; -} - -export const useUserStore = create((set) => ({ - user: null, - setUser: (user) => set({ user }), - clearUser: () => set({ user: null }), -})); \ No newline at end of file +import { createPersistStore } from '@/store/createPersistStore'; + +export interface User { + name: string; + role: string; + token: string; +} + +interface UserState { + user: User | null; + setUser: (user: User) => void; + clearUser: () => void; +} + +export const useUserStore = createPersistStore( + (set) => ({ + user: null, + setUser: (user) => set({ user }), + clearUser: () => set({ user: null }), + }), + 'user-store', + (state) => ({ user: state.user }) +); \ No newline at end of file diff --git a/nkebao/src/vite-env.d.ts b/nkebao/src/vite-env.d.ts new file mode 100644 index 00000000..7d0ff9ef --- /dev/null +++ b/nkebao/src/vite-env.d.ts @@ -0,0 +1 @@ +///