import { query } from '@/modules/query'; import { create } from 'zustand'; import { message } from '@/modules/message'; export const getIsMac = async () => { // @ts-ignore const userAgentData = navigator.userAgentData; if (userAgentData) { const ua = await userAgentData.getHighEntropyValues(['platform']); if (ua.platform === 'macOS') { return true; } } return false; }; export const getIsElectron = () => { // 检查 window.process 和 navigator.userAgent 中是否包含 Electron 信息 return ( // @ts-ignore (typeof window !== 'undefined' && typeof window.process !== 'undefined' && window.process.type === 'renderer') || (typeof navigator === 'object' && typeof navigator.userAgent === 'string' && navigator.userAgent.indexOf('Electron') >= 0) ); }; type PlatfromStore = { isMac: boolean; setIsMac: (mac: boolean) => void; mount: boolean; isElectron: boolean; init: () => Promise; }; export const usePlatformStore = create((set) => { return { isMac: false, mount: false, isElectron: false, setIsMac: (mac) => set({ isMac: mac }), init: async () => { const mac = await getIsMac(); // @ts-ignore const isElectron = getIsElectron(); set({ isMac: isElectron && mac, isElectron: isElectron, mount: true }); }, }; }); type Me = { id?: string; username?: string; needChangePassword?: boolean; role?: string; description?: string; type?: 'user' | 'org'; orgs?: string[]; avatar?: string; }; export type LayoutStore = { open: boolean; setOpen: (open: boolean) => void; me: Me; setMe: (me: Me) => void; getMe: () => Promise; openUser: boolean; setOpenUser: (openUser: boolean) => void; switchOrg: (username?: string, type?: 'user' | 'org') => Promise; }; export const useLayoutStore = create((set) => ({ open: false, setOpen: (open) => set({ open }), me: {}, setMe: (me) => set({ me }), getMe: async () => { const res = await query.post({ path: 'user', key: 'me', }); if (res.code === 200) { set({ me: res.data }); } }, openUser: false, setOpenUser: (openUser) => set({ openUser }), switchOrg: async (username?: string, type?: string) => { const res = await query.post({ path: 'user', key: 'switchOrg', data: { username, type, }, }); if (res.code === 200) { const { token } = res.data; query.saveToken(token); message.success('Switch success'); window.location.reload(); } else { message.error(res.message || 'Request failed'); } }, }));