// src/stores/useUserStore.js import { loginByUsername, logout, refreshToken, } from '@/api/user' import { defineStore } from 'pinia' import md5 from 'js-md5' import { ElMessage } from 'element-plus' import { validatenull } from '@/utils/validate' export const useLogin = defineStore('login', { // 存储状态的地方,相当于 Vuex 的 state state: () => ({ token: '', refreshToken: '', tenantId: '', userInfo: '' }), // 相当于 Vuex 的 getters,用于计算状态 getters: { }, // 相当于 Vuex 的 mutations 和 actions,用于同步或异步地修改状态 actions: { //根据用户名登录 LoginByUsername (userInfo = {}) { return new Promise((resolve, reject) => { loginByUsername( userInfo.tenantId, userInfo.deptId, userInfo.roleId, userInfo.username, md5(userInfo.password), userInfo.type, userInfo.key, userInfo.code ) .then(res => { const data = res.data if (data.error_description) { ElMessage({ message: data.error_description, type: 'error', }) } else { this.SET_TOKEN(data.access_token) this.SET_REFRESH_TOKEN(data.refresh_token) this.SET_TENANT_ID(data.tenant_id) this.SET_USER_INFO(data) } resolve() }) .catch(err => { reject(err) }) }) }, SET_TOKEN (token) { this.token = token }, SET_REFRESH_TOKEN (refreshToken) { this.refreshToken = refreshToken }, SET_TENANT_ID (tenantId) { this.tenantId = tenantId }, SET_USER_INFO (userInfo) { this.userInfo = userInfo }, // 登出 LogOut () { return new Promise((resolve, reject) => { logout() .then(() => { this.SET_TOKEN('') this.SET_REFRESH_TOKEN('') this.SET_TENANT_ID('') this.SET_USER_INFO('') resolve() }) .catch((error) => { reject(error) }) }) }, RefreshToken (userInfo = {}) { return new Promise((resolve, reject) => { refreshToken( this.refreshToken, this.tenantId, !validatenull(userInfo) ? userInfo.deptId : this.userInfo.dept_id, !validatenull(userInfo) ? userInfo.roleId : this.userInfo.role_id ) .then(res => { const data = res.data this.SET_TOKEN(data.access_token) this.SET_REFRESH_TOKEN(data.refresh_token) this.SET_USER_INFO(data) resolve() }) .catch(error => { reject(error) }) }) }, removeToken () { this.SET_TOKEN('') }, removeRefreshToken () { this.SET_REFRESH_TOKEN('') } }, persist: { enabled: true, strategies: [ { key: 'token', paths: ['token'], storage: localStorage, }, { key: 'refreshToken', paths: ['refreshToken'], storage: localStorage, }, { key: 'tenantId', paths: ['tenantId'], storage: localStorage, }, { key: 'userInfo', paths: ['userInfo'], storage: localStorage, }, ] } })