import { defineStore } from "pinia"; import { authenticationApi, loginCode, loginPass, weChatLogin } from "@/api/system/login"; import { AUTH_KEY } from "@/config"; import { imagUrl } from "@/utils"; 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, openId: '' }); 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, openId: '' }); 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) { for (let i = 0; i < value.xsList.length; i++) { const xs = value.xsList[i]; xs.xstxUrl = imagUrl(xs.xstx) || ""; } 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 }, });