App.vue 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  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. try {
  14. // 尝试从 URL 获取 corpId(钉钉微应用通常在打开时会自动在 URL 后带上 corpId)
  15. // 也可以从环境变量 VITE_DINGTALK_CORPID 获取
  16. const corpId = options?.query?.corpId || import.meta.env.VITE_DINGTALK_CORPID;
  17. const code = await getDingTalkAuthCode(corpId);
  18. if (code) {
  19. console.log('Got DingTalk AuthCode, logging in...', code);
  20. alert(code)
  21. await userStore.dingTalkLogin(code);
  22. console.log('DingTalk Login Success');
  23. }
  24. } catch (err) {
  25. console.error('DingTalk Auto Login Failed:', err);
  26. // 如果免登失败且没有 Token,通常需要引导至手动登录也或报错
  27. // 这里视业务需求而定,通常免登失败我们不再强制阻塞,除非是纯免登系统
  28. }
  29. }
  30. }
  31. });
  32. onShow(() => {
  33. console.log('App Show');
  34. });
  35. onHide(() => {
  36. console.log('App Hide');
  37. });
  38. </script>
  39. <style lang="scss">
  40. /*每个页面公共css */
  41. @import "@/styles/global.scss";
  42. @import "@/styles/business.scss";
  43. </style>