user.ts 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. import { defineStore } from "pinia"
  2. import { store } from "../index"
  3. // eslint-disable-next-line @typescript-eslint/no-unused-vars
  4. import { logout_gym, logout_gyt, logout_klx, getUserInfo_gyt, queryUserInfo_gym, getUserInfo_klx } from "@/api/user.api"
  5. import { removeToken, setToken, setUserType, getUserType, removeUserType, setCODE401 } from "@/libs/auth"
  6. import router, { resetRouter } from "@/router"
  7. import { httpAjax, httpAjaxLoading } from "@/plugin/httpAjax"
  8. import { menus_gym, menus_gyt, menus_klx } from "@/config/menus"
  9. interface userDataType {
  10. appKey: string
  11. data: any
  12. }
  13. interface userType {
  14. userInfo: {
  15. avatar?: string
  16. username?: string
  17. realName?: string
  18. phone?: string
  19. }
  20. roles?: rolesType
  21. }
  22. const useStore = defineStore("user", {
  23. state: (): userType => {
  24. return {
  25. userInfo: {}, //用户信息
  26. roles: undefined //用户角色
  27. }
  28. },
  29. actions: {
  30. /** 登录 */
  31. async login({ data, appKey }: userDataType) {
  32. // GYM,GYT,KLX 区分 获取token的区分
  33. const tokenObj = {
  34. GYT: data.access_token,
  35. GYM: data,
  36. KLX: data
  37. }
  38. setToken(tokenObj[appKey as rolesType])
  39. setUserType(appKey)
  40. return Promise.resolve()
  41. },
  42. /** 获取用户信息 */
  43. async getUserInfo(): Promise<menuType[]> {
  44. const userType = getUserType()
  45. if (!userType) {
  46. return Promise.reject({
  47. code: "500",
  48. data: null,
  49. message: "获取用户信息出错!"
  50. })
  51. }
  52. // GYM,GYT,KLX 区分 code验证错误码的区分 管乐团是5000,其他的是403
  53. userType === "GYT" && setCODE401(5000)
  54. // GYM,GYT,KLX 区分 获取用户信息的接口区分
  55. const userInfoApi = {
  56. GYT: getUserInfo_gyt,
  57. GYM: queryUserInfo_gym,
  58. KLX: getUserInfo_klx
  59. }
  60. const userInfoRes = await httpAjaxLoading(userInfoApi[userType])
  61. if (userInfoRes.code !== 200) {
  62. return Promise.reject(userInfoRes)
  63. }
  64. // GYM,GYT,KLX 区分 用户信息数据不一样区分
  65. this.userInfo = handleUserInfo(userType, userInfoRes.data)
  66. this.roles = userType
  67. // GYM,GYT,KLX 区分 区分菜单然后分配路由
  68. const menusObj = {
  69. GYT: menus_gyt,
  70. GYM: menus_gym,
  71. KLX: menus_klx
  72. }
  73. return Promise.resolve(menusObj[userType])
  74. },
  75. /** 退出登录 */
  76. async loginOut() {
  77. // GYM,GYT,KLX 区分 区分退出登录
  78. const logoutApi = {
  79. GYT: logout_gyt,
  80. GYM: logout_gym,
  81. KLX: logout_klx
  82. }
  83. const logoutRes = await httpAjax(logoutApi[this.roles!])
  84. if (logoutRes.code !== 200) {
  85. return Promise.reject(logoutRes)
  86. }
  87. this.resetUser()
  88. return Promise.resolve(logoutRes)
  89. },
  90. /** 清空所有登录信息,退出 */
  91. resetUser() {
  92. this.userInfo = {}
  93. this.roles = undefined
  94. removeToken()
  95. removeUserType()
  96. resetRouter()
  97. router.push({
  98. path: "/login"
  99. })
  100. }
  101. }
  102. })
  103. export default () => {
  104. return useStore(store)
  105. }
  106. function handleUserInfo(userType: rolesType, userInfo: Record<string, any>) {
  107. let avatar, username, realName, phone
  108. if (["GYM", "KLX"].includes(userType)) {
  109. avatar = userInfo.avatar
  110. username = userInfo.username
  111. realName = userInfo.realName
  112. phone = userInfo.phone
  113. } else {
  114. avatar = userInfo.avatar
  115. username = userInfo.nickname
  116. realName = userInfo.realName
  117. phone = userInfo.phone
  118. }
  119. return {
  120. avatar,
  121. username,
  122. realName,
  123. phone
  124. }
  125. }