From 38cdff1163573261e36f9d7f8920e1578e1172c8 Mon Sep 17 00:00:00 2001
From: 闫增涛 <1829501689@qq.com>
Date: 星期五, 22 十一月 2024 10:55:33 +0800
Subject: [PATCH] 数学书收藏功能优化

---
 src/books/mathBook/view/components/index.vue |  262 +++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 176 insertions(+), 86 deletions(-)

diff --git a/src/books/mathBook/view/components/index.vue b/src/books/mathBook/view/components/index.vue
index 7f749fe..b7ca50b 100644
--- a/src/books/mathBook/view/components/index.vue
+++ b/src/books/mathBook/view/components/index.vue
@@ -3,14 +3,48 @@
     <div id="searchDomBox" style="display: none">
       <div id="searchContent"></div>
     </div>
-    <div class="page-content" :style="{
-      fontSize: fontSize ? fontSize + 'px' : '16px',
-      transform: `scale(${pageZoom ? pageZoom : 1})`,
-      transformOrigin: 'center top',
-    }">
-      <pageHeader v-if="showCatalogList.indexOf(1) > -1" :showPageList="loadPageList"></pageHeader>
-      <chapterOne v-if="showCatalogList.indexOf(2) > -1" :showPageList="loadPageList" :questionData="questionDataMap">
+    <div
+      class="page-content"
+      :style="{
+        fontSize: fontSize ? fontSize + 'px' : '16px',
+        transform: `scale(${pageZoom ? pageZoom : 1})`,
+        transformOrigin: 'center top',
+      }"
+    >
+      <pageHeader
+        v-if="showCatalogList.indexOf(1) > -1"
+        :showPageList="loadPageList"
+      ></pageHeader>
+      <chapterOne
+        v-if="showCatalogList.indexOf(2) > -1"
+        :showPageList="loadPageList"
+        :questionData="questionDataMap"
+      >
       </chapterOne>
+      <chapterTwo
+        v-if="showCatalogList.indexOf(3) > -1"
+        :showPageList="loadPageList"
+        :questionData="questionDataMap"
+      >
+      </chapterTwo>
+      <chapterThree
+        v-if="showCatalogList.indexOf(4) > -1"
+        :showPageList="loadPageList"
+        :questionData="questionDataMap"
+      >
+      </chapterThree>
+      <chapterFour
+        v-if="showCatalogList.indexOf(5) > -1"
+        :showPageList="loadPageList"
+        :questionData="questionDataMap"
+      >
+      </chapterFour>
+      <chapterFive
+        v-if="showCatalogList.indexOf(6) > -1"
+        :showPageList="loadPageList"
+        :questionData="questionDataMap"
+      >
+      </chapterFive>
     </div>
   </div>
 </template>
@@ -19,11 +53,10 @@
 import axios from "axios";
 import pageHeader from "./header.vue";
 import chapterOne from "./chapter001.vue";
-// import chapterTwo from "./chapter002.vue";
-// import chapterThree from "./chapter003.vue"
-// import chapterFour from './chapter004.vue'
-// import chapterFive from './chapter005.vue'
-// import chapterSix from './chapter006.vue'
+import chapterTwo from "./chapter002.vue";
+import chapterThree from "./chapter003.vue";
+import chapterFour from "./chapter004.vue";
+import chapterFive from "./chapter005.vue";
 import NoteIcon from "@/assets/images/biji.png";
 import _ from "lodash";
 import Swiper from "swiper/bundle";
@@ -35,7 +68,7 @@
   name: "pageContent",
   data() {
     return {
-      catalogLength: 2, // 鎬荤珷鑺傛暟
+      catalogLength: 6, // 鎬荤珷鑺傛暟
       showCatalogList: [], // 鏄剧ず鐨勭珷鑺�
       loadThreshold: 300, // 瑙﹀彂鍔犺浇闃堝��
       throttleThreshold: 100, // 鑺傛祦闃堝��
@@ -48,7 +81,9 @@
       renderSignMap: {},
       highlightData: null,
       questionId: {},
-      collectId: []
+      collectId: [],
+      questionDataIndex: 0, // 褰撳墠璇锋眰鐨勬槸鍝釜绔犺妭鐨勯鐩�
+      questionList: [], // 绔犺妭棰樼洰鍒楄〃
     };
   },
   computed: {
@@ -153,40 +188,40 @@
     }, 500);
 
     // 娴嬭瘯椤甸潰璺宠浆
