西藏巴青项目

user.js 2.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. import { reactive } from 'vue'
  2. import { login as loginApi, logout as logoutApi, getInfo } from '@/api/login'
  3. import { getToken, setToken, removeToken } from '@/utils/auth'
  4. import { joinApiUrl } from '@/config'
  5. const state = reactive({
  6. token: getToken(),
  7. id: '',
  8. name: '',
  9. nickName: '',
  10. avatar: '',
  11. roles: [],
  12. permissions: []
  13. })
  14. function isHttp(url) {
  15. return /^https?:\/\//i.test(url || '')
  16. }
  17. function resolveAvatar(path) {
  18. if (!path) {
  19. return ''
  20. }
  21. if (isHttp(path)) {
  22. return path
  23. }
  24. return joinApiUrl(path)
  25. }
  26. export function useUserStore() {
  27. const login = (userInfo) => {
  28. const username = (userInfo.username || '').trim()
  29. const password = userInfo.password
  30. const code = userInfo.code
  31. const uuid = userInfo.uuid
  32. return loginApi(username, password, code, uuid).then((res) => {
  33. const token = res.token
  34. setToken(token)
  35. state.token = token
  36. return res
  37. })
  38. }
  39. const fetchUserInfo = () => {
  40. return getInfo().then((res) => {
  41. const user = res.user || {}
  42. if (res.roles && res.roles.length > 0) {
  43. state.roles = res.roles
  44. state.permissions = res.permissions || []
  45. } else {
  46. state.roles = ['ROLE_DEFAULT']
  47. state.permissions = []
  48. }
  49. state.id = user.userId
  50. state.name = user.userName
  51. state.nickName = user.nickName
  52. state.avatar = resolveAvatar(user.avatar)
  53. return res
  54. })
  55. }
  56. const logOut = () => {
  57. return logoutApi()
  58. .catch(() => {})
  59. .finally(() => {
  60. state.token = ''
  61. state.roles = []
  62. state.permissions = []
  63. state.id = ''
  64. state.name = ''
  65. state.nickName = ''
  66. state.avatar = ''
  67. removeToken()
  68. })
  69. }
  70. const fedLogOut = () => {
  71. state.token = ''
  72. state.roles = []
  73. state.permissions = []
  74. state.id = ''
  75. state.name = ''
  76. state.nickName = ''
  77. state.avatar = ''
  78. removeToken()
  79. return Promise.resolve()
  80. }
  81. const displayName = () => {
  82. return state.nickName || state.name || ''
  83. }
  84. const isLoggedIn = () => !!state.token
  85. return {
  86. state,
  87. login,
  88. fetchUserInfo,
  89. logOut,
  90. fedLogOut,
  91. displayName,
  92. isLoggedIn
  93. }
  94. }