App.vue 1.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. <script setup>
  2. import { ref } from 'vue';
  3. import { useModel } from '@zjxpcyc/vue-tiny-store';
  4. import wxsdk from '@/utils/wx'
  5. import track from '@/utils/track'
  6. import Loading from './pages/Loading.vue';
  7. const { el, play } = useModel('audio');
  8. const { setUser, contries } = useModel('user');
  9. const show = ref(false);
  10. const { share, getCode, redirect } = wxsdk();
  11. const initUser = () => {
  12. const code = getCode();
  13. if (!code) {
  14. return redirect();
  15. } else {
  16. track(code).then(res => {
  17. const { user, num } = res;
  18. // 随机设置国家种植数量
  19. const avg = (num || 0) / 8;
  20. Object.keys(contries).forEach(key => {
  21. contries[key] = avg + Math.floor(Math.random() * 100)
  22. });
  23. setUser({
  24. ...(user || {}),
  25. num: num || 0,
  26. });
  27. }).catch(err => {
  28. console.error(err);
  29. // 重来一次
  30. redirect();
  31. });
  32. }
  33. }
  34. initUser();
  35. share();
  36. const onTouch = () => {
  37. play();
  38. window.removeEventListener('touchstart', onTouch);
  39. }
  40. window.addEventListener('touchstart', onTouch);
  41. </script>
  42. <template>
  43. <Loading v-if="!show" class="loading" @ready="(show = true)" />
  44. <router-view v-else></router-view>
  45. <audio ref="el" src="/audio/audio.mp3" style="max-width: 0" loop preload="auto"></audio>
  46. </template>
  47. <style lang="less" scoped>
  48. .loading {
  49. position: fixed;
  50. z-index: 1000;
  51. top: 0;
  52. }
  53. </style>