Keine Beschreibung

App.vue 1.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <script setup lang="ts">
  2. import { onHide, onLaunch, onShow } from '@dcloudio/uni-app'
  3. import { navigateToInterceptor } from '@/router/interceptor'
  4. import { useTokenStore } from '@/store/token'
  5. import { useAuthStore } from '@/store/auth'
  6. onLaunch((options) => {
  7. console.log('App.vue onLaunch', options)
  8. // 初始化 store
  9. const tokenStore = useTokenStore()
  10. const authStore = useAuthStore()
  11. // 钉钉免登录逻辑
  12. async function handleDingTalkAutoLogin() {
  13. try {
  14. // 检查是否已经有有效的token
  15. if (!tokenStore.isTokenExpired.value) {
  16. console.log('已有有效登录状态,无需重新登录');
  17. return;
  18. }
  19. console.log('尝试钉钉免登录...');
  20. // 尝试钉钉免登录
  21. await authStore.authDingTalkLogin();
  22. console.log('钉钉免登录成功');
  23. }
  24. catch (error) {
  25. console.error('钉钉免登录失败,将跳转到登录页面:', error);
  26. // 免登录失败,跳转到登录页面
  27. // 注意:这里不立即跳转,避免影响应用启动性能
  28. // 路由拦截器会在页面跳转时处理未登录情况
  29. }
  30. }
  31. // 执行钉钉免登录
  32. handleDingTalkAutoLogin();
  33. })
  34. onShow((options) => {
  35. console.log('App.vue onShow', options)
  36. // 处理直接进入页面路由的情况:如h5直接输入路由、微信小程序分享后进入等
  37. // https://github.com/unibest-tech/unibest/issues/192
  38. if (options?.path) {
  39. navigateToInterceptor.invoke({ url: `/${options.path}`, query: options.query })
  40. }
  41. else {
  42. navigateToInterceptor.invoke({ url: '/' })
  43. }
  44. })
  45. onHide(() => {
  46. console.log('App Hide')
  47. })
  48. </script>
  49. <style lang="scss">
  50. </style>