Przeglądaj źródła

feat(web): 试看搜索书籍后返回书架时提示是否加入书架

Xwite 2 lat temu
rodzic
commit
4d51516efa

+ 1 - 0
modules/web/src/store/bookStore.js

@@ -7,6 +7,7 @@ export const useBookStore = defineStore("book", {
       connectStatus: "正在连接后端服务器……",
       connectType: "",
       newConnect: true,
+      /**@type {Array<{respondTime:number}>} */
       searchBooks: [],
       shelf: [],
       catalog: [],

+ 27 - 1
modules/web/src/views/BookChapter.vue

@@ -492,7 +492,7 @@ onMounted(() => {
       bookAuthor: bookAuthor,
       bookUrl: bookUrl,
       index: chapterIndex,
-      chapterPos: chapterPos,
+      chapterPos: chapterPos
     };
     localStorage.setItem(bookUrl, JSON.stringify(book));
   }
@@ -532,6 +532,7 @@ onMounted(() => {
   );
 });
 
+
 onUnmounted(() => {
   window.removeEventListener("keyup", handleKeyPress);
   window.removeEventListener("keydown", ignoreKeyPress);
@@ -541,6 +542,31 @@ onUnmounted(() => {
   readSettingsVisible.value = false;
   popCataVisible.value = false;
   scrollObserver?.disconnect();
+  scrollObserver = null;
+});
+
+onBeforeRouteLeave(async ()=> {
+  let bookUrl = sessionStorage.getItem("bookUrl");
+  let bookName = sessionStorage.getItem("bookName");
+  let isSeachBook = sessionStorage.getItem("isSeachBook");
+  var book = JSON.parse(localStorage.getItem(bookUrl));
+  // 阅读的是搜索的书籍 并未在书架
+  if (isSeachBook) {
+      await ElMessageBox.confirm(
+        `是否将《${bookName}》放入书架?`,
+        "放入书架",
+        {
+          confirmButtonText: "确认",
+          cancelButtonText: "否",
+          type: "info"
+        }
+      ).then(() => {
+        //选择是,无动作
+      }).catch(()=>{
+        //选择否,删除书籍
+        API.deleteBook(book);
+      })
+  }
 });
 </script>
 

+ 5 - 3
modules/web/src/views/BookShelf.vue

@@ -211,18 +211,20 @@ const handleBookClick = async (book) => {
     durChapterPos = 0,
   } = book;
   // 判断是否为 searchBook
-  if (book.durChapterIndex === undefined) {
+  const isSeachBook = "respondTime" in book
+  if (isSeachBook) {
     await API.saveBook(book);
   }
-  toDetail(bookUrl, name, author, durChapterIndex, durChapterPos);
+  toDetail(bookUrl, name, author, durChapterIndex, durChapterPos, isSeachBook);
 };
-const toDetail = (bookUrl, bookName, bookAuthor, chapterIndex, chapterPos) => {
+const toDetail = (bookUrl, bookName, bookAuthor, chapterIndex, chapterPos, isSeachBook) => {
   if (bookName === "尚无阅读记录") return;
   sessionStorage.setItem("bookUrl", bookUrl);
   sessionStorage.setItem("bookName", bookName);
   sessionStorage.setItem("bookAuthor", bookAuthor);
   sessionStorage.setItem("chapterIndex", chapterIndex);
   sessionStorage.setItem("chapterPos", chapterPos);
+  sessionStorage.setItem("isSeachBook", isSeachBook);
   readingRecent.value = {
     name: bookName,
     author: bookAuthor,