index.ts 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. import { defineStore } from 'pinia'
  2. import { User } from '/admin/types/user'
  3. import http from '/admin/support/http'
  4. import { rememberAuthToken, removeAuthToken } from '/admin/support/helper'
  5. import Message from '/admin/support/message'
  6. import router from '/admin/router'
  7. import { Permission } from '/admin/types/permission'
  8. export const useUserStore = defineStore('UserStore', {
  9. state: (): User => {
  10. return {
  11. id: 0,
  12. username: '',
  13. avatar: '',
  14. email: '',
  15. remember_token: '',
  16. status: 0,
  17. permissions: [] as Permission[],
  18. roles: [] as string[],
  19. }
  20. },
  21. getters: {
  22. getId(): number {
  23. return this.id
  24. },
  25. getNickname(): string {
  26. return this.username
  27. },
  28. getAvatar(): string {
  29. return this.avatar
  30. },
  31. getRoles(): string[] | undefined {
  32. return this.roles
  33. },
  34. getPermissions(): Permission[] | undefined {
  35. return this.permissions
  36. },
  37. },
  38. actions: {
  39. isSuperAdmin(): boolean {
  40. return this.id === 1
  41. },
  42. setUsername(username: string) {
  43. this.username = username
  44. },
  45. setId(id: number) {
  46. this.id = id
  47. },
  48. setRememberToken(token: string) {
  49. this.remember_token = token
  50. },
  51. setAvatar(avatar: string) {
  52. this.avatar = avatar
  53. },
  54. setRoles(roles: string[]) {
  55. this.roles = roles
  56. },
  57. setPermissions(permissions: Permission[]) {
  58. this.permissions = permissions
  59. },
  60. setEmail(email: string) {
  61. this.email = email
  62. },
  63. setStatus(status: number) {
  64. this.status = status
  65. },
  66. /**
  67. * login
  68. *
  69. * @param params
  70. * @returns
  71. */
  72. login(params: Object) {
  73. return new Promise<void>((resolve, reject) => {
  74. http
  75. .post('/login', params)
  76. .then(response => {
  77. const { token } = response.data.data
  78. rememberAuthToken(token)
  79. this.setRememberToken(token)
  80. resolve()
  81. })
  82. .catch(e => {
  83. reject(e)
  84. })
  85. })
  86. },
  87. /**
  88. * logout
  89. */
  90. logout() {
  91. http
  92. .post('/logout')
  93. .then(() => {
  94. removeAuthToken()
  95. this.$reset()
  96. router.push({ path: '/login' })
  97. })
  98. .catch(e => {
  99. Message.error(e.message)
  100. })
  101. },
  102. /**
  103. * user info
  104. */
  105. getUserInfo() {
  106. return new Promise((resolve, reject) => {
  107. http
  108. .get('/user/online')
  109. .then(response => {
  110. const { id, username, email, avatar, permissions, roles, rememberToken, status } = response.data.data
  111. // set user info
  112. this.setId(id)
  113. this.setUsername(username)
  114. this.setEmail(email)
  115. this.setRoles(roles)
  116. this.setRememberToken(rememberToken)
  117. this.setStatus(status)
  118. this.setAvatar(avatar)
  119. this.setPermissions(permissions)
  120. resolve(response.data.data)
  121. })
  122. .catch(e => {
  123. reject(e)
  124. })
  125. })
  126. },
  127. },
  128. })