temp
This commit is contained in:
67
src/pages/nav/store.ts
Normal file
67
src/pages/nav/store.ts
Normal file
@@ -0,0 +1,67 @@
|
||||
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 })
|
||||
}
|
||||
}
|
||||
}));
|
||||
|
||||
Reference in New Issue
Block a user