user.ts 3.4 KB

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