feat(project): init

This commit is contained in:
2026-02-03 18:05:47 +08:00
commit f37a119eff
188 changed files with 29246 additions and 0 deletions

22
app/store/InfoCheck.tsx Normal file
View File

@@ -0,0 +1,22 @@
"use client"
import { usePathname } from "next/navigation"
import { useEffect } from "react"
import { useUserStore } from "@/app/store/user"
export function InfoCheck() {
const pathname = usePathname()
const user_info = useUserStore.getState().user_info
useEffect(() => {
if (pathname.startsWith("/login")) {
return
}
if (!user_info.account) {
// tauri 打包后, 使用router.push跳转路由不执行会导致白屏
window.location.href = "/login"
}
}, [pathname, user_info.account])
return <></>
}

85
app/store/user.ts Normal file
View File

@@ -0,0 +1,85 @@
import { create } from "zustand"
import { persist } from "zustand/middleware"
interface RbacDataItem {
app: string
cat: string
platform: string
tenant: string
permission: {
[x: string]: {
[y: string]: [boolean, any, string]
}
}
}
interface UserState {
tenant: string
user_info: {
[x: string]: string
}
rbac: {
data: RbacDataItem[]
}
needResetPassword: boolean
access_token: string
refresh_token: string
setUserInfo: (
tenant: string,
user_info: {
[x: string]: string
},
rbac: {
data: RbacDataItem[]
}
) => void
removeUserInfo: () => void
refreshToken: (params: {
access_token: string
refresh_token: string
}) => void
setNeedResetPassword: (needResetPassword: boolean) => void
}
const initialUserState = {
tenant: "",
user_info: {},
rbac: {
data: [],
},
needResetPassword: false,
access_token: "",
refresh_token: "",
}
export const useUserStore = create(
persist<UserState>(
(set) => ({
tenant: initialUserState.tenant,
user_info: initialUserState.user_info,
rbac: initialUserState.rbac,
needResetPassword: initialUserState.needResetPassword,
access_token: initialUserState.access_token,
refresh_token: initialUserState.refresh_token,
setUserInfo: (tenant, user_info, rbac) =>
set((state) => {
return { ...state, tenant: tenant, user_info: user_info, rbac: rbac }
}),
removeUserInfo: () =>
set((state) => {
return { ...state, ...initialUserState }
}),
setNeedResetPassword: (needResetPassword) =>
set((state) => {
return { ...state, needResetPassword: needResetPassword }
}),
refreshToken: ({ access_token, refresh_token }) =>
set((state) => {
return { ...state, access_token, refresh_token }
}),
}),
{
name: "user-store",
}
)
)