From c76dd06de1bb752719900e7ec07d24a5da0966a5 Mon Sep 17 00:00:00 2001
From: 闫增涛 <1829501689@qq.com>
Date: 星期五, 22 十一月 2024 11:17:00 +0800
Subject: [PATCH] 公式输入框样式优化

---
 src/books/mathBook/view/components/index.vue |  357 +++++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 263 insertions(+), 94 deletions(-)

diff --git a/src/books/mathBook/view/components/index.vue b/src/books/mathBook/view/components/index.vue
index d608cce..30f1d55 100644
--- a/src/books/mathBook/view/components/index.vue
+++ b/src/books/mathBook/view/components/index.vue
@@ -18,31 +18,57 @@
       <chapterOne
         v-if="showCatalogList.indexOf(2) > -1"
         :showPageList="loadPageList"
-      ></chapterOne>
+        :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>
 
 <script>
+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";
 import "swiper/swiper-bundle.css";
 import Viewer from "viewerjs";
 import "viewerjs/dist/viewer.css";
+import getQuestionList from "@/assets/methods/examination";
 export default {
-  name:"pageContent",
+  name: "pageContent",
   data() {
     return {
-      catalogLength: 2, // 鎬荤珷鑺傛暟
+      catalogLength: 6, // 鎬荤珷鑺傛暟
       showCatalogList: [], // 鏄剧ず鐨勭珷鑺�
       loadThreshold: 300, // 瑙﹀彂鍔犺浇闃堝��
       throttleThreshold: 100, // 鑺傛祦闃堝��
@@ -54,6 +80,10 @@
       questionDataMap: {},
       renderSignMap: {},
       highlightData: null,
+      questionId: {},
+      collectId: [],
+      questionDataIndex: 0, // 褰撳墠璇锋眰鐨勬槸鍝釜绔犺妭鐨勯鐩�
+      questionList: [], // 绔犺妭棰樼洰鍒楄〃
     };
   },
   computed: {
@@ -158,36 +188,40 @@
     }, 500);
 
     // 娴嬭瘯椤甸潰璺宠浆
