67 lines
1.7 KiB
TypeScript
67 lines
1.7 KiB
TypeScript
import { create } from 'zustand'
|
|
import { enterDefaultSpaceApi } from '@/request/api/space'
|
|
import { getUserSpaceApi } from '@/request/api/user'
|
|
import { useMoneyCategoryStore } from './moneyCategory'
|
|
import { useNavStore } from './navigation'
|
|
import { useSpaceStore } from './space'
|
|
import { useUserStore } from './user'
|
|
|
|
interface AppState {
|
|
ready: boolean
|
|
setReady: (v: boolean) => void
|
|
init: () => Promise<void>
|
|
reset: () => void
|
|
}
|
|
|
|
export const useAppStore = create<AppState>((set, get) => ({
|
|
ready: false,
|
|
|
|
setReady: (v: boolean) => set({ ready: v }),
|
|
|
|
init: async () => {
|
|
if (get().ready)
|
|
return
|
|
|
|
const userStore = useUserStore.getState()
|
|
const navStore = useNavStore.getState()
|
|
const moneyCategoryStore = useMoneyCategoryStore.getState()
|
|
const spaceStore = useSpaceStore.getState()
|
|
|
|
// 如果没登录,跳转到登录页,但不退出初始化
|
|
if (!userStore.isLoggedIn()) {
|
|
navStore.navigateToAuth()
|
|
return
|
|
}
|
|
|
|
try {
|
|
// 1️⃣ 初始化默认空间(如果用户当前没选中空间)
|
|
if (!spaceStore.inSpace()) {
|
|
const res = await enterDefaultSpaceApi()
|
|
if (res.isSuccess) {
|
|
if (res.data.space_id === 0) {
|
|
// 跳转到空间管理页面
|
|
}
|
|
spaceStore.setCurrentSpace(res.data)
|
|
}
|
|
}
|
|
|
|
// 2️⃣ 初始化分类
|
|
await moneyCategoryStore.init()
|
|
}
|
|
catch (err) {
|
|
console.error('App init error:', err)
|
|
}
|
|
finally {
|
|
// 5️⃣ 初始化完成
|
|
set({ ready: true })
|
|
}
|
|
},
|
|
|
|
reset: () => {
|
|
set({ ready: false })
|
|
useMoneyCategoryStore.getState().clear()
|
|
useUserStore.getState().clear()
|
|
useSpaceStore.getState().clear()
|
|
},
|
|
}))
|