From b60b839302d34048c216e9fd85b3a84caea257ea Mon Sep 17 00:00:00 2001
From: YM <479443481@qq.com>
Date: 星期二, 11 六月 2024 10:36:17 +0800
Subject: [PATCH] 1

---
 src/books/childHealth/view/content/index.vue |  307 ++++++++++++++++++++++++++++----------------------
 1 files changed, 171 insertions(+), 136 deletions(-)

diff --git a/src/books/childHealth/view/content/index.vue b/src/books/childHealth/view/content/index.vue
index 72fca05..1b0f7fa 100644
--- a/src/books/childHealth/view/content/index.vue
+++ b/src/books/childHealth/view/content/index.vue
@@ -8,13 +8,15 @@
       :style="{
         fontSize: fontSize ? fontSize + 'px' : '16px',
         transform: `scale(${pageZoom ? pageZoom : 1})`,
-        transformOrigin: 'center top'
+        transformOrigin: 'center top',
       }"
     >
       <pageHeader
         v-if="showCatalogList.indexOf(1) > -1"
         :showPageList="loadPageList"
       ></pageHeader>
+      <!-- <button @click="setZoom1">娴嬭瘯鏀惧ぇ</button> -->
+      <!-- <button @click="setZoom2">娴嬭瘯缂╁皬</button> -->
       <chapterOne
         v-if="showCatalogList.indexOf(2) > -1"
         :showPageList="loadPageList"
@@ -119,7 +121,8 @@
       loadPageObserver: null,
       loadPageList: [],
       questionDataMap: {},
-      renderSignMap: {}
+      renderSignMap: {},
+      highlightData: null,
     };
   },
   computed: {
@@ -128,7 +131,7 @@
     },
     pageZoom() {
       return this.$store.state.qiankun.scale / 100;
-    }
+    },
   },
   watch: {
     showCatalogList: {
@@ -139,7 +142,7 @@
         ) {
           // 璋冪敤鐖跺眰鏂规硶
           this.$store.state.qiankun.catalogChange({
-            showCatalogList: newVal
+            showCatalogList: newVal,
           });
         }
         // 鍚姩椤电爜瑙傚療
@@ -147,7 +150,7 @@
           this.initObservation();
           this.initThemeColor();
         }, 500);
-      }
+      },
     },
     loadPageList: {
       handler(newVal, oldVal) {
@@ -155,8 +158,16 @@
           this.initSwiper();
           this.initViewer();
         }, 200);
-      }
-    }
+      },
+    },
+    pageZoom: {
+      handler(newVal, oldVal) {
+        const scrollBox = (
+          this.container ? this.container : document
+        ).querySelector(".page-main");
+        scrollBox.scrollTop = (scrollBox.scrollTop / oldVal) * newVal;
+      },
+    },
   },
   mounted() {
     // 榛樿鍔犺浇绔犺妭
@@ -183,7 +194,15 @@
         // 鍒犻櫎绗旇銆侀珮浜�佸垝绾�
         delSign: (data) => {
           this.delSign(data);
-        }
+        },
+        // 鍏ㄦ枃妫�绱�
+        searchBookByKeyword: (keyword) => {
+          return this.searchTextByPage(keyword);
+        },
+        // 璺宠浆妫�绱㈢粨鏋滀綅缃�
+        jumpSearchItem: (data) => {
+          this.searchItemLocation(data);
+        },
       });
     }
 
