| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- <script setup lang="ts">
- import { onHide, onLaunch, onShow } from '@dcloudio/uni-app'
- import { navigateToInterceptor } from '@/router/interceptor'
- import { useTokenStore } from '@/store/token'
- import { useAuthStore } from '@/store/auth'
- onLaunch((options) => {
- console.log('App.vue onLaunch', options)
- // 初始化 store
- const tokenStore = useTokenStore()
- const authStore = useAuthStore()
-
- // 钉钉免登录逻辑
- async function handleDingTalkAutoLogin() {
- try {
- // 检查是否已经有有效的token
- if (!tokenStore.isTokenExpired.value) {
- console.log('已有有效登录状态,无需重新登录');
- return;
- }
-
- console.log('尝试钉钉免登录...');
- // 尝试钉钉免登录
- await authStore.authDingTalkLogin();
- console.log('钉钉免登录成功');
- }
- catch (error) {
- console.error('钉钉免登录失败,将跳转到登录页面:', error);
- // 免登录失败,跳转到登录页面
- // 注意:这里不立即跳转,避免影响应用启动性能
- // 路由拦截器会在页面跳转时处理未登录情况
- }
- }
-
- // 执行钉钉免登录
- handleDingTalkAutoLogin();
- })
- onShow((options) => {
- console.log('App.vue onShow', options)
- // 处理直接进入页面路由的情况:如h5直接输入路由、微信小程序分享后进入等
- // https://github.com/unibest-tech/unibest/issues/192
- if (options?.path) {
- navigateToInterceptor.invoke({ url: `/${options.path}`, query: options.query })
- }
- else {
- navigateToInterceptor.invoke({ url: '/' })
- }
- })
- onHide(() => {
- console.log('App Hide')
- })
- </script>
- <style lang="scss">
- </style>
|