import { defineStore } from 'pinia';
|
import { ref, computed } from 'vue';
|
|
interface UserInfo {
|
token: string;
|
userName: string;
|
userTrueName: string;
|
img: string;
|
}
|
|
export const useUserStore = defineStore('user', () => {
|
const userInfo = ref<UserInfo | null>(null);
|
const token = ref<string>('');
|
const isLogin = computed(() => !!token.value);
|
|
function init() {
|
const stored = localStorage.getItem('user');
|
if (stored) {
|
try {
|
const info = JSON.parse(stored) as UserInfo;
|
userInfo.value = info;
|
token.value = info?.token || '';
|
} catch {
|
token.value = '';
|
}
|
}
|
}
|
|
function setUserInfo(info: UserInfo) {
|
userInfo.value = info;
|
token.value = info?.token || '';
|
localStorage.setItem('user', JSON.stringify(info));
|
}
|
|
function clearUserInfo() {
|
userInfo.value = null;
|
token.value = '';
|
localStorage.removeItem('user');
|
}
|
|
init();
|
return { userInfo, token, isLogin, setUserInfo, clearUserInfo };
|
});
|