| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- import { reactive } from 'vue'
- import { login as loginApi, logout as logoutApi, getInfo } from '@/api/login'
- import { getToken, setToken, removeToken } from '@/utils/auth'
- import { joinApiUrl } from '@/config'
- const state = reactive({
- token: getToken(),
- id: '',
- name: '',
- nickName: '',
- avatar: '',
- roles: [],
- permissions: []
- })
- function isHttp(url) {
- return /^https?:\/\//i.test(url || '')
- }
- function resolveAvatar(path) {
- if (!path) {
- return ''
- }
- if (isHttp(path)) {
- return path
- }
- return joinApiUrl(path)
- }
- export function useUserStore() {
- const login = (userInfo) => {
- const username = (userInfo.username || '').trim()
- const password = userInfo.password
- const code = userInfo.code
- const uuid = userInfo.uuid
- return loginApi(username, password, code, uuid).then((res) => {
- const token = res.token
- setToken(token)
- state.token = token
- return res
- })
- }
- const fetchUserInfo = () => {
- return getInfo().then((res) => {
- const user = res.user || {}
- if (res.roles && res.roles.length > 0) {
- state.roles = res.roles
- state.permissions = res.permissions || []
- } else {
- state.roles = ['ROLE_DEFAULT']
- state.permissions = []
- }
- state.id = user.userId
- state.name = user.userName
- state.nickName = user.nickName
- state.avatar = resolveAvatar(user.avatar)
- return res
- })
- }
- const logOut = () => {
- return logoutApi()
- .catch(() => {})
- .finally(() => {
- state.token = ''
- state.roles = []
- state.permissions = []
- state.id = ''
- state.name = ''
- state.nickName = ''
- state.avatar = ''
- removeToken()
- })
- }
- const fedLogOut = () => {
- state.token = ''
- state.roles = []
- state.permissions = []
- state.id = ''
- state.name = ''
- state.nickName = ''
- state.avatar = ''
- removeToken()
- return Promise.resolve()
- }
- const displayName = () => {
- return state.nickName || state.name || ''
- }
- const isLoggedIn = () => !!state.token
- return {
- state,
- login,
- fetchUserInfo,
- logOut,
- fedLogOut,
- displayName,
- isLoggedIn
- }
- }
|