import { useFetchWrapped } from '~/composables/useFetchWrapped' export const useLoginState = defineStore( 'loginState', () => { const is_logged_in = ref(false) const token = ref(null) const user = ref({} as UserSchema) const checkSession = () => { return new Promise((resolve) => { if (!token.value) return resolve(false) useFetchWrapped>( 'App.User_User.CheckSession', { token: token.value, user_id: user.value.id, } ) .then((res) => { if (res.ret !== 200) { resolve(false) return } resolve(res.data.is_login) // update global state is_logged_in.value = res.data.is_login }) .catch((err) => resolve(false)) }) } const updateProfile = () => { return new Promise((resolve, reject) => { if (!token.value) return reject('token is empty') useFetchWrapped>( 'App.User_User.Profile', { token: token.value, user_id: user.value.id, } ) .then((res) => { if (res.ret !== 200) { reject(res.msg || '未知错误') return } user.value = res.data.profile resolve(res.data.profile) }) .catch((err) => reject(err || '未知错误')) }) } const logout = () => new Promise((resolve) => { token.value = null user.value = {} as UserSchema is_logged_in.value = false resolve() }) return { is_logged_in, token, user, checkSession, updateProfile, logout, } }, { persist: { key: 'xsh_assistant_persisted_state', storage: piniaPluginPersistedstate.localStorage(), paths: ['is_logged_in', 'token', 'user'], }, } )