Răsfoiți Sursa

fix(web): 修复CI;修复进度未同步的问题;优化数据加载

Xwite 2 ani în urmă
părinte
comite
9dda6fd45f

+ 1 - 1
modules/web/package.json

@@ -9,7 +9,7 @@
   },
   },
   "scripts": {
   "scripts": {
     "dev": "vite",
     "dev": "vite",
-    "build": "run-p type-check \"build-only {@}\" --",
+    "build": "run-p type-check \"build-only {@}\" -- && node ./scripts/sync.js",
     "preview": "vite preview",
     "preview": "vite preview",
     "build-only": "vite build",
     "build-only": "vite build",
     "type-check": "vue-tsc --build --force",
     "type-check": "vue-tsc --build --force",

+ 2 - 0
modules/web/src/api/api.ts

@@ -54,9 +54,11 @@ const getReadConfig = async (http_url = legado_http_entry_point) => {
 const saveReadConfig = (config: webReadConfig) =>
 const saveReadConfig = (config: webReadConfig) =>
   ajax.post<LeagdoApiResponse<string>>('/saveReadConfig', config)
   ajax.post<LeagdoApiResponse<string>>('/saveReadConfig', config)
 
 
+/** @deprecated: 使用`API.saveBookProgressWithBeacon`以确保在页面或者直接关闭的情况下保存进度 */
 const saveBookProgress = (bookProgress: BookProgress) =>
 const saveBookProgress = (bookProgress: BookProgress) =>
   ajax.post('/saveBookProgress', bookProgress)
   ajax.post('/saveBookProgress', bookProgress)
 
 
+/**主要在直接关闭浏览器情况下可靠发送书籍进度 */
 const saveBookProgressWithBeacon = (bookProgress: BookProgress) => {
 const saveBookProgressWithBeacon = (bookProgress: BookProgress) => {
   if (!bookProgress) return
   if (!bookProgress) return
   // 常规请求可能会被取消 使用Fetch keep-alive 或者 navigator.sendBeacon
   // 常规请求可能会被取消 使用Fetch keep-alive 或者 navigator.sendBeacon

+ 0 - 14
modules/web/src/router/bookRouter.ts

@@ -19,18 +19,4 @@ const router = createRouter({
   routes: bookRoutes,
   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
 export default router

+ 0 - 14
modules/web/src/router/index.ts

@@ -12,18 +12,4 @@ router.afterEach(to => {
   if (to.name == 'shelf') document.title = '书架'
   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
 export default router

+ 3 - 1
modules/web/src/store/bookStore.ts

@@ -219,7 +219,9 @@ export const useBookStore = defineStore('book', {
           this.bookProgress,
           this.bookProgress,
         )
         )
       }
       }
-      return API.saveBookProgress(this.bookProgress)
+      // 直接关闭浏览器时 http请求可能被取消
+      // return API.saveBookProgress(this.bookProgress)
+      return API.saveBookProgressWithBeacon(this.bookProgress)
     },
     },
   },
   },
 })
 })

+ 4 - 2
modules/web/src/views/BookChapter.vue

@@ -155,6 +155,7 @@ watch(
     sessionStorage.setItem('chapterIndex', book.chapterIndex.toString())
     sessionStorage.setItem('chapterIndex', book.chapterIndex.toString())
     sessionStorage.setItem('chapterPos', book.chapterPos.toString())
     sessionStorage.setItem('chapterPos', book.chapterPos.toString())
   },
   },
+  { deep: 1 },
 )
 )
 
 
 // 无限滚动
 // 无限滚动
@@ -371,7 +372,7 @@ const saveReadingBookProgressToBrowser = (index: number, pos: number) => {
 const onVisibilityChange = () => {
 const onVisibilityChange = () => {
   const _bookProgress = bookProgress.value
   const _bookProgress = bookProgress.value
   if (document.visibilityState == 'hidden' && _bookProgress) {
   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 bookUrl = sessionStorage.getItem('bookUrl')
   const name = sessionStorage.getItem('bookName')
   const name = sessionStorage.getItem('bookName')

+ 1 - 1
modules/web/src/views/BookShelf.vue

@@ -288,7 +288,7 @@ const toDetail = (
 
 
 const loadShelf = async () => {
 const loadShelf = async () => {
   try {
   try {
-    //await store.loadWebConfig() called in router.beforeEach
+    await store.loadWebConfig()
     await store.saveBookProgress()
     await store.saveBookProgress()
     //确保各种网络情况下同步请求先完成
     //确保各种网络情况下同步请求先完成
     await fetchBookShelfData()
     await fetchBookShelfData()