西藏巴青项目

user.js 2.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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 { resolveResourceUrl } from '@/utils/resourceUrl'
  5. const state = reactive({
  6. token: getToken(),
  7. id: '',
  8. name: '',
  9. nickName: '',
  10. avatar: '',
  11. roles: [],
  12. permissions: []
  13. })
  14. function resolveAvatar(path) {
  15. return resolveResourceUrl(path)
  16. }
  17. export function useUserStore() {
  18. const login = (userInfo) => {
  19. const username = (userInfo.username || '').trim()
  20. const password = userInfo.password
  21. const code = userInfo.code
  22. const uuid = userInfo.uuid
  23. return loginApi(username, password, code, uuid).then((res) => {
  24. const token = res.token
  25. setToken(token)
  26. state.token = token
  27. return res
  28. })
  29. }
  30. const fetchUserInfo = () => {
  31. return getInfo().then((res) => {
  32. const user = res.user || {}
  33. if (res.roles && res.roles.length > 0) {
  34. state.roles = res.roles
  35. state.permissions = res.permissions || []
  36. } else {
  37. state.roles = ['ROLE_DEFAULT']
  38. state.permissions = []
  39. }
  40. state.id = user.userId
  41. state.name = user.userName
  42. state.nickName = user.nickName
  43. state.avatar = resolveAvatar(user.avatar)
  44. return res
  45. })
  46. }
  47. const logOut = () => {
  48. return logoutApi()
  49. .catch(() => {})
  50. .finally(() => {
  51. state.token = ''
  52. state.roles = []
  53. state.permissions = []
  54. state.id = ''
  55. state.name = ''
  56. state.nickName = ''
  57. state.avatar = ''
  58. removeToken()
  59. })
  60. }
  61. const fedLogOut = () => {
  62. state.token = ''
  63. state.roles = []
  64. state.permissions = []
  65. state.id = ''
  66. state.name = ''
  67. state.nickName = ''
  68. state.avatar = ''
  69. removeToken()
  70. return Promise.resolve()
  71. }
  72. const displayName = () => {
  73. return state.nickName || state.name || ''
  74. }
  75. const isLoggedIn = () => !!state.token
  76. return {
  77. state,
  78. login,
  79. fetchUserInfo,
  80. logOut,
  81. fedLogOut,
  82. displayName,
  83. isLoggedIn
  84. }
  85. }