@@ -192,13 +211,13 @@
     this.observer = new IntersectionObserver(this.pageChangeCallback, {
       root: null, // 鎸囧畾鏍瑰厓绱狅紝杩欓噷璁句负 null锛岃〃绀洪�夊彇鏁翠釜瑙嗙獥浣滀负鏍瑰厓绱犮��
       rootMargin: "0px", // 鎸囧畾鏍瑰厓绱犵殑杈圭晫锛岃繖閲岃涓� "0px"锛岃〃绀烘牴鍏冪礌鐨勮竟鐣屽拰瑙嗙獥鐨勮竟鐣岄噸鍚�
-      threshold: 0.5 // 鎸囧畾浜ゅ弶姣斾緥锛岃繖閲岃涓� 0.5锛岃〃绀哄綋鐩爣鍏冪礌涓�鍗婃垨鏇村鏄剧ず鍦ㄨ绐椾腑鏃惰Е鍙戝洖璋冨嚱鏁般��
+      threshold: 0.5, // 鎸囧畾浜ゅ弶姣斾緥锛岃繖閲岃涓� 0.5锛岃〃绀哄綋鐩爣鍏冪礌涓�鍗婃垨鏇村鏄剧ず鍦ㄨ绐椾腑鏃惰Е鍙戝洖璋冨嚱鏁般��
     });
 
     this.loadPageObserver = new IntersectionObserver(this.loadPageCallback, {
       root: null, // 鎸囧畾鏍瑰厓绱狅紝杩欓噷璁句负 null锛岃〃绀洪�夊彇鏁翠釜瑙嗙獥浣滀负鏍瑰厓绱犮��
       rootMargin: "0px", // 鎸囧畾鏍瑰厓绱犵殑杈圭晫锛岃繖閲岃涓� "0px"锛岃〃绀烘牴鍏冪礌鐨勮竟鐣屽拰瑙嗙獥鐨勮竟鐣岄噸鍚�
-      threshold: 0 // 鎸囧畾浜ゅ弶姣斾緥锛岃繖閲岃涓� 0.5锛岃〃绀哄綋鐩爣鍏冪礌涓�鍗婃垨鏇村鏄剧ず鍦ㄨ绐椾腑鏃惰Е鍙戝洖璋冨嚱鏁般��
+      threshold: 0, // 鎸囧畾浜ゅ弶姣斾緥锛岃繖閲岃涓� 0.5锛岃〃绀哄綋鐩爣鍏冪礌涓�鍗婃垨鏇村鏄剧ず鍦ㄨ绐椾腑鏃惰Е鍙戝洖璋冨嚱鏁般��
     });
 
     // 鍚姩椤电爜瑙傚療
@@ -208,38 +227,52 @@
     }, 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(1, 10);
