This commit is contained in:
oneao committed 2026-03-03 22:05:25 +08:00
1 parent c0531c1d0a
commit 46106d0c76
13 files changed
+171 -146

No files matched your search

+15 -35
View File
@@ -1,65 +1,45 @@
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()
// navStore.navigateToAuth()
navStore.replace(`/auth`)
return
}
try {
// 1️⃣ 初始化默认空间(如果用户当前没选中空间)
if (!spaceStore.inSpace()) {
const res = await enterDefaultSpaceApi()
if (res.isSuccess) {
if (res.data.space_id === 0) {
// 跳转到空间管理页面
}
spaceStore.setCurrentSpace(res.data)
}
}
if (spaceStore.inSpace())
return
// 2️⃣ 初始化分类
await moneyCategoryStore.init()
const res = await enterDefaultSpaceApi()
if (!res.isSuccess)
return
const space = res.data
if (space.space_id === 0) {
navStore.navigateTo(`/space`)
}
catch (err) {
console.error('App init error:', err)
}
finally {
// 5️⃣ 初始化完成
set({ ready: true })
else {
spaceStore.setCurrentSpace(space)
navStore.replace(`(tabs)`)
}
},
reset: () => {
set({ ready: false })
useMoneyCategoryStore.getState().clear()
useUserStore.getState().clear()
useSpaceStore.getState().clear()
},
+13 -2
View File
@@ -1,5 +1,5 @@
import type { icons } from 'lucide-react-native'
import { router } from 'expo-router'
import { router, useNavigation } from 'expo-router'
import { create } from 'zustand'
export interface NavItem {
@@ -11,8 +11,10 @@ export interface NavItem {
interface NavState {
navMenus: NavItem[]
pathname: string
replace: (p: string) => void
setPathname: (p: string) => void
navigateToAuth: () => void
navigateTo: (p: string) => void
setNavMenus: (menus: NavItem[]) => void
}
@@ -21,7 +23,7 @@ const DEFAULT_NAV_MENUS: NavItem[] = [
{ label: '恋爱记', path: '/love', icon: 'Heart' },
{ label: '聊天', path: '/chat', icon: 'MessageCircle' },
{ label: '个人中心', path: '/user', icon: 'CircleUserRound' },
{ label: '空间管理', path: '/space/manage', icon: 'Earth' },
{ label: '空间管理', path: '/space', icon: 'Earth' },
]
export const useNavStore = create<NavState>()(
@@ -37,6 +39,15 @@ export const useNavStore = create<NavState>()(
router.replace('/auth')
}
},
navigateTo: (p: string) => {
router.navigate(p)
},
replace: (p: string) => {
if (router.canDismiss()) {
router.dismissAll()
}
router.replace(p)
},
setNavMenus: navMenus => set({ navMenus }),
}),
)