user.ts 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import { defineStore } from 'pinia'
  2. import { UserState } from '@/stores/interface'
  3. import piniaPersistConfig from '@/stores/helper/persist'
  4. import { getToken, setToken, removeToken } from '@/utils/token'
  5. import { loginApi, getInfoApi, logoutApi } from '@/api/modules/login'
  6. import defAva from '@/assets/images/touxiang.png'
  7. import { Login } from '@/api/interface/index'
  8. export const useUserStore = defineStore('admin-user', {
  9. state: (): UserState => ({
  10. token: getToken(),
  11. name: '',
  12. avatar: '',
  13. roles: [],
  14. permissions: []
  15. }),
  16. getters: {},
  17. actions: {
  18. userLogin(userInfo: Login.ReqLoginForm) {
  19. return new Promise<any>((resolve, reject) => {
  20. loginApi(userInfo)
  21. .then((res: any) => {
  22. if (res.code === 200) {
  23. const data = res.data
  24. setToken(data.access_token)
  25. this.token = data.access_token
  26. resolve(res)
  27. } else resolve({ code: 500 })
  28. })
  29. .catch((error: any) => {
  30. reject(error)
  31. })
  32. })
  33. },
  34. getInfo() {
  35. return new Promise((resolve, reject) => {
  36. getInfoApi()
  37. .then((res: any) => {
  38. if (res.code === 200) {
  39. const data = res.data
  40. const user = data.user
  41. const avatar = user.avatar == '' || user.avatar == null ? defAva : import.meta.env.VITE_APP_BASE_API + user.avatar
  42. if (data.roles && data.roles.length > 0) {
  43. // 验证返回的roles是否是一个非空数组
  44. this.roles = data.roles
  45. this.permissions = data.permissions
  46. } else {
  47. this.roles = ['ROLE_DEFAULT']
  48. }
  49. this.name = user.userName
  50. this.avatar = avatar
  51. }
  52. resolve(res)
  53. })
  54. .catch(error => {
  55. reject(error)
  56. })
  57. })
  58. },
  59. // 退出系统
  60. logOut() {
  61. return new Promise((resolve, reject) => {
  62. logoutApi()
  63. .then(() => {
  64. this.token = ''
  65. this.roles = []
  66. this.permissions = []
  67. removeToken()
  68. resolve(1)
  69. })
  70. .catch(error => {
  71. reject(error)
  72. })
  73. })
  74. }
  75. },
  76. persist: piniaPersistConfig('admin-token')
  77. })