+    //   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
+    // });
+    // }, 5000);
   },
   methods: {
+    // setZoom1() {
+    //   let scale = this.$store.state.qiankun.scale + 10;
+    //   const scrollBox = (
+    //     this.container ? this.container : document
+    //   ).querySelector(".page-main");
+    //   this.$store.commit("setZoom", scale);
+    // },
+    // setZoom2() {
+    //   let scale = this.$store.state.qiankun.scale - 10;
+    //   const scrollBox = (
+    //     this.container ? this.container : document
+    //   ).querySelector(".page-main");
+    //   this.$store.commit("setZoom", scale);
+    // },
     // 婊氬姩鐩戝惉
     scrollFun(event) {
       // 鍒ゆ柇鍚戜笂婊氬姩杩樻槸鍚戜笅婊氬姩
@@ -286,7 +319,7 @@
       this.previousScrollTop = event.target.scrollTop;
     },
     // 绔犺妭銆侀〉闈㈣烦杞�
-    gotoPage(catalog, page, callback) {
+    gotoPage(catalog, page) {
       if (catalog >= 0 && catalog <= this.catalogLength) {
         // 澶勭悊娓叉煋绔犺妭
         if (catalog == 0) {
@@ -295,7 +328,7 @@
           this.showCatalogList = [
             this.catalogLength - 2,
             this.catalogLength - 1,
-            this.catalogLength
+            this.catalogLength,
           ];
         } else {
           this.showCatalogList = [catalog - 1, catalog, catalog + 1];
@@ -307,7 +340,6 @@
           ).querySelector(`[page="${page}"]`);
           if (pageDom) {
             pageDom.scrollIntoView();
-            if (callback) callback();
           } else {
             console.log("椤电爜閿欒锛�");
           }
@@ -333,6 +365,10 @@
 
     // 娓叉煋鏍囪
     renderSign(type, data) {
+      // 鐖跺眰璁剧疆绂佹娓叉煋鏍囪鏃朵笉鍐嶈繘琛屾覆鏌�
+      if (this.$store.state.qiankun.disableSign) {
+        return false;
+      }
       const existence = (
         this.container ? this.container : document
       ).querySelector(`[dataid="${data.id}"]`);
@@ -342,9 +378,7 @@
           this.container ? this.container : document
         ).querySelector(`[page="${data.page}"]`);
         // 鍒涘缓 createTreeWalker 杩唬鍣紝鐢ㄤ簬閬嶅巻鏂囨湰鑺傜偣锛屼繚瀛樺埌涓�涓暟缁�
-        const treeWalker = (
-          this.container ? this.container : document
-        ).createTreeWalker(pageDom, NodeFilter.SHOW_TEXT);
+        const treeWalker = document.createTreeWalker(pageDom, NodeFilter.SHOW_TEXT);
         const allTextNodes = [];
         let currentNode = treeWalker.nextNode();
         while (currentNode) {
@@ -543,14 +577,14 @@
           const catalog = catalogDom.getAttribute("num");
           let text = null;
           if (target.querySelector("p")) {
-            text = target.querySelector("p").textContent.substring(0, 20);
+            text = target.querySelector("p").textContent.substring(0, 50);
           }
           // 杩斿洖椤电爜鍜岀珷鑺備俊鎭�
           if (this.$store.state.qiankun && this.$store.state.qiankun.pageChange)
             this.$store.state.qiankun.pageChange({
               page: page,
               catalog: catalog,
-              text
+              text,
             });
           // const sections = Array.from(document.querySelectorAll(".section"));
           //sections锛氳幏鍙栨墍鏈夊叿鏈� .section 绫诲悕鐨勫厓绱狅紝骞惰浆鎹负鏁扮粍銆�
@@ -569,33 +603,32 @@
               target,
               "chapter"
             );
+            // 娣诲姞椤电爜
+            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
-                    );
+                      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
-                      );
+                          obj[key] = await getQuestionList(
+                          [],
+                          testData[catalog][page][key],
+                          this.config.activeBook
+                        );
                     }
                     this.questionDataMap[page] = obj;
                   }
-                  console.log("棰樼洰", this.questionDataMap);
                 }
               }
             }
-            // 娣诲姞椤电爜
-            this.loadPageList.push(Number(page));
             // 娓叉煋杩欎竴椤电殑鏍囪
             for (const key in this.renderSignMap) {
               if (this.renderSignMap[key][page]) {
@@ -603,6 +636,36 @@
                   this.renderSign(key, item);
                 });
               }
