user.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import {
  2. login,
  3. logout,
  4. getInfo
  5. } from '@/api/login'
  6. import {
  7. getToken,
  8. setToken,
  9. removeToken
  10. } from '@/utils/auth'
  11. import defAva from '@/assets/images/profile.jpg'
  12. const useUserStore = defineStore(
  13. 'user', {
  14. state: () => ({
  15. token: getToken(),
  16. uid: '',
  17. name: '',
  18. avatar: '',
  19. roles: [],
  20. permissions: []
  21. }),
  22. actions: {
  23. // 登录
  24. login(userInfo) {
  25. const username = userInfo.username.trim()
  26. const password = userInfo.password
  27. const code = userInfo.code
  28. const uuid = userInfo.uuid
  29. return new Promise((resolve, reject) => {
  30. login(username, password, code, uuid).then(res => {
  31. setToken(res.token)
  32. this.token = res.token
  33. resolve()
  34. }).catch(error => {
  35. reject(error)
  36. })
  37. })
  38. },
  39. // 获取用户信息
  40. getInfo() {
  41. return new Promise((resolve, reject) => {
  42. getInfo().then(res => {
  43. const user = res.user
  44. const avatar = (user.avatar == "" || user.avatar == null) ? defAva : import
  45. .meta.env.VITE_APP_BASE_API + user.avatar /* @vite-ignore */;
  46. if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组
  47. this.roles = res.roles
  48. this.permissions = res.permissions
  49. } else {
  50. this.roles = ['ROLE_DEFAULT']
  51. }
  52. this.uid = user.userId;
  53. this.name = user.userName;
  54. this.avatar = avatar;
  55. resolve(res)
  56. }).catch(error => {
  57. reject(error)
  58. })
  59. })
  60. },
  61. // 退出系统
  62. logOut() {
  63. return new Promise((resolve, reject) => {
  64. logout(this.token).then(() => {
  65. this.token = ''
  66. this.roles = []
  67. this.permissions = []
  68. removeToken()
  69. resolve()
  70. }).catch(error => {
  71. reject(error)
  72. })
  73. })
  74. }
  75. }
  76. })
  77. export default useUserStore