From d29b8917dc2fd0a0f751480cbbf6ed8dba36d436 Mon Sep 17 00:00:00 2001
From: 闫增涛 <1829501689@qq.com>
Date: 星期五, 31 五月 2024 15:56:15 +0800
Subject: [PATCH] Merge branch 'master' of http://182.92.203.7:2001/r/testbookLayout

---
 src/books/childHealth/view/content/index.vue |  287 +++++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 247 insertions(+), 40 deletions(-)

diff --git a/src/books/childHealth/view/content/index.vue b/src/books/childHealth/view/content/index.vue
index 963114b..dd6c066 100644
--- a/src/books/childHealth/view/content/index.vue
+++ b/src/books/childHealth/view/content/index.vue
@@ -1,5 +1,8 @@
 <template>
   <div class="page-main" @scroll="throttledScrollHandler">
+    <div id="searchDomBox" style="display: none">
+      <div id="searchContent"></div>
+    </div>
     <div
       class="page-content"
       :style="{
@@ -15,57 +18,57 @@
       <chapterOne
         v-if="showCatalogList.indexOf(2) > -1"
         :showPageList="loadPageList"
-        :questionData="questionData"
+        :questionData="questionDataMap"
       ></chapterOne>
       <chapterTwo
         v-if="showCatalogList.indexOf(3) > -1"
         :showPageList="loadPageList"
-        :questionData="questionData"
+        :questionData="questionDataMap"
       ></chapterTwo>
       <chapterThree
         v-if="showCatalogList.indexOf(4) > -1"
         :showPageList="loadPageList"
-        :questionData="questionData"
+        :questionData="questionDataMap"
       ></chapterThree>
       <chapterFour
         v-if="showCatalogList.indexOf(5) > -1"
         :showPageList="loadPageList"
-        :questionData="questionData"
+        :questionData="questionDataMap"
       ></chapterFour>
       <chapterFive
         v-if="showCatalogList.indexOf(6) > -1"
         :showPageList="loadPageList"
-        :questionData="questionData"
+        :questionData="questionDataMap"
       ></chapterFive>
       <chapterSix
         v-if="showCatalogList.indexOf(7) > -1"
         :showPageList="loadPageList"
-        :questionData="questionData"
+        :questionData="questionDataMap"
       ></chapterSix>
       <chapterSeven
         v-if="showCatalogList.indexOf(8) > -1"
         :showPageList="loadPageList"
-        :questionData="questionData"
+        :questionData="questionDataMap"
       ></chapterSeven>
       <chapterEight
         v-if="showCatalogList.indexOf(9) > -1"
         :showPageList="loadPageList"
-        :questionData="questionData"
+        :questionData="questionDataMap"
       ></chapterEight>
       <chapterNine
         v-if="showCatalogList.indexOf(10) > -1"
         :showPageList="loadPageList"
-        :questionData="questionData"
+        :questionData="questionDataMap"
       ></chapterNine>
       <chapterTen
         v-if="showCatalogList.indexOf(11) > -1"
         :showPageList="loadPageList"
-        :questionData="questionData"
+        :questionData="questionDataMap"
       ></chapterTen>
       <chapterEleven
         v-if="showCatalogList.indexOf(12) > -1"
         :showPageList="loadPageList"
-        :questionData="questionData"
+        :questionData="questionDataMap"
       ></chapterEleven>
       <chapterTwelve
         v-if="showCatalogList.indexOf(13) > -1"
@@ -80,6 +83,7 @@
 </template>
 
 <script>
+import Vue from "vue";
 import pageHeader from "./components/header.vue";
 import chapterOne from "./components/chapter001.vue";
 import chapterTwo from "./components/chapter002.vue";
@@ -114,8 +118,9 @@
       observer: null,
       loadPageObserver: null,
       loadPageList: [],
