user.ts 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. import router from '@/router'
  2. import useMenuStore from './menu'
  3. import useRouteStore from './route'
  4. import useSettingsStore from './settings'
  5. import useTabbarStore from './tabbar'
  6. import api from '@/api'
  7. import { getRandomImage } from '@/utils/composables/imageUtils';
  8. // 使用函数
  9. const useUserStore = defineStore(
  10. // 唯一ID
  11. 'user',
  12. () => {
  13. const settingsStore = useSettingsStore()
  14. const routeStore = useRouteStore()
  15. const menuStore = useMenuStore()
  16. const tabbarStore = useTabbarStore()
  17. const userName = ref(localStorage.userName ?? '')//
  18. const realName = ref(localStorage.realName ?? '')//
  19. const token = ref(localStorage.token ?? '')
  20. const avatar = ref(localStorage.avatar ?? '')
  21. const permissions = ref<string[]>([])
  22. const selectedImage: string = getRandomImage();//随机切换默认头像
  23. const isLogin = computed(() => {
  24. if (token.value) {
  25. return true
  26. }
  27. return false
  28. })
  29. async function login(data: {
  30. userName: string
  31. passWord: string
  32. captcha: string
  33. system: string
  34. captchaId: number
  35. }) {
  36. const res = await api.user.login(data)
  37. localStorage.setItem('userName', data.userName)
  38. localStorage.setItem('token', res.data)
  39. userName.value = data.userName
  40. token.value = res.data
  41. if(token.value){
  42. getUserInfo();
  43. }
  44. }
  45. // 登出
  46. async function logout(redirect = router.currentRoute.value.fullPath) {
  47. localStorage.removeItem('userName')
  48. localStorage.removeItem('realName')
  49. localStorage.removeItem('token')
  50. userName.value = ''
  51. realName.value = ''
  52. token.value = ''
  53. permissions.value = []
  54. routeStore.removeRoutes()
  55. menuStore.setActived(0)
  56. settingsStore.settings.tabbar.enable && tabbarStore.clean()
  57. router.push({
  58. name: 'login',
  59. query: {
  60. ...(redirect !== settingsStore.settings.home.fullPath && router.currentRoute.value.name !== 'login' && { redirect }),
  61. },
  62. })
  63. }
  64. //获取用户信息
  65. async function getUserInfo() {
  66. const usercallback=await api.user.getUserInfo();
  67. localStorage.setItem('avatar', usercallback.data.headSculpture)
  68. localStorage.setItem('realName', usercallback.data.name)
  69. avatar.value=usercallback.data.headSculpture;
  70. realName.value=usercallback.data.name;
  71. }
  72. // 获取权限
  73. async function getPermissions() {
  74. const res = await api.user.permission()
  75. permissions.value = res.data
  76. }
  77. // 修改密码
  78. async function editPassword(data: {
  79. oldPassWord: string
  80. newPassWord: string
  81. }) {
  82. await api.user.passwordEdit(data)
  83. }
  84. return {
  85. userName,
  86. realName,
  87. token,
  88. avatar,
  89. permissions,
  90. isLogin,
  91. getUserInfo,
  92. login,
  93. logout,
  94. getPermissions,
  95. editPassword,
  96. selectedImage,
  97. }
  98. },
  99. )
  100. export default useUserStore