Files
kevisual-home/src/pages/nav/store.ts
2026-03-11 02:32:58 +08:00

68 lines
1.8 KiB
TypeScript

import { basename, wrapBasename } from '@/modules/basename';
import { queryLogin } from '@/modules/query';
import { create } from 'zustand';
interface UserState {
user: {
avatar?: string;
description?: string;
id?: string;
needChangePassword?: boolean;
orgs?: string[];
type?: string;
username?: string;
canChangeUsername?: boolean;
} | null;
open: boolean;
setOpen: (open: boolean) => void;
setUser: (user: UserState['user']) => void;
clearUser: () => Promise<void>;
queryUser: () => void;
queryMe: (token?: string) => void;
init: () => void;
}
export const useUserStore = create<UserState>((set, get) => ({
user: null,
open: false,
setOpen: (open) => set({ open }),
setUser: (user) => set({ user }),
clearUser: async () => {
await queryLogin.logout()
set({ user: null });
},
queryUser: async () => {
const user = await queryLogin.checkLocalUser();
console.log('查询到的用户信息:', user);
if (!user) {
const token = localStorage.getItem('token');
if (token) {
get().queryMe(token);
}
} else {
set({ user });
}
},
queryMe: async (token?: string) => {
const res = await queryLogin.getMe(token);
console.log('获取到的用户信息:', res);
if (res.code === 200) {
set({ user: res.data || null });
const canChangeUsername = res.data?.canChangeUsername ?? false;
if (canChangeUsername) {
// 打开修改用户名的页面
window.open(wrapBasename('/first'), '_blank');
}
}
},
init: () => {
const url = new URL(window.location.href);
const code = url.searchParams.get('code');
const state = url.searchParams.get('state');
if (code && state) {
set({ open: true })
}
}
}));