App.vue 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <template>
  2. <n-config-provider :theme-overrides="themeOverrides">
  3. <n-dialog-provider>
  4. <router-view></router-view>
  5. <HomeModal
  6. :show="showModal"
  7. :content="modalContent"
  8. ></HomeModal>
  9. </n-dialog-provider>
  10. </n-config-provider>
  11. </template>
  12. <script lang="ts">
  13. export default {
  14. name: 'MainApp',
  15. };
  16. </script>
  17. <script lang="ts" setup>
  18. import { isMobile } from 'billd-utils';
  19. import { GlobalThemeOverrides, NConfigProvider } from 'naive-ui';
  20. import { onMounted, ref, watch } from 'vue';
  21. import { useRoute } from 'vue-router';
  22. import { THEME_COLOR, appBuildInfo } from '@/constant';
  23. import { useCheckUpdate } from '@/hooks/use-common';
  24. import { useGoogleAd } from '@/hooks/use-google-ad';
  25. import { loginMessage } from '@/hooks/use-login';
  26. import { useCacheStore } from '@/store/cache';
  27. import { useUserStore } from '@/store/user';
  28. import { getHostnameUrl } from '@/utils';
  29. import { getLastBuildDate, setLastBuildDate } from '@/utils/localStorage/app';
  30. import { getToken } from '@/utils/localStorage/user';
  31. import { fetchAreaList } from './api/area';
  32. import { fetchGlobalMsgMyList } from './api/globalMsg';
  33. import { useTip } from './hooks/use-tip';
  34. import { useAppStore } from './store/app';
  35. const { checkUpdate } = useCheckUpdate();
  36. const appStore = useAppStore();
  37. const cacheStore = useCacheStore();
  38. const userStore = useUserStore();
  39. const route = useRoute();
  40. const showModal = ref(false);
  41. const modalContent = ref('2');
  42. const themeOverrides: GlobalThemeOverrides = {
  43. common: {
  44. primaryColor: THEME_COLOR,
  45. primaryColorHover: THEME_COLOR,
  46. },
  47. };
  48. watch(
  49. () => userStore.userInfo,
  50. (newval) => {
  51. if (newval) {
  52. handleGlobalMsgMyList();
  53. }
  54. },
  55. {
  56. immediate: true,
  57. }
  58. );
  59. onMounted(() => {
  60. useGoogleAd();
  61. initGlobalData();
  62. checkUpdate({
  63. htmlUrl: getHostnameUrl(),
  64. });
  65. handleUpdate();
  66. loginMessage();
  67. cacheStore.muted = true;
  68. cacheStore.volume = 0;
  69. const token = getToken();
  70. if (token) {
  71. userStore.getUserInfo();
  72. }
  73. // 启用vconsole
  74. // import('vconsole')
  75. // .then((VConsole) => {
  76. // // eslint-disable-next-line
  77. // new VConsole.default();
  78. // })
  79. // .catch(() => {});
  80. if (isMobile()) {
  81. const metaEl = document.querySelector('meta[name="viewport"]');
  82. metaEl?.setAttribute(
  83. 'content',
  84. 'width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no'
  85. );
  86. }
  87. });
  88. async function handleGlobalMsgMyList() {
  89. const res = await fetchGlobalMsgMyList({});
  90. if (res.code === 200) {
  91. const data = res.data.rows[0];
  92. if (data) {
  93. useTip({
  94. content: data.content!,
  95. hiddenCancel: true,
  96. hiddenClose: true,
  97. });
  98. }
  99. }
  100. }
  101. async function getAreaList() {
  102. const res = await fetchAreaList({ orderName: 'priority', orderBy: 'desc' });
  103. if (res.code === 200) {
  104. appStore.areaList = res.data.rows;
  105. }
  106. }
  107. function initGlobalData() {
  108. getAreaList();
  109. }
  110. function handleUpdate() {
  111. const old = getLastBuildDate();
  112. if (appBuildInfo.lastBuildDate !== old) {
  113. localStorage.clear();
  114. }
  115. setLastBuildDate(appBuildInfo.lastBuildDate);
  116. }
  117. </script>
  118. <style lang="scss">
  119. body {
  120. font-size: 16px;
  121. // naive的message会影响全局line-height
  122. line-height: initial;
  123. }
  124. </style>
  125. <style lang="scss" scoped></style>