App.vue 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. <script setup>
  2. import { onLaunch, onShow, onHide } from '@dcloudio/uni-app';
  3. import { useUserStore } from '@/store/modules/user';
  4. import { getDingTalkAuthCode } from '@/utils/dingtalk';
  5. import * as dd from 'dingtalk-jsapi';
  6. const userStore = useUserStore();
  7. onLaunch(async (options) => {
  8. console.log('App Launch');
  9. // 仅在钉钉环境下尝试免登
  10. if (dd.env.platform !== 'notInDingTalk') {
  11. // 如果没有 token,或者用户信息为空,尝试免登
  12. if (!userStore.token) {
  13. userStore.setRequestLoading('isLogining', true);
  14. try {
  15. const corpId = options?.query?.corpId || import.meta.env.VITE_DINGTALK_CORPID;
  16. const code = await getDingTalkAuthCode(corpId);
  17. if (code) {
  18. console.log('Got DingTalk AuthCode, logging in...', code);
  19. await userStore.dingTalkLogin(code);
  20. console.log('DingTalk Login Success');
  21. }
  22. } catch (err) {
  23. console.error('DingTalk Auto Login Failed:', err);
  24. // 如果免登失败(通常是没找到用户),则跳转注册页面
  25. uni.reLaunch({ url: '/pages/login/index' });
  26. } finally {
  27. userStore.setRequestLoading('isLogining', false);
  28. }
  29. }
  30. } else if (!userStore.token) {
  31. // 不在钉钉环境下且没登录,也引导去注册或者登录跳转(暂统一引导至注册或默认逻辑)
  32. uni.reLaunch({ url: '/pages/login/index' });
  33. }
  34. });
  35. onShow(() => {
  36. console.log('App Show');
  37. });
  38. onHide(() => {
  39. console.log('App Hide');
  40. });
  41. </script>
  42. <style lang="scss">
  43. /*每个页面公共css */
  44. @import "@/styles/global.scss";
  45. @import "@/styles/business.scss";
  46. </style>