import { defineStore } from 'pinia'; import type { UserState, providerType } from './types'; import { getUserProfile, login as userLogin, logout as userLogout, login } from '@/api/user/index'; import { clearToken, setCompanyId, setToken } from '@/utils/auth'; import type { LoginParams } from '@/api/user/types'; const useUserStore = defineStore('user', { state: (): UserState => ({ id: '', unionId: '', name: '未登录', nickName: '未登录', image: '', telephone: '', balance: 0, integration: 0, birthday: '' }), persist: true, // persist: { // // 修改存储中使用的键名称,默认为当前 Store的 id // key: 'userState', // // 修改为 sessionStorage,默认为 localStorage // // storage: window.localStorage, // // 部分持久化状态的点符号路径数组,[]意味着没有状态被持久化(默认为undefined,持久化整个状态) // paths: undefined // }, getters: { userInfo(state: UserState): UserState { return { ...state }; } }, actions: { // 设置用户的信息 setUserInfo(partial: Partial) { this.$patch(partial); }, // 重置用户信息 resetInfo() { this.$reset(); }, // 获取用户信息 async info() { const result = await getUserProfile(); this.setUserInfo(result); }, // 异步登录并存储token login(loginForm: LoginParams) { return new Promise(async (resolve, reject) => { try { const result = await userLogin(loginForm); const token = result?.token; if(token) { setToken(token); } resolve(result); } catch (error) { reject(error); } }); }, // Logout async logout() { await userLogout(); this.resetInfo(); clearToken(); }, // 小程序授权登录 authLogin(provider: providerType = 'weixin') { return new Promise((resolve, reject) => { uni.login({ provider, success: async (result: UniApp.LoginRes) => { if(result.code) { const wechatUserInfo = await uni.getUserInfo(); const userInfo = { ...wechatUserInfo.userInfo, encryptedData: wechatUserInfo?.encryptedData, rawData: JSON.parse(wechatUserInfo?.rawData), signature: wechatUserInfo?.signature, iv: wechatUserInfo.iv }; const res = await login({ code: result.code, userInfo: userInfo, referrerUserId: '1727303781559697409' }); this.setUserInfo(res.user); setToken(res.token); setCompanyId(res.user.companyId); resolve(res); } else { reject(new Error(result.errMsg)); } }, fail: (err: any) => { console.error(`login error: ${err}`); reject(err); } }); }); } } }); export default useUserStore;