-    // setTimeout(() => {
-    //   this.gotoPage(1, 10);
-    //   setTimeout(() => {
-    //     this.renderSign("Highlight", {
-    //       id: "2ACA9359",
-    //       txt: "棰樹竴瀛︿範涓婚涓� 杩愬姩",
-    //       page: "10",
-    //       type: "Highlight",
-    //       color: "#F5E12A"
-    //     });
-    // setTimeout(() => {
-    //   this.delSign({
-    //     ids: ["2ACA9359"]
-    //   });
-    // }, 2000);
-    //   }, 5000);
+    //  setTimeout(() => {
+    //  this.gotoPage(3,72);
+    //   //   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
-    // });
-    // }, 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);
+
+    // 鑾峰彇棰樼洰id鍒楄〃
+    this.getQuestionId();
+    this.getCollect();
   },
   methods: {
     // setZoom1() {
@@ -206,6 +240,7 @@
     // },
     // 婊氬姩鐩戝惉
     scrollFun(event) {
+      this.handleVideoPicture();
       // 鍒ゆ柇鍚戜笂婊氬姩杩樻槸鍚戜笅婊氬姩
       if (event.target.scrollTop > this.previousScrollTop) {
         // 鍚戜笅
@@ -309,7 +344,10 @@
           this.container ? this.container : document
         ).querySelector(`[page="${data.page}"]`);
         // 鍒涘缓 createTreeWalker 杩唬鍣紝鐢ㄤ簬閬嶅巻鏂囨湰鑺傜偣锛屼繚瀛樺埌涓�涓暟缁�
-        const treeWalker = document.createTreeWalker(pageDom, NodeFilter.SHOW_TEXT);
+        const treeWalker = document.createTreeWalker(
+          pageDom,
+          NodeFilter.SHOW_TEXT
+        );
         const allTextNodes = [];
         let currentNode = treeWalker.nextNode();
         while (currentNode) {
@@ -485,7 +523,6 @@
       });
     },
     getParentWithClass(element, className) {
-      console.log(element, className, "element, className");
       while (element.parentElement) {
         element = element.parentElement;
         if (element.classList.contains(className)) {
@@ -537,30 +574,26 @@
             // 娣诲姞椤电爜
             this.loadPageList.push(Number(page));
             const catalog = catalogDom.getAttribute("num");
-            // if (!this.questionDataMap[page]) {
-            //   if (testData && testData[catalog]) {
-            //     if (testData[catalog][page]) {
-            //       if (Array.isArray(testData[catalog][page])) {
-            //         this.questionDataMap[page] = await getQuestionList(
-            //           page,
-            //           testData[catalog][page],
-            //           this.config.activeBook
-            //         );
-            //       } else {
-            //         const obj = {};
-            //         for (let key in testData[catalog][page]) {
-            //           obj[key] = await getQuestionList(
-            //             [],
-            //             testData[catalog][page][key],
-            //             this.config.activeBook
-            //           );
-            //         }
-            //         this.questionDataMap[page] = obj;
-            //       }
-            //       console.log("棰樼洰", this.questionDataMap);
-            //     }
-            //   }
-            // }
+            if (!this.questionDataMap[page]) {
+              if (this.questionId && this.questionId[catalog]) {
+                if (this.questionId[catalog][page]) {
+                  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);
+                }
+              }
+            }
             // 娓叉煋杩欎竴椤电殑鏍囪
             for (const key in this.renderSignMap) {
               if (this.renderSignMap[key][page]) {
@@ -574,7 +607,10 @@
               // 楂樹寒琛�
               setTimeout(() => {
                 // 鑾峰彇椤甸潰鎵�鏈塼ext鑺傜偣
-                const pageTextList = document.createTreeWalker(target, NodeFilter.SHOW_TEXT);
+                const pageTextList = document.createTreeWalker(
+                  target,
+                  NodeFilter.SHOW_TEXT
+                );
                 // 鍖归厤鍏抽敭瀛�
                 const allPageTextNodes = [];
                 let currentNode = pageTextList.nextNode();
@@ -618,23 +654,19 @@
           autoplay: {
             //鑷姩寮�濮�
             delay: 3000, //鏃堕棿闂撮殧
-            disableOnInteraction: false //*鎵嬪姩鎿嶄綔杞挱鍥惧悗涓嶄細鏆傚仠*
+            disableOnInteraction: false, //*鎵嬪姩鎿嶄綔杞挱鍥惧悗涓嶄細鏆傚仠*
           },
           paginationClickable: true,
           slidesPerView: 1, // 涓�缁勪笁涓�
           spaceBetween: 30, // 闂撮殧
           // 濡傛灉闇�瑕佸墠杩涘悗閫�鎸夐挳
           navigation: {
-            nextEl: dom.querySelector(
-              ".swiper-button-next"
-            ),
-            prevEl: dom.querySelector(
-              ".swiper-button-prev"
-            )
+            nextEl: dom.querySelector(".swiper-button-next"),
+            prevEl: dom.querySelector(".swiper-button-prev"),
           },
           // 绐楀彛鍙樺寲,閲嶆柊init,閽堝F11鍏ㄥ睆鍜屾斁澶х缉灏�,蹇呴』鍔�
           observer: true,
-          observeParents: true
+          observeParents: true,
           // // 濡傛灉闇�瑕佸垎椤靛櫒
           // pagination: {
           //   el: (this.container ? this.container : document).querySelector(
@@ -657,12 +689,8 @@
           spaceBetween: 30, // 闂撮殧
           // 濡傛灉闇�瑕佸墠杩涘悗閫�鎸夐挳
           navigation: {
-            nextEl: dom.querySelector(
-              ".swiper-button-next"
-            ),
-            prevEl: dom.querySelector(
-              ".swiper-button-prev"
-            )
+            nextEl: dom.querySelector(".swiper-button-next"),
+            prevEl: dom.querySelector(".swiper-button-prev"),
           },
           // 绐楀彛鍙樺寲,閲嶆柊init,閽堝F11鍏ㄥ睆鍜屾斁澶х缉灏�,蹇呴』鍔�
           observer: true,
@@ -681,8 +709,8 @@
               var paginationInfoEl = dom.querySelector(".pageBox");
               if (paginationInfoEl)
                 paginationInfoEl.textContent = currentPage + "/" + totalPages;
-            }
-          }
+            },
+          },
         });
       }
     },
