import { defineStore } from 'pinia' import { refreshToken as REFRESHTOKEN } from '~/utils/axios' import router from '@/router' import { getUserInfo } from '~/api/common/index' import { AppMemberUserInfoRespVO } from '~/api/common/types' import MQTTClient from '~/utils/mqttClient' import { socialLoginByCode } from '~/api/pay' import app from '@/main' export default defineStore('useUserStore', { state: () => ({ token: REFRESHTOKEN.getToken().token || '', refreshToken: REFRESHTOKEN.getToken().refreshToken || '', userId: REFRESHTOKEN.getToken().userId || '', userName: REFRESHTOKEN.getToken().userName || '', userInfoRes: (REFRESHTOKEN.getToken().userInfo || {}) as AppMemberUserInfoRespVO, mqttClient: null as MQTTClient | null, }), actions: { setToken(token: string) { this.token = token }, setRefreshToken(refreshToken: string) { this.refreshToken = refreshToken }, setUserId(userId: string) { this.userId = userId }, setUserName(userName: string) { this.userName = userName }, logout() { REFRESHTOKEN.removeToken() if (self === top) { router.push('/index') } else { window.top?.postMessage({ event: 'logout' }, '*') } }, async getUserInfo() { const res = await getUserInfo() if (res.code === 0) { this.userInfoRes = res.data REFRESHTOKEN.setUserInfo(res.data) // 建立连接mqtt this.connectMqtt() } }, // 建立连接mqtt async connectMqtt() { this.mqttClient = new MQTTClient('wss://www.tuxixi.net/mqtt', { clientId: this.userInfoRes.id, }) await this.mqttClient.connect() await this.mqttClient?.subscribe(`zbjk_message_single/${this.userInfoRes.id}`) await this.mqttClient?.subscribe(`zbjk_message_kefu/${this.userInfoRes.id}`) }, async getToken(row: any) { try { // 验证state if (localStorage.getItem('wechat_login_state') !== row.state && localStorage.getItem('qq_login_state') !== row.state) { ElMessage.error('验证失败,请重新登录') return } const res = await socialLoginByCode({ code: row.code, state: row.state, type: Number(row.type), // type: 32-微信开放平台 35-腾讯QQ }) const { code, data } = res if (code === 0 && data.openid) { // 打开登录界面 if (!data.accessToken) { ElMessage.error('因你未绑定手机号,请先绑定手机号') if (app) { app.config.globalProperties.$openLogin('verify', row.code, row.type, row.state) } } else { REFRESHTOKEN.setToken(data.accessToken, data.refreshToken) REFRESHTOKEN.setUserId(data.userId.toString()) // REFRESHTOKEN.setUserName(loginForm.mobile) this.setToken(data.accessToken) this.setUserId(data.userId.toString()) // userStore.setUserName(loginForm.mobile) this.setRefreshToken(data.refreshToken) // 获取信息 await this.getUserInfo() } } else { console.error('获取token失败:', res.msg) } } catch (error) { console.error('getToken error:', error) } }, }, })