user.ts 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import { defineStore } from 'pinia'
  2. import { store } from '../index'
  3. import { UserLoginType, UserType } from '@/api/login/types'
  4. import { ElMessageBox } from 'element-plus'
  5. import { useI18n } from '@/hooks/web/useI18n'
  6. import { useTagsViewStore } from './tagsView'
  7. import router from '@/router'
  8. interface UserState {
  9. userInfo?: UserType
  10. tokenKey: string
  11. token: string
  12. roleRouters?: string[] | AppCustomRouteRecordRaw[]
  13. rememberMe: boolean
  14. loginInfo?: UserLoginType
  15. }
  16. export const useUserStore = defineStore('user', {
  17. state: (): UserState => {
  18. return {
  19. userInfo: undefined,
  20. tokenKey: 'Authorization',
  21. token: '',
  22. roleRouters: undefined,
  23. // 记住我
  24. rememberMe: true,
  25. loginInfo: undefined
  26. }
  27. },
  28. getters: {
  29. getTokenKey(): string {
  30. return this.tokenKey
  31. },
  32. getToken(): string {
  33. return this.token
  34. },
  35. getUserInfo(): UserType | undefined {
  36. return this.userInfo
  37. },
  38. getRoleRouters(): string[] | AppCustomRouteRecordRaw[] | undefined {
  39. return this.roleRouters
  40. },
  41. getRememberMe(): boolean {
  42. return this.rememberMe
  43. },
  44. getLoginInfo(): UserLoginType | undefined {
  45. return this.loginInfo
  46. }
  47. },
  48. actions: {
  49. setTokenKey(tokenKey: string) {
  50. this.tokenKey = tokenKey
  51. },
  52. setToken(token: string) {
  53. this.token = token
  54. },
  55. setUserInfo(userInfo?: UserType) {
  56. this.userInfo = userInfo
  57. },
  58. setRoleRouters(roleRouters: string[] | AppCustomRouteRecordRaw[]) {
  59. this.roleRouters = roleRouters
  60. },
  61. logoutConfirm() {
  62. const { t } = useI18n()
  63. ElMessageBox.confirm(t('common.loginOutMessage'), t('common.reminder'), {
  64. confirmButtonText: t('common.ok'),
  65. cancelButtonText: t('common.cancel'),
  66. type: 'warning'
  67. })
  68. .then(() => {
  69. this.reset()
  70. })
  71. .catch(() => {})
  72. },
  73. reset() {
  74. const tagsViewStore = useTagsViewStore()
  75. tagsViewStore.delAllViews()
  76. this.setToken('')
  77. this.setUserInfo(undefined)
  78. this.setRoleRouters([])
  79. router.replace('/login')
  80. },
  81. logout() {
  82. this.reset()
  83. },
  84. setRememberMe(rememberMe: boolean) {
  85. this.rememberMe = rememberMe
  86. },
  87. setLoginInfo(loginInfo: UserLoginType | undefined) {
  88. this.loginInfo = loginInfo
  89. }
  90. },
  91. persist: true
  92. })
  93. export const useUserStoreWithOut = () => {
  94. return useUserStore(store)
  95. }