@@ -710,11 +738,10 @@
       const pageData = {
         pageHeader,
         chapterOne,
-        // chapterTwo,
-        // chapterThree,
-        // chapterFour,
-        // chapterFive,
-        // chapterSix,
+        chapterTwo,
+        chapterThree,
+        chapterFour,
+        chapterFive,
       };
       // 閬嶅巻鎵�鏈夌珷鑺傛枃浠�
       for (const key in pageData) {
@@ -726,7 +753,7 @@
           propsData: {
             showPageList: [],
             questionData: {},
-            isSearch: true
+            isSearch: true,
           },
         });
         pageExample.$mount(
@@ -758,7 +785,7 @@
               propsData: {
                 showPageList: [pageNum],
                 questionData: {},
-                isSearch: true
+                isSearch: true,
               },
             });
             pageExample.$mount(
@@ -772,7 +799,10 @@
               .querySelector(`[page="${pageNum}"]`);
             if (thisPageDom) {
               // 鑾峰彇椤甸潰鎵�鏈塼ext鑺傜偣
-              const pageTextList = document.createTreeWalker(thisPageDom, NodeFilter.SHOW_TEXT);
+              const pageTextList = document.createTreeWalker(
+                thisPageDom,
+                NodeFilter.SHOW_TEXT
+              );
               // 鍖归厤鍏抽敭瀛�
               const allPageTextNodes = [];
               let currentNode = pageTextList.nextNode();
@@ -813,15 +843,153 @@
       // 璺宠浆
       this.gotoPage(data.catalog, data.page, () => {});
     },
+    // 鑾峰彇棰樼洰鍒楄〃
+    getQuestionId() {
+      axios
+        .get(this.config.activeBook.resourceUrl + "/question.json")
+        .then((res) => {
+          this.questionId = res.data.data;
+        });
+    },
+    // 鑾峰彇棰樼洰鏀惰棌id鍒楄〃
+    getCollect() {
+      if (!localStorage.getItem(this.config.tokenKey)) return false;
+      this.MG.identity
+        .getUserKey({
+          domain: "collectData",
+          keys: [this.config.activeBook.bookId],
+        })
+        .then((res) => {
+          try {
+            const collect = JSON.parse(res[0].value);
+            if (collect.length) {
+              this.collectId = collect.find(
+                (item) => item.type == "json"
+              ).collectList;
+            }
+          } catch (error) {
+            console.log("鏆傛棤鏁版嵁");
+          }
+        })
+        .catch((res) => {
+          console.log("index 璇锋眰棰樼洰鏀惰棌id鎶ラ敊");
+        });
+      console.log('鏀惰棌id',this.collectId);
+    },
+    // 鑾峰彇绔犺妭棰樼洰
+    async getQuestion(num, page, questionIndex) {
+      let cardList = [
+        {
+          catalogName: "鍗曢�夐",
+          infoList: [],
+        },
+        {
+          catalogName: "鍒ゆ柇棰�",
+          infoList: [],
+        },
+        {
+          catalogName: "澶氶�夐",
+          infoList: [],
+        },
+        {
+          catalogName: "濉┖棰�",
+          infoList: [],
+        },
+        {
+          catalogName: "绠�绛旈",
+          infoList: [],
+        },
+        
+      ];
+      if (this.questionId) {
+        if (this.questionId[num] && this.questionId[num][page]) {
+          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"'
+                  );
+              });
+            } else {
+              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 (ids.indexOf(item.id) > -1) {
+              if (item.type && item.type == "material") {
+                cardList.push(item);
+              } else {
+                if (item.questionType == "judge") {
+                  cardList[1].infoList.push(item);
+                }
+                if (item.questionType == "singleChoice") {
+                  cardList[0].infoList.push(item);
+                }
+                if (item.questionType == "multipleChoice") {
+                  cardList[2].infoList.push(item);
+                }
+                if (item.questionType == "completion") {
+                  cardList[3].infoList.push(item);
+                }
+                if (item.questionType == "shortAnswer" ||item.questionType == "formula") {
+                  if(typeof item.userAnswer != 'string') console.log('澶辫触',item);
+                  cardList[4].infoList.push(item);
+                }
+              }
+            }
+          }
+          return cardList.filter((item) => item.infoList.length > 0);
+        }
+      } else {
+        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>
@@ -831,6 +999,7 @@
   width: 100%;
   height: 100%;
   overflow: auto;
+
   .page-content {
     max-width: 816px;
     min-width: 375px;

--
Gitblit v1.9.1