116 lines
3.1 KiB
TypeScript
116 lines
3.1 KiB
TypeScript
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 => <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<UserState>) {
|
||
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;
|