user.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import { defineStore, acceptHMRUpdate } from 'pinia'
  2. import { current, login } from '@/api/user'
  3. import { setToken, removeToken, setCode, removeCode } from '@/utils/auth'
  4. import { useRouteStore } from '@/store/router'
  5. import { useAppStore } from '@/store/app'
  6. import { oidcAuth, oidcQuery } from '@/api/login'
  7. export const useUserStore = defineStore({
  8. id: 'user',
  9. state: () => ({
  10. nickname: '',
  11. username: '',
  12. email: '',
  13. token: '',
  14. role: '',
  15. avatar: '',
  16. route_names: [],
  17. }),
  18. actions: {
  19. logout () {
  20. removeToken()
  21. removeCode()
  22. this.$patch({
  23. name: '',
  24. role: {},
  25. })
  26. },
  27. saveUserData (userData) {
  28. // useAppStore().getAppConfig()
  29. setToken(userData.token)
  30. //
  31. localStorage.setItem('user_info', JSON.stringify({ name: userData.username }))
  32. this.$patch({
  33. ...userData,
  34. })
  35. if (userData.route_names && userData.route_names.length) {
  36. useRouteStore().addRoutes(userData.route_names)
  37. }
  38. },
  39. async login (form) {
  40. const res = await login(form).catch(e => e)
  41. console.log('login', res)
  42. if (!res.code) {
  43. useAppStore().loadConfig()
  44. const userData = res.data
  45. this.saveUserData(userData)
  46. return userData
  47. } else {
  48. return Promise.reject(res)
  49. }
  50. },
  51. async info () {
  52. const res = await current().catch(_ => false)
  53. if (res) {
  54. useAppStore().loadConfig()
  55. const userData = res.data
  56. setToken(userData.token)
  57. this.$patch({
  58. ...userData,
  59. })
  60. useRouteStore().addRoutes(userData.route_names)
  61. return userData
  62. }
  63. return false
  64. },
  65. async oidc (provider, platform, browser) {
  66. // oidc data need to be implement
  67. const data = {
  68. deviceInfo: {
  69. name: navigator.userAgent, // 使用浏览器的 User-Agent 作为设备名
  70. os: platform, // 获取操作系统信息
  71. type: 'webadmin', // any vaule
  72. },
  73. id: `${platform}-${browser}`,
  74. op: provider, // 传入的 provider
  75. uuid: '',//crypto.randomUUID(), // 自动生成 UUID
  76. }
  77. const res = await oidcAuth(data).catch(_ => false)
  78. if (res) {
  79. const { code, url } = res.data
  80. setCode(code)
  81. if (provider == 'webauth') {
  82. window.open(url)
  83. } else {
  84. window.location.href = url
  85. }
  86. }
  87. },
  88. async query (code) {
  89. const params = { 'code': code, uuid: '' }
  90. const res = await oidcQuery(params).catch(_ => false)
  91. if (res) {
  92. removeCode()
  93. useAppStore().loadConfig()
  94. const userData = res.data
  95. this.saveUserData(userData)
  96. return userData
  97. }
  98. return false
  99. },
  100. },
  101. })
  102. if (import.meta.hot) {
  103. import.meta.hot.accept(acceptHMRUpdate(useUserStore, import.meta.hot))
  104. }