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

This commit is contained in:
Xwite
2024-10-15 21:22:19 +08:00
parent 123d9b48bb
commit 3132172c5b
7 changed files with 11 additions and 33 deletions

View File

@@ -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",

View File

@@ -54,9 +54,11 @@ const getReadConfig = async (http_url = legado_http_entry_point) => {
const saveReadConfig = (config: webReadConfig) =>
ajax.post<LeagdoApiResponse<string>>('/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

View File

@@ -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

View File

@@ -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

View File

@@ -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)
},
},
})

View File

@@ -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')

View File

@@ -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()