-    setTimeout(() => {
-      this.gotoPage(1, 9);
-      //   setTimeout(() => {
-      //     this.renderSign("Highlight", {
-      //       id: "2ACA9359",
-      //       txt: "棰樹竴瀛︿範涓婚涓� 杩愬姩",
-      //       page: "10",
-      //       type: "Highlight",
-      //       color: "#F5E12A"
-      //     });
-      // setTimeout(() => {
-      //   this.delSign({
-      //     ids: ["2ACA9359"]
-      //   });
-      // }, 2000);
-      //   }, 5000);
+    //  setTimeout(() => {
+    //  this.gotoPage(3,70);
+    //   //   setTimeout(() => {
+    //   //     this.renderSign("Highlight", {
+    //   //       id: "2ACA9359",
+    //   //       txt: "棰樹竴瀛︿範涓婚涓� 杩愬姩",
+    //   //       page: "10",
+    //   //       type: "Highlight",
+    //   //       color: "#F5E12A"
+    //   //     });
+    //   // setTimeout(() => {
+    //   //   this.delSign({
+    //   //     ids: ["2ACA9359"]
+    //   //   });
+    //   // }, 2000);
+    //   //   }, 5000);
 
-      // const pageDom = (this.container ? this.container : document)
-      //   .querySelector("#app")
-      //   .querySelectorAll(".page-box");
-      // 妫�绱�
-      // console.log(this.searchTextByPage("淇濇姢鍐呰剰鍣ㄥ畼"), "searchTextByPage");
-      // 妫�绱㈣烦杞�
-      // this.searchItemLocation({
-      //   catalog: 2,
-      //   page: 10,
-      //   txt: " 杩愬姩绯荤粺鏄敱楠ㄣ�侀杩炵粨鍜岄楠艰倢涓夐儴鍒嗙粍鎴愮殑銆傚叏韬殑楠ㄩ�氳繃楠ㄨ繛缁撶粍鎴愪汉浣撻楠硷紙瑙佸浘1-1锛夈�傞楠兼槸浜轰綋鐨勬敮鏋讹紝鍏锋湁淇濇姢鍐呰剰鍣ㄥ畼銆佷緵鑲岃倝闄勭潃鍜屼綔涓鸿倢鑲夎繍鍔ㄧ殑鏉犳潌绛変綔鐢ㄣ�傚湪绁炵粡绯荤粺鐨勬敮閰嶄笅锛岃倢鑲夋敹缂╃壍鍔ㄦ墍闄勭潃鐨勯缁曠潃鍏宠妭杞姩锛屼娇韬綋浜х敓鍚勭鍔ㄤ綔銆傛墍浠ワ紝杩愬姩绯荤粺鍏锋湁杩愬姩銆佹敮鎸佸拰淇濇姢绛夊姛鑳斤紝骞煎勾鏃舵湡鐨勯楠艰繕鍏锋湁閫犺鍔熻兘銆� ",
-      //   txtIndex: 57
-      // });
-    }, 500);
+    //   // const pageDom = (this.container ? this.container : document)
+    //   //   .querySelector("#app")
+    //   //   .querySelectorAll(".page-box");
+    //   // 妫�绱�
+    //   // console.log(this.searchTextByPage("淇濇姢鍐呰剰鍣ㄥ畼"), "searchTextByPage");
+    //   // 妫�绱㈣烦杞�
+    //   // this.searchItemLocation({
+    //   //   catalog: 2,
+    //   //   page: 10,
+    //   //   txt: " 杩愬姩绯荤粺鏄敱楠ㄣ�侀杩炵粨鍜岄楠艰倢涓夐儴鍒嗙粍鎴愮殑銆傚叏韬殑楠ㄩ�氳繃楠ㄨ繛缁撶粍鎴愪汉浣撻楠硷紙瑙佸浘1-1锛夈�傞楠兼槸浜轰綋鐨勬敮鏋讹紝鍏锋湁淇濇姢鍐呰剰鍣ㄥ畼銆佷緵鑲岃倝闄勭潃鍜屼綔涓鸿倢鑲夎繍鍔ㄧ殑鏉犳潌绛変綔鐢ㄣ�傚湪绁炵粡绯荤粺鐨勬敮閰嶄笅锛岃倢鑲夋敹缂╃壍鍔ㄦ墍闄勭潃鐨勯缁曠潃鍏宠妭杞姩锛屼娇韬綋浜х敓鍚勭鍔ㄤ綔銆傛墍浠ワ紝杩愬姩绯荤粺鍏锋湁杩愬姩銆佹敮鎸佸拰淇濇姢绛夊姛鑳斤紝骞煎勾鏃舵湡鐨勯楠艰繕鍏锋湁閫犺鍔熻兘銆� ",
+    //   //   txtIndex: 57
+    //   // });
+    //  }, 500);
 
     // 鑾峰彇棰樼洰id鍒楄〃
     this.getQuestionId();
