feat: 本次提交更新内容如下

基础框架完成,测试打包
This commit is contained in:
笔记本里的永平
2025-07-17 22:42:24 +08:00
parent 9d18af22f1
commit f39a33819e
4 changed files with 58 additions and 28 deletions

View File

@@ -1,10 +1,23 @@
import React from "react"; import React from "react";
import { BrowserRouter, useRoutes } from "react-router-dom"; import { BrowserRouter, useRoutes, RouteObject } from "react-router-dom";
import homeRoutes from "./module/home";
import aboutRoutes from "./module/about";
import PermissionRoute from "./permissionRoute"; 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) { if (route.auth) {
return { return {
...route, ...route,
@@ -18,10 +31,7 @@ function wrapWithPermission(route) {
return route; return route;
} }
const routes = [ const routes = allRoutes.map(wrapWithPermission);
...homeRoutes.map(wrapWithPermission),
...aboutRoutes.map(wrapWithPermission),
];
const AppRoutes = () => useRoutes(routes); const AppRoutes = () => useRoutes(routes);

View File

@@ -0,0 +1,16 @@
// src/store/createPersistStore.ts
import { create } from 'zustand';
import { persist, PersistOptions } from 'zustand/middleware';
export function createPersistStore<T>(
createState: (set: any, get: any) => T,
name: string,
partialize?: (state: T) => Partial<T>
) {
return create<T>()(
persist(createState, {
name,
partialize,
} as PersistOptions<T>)
);
}

View File

@@ -1,20 +1,23 @@
// src/store/user.ts import { createPersistStore } from '@/store/createPersistStore';
import { create } from 'zustand';
export interface User {
export interface User { name: string;
name: string; role: string;
role: string; token: string;
token: string; }
}
interface UserState {
interface UserState { user: User | null;
user: User | null; setUser: (user: User) => void;
setUser: (user: User) => void; clearUser: () => void;
clearUser: () => void; }
}
export const useUserStore = createPersistStore<UserState>(
export const useUserStore = create<UserState>((set) => ({ (set) => ({
user: null, user: null,
setUser: (user) => set({ user }), setUser: (user) => set({ user }),
clearUser: () => set({ user: null }), clearUser: () => set({ user: null }),
})); }),
'user-store',
(state) => ({ user: state.user })
);

1
nkebao/src/vite-env.d.ts vendored Normal file
View File

@@ -0,0 +1 @@
/// <reference types="vite/client" />