lsc 2 years ago
parent
commit
4c0b6622b4

+ 1 - 1
dist/index.html

@@ -18,4 +18,4 @@
       border-radius: 10px;
       -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, .3);
       background-color: rgba(0, 0, 0, 0.1);
-    }</style><link href=./static/css/app.91b02d51c694c0ac601f77057eeb842b.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.3ad1d5771e9b13dbdad2.js></script><script type=text/javascript src=./static/js/vendor.2f67952e7fcc55561412.js></script><script type=text/javascript src=./static/js/app.7d1b695aab55962fc7d3.js></script></body></html><script>document.domain = "cocorobo.cn"</script>
+    }</style><link href=./static/css/app.43b6c8edc03ffff6ae329c796d43ef10.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.3ad1d5771e9b13dbdad2.js></script><script type=text/javascript src=./static/js/vendor.81bf0c02c368f320343c.js></script><script type=text/javascript src=./static/js/app.4a8c73efc8242c6ab190.js></script></body></html><script>document.domain = "cocorobo.cn"</script>

File diff suppressed because it is too large
+ 0 - 0
dist/static/css/app.43b6c8edc03ffff6ae329c796d43ef10.css


File diff suppressed because it is too large
+ 0 - 0
dist/static/css/app.43b6c8edc03ffff6ae329c796d43ef10.css.map


File diff suppressed because it is too large
+ 0 - 0
dist/static/css/app.91b02d51c694c0ac601f77057eeb842b.css.map


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/app.4a8c73efc8242c6ab190.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/app.7d1b695aab55962fc7d3.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/vendor.81bf0c02c368f320343c.js


+ 23 - 13
src/components/components/pdf.vue

@@ -86,21 +86,28 @@ export default {
       target: document.querySelector(".pdf"),
     });
     this.pageNum = this.ppage;
+    let dwidth = document.body.offsetWidth;
+    let cwidth = document.getElementsByClassName("pdf")[0].offsetHeight * 1.77;
+    let owidth = "";
+    if (cwidth > dwidth) {
+      owidth = dwidth + "px";
+    } else {
+      owidth = cwidth + "px";
+    }
     var a = document.getElementsByClassName("pdf")[0].offsetWidth;
     let _this = this;
