user.ts 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  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. 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?: "GYM" | "GYT"
  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 区分 获取token的区分
  33. setToken(appKey === "GYM" ? data : data.access_token)
  34. setUserType(appKey)
  35. return Promise.resolve()
  36. },
  37. /** 获取用户信息 */
  38. async getUserInfo(): Promise<menuType[]> {
  39. const userType = getUserType()
  40. if (!userType) {
  41. return Promise.reject({
  42. code: "500",
  43. data: null,
  44. message: "获取用户信息出错!"
  45. })
  46. }
  47. // GYM 和 GYT 区分 code验证错误码的区分
  48. userType !== "GYM" || setCODE401(5000)
  49. // GYM 和 GYT 区分 获取用户信息的接口区分
  50. const userInfoRes = await httpAjax(userType === "GYM" ? queryUserInfo_gym : getUserInfo_gyt)
  51. if (userInfoRes.code !== 200) {
  52. return Promise.reject(userInfoRes)
  53. }
  54. // GYM 和 GYT 区分 用户信息数据不一样区分
  55. this.userInfo = handleUserInfo(userType, userInfoRes.data)
  56. this.roles = userType as any
  57. // GYM 和 GYT 区分 区分菜单然后分配路由
  58. return Promise.resolve(userType === "GYM" ? menus_gym : menus_gyt)
  59. },
  60. /** 退出登录 */
  61. async loginOut() {
  62. // GYM 和 GYT 区分 区分退出登录
  63. const logoutRes = await httpAjax(this.roles === "GYM" ? logout_gym : logout_gyt)
  64. if (logoutRes.code !== 200) {
  65. return Promise.reject(logoutRes)
  66. }
  67. this.resetUser()
  68. return Promise.resolve(logoutRes)
  69. },
  70. /** 清空所有登录信息,退出 */
  71. resetUser() {
  72. this.userInfo = {}
  73. this.roles = undefined
  74. removeToken()
  75. removeUserType()
  76. resetRouter()
  77. router.push({
  78. path: "/login"
  79. })
  80. }
  81. }
  82. })
  83. export default () => {
  84. return useStore(store)
  85. }
  86. function handleUserInfo(userType: string, userInfo: Record<string, any>) {
  87. let avatar, username, realName, phone
  88. if (userType === "GYM") {
  89. avatar = userInfo.avatar
  90. username = userInfo.username
  91. realName = userInfo.realName
  92. phone = userInfo.phone
  93. } else {
  94. avatar = userInfo.avatar
  95. username = userInfo.nickname
  96. realName = userInfo.realName
  97. phone = userInfo.phone
  98. }
  99. return {
  100. avatar,
  101. username,
  102. realName,
  103. phone
  104. }
  105. }