index.tsx 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. import { NButton, NModal, NSpace, useDialog } from 'naive-ui';
  2. import { defineComponent, ref } from 'vue';
  3. import { useRouter } from 'vue-router';
  4. import downBg from './images/downBg.png'
  5. import rocketIcon from './images/rocketIcon.png'
  6. import styles from './index.module.less'
  7. export default defineComponent({
  8. name: 'router-error',
  9. setup() {
  10. const router = useRouter();
  11. const dialog = useDialog();
  12. let isOpen = false;
  13. const showModalMask = ref(false)
  14. router.onError((error, to, form) => {
  15. const str = error.message + '';
  16. const isChunkLoadFailed = str.indexOf('imported');
  17. console.log(error, to)
  18. // const targetPath = router.history.pending.fullPath
  19. if (isChunkLoadFailed != -1 && !isOpen) {
  20. isOpen = true;
  21. console.log('onError刷新');
  22. router.push(to)
  23. showModalMask.value = true
  24. // dialog.warning({
  25. // title: '更新提示',
  26. // content: '网站有更新请点击确定刷新页面?',
  27. // positiveText: '确定',
  28. // negativeText: '取消',
  29. // onPositiveClick: () => {
  30. // }
  31. // });
  32. }
  33. });
  34. const checkNewVersion = async () => {
  35. if ('serviceWorker' in navigator) {
  36. // let refreshing = false
  37. const flag = (await caches.keys()).length > 0;
  38. // console.log(caches.keys(), `0904路由更新有缓存${flag}`);
  39. caches.keys().then(function (cacheNames) {
  40. cacheNames.forEach(function (cacheName) {
  41. caches.delete(cacheName);
  42. });
  43. if (flag) {
  44. // window.location.reload();
  45. // dialog.warning({
  46. // title: '更新提示',
  47. // content: '网站有更新请点击确定刷新页面?',
  48. // positiveText: '确定',
  49. // negativeText: '取消',
  50. // onPositiveClick: () => {
  51. // }
  52. // });
  53. }
  54. });
  55. // 尝试监听install
  56. let refreshing = false;
  57. navigator.serviceWorker.addEventListener('controllerchange', () => {
  58. console.log('controllerchange刷新');
  59. if (refreshing) {
  60. return;
  61. }
  62. showModalMask.value = true
  63. refreshing = true;
  64. });
  65. }
  66. }
  67. checkNewVersion()
  68. const reloadPage = ()=>{
  69. window.location.reload();
  70. }
  71. return () => <div>
  72. <NModal v-model:show={showModalMask.value} mask-closable={false}>
  73. <div class={styles.downMove}>
  74. <img src={rocketIcon} class={styles.dingPng} alt="" />
  75. <img src={downBg} class={styles.downMoveBg} alt="" />
  76. <h2>发现新版本</h2>
  77. <p>
  78. 为提升您的用户体验,请刷新页面后使用
  79. </p>
  80. {/* <NButton>确定</NButton> */}
  81. <NSpace style={{ padding: '25px 0 0 0' }} justify="center">
  82. <NButton
  83. class={styles.submitAppBtn}
  84. round
  85. type="primary" onClick={reloadPage}>
  86. 立即刷新
  87. </NButton>
  88. </NSpace>
  89. </div>
  90. </NModal>
  91. </div>;
  92. }
  93. });