import config from '@/config' import storage from '@/utils/storage' import constant from '@/utils/constant' import { isHttp, isEmpty } from "@/utils/validate" import { getInfo, login, logout } from '@/api/login' import { getToken, removeToken, setToken } from '@/utils/auth' import defAva from '@/static/images/profile.jpg' import { ref } from 'vue' import { defineStore } from 'pinia' const baseUrl = config.baseUrl export const useUserStore = defineStore('user', () => { const token = ref(getToken()) const id = ref(storage.get(constant.id)) const name = ref(storage.get(constant.name)) const avatar = ref(storage.get(constant.avatar)) const roles = ref(storage.get(constant.roles)) const permissions = ref(storage.get(constant.permissions)) const SET_TOKEN = (val) => { token.value = val } const SET_ID = (val) => { id.value = val storage.set(constant.id, val) } const SET_NAME = (val) => { name.value = val storage.set(constant.name, val) } const SET_AVATAR = (val) => { avatar.value = val storage.set(constant.avatar, val) } const SET_ROLES = (val) => { roles.value = val storage.set(constant.roles, val) } const SET_PERMISSIONS = (val) => { permissions.value = val storage.set(constant.permissions, val) } // 登录 const loginAction = (userInfo) => { const username = userInfo.username.trim() const password = userInfo.password const code = userInfo.code const uuid = userInfo.uuid return new Promise((resolve, reject) => { login(username, password, code, uuid).then(res => { setToken(res.token) SET_TOKEN(res.token) resolve() }).catch(error => { reject(error) }) }) } // 获取用户信息 const getInfoAction = () => { return new Promise((resolve, reject) => { getInfo().then(res => { const user = res.user let avatar = user.avatar || "" if (!isHttp(avatar)) { avatar = (isEmpty(avatar)) ? defAva : baseUrl + avatar } const userid = (isEmpty(user) || isEmpty(user.userId)) ? "" : user.userId const username = (isEmpty(user) || isEmpty(user.userName)) ? "" : user.userName if (res.roles && res.roles.length > 0) { SET_ROLES(res.roles) SET_PERMISSIONS(res.permissions) } else { SET_ROLES(['ROLE_DEFAULT']) } SET_ID(userid) SET_NAME(username) SET_AVATAR(avatar) resolve(res) }).catch(error => { reject(error) }) }) } // 退出系统 const logOutAction = () => { return new Promise((resolve, reject) => { logout(token.value).then(() => { SET_TOKEN('') SET_ROLES([]) SET_PERMISSIONS([]) removeToken() storage.clean() resolve() }).catch(error => { reject(error) }) }) } return { token, id, name, avatar, roles, permissions, SET_AVATAR, login: loginAction, getInfo: getInfoAction, logOut: logOutAction } })