feat: 本次提交更新内容如下
基础框架完成,测试打包
This commit is contained in:
@@ -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);
|
||||||
|
|
||||||
|
|||||||
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,5 +1,4 @@
|
|||||||
// src/store/user.ts
|
import { createPersistStore } from '@/store/createPersistStore';
|
||||||
import { create } from 'zustand';
|
|
||||||
|
|
||||||
export interface User {
|
export interface User {
|
||||||
name: string;
|
name: string;
|
||||||
@@ -13,8 +12,12 @@ interface UserState {
|
|||||||
clearUser: () => void;
|
clearUser: () => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const useUserStore = create<UserState>((set) => ({
|
export const useUserStore = createPersistStore<UserState>(
|
||||||
user: null,
|
(set) => ({
|
||||||
setUser: (user) => set({ user }),
|
user: null,
|
||||||
clearUser: () => 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