feat: 本次提交更新内容如下
基础框架完成,测试打包
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
16
nkebao/src/store/createPersistStore.ts
Normal file
16
nkebao/src/store/createPersistStore.ts
Normal 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>)
|
||||
);
|
||||
}
|
||||
@@ -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<UserState>((set) => ({
|
||||
user: null,
|
||||
setUser: (user) => set({ user }),
|
||||
clearUser: () => set({ user: null }),
|
||||
}));
|
||||
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<UserState>(
|
||||
(set) => ({
|
||||
user: null,
|
||||
setUser: (user) => set({ user }),
|
||||
clearUser: () => set({ user: null }),
|
||||
}),
|
||||
'user-store',
|
||||
(state) => ({ user: state.user })
|
||||
);
|
||||
1
nkebao/src/vite-env.d.ts
vendored
Normal file
1
nkebao/src/vite-env.d.ts
vendored
Normal file
@@ -0,0 +1 @@
|
||||
/// <reference types="vite/client" />
|
||||
Reference in New Issue
Block a user