user.ts 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import { defineStore } from "pinia"
  2. import { removeToken, setToken } from "@/libs/auth"
  3. import router from "@/router"
  4. import { httpAjax } from "@/plugins/httpAjax"
  5. import { store } from "./index"
  6. import { getUserInfoApi } from "@/api/user"
  7. import { getCurrentUrlParams, normalizeAuthorization } from "@/utils/urlParams"
  8. interface userType {
  9. userInfo: {
  10. nickname?: string
  11. phone?: string
  12. }
  13. roles: ""
  14. }
  15. const useStore = defineStore("user", {
  16. state: (): userType => {
  17. return {
  18. userInfo: {}, //用户信息
  19. roles: "" //用户角色
  20. }
  21. },
  22. actions: {
  23. /** 登录 */
  24. async login() {
  25. const token = normalizeAuthorization(getCurrentUrlParams().get("Authorization"))
  26. token && setToken(token)
  27. },
  28. /** 获取用户信息 */
  29. async getUserInfo() {
  30. const userInfoRes = await httpAjax(getUserInfoApi)
  31. if (userInfoRes.code !== 200) {
  32. return Promise.reject(userInfoRes)
  33. }
  34. const userInfo = userInfoRes.data || {}
  35. if (!userInfo.id) {
  36. return Promise.reject({
  37. code: "500",
  38. data: null,
  39. message: "获取用户信息出错,请联系管理员!"
  40. })
  41. }
  42. this.userInfo = userInfo
  43. this.roles = userInfo.id
  44. return Promise.resolve()
  45. },
  46. /** 退出登录 */
  47. async loginOut() {
  48. this.resetUser()
  49. return Promise.resolve()
  50. },
  51. /** 清空所有登录信息,退出 */
  52. resetUser() {
  53. this.userInfo = {}
  54. this.roles = ""
  55. removeToken()
  56. router.push({
  57. path: "/login"
  58. })
  59. }
  60. }
  61. })
  62. export default () => {
  63. return useStore(store)
  64. }