+            }
+            // 澶勭悊楂樹寒
+            if (this.highlightData) {
+              // 楂樹寒琛�
+              setTimeout(() => {
+                // 鑾峰彇椤甸潰鎵�鏈塼ext鑺傜偣
+                const pageTextList = document.createTreeWalker(target, NodeFilter.SHOW_TEXT);
+                // 鍖归厤鍏抽敭瀛�
+                const allPageTextNodes = [];
+                let currentNode = pageTextList.nextNode();
+                while (currentNode) {
+                  allPageTextNodes.push(currentNode);
+                  currentNode = pageTextList.nextNode();
+                }
+                for (let i = 0; i < allPageTextNodes.length; i++) {
+                  const textDom = allPageTextNodes[i];
+                  let txtIndex = textDom.textContent.indexOf(
+                    this.highlightData.txt
+                  );
+                  if (txtIndex > -1) {
+                    textDom.parentNode.style.transition =
+                      "background-color 0.8s";
+                    textDom.parentNode.scrollIntoView();
+                    textDom.parentNode.style.backgroundColor = "#79bbf0";
+                    setTimeout(() => {
+                      textDom.parentNode.style.backgroundColor = "";
+                    }, 1000);
+                  }
+                }
+              }, 100);
             }
             if (this.loadPageList.length > 5) {
               // 瓒呰繃5椤�
@@ -655,40 +718,40 @@
       for (let i = 0; i < pptDoms.length; i++) {
         const dom = pptDoms[i];
         new Swiper(dom, {
-        loop: false, // 鏃犵紳
-        autoplay: false,
-        paginationClickable: true,
-        slidesPerView: 1, // 涓�缁勪笁涓�
-        spaceBetween: 30, // 闂撮殧
-        // 濡傛灉闇�瑕佸墠杩涘悗閫�鎸夐挳
-        navigation: {
-          nextEl: (this.container ? this.container : document).querySelector(
-            ".swiper-button-next"
-          ),
-          prevEl: (this.container ? this.container : document).querySelector(
-            ".swiper-button-prev"
-          ),
-        },
-        // 绐楀彛鍙樺寲,閲嶆柊init,閽堝F11鍏ㄥ睆鍜屾斁澶х缉灏�,蹇呴』鍔�
-        observer: true,
-        observeParents: true,
-        on: {
-          init:(value) => {
-            let currentPage = value.activeIndex + 1; // 鑾峰彇褰撳墠椤碉紙浠�1寮�濮嬭鏁帮級
-            let totalPages = value.slides.length; // 鑾峰彇鎬婚〉鏁�
-            var paginationInfoEl = dom.querySelector('.pageBox');
-            if(paginationInfoEl)
-              paginationInfoEl.textContent = currentPage + '/' + totalPages;
+          loop: false, // 鏃犵紳
+          autoplay: false,
+          paginationClickable: true,
+          slidesPerView: 1, // 涓�缁勪笁涓�
+          spaceBetween: 30, // 闂撮殧
+          // 濡傛灉闇�瑕佸墠杩涘悗閫�鎸夐挳
+          navigation: {
+            nextEl: (this.container ? this.container : document).querySelector(
+              ".swiper-button-next"
+            ),
+            prevEl: (this.container ? this.container : document).querySelector(
+              ".swiper-button-prev"
+            ),
           },
-          slideChange:(value) => {
-            let currentPage = value.activeIndex + 1; // 鑾峰彇褰撳墠椤碉紙浠�1寮�濮嬭鏁帮級
-            let totalPages = value.slides.length; // 鑾峰彇鎬婚〉鏁�
-            var paginationInfoEl = dom.querySelector('.pageBox');
-            if(paginationInfoEl)
-              paginationInfoEl.textContent = currentPage + '/' + totalPages;
+          // 绐楀彛鍙樺寲,閲嶆柊init,閽堝F11鍏ㄥ睆鍜屾斁澶х缉灏�,蹇呴』鍔�
+          observer: true,
+          observeParents: true,
+          on: {
+            init: (value) => {
+              let currentPage = value.activeIndex + 1; // 鑾峰彇褰撳墠椤碉紙浠�1寮�濮嬭鏁帮級
+              let totalPages = value.slides.length; // 鑾峰彇鎬婚〉鏁�
+              var paginationInfoEl = dom.querySelector(".pageBox");
+              if (paginationInfoEl)
+                paginationInfoEl.textContent = currentPage + "/" + totalPages;
+            },
+            slideChange: (value) => {
+              let currentPage = value.activeIndex + 1; // 鑾峰彇褰撳墠椤碉紙浠�1寮�濮嬭鏁帮級
+              let totalPages = value.slides.length; // 鑾峰彇鎬婚〉鏁�
+              var paginationInfoEl = dom.querySelector(".pageBox");
+              if (paginationInfoEl)
+                paginationInfoEl.textContent = currentPage + "/" + totalPages;
+            },
           },
-        },
-      });
+        });
       }
     },
     initViewer() {
@@ -703,7 +766,7 @@
             : "body",
           navbar: true, // 鏄剧ず瀵艰埅鏍�
           toolbar: true, // 鏄剧ず宸ュ叿鏍�
-          title: true // 鏄剧ず鏍囬
+          title: true, // 鏄剧ず鏍囬
         });
       }
     },
