You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
3.0 KiB
118 lines
3.0 KiB
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
|
|
}
|
|
})
|