-      questionData: {},
-      renderSignMap: {}
+      questionDataMap: {},
+      renderSignMap: {},
+      highlightData: null
     };
   },
   computed: {
@@ -205,22 +210,35 @@
 
     // 娴嬭瘯椤甸潰璺宠浆
     // 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);
-    // }, 1000);
+      //   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);
   },
   methods: {
     // 婊氬姩鐩戝惉
@@ -324,10 +342,9 @@
           this.container ? this.container : document
         ).querySelector(`[page="${data.page}"]`);
         // 鍒涘缓 createTreeWalker 杩唬鍣紝鐢ㄤ簬閬嶅巻鏂囨湰鑺傜偣锛屼繚瀛樺埌涓�涓暟缁�
-        const treeWalker = document.createTreeWalker(
-          pageDom,
-          NodeFilter.SHOW_TEXT
-        );
+        const treeWalker = (
+          this.container ? this.container : document
+        ).createTreeWalker(pageDom, NodeFilter.SHOW_TEXT);
         const allTextNodes = [];
         let currentNode = treeWalker.nextNode();
         while (currentNode) {
@@ -503,6 +520,7 @@
       });
     },
     getParentWithClass(element, className) {
+      console.log(element, className, "element, className");
       while (element.parentElement) {
         element = element.parentElement;
         if (element.classList.contains(className)) {
@@ -552,11 +570,11 @@
               "chapter"
             );
             const catalog = catalogDom.getAttribute("num");
-            if (!this.questionData[page]) {
+            if (!this.questionDataMap[page]) {
               if (testData && testData[catalog]) {
                 if (testData[catalog][page]) {
                   if (Array.isArray(testData[catalog][page])) {
-                    this.questionData[page] = await getQuestionList(
+                    this.questionDataMap[page] = await getQuestionList(
                       page,
                       testData[catalog][page],
                       this.config.activeBook
@@ -570,9 +588,9 @@
                         this.config.activeBook
                       );
                     }
-                    this.questionData[page] = obj;
+                    this.questionDataMap[page] = obj;
                   }
-                  console.log("棰樼洰", this.questionData);
+                  console.log("棰樼洰", this.questionDataMap);
                 }
               }
             }
@@ -585,6 +603,36 @@
                   this.renderSign(key, item);
                 });
               }
+            }
+            // 澶勭悊楂樹寒
+            if (this.highlightData) {
+              // 楂樹寒琛�
+              setTimeout(() => {
+                // 鑾峰彇椤甸潰鎵�鏈塼ext鑺傜偣
+                const pageTextList = (
+                  this.container ? this.container : 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椤�
@@ -605,7 +653,7 @@
           autoplay: {
             //鑷姩寮�濮�
             delay: 3000, //鏃堕棿闂撮殧
-            disableOnInteraction: false, //*鎵嬪姩鎿嶄綔杞挱鍥惧悗涓嶄細鏆傚仠*
+            disableOnInteraction: false //*鎵嬪姩鎿嶄綔杞挱鍥惧悗涓嶄細鏆傚仠*
           },
           paginationClickable: true,
           slidesPerView: 1, // 涓�缁勪笁涓�
@@ -617,11 +665,11 @@
             ),
             prevEl: (this.container ? this.container : document).querySelector(
               ".swiper-button-prev"
-            ),
+            )
           },
           // 绐楀彛鍙樺寲,閲嶆柊init,閽堝F11鍏ㄥ睆鍜屾斁澶х缉灏�,蹇呴』鍔�
           observer: true,
-          observeParents: true,
+          observeParents: true
           // // 濡傛灉闇�瑕佸垎椤靛櫒
           // pagination: {
           //   el: (this.container ? this.container : document).querySelector(
@@ -630,6 +678,47 @@
           //   clickable: true // 鍒嗛〉鍣ㄥ彲浠ョ偣鍑�
           // }
         });
+      }
+      const pptDoms = (
+        this.container ? this.container : document
+      ).querySelectorAll(".swiper_ppt");
+      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;
+          },
+          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() {
@@ -647,6 +736,124 @@
           title: true // 鏄剧ず鏍囬
         });
       }
