state.ts 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. import { reactive } from 'vue'
  2. import request from './helpers/request'
  3. import { getAuth, getUserType, setUserInfo } from './helpers/utils'
  4. import mitt from '@/helpers/mitt'
  5. type status = 'init' | 'login' | 'logout' | 'error'
  6. export const state = reactive({
  7. user: {
  8. status: 'init' as status,
  9. data: {} as any
  10. },
  11. loginPopupStatus: false, // 登录弹窗状态
  12. loginPopupTimer: null as any // 登录弹窗定时器
  13. })
  14. export const getUserInfo = async () => {
  15. const token = getAuth()
  16. const userType = getUserType()
  17. // 判断是否有token,token和userType 判断是否登录
  18. if (!token) {
  19. return
  20. }
  21. try {
  22. const url =
  23. userType === 'TEACHER'
  24. ? '/api-website/teacher/queryUserInfo'
  25. : '/api-website/student/queryUserInfo'
  26. const res = await request.get(url)
  27. state.user.data = res.data || {}
  28. // 存储登录人信息
  29. setUserInfo(JSON.stringify(state.user.data))
  30. // 登录状态
  31. mitt.emit('mittFn')
  32. state.user.status = 'login'
  33. } catch {
  34. state.user.status = 'init'
  35. }
  36. }