user.ts 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. import apiUser from '@/api/modules/user'
  2. import router from '@/router'
  3. export const useUserStore = defineStore(
  4. // 唯一ID
  5. 'user',
  6. () => {
  7. const settingsStore = useSettingsStore()
  8. const routeStore = useRouteStore()
  9. const menuStore = useMenuStore()
  10. const tabbarStore = useTabbarStore()
  11. const account = ref(localStorage.account ?? '')
  12. const token = ref(localStorage.token ?? '')
  13. const avatar = ref(localStorage.avatar ?? '')
  14. const permissions = ref<string[]>([])
  15. const isLogin = computed(() => {
  16. if (token.value) {
  17. return true
  18. }
  19. return false
  20. })
  21. // 登录
  22. async function login(params: {
  23. account: string
  24. password: string
  25. }) {
  26. const {code, data} = await apiUser.login(params)
  27. if(code === 0 ){
  28. localStorage.setItem('accessToken', data)
  29. token.value = data
  30. }
  31. }
  32. // 手动登出
  33. function logout(redirect = router.currentRoute.value.fullPath) {
  34. // 此处仅清除计算属性 isLogin 中判断登录状态过期的变量,以保证在弹出登录窗口模式下页面展示依旧正常
  35. localStorage.removeItem('accessToken')
  36. token.value = ''
  37. router.push({
  38. name: 'login',
  39. query: {
  40. ...(redirect !== settingsStore.settings.home.fullPath && router.currentRoute.value.name !== 'login' && { redirect }),
  41. },
  42. }).then(logoutCleanStatus)
  43. }
  44. // 请求登出
  45. function requestLogout() {
  46. // 此处仅清除计算属性 isLogin 中判断登录状态过期的变量,以保证在弹出登录窗口模式下页面展示依旧正常
  47. localStorage.removeItem('accessToken')
  48. token.value = ''
  49. router.push({
  50. name: 'login',
  51. query: {
  52. ...(
  53. router.currentRoute.value.fullPath !== settingsStore.settings.home.fullPath
  54. && router.currentRoute.value.name !== 'login'
  55. && {
  56. redirect: router.currentRoute.value.fullPath,
  57. }
  58. ),
  59. },
  60. }).then(logoutCleanStatus)
  61. }
  62. // 登出后清除状态
  63. function logoutCleanStatus() {
  64. localStorage.removeItem('account')
  65. localStorage.removeItem('avatar')
  66. account.value = ''
  67. avatar.value = ''
  68. permissions.value = []
  69. settingsStore.updateSettings({}, true)
  70. tabbarStore.clean()
  71. routeStore.removeRoutes()
  72. menuStore.setActived(0)
  73. }
  74. // 获取权限
  75. async function getPermissions() {
  76. // const res = await apiUser.permission()
  77. // permissions.value = res.data.permissions
  78. }
  79. // 修改密码
  80. async function editPassword(data: {
  81. password: string
  82. newPassword: string
  83. }) {
  84. await apiUser.passwordEdit(data)
  85. }
  86. return {
  87. account,
  88. token,
  89. avatar,
  90. permissions,
  91. isLogin,
  92. login,
  93. logout,
  94. requestLogout,
  95. getPermissions,
  96. editPassword,
  97. }
  98. },
  99. )