+    },
+    // 鏍规嵁鍏抽敭瀛楀叏鏂囨绱�
+    searchTextByPage(keyword) {
+      const searchResult = [];
+      let catalogIndex = 0;
+      // 鎵�鏈夌珷鑺傜粍浠讹紙姣忔湰涔﹀埗浣滄椂鍗曠嫭閰嶇疆锛�
+      const pageData = {
+        pageHeader,
+        chapterOne,
+        chapterTwo,
+        chapterThree,
+        chapterFour,
+        chapterFive,
+        chapterSix,
+        chapterSeven,
+        chapterEight,
+        chapterNine,
+        chapterTen,
+        chapterEleven,
+        chapterTwelve,
+        chapterThirteen
+      };
+      // 閬嶅巻鎵�鏈夌珷鑺傛枃浠�
+      for (const key in pageData) {
+        catalogIndex++;
+        let pageComponent, pageExample;
+        // 鍏堟覆鏌撲竴娆″綋鍓嶇珷鑺傛枃浠讹紙杩欐椂椤甸潰鐨勫唴瀹逛负绌猴級锛岃幏鍙栭〉鐮佷俊鎭�
+        pageComponent = Vue.extend(pageData[key]);
+        pageExample = new pageComponent({
+          propsData: {
+            showPageList: [],
+            questionData: {}
+          }
+        });
+        pageExample.$mount(
+          (this.container ? this.container : document).querySelector(
+            "#searchContent"
+          )
+        );
+        // 鑾峰彇椤电爜
+        const pageDom = (this.container ? this.container : document)
+          .querySelector("#searchDomBox")
+          .querySelectorAll(".page-box");
+        const pages = [];
+        for (let i = 0; i < pageDom.length; i++) {
+          const pageDomItem = pageDom[i];
+          pages.push(Number(pageDomItem.getAttribute("page")));
+        }
+        // 鑾峰彇椤甸潰缁撴潫锛屽嵏杞介攢姣�
+        pageExample.$destroy();
+        (this.container ? this.container : document).querySelector(
+          "#searchDomBox"
+        ).innerHTML = '<div id="searchContent"></div>';
+        // 閬嶅巻椤电爜
+        if (pages.length) {
+          for (let i = 0; i < pages.length; i++) {
+            const pageNum = pages[i];
+            // 鍔ㄦ�佹覆鏌撳搴旂珷鑺傜殑椤电爜
+            pageComponent = Vue.extend(pageData[key]);
+            pageExample = new pageComponent({
+              propsData: {
+                showPageList: [pageNum],
+                questionData: {}
+              }
+            });
+            pageExample.$mount(
+              (this.container ? this.container : document).querySelector(
+                "#searchContent"
+              )
+            );
+            // 鑾峰彇瀵瑰簲椤甸潰dom
+            const thisPageDom = (this.container ? this.container : document)
+              .querySelector("#searchDomBox")
+              .querySelector(`[page="${pageNum}"]`);
+            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(keyword);
+                if (txtIndex > -1) {
+                  // 璁板綍鍏抽敭瀛楁墍鍦ㄩ〉鐮併�佺珷鑺備互鍙婂尮閰嶅埌鐨勬钀�
+                  searchResult.push({
+                    page: pageNum,
+                    catalog: catalogIndex,
+                    txt: textDom.textContent,
+                    txtIndex: txtIndex
+                  });
+                }
+              }
+              // 缁撴潫锛屽嵏杞介攢姣�
+              pageExample.$destroy();
+              (this.container ? this.container : document).querySelector(
+                "#searchDomBox"
+              ).innerHTML = '<div id="searchContent"></div>';
+            }
+          }
+        }
+      }
+      // 杈撳嚭鎼滅储缁撴灉
+      console.log(searchResult);
+      return searchResult;
+    },
+    // 鏍规嵁妫�绱㈢粨鏋滆烦杞搴斾綅缃苟楂樹寒
+    searchItemLocation(data) {
+      // 璁板綍楂樹寒淇℃伅
+      this.highlightData = data;
+      // 璺宠浆
+      this.gotoPage(data.catalog, data.page, () => {});
     }
   },
   components: {

--
Gitblit v1.9.1