user.ts 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. import { to } from 'await-to-js'
  2. import defAva from '@/assets/images/profile.jpg'
  3. import store from '@/store'
  4. import { getToken, removeToken, removeName,setToken, setName } from '@/utils/auth'
  5. import { login as loginApi, logout as logoutApi, getInfo as getUserInfo, loginWithoutPass as loginWithoutPassApi } from '@/api/login'
  6. import { LoginData } from '@/api/types'
  7. import { listByIds } from '@/api/system/oss'
  8. export const useUserStore = defineStore('user', () => {
  9. const token = ref(getToken())
  10. const name = ref('')
  11. const nickname = ref('')
  12. const userId = ref<string | number>('')
  13. const avatar = ref('')
  14. const roles = ref<Array<string>>([]) // 用户角色编码集合 → 判断路由权限
  15. const permissions = ref<Array<string>>([]) // 用户权限编码集合 → 判断按钮权限
  16. /**
  17. * 登录
  18. * @param userInfo
  19. * @returns
  20. */
  21. const login = async (userInfo: LoginData): Promise<void> => {
  22. const [err, res] = await to(loginApi(userInfo))
  23. if (res) {
  24. const data = res.data
  25. setToken(data.token)
  26. token.value = data.token
  27. return Promise.resolve()
  28. }
  29. return Promise.reject(err)
  30. }
  31. const loginNoPass = async (userInfo: LoginData): Promise<void> => {
  32. const [err, res] = await to(loginWithoutPassApi(userInfo))
  33. if (res) {
  34. debugger
  35. const data = res.data
  36. setToken(data.token)
  37. token.value = data.token
  38. return Promise.resolve()
  39. }
  40. return Promise.reject(err)
  41. }
  42. // 获取用户信息
  43. const getInfo = async (): Promise<void> => {
  44. const [err, res] = await to(getUserInfo())
  45. if (res) {
  46. const data = res.data
  47. const user = data.user
  48. const profile = user.avatar
  49. if (data.roles && data.roles.length > 0) {
  50. // 验证返回的roles是否是一个非空数组
  51. roles.value = data.roles
  52. permissions.value = data.permissions
  53. console.log('##########################permissions', JSON.stringify(data.permissions))
  54. } else {
  55. roles.value = ['ROLE_DEFAULT']
  56. }
  57. name.value = user.userName
  58. setName(user.userName)
  59. nickname.value = user.nickName
  60. if (profile) {
  61. const ossObj = await listByIds(profile)
  62. console.log('ossObj', ossObj)
  63. if (ossObj.data) avatar.value = ossObj.data[0].url
  64. console.log(avatar.value)
  65. } else {
  66. avatar.value = defAva
  67. }
  68. userId.value = user.id
  69. return Promise.resolve()
  70. }
  71. return Promise.reject(err)
  72. }
  73. // 注销
  74. const logout = async (): Promise<void> => {
  75. await logoutApi()
  76. token.value = ''
  77. roles.value = []
  78. permissions.value = []
  79. removeToken()
  80. removeName()
  81. }
  82. const clearUserInfo = async (): Promise<void> => {
  83. token.value = ''
  84. roles.value = []
  85. permissions.value = []
  86. removeToken()
  87. removeName()
  88. }
  89. return {
  90. userId,
  91. token,
  92. nickname,
  93. avatar,
  94. roles,
  95. permissions,
  96. login,
  97. getInfo,
  98. logout,
  99. loginNoPass,
  100. clearUserInfo
  101. }
  102. })
  103. export default useUserStore
  104. // 非setup
  105. export function useUserStoreHook() {
  106. return useUserStore(store)
  107. }