From 3132172c5b91eba14d32f85154c6b1f69bca2697 Mon Sep 17 00:00:00 2001 From: Xwite <1797350009@qq.com> Date: Tue, 15 Oct 2024 21:22:19 +0800 Subject: [PATCH] =?UTF-8?q?fix(web):=20=E4=BF=AE=E5=A4=8DCI;=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E8=BF=9B=E5=BA=A6=E6=9C=AA=E5=90=8C=E6=AD=A5=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98;=E4=BC=98=E5=8C=96=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/web/package.json | 2 +- modules/web/src/api/api.ts | 2 ++ modules/web/src/router/bookRouter.ts | 14 -------------- modules/web/src/router/index.ts | 14 -------------- modules/web/src/store/bookStore.ts | 4 +++- modules/web/src/views/BookChapter.vue | 6 ++++-- modules/web/src/views/BookShelf.vue | 2 +- 7 files changed, 11 insertions(+), 33 deletions(-) diff --git a/modules/web/package.json b/modules/web/package.json index df69e627e..94e09c4de 100644 --- a/modules/web/package.json +++ b/modules/web/package.json @@ -9,7 +9,7 @@ }, "scripts": { "dev": "vite", - "build": "run-p type-check \"build-only {@}\" --", + "build": "run-p type-check \"build-only {@}\" -- && node ./scripts/sync.js", "preview": "vite preview", "build-only": "vite build", "type-check": "vue-tsc --build --force", diff --git a/modules/web/src/api/api.ts b/modules/web/src/api/api.ts index edc3eb0b0..f210971ee 100644 --- a/modules/web/src/api/api.ts +++ b/modules/web/src/api/api.ts @@ -54,9 +54,11 @@ const getReadConfig = async (http_url = legado_http_entry_point) => { const saveReadConfig = (config: webReadConfig) => ajax.post>('/saveReadConfig', config) +/** @deprecated: 使用`API.saveBookProgressWithBeacon`以确保在页面或者直接关闭的情况下保存进度 */ const saveBookProgress = (bookProgress: BookProgress) => ajax.post('/saveBookProgress', bookProgress) +/**主要在直接关闭浏览器情况下可靠发送书籍进度 */ const saveBookProgressWithBeacon = (bookProgress: BookProgress) => { if (!bookProgress) return // 常规请求可能会被取消 使用Fetch keep-alive 或者 navigator.sendBeacon diff --git a/modules/web/src/router/bookRouter.ts b/modules/web/src/router/bookRouter.ts index 51a39fe1c..6f85c952e 100644 --- a/modules/web/src/router/bookRouter.ts +++ b/modules/web/src/router/bookRouter.ts @@ -19,18 +19,4 @@ const router = createRouter({ routes: bookRoutes, }) -import { createApp } from 'vue' -import App from '@/App.vue' -import store, { useBookStore } from '@/store' - -// init pinia instance -createApp(App).use(store) -router.beforeEach((to, from, next) => { - // 自动加载阅读配置 - useBookStore() - .loadWebConfig() - .then(() => next()) - .catch(() => next()) -}) - export default router diff --git a/modules/web/src/router/index.ts b/modules/web/src/router/index.ts index aec7a0cb0..69dc37c9c 100644 --- a/modules/web/src/router/index.ts +++ b/modules/web/src/router/index.ts @@ -12,18 +12,4 @@ router.afterEach(to => { if (to.name == 'shelf') document.title = '书架' }) -import { createApp } from 'vue' -import App from '@/App.vue' -import store, { useBookStore } from '@/store' - -// init pinia instance -createApp(App).use(store) -router.beforeEach((to, from, next) => { - // 自动加载阅读配置 - useBookStore() - .loadWebConfig() - .then(() => next()) - .catch(() => next()) -}) - export default router diff --git a/modules/web/src/store/bookStore.ts b/modules/web/src/store/bookStore.ts index 07fc2c01a..fb21c3a97 100644 --- a/modules/web/src/store/bookStore.ts +++ b/modules/web/src/store/bookStore.ts @@ -219,7 +219,9 @@ export const useBookStore = defineStore('book', { this.bookProgress, ) } - return API.saveBookProgress(this.bookProgress) + // 直接关闭浏览器时 http请求可能被取消 + // return API.saveBookProgress(this.bookProgress) + return API.saveBookProgressWithBeacon(this.bookProgress) }, }, }) diff --git a/modules/web/src/views/BookChapter.vue b/modules/web/src/views/BookChapter.vue index 22782935e..42bd3f920 100644 --- a/modules/web/src/views/BookChapter.vue +++ b/modules/web/src/views/BookChapter.vue @@ -155,6 +155,7 @@ watch( sessionStorage.setItem('chapterIndex', book.chapterIndex.toString()) sessionStorage.setItem('chapterPos', book.chapterPos.toString()) }, + { deep: 1 }, ) // 无限滚动 @@ -371,7 +372,7 @@ const saveReadingBookProgressToBrowser = (index: number, pos: number) => { const onVisibilityChange = () => { const _bookProgress = bookProgress.value if (document.visibilityState == 'hidden' && _bookProgress) { - API.saveBookProgressWithBeacon(_bookProgress) + store.saveBookProgress() } } // 定时同步 @@ -472,7 +473,8 @@ const ignoreKeyPress = (event: { } } -onMounted(() => { +onMounted(async () => { + await store.loadWebConfig() //获取书籍数据 const bookUrl = sessionStorage.getItem('bookUrl') const name = sessionStorage.getItem('bookName') diff --git a/modules/web/src/views/BookShelf.vue b/modules/web/src/views/BookShelf.vue index 182c78eb7..83abdd746 100644 --- a/modules/web/src/views/BookShelf.vue +++ b/modules/web/src/views/BookShelf.vue @@ -288,7 +288,7 @@ const toDetail = ( const loadShelf = async () => { try { - //await store.loadWebConfig() called in router.beforeEach + await store.loadWebConfig() await store.saveBookProgress() //确保各种网络情况下同步请求先完成 await fetchBookShelfData()