suke-mp/src/store/modules/user/index.ts

116 lines
3.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;