App.tsx 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. import {
  2. computed,
  3. defineComponent,
  4. onMounted,
  5. ref,
  6. onBeforeUnmount,
  7. onUnmounted
  8. } from 'vue';
  9. import { NConfigProvider, zhCN, dateZhCN, NModal } from 'naive-ui';
  10. import { AppProvider } from './components/Application';
  11. import { RouterView, useRouter } from 'vue-router';
  12. import setting from './settings/designSetting';
  13. import { lighten } from './utils';
  14. import RouterError from './components/RouterError';
  15. import { tryOnUnmounted } from '@vueuse/core';
  16. import { useUserStore } from './store/modules/users';
  17. export default defineComponent({
  18. name: 'App',
  19. setup() {
  20. const isIOSChrome = ref();
  21. const getThemeOverrides = computed(() => {
  22. const appTheme = setting.appTheme;
  23. const lightenStr = lighten(setting.appTheme, 6);
  24. return {
  25. common: {
  26. primaryColor: appTheme,
  27. primaryColorHover: lightenStr,
  28. primaryColorPressed: lightenStr
  29. },
  30. LoadingBar: {
  31. colorLoading: appTheme
  32. }
  33. };
  34. });
  35. // const showModal = ref(false);
  36. const showModalMsg = ref('');
  37. // 判断浏览器
  38. // 是否是360
  39. const check360 = () => {
  40. const result = false;
  41. for (const key in navigator.plugins) {
  42. // np-mswmp.dll只在360浏览器下存在
  43. if (navigator.plugins[key].filename == 'internal-nacl-plugin') {
  44. return !result;
  45. }
  46. }
  47. return result;
  48. };
  49. //
  50. const isChrome = () => {
  51. const isChromium = window.chrome,
  52. winNav = window.navigator,
  53. vendorName = winNav.vendor,
  54. isOpera = winNav.userAgent.indexOf('OPR') > -1,
  55. isIEedge = winNav.userAgent.indexOf('Edge') > -1,
  56. isIOSChrome = winNav.userAgent.match('CriOS'),
  57. // QQ
  58. isQQBriwser =
  59. winNav.userAgent.indexOf('QQBrowser') > -1 ||
  60. winNav.userAgent.indexOf('QQ') > -1,
  61. // 搜狗
  62. isSouggou =
  63. winNav.userAgent.indexOf('se 2.x') > -1 ||
  64. winNav.userAgent.indexOf('MetaSr') > -1,
  65. // 360
  66. is360 = check360() && winNav.userAgent.indexOf('Safari') > -1,
  67. // 遨游
  68. isMaxthon = winNav.userAgent.indexOf('Maxthon') > -1,
  69. // 是否为2345浏览器
  70. is2345Explorer = winNav.userAgent.includes('2345Explorer'),
  71. // 世界之窗
  72. isTheWorld = winNav.userAgent.indexOf('TheWorld') > -1,
  73. // 猎豹
  74. isLiebao = winNav.userAgent.indexOf('LBBROWSER') > -1;
  75. console.log(isQQBriwser, isSouggou, is360, isMaxthon, is2345Explorer, isTheWorld, isLiebao)
  76. if (isIOSChrome) {
  77. return true;
  78. } else if (
  79. isChromium !== null &&
  80. typeof isChromium !== 'undefined' &&
  81. vendorName === 'Google Inc.' &&
  82. isOpera === false &&
  83. isIEedge === false &&
  84. isQQBriwser === false &&
  85. isSouggou === false &&
  86. is360 === false &&
  87. isMaxthon === false &&
  88. is2345Explorer === false &&
  89. isTheWorld === false &&
  90. isLiebao === false
  91. ) {
  92. return true;
  93. } else {
  94. return false;
  95. }
  96. };
  97. // 获取谷歌版本
  98. const getChromeVersion = () => {
  99. const arr = navigator.userAgent.split(' ');
  100. let chromeVersion = '' as any;
  101. for (let i = 0; i < arr.length; i++) {
  102. if (/chrome/i.test(arr[i])) chromeVersion = arr[i];
  103. }
  104. if (chromeVersion) {
  105. return Number(chromeVersion.split('/')[1].split('.')[0]);
  106. } else {
  107. return false;
  108. }
  109. };
  110. const isChromeFlag = isChrome();
  111. console.log('isChromeFlag', isChromeFlag);
  112. if (isChromeFlag) {
  113. const chromeVersion = getChromeVersion();
  114. if (!chromeVersion || (chromeVersion && chromeVersion < 100)) {
  115. showModalMsg.value =
  116. '您当前的chrome版本过低,为了保证您的用户体验请升级后使用';
  117. // showModal.value = true;
  118. }
  119. // if (chromeVersion) {
  120. // return Number(chromeVersion.split('/')[1].split('.')[0]);
  121. // } else {
  122. // return false;
  123. // }
  124. } else {
  125. showModalMsg.value = '为了保证您的用户体验,请使用chrome打开,点击确定下载';
  126. // showModal.value = true;
  127. console.log('---');
  128. }
  129. const submitCallback = () => {
  130. window.open('https://www.google.cn/intl/zh-CN/chrome/');
  131. };
  132. const handleOpen = (e: MessageEvent) => {
  133. if (e.data?.api === 'onLogin') {
  134. const userStore = useUserStore();
  135. const router = useRouter();
  136. const documentDom: any = document;
  137. documentDom.exitFullscreen
  138. ? documentDom.exitFullscreen()
  139. : documentDom.mozCancelFullScreen
  140. ? documentDom.mozCancelFullScreen()
  141. : documentDom.webkitExitFullscreen
  142. ? documentDom.webkitExitFullscreen()
  143. : '';
  144. userStore.logout();
  145. history.go(0);
  146. }
  147. };
  148. onMounted(() => {
  149. window.addEventListener('message', handleOpen);
  150. });
  151. onUnmounted(() => {
  152. window.removeEventListener('message', handleOpen);
  153. });
  154. return () => (
  155. <>
  156. <NConfigProvider
  157. locale={zhCN}
  158. themeOverrides={getThemeOverrides.value}
  159. // :theme="getDarkTheme"
  160. // :theme-overrides="getThemeOverrides"
  161. dateLocale={dateZhCN}>
  162. <AppProvider>
  163. <RouterView />
  164. <RouterError />
  165. </AppProvider>
  166. </NConfigProvider>
  167. {/* <NModal
  168. show={showModal.value}
  169. closeOnEsc={false}
  170. closable={false}
  171. maskClosable={false}
  172. preset="dialog"
  173. title="确认"
  174. content={showModalMsg.value}
  175. positive-text="确认"
  176. onPositiveClick={submitCallback}></NModal> */}
  177. </>
  178. );
  179. }
  180. });