2025-06-22 00:18:14 +08:00

119 lines
3.0 KiB
TypeScript

import {defineStore} from "pinia";
import {authenticationApi, loginCode, loginPass, weChatLogin} from "@/api/system/login";
import {AUTH_KEY} from "@/config";
interface UserState {
userdata: any;
curXs: any;
token: string;
auth: string[]
}
export const useUserStore = defineStore({
id: "app-user",
state: (): UserState => ({
//用户数据
userdata: '',
// 当前学生
curXs: {},
// token
token: '',
//用户注册信息
auth: [],
}),
getters: {
getToken(): string {
return this.token;
},
getUser(): any {
return this.userdata;
},
getCurXs(): any {
return this.curXs;
},
getAuth(): string[] {
return this.auth;
}
},
actions: {
setToken(token: string) {
this.token = token
},
setUser(data: any) {
this.userdata = data;
},
setCurXs(data: any) {
Object.assign(this.curXs, data);
},
setAuth(data: string[]) {
this.auth = data;
},
/**
* @description: 验证码登录
*/
async codeLogin(params: { phone: number | string, code: number | string }) {
try {
const {result} = await loginCode({phone: params.phone, code: params.code});
this.afterLoginAction(result)
} catch (e) {
console.log(e)
}
},
/**
* @description: 密码登录
*/
async passwordLogin(params: { name: string, password: string }) {
try {
const {result} = await loginPass({username: params.name, password: params.password});
this.afterLoginAction(result)
} catch (e) {
}
},
/**
* @description: 微信登录
*/
async weChatLogin(params: { code: string }) {
try {
const {result} = await weChatLogin({code: params.code})
this.afterLoginAction(result)
} catch (e) {
console.log(e)
}
},
/**
* @description: 登录成功后的操作
*/
afterLoginAction(value: any) {
this.setUser(value)
if (value.xsList && value.xsList.length > 0) {
this.setCurXs(value.xsList[0])
} else {
this.setCurXs({})
}
if (value[AUTH_KEY]) {
this.setToken(value[AUTH_KEY])
}
authenticationApi({userId: value.userId}).then(({result}) => {
if (result) {
this.setAuth(result)
}
})
},
/**
* @description: 注销
*/
logout() {
this.setToken('')
this.setUser('')
this.setCurXs({})
this.setAuth([])
},
},
persist: {
enabled: true,
detached: true,
H5Storage: localStorage
},
});