App.vue 3.2 KB

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