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; clearMe: () => void; getMe: () => Promise; switchOrg: (username?: string) => Promise; isAdmin: boolean; setIsAdmin: (isAdmin: boolean) => void init: () => Promise; openLinkList: string[]; setOpenLinkList: (openLinkList: string[]) => void; loginPageConfig: { title: string; subtitle: string; footer: string; }; setLoginPageConfig: (config: Partial) => void; links: HeaderLink[]; setLinks: (links: HeaderLink[]) => void; showBaseHeader: boolean; setShowBaseHeader: (showBaseHeader: boolean) => void; }; type HeaderLink = { title?: string; href: string; description?: string; icon?: React.ReactNode; key?: string; isRoot?: boolean; }; export const useLayoutStore = create((set, get) => ({ open: false, setOpen: (open) => set({ open }), openUser: false, setOpenUser: (openUser) => set({ openUser }), me: undefined, setMe: (me) => set({ me }), clearMe: () => { set({ me: undefined, isAdmin: false }); window.location.href = '/root/login/?redirect=' + encodeURIComponent(window.location.href); }, 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(); if (token) { set({ me: {} }) const me = await queryLogin.getMe(); // const user = await queryLogin.checkLocalUser() as UserInfo; const user = me.code === 200 ? me.data : undefined; if (user) { set({ me: user }); set({ isAdmin: user.orgs?.includes?.('admin') || false }); } else { set({ me: undefined, isAdmin: false }); } } }, openLinkList: ['/login'], setOpenLinkList: (openLinkList) => set({ openLinkList }), loginPageConfig: { title: '可视化管理平台', subtitle: '让工具和智能化触手可及', footer: '欢迎使用可视化管理平台 · 连接您的工具', }, setLoginPageConfig: (config) => set((state) => ({ loginPageConfig: { ...state.loginPageConfig, ...config }, })), links: [{ title: '', href: '/', key: 'home' }], setLinks: (links) => set({ links }), showBaseHeader: true, setShowBaseHeader: (showBaseHeader) => set({ showBaseHeader }), }));