-    this.$refs.pdf.$el.style.width =
-      document.getElementsByClassName("pdf")[0].offsetHeight * 1.77 + "px";
-    this.$emit(
-      "getWidth",
-      document.getElementsByClassName("pdf")[0].offsetHeight * 1.77 + "px"
-    );
+    this.$refs.pdf.$el.style.width = owidth;
+    this.$emit("getWidth", owidth);
     window.addEventListener("resize", () => {
-      this.$refs.pdf.$el.style.width =
-        document.getElementsByClassName("pdf")[0].offsetHeight * 1.77 + "px";
-      this.$emit(
-        "getWidth",
-        document.getElementsByClassName("pdf")[0].offsetHeight * 1.77 + "px"
-      );
+      dwidth = document.body.offsetWidth;
+      cwidth = document.getElementsByClassName("pdf")[0].offsetHeight * 1.77;
+      if (cwidth > dwidth) {
+        owidth = dwidth + "px";
+      } else {
+        owidth = cwidth + "px";
+      }
+      this.$refs.pdf.$el.style.width = owidth;
+      this.$emit("getWidth", owidth);
     });
   },
   methods: {
@@ -199,7 +206,10 @@ export default {
       this.$refs.pdf.pdf.forEachPage(function (page) {
         return page.getTextContent().then(function (content) {
           let text = content.items.map((item) => item.str);
-          let allStr = content.items.reduce((initVal, item) => (initVal += item.str), "");
+          let allStr = content.items.reduce(
+            (initVal, item) => (initVal += item.str),
+            ""
+          );
           console.log(allStr); // 内容字符串
           console.log(text); // 内容数组
         });

+ 297 - 0
src/components/components/pdf4.vue

@@ -0,0 +1,297 @@
+<template>
+  <div class="pdf">
+    <div class="show">
+      <pdf
+        ref="pdf"
+        :src="pdfUrl"
+        :page="pageNum"
+        :rotate="pageRotate"
+        @password="password"
+        @progress="loadedRatio = $event"
+        @page-loaded="pageLoaded($event)"
+        @num-pages="pageTotalNum = $event"
+        @error="pdfError($event)"
+        @link-clicked="page = $event"
+      ></pdf>
+    </div>
+
+    <div class="pdf_footer">
+      <div class="info">
+        <div>当前页数/总页数:{{ pageNum }}/{{ pageTotalNum }}</div>
+        <!-- <div>进度:{{loadedRatio}}</div> -->
+        <!-- <div>页面加载成功: {{curPageNum}}</div> -->
+      </div>
+      <div class="operate">
+        <!-- <div class="btn" @click.stop="clock">顺时针</div>
+        <div class="btn" @click.stop="counterClock">逆时针</div>-->
+        <div class="btn" @click.stop="prePage">上一页</div>
+        <div class="btn" @click.stop="nextPage">下一页</div>
+        <!-- <div class="btn" @click="scaleD">放大</div>
+        <div class="btn" @click="scaleX">缩小</div>
+        <div class="btn" @click="fileDownload(pdfUrl,'pdf文件')">下载</div>-->
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import pdf from "vue-pdf";
+export default {
+  name: "vue_pdf_preview",
+  props: {
+    // 当前pdf路径
+    pdfUrl: {
+      type: String,
+      default:
+        "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/0629%E5%AE%9E%E6%97%B6%E8%AF%BE%E5%A0%82%E6%A8%A1%E6%8B%9F%E6%BC%94%E7%A4%BA%E8%AF%BE%E4%BB%B61656920880446.pdf",
+    },
+    getPage: {
+      type: Function,
+    },
+  },
+  components: {
+    pdf,
+  },
+  data() {
+    return {
+      // 总页数
+      pageTotalNum: 1,
+      // 当前页数
+      pageNum: 1,
+      // 加载进度
+      loadedRatio: 0,
+      // 页面加载完成
+      curPageNum: 0,
+      // 放大系数 默认百分百
+      scale: 69,
+      // 旋转角度 ‘90’的倍数才有效
+      pageRotate: 0,
+      // 单击内部链接时触发 (目前我没有遇到使用场景)
+      page: 0,
+      loading: null,
+    };
+  },
+  watch: {
+    pageTotalNum(val) {
+      if (val) {
+        this.loading.close();
+        this.getPage(1);
+      }
+    },
+  },
+  computed: {},
+  created() {},
+  mounted() {
+    this.loading = this.$loading.service({
+      background: "rgba(255, 255, 255, 0.7)",
+      target: document.querySelector(".pdf"),
+    });
+    let dwidth = document.body.offsetWidth;
+    let cwidth =
+      (document.getElementsByClassName("pdf")[0].offsetHeight - 100) * 1.77;
+    let owidth = "";
+    if (cwidth > dwidth) {
+      owidth = dwidth + "px";
+    } else {
+      owidth = cwidth + "px";
+    }
+    var a = document.getElementsByClassName("pdf")[0].offsetWidth;
+    let _this = this;
+    this.$refs.pdf.$el.style.width = owidth;
+    this.$emit("getWidth", owidth);
+    window.addEventListener("resize", () => {
+      dwidth = document.body.offsetWidth;
+      cwidth =
+        (document.getElementsByClassName("pdf")[0].offsetHeight - 100) * 1.77;
+      if (cwidth > dwidth) {
+        owidth = dwidth + "px";
+      } else {
+        owidth = cwidth + "px";
+      }
+      _this.$refs.pdf.$el.style.width = owidth;
+      _this.$emit("getWidth", owidth);
+      //   var a = document.getElementsByClassName("pdf")[0].offsetWidth;
+      //   if (a < 1300) {
+      //     _this.scale = 100;
+      //     _this.$refs.pdf.$el.style.width = parseInt(this.scale) + "%";
+      //   } else if (a > 1300 && a < 1500) {
+      //     _this.scale = 80;
+      //     _this.$refs.pdf.$el.style.width = parseInt(this.scale) + "%";
+      //   } else if (a > 1500) {
+      //     _this.scale = 69;
+      //     _this.$refs.pdf.$el.style.width = parseInt(this.scale) + "%";
+      //   } else if (a == 1500) {
+      //     _this.scale = 69;
+      //     _this.$refs.pdf.$el.style.width = parseInt(this.scale) + "%";
+      //   }
+    });
+  },
+  methods: {
+    //下载PDF
+    fileDownload(data, fileName) {
+      let blob = new Blob([data], {
+        //type类型后端返回来的数据中会有,根据自己实际进行修改
+        type: "application/pdf;charset-UTF-8",
+      });
+      let filename = fileName || "pdf.pdf";
+      if (typeof window.navigator.msSaveBlob !== "undefined") {
+        window.navigator.msSaveBlob(blob, filename);
+      } else {
+        var blobURL = window.URL.createObjectURL(blob);
+        // 创建隐藏<a>标签进行下载
+        var tempLink = document.createElement("a");
+        tempLink.style.display = "none";
+        tempLink.href = blobURL;
+        tempLink.setAttribute("download", filename);
+        if (typeof tempLink.download === "undefined") {
+          tempLink.setAttribute("target", "_blank");
+        }
+        document.body.appendChild(tempLink);
+        tempLink.click();
+        document.body.removeChild(tempLink);
+        window.URL.revokeObjectURL(blobURL);
+      }
+    },
+
+    //放大
+    scaleD() {
+      this.scale += 5;
+      this.$refs.pdf.$el.style.width = parseInt(this.scale) + "%";
+    },
+
+    //缩小
+    scaleX() {
+      // scale 是百分百展示 不建议缩放
+      if (this.scale == 100) {
+        return;
+      }
+      this.scale += -5;
+      console.log(parseInt(this.scale) + "%");
+      this.$refs.pdf.$el.style.width = parseInt(this.scale) + "%";
+    },
+    // 切换上一页
+    prePage() {
+      var p = this.pageNum;
+      p = p > 1 ? p - 1 : this.pageTotalNum;
+      this.pageNum = p;
+      this.getPage(p);
+    },
+    // 切换下一页
+    nextPage() {
+      var p = this.pageNum;
+      p = p < this.pageTotalNum ? p + 1 : 1;
+      this.pageNum = p;
+      this.getPage(p);
+    },
+    // 顺时针选中角度
+    clock() {
+      this.pageRotate += 90;
+    },
+    // 逆时针旋转角度
+    counterClock() {
+      this.pageRotate -= 90;
+    },
+    // pdf 有密码 则需要输入秘密
+    password(updatePassword, reason) {
+      updatePassword(prompt('password is "test"'));
+      console.log("...reason...");
+      console.log(reason);
+      console.log("...reason...");
+    },
+    // 页面加载成功  当前页数
+    pageLoaded(e) {
+      this.$emit("current", e);
+      this.curPageNum = e;
+    },
+    // 异常监听
+    pdfError(error) {
+      console.error(error);
+    },
+    // 打印所有
+    pdfPrintAll() {
+      this.$refs.pdf.print();
+    },
+    // 打印 第一页和第二页
+    pdfPrint() {
+      // 第一个参数 文档打印的分辨率
+      // 第二个参数 文档打印的页数
+      this.$refs.pdf.print(100, [1, 2]);
+    },
+    // 获取当前页面pdf的文字信息内容
+    logContent() {
+      this.$refs.pdf.pdf.forEachPage(function (page) {
+        return page.getTextContent().then(function (content) {
+          let text = content.items.map((item) => item.str);
+          let allStr = content.items.reduce(
+            (initVal, item) => (initVal += item.str),
+            ""
+          );
+          console.log(allStr); // 内容字符串
+          console.log(text); // 内容数组
+        });
+      });
+    },
+  },
+};
+</script>
+
+<style scoped>
+.pdf {
+  height: 100%;
+  position: relative;
+  box-sizing: border-box;
+}
+.pdf .show {
+  overflow: auto;
+  margin: auto;
+  width: 100%;
+  height: calc(100% - 100px);
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+
+.pdf .pdf_footer {
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  padding: 10px 0;
+  width: 100%;
+  height: 75px;
+  background-color: rgba(255, 255, 255, 0.5);
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  flex-direction: column;
+}
+.pdf .pdf_footer .info {
+  display: flex;
+  flex-wrap: wrap;
+  width: 100%;
+  justify-content: center;
+}
+/* .pdf .pdf_footer .info div {
+  width: 30%;
+} */
+.pdf .pdf_footer .operate {
+  margin: 10px 0 0;
+  display: flex;
+  flex-wrap: wrap;
+  justify-content: center;
+  width: 100%;
+}
+.pdf .pdf_footer .operate div {
+  text-align: center;
+  font-size: 15px;
+}
+.pdf .pdf_footer .operate .btn {
+  cursor: pointer;
+  margin: 5px 10px;
+  width: 100px;
+  border-radius: 10px;
+  padding: 5px;
+  color: #fff;
+  background-color: #066ebe;
+}
+</style>

+ 2559 - 0
src/components/liveProjectDetailKH.vue

@@ -0,0 +1,2559 @@
+<template>
+  <div
+    style="
+      background: rgb(230, 234, 240);
+      width: 100%;
+      margin: 0;
+      position: relate;
+      height: 100%;
+    "
+  >
+    <div class="blackBottom">
+      <div
+        style="
+          display: flex;
+          flex-direction: row;
+          flex-wrap: nowrap;
+          align-items: stretch;
+          padding-left: 10px;
+        "
+      >
+        <div class="logoLive">
+          <img src="../assets/icon/logo.png" alt />
+        </div>
+        <div style="color: #fff; line-height: 45px; padding-left: 15px">
+          introduce a festival (Final)
+        </div>
+      </div>
+    </div>
+    <div class="isNoOther">
+      <div
+        class="imgMiddle"
+        :class="isBlock > 0 ? 'imghalf' : 'imgMiddle'"
+        v-show="!full"
+      >
+        <pdf
+          :pdfUrl="pdfUrl"
+          style="width: 100%; height: 100%"
+          :ppage="ppage"
+          @getPageTotal="getPageTotal"
+          @getWidth="getWidth"
+        ></pdf>
+        <div
+          class="workd_media"
+          style="height: 100%"
+          v-if="videoBlock == 6"
+          :style="{ width: Vwidth }"
+        >
+          <video-player
+            class="video-player vjs-custom-skin"
+            :playsinline="true"
+            :options="playerO[0]"
+            ref="zVideo"
+            @play="onPlayerPlay($event)"
+            style="width: 100%; height: 100%"
+          ></video-player>
+        </div>
+        <div class="video_wrapper" v-if="videoBlock == 6"></div>
+      </div>
+      <div
+        style="
+          background: #d0d6e4;
+          width: 40%;
+          height: 100%;
+          max-width: 40%;
+          overflow: auto;
+        "
+        :class="{ fullStyle: full }"
+        v-if="isBlock > 0"
+      >
+        <div
+          style="
+            background: #fff;
+            width: 96%;
+            margin: 10px auto;
+            height: 96%;
+            position: relative;
+          "
+        >
+          <div
+            style="color: #bfbfbf; padding: 15px 0 15px 25px; font-size: 20px"
+            v-if="isBlock == 3"
+          >
+            课堂评价
+          </div>
+          <div
+            style="color: #bfbfbf; padding: 15px 0 15px 25px; font-size: 20px"
+            v-if="isBlock == 8"
+          >
+            根据题目选择对应的答案
+          </div>
+          <div
+            style="
+              margin-left: 25px;
+              border-bottom: 3px solid #2c83ee;
+              width: 70px;
+              padding-bottom: 3px;
+              text-align: center;
+              padding-top: 15px;
+            "
+            v-if="isBlock == 1"
+          >
+            开始答题
+          </div>
+          <div class="answerBox" v-if="isBlock == 1">
+            <div class="answerBox">
+              <div
+                style="
+                  display: flex;
+                  flex-direction: column;
+                  flex-wrap: wrap;
+                  align-items: center;
+                  justify-content: center;
+                "
+                v-for="item in 1"
+                :key="item"
+              >
+                <div class="choose_style">
+                  <span
+                    @click="isChooseActive(1)"
+                    :class="typeC.indexOf(1) != -1 ? 'isChoose' : ''"
+                    v-if="
+                      tools[ppage - 1].choice && tools[ppage - 1].choice > 0
+                    "
+                    >A</span
+                  >
+                  <span
+                    @click="isChooseActive(2)"
+                    :class="typeC.indexOf(2) != -1 ? 'isChoose' : ''"
+                    v-if="
+                      tools[ppage - 1].choice && tools[ppage - 1].choice > 1
+                    "
+                    >B</span
+                  >
+                  <span
+                    @click="isChooseActive(3)"
+                    :class="typeC.indexOf(3) != -1 ? 'isChoose' : ''"
+                    v-if="
+                      tools[ppage - 1].choice && tools[ppage - 1].choice > 2
+                    "
+                    >C</span
+                  >
+                  <span
+                    @click="isChooseActive(4)"
+                    :class="typeC.indexOf(4) != -1 ? 'isChoose' : ''"
+                    v-if="
+                      tools[ppage - 1].choice && tools[ppage - 1].choice > 3
+                    "
+                    >D</span
+                  >
+                </div>
+                <el-button style="margin: 0 auto" @click="showMember(item)"
+                  >提交</el-button
+                >
+              </div>
+            </div>
+          </div>
+          <div
+            class="answerBox tools_box"
+            v-if="isBlock == 4"
+            style="padding: 10px 0 0 25px; width: 100%; max-width: 100%"
+          >
+            <div style="color: #d1d1d1; font-size: 24px">课堂实践</div>
+            <div
+              style="
+                margin: 20px 0 20px 0;
+                border-bottom: 4px solid #3e86f3;
+                width: 75px;
+                text-align: center;
+                padding-bottom: 3px;
+              "
+            >
+              选择工具
+            </div>
+            <div
+              style="
+                display: flex;
+                flex-direction: row;
+                flex-wrap: wrap;
+                width: 100%;
+                justify-content: flex-start;
+                align-items: center;
+              "
+            >
+              <div
+                v-if="
+                  tools[ppage - 1].tools &&
+                  tools[ppage - 1].tools.indexOf(1) != -1
+                "
+                @click="checkTools(1)"
+                class="toolCss"
+              >
+                <div class="toolImg">
+                  <img src="../assets/icon/secondToolList/whiteBoard.png" alt />
+                  <div>电子白板</div>
+                </div>
+              </div>
+              <div
+                v-if="
+                  tools[ppage - 1].tools &&
+                  tools[ppage - 1].tools.indexOf(3) != -1
+                "
+                @click="checkTools(3)"
+                class="toolCss"
+              >
+                <div class="toolImg">
+                  <img
+                    src="../assets/icon/secondToolList/mindMapping.png"
+                    alt
+                  />
+                  <div>思维导图</div>
+                </div>
+              </div>
+              <div
+                v-if="
+                  tools[ppage - 1].tools &&
+                  tools[ppage - 1].tools.indexOf(28) != -1
+                "
+                @click="checkTools(28)"
+                class="toolCss"
+              >
+                <div class="toolImg">
+                  <img src="../assets/icon/thirdToolList/translation.png" alt />
+                  <div>翻译</div>
+                </div>
+              </div>
+              <div
+                v-if="
+                  tools[ppage - 1].tools &&
+                  tools[ppage - 1].tools.indexOf(4) != -1
+                "
+                @click="checkTools(4)"
+                class="toolCss"
+              >
+                <div class="toolImg">
+                  <img src="../assets/icon/thirdToolList/ask.png" alt />
+                  <div>问卷调查</div>
+                </div>
+              </div>
+              <div
+                v-if="
+                  tools[ppage - 1].tools &&
+                  tools[ppage - 1].tools.indexOf(6) != -1
+                "
+                @click="checkTools(6)"
+                class="toolCss"
+              >
+                <div class="toolImg">
+                  <img src="../assets/icon/secondToolList/doc.png" alt />
+                  <div>协同文档</div>
+                </div>
+              </div>
+              <div
+                v-if="
+                  tools[ppage - 1].tools &&
+                  tools[ppage - 1].tools.indexOf(7) != -1
+                "
+                @click="checkTools(7)"
+                class="toolCss"
+              >
+                <div class="toolImg">
+                  <img
+                    src="../assets/icon/secondToolList/mindNetwork.png"
+                    alt
+                  />
+                  <div>思维网格</div>
+                </div>
+              </div>
+              <div
+                v-if="
+                  tools[ppage - 1].tools &&
+                  tools[ppage - 1].tools.indexOf(16) != -1
+                "
+                @click="addImg($event)"
+                class="toolCss"
+              >
+                <div class="toolImg">
+                  <img src="../assets/icon/firstToolList/myMessage.png" alt />
+                  <div>
+                    上传文件
+                    <input
+                      type="file"
+                      accept="image/png, image/gif, image/jpeg"
+                      style="display: none"
+                      @change="beforeUpload1($event, 1)"
+                    />
+                  </div>
+                </div>
+              </div>
+              <div
+                v-if="
+                  tools[ppage - 1].tools &&
+                  tools[ppage - 1].tools.indexOf(29) != -1
+                "
+                @click="addImg($event)"
+                class="toolCss"
+              >
+                <div class="toolImg">
+                  <img src="../assets/icon/firstToolList/myMessage.png" alt />
+                  <div>
+                    上传视频
+                    <input
+                      type="file"
+                      accept="video/mp4, video/quicktime, video/x-msvideo"
+                      style="display: none"
+                      @change="beforeUpload1($event, 2)"
+                    />
+                  </div>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div
+            class="answerBox"
+            style="height: 100%"
+            v-if="isBlock == 2"
+            ref="qrcodePicture"
+          >
+            <div style="height: 100%; width: 100%">
+              <div v-if="toolCount == 1" class="tools_child_box">
+                <div class="tools_title">
+                  <span>电子白板</span>
+                  <div>
+                    <img
+                      src="../assets/full.png"
+                      class="full"
+                      @click="fullTools"
+                    />
+                  </div>
+                </div>
+                <iframe
+                  webkitallowfullscreen
+                  mozallowfullscreen
+                  allowfullscreen
+                  style="width: 100%; height: 100%; border: none"
+                  src="https://iwb.cocorobo.cn/"
+                  ref="whiteBoard"
+                ></iframe>
+              </div>
+              <div v-if="toolCount == 3" class="tools_child_box">
+                <div class="tools_title">
+                  <span>思维导图</span>
+                  <div>
+                    <img
+                      src="../assets/full.png"
+                      class="full"
+                      @click="fullTools"
+                    />
+                  </div>
+                </div>
+                <iframe
+                  webkitallowfullscreen
+                  mozallowfullscreen
+                  allowfullscreen
+                  style="width: 100%; height: 100%; border: none"
+                  src="//cloud.cocorobo.cn/kityminder-editor/dist/index.html"
+                  ref="mind"
+                ></iframe>
+              </div>
+              <div v-if="toolCount == 28" class="tools_child_box">
+                <div class="tools_title">
+                  <span>翻译</span>
+                  <div>
+                    <img
+                      src="../assets/full.png"
+                      class="full"
+                      @click="fullTools"
+                    />
+                  </div>
+                </div>
+                <iframe
+                  webkitallowfullscreen
+                  mozallowfullscreen
+                  allowfullscreen
+                  style="width: 100%; height: 100%; border: none"
+                  src="//dict.youdao.com/"
+                  ref="mind"
+                ></iframe>
+              </div>
+              <div v-if="toolCount == 6" class="tools_child_box">
+                <div class="tools_title">
+                  <span>协同文档</span>
+                  <div>
+                    <img
+                      src="../assets/full.png"
+                      class="full"
+                      @click="fullTools"
+                    />
+                  </div>
+                </div>
+                <iframe
+                  webkitallowfullscreen
+                  mozallowfullscreen
+                  allowfullscreen
+                  style="width: 100%; height: 100%; border: none"
+                  src="https://cloud.cocorobo.cn/Office/Word/WordEditArea.htm"
+                ></iframe>
+              </div>
+              <div v-if="toolCount == 7" class="tools_child_box">
+                <div class="tools_title">
+                  <span>思维网格</span>
+                  <div>
+                    <img
+                      src="../assets/full.png"
+                      class="full"
+                      @click="fullTools"
+                    />
+                  </div>
+                </div>
+                <iframe
+                  webkitallowfullscreen
+                  mozallowfullscreen
+                  allowfullscreen
+                  style="width: 100%; height: 100%; border: none"
+                  src="https://pbl.cocorobo.cn/pbl-teacher-table/dist/#/Grid"
+                  ref="grid"
+                ></iframe>
+              </div>
+              <div
+                id="shishi_loading"
+                style="
+                  width: 100%;
+                  height: 100%;
+                  background: #0000008f;
+                  position: absolute;
+                  top: 0;
+                  left: 0;
+                  z-index: 99999999999999;
+                  display: none;
+                  justify-content: center;
+                  align-items: center;
+                "
+              >
+                <div
+                  style="
+                    color: #fff;
+                    padding: 15px;
+                    background: #00000070;
+                    border-radius: 5px;
+                    font-size: 18px;
+                    display: flex;
+                    align-items: center;
+                  "
+                >
+                  <img
+                    src="https://pbl.cocorobo.cn/pbl-student-table/dist/js/loading.gif"
+                    alt
+                    style="width: 26px; margin-right: 10px"
+                  />
+                  <span>上传中...</span>
+                </div>
+              </div>
+              <!-- <div class="nextStepBox">
+                <div class="nextStepOne" @click="(isBlock = 4), (full = false)">
+                  返回
+                </div>
+              </div> -->
+              <div
+                class="nextStepOne"
+                style="float: right"
+                @click="addJtWork(4)"
+                v-if="toolCount == 1 || toolCount == 3 || toolCount == 7"
+              >
+                截图
+              </div>
+              <!-- <div
+                class="nextStepOne"
+                style="float: right"
+                @click="addImg($event)"
+                v-if="toolCount == 1 || toolCount == 3 || toolCount == 7"
+              >
+                上传文件
+                <input
+                  type="file"
+                  accept="image/png, image/gif, image/jpeg"
+                  style="display: none"
+                  @change="beforeUpload1($event, 1)"
+                />
+              </div>-->
+            </div>
+          </div>
+          <div
+            class="answerBox"
+            v-if="
+              isBlock == 3 &&
+              tools[ppage - 1].tools &&
+              tools[ppage - 1].tools.indexOf(14) != -1
+            "
+            style="padding: 0 0 0 25px"
+          >
+            <div>
+              <div
+                class="score_box"
+                v-for="(ra, raIndex) in tools[ppage - 1].rateArray"
+                :key="raIndex"
+              >
+                <span>{{ ra }} </span>
+                <el-rate v-model="rateList[raIndex]"></el-rate>
+              </div>
+            </div>
+            <span
+              slot="footer"
+              class="dialog-footer sztFooter"
+              style="
+                padding: 0 0 30px 0px;
+                position: absolute;
+                right: 20px;
+                bottom: 0;
+              "
+            >
+              <!-- <el-button @click="isBlock = 0">取消</el-button> -->
+              <el-button type="primary" @click="addWork(6)">确定</el-button>
+            </span>
+          </div>
+          <div
+            class="answerBox"
+            v-if="
+              isBlock == 8 &&
+              tools[ppage - 1].tools &&
+              tools[ppage - 1].tools.indexOf(27) != -1
+            "
+            style="padding: 0 0 0 25px"
+          >
+            <div>
+              <div
+                v-for="(tk, tIndex) in tools[ppage - 1].choice"
+                :key="tIndex"
+                class="tkCss"
+              >
+                <div style="margin-right: 10px; font-size: 18px">
+                  {{ tIndex + 1 }}、
+                </div>
+                <el-select v-model="tkAnswer[tIndex]" placeholder="请选择答案">
+                  <el-option
+                    v-for="(tkA, tkAIndex) in tools[ppage - 1].tkAnswerBox"
+                    :key="tkAIndex"
+                    :label="tkA"
+                    :value="tkA"
+                  ></el-option>
+                </el-select>
+                <span
+                  v-if="tiankongAnswer.length && isNoHomeWork"
+                  class="tiankongAnswer"
+                  :class="{
+                    tfalse: tiankongAnswer[tIndex] != tkAnswer[tIndex],
+                  }"
+                  >正确答案:{{ tiankongAnswer[tIndex] }}</span
+                >
+              </div>
+            </div>
+            <span
+              slot="footer"
+              class="dialog-footer sztFooter"
+              style="
+                padding: 0 0 30px 0px;
+                position: absolute;
+                right: 20px;
+                bottom: 0;
+              "
+            >
+              <!-- <el-button @click="isBlock = 0">取消</el-button> -->
+              <el-button type="primary" @click="addWork(5)">提交</el-button>
+            </span>
+          </div>
+          <div
+            class="answerBox"
+            v-if="isBlock == 5"
+            style="padding: 10px 0 0 25px"
+          >
+            <div style="color: #d1d1d1; font-size: 24px">课堂实践</div>
+            <div
+              style="
+                margin: 20px 0 20px 0;
+                border-bottom: 4px solid #3e86f3;
+                width: 75px;
+                text-align: center;
+                padding-bottom: 3px;
+              "
+            >
+              选择附件
+            </div>
+            <div
+              style="
+                display: flex;
+                flex-direction: row;
+                flex-wrap: wrap;
+                width: 100%;
+                justify-content: flex-start;
+                align-items: center;
+              "
+            >
+              <div
+                v-if="tools[ppage - 1].file && tools[ppage - 1].file.length"
+                class="fileBox"
+              >
+                <div
+                  class="fileListCss"
+                  v-for="(v, vIndex) in videoList"
+                  :key="vIndex"
+                >
+                  <div class="fileCss" @click="playVideo(v.src, vIndex)">
+                    <img src="../assets/uploadMp4.png" alt />
+                  </div>
+                  <div>{{ v.name }}</div>
+                </div>
+                <div
+                  class="fileListCss"
+                  v-for="(f, fIndex) in fileList"
+                  :key="fIndex"
+                >
+                  <div class="fileCss" @click="openFile(f.src)">
+                    <img src="../assets/file.png" alt />
+                  </div>
+                  <div>{{ f.name }}</div>
+                </div>
+              </div>
+            </div>
+            <!-- <div class="nextStepBox">
+              <div class="nextStepOne" @click="isBlock = 0">关闭</div>
+            </div>-->
+          </div>
+          <!-- <div class="answerBox" :class="{ fullStyle: full }" v-if="isBlock == 6">
+            <div style="height: 70%; width: 100%">
+              <div class="wheel">
+                     <div class="workd_media" style="height: 100%">
+          <video-player
+            class="video-player vjs-custom-skin"
+            :playsinline="true"
+            :options="playerO[0]"
+            @play="onPlayerPlay($event)"
+            style="width: 90%; height: 100%; margin: 0 0 0 30px"
+          ></video-player>
+        </div>
+              </div>
+            </div>
+          </div>-->
+          <div
+            class="answerBox"
+            style="height: 100%"
+            :class="{ fullStyle: full }"
+            v-if="isBlock == 7"
+          >
+            <div style="height: 70%; width: 100%">
+              <div class="wheel" style="height: 520px; width: 100%">
+                <iframe
+                  style="width: 100%; height: 100%; border: none"
+                  :src="pptImgUrl"
+                ></iframe>
+              </div>
+              <div class="nextStepBox" style="margin-top: 5%">
+                <div class="nextStepOne" @click="isBlock = 5">返回</div>
+              </div>
+            </div>
+          </div>
+          <div
+            class="answerBox"
+            :class="{ fullStyle: full }"
+            v-if="isBlock == 9"
+          >
+            <div style="height: 70%; width: 100%">
+              <div class="wheel">
+                <div style="height: 100%">
+                  <audio
+                    style="margin: 0 auto; display: block"
+                    :src="audioUrl"
+                    controls="controls"
+                    ref="audio"
+                  >
+                    Your browser does not support the audio element.
+                  </audio>
+                </div>
+              </div>
+              <!-- <div class="nextStepBox" style="margin-top: 5%">
+                <div class="nextStepOne" @click="isBlock = 0">关闭</div>
+              </div>-->
+            </div>
+          </div>
+          <div
+            class="answerBox"
+            :class="{ fullStyle: full }"
+            v-if="isBlock == 10"
+          >
+            <div style="height: 70%; width: 100%">
+              <div class="wheel">
+                <div style="height: 100%">
+                  <el-button type="primary" @click="startRecorder()">{{
+                    !isRecord ? "开始录音" : "结束录音"
+                  }}</el-button>
+                  <el-button type="primary" @click="playRecorder()">{{
+                    !isPlayerRecord ? "录音播放" : "停止播放"
+                  }}</el-button>
+                  <el-button type="primary" @click="getMp3Data()"
+                    >上传录音</el-button
+                  >
+
+                  <div
+                    style="
+                      margin: 10px auto 0;
+                      display: flex;
+                      align-items: center;
+                    "
+                    v-if="LuAudioUrl"
+                  >
+                    <span>已上传录音:</span>
+                    <audio :src="LuAudioUrl" controls="controls" ref="audio">
+                      Your browser does not support the audio element.
+                    </audio>
+                  </div>
+                </div>
+              </div>
+              <!-- <div class="nextStepBox" style="margin-top: 5%">
+                <div class="nextStepOne" @click="isBlock = 0">关闭</div>
+              </div>-->
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+
+    <div class="blackBottomB" v-if="false">
+      <!-- <div
+        class="nextStepOne"
+        style="float: right"
+        @click="addImg($event)"
+        v-if="tools[ppage - 1].tools && tools[ppage - 1].tools.indexOf(16) != -1"
+      >
+        上传文件
+        <input
+          type="file"
+          accept="image/png, image/gif, image/jpeg"
+          style="display: none"
+          @change="beforeUpload1($event, 1)"
+        />
+      </div>
+      <div
+        class="nextStepOne"
+        style="float: right"
+        @click="addImg($event)"
+        v-if="tools[ppage - 1].tools && tools[ppage - 1].tools.indexOf(29) != -1"
+      >
+        上传视频
+        <input
+          type="file"
+          accept="video/mp4, video/quicktime, video/x-msvideo"
+          style="display: none"
+          @change="beforeUpload1($event, 2)"
+        />
+      </div>-->
+    </div>
+    <div v-if="proVisible" class="mask">
+      <div class="progressBox">
+        <div class="lbox">
+          <img src="../assets/loading.gif" />上传中,请稍后
+        </div>
+        <el-progress
+          :text-inside="true"
+          :stroke-width="20"
+          :percentage="progress"
+          style="width: 80%"
+        ></el-progress>
+      </div>
+    </div>
+    <el-dialog
+      :visible.sync="dialogVisible"
+      :append-to-body="true"
+      width="500px"
+      :before-close="handleClose"
+      class="dialog_diy"
+    >
+      <div style="text-align: center; padding: 20px 0 50px 0; font-size: 18px">
+        提交成功
+      </div>
+      <div
+        style="
+          width: 200px;
+          background: #4d8ae0;
+          height: 35px;
+          margin: 0 auto;
+          text-align: center;
+          line-height: 35px;
+          color: #fff;
+          border-radius: 5px;
+          cursor: pointer;
+        "
+        @click="dialogVisible = false"
+      >
+        确定
+      </div>
+    </el-dialog>
+    <el-dialog
+      :visible.sync="dialogVisiblePick"
+      :append-to-body="true"
+      width="500px"
+      class="dialog_diy"
+      :close-on-click-modal="false"
+    >
+      <div style="text-align: center; padding: 20px 0 50px 0; font-size: 18px">
+        你被老师点名起来回答了!!!
+      </div>
+      <div
+        style="
+          width: 200px;
+          background: #4d8ae0;
+          height: 35px;
+          margin: 0 auto;
+          text-align: center;
+          line-height: 35px;
+          color: #fff;
+          border-radius: 5px;
+          cursor: pointer;
+        "
+        @click="pick2"
+      >
+        确定
+      </div>
+    </el-dialog>
+    <div v-html="iframeInnerHtml" ref="iframeIh" class="iframeBox"></div>
+  </div>
+</template>
+
+<script>
+import pdf from "./components/pdf";
+import html2canvas from "html2canvas";
+
+import Recorder from "js-audio-recorder";
+const lamejs = require("lamejs");
+
+const recorder = new Recorder({
+  sampleBits: 16, // 采样位数,支持 8 或 16,默认是16
+  sampleRate: 48000, // 采样率,支持 11025、16000、22050、24000、44100、48000,根据浏览器默认值,我的chrome是48000
+  numChannels: 1, // 声道,支持 1 或 2, 默认是1
+  // compiling: false,(0.x版本中生效,1.x增加中) // 是否边录边转换,默认是false
+});
+
+// 绑定事件-打印的是当前录音数据
+recorder.onprogress = function (params) {
+  // console.log('--------------START---------------')
+  // console.log('录音时长(秒)', params.duration);
+  // console.log('录音大小(字节)', params.fileSize);
+  // console.log('录音音量百分比(%)', params.vol);
+  // console.log('当前录音的总数据([DataView, DataView...])', params.data);
+  // console.log('--------------END---------------')
+};
+
+export default {
+  components: {
+    pdf,
+  },
+  data() {
+    return {
+      iframeInnerHtml: "",
+      pdfUrl:
+        "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/%E4%B8%8A%E8%AF%BE%E8%AF%BE%E4%BB%B6---%E4%BA%94%E4%B8%8Bintroduce%20a%20festival%20%28Final%20%29%281%291661829428281.pdf",
+      pptImgUrl: "",
+      ppage: 2,
+      full: false,
+      pageTotal: 0,
+      howTools: 0,
+      toolsList: [],
+      timer: null,
+      isLoading: false,
+      formLabelWidth: "100px",
+      userid: this.$route.query.userid,
+      cid: this.$route.query.courseId,
+      oid: this.$route.query.oid,
+      mr: require("../assets/kc1.png"),
+      timu: [],
+      dialogVisible: false,
+      dialogVisiblePick: false,
+      answerBox: "",
+      isNoHomeWork: false,
+      answer: [
+        { name: "A.1568" },
+        { name: "B.720" },
+        { name: "C.1728" },
+        { name: "D.480" },
+      ],
+      steps: 0,
+      isBlock: 0,
+      isNext: false,
+      isAnswer: false,
+      upload: [
+        {
+          url: "",
+        },
+      ],
+      noneBtnImg: false,
+      proVisible: false,
+      progress: 0,
+      typeC: [],
+      toolCount: 0,
+      tools: [
+        {}, //tools: [30]
+        //  {
+        //   file: [
+        //     {
+        //       name: "音频1.MP3",
+        //       src: "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/%E6%9F%B3%E8%BD%BB%E9%A2%82%20-%20%E6%BA%AF%EF%BC%88%E9%92%A2%E7%90%B4%E7%89%88%EF%BC%891661673251415.mp3",
+        //     },
+        //   ],
+        // }
+        "",
+        {
+          file: [
+            {
+              name: "视频1.mp4",
+              src: "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/%E5%AA%92%E4%BD%9311661413782505.mp4",
+            },
+          ],
+        },
+        "", //问答题
+        { tools: [9], choice: 3, answer: [2, 3] },
+        { tools: [9], choice: 3, answer: [2] }, //协同文档
+        { tools: [9], choice: 3, answer: [3] }, //思维导图
+        { tools: [9], choice: 3, answer: [1] },
+        { tools: [9], choice: 3, answer: [2] },
+        { tools: [12] },
+        {
+          tools: [27],
+          answer: [
+            "Time",
+            "Weather",
+            "Activities before the festival",
+            "Activities during the festival",
+            "Food",
+            "Reason",
+            "Feelings",
+          ],
+          choice: 7,
+          tkAnswerBox: [
+            "Feelings",
+            "Weather",
+            "Activities before the festival",
+            "Origin",
+            "Food",
+            "Time",
+            "Activities during the festival",
+            "Reason",
+          ],
+        },
+        {
+          file: [
+            {
+              name: "视频2.mp4",
+              src: "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/%E5%AA%92%E4%BD%9321661413797366.mp4",
+            },
+          ],
+        },
+        { tools: [9] },
+        { tools: [3] },
+        { tools: [16] },
+        {
+          tools: [14],
+          rateArray: [
+            "聚焦主题",
+            "有开头结尾",
+            "语言正确,流畅",
+            "书写规范,美观",
+          ],
+        },
+        "",
+        "",
+        { tools: [29] },
+        "",
+        "",
+        //1、电子白板 2、便签 3、思维导图 4、问卷调查 5、量规评分 6、协同文档 7、思维网格 8、素材库 9、选择题 10、倒计时 11、问答题 12、选人回答 13、分小组 14、老师对提交作业进行评价 15、问答 16、作业提交 17、学习资料 18、训练平台 19、目标管理 20、课程设计 21、编程平台 22、AI体验 23、python 24、AI平台
+      ],
+      rateList: [],
+      tkAnswerBox: [],
+      tkAnswer: [],
+      imgUrl: "",
+      imgFile: "",
+      imgFileUp: [],
+      videoList: [],
+      videoList2: [],
+      audioUrl: "",
+      fileList: [],
+      playerOptions: {
+        playbackRates: [0.7, 1.0, 1.5, 2.0], //播放速度
+        autoplay: false, //如果true,浏览器准备好时开始回放。
+        muted: false, // 默认情况下将会消除任何音频。
+        loop: false, // 导致视频一结束就重新开始。
+        preload: "auto", // 建议浏览器在<video>加载元素后是否应该开始下载视频数据。auto浏览器选择最佳行为,立即开始加载视频(如果浏览器支持)
+        language: "zh-CN",
+        aspectRatio: "16:9", // 将播放器置于流畅模式,并在计算播放器的动态大小时使用该值。值应该代表一个比例 - 用冒号分隔的两个数字(例如"16:9"或"4:3")
+        fluid: true, // 当true时,Video.js player将拥有流体大小。换句话说,它将按比例缩放以适应其容器。
+        sources: [
+          {
+            type: "video/mp4", //这里的种类支持很多种:基本视频格式、直播、流媒体等,具体可以参看git网址项目   || "video/ogg"|| "video/webm"
+            src: "", //url地址require("../../assets/media/aaa.mp4")
+          },
+        ],
+        // poster: require("../../assets/tu31.png"), //你的封面地址
+        // poster: dataRes.imgUrl, //你的封面地址
+        notSupportedMessage: "此视频暂无法播放,请稍后再试", //允许覆盖Video.js无法播放媒体源时显示的默认信息。
+        controlBar: {
+          timeDivider: true, //当前时间和持续时间的分隔符
+          durationDisplay: true, //显示持续时间
+          remainingTimeDisplay: false, //是否显示剩余时间功能
+          fullscreenToggle: true, //全屏按钮
+        },
+      },
+      playerO: {},
+      videoindex: 0,
+      videoBlock: 0,
+      Vwidth: 0,
+      tiankongAnswer: [],
+      LuAudioUrl: "",
+      isRecord: false,
+      isPlayerRecord: false,
+      handle: {},
+    };
+  },
+  methods: {
+    // 开始录音
+    startRecorder() {
+      let _this = this;
+      if (!_this.isRecord) {
+        recorder.destroy(); // 销毁录音
+        _this.isRecord = true;
+        recorder.start().then(
+          () => {},
+          (error) => {
+            _this.$message.error(`${error.name} : ${error.message}`);
+            // 出错了
+            console.log(`${error.name} : ${error.message}`);
+          }
+        );
+      } else {
+        _this.isRecord = false;
+        recorder.stop(); // 结束录音
+      }
+    },
+
+    // 录音播放
+    playRecorder() {
+      if (!recorder.fileSize) {
+        return;
+      }
+      if (!this.isPlayerRecord) {
+        this.isPlayerRecord = true;
+        recorder.play();
+      } else {
+        this.isPlayerRecord = false;
+        recorder.stopPlay(); // 停止录音播放
+      }
+      recorder.onplayend = () => {
+        this.isPlayerRecord = false;
+        console.log("onplayend");
+      };
+    },
+
+    /**
+     * 文件格式转换 wav-map3
+     * */
+    getMp3Data() {
+      if (!recorder.fileSize) {
+        this.$message.error("请录音后在上传语音");
+        return;
+      }
+      const mp3Blob = this.convertToMp3(recorder.getWAV());
+      let audioFile = this.dataURLtoAudio(mp3Blob, "音频");
+      console.log(audioFile);
+      this.beforeUpload1(audioFile, 3);
+      // recorder.download(mp3Blob, "recorder", "mp3");
+    },
+    convertToMp3(wavDataView) {
+      // 获取wav头信息
+      const wav = lamejs.WavHeader.readHeader(wavDataView); // 此处其实可以不用去读wav头信息,毕竟有对应的config配置
+      const { channels, sampleRate } = wav;
+      const mp3enc = new lamejs.Mp3Encoder(channels, sampleRate, 128);
+      // 获取左右通道数据
+      const result = recorder.getChannelData();
+      const buffer = [];
+      const leftData =
+        result.left &&
+        new Int16Array(result.left.buffer, 0, result.left.byteLength / 2);
+      const rightData =
+        result.right &&
+        new Int16Array(result.right.buffer, 0, result.right.byteLength / 2);
+      const remaining = leftData.length + (rightData ? rightData.length : 0);
+      const maxSamples = 1152;
+      for (let i = 0; i < remaining; i += maxSamples) {
+        const left = leftData.subarray(i, i + maxSamples);
+        let right = null;
+        let mp3buf = null;
+        if (channels === 2) {
+          right = rightData.subarray(i, i + maxSamples);
+          mp3buf = mp3enc.encodeBuffer(left, right);
+        } else {
+          mp3buf = mp3enc.encodeBuffer(left);
+        }
+        if (mp3buf.length > 0) {
+          buffer.push(mp3buf);
+        }
+      }
+
+      const enc = mp3enc.flush();
+      if (enc.length > 0) {
+        buffer.push(enc);
+      }
+      return new Blob(buffer, { type: "audio/mp3" });
+    },
+    dataURLtoAudio(blob, filename) {
+      return new File([blob], filename, { type: "audio/mp3" });
+    },
+    change(val) {
+      console.log(val);
+    },
+    goTo(path) {
+      this.$router.push(path);
+    },
+    tableRowClassName({ row, rowIndex }) {
+      if ((rowIndex + 1) % 2 === 0) {
+        return "even_row";
+      } else {
+        return "";
+      }
+    },
+    jump(cid) {
+      window.parent.postMessage({ cid: cid, type: "1" }, "*");
+    },
+    handleCurrentChange(val) {
+      // console.log(`当前页: ${val}`);
+      this.page = val;
+    },
+    init() {},
+    handleClose(done) {
+      done();
+    },
+    handleRemove(file, fileList) {
+      console.log(file, fileList);
+    },
+    onExceed() {
+      this.$message.error("课程海报仅支持上传一张,请删除后再进行上传");
+    },
+    //uuid生成
+    guid() {
+      return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(
+        /[xy]/g,
+        function (c) {
+          var r = (Math.random() * 16) | 0,
+            v = c == "x" ? r : (r & 0x3) | 0x8;
+          return v.toString(16);
+        }
+      );
+    },
+    time() {
+      if (!this.now) {
+        this.now = new Date().getTime();
+        return true;
+      } else {
+        let time = new Date().getTime();
+        if (time - this.now > 3000) {
+          this.now = time;
+          return true;
+        } else {
+          return false;
+        }
+      }
+    },
+    // answerWork() {
+    //   this.steps++;
+    // },
+    addTool(t) {
+      if (t == 1) {
+        window.parent.postMessage({ tools: "1" }, "*");
+      } else if (t == 3) {
+        window.parent.postMessage({ tools: "3" }, "*");
+      } else if (t == 7) {
+        window.parent.postMessage({ tools: "7" }, "*");
+      }
+    },
+    answerQue() {
+      this.dialogVisible = true;
+    },
+    isChooseActive(t) {
+      if (this.typeC.length == 0) {
+        this.typeC.push(t);
+      } else {
+        if (this.typeC.indexOf(t) != -1) {
+          this.typeC.splice(this.typeC.indexOf(t), 1);
+        } else {
+          this.typeC.push(t);
+        }
+      }
+    },
+    showMember(i) {
+      if (this.typeC.length > 0) {
+        this.addWork(1);
+      } else {
+        this.$message.error("至少选择一个答案!");
+      }
+    },
+    clean(type) {
+      if (type == 1) {
+        this.upload[0].url.splice(0, 1);
+      } else if (type == 2) {
+        this.upload[0].upVedio.splice(0, 1);
+      }
+    },
+    addImg(e) {
+      var el = e.currentTarget;
+      el.getElementsByTagName("input")[0].click();
+    },
+    imgChange(file, fileList, type) {
+      if (type == 1) {
+        var _tmp = this.upload[0].url;
+      } else if (type == 2) {
+        // var _tmp = this.upload[0].upVedio;
+        var _tmp = this.upload[0].url;
+      } else if (type == 100) {
+        var _tmp = this.imgFileUp;
+      }
+      this.noneBtnImg = _tmp.length >= 1;
+    },
+    beforeUpload1(event, type) {
+      var file;
+      if (type == 3) {
+        file = event;
+      } else {
+        file = event.target.files[0];
+      }
+      var credentials = {
+        accessKeyId: "AKIATLPEDU37QV5CHLMH",
+        secretAccessKey: "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",
+      }; //秘钥形式的登录上传
+      window.AWS.config.update(credentials);
+      window.AWS.config.region = "cn-northwest-1"; //设置区域
+
+      var bucket = new window.AWS.S3({ params: { Bucket: "ccrb" } }); //选择桶
+      var _this = this;
+
+      if (file) {
+        _this.progress = 0;
+        _this.proVisible = true;
+        var params = {
+          Key:
+            file.name.split(".")[0] +
+            new Date().getTime() +
+            "." +
+            file.name.split(".")[file.name.split(".").length - 1],
+          ContentType: file.type,
+          Body: file,
+          "Access-Control-Allow-Credentials": "*",
+          ACL: "public-read",
+        }; //key可以设置为桶的相抵路径,Body为文件, ACL最好要设置
+        var options = {
+          partSize: 2048 * 1024 * 1024,
+          queueSize: 2,
+          leavePartsOnError: true,
+        };
+        bucket
+          .upload(params, options)
+          .on("httpUploadProgress", function (evt) {
+            //这里可以写进度条
+            // console.log("Uploaded : " + parseInt((evt.loaded * 80) / evt.total) + '%');
+            _this.progress = parseInt((evt.loaded * 80) / evt.total);
+          })
+          .send(function (err, data) {
+            _this.progress = 100;
+            setTimeout(() => {
+              _this.proVisible = false;
+            }, 1000);
+            if (err) {
+              var a = _this.$refs.upload1.uploadFiles;
+              a.splice(a.length - 1, a.length);
+              _this.$message.error("上传失败");
+            } else {
+              _this.upload[0].url = "";
+              if (type == 1) {
+                _this.upload[0].url = data.Location;
+                _this.imgChange(null, null, type);
+                _this.addWork(4);
+              } else if (type == 2) {
+                _this.upload[0].url = data.Location;
+                _this.imgChange(null, null, type);
+                _this.addWork(7);
+              } else if (type == 3) {
+                _this.LuAudioUrl = data.Location;
+                _this.addWork(8);
+              }
+              console.log(data.Location);
+            }
+          });
+      }
+    },
+    beforeUpload2(event) {
+      var file = event;
+      var credentials = {
+        accessKeyId: "AKIATLPEDU37QV5CHLMH",
+        secretAccessKey: "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",
+      }; //秘钥形式的登录上传
+      window.AWS.config.update(credentials);
+      window.AWS.config.region = "cn-northwest-1"; //设置区域
+
+      var bucket = new window.AWS.S3({ params: { Bucket: "ccrb" } }); //选择桶
+      var _this = this;
+      _this.progress = 0;
+      _this.proVisible = true;
+
+      if (file) {
+        var params = {
+          Key: file.name.split(".")[0] + new Date().getTime() + "." + "png",
+          ContentType: file.type,
+          Body: file,
+          "Access-Control-Allow-Credentials": "*",
+          ACL: "public-read",
+        }; //key可以设置为桶的相抵路径,Body为文件, ACL最好要设置
+        var options = {
+          partSize: 2048 * 1024 * 1024,
+          queueSize: 2,
+          leavePartsOnError: true,
+        };
+        bucket
+          .upload(params, options)
+          .on("httpUploadProgress", function (evt) {
+            //这里可以写进度条
+            // console.log("Uploaded : " + parseInt((evt.loaded * 80) / evt.total) + '%');
+            _this.progress = parseInt((evt.loaded * 80) / evt.total);
+          })
+          .send(function (err, data) {
+            _this.progress = 100;
+            setTimeout(() => {
+              _this.proVisible = false;
+            }, 1000);
+            if (err) {
+              var a = _this.$refs.upload1.uploadFiles;
+              a.splice(a.length - 1, a.length);
+              _this.$message.error("上传失败");
+            } else {
+              _this.imgFileUp.push({
+                name: file.name,
+                url: data.Location,
+                uid: file.uid,
+              });
+              _this.imgChange(null, null, type);
+              console.log(data.Location);
+            }
+          });
+      }
+    },
+    addJtWork(type) {
+      if (this.isNoHomeWork == true || this.isAnswer == true) {
+        this.$confirm(
+          "您已经提交了该作业了,如果您再提交将覆盖上次提交的作业!",
+          "提示",
+          {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning",
+          }
+        )
+          .then(() => {
+            this.getImg();
+            this.addSWork(type);
+          })
+          .catch(() => {});
+      } else {
+        this.getImg();
+        // this.addSWork(type);
+      }
+    },
+    addWork(type) {
+      if (type == 5) {
+        if (this.tkAnswer.length == 0) {
+          this.$message.error("请选择对应的答案");
+          return;
+        }
+      }
+      //  else if (this.upload[0].upVedio.length == 0) {
+      //   this.$message.error("请上传视频");
+      //   return;
+      // }
+      // else if (this.upload[0].upIntro == "") {
+      //   this.$message.error("请填写简要描述");
+      //   return;
+      // }
+      var _str = "";
+      if (type == 6) {
+        _str = "您已经提交了评价了,如果您再提交将覆盖上次提交的评价!";
+      } else {
+        _str = "您已经提交了该作业了,如果您再提交将覆盖上次提交的作业!";
+      }
+
+      if (this.isNoHomeWork == true || this.isAnswer == true) {
+        this.$confirm(_str, "提示", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning",
+        })
+          .then(() => {
+            this.addSWork(type);
+          })
+          .catch(() => {});
+      } else {
+        this.addSWork(type);
+      }
+    },
+    addSWork(type) {
+      var a;
+      if (type == 4 || type == 7) {
+        a = this.upload[0].url;
+      } else if (type == 6) {
+        a = JSON.stringify(this.rateList);
+      } else if (type == 1) {
+        a = JSON.stringify(this.typeC);
+      } else if (type == 5) {
+        a = JSON.stringify(this.tkAnswer);
+      } else {
+        a = this.LuAudioUrl;
+      }
+      let params = {
+        uid: this.userid,
+        cid: this.cid,
+        p: this.ppage - 1,
+        t: type,
+        upload: a,
+        // upload: JSON.stringify(this.imgFileUp),
+      };
+      this.ajax
+        .get(this.$store.state.api + "insertSWork", params)
+        .then((res) => {
+          // this.isNoHomeWork = true;
+          // this.dialogVisible = true;
+          // this.upload = res.data[0][0].upload;
+          this.$message({
+            message: "提交成功",
+            type: "success",
+          });
+          this.selectSWork();
+          if (this.tools[this.ppage - 1].tools.indexOf(12) != -1) {
+            this.pick();
+            this.isBlock = 0;
+          }
+        })
+        .catch((err) => {
+          this.$message.error("提交成功");
+          console.error(err);
+        });
+    },
+    selectSWork() {
+      let _type = 0;
+      if (this.tools[this.ppage - 1].tools) {
+        if (
+          this.tools[this.ppage - 1].tools.indexOf(1) != -1 ||
+          this.tools[this.ppage - 1].tools.indexOf(3) != -1 ||
+          this.tools[this.ppage - 1].tools.indexOf(6) != -1 ||
+          this.tools[this.ppage - 1].tools.indexOf(7) != -1 ||
+          this.tools[this.ppage - 1].tools.indexOf(10) != -1 ||
+          this.tools[this.ppage - 1].tools.indexOf(16) != -1 ||
+          this.tools[this.ppage - 1].tools.indexOf(13) != -1
+        ) {
+          _type = 4;
+        } else if (this.tools[this.ppage - 1].tools.indexOf(9) != -1) {
+          _type = 1;
+        } else if (this.tools[this.ppage - 1].tools.indexOf(27) != -1) {
+          _type = 5;
+        } else if (this.tools[this.ppage - 1].tools.indexOf(14) != -1) {
+          _type = 6;
+        } else if (this.tools[this.ppage - 1].tools.indexOf(29) != -1) {
+          _type = 7;
+        } else if (
+          this.tools[this.ppage - 1].tools.indexOf(30) != -1 ||
+          this.tools[this.ppage - 1].tools.indexOf(12) != -1
+        ) {
+          _type = 8;
+        }
+      }
+      this.isAnswer = false;
+      this.isNoHomeWork = false;
+      let params = {
+        uid: this.userid,
+        cid: this.cid,
+        p: this.ppage - 1,
+        type: _type,
+      };
+      this.ajax
+        .get(this.$store.state.api + "selectSWork", params)
+        .then((res) => {
+          if (res.data[0].length > 0) {
+            if (res.data[0][0].type == 1) {
+              this.isAnswer = true;
+              this.typeC = JSON.parse(res.data[0][0].upload);
+            } else if (res.data[0][0].type == 5) {
+              this.isNoHomeWork = true;
+              this.tkAnswer = JSON.parse(res.data[0][0].upload);
+            } else if (res.data[0][0].type == 4 || res.data[0][0].type == 7) {
+              this.isNoHomeWork = true;
+              this.upload[0].url = res.data[0][0].upload;
+            } else if (res.data[0][0].type == 6) {
+              this.isNoHomeWork = true;
+              this.rateList = JSON.parse(res.data[0][0].upload);
+            } else if (res.data[0][0].type == 8) {
+              this.isNoHomeWork = true;
+              this.LuAudioUrl = res.data[0][0].upload;
+            }
+          }
+        })
+        .catch((err) => {
+          console.log("暂无作业");
+          console.error(err);
+        });
+    },
+    getImg() {
+      var iframeHtml;
+      let iframeBody;
+      if (this.toolCount == 1) {
+        iframeHtml = this.$refs.whiteBoard;
+      } else if (this.toolCount == 3) {
+        iframeHtml = this.$refs.mind;
+      } else if (this.toolCount == 7) {
+        iframeHtml = this.$refs.grid;
+      }
+      iframeBody = iframeHtml.contentWindow.document.body;
+      this.iframeInnerHtml = iframeBody.innerHTML;
+      var iframeIh = this.$refs.iframeIh;
+      iframeIh.innerHTML = this.iframeInnerHtml;
+      this.$forceUpdate();
+      console.log(iframeIh);
+
+      // var iframeHtml = this.$refs.whiteBoard;
+      document.getElementById("shishi_loading").style.display = "flex";
+      var _ajs = iframeHtml.contentWindow.document.createElement("script");
+      _ajs.type = "text/javascript";
+      _ajs.innerHTML =
+        'var _js = document.createElement("script");\n' +
+        '_js.type="text/javascript";\n' +
+        '_js.src="https://html2canvas.hertzen.com/dist/html2canvas.min.js";\n' +
+        "_js.onload = function(){\n" +
+        ' var a = document.getElementsByTagName("img")\n' +
+        ' for(var i = 0;i<a.length;i++){a[i].crossOrigin="anonymous"}\n' +
+        " html2canvas(document.body).then(canvas => {\n" +
+        '  var base64Url = canvas.toDataURL("image/png");\n' +
+        'var base64 = "<img src=" + base64Url + " />"\n' +
+        'var file = dataURLtoFile_shishi(base64Url, "截图")\n' +
+        "beforeUpload_shishi(file," +
+        "'" +
+        this.userid +
+        "'" +
+        ", " +
+        "'" +
+        this.cid +
+        "'" +
+        ", " +
+        "'" +
+        (this.ppage - 1) +
+        "'" +
+        ", " +
+        "'4'" +
+        ")\n" +
+        " });\n" +
+        "}\n" +
+        "document.head.appendChild(_js);\n";
+      iframeHtml.contentWindow.document.head.appendChild(_ajs);
+
+      // iframeHtml.contentWindow.jietu_shishi(this.userid, this.cid);
+
+      // 第一个参数是需要生成截图的元素,第二个是自己需要配置的参数,宽高等
+      // html2canvas(iframeBody, {
+      //   allowTaint: true,
+      //   backgroundColor: null, //画出来的图片有白色的边框,不要可设置背景为透明色(null)
+      //   useCORS: true, //支持图片跨域
+      //   scale: 1, //设置放大的倍数
+      // }).then((canvas) => {
+      //   // 把生成的base64位图片上传到服务器,生成在线图片地址
+      //   let url = canvas.toDataURL("image/png"); // toDataURL: 图片格式转成 base64
+      //   this.imgUrl = url; //将图片下载到本地
+      //   let a = document.createElement("a"); // 生成一个a元素
+      //   let event = new MouseEvent("click"); // 创建一个单击事件
+      //   a.download = "作业"; // 设置图片名称没有设置则为默认
+      //   a.href = this.imgUrl; // 将生成的URL设置为a.href属性
+      //   a.dispatchEvent(event); // 触发a的单击事件
+      //   let file = this.dataURLtoFile(url, "作业");
+      //   this.imgFile = file;
+      //   this.beforeUpload2(this.imgFile);
+      //   this.addSWork();
+      //   console.log(this.imgFile);
+      // });
+    },
+    dataURLtoFile(dataurl, filename) {
+      let arr = dataurl.split(","),
+        mime = arr[0].match(/:(.*?);/)[1],
+        bstr = atob(arr[1]),
+        n = bstr.length,
+        u8arr = new Uint8Array(n);
+      while (n--) {
+        u8arr[n] = bstr.charCodeAt(n);
+      }
+      return new File([u8arr], filename, { type: mime });
+    },
+    search() {},
+    selectFile() {
+      this.fileList = [];
+      this.videoList = [];
+      this.videoList2 = [];
+      var a = ["PDF", "DOC", "DOCX", "PPT", "PPTX", "XLSX", "XLS"];
+      var b = this.tools[this.ppage - 1].file;
+      for (var i = 0; i < b.length; i++) {
+        if (
+          a.indexOf(
+            b[i].src
+              .split(".")
+              [b[i].src.split(".").length - 1].toLocaleUpperCase()
+          ) != -1
+        ) {
+          this.fileList.push(b[i]);
+        } else if (
+          b[i].src
+            .split(".")
+            [b[i].src.split(".").length - 1].toLocaleUpperCase() == "MP3"
+        ) {
+          this.videoList2.push(b[i]);
+        } else {
+          this.videoList.push(b[i]);
+        }
+      }
+      if (this.videoList.length) {
+        this.playVideo();
+      } else if (this.videoList2.length) {
+        this.playVideo2();
+      } else {
+        this.videoBlock = 0;
+      }
+    },
+    openFile(u) {
+      this.pptImgUrl = "https://view.officeapps.live.com/op/view.aspx?src=" + u;
+      this.isBlock = 7;
+    },
+    playVideo() {
+      var d = JSON.parse(JSON.stringify(this.playerOptions));
+      // for (var i = 0; i < this.videoList.length; i++) {
+      d.sources[0].src = this.videoList[0].src;
+      this.playerO[0] = d;
+      // this.videoindex = i;
+      // }
+      // this.isBlock = 6;
+      this.videoBlock = 6;
+    },
+    playVideo2() {
+      this.audioUrl = this.videoList2[0].src;
+      this.isBlock = 9;
+    },
+    switchVideo(media) {
+      this.playerO = {};
+      this.playerOptions.poster = "";
+      this.playerOptions.sources[0].src = media;
+      this.playerO = this.playerOptions;
+    },
+    onPlayerPlay() {},
+    howPage(page) {
+      if (!this.pageTotal) {
+        return;
+      }
+      if (page == this.pageTotal) {
+        // this.isBlock = 3;
+      } else {
+        this.isBlock = 0;
+        if (
+          this.tools[page - 1].tools &&
+          this.tools[page - 1].tools.indexOf(9) != -1
+        ) {
+          this.isBlock = 1;
+        }
+        // if (this.ppage > 3) {
+        //   this.isBlock = 2;
+        // }
+        this.full = false;
+        this.howTools = 0;
+        this.toolCount = 0;
+        if (this.tools[page - 1].tools && this.tools[page - 1].tools[0] == 12) {
+          this.isBlock = 0;
+        }
+        if (
+          this.tools[page - 1].tools &&
+          (this.tools[page - 1].tools.indexOf(1) != -1 ||
+            this.tools[page - 1].tools.indexOf(3) != -1 ||
+            this.tools[page - 1].tools.indexOf(7) != -1)
+        ) {
+          this.isBlock = 4;
+        }
+        if (
+          this.tools[page - 1].tools &&
+          this.tools[page - 1].tools.length > 1
+        ) {
+          this.isBlock = 4;
+        }
+        if (this.tools[page - 1].tools && !this.tools[page - 1].tools.length) {
+          this.isBlock = 0;
+        }
+        if (
+          this.tools[this.ppage - 1].tools &&
+          this.tools[this.ppage - 1].tools.indexOf(14) != -1
+        ) {
+          this.isBlock = 3;
+        } else if (
+          this.tools[this.ppage - 1].tools &&
+          (this.tools[this.ppage - 1].tools.indexOf(3) != -1 ||
+            this.tools[this.ppage - 1].tools.indexOf(3) != -1 ||
+            this.tools[this.ppage - 1].tools.indexOf(6) != -1 ||
+            this.tools[this.ppage - 1].tools.indexOf(7) != -1 ||
+            this.tools[this.ppage - 1].tools.indexOf(10) != -1 ||
+            this.tools[this.ppage - 1].tools.indexOf(16) != -1 ||
+            this.tools[this.ppage - 1].tools.indexOf(29) != -1 ||
+            this.tools[this.ppage - 1].tools.indexOf(13) != -1)
+        ) {
+          if (this.tools[this.ppage - 1].tools.indexOf(1) != -1) {
+            // this.toolCount = 1;
+            this.checkTools(1);
+          } else if (this.tools[this.ppage - 1].tools.indexOf(3) != -1) {
+            this.checkTools(3);
+          } else if (this.tools[this.ppage - 1].tools.indexOf(28) != -1) {
+            this.checkTools(28);
+          } else if (this.tools[this.ppage - 1].tools.indexOf(4) != -1) {
+            this.checkTools(4);
+          } else if (this.tools[this.ppage - 1].tools.indexOf(6) != -1) {
+            this.checkTools(6);
+          } else if (this.tools[this.ppage - 1].tools.indexOf(7) != -1) {
+            this.checkTools(7);
+          }
+          // this.isBlock = 2;
+        } else if (
+          this.tools[this.ppage - 1].file &&
+          this.tools[this.ppage - 1].file.length
+        ) {
+          this.selectFile();
+        } else if (
+          this.tools[this.ppage - 1].tools &&
+          this.tools[this.ppage - 1].tools.indexOf(27) != -1
+        ) {
+          if (this.tools[this.ppage - 1].answer) {
+            this.tiankongAnswer = this.tools[this.ppage - 1].answer;
+          }
+          this.isBlock = 8;
+        }
+
+        if (this.tools[page - 1].tools && this.tools[page - 1].tools[0] == 30) {
+          this.isBlock = 10;
+        }
+
+        if (
+          this.tools[this.ppage - 1].file &&
+          this.tools[this.ppage - 1].file.length
+        ) {
+        } else {
+          this.videoBlock = 0;
+        }
+      }
+
+      this.selectSWork();
+    },
+    pick() {
+      this.handle.type = 0;
+      this.handle.userid = "";
+      let params = [
+        {
+          h: JSON.stringfy(this.handle),
+          cid: this.cid,
+        },
+      ];
+      this.ajax
+        .post(this.$store.state.api + "updatePptPage", params)
+        .then((res) => {
+          // this.dialogVisiblePick = false;
+          let mindinfo = this.setInfo(
+            this.cid,
+            "us.mindNetwork",
+            this.handle,
+            "update",
+            this.userid
+          );
+          this.updateSocket(mindinfo);
+        })
+        .catch((err) => {
+          console.error(err);
+        });
+    },
+    pick2() {
+      this.dialogVisiblePick = false;
+      this.isBlock = 10;
+    },
+    setPage() {
+      let params = {
+        id: this.cid,
+      };
+      this.ajax
+        .get(this.$store.state.api + "selectPptPage", params)
+        .then((res) => {
+          if (res.data[0].length > 0) {
+            let _res = JSON.parse(res.data[0][0].page);
+            this.handle = _res;
+            if (
+              _res.type == 2 &&
+              _res.userid == this.userid &&
+              this.isBlock != 10 &&
+              this.tools[_res.page - 1].tools.indexOf(12) != -1
+            ) {
+              this.dialogVisiblePick = true;
+            }
+            if (_res.type == 1 && this.videoList.length) {
+              let handle = _res;
+              let a = this.$refs.zVideo;
+
+              if (handle.isPlay == 1) {
+                a.player.play();
+              } else if (handle.isPlay == 2) {
+                a.player.pause();
+              }
+            } else if (this.$refs.zVideo) {
+              this.$refs.zVideo.player.pause();
+            }
+
+            if (this.ppage == _res.page && this.isBlock !== 0) {
+              return;
+            } else {
+              this.ppage = _res.page;
+              // this.ppage = 1;
+              // this.ppage = 11;
+              this.typeC = [];
+              this.isAnswer = false;
+              this.howPage(this.ppage);
+            }
+          }
+        })
+        .catch((err) => {
+          // this.$message.error("查询失败");
+          console.error(err);
+        });
+    },
+    getPageTotal(total) {
+      this.pageTotal = total;
+    },
+    getWidth(total) {
+      this.Vwidth = total;
+    },
+    fullTools() {
+      this.full = !this.full;
+    },
+    checkTools(tcount) {
+      this.isBlock = 2;
+      this.toolCount = tcount;
+      let _this = this;
+      _this.$nextTick(() => {
+        setTimeout(() => {
+          const script1 = document.createElement("script");
+          script1.type = "text/javascript";
+          script1.src =
+            "https://pbl.cocorobo.cn/pbl-student-table/dist/js/jquery-3.6.0.min.js";
+          const script2 = document.createElement("script");
+          script2.type = "text/javascript";
+          script2.src =
+            "https://pbl.cocorobo.cn/pbl-student-table/dist/js/aws-sdk-2.235.1.min.js";
+          const script3 = document.createElement("script");
+          script3.type = "text/javascript";
+          script3.src =
+            "https://html2canvas.hertzen.com/dist/js/html2canvas.min.js";
+          const script4 = document.createElement("script");
+          script4.type = "text/javascript";
+          script4.src =
+            "https://pbl.cocorobo.cn/pbl-student-table/dist/js/jietu.js";
+
+          if (_this.toolCount == 1) {
+            _this.$refs.whiteBoard.onload = () => {
+              _this.$refs.whiteBoard.contentWindow.document.body.appendChild(
+                script1
+              );
+              _this.$refs.whiteBoard.contentWindow.document.body.appendChild(
+                script2
+              );
+              // _this.$refs.whiteBoard.contentWindow.document.body.appendChild(script3);
+              _this.$refs.whiteBoard.contentWindow.document.body.appendChild(
+                script4
+              );
+            };
+          } else if (_this.toolCount == 3) {
+            _this.$refs.mind.onload = () => {
+              _this.$refs.mind.contentWindow.document.body.appendChild(script1);
+              _this.$refs.mind.contentWindow.document.body.appendChild(script2);
+              // _this.$refs.mind.contentWindow.document.body.appendChild(script3);
+              _this.$refs.mind.contentWindow.document.body.appendChild(script4);
+            };
+          } else if (_this.toolCount == 7) {
+            _this.$refs.grid.onload = () => {
+              _this.$refs.grid.contentWindow.document.body.appendChild(script1);
+              _this.$refs.grid.contentWindow.document.body.appendChild(script2);
+              // _this.$refs.grid.contentWindow.document.body.appendChild(script3);
+              _this.$refs.grid.contentWindow.document.body.appendChild(script4);
+            };
+          }
+        }, 0);
+      });
+    },
+    getData() {
+      let params = {
+        id: this.cid,
+      };
+      this.ajax
+        .get(this.$store.state.api + "getRealTimeClassById", params)
+        .then((r) => {
+          let res = r.data[0][0];
+          this.pdfUrl = res.url;
+          this.tools = JSON.parse(res.content);
+        })
+        .catch((err) => {
+          // this.$message.error("查询失败");
+          console.error(err);
+        });
+    },
+    setData() {
+      let _this = this;
+      this.timer = setInterval(() => {
+        _this.setPage();
+      }, 1000);
+    },
+    getRealTimeClass() {
+      let params = [
+        {
+          type: "getRealTimeClass",
+          docid: this.cid,
+          pageid: window.parent.US.pageId,
+          userid: this.userid,
+          post: "1",
+        },
+      ];
+      this.ajax
+        .post(this.$store.state.socket, params)
+        .then((res) => {
+          if (res.data[0].length) {
+            let _res = {};
+            try {
+              _res = JSON.parse(res.data[0][0].page);
+            } catch (error) {
+              _res = res.data[0][0].page;
+            }
+            this.setPptData(_res)
+          }
+          console.log(res);
+        })
+        .catch((err) => {
+          console.error(err);
+        });
+    },
+    setPptData(res) {
+      let _res = res
+      this.handle = _res;
+      if (
+        _res.type == 2 &&
+        _res.userid == this.userid &&
+        this.isBlock != 10 &&
+        this.tools[_res.page - 1].tools.indexOf(12) != -1
+      ) {
+        this.dialogVisiblePick = true;
+      }
+      if (_res.type == 1 && this.videoList.length) {
+        let handle = _res;
+        let a = this.$refs.zVideo;
+
+        if (handle.isPlay == 1) {
+          a.player.play();
+        } else if (handle.isPlay == 2) {
+          a.player.pause();
+        }
+      } else if (this.$refs.zVideo) {
+        this.$refs.zVideo.player.pause();
+      }
+
+      if (this.ppage == _res.page && this.isBlock !== 0) {
+        return;
+      } else {
+        this.ppage = _res.page;
+        // this.ppage = 1;
+        // this.ppage = 11;
+        this.typeC = [];
+        this.isAnswer = false;
+        this.howPage(this.ppage);
+      }
+    },
+    setInfo(id, navid, content, type, userid) {
+      var _data = {
+        "us.realTimeClass": [
+          {
+            sendId: userid, //发送人id
+            receiveId: id, //文件id
+            type: navid, //消息类型
+            messageInfo: {
+              id: id, //操作ID
+              type: type, //类型
+              content: content, //内容
+              docId: id, //文档id
+              pageId: top.US.pageId, //当前页面id
+            },
+          },
+        ],
+      };
+      return _data;
+    },
+    updateSocket(mindinfo) {
+      let params = [
+        {
+          type: "send",
+          mindinfo: encodeURIComponent(
+            encodeURIComponent(JSON.stringify(mindinfo))
+          ),
+          post: 1,
+        },
+      ];
+      this.ajax
+        .post(this.$store.state.socket, params)
+        .then((res) => {
+          console.log(res);
+        })
+        .catch((err) => {
+          console.error(err);
+        });
+    },
+  },
+  beforeDestroy() {
+    clearInterval(this.timer);
+    this.timer = null;
+    window.removeEventListener("message");
+  },
+  created() {
+    this.getData();
+    this.getRealTimeClass()
+
+    let _this = this;
+    window.addEventListener("message", function (e) {
+      // 监听 message 事件
+      if (
+        e.data.type &&
+        e.data.type == "realTimeClass_update" &&
+        e.data.info.docId == _this.cid
+      ) {
+        // _this.data[e.data.info.id] = e.data.info.content;
+        this.setPptData(e.data.info.content)
+      }
+      _this.$forceUpdate();
+    });
+  },
+};
+</script>
+
+<style scoped>
+.dialog_diy >>> .el-dialog__header {
+  background: #3d67bc !important;
+  padding: 15px 20px;
+}
+.dialog_diy >>> .el-dialog__title {
+  color: #fff;
+}
+.dialog_diy >>> .el-dialog__headerbtn {
+  top: 9px;
+}
+.dialog_diy >>> .el-dialog__headerbtn .el-dialog__close {
+  color: #fff;
+}
+.dialog_diy >>> .el-dialog__headerbtn .el-dialog__close:hover {
+  color: #fff;
+}
+
+.blackBottom {
+  background: rgb(0, 0, 0);
+  height: 45px;
+  width: 100%;
+  display: flex;
+  flex-direction: row;
+  flex-wrap: nowrap;
+  align-items: center;
+  justify-content: space-between;
+}
+
+.imgMiddle {
+  width: 100%;
+  position: relative;
+  height: 100%;
+}
+
+.imgMiddle > img,
+.imghalf > img,
+.szt > img,
+.uploadImg > img,
+.uploadVedio > img,
+.uploadImgPic > img,
+.logoLive > img,
+.close > img,
+.deleteWord > img {
+  width: 100%;
+  height: 100%;
+}
+.deleteWord {
+  width: 22px !important;
+  height: 22px;
+  position: absolute;
+  right: -5px;
+  top: -5px;
+  cursor: pointer;
+}
+.blackBottomB {
+  position: sticky;
+  bottom: 0px;
+  left: 0px;
+  display: flex;
+  flex-direction: row;
+  flex-wrap: wrap;
+  align-content: center;
+  justify-content: space-between;
+  align-items: center;
+  background: rgb(0, 0, 0);
+  height: 45px;
+  width: 100%;
+}
+
+.blackBottomB > div:nth-child(1) {
+  margin-left: 10px !important;
+}
+
+.blackButton {
+  color: #fff;
+  background: #066ebe;
+  width: 100px;
+  height: 30px;
+  line-height: 30px;
+  text-align: center;
+  margin: 0 25px;
+  border-radius: 5px;
+  font-size: 15px;
+  cursor: pointer;
+}
+
+.isNoOther {
+  width: 100%;
+  display: flex;
+  height: calc(100% - 45px);
+}
+
+.imghalf {
+  width: 60% !important;
+}
+.answerBox {
+  padding: 25px;
+  overflow: auto;
+  height: 70%;
+  box-sizing: border-box;
+}
+.answerTimuBox {
+  display: flex;
+  flex-direction: row;
+  flex-wrap: nowrap;
+  align-items: center;
+  justify-content: space-between;
+  padding-bottom: 15px;
+}
+.memberBox {
+  display: flex;
+  flex-direction: row;
+  flex-wrap: wrap;
+  align-items: center;
+}
+.memberBox > div {
+  background: rgb(240, 185, 204);
+  width: 120px;
+  color: #fff;
+  height: 40px;
+  text-align: center;
+  line-height: 40px;
+  border-radius: 5px;
+  margin: 0 15px 15px 0;
+  cursor: pointer;
+}
+.viewSta {
+  background: rgb(97, 97, 97);
+  color: #bebebe;
+  margin: 20% auto 20px;
+  width: 300px;
+  height: 40px;
+  text-align: center;
+  line-height: 40px;
+  border-radius: 5px;
+  cursor: pointer;
+}
+.szt {
+  width: 450px;
+  margin: 20px auto;
+}
+.sztFooter {
+  padding: 20px 10px 50px 0;
+  display: flex;
+  flex-direction: row;
+  flex-wrap: nowrap;
+  justify-content: flex-end;
+  align-items: center;
+}
+
+.timuButton {
+  background: #649ef2;
+  width: 75px;
+  height: 27px;
+  line-height: 27px;
+  text-align: center;
+  border-radius: 5px;
+  color: #fff;
+  margin-right: 20px;
+  display: inline-block;
+}
+.anserBoxCss {
+  margin: 30px 0 20px 0;
+}
+.anserBoxCss >>> .el-radio__label {
+  font-size: 18px;
+}
+.anserBoxCss >>> .el-radio__inner {
+  border-radius: 0px !important;
+}
+.nextStepBox {
+  display: flex;
+  justify-content: center;
+  margin-top: 10px;
+}
+.nextStepOne {
+  background: #6b92c9;
+  color: #fff;
+  width: 110px;
+  text-align: center;
+  height: 35px;
+  line-height: 35px;
+  font-size: 14px;
+  border-radius: 5px;
+  cursor: pointer;
+}
+
+.nextStepOne,
+.nextStepOne {
+  margin-left: 10px;
+}
+.toolList {
+  display: flex;
+  flex-direction: row;
+  flex-wrap: wrap;
+  justify-content: flex-start;
+  align-items: center;
+}
+.tools {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  margin-right: 20px;
+}
+.tools > div:nth-child(1) {
+  width: 60px;
+}
+.tools > div:nth-child(1) > img {
+  width: 100%;
+  height: 100%;
+}
+.uploadImg {
+  width: 100px;
+  margin: 10px 0 0 15px;
+  cursor: pointer;
+}
+.upImg {
+  display: flex;
+  flex-direction: column;
+  flex-wrap: nowrap;
+  align-items: center;
+  justify-content: center;
+  color: rgb(182, 182, 182);
+  font-size: 20px;
+}
+
+.binfo_input {
+  font: inherit;
+  color: currentColor;
+  width: 100%;
+  margin: 0;
+  padding: 15px 14px;
+  display: block;
+  min-width: 0;
+  outline: none;
+  box-sizing: content-box;
+  background: none;
+  -webkit-tap-highlight-color: transparent;
+  border: 1px solid rgba(0, 0, 0, 0.23);
+  border-radius: 4px;
+  box-sizing: border-box;
+  resize: none;
+}
+
+.binfo_input:focus-visible {
+  border: 1px solid rgba(61, 103, 188);
+}
+.hengCss {
+  display: flex;
+  flex-direction: row;
+  flex-wrap: wrap;
+  align-items: center;
+  padding: 5px 0 0 20px;
+}
+.uploadImgPic {
+  width: 100px;
+  height: 100px;
+  position: relative;
+  margin: 0 20px 0 0;
+}
+.uploadImgPic > div {
+  width: 100px;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+.mask {
+  background-color: rgba(0, 0, 0, 0);
+  position: fixed;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  z-index: 20000;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+.progressBox {
+  width: 500px;
+  height: 180px;
+  background: #fff;
+  border-radius: 10px;
+  box-shadow: 0 0 6px 1px #bfbfbf;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  flex-direction: column;
+}
+.progressBox .lbox {
+  height: 100px;
+  font-size: 19px;
+  display: flex;
+  align-items: center;
+}
+
+.progressBox .lbox img {
+  width: 40px;
+  margin-right: 20px;
+}
+
+.progressBox >>> .el-progress-bar__outer {
+  background-color: #d1dfff !important;
+}
+.progressBox .lbox {
+  height: 100px;
+  font-size: 19px;
+  display: flex;
+  align-items: center;
+}
+
+.progressBox .lbox img {
+  width: 40px;
+  margin-right: 20px;
+}
+.logoLive {
+  width: 35px;
+}
+.choose_style {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  width: 100%;
+  margin: 10px 0 30px;
+}
+
+.choose_style span {
+  background: #f8f9ff;
+  color: #677fff;
+  border: 1px solid #95b5ff;
+  padding: 15px 20px;
+  font-size: 25px;
+  border-radius: 18px;
+  cursor: pointer;
+}
+
+.choose_style span + span {
+  margin-left: 25px;
+}
+
+.isChoose {
+  color: #fff !important;
+  background: #5e78fa !important;
+}
+.close {
+  position: absolute;
+  right: 10px;
+  top: 10px;
+  width: 20px;
+  cursor: pointer;
+}
+.score_box {
+  font-size: 14px;
+}
+.score_box >>> .el-rate {
+  margin: 10px 0 20px 0;
+}
+.score_box >>> .el-rate__icon {
+  font-size: 23px;
+}
+.bz >>> .el-textarea__inner {
+  width: 80%;
+  background: #f9f9f9;
+  border: 1px solid #afafaf;
+  border-radius: 0px;
+}
+
+.tools_title {
+  background: #000;
+  position: absolute;
+  width: 100%;
+  top: 0;
+  left: 0;
+  display: flex;
+  align-items: center;
+  height: 40px;
+  justify-content: space-between;
+  padding: 0 15px;
+  box-sizing: border-box;
+}
+.tools_title span {
+  color: #fff;
+}
+.tools_title div {
+  display: flex;
+  align-items: center;
+}
+.full,
+.closeImg {
+  height: 22px;
+  cursor: pointer;
+}
+.tools_title img,
+img {
+  margin-left: 10px;
+}
+
+.tools_box {
+  width: 38.5%;
+  max-width: 38.5%;
+  overflow: auto;
+  background: rgb(255, 255, 255);
+  height: 91.5%;
+  position: relative;
+  margin: 10px 15px;
+}
+
+.tools_child_box {
+  width: 100%;
+  height: calc(90% - 40px);
+  padding-top: 40px;
+}
+
+.fullStyle {
+  width: 100% !important;
+  max-width: 100% !important;
+}
+.toolCss {
+  display: flex;
+  flex-direction: column;
+  flex-wrap: wrap;
+  width: calc(100% / 6);
+  align-items: center;
+  text-align: center;
+}
+.toolImg {
+  width: 70px;
+  height: 70px;
+  cursor: pointer;
+}
+.toolImg > img {
+  width: 100%;
+  height: 100%;
+  margin: 0 !important;
+}
+.toolImg > div {
+  font-size: 14px;
+}
+.iframeBox {
+  overflow: auto;
+  position: absolute;
+  top: 0;
+  z-index: -2;
+  width: 100%;
+  height: 100%;
+}
+.fileBox {
+  display: flex;
+  flex-direction: row;
+  flex-wrap: wrap;
+  align-items: center;
+  justify-content: flex-start;
+  align-content: center;
+  width: 100%;
+}
+.fileListCss {
+  display: flex;
+  flex-direction: column;
+  flex-wrap: nowrap;
+  align-items: center;
+  margin: 0 15px 15px 0;
+}
+.fileCss {
+  width: 70px;
+  height: 70px;
+  cursor: pointer;
+  margin: 0 0 10px 0;
+}
+.fileCss > img {
+  width: 100%;
+  height: 100%;
+  margin: 0;
+}
+.wheel {
+  width: 100%;
+  height: 100%;
+}
+.video-player >>> .video-js {
+  height: 100%;
+}
+.tkCss {
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+  flex-wrap: nowrap;
+  margin-bottom: 15px;
+}
+.workd_media {
+  /* width: 1497.42px; */
+  /* width: auto; */
+  height: 100%;
+  position: absolute;
+  top: 0;
+  left: 50%;
+  transform: translateX(-50%);
+  z-index: 999;
+}
+
+.tiankongAnswer {
+  margin-left: 10px;
+  color: #1834c0;
+}
+
+.tfalse {
+  color: rgb(189, 30, 30) !important;
+}
+
+.video_wrapper {
+  width: 100%;
+  height: 100%;
+  position: absolute;
+  z-index: 99999;
+  background: #fff;
+  background: transparent;
+  top: 0;
+}
+</style>

+ 62 - 5
src/components/liveRoom.vue

@@ -78,14 +78,54 @@
                 <div style="font-size: 18px">
                   {{ item.name }}
                 </div>
-                <div style="color: #2fdb88">
-                  <!-- 共{{ JSON.parse(item.chapters).length }}讲 -->
-                  共1讲
-                </div>
                 <div>
                   <span style="color: #999">{{ item.time }}</span>
                 </div>
               </div>
+              <!-- <div class="three_bottom">
+                <div
+                  @click="
+                    goTo(
+                      '/liveProjectDetail?courseId=' +
+                        item.id +
+                        '&userid=' +
+                        userid +
+                        '&oid=' +
+                        oid
+                    )
+                  "
+                >
+                  课前预习
+                </div>
+                <div
+                  @click="
+                    goTo(
+                      '/liveProjectDetail?courseId=' +
+                        item.id +
+                        '&userid=' +
+                        userid +
+                        '&oid=' +
+                        oid
+                    )
+                  "
+                >
+                  开始上课
+                </div>
+                <div
+                  @click="
+                    goTo(
+                      '/liveProjectDetail?courseId=' +
+                        item.id +
+                        '&userid=' +
+                        userid +
+                        '&oid=' +
+                        oid
+                    )
+                  "
+                >
+                  课后复习
+                </div>
+              </div> -->
             </div>
           </div>
           <div class="student_page">
@@ -279,11 +319,13 @@ export default {
   margin: 15px;
 }
 .projct_nav {
-  margin-left: 5px;
+  padding-left: 5px;
   display: flex;
   flex-direction: column;
   flex-wrap: nowrap;
   justify-content: space-around;
+  width: 100%;
+  box-sizing: border-box;
 }
 
 .projct_nav > div:nth-child(1) {
@@ -300,4 +342,19 @@ export default {
   margin-left: 20px;
   width: 95%;
 }
+
+.three_bottom {
+  display: flex;
+  flex-direction: row;
+  justify-content: space-around;
+  height: 40px;
+  align-items: center;
+  background: #f5f4f4;
+  font-size: 14px;
+  width: 100%;
+  margin-bottom: 0;
+}
+.three_bottom > div {
+  cursor: pointer;
+}
 </style>

Some files were not shown because too many files changed in this diff