import { queryLogin } from '@/modules/query'; import { create } from 'zustand'; import { toast } from 'sonner'; type UserInfo = { id?: string; username?: string; nickname?: string | null; needChangePassword?: boolean; description?: string | null; type?: 'user' | 'org'; orgs?: string[]; avatar?: string; }; export type LayoutStore = { open: boolean; setOpen: (open: boolean) => void; openUser: boolean; setOpenUser: (openUser: boolean) => void; me?: UserInfo; setMe: (me: UserInfo) => void; getMe: () => Promise; switchOrg: (username?: string) => Promise; isAdmin: boolean; setIsAdmin: (isAdmin: boolean) => void init: () => Promise; }; export const useLayoutStore = create((set, get) => ({ open: false, setOpen: (open) => set({ open }), openUser: false, setOpenUser: (openUser) => set({ openUser }), me: undefined, setMe: (me) => set({ me }), getMe: async () => { const res = await queryLogin.getMe(); if (res.code === 200) { set({ me: res.data }); set({ isAdmin: res.data.orgs?.includes?.('admin') || false }); } }, switchOrg: async (username?: string) => { const res = await queryLogin.switchUser(username || ''); if (res.code === 200) { toast.success('切换成功'); setTimeout(() => { window.location.reload(); }, 1000); } else { toast.error(res.message || '请求失败'); } }, isAdmin: false, setIsAdmin: (isAdmin) => set({ isAdmin }), init: async () => { const token = await queryLogin.getToken() console.log('token', token); if (token) { const user = await queryLogin.checkLocalUser() as UserInfo; console.log('local user', user); if (user) { set({ me: user, isAdmin: user.orgs?.includes?.('admin') || false }); } } } }));