-    this.getCollect()
+    this.getCollect();
   },
   methods: {
     // setZoom1() {
@@ -205,6 +240,7 @@
     // },
     // 婊氬姩鐩戝惉
     scrollFun(event) {
+      this.handleVideoPicture();
       // 鍒ゆ柇鍚戜笂婊氬姩杩樻槸鍚戜笅婊氬姩
       if (event.target.scrollTop > this.previousScrollTop) {
         // 鍚戜笅
@@ -443,8 +479,8 @@
           page && pageThemeColor && pageThemeColor[page]
             ? pageThemeColor[page]
             : chapterNum && chapterThemeColor && chapterThemeColor[chapterNum]
-              ? chapterThemeColor[chapterNum]
-              : bookThemeColor;
+            ? chapterThemeColor[chapterNum]
+            : bookThemeColor;
         if (themeColor) {
           domItem.style.color = themeColor;
         }
@@ -461,8 +497,8 @@
           page && pageThemeColor && pageThemeColor[page]
             ? pageThemeColor[page]
             : chapterNum && chapterThemeColor && chapterThemeColor[chapterNum]
-              ? chapterThemeColor[chapterNum]
-              : bookThemeColor;
+            ? chapterThemeColor[chapterNum]
+            : bookThemeColor;
         if (themeColor) {
           domItem.style.backgroundColor = themeColor;
         }
@@ -479,15 +515,14 @@
           page && pageThemeColor && pageThemeColor[page]
             ? pageThemeColor[page]
             : chapterNum && chapterThemeColor && chapterThemeColor[chapterNum]
-              ? chapterThemeColor[chapterNum]
-              : bookThemeColor;
+            ? chapterThemeColor[chapterNum]
+            : bookThemeColor;
         if (themeColor) {
           domItem.style.borderColor = themeColor;
         }
       });
     },
     getParentWithClass(element, className) {
-      console.log(element, className, "element, className");
       while (element.parentElement) {
         element = element.parentElement;
         if (element.classList.contains(className)) {
@@ -542,8 +577,20 @@
             if (!this.questionDataMap[page]) {
               if (this.questionId && this.questionId[catalog]) {
                 if (this.questionId[catalog][page]) {
-                  this.questionDataMap[page] = await this.getQuestion(catalog, page);
-                  console.log("棰樼洰", this.questionDataMap);
+                  if (Array.isArray(this.questionId[catalog][page])) {
+                    this.questionDataMap[page] = await this.getQuestion(
+                      catalog,
+                      page,
+                      false
+                    );
+                  } else {
+                    const obj = {};
+                    for (let key in this.questionId[catalog][page]) {
+                      obj[key] = await this.getQuestion(catalog, page, key);
+                    }
+                    this.questionDataMap[page] = obj;
+                  }
+                  console.log('棰樼洰',this.questionDataMap);
                 }
               }
             }
@@ -691,11 +738,10 @@
       const pageData = {
         pageHeader,
         chapterOne,
-        // chapterTwo,
-        // chapterThree,
-        // chapterFour,
-        // chapterFive,
-        // chapterSix,
+        chapterTwo,
+        chapterThree,
+        chapterFour,
+        chapterFive,
       };
       // 閬嶅巻鎵�鏈夌珷鑺傛枃浠�
       for (const key in pageData) {
@@ -795,7 +841,7 @@
       // 璁板綍楂樹寒淇℃伅
       this.highlightData = data;
       // 璺宠浆
-      this.gotoPage(data.catalog, data.page, () => { });
+      this.gotoPage(data.catalog, data.page, () => {});
     },
     // 鑾峰彇棰樼洰鍒楄〃
     getQuestionId() {
@@ -807,6 +853,7 @@
     },
     // 鑾峰彇棰樼洰鏀惰棌id鍒楄〃
     getCollect() {
+      if (!localStorage.getItem(this.config.tokenKey)) return false;
       this.MG.identity
         .getUserKey({
           domain: "collectData",
@@ -816,17 +863,21 @@
           try {
             const collect = JSON.parse(res[0].value);
             if (collect.length) {
-              this.collectId = collect.find(item => item.type == 'json').collectList
+              this.collectId = collect.find(
+                (item) => item.type == "json"
+              ).collectList;
             }
           } catch (error) {
             console.log("鏆傛棤鏁版嵁");
           }
-        }).catch(res => {
-          console.log('index 璇锋眰棰樼洰鏀惰棌id鎶ラ敊');
         })
+        .catch((res) => {
+          console.log("index 璇锋眰棰樼洰鏀惰棌id鎶ラ敊");
+        });
+      console.log('鏀惰棌id',this.collectId);
     },
     // 鑾峰彇绔犺妭棰樼洰
-    async getQuestion(num, page) {
+    async getQuestion(num, page, questionIndex) {
       let cardList = [
         {
           catalogName: "鍗曢�夐",
@@ -848,38 +899,62 @@
           catalogName: "绠�绛旈",
           infoList: [],
         },
+        
       ];
       if (this.questionId) {
         if (this.questionId[num] && this.questionId[num][page]) {
-          const res = await axios.get(
-            this.config.activeBook.resourceUrl + "/question-" + num + ".json"
-          );
-          if (!res.data.data) return [];
-          for (let index = 0; index < res.data.data.length; index++) {
-            const item = res.data.data[index];
+          if (num != this.questionDataIndex || !this.questionList.length) {
+            // 鍒ゆ柇褰撳墠绔犺妭鐨勯鐩甹son鏄惁宸茬粡璇锋眰杩�
+            const res = await axios.get(
+              this.config.activeBook.resourceUrl + "/question-" + num + ".json"
+            );
+            if (!res.data) return [];
+            this.questionList = res.data.data;
+            this.questionDataIndex = res.data.chapterNum;
+          }
+          let ids = [];
+          questionIndex
+            ? (ids = this.questionId[num][page][questionIndex])
+            : (ids = this.questionId[num][page]);
+          for (let index = 0; index < this.questionList.length; index++) {
+            const item = this.questionList[index];
             // 鏁板鍏紡鍔犵被鍚嶅幓淇敼鏍峰紡
-            if (item.type && item.type == 'material') {
-              if (!item.infoList.length) return false
-              item.infoList.forEach(citem => {
-                if (citem.answer) citem.answer = citem.answer.replace(/\<math/gi, '<math class="examination-math"')
-              })
+            if (item.type && item.type == "material") {
+              if (!item.infoList.length) return false;
+              item.infoList.forEach((citem) => {
+                if (citem.answer)
+                  citem.answer = citem.answer.replace(
+                    /\<math/gi,
+                    '<math class="examination-math"'
+                  );
+              });
             } else {
-              if (item.answer) item.answer = item.answer.replace(/\<math/gi, '<math class="examination-math"')
+              if (item.answer)
+                item.answer = item.answer.replace(
+                  /\<math/gi,
+                  '<math class="examination-math"'
+                );
             }
-            item.isCollect = this.collectId.indexOf(item.id) > -1 ? true : false
-            if (this.questionId[num][page].indexOf(item.id) > -1) {
+            item.isCollect =
+              this.collectId.indexOf(item.id) > -1 ? true : false;
+            if (ids.indexOf(item.id) > -1) {
               if (item.type && item.type == "material") {
                 cardList.push(item);
               } else {
                 if (item.questionType == "judge") {
                   cardList[1].infoList.push(item);
-                } else if (item.questionType == "singleChoice") {
+                }
+                if (item.questionType == "singleChoice") {
                   cardList[0].infoList.push(item);
-                } else if (item.questionType == "multipleChoice") {
+                }
+                if (item.questionType == "multipleChoice") {
                   cardList[2].infoList.push(item);
-                } else if (item.questionType == "completion") {
+                }
+                if (item.questionType == "completion") {
                   cardList[3].infoList.push(item);
-                } else if (item.questionType == "shortAnswer") {
+                }
+                if (item.questionType == "shortAnswer" ||item.questionType == "formula") {
+                  if(typeof item.userAnswer != 'string') console.log('澶辫触',item);
                   cardList[4].infoList.push(item);
                 }
               }
@@ -891,15 +966,30 @@
         return [];
       }
     },
+    // 瑙嗛灏忕獥
+    handleVideoPicture() {
+      let doms = (this.container ? this.container : document).querySelectorAll(
+        ".video"
+      );
+      doms = Array.from(doms);
+      if (!doms.length) return false;
+      const playVudio = doms.reverse().find((item) => item.paused == false);
+      if (playVudio) {
+        const bottomGap = playVudio.getBoundingClientRect().bottom;
+        const topGap = playVudio.getBoundingClientRect().top;
+        if (bottomGap < 0 || topGap > window.innerHeight) {
+          playVudio.requestPictureInPicture();
+        }
+      }
+    },
   },
   components: {
     pageHeader,
     chapterOne,
-    // chapterTwo,
-    // chapterThree,
-    // chapterFour,
-    // chapterFive,
-    // chapterSix,
+    chapterTwo,
+    chapterThree,
+    chapterFour,
+    chapterFive,
   },
 };
 </script>

--
Gitblit v1.9.1