Files
Yi.Admin/Yi.Ai.Vue3/src/stores/modules/user.ts

72 lines
1.6 KiB
TypeScript
Raw Normal View History

2025-06-17 22:37:37 +08:00
import type { LoginUser } from '@/api/auth/types';
import { defineStore } from 'pinia';
import { useRouter } from 'vue-router';
export const useUserStore = defineStore(
'user',
() => {
const token = ref<string>();
2025-06-29 00:57:57 +08:00
const refreshToken = ref<string | undefined>();
2025-06-17 22:37:37 +08:00
const router = useRouter();
2025-06-29 00:57:57 +08:00
const setToken = (value: string, refreshValue?: string) => {
// 让接口报401
// token.value = `${value}cdsfds`;
2025-06-17 22:37:37 +08:00
token.value = value;
2025-06-29 00:57:57 +08:00
if (refreshValue) {
refreshToken.value = refreshValue;
}
2025-06-17 22:37:37 +08:00
};
const clearToken = () => {
token.value = void 0;
2025-06-29 00:57:57 +08:00
refreshToken.value = void 0;
2025-06-17 22:37:37 +08:00
};
const userInfo = ref<LoginUser>();
2025-06-21 21:52:44 +08:00
const setUserInfo = (value: any) => {
2025-06-17 22:37:37 +08:00
userInfo.value = value;
};
const clearUserInfo = () => {
userInfo.value = void 0;
};
const logout = async () => {
// 如果需要调用接口,可以在这里调用
clearToken();
clearUserInfo();
router.replace({ name: 'chat' });
};
// 新增:登录弹框状态
const isLoginDialogVisible = ref(false);
// 新增:打开弹框方法
const openLoginDialog = () => {
isLoginDialogVisible.value = true;
};
// 新增:关闭弹框方法(可根据需求扩展)
const closeLoginDialog = () => {
isLoginDialogVisible.value = false;
};
return {
token,
2025-06-29 00:57:57 +08:00
refreshToken,
2025-06-17 22:37:37 +08:00
setToken,
clearToken,
userInfo,
setUserInfo,
clearUserInfo,
logout,
// 新增:暴露弹框状态和方法
isLoginDialogVisible,
openLoginDialog,
closeLoginDialog,
};
},
{
persist: true,
},
);