@@ -726,7 +789,7 @@
         chapterTen,
         chapterEleven,
         chapterTwelve,
-        chapterThirteen
+        chapterThirteen,
       };
       // 閬嶅巻鎵�鏈夌珷鑺傛枃浠�
       for (const key in pageData) {
@@ -737,8 +800,9 @@
         pageExample = new pageComponent({
           propsData: {
             showPageList: [],
-            questionData: {}
-          }
+            questionData: {},
+            isSearch: true
+          },
         });
         pageExample.$mount(
           (this.container ? this.container : document).querySelector(
@@ -768,8 +832,9 @@
             pageExample = new pageComponent({
               propsData: {
                 showPageList: [pageNum],
-                questionData: {}
-              }
+                questionData: {},
+                isSearch: true
+              },
             });
             pageExample.$mount(
               (this.container ? this.container : document).querySelector(
@@ -782,9 +847,7 @@
               .querySelector(`[page="${pageNum}"]`);
             if (thisPageDom) {
               // 鑾峰彇椤甸潰鎵�鏈塼ext鑺傜偣
-              const pageTextList = (
-                this.container ? this.container : document
-              ).createTreeWalker(thisPageDom, NodeFilter.SHOW_TEXT);
+              const pageTextList = document.createTreeWalker(thisPageDom, NodeFilter.SHOW_TEXT);
               // 鍖归厤鍏抽敭瀛�
               const allPageTextNodes = [];
               let currentNode = pageTextList.nextNode();
@@ -801,7 +864,7 @@
                     page: pageNum,
                     catalog: catalogIndex,
                     txt: textDom.textContent,
-                    txtIndex: txtIndex
+                    txtIndex: txtIndex,
                   });
                 }
               }
@@ -820,39 +883,11 @@
     },
     // 鏍规嵁妫�绱㈢粨鏋滆烦杞搴斾綅缃苟楂樹寒
     searchItemLocation(data) {
+      // 璁板綍楂樹寒淇℃伅
+      this.highlightData = data;
       // 璺宠浆
-      this.gotoPage(data.catalog, data.page, () => {
-        // 楂樹寒琛�
-        const thisPageDom = (
-          this.container ? this.container : document
-        ).querySelector(`[page="${data.page}"]`);
-        if (thisPageDom) {
-          // 鑾峰彇椤甸潰鎵�鏈塼ext鑺傜偣
-          const pageTextList = (
-            this.container ? this.container : document
-          ).createTreeWalker(thisPageDom, NodeFilter.SHOW_TEXT);
-          // 鍖归厤鍏抽敭瀛�
-          const allPageTextNodes = [];
-          let currentNode = pageTextList.nextNode();
-          while (currentNode) {
-            allPageTextNodes.push(currentNode);
-            currentNode = pageTextList.nextNode();
-          }
-          for (let i = 0; i < allPageTextNodes.length; i++) {
-            const textDom = allPageTextNodes[i];
-            let txtIndex = textDom.textContent.indexOf(data.txt);
-            if (txtIndex > -1) {
-              textDom.parentNode.style.transition = "background-color 0.8s";
-              textDom.parentNode.scrollIntoView();
-              textDom.parentNode.backgroundColor = "#79bbf0";
-              setTimeout(() => {
-                textDom.parentNode.backgroundColor = "";
-              }, 2000);
-            }
-          }
-        }
-      });
-    }
+      this.gotoPage(data.catalog, data.page, () => {});
+    },
   },
   components: {
     pageHeader,
@@ -868,8 +903,8 @@
     chapterTen,
     chapterEleven,
     chapterTwelve,
-    chapterThirteen
-  }
+    chapterThirteen,
+  },
 };
 </script>
 

--
Gitblit v1.9.1