YM
2024-05-14 c309a98cf8a99f60be712a7d4f836db4702c209a
src/books/childHealth/view/index.vue
@@ -8,22 +8,36 @@
import examinations from "./components/examinations/index.vue";
import { getPublicImage } from "@/assets/js/middleGround/tool";
import pageContent from "./content/index.vue";
import {mapState} from 'vuex'
export default {
  name: "child-health",
  components: {
    pageContent,
    examinations
    examinations,
  },
  data() {
    return {
      type: "option",
      idPathList: [],
      cardList: []
      cardList: [],
    };
  },
  mounted() {
    this.getBookInfo();
    console.log(this.$store.state.qiankun, "this.$store.state.qiankun");
  },
  // computed: {
  //   ...mapState(['lineHeightList'])
  // },
  // wathch: {
  //   lineHeightList:{
  //     handler(){
  //       console.log('监听到lineHeightList变化');
  //       this.handleDom()
  //     },
  //     deep:true
  //   }
  // },
  methods: {
    getBookInfo() {
      let query = {
@@ -32,10 +46,10 @@
        productId: this.config.bookId,
        favoriteTypes: "FavoriteBookCity",
        itemFields: {
          "SysType=": "CmsFolder"
          "SysType=": "CmsFolder",
        },
        coverSize: {
          height: 300
          height: 300,
        },
        fields: {
          seriesName: [],
@@ -57,8 +71,8 @@
          pdf: [],
          protectedEpub: [],
          probationPage: [], //pdf试读页数
          freeEpubPage: [] //epub试读百分比
        }
          freeEpubPage: [], //epub试读百分比
        },
      };
      this.MG.store.getProductDetail(query).then((res) => {
        console.log("图书信息", res.datas.cmsDatas[0].datas);
@@ -85,12 +99,12 @@
          isDownload: [],
          jsek_resourceBrief: [],
          jsek_link: [],
          jsek_questionBank: []
          jsek_questionBank: [],
        },
        pading: {
          start: 0,
          size: 999
        }
          size: 999,
        },
      };
      this.MG.store
        .getProductDetail(query)
@@ -124,8 +138,8 @@
        cmsPath: data.productLinkPath,
        pading: {
          start: 0,
          size: 999
        }
          size: 999,
        },
      };
      this.MG.store.getProductDetail(query).then((res) => {
        console.log("题目", res.datas.cmsDatas[0].datas);
@@ -143,7 +157,7 @@
        pathList.push({
          path: pathitem.productLinkPath,
          catalogName: pathitem.name,
          infoList: []
          infoList: [],
        });
        this.$data.cardList = pathList;
        // 获取题目
@@ -161,12 +175,12 @@
            Embedded_QuestionBank_StemStyle: [],
            Embedded_QuestionBank_OptionStyle: [],
            Embedded_QuestionBank_KnowledgePoint: [],
            Embedded_QuestionBank_Difficulty: []
            Embedded_QuestionBank_Difficulty: [],
          },
          pading: {
            start: 0,
            size: 999
          }
            size: 999,
          },
        };
        this.MG.store.getProductDetail(query).then((res) => {
          let oldList;
@@ -176,7 +190,7 @@
              (item) => item.path == pathitem.productLinkPath
            ).infoList;
            this.setData({
              submitStatus: true
              submitStatus: true,
            });
          }
          res.datas.cmsDatas[0].datas.forEach((item, index) => {
@@ -216,7 +230,7 @@
              isRight: oldObj ? oldObj.isRight : null,
              isComplete: oldObj ? oldObj.isComplete : false,
              isCollect: false,
              isUnfold: "" // 控制解析的折叠面板是否展开
              isUnfold: "", // 控制解析的折叠面板是否展开
            };
            // 多选和填空答案肯为数组,要转换JSON格式
            if (
@@ -237,7 +251,7 @@
                if (item == "input") {
                  questionObj.stem[i] = {
                    num: index,
                    data: "input"
                    data: "input",
                  };
                  if (!oldObj) questionObj.userAnswer[index] = "";
                  index++;
@@ -364,7 +378,6 @@
        });
      }
    },
    getParentWithClass(element, className) {
      while (element.parentElement) {
        element = element.parentElement;
@@ -377,39 +390,69 @@
      const txt = window.getSelection()?.toString();
      const selection = window.getSelection();
      if (selection.type != "none") {
        let node = selection.anchorNode.parentNode.parentNode.parentNode;
        let nextHtml = node.firstChild.innerHTML;
        let node = selection.anchorNode.parentNode;
        let pageHtml = this.getParentWithClass(
          selection.anchorNode,
          "page-box"
        );
        if (txt && node) {
          const page = node.getAttribute("page");
        console.log("子项", selection.anchorNode);
        let chapterDom = this.getParentWithClass(
          selection.anchorNode,
          "chapter"
        );
        let chapterNum;
        if (chapterDom) chapterNum = chapterDom.getAttribute("num");
        console.log("第一处判断", txt, pageHtml);
        if (txt && pageHtml) {
          const page = pageHtml.getAttribute("page");
          console.log(
            {
              chapterNum,
              txt,
              selection,
              node,
              page,
              x: e.x,
              y: e.y,
            },
            "sendData"
          );
          // 监听选中文本事件,并触发父层方法
          if (this.$store.state.qiankun.windowSelection)
            console.log(
              {
                txt,
                selection,
                node,
                page,
                x: e.x,
                y: e.y
              },
              "sendData"
            );
          this.$store.state.qiankun.windowSelection({
            txt,
            selection,
            node,
            page,
            x: e.x,
            y: e.y
          });
          console.log("第二处判断", this.$store.state.qiankun);
          if (this.$store.state.qiankun.windowSelection) {
            this.$store.state.qiankun.windowSelection({
              txt,
              selection,
              node,
              page,
              x: e.x,
              y: e.y,
            });
          }
        }
      }
    }
  }
    },
    handleDom() {
      const selection = window.getSelection();
      let textDom = this.getParentWithClass(selection.anchorNode, "page-box");
      for (let i = 0; i < this.$store.state.lineHeightList.length; i++) {
        let item = this.$store.state.lineHeightList[i];
        let rReg = new RegExp(`${item.selectText}`, "ig");
        let text = textDom.innerHTML;
        console.log(item.selectNode, "item.selectNode.innerHTML");
        let nodeHtml = item.selectNode;
        let nHtml = "";
        nHtml = nodeHtml.replace(
          rReg,
          `<span style="background: ${item.color};padding: 2px;cursor: pointer">${item.selectText}</span>`
        );
        console.log(nHtml);
        let rHtml = "";
        rHtml = text.replace(nodeHtml, nHtml);
        textDom.innerHTML = rHtml;
      }
    },
  },
};
</script>