_auth.ts 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. import JwtService from "@@/services/JwtService"
  2. import appStore from "@s"
  3. import apis from "@/api"
  4. import type { User } from "@@/types/User"
  5. import type { LoginData } from "@@/types/Account"
  6. import { use } from "echarts"
  7. import router from "@r"
  8. export const useAuthStore = defineStore("auth", () => {
  9. const errors = ref({})
  10. const user = ref<User>({} as User)
  11. const isAuthenticated = ref(!!JwtService.getToken())
  12. const setToken = (authToken: string) => {
  13. isAuthenticated.value = true
  14. user.value.token = authToken
  15. JwtService.saveToken(authToken)
  16. }
  17. const setUser = (data: any) => {
  18. const u = data.user
  19. user.value.tenantId = u.tenantId
  20. appStore.tenantStore.setTenantId(u.tenantId)
  21. user.value.userId = u.userId
  22. user.value.userName = u.userName
  23. user.value.nickName = u.nickName
  24. user.value.email = u.email
  25. user.value.phonenumber = u.phonenumber
  26. user.value.orgId = u.orgId
  27. user.value.orgName = u.org?.orgName
  28. user.value.remark = u.remark
  29. user.value.org = u.org
  30. user.value.role = u.roles ? u.roles[0] : []
  31. changeAvatar(u.avatar)
  32. user.value.permissions = data.permissions || []
  33. if (data.roles && data.roles.length > 0) {
  34. // 验证返回的roles是否是一个非空数组
  35. user.value.roles = data.roles
  36. } else {
  37. user.value.roles = ["ROLE_DEFAULT"]
  38. }
  39. }
  40. function isSuperAdmin() {
  41. return user.value.userName === "admin" || user.value.roles.includes("super_admin")
  42. }
  43. function changeAvatar(avatar: any) {
  44. user.value.avatar = avatar
  45. // avatar == "" || avatar == null
  46. // ? // ? getAssetPath("media/avatars/300-1.jpg")
  47. // undefined
  48. // : import.meta.env.VITE_APP_BASE_API + "/resource/oss" + avatar
  49. }
  50. const purgeAuth = () => {
  51. isAuthenticated.value = false
  52. appStore.tagViewStore.delAllViews()
  53. appStore.bodyConfigStore.resetLayoutConfig()
  54. appStore.tenantStore.setTenantId("")
  55. user.value = {} as User
  56. localCache.remove("tenantId")
  57. JwtService.destroyToken()
  58. }
  59. function login(loginData: LoginData) {
  60. return new Promise((resolve, reject) => {
  61. apis.loginApi
  62. .login(loginData)
  63. .then(({ data }) => {
  64. setToken(data.access_token)
  65. resolve(true)
  66. })
  67. .catch((error) => {
  68. reject(error)
  69. })
  70. })
  71. }
  72. function socialLogin(type: string) {
  73. return apis.loginApi.authBinding(type)
  74. }
  75. function callback(loginData: LoginData) {
  76. return new Promise((resolve, reject) => {
  77. apis.loginApi
  78. .callback(loginData)
  79. .then(({ data }) => {
  80. setToken(data.access_token)
  81. resolve(true)
  82. })
  83. .catch((error) => {
  84. reject(error)
  85. })
  86. })
  87. }
  88. function getInfo() {
  89. return new Promise((resolve, reject) => {
  90. apis.loginApi
  91. .getInfo()
  92. .then(({ data }) => {
  93. setUser(data)
  94. resolve(data)
  95. })
  96. .catch((error) => {
  97. reject(error)
  98. })
  99. })
  100. }
  101. // 退出系统
  102. function logout(isJump = true) {
  103. return new Promise((resolve, reject) => {
  104. apis.loginApi
  105. .logout()
  106. .then(() => {
  107. purgeAuth()
  108. if (isJump) {
  109. router.push(`/login?redirect=${encodeURIComponent(window.location.pathname)}`)
  110. }
  111. resolve(true)
  112. })
  113. .catch((error) => {
  114. reject(error)
  115. })
  116. })
  117. }
  118. return {
  119. errors,
  120. user,
  121. isAuthenticated,
  122. isSuperAdmin,
  123. login,
  124. socialLogin,
  125. callback,
  126. logout,
  127. getInfo,
  128. changeAvatar
  129. }
  130. })