feat(project): init
This commit is contained in:
22
app/store/InfoCheck.tsx
Normal file
22
app/store/InfoCheck.tsx
Normal 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
85
app/store/user.ts
Normal 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",
|
||||
}
|
||||
)
|
||||
)
|
||||
Reference in New Issue
Block a user