Files
AlgerMusicPlayer/src/renderer/store/modules/user.ts
T

105 lines
2.5 KiB
TypeScript
Raw Normal View History

2025-03-19 22:48:28 +08:00
import { defineStore } from 'pinia';
import { ref } from 'vue';
import { logout } from '@/api/login';
import { getLikedList } from '@/api/music';
import { clearLoginStatus } from '@/utils/auth';
2025-03-19 22:48:28 +08:00
interface UserData {
userId: number;
[key: string]: any;
}
function getLocalStorageItem<T>(key: string, defaultValue: T): T {
try {
const item = localStorage.getItem(key);
return item ? JSON.parse(item) : defaultValue;
} catch {
return defaultValue;
}
}
export const useUserStore = defineStore('user', () => {
// 状态
const user = ref<UserData | null>(getLocalStorageItem('user', null));
const loginType = ref<'token' | 'cookie' | 'qr' | 'uid' | null>(getLocalStorageItem('loginType', null));
2025-03-19 22:48:28 +08:00
const searchValue = ref('');
const searchType = ref(1);
// 方法
const setUser = (userData: UserData) => {
user.value = userData;
localStorage.setItem('user', JSON.stringify(userData));
};
const setLoginType = (type: typeof loginType.value) => {
loginType.value = type;
if (type) {
localStorage.setItem('loginType', type);
} else {
localStorage.removeItem('loginType');
}
};
2025-03-19 22:48:28 +08:00
const handleLogout = async () => {
try {
await logout();
user.value = null;
loginType.value = null;
clearLoginStatus();
2025-05-14 21:18:11 +08:00
// 刷新
window.location.reload();
2025-03-19 22:48:28 +08:00
} catch (error) {
console.error('登出失败:', error);
// 即使API调用失败,也要清除本地状态
user.value = null;
loginType.value = null;
clearLoginStatus();
window.location.reload();
2025-03-19 22:48:28 +08:00
}
};
const setSearchValue = (value: string) => {
searchValue.value = value;
};
const setSearchType = (type: number) => {
searchType.value = type;
};
// 初始化
const initializeUser = async () => {
const savedUser = getLocalStorageItem<UserData | null>('user', null);
if (savedUser) {
user.value = savedUser;
// 如果用户已登录,获取收藏列表
if (localStorage.getItem('token')) {
try {
const { data } = await getLikedList(savedUser.userId);
return data?.ids || [];
} catch (error) {
console.error('获取收藏列表失败:', error);
return [];
}
}
}
return [];
};
return {
// 状态
user,
loginType,
2025-03-19 22:48:28 +08:00
searchValue,
searchType,
// 方法
setUser,
setLoginType,
2025-03-19 22:48:28 +08:00
handleLogout,
setSearchValue,
setSearchType,
initializeUser
};
});