Browse Source

Merge branch 'master' of https://git.cocorobo.cn/CocoRoboLabs/pbl-teacher-table

lsc 2 years ago
parent
commit
5964fd1487

+ 10 - 2
src/components/pages/components/studentReport.vue

@@ -34,6 +34,9 @@
           </div>
         </div>
       </div>
+      <div>
+        <worksDetail3 class="r_box" :cid="courseid" :uid="userid" :ooid="scoid"></worksDetail3>
+      </div>
     </div>
   </div>
 </template>
@@ -45,31 +48,36 @@ import StudentAbility from "./report/studentAbility.vue";
 import CourseRadar from "./report/courseRadar.vue";
 import CoursePie from "./report/coursePie.vue";
 import CourseDetailReport from "./report/courseDetailReport.vue";
+import worksDetail3 from "./worksDetail3.vue";
 export default {
-  props: ["checkCourse", "checkStudent"],
+  props: ["checkCourse", "checkStudent","oid"],
   components: {
     StudentInfo,
     CourseInfo,
     StudentAbility,
     CourseRadar,
     CoursePie,
-    CourseDetailReport
+    CourseDetailReport,
+    worksDetail3
   },
   data() {
     return {
       userid: "",
       courseid: "",
+      scoid:"",
     };
   },
   watch: {
     checkStudent(newValue, oldValue) {
       this.userid = this.checkStudent;
       this.courseid = this.checkCourse;
+      this.scoid = this.oid;
     },
   },
   created() {
     this.userid = this.checkStudent;
     this.courseid = this.checkCourse;
+    this.scoid = this.oid;
   },
 };
 </script>

+ 40 - 4
src/components/pages/components/worksDetail2.vue

@@ -233,7 +233,7 @@
                 <div class="cru_selectBox">
                   <div v-for="(dy, dyIndex) in dyList2" :key="dyIndex">
                     <div class="blue_box_one" @click="isOpen(dyIndex)">
-                      <div>第{{ dyIndex + 1 }}阶段</div>
+                      <div>第{{ dy.id + 1 }}阶段</div>
                       <div>{{ dy.name }}</div>
                     </div>
                     <div
@@ -283,13 +283,21 @@
                   </div>
                 </div>
               </div>
-              <div class="shuBox" v-if="worksDetail.length">
+              <div
+                class="shuBox"
+                v-if="worksDetail.length"
+                :class="{ fullBox: full }"
+              >
                 <div
                   class="allBox"
                   v-for="(sin, sIndex) in sInfo"
                   :key="sIndex"
                 >
-                  <div class="zyBox" v-if="sin.course">
+                  <div
+                    class="zyBox"
+                    v-if="sin.course"
+                    :class="{ fullZyBox: full }"
+                  >
                     <div class="top">
                       <div class="jdName">
                         <div>
@@ -515,15 +523,21 @@
                       </div>
                     </div>
                   </div>
-                  <div class="right_score">
+                  <div class="right_score" :class="{ rightScoreFullBox: full }">
                     <div
                       class="sd_score"
                       style="
                         box-sizing: border-box;
                         width: 100%;
                         box-shadow: none;
+                        position: relative;
                       "
                     >
+                      <div class="worksTime">
+                        作业提交时间:<span style="width: auto"
+                          >{{ worksDetail[sIndex].time }}
+                        </span>
+                      </div>
                       <div class="ech" style="margin-left: 23px">
                         <img src="../../../assets/icon/pj/score.png" alt="" />
                       </div>
@@ -997,6 +1011,7 @@ export default {
               wpptInfo: [],
               scopeId: res.data[0][k].id,
               stagetask: "",
+              time: "",
             });
             this.allWorks = res.data[0][k];
             this.chapInfo.push(JSON.parse(res.data[0][k].chapters));
@@ -1005,6 +1020,7 @@ export default {
               chapters[0][res.data[0][k].stage].chapterInfo[0].taskJson[
                 res.data[0][k].task
               ].eList;
+            workJson[k].time = res.data[0][k].time;
             workJson[k].stagetask =
               res.data[0][k].stage + "-" + res.data[0][k].task;
             if (eList) {
@@ -2799,6 +2815,7 @@ export default {
 }
 .fullStyle >>> .el-dialog__body {
   height: 100% !important;
+  overflow: auto;
 }
 .fullStyle >>> .el-dialog,
 .fullStyle {
@@ -2807,4 +2824,23 @@ export default {
   height: 100% !important;
   margin: 0 !important;
 }
+.worksTime {
+  position: absolute;
+  top: 10px;
+  right: 0;
+  display: flex;
+  flex-direction: row;
+  flex-wrap: nowrap;
+  align-items: baseline;
+}
+.fullBox {
+  overflow: unset !important;
+  height: auto !important;
+}
+.fullZyBox {
+  width: 60% !important;
+}
+.rightScoreFullBox {
+  width: 40%;
+}
 </style>

+ 2582 - 0
src/components/pages/components/worksDetail3.vue

@@ -0,0 +1,2582 @@
+<template>
+  <div class="pb_content" style="background: unset">
+    <div class="zyBoxC">
+      <div class="courseTitle" v-if="allWorks.course">
+        <div class="txName">
+          <div class="tx"><img :src="tx" alt="" /></div>
+          <div>{{ allWorks.sName }}</div>
+        </div>
+        <div>{{ allWorks.course }}</div>
+      </div>
+      <div class="cBox">
+        <div class="pb_left">
+          <el-tooltip
+            class="cTitle"
+            effect="light"
+            :content="allWorks.course"
+            placement="top"
+          >
+            <div>{{ allWorks.course }}</div>
+          </el-tooltip>
+          <div class="ml">目录</div>
+          <div class="cru_selectBox">
+            <div v-for="(dy, dyIndex) in dyList2" :key="dyIndex">
+              <div class="blue_box_one" @click="isOpen(dyIndex)">
+                <div>第{{ dy.id + 1 }}阶段</div>
+                <div>{{ dy.name }}</div>
+              </div>
+              <div
+                class="twoChild"
+                :class="{
+                  navActive: dy.isOpen,
+                }"
+              >
+                <div
+                  class="navChild"
+                  v-for="(nav, navIndex) in dy.taskList"
+                  :key="navIndex"
+                >
+                  <div
+                    class="navTask"
+                    @click="openTask(dy.id, nav.id)"
+                    :class="{
+                      openTaskActive:
+                        nav.id == taskCount &&
+                        dy.id + '-' + nav.id == navId &&
+                        dy.id == stageIndex,
+                    }"
+                  >
+                    <div
+                      class="vedioNav"
+                      :class="{
+                        isClick:
+                          nav.id == taskCount &&
+                          dy.id + '-' + nav.id == navId &&
+                          dy.id == stageIndex,
+                      }"
+                      style="margin: 0"
+                    >
+                      任务{{ navIndex + 1 }}
+                    </div>
+                    <el-tooltip
+                      class="navTaskname item"
+                      effect="light"
+                      :content="nav.name"
+                      placement="top"
+                    >
+                      <div>{{ nav.name }}</div>
+                    </el-tooltip>
+                  </div>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div
+          class="shuBox"
+          v-if="worksDetail.length"
+          :class="{ fullBox: full }"
+        >
+          <div class="allBox" v-for="(sin, sIndex) in sInfo" :key="sIndex">
+            <div class="zyBox" v-if="sin.course" :class="{ fullZyBox: full }">
+              <div class="top">
+                <div class="jdName">
+                  <div>
+                    {{
+                      "第" + (sin.stage + 1) + "阶段 " + dyList[sin.stage].name
+                    }}
+                  </div>
+                  <div
+                    class="taskName"
+                    style="width: 100%; justify-content: space-between"
+                  >
+                    <div
+                      class="taskName"
+                      :id="sin.stage + '-' + sin.task"
+                      :scrollindex="sIndex"
+                    >
+                      <div class="task">任务{{ sin.task + 1 }}</div>
+                      <div>
+                        {{ dyList[sin.stage].taskList[sin.task].name }}
+                      </div>
+                    </div>
+                    <div v-if="worksDetail[sIndex].wpptInfo.length > 0">
+                      <el-button
+                        type="primary"
+                        size="small"
+                        @click="openFile(worksDetail[sIndex].wpptInfo[0])"
+                        >查看文档</el-button
+                      >
+                    </div>
+                  </div>
+                </div>
+              </div>
+              <div class="contentBox">
+                <div class="left_top" v-if="worksDetail[sIndex].img.length > 0">
+                  <div
+                    class="bigImg"
+                    v-if="
+                      worksDetail[sIndex].img && worksDetail[sIndex].img.length
+                    "
+                  >
+                    <img
+                      @click="
+                        previewImg(
+                          worksDetail[sIndex].img[worksDetail[sIndex].imgIndex]
+                            .src
+                        )
+                      "
+                      :src="
+                        worksDetail[sIndex].img[worksDetail[sIndex].imgIndex]
+                          .src
+                      "
+                      alt
+                    />
+                  </div>
+                  <div
+                    class="thumbnail"
+                    v-if="
+                      worksDetail[sIndex].img && worksDetail[sIndex].img.length
+                    "
+                  >
+                    <div
+                      v-for="(item, index) in worksDetail[sIndex].img"
+                      :key="index"
+                      :class="
+                        worksDetail[sIndex].imgIndex == index ? 'isClick' : ''
+                      "
+                    >
+                      <img
+                        :src="item.src"
+                        alt
+                        @click="worksDetail[sIndex].imgIndex = index"
+                      />
+                    </div>
+                  </div>
+                  <div class="work_nopicture" v-else>暂无上传截图</div>
+                </div>
+                <div
+                  class="left_top"
+                  v-else-if="worksDetail[sIndex].answerInfo.length > 0"
+                >
+                  <div class="answerbox">
+                    <div style="min-width: 80px">问答标题</div>
+                    <div>
+                      {{ worksDetail[sIndex].answerInfo[0].answerTitle }}
+                    </div>
+                  </div>
+                  <div class="answerbox1">
+                    <div>学生回答</div>
+                    <div>
+                      {{ worksDetail[sIndex].answerInfo[0].answer }}
+                    </div>
+                  </div>
+                </div>
+                <div
+                  class="left_top"
+                  v-else-if="worksDetail[sIndex].askInfo.length > 0"
+                >
+                  <div>
+                    <div
+                      class="a_add_title"
+                      style="
+                        display: flex;
+                        flex-direction: row;
+                        align-items: center;
+                        justify-content: center;
+                        flex-wrap: wrap;
+                      "
+                    >
+                      <div style="margin-right: 20px; font-size: 20px">
+                        问卷标题:
+                      </div>
+                      <div style="font-size: 20px">
+                        {{ worksDetail[sIndex].askInfo[0].askTitle }}
+                      </div>
+                    </div>
+                    <div class="a_addBox">
+                      <div style="font-size: 16px; color: #c7c7c7">
+                        问卷内容
+                      </div>
+                      <div
+                        class="a_add_box"
+                        v-for="(item1, index1) in worksDetail[sIndex].askInfo[0]
+                          .askCount"
+                        :key="index1"
+                      >
+                        <div class="a_add_head">
+                          <div style="display: flex">
+                            {{ index1 + 1 + "、" }}
+                            <div>
+                              问卷题目:{{
+                                worksDetail[sIndex].askInfo[0].askJson[index1]
+                                  .askstitle
+                              }}
+                            </div>
+                          </div>
+                        </div>
+                        <div class="a_add_body">
+                          <div class="a_add_input">
+                            <el-radio-group
+                              v-model="
+                                worksDetail[sIndex].askInfo[0].radio[index1]
+                              "
+                            >
+                              <el-radio
+                                v-for="(item2, checkIndex) in worksDetail[
+                                  sIndex
+                                ].askInfo[0].askJson[index1].checkList"
+                                :key="checkIndex"
+                                :label="checkIndex"
+                                disabled
+                                class="redioStyle"
+                                >{{ item2 }}</el-radio
+                              >
+                            </el-radio-group>
+                          </div>
+                        </div>
+                      </div>
+                    </div>
+                  </div>
+                </div>
+                <div
+                  class="left_top"
+                  v-else-if="worksDetail[sIndex].wpptInfo.length > 0"
+                >
+                  <div
+                    style="height: 238px"
+                    @click="openFile(worksDetail[sIndex].wpptInfo[0])"
+                  >
+                    <div
+                      @click="openFile(worksDetail[sIndex].wpptInfo[0])"
+                      style="
+                        width: 300px;
+                        height: 300px;
+                        position: absolute;
+                        z-index: 999;
+                      "
+                    ></div>
+                    <pdf
+                      v-if="showPDF"
+                      :pdfUrl="worksDetail[sIndex].wpptInfo[0]"
+                      style="width: 100%; height: 520px; overflow: auto"
+                    ></pdf>
+                    <iframe
+                      v-else
+                      :src="worksDetail[sIndex].wpptInfo[0]"
+                      frameborder="0"
+                      width="100%"
+                      height="100%"
+                    ></iframe>
+                  </div>
+                </div>
+                <div class="right_top">
+                  <div class="ech">
+                    <img src="../../../assets/icon/pj/ech.png" alt="" />
+                  </div>
+                  <div class="data_body">
+                    <div style="width: 100%">
+                      <div
+                        class="echart charts_canvas"
+                        style="width: 100%; height: 100%; margin: 0 0 0 1rem"
+                      ></div>
+                    </div>
+                  </div>
+                </div>
+              </div>
+            </div>
+            <div class="right_score" :class="{ rightScoreFullBox: full }">
+              <div
+                class="sd_score"
+                style="
+                  box-sizing: border-box;
+                  width: 100%;
+                  box-shadow: none;
+                  position: relative;
+                "
+              >
+                <div class="worksTime">
+                  作业提交时间:<span style="width: auto"
+                    >{{ worksDetail[sIndex].time }}
+                  </span>
+                </div>
+                <div class="ech" style="margin-left: 23px">
+                  <img src="../../../assets/icon/pj/score.png" alt="" />
+                </div>
+                <div
+                  class="score_box"
+                  v-for="(item, index) in worksDetail[sIndex].eList"
+                  :key="index"
+                >
+                  <el-tooltip
+                    class="item"
+                    effect="dark"
+                    :content="item.value"
+                    placement="top-start"
+                  >
+                    <span>{{ item.value }}</span>
+                  </el-tooltip>
+                  <el-rate
+                    class="rate_size"
+                    style="min-width: 120px"
+                    v-model="worksDetail[sIndex].rateList[item.value]"
+                    disabled
+                  ></el-rate>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+    <!-- <div class="student_page">
+        <el-pagination
+          background
+          layout="prev, pager, next"
+          :page-size="10"
+          :total="total"
+          v-if="page"
+          @current-change="handleCurrentChange"
+        ></el-pagination>
+      </div> -->
+    <el-dialog :visible.sync="pictureDialog" size="tiny">
+      <img width="100%" :src="dialogImageUrl" alt />
+    </el-dialog>
+    <el-dialog
+      title="项目评分"
+      :visible.sync="dataVisible"
+      :append-to-body="true"
+      width="1100px"
+      :before-close="handleClose"
+      class="dialog_diy"
+    >
+      <div>
+        <div class="a_addBox2">
+          <StudentData :studentInfo="studentInfo"></StudentData>
+        </div>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="dataVisible = false">关 闭</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog
+      title="查看问卷调查"
+      :visible.sync="dialogVisible4"
+      :append-to-body="true"
+      width="800px"
+      :before-close="handleClose"
+      class="dialog_diy"
+    >
+      <div>
+        <div
+          class="a_add_title"
+          style="
+            display: flex;
+            flex-direction: row;
+            align-items: center;
+            justify-content: center;
+          "
+        >
+          <div style="font-size: 20px">{{ askJson.askTitle }}</div>
+        </div>
+        <div class="a_addBox">
+          <div style="font-size: 16px; color: #c7c7c7">问卷内容</div>
+          <div
+            class="a_add_box"
+            v-for="(item, index) in askJson.askJson"
+            :key="index"
+          >
+            <div class="a_add_head">
+              <div style="display: flex">
+                {{ index + 1 + "、" }}
+                <div>问卷题目:{{ item.askstitle }}</div>
+              </div>
+            </div>
+            <div class="a_add_body">
+              <div class="a_add_input">
+                <el-radio-group v-model="askJson.radio[index]">
+                  <el-radio
+                    v-for="(item3, checkIndex1) in item.checkList"
+                    :key="checkIndex1"
+                    :label="checkIndex1"
+                    class="redioStyle"
+                    disabled
+                    >{{ item3 }}</el-radio
+                  >
+                </el-radio-group>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="dialogVisible4 = false"
+          >关 闭</el-button
+        >
+      </span>
+    </el-dialog>
+    <el-dialog
+      title="文件预览"
+      :visible.sync="dialogVisible6"
+      width="100%"
+      :before-close="handleClose"
+      class="full_diy"
+      :append-to-body="true"
+    >
+      <div slot="title" class="header-title">
+        <div style="color: #fff">文件预览</div>
+      </div>
+      <pdf
+        v-if="showPDF"
+        :pdfUrl="pptImgUrl"
+        style="width: 100%; height: 520px; overflow: auto"
+      ></pdf>
+      <iframe
+        v-else
+        :src="pptImgUrl"
+        frameborder="0"
+        width="100%"
+        height="600"
+      ></iframe>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import StudentData from "./studentData";
+import htmlDocx from "html-docx-js/dist/html-docx";
+import saveAs from "file-saver";
+export default {
+  components: {
+    StudentData,
+  },
+  props: ["cid", "uid", "ooid"],
+  data() {
+    return {
+      tableHeight: "500px",
+      isLoading: false,
+      id: this.cid,
+      userid: this.uid,
+      oid: this.ooid,
+      formLabelWidth: "100px",
+      dialogImageUrl: "",
+      pictureDialog: false,
+      dialogVisible3: false,
+      dialogVisible4: false,
+      dataVisible: false,
+      full: false,
+      isStar: 0,
+      studentInfo: {},
+      courseByUser: "诗词中的植物",
+      userName: "林点",
+      answerName: "宿赞公房",
+      studentAnswer: "雨荒深院菊,霜倒半池莲.唐杜甫《宿赞公房》",
+      commentCount: 0,
+      publicIndex: 0,
+      allWorks: [],
+      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: {},
+      commentName: "谭子松",
+      commentTime: "2021/2/5",
+      commentAnswer:
+        "作为家长我很高兴看到孩子的进步,希望这个进步只是一个开始,在新学期能够继续延续,这样才能不负老师的期望",
+      stageIndex: "",
+      taskCount: "",
+      navId: "",
+      chooseTask: "",
+      subjectJuri: [],
+      projectJuri: [],
+      pptImgUrl: "",
+      grade: [],
+      mr: require("../../../assets/icon/wheel.png"),
+      tx: require("../../../assets/avatar.png"),
+      projectchoose: "",
+      scopeId: "",
+      thumbnail: [],
+      rateList: {
+        ca: 0,
+        sia: 0,
+        eta: 0,
+        pia: 0,
+        lra: 0,
+        content: "",
+      },
+      page: 1,
+      total: 0,
+      worksDetail: [],
+      suserId: "",
+      sInfo: {},
+      chapInfo: [],
+      showPDF: false,
+      dialogVisible6: false,
+      vedio: [],
+      file: [],
+      tType: 0,
+      chartObj: [],
+      pptImgUrl: "",
+      ooption: [],
+      option: {
+        tooltip: {
+          trigger: "item",
+        },
+        series: [
+          {
+            name: "量规评分",
+            type: "pie",
+            radius: "70%",
+            center: ["50%", "50%"],
+            data: [
+              { value: 0, name: "意识能力" },
+              { value: 0, name: "科学探究能力" },
+              { value: 0, name: "实践创新能力" },
+              { value: 0, name: "学习反思能力" },
+              { value: 0, name: "工程思维能力" },
+            ],
+            itemStyle: {
+              emphasis: {
+                shadowBlur: 10,
+                shadowOffsetX: 0,
+                shadowColor: "rgba(0, 0, 0, 0.5)",
+              },
+              normal: {
+                label: {
+                  show: true,
+                  formatter: "{d}%",
+                  inside: true,
+                  position: "inner",
+                },
+                labelLine: { show: false },
+              },
+            },
+          },
+        ],
+      },
+      // 雷达图的数据
+      radarOption: {
+        splitNumber: 5,
+        tooltip: {
+          triggerOn: "mousemove",
+          //雷达图的tooltip不会超出div,也可以设置position属性,position定位的tooltip 不会随着鼠标移动而位置变化,不友好
+          confine: true,
+          enterable: true, //鼠标是否可以移动到tooltip区域内
+          backgroundColor: "rgba(255,255,255,0.7)",
+          textStyle: {
+            // 文字样式
+            align: "left",
+          },
+          left: "right",
+          top: "bottom",
+        },
+        radar: {
+          radius: ["0%", "70%"],
+          shape: "circle",
+          center: ["50%", "50%"],
+          axisName: {
+            textStyle: {
+              // 文字样式
+              color: "#58a5e6",
+            },
+            formatter: function (value, indicator) {
+              // value = value.replace(/\S{2}/g, function (match) {
+              //   return match + "\n";
+              // });
+              return value;
+            },
+          },
+          indicator: [
+            // 雷达图的指示器,用来指定雷达图中的多个变量(维度)
+          ],
+        },
+        // 雷达图背景的颜色,在这儿随便设置了一个颜色,完全不透明度为0,就实现了透明背景
+        splitArea: {
+          show: true,
+          areaStyle: {
+            color: "rgba(255,0,0,0)", // 图表背景的颜色
+          },
+        },
+        splitLine: {
+          show: true,
+          lineStyle: {
+            width: 1,
+            color: "rgba(131,141,158,.1)", // 设置网格的颜色
+          },
+        },
+        series: [
+          {
+            name: "能力图", // tooltip中的标题
+            type: "radar", // 表示是雷达图
+            symbol: "circle", // 拐点的样式,还可以取值'rect','angle'等
+            symbolSize: 8, // 拐点的大小
+            areaStyle: {
+              normal: {
+                width: 1,
+                opacity: 0.2,
+              },
+            },
+            data: [
+              {
+                // 设置各个指标原始值
+                value: [],
+                // 设置区域边框和区域的颜色
+                itemStyle: {
+                  normal: {
+                    color: "#58a5e6",
+                    lineStyle: {
+                      color: "#58a5e6",
+                    },
+                  },
+                },
+              },
+            ],
+          },
+        ],
+      },
+      askJson: {},
+      dyList: [],
+      dyList2: [],
+      userAarray: [],
+    };
+  },
+  //   mounted() {
+  //     this.$nextTick(function () {
+  //       this.tableHeight =
+  //         window.innerHeight - this.$refs.table.$el.offsetTop - 200;
+  //       if (this.tableHeight <= 530) {
+  //         this.tableHeight = 530;
+  //       }
+  //       // 监听窗口大小变化
+  //       let self = this;
+  //       window.onresize = function () {
+  //         self.tableHeight =
+  //           window.innerHeight - self.$refs.table.$el.offsetTop - 200;
+  //         if (self.tableHeight <= 530) {
+  //           self.tableHeight = 530;
+  //         }
+  //       };
+  //     });
+  //   },
+  methods: {
+    previewImg(url) {
+      this.$hevueImgPreview(url);
+    },
+    lookData(uid) {
+      let params = {
+        uid: uid,
+        cid: this.id,
+      };
+      this.ajax
+        .get(this.$store.state.api + "selectWorksDetail", params)
+        .then((res) => {
+          this.studentInfo = res.data[0][0];
+          this.dataVisible = true;
+        })
+        .catch((err) => {
+          console.error(err);
+        });
+    },
+    tableRowClassName({ row, rowIndex }) {
+      if ((rowIndex + 1) % 2 === 0) {
+        return "even_row";
+      } else {
+        return "";
+      }
+    },
+    handleClose(done) {
+      done();
+    },
+    tableRowClassName({ row, rowIndex }) {
+      if ((rowIndex + 1) % 2 === 0) {
+        return "even_row";
+      } else {
+        return "";
+      }
+    },
+    handleCurrentChange(val) {
+      this.page = val;
+      this.getWorks();
+    },
+    lookWork() {
+      // this.scopeId = id;
+      let params = {
+        uid: this.uid,
+        cid: this.cid,
+      };
+      this.ajax
+        .get(this.$store.state.api + "selectWorksDetail3", params)
+        .then((res) => {
+          this.sInfo = res.data[0];
+          var chapters = [],
+            eList = [],
+            _ooption = [],
+            _rate = [],
+            _rateList = [];
+          var worksDetail = res.data[1];
+          // this.scopeId = res.data[2][0].id;
+          // var scopeId = res.data[2][0].id;
+          var askInfo = res.data[3];
+          var answerInfo = res.data[4];
+          var pptInfo = res.data[5];
+          var workJson = [];
+          for (var k = 0; k < res.data[0].length; k++) {
+            workJson.push({
+              img: [],
+              imgIndex: 0,
+              eList: [],
+              rateList: {},
+              askInfo: [],
+              answerInfo: [],
+              wpptInfo: [],
+              scopeId: res.data[0][k].id,
+              stagetask: "",
+              time: "",
+            });
+            this.allWorks = res.data[0][k];
+            this.chapInfo.push(JSON.parse(res.data[0][k].chapters));
+            chapters.push(JSON.parse(res.data[0][k].chapters));
+            eList =
+              chapters[0][res.data[0][k].stage].chapterInfo[0].taskJson[
+                res.data[0][k].task
+              ].eList;
+            workJson[k].time = res.data[0][k].time;
+            workJson[k].stagetask =
+              res.data[0][k].stage + "-" + res.data[0][k].task;
+            if (eList && eList.length > 0) {
+              _ooption = [];
+              workJson[k].eList = eList;
+              for (var i = 0; i < eList.length; i++) {
+                _ooption.push({ value: 0, name: eList[i].value });
+                workJson[k].rateList[eList[i].value] = 0;
+              }
+              workJson[k].rateList.content = "";
+              this.ooption[k] = _ooption;
+            } else {
+              _ooption = [];
+              workJson[k].eList = [
+                { value: "意识能力", detail: "", score: 5 },
+                { value: "科学探究能力", detail: "", score: 5 },
+                { value: "实践创新能力", detail: "", score: 5 },
+                { value: "学习反思能力", detail: "", score: 5 },
+                { value: "工程思维能力", detail: "", score: 5 },
+              ];
+              for (var i = 0; i < workJson[k].eList.length; i++) {
+                _ooption.push({ value: 0, name: workJson[k].eList[i].value });
+                workJson[k].rateList[workJson[k].eList[i].value] = 0;
+              }
+              workJson[k].rateList.content = "";
+              this.ooption[k] = [
+                { value: 0, name: "意识能力" },
+                { value: 0, name: "科学探究能力" },
+                { value: 0, name: "实践创新能力" },
+                { value: 0, name: "学习反思能力" },
+                { value: 0, name: "工程思维能力" },
+              ];
+            }
+            if (res.data[0][k].rate) {
+              _rate[k] = JSON.parse(res.data[0][k].rate);
+              _rateList[k] = Object.keys(JSON.parse(res.data[0][k].rate));
+              for (var i = 0; i < _rateList[k].length; i++) {
+                var _c = Object.keys(workJson[k].rateList);
+                if (_c.indexOf(_rateList[k][i]) != -1) {
+                  workJson[k].rateList[_rateList[k][i]] =
+                    _rate[k][_rateList[k][i]];
+                }
+              }
+              for (var i = 0; i < this.ooption[k].length; i++) {
+                if (_rateList[k].indexOf(this.ooption[k][i].name) != -1) {
+                  this.ooption[k][i].value = _rate[k][this.ooption[k][i].name];
+                }
+              }
+            } else {
+              _rate[k] = [];
+              _rateList[k] = [];
+            }
+
+            for (var i = 0; i < worksDetail.length; i++) {
+              if (
+                res.data[0][k].stage == worksDetail[i].stage &&
+                res.data[0][k].task == worksDetail[i].task
+              ) {
+                workJson[k].img.push({ src: worksDetail[i].content, id: i });
+              }
+            }
+            for (var i = 0; i < askInfo.length; i++) {
+              if (
+                res.data[0][k].stage == askInfo[i].stage &&
+                res.data[0][k].task == askInfo[i].task
+              ) {
+                const element = askInfo[i];
+                let a = JSON.parse(element.content)[0];
+                let b = a.anwer.split(",");
+                let c = [];
+                for (var j = 0; j < b.length; j++) {
+                  c.push(parseInt(b[j]));
+                }
+                a.askJson.radio = c;
+                a.askJson.time = element.time;
+                workJson[k].askInfo.push(a.askJson);
+              }
+            }
+
+            for (var i = 0; i < pptInfo.length; i++) {
+              if (
+                res.data[0][k].stage == pptInfo[i].stage &&
+                res.data[0][k].task == pptInfo[i].task
+              ) {
+                var a = ["PPT", "PPTX", "XLSX", "XLS", "DOC", "DOCX"];
+                if (
+                  a.indexOf(
+                    pptInfo[i].content
+                      .split(".")
+                      [
+                        pptInfo[i].content.split(".").length - 1
+                      ].toLocaleUpperCase()
+                  ) != -1
+                ) {
+                  var a =
+                    "https://view.officeapps.live.com/op/view.aspx?src=" +
+                    pptInfo[i].content;
+                  workJson[k].wpptInfo.push(a);
+                  this.showPDF = false;
+                } else if (
+                  pptInfo[i].content
+                    .split(".")
+                    [
+                      pptInfo[i].content.split(".").length - 1
+                    ].toLocaleUpperCase() == "PDF"
+                ) {
+                  workJson[k].wpptInfo.push(pptInfo[i].content);
+                  this.showPDF = true;
+                }
+              }
+            }
+
+            for (var i = 0; i < answerInfo.length; i++) {
+              if (
+                res.data[0][k].stage == answerInfo[i].stage &&
+                res.data[0][k].task == answerInfo[i].task
+              ) {
+                const element = answerInfo[i];
+                workJson[k].answerInfo.push(JSON.parse(element.content)[0]);
+              }
+            }
+          }
+
+          this.worksDetail = workJson;
+
+          this.courseDetail = res.data[0][0];
+
+          this.$forceUpdate;
+          this.dialogVisible3 = true;
+          setTimeout(() => {
+            for (var p = 0; p < res.data[0].length; p++) {
+              var _ooption = JSON.parse(JSON.stringify(this.ooption[p]));
+              var _option = JSON.parse(JSON.stringify(this.radarOption));
+              _option.radar.indicator = [];
+              _option.series[0].data[0].value = [];
+              for (var i = 0; i < _ooption.length; i++) {
+                _option.radar.indicator.push({
+                  name: _ooption[i].name,
+                  max: 5,
+                });
+                _option.series[0].data[0].value.push(_ooption[i].value);
+              }
+              console.log(_option);
+              this.setChart(_option, p);
+            }
+          }, 0);
+
+          let _dyList = JSON.parse(JSON.stringify(this.dyList));
+          let _dyList2 = [];
+          let _dyList3 = [];
+          for (var c = 0; c < _dyList.length; c++) {
+            _dyList[c].taskList = [];
+            _dyList2.push(_dyList[c]);
+          }
+          _dyList = JSON.parse(JSON.stringify(this.dyList));
+          for (var c = 0; c < workJson.length; c++) {
+            let _stage = workJson[c].stagetask.split("-")[0];
+            let _task = workJson[c].stagetask.split("-")[1];
+            _dyList2[_stage].taskList.push(_dyList[_stage].taskList[_task]);
+            _dyList2[_stage].taskList;
+          }
+          for (var c = 0; c < _dyList2.length; c++) {
+            if (_dyList2[c].taskList.length) {
+              _dyList2[c].isOpen = c === 0 ? true : false;
+              _dyList3.push(_dyList2[c]);
+            }
+          }
+          this.dyList2 = _dyList3;
+          this.stageIndex = this.dyList2[0].id;
+          this.taskCount = this.dyList2[0].taskList[0].id;
+          this.navId =
+            this.dyList2[0].id + "-" + this.dyList2[0].taskList[0].id;
+        this.$forceUpdate();
+          // this.sInfo = res.data[0][0];
+          // this.chapInfo = JSON.parse(res.data[0][0].chapters);
+          // var chapters = JSON.parse(res.data[0][0].chapters);
+          // var worksDetail = res.data[1];
+          // // var askArray = res.data[2];
+          // this.scopeId = res.data[2].length ? res.data[2][0].id : this.sInfo.id;
+          // var askInfo = res.data[3];
+          // var answerInfo = res.data[4];
+          // var workJson = {
+          //   img: [],
+          //   imgIndex: 0,
+          //   eList: [],
+          //   rateList: {},
+          //   askInfo: [],
+          //   answerInfo: [],
+          // };
+          // var eList =
+          //   chapters[this.sInfo.stage].chapterInfo[0].taskJson[this.sInfo.task]
+          //     .eList;
+          // var _ooption = [];
+          // if (eList) {
+          //   workJson.eList = eList;
+          //   for (var i = 0; i < eList.length; i++) {
+          //     _ooption.push({ value: 0, name: eList[i].value });
+          //     workJson.rateList[eList[i].value] = 0;
+          //   }
+          //   workJson.rateList.content = "";
+          //   this.ooption = _ooption;
+          // } else {
+          //   workJson.eList = [
+          //     { value: "意识能力", detail: "", score: 5 },
+          //     { value: "科学探究能力", detail: "", score: 5 },
+          //     { value: "实践创新能力", detail: "", score: 5 },
+          //     { value: "学习反思能力", detail: "", score: 5 },
+          //     { value: "工程思维能力", detail: "", score: 5 },
+          //   ];
+          //   for (var i = 0; i < workJson.eList.length; i++) {
+          //     _ooption.push({ value: 0, name: workJson.eList[i].value });
+          //     workJson.rateList[workJson.eList[i].value] = 0;
+          //   }
+          //   workJson.rateList.content = "";
+          //   this.ooption = [
+          //     { value: 0, name: "意识能力" },
+          //     { value: 0, name: "科学探究能力" },
+          //     { value: 0, name: "实践创新能力" },
+          //     { value: 0, name: "学习反思能力" },
+          //     { value: 0, name: "工程思维能力" },
+          //   ];
+          // }
+          // if (this.sInfo.rate) {
+          //   var _rate = JSON.parse(this.sInfo.rate);
+          //   var _rateList = Object.keys(JSON.parse(this.sInfo.rate));
+          //   for (var i = 0; i < _rateList.length; i++) {
+          //     var _c = Object.keys(workJson.rateList);
+          //     if (_c.indexOf(_rateList[i]) != -1) {
+          //       workJson.rateList[_rateList[i]] = _rate[_rateList[i]];
+          //     }
+          //   }
+          //   for (var i = 0; i < this.ooption.length; i++) {
+          //     if (_rateList.indexOf(this.ooption[i].name) != -1) {
+          //       this.ooption[i].value = _rate[this.ooption[i].name];
+          //     }
+          //   }
+          // }
+
+          // for (var i = 0; i < worksDetail.length; i++) {
+          //   workJson.img.push({ src: worksDetail[i].content, id: i });
+          // }
+          // for (var i = 0; i < askInfo.length; i++) {
+          //   const element = askInfo[i];
+          //   let a = JSON.parse(element.content)[0];
+          //   let b = a.anwer.split(",");
+          //   let c = [];
+          //   for (var j = 0; j < b.length; j++) {
+          //     c.push(parseInt(b[j]));
+          //   }
+          //   a.askJson.radio = c;
+          //   a.askJson.time = element.time;
+          //   workJson.askInfo.push(a.askJson);
+          // }
+
+          // for (var i = 0; i < answerInfo.length; i++) {
+          //   const element = answerInfo[i];
+          //   workJson.answerInfo.push(JSON.parse(element.content)[0]);
+          // }
+
+          // this.worksDetail = workJson;
+
+          // this.courseDetail = res.data[0][0];
+
+          // this.$forceUpdate;
+          // this.dialogVisible3 = true;
+
+          // setTimeout(() => {
+          //   var _ooption = JSON.parse(JSON.stringify(this.ooption));
+          //   var _option = this.radarOption;
+          //   _option.radar.indicator = [];
+          //   _option.series[0].data[0].value = [];
+          //   for (var i = 0; i < _ooption.length; i++) {
+          //     _option.radar.indicator.push({ name: _ooption[i].name, max: 5 });
+          //     _option.series[0].data[0].value.push(_ooption[i].value);
+          //   }
+          //   console.log(_option);
+          //   this.setChart(_option);
+
+          // }, 0);
+        })
+        .catch((err) => {
+          console.error(err);
+        });
+    },
+    checkAsk(askJson) {
+      this.askJson = askJson;
+      this.dialogVisible4 = true;
+    },
+    setChart(option, k) {
+      let _this = this;
+      // 雷达图显示的标签
+      let newPromise = new Promise((resolve) => {
+        resolve();
+      });
+      //然后异步执行echarts的初始化函数
+      newPromise.then(() => {
+        console.log(_this.option);
+
+        const chartObj = _this.$echarts.init(
+          //劳动课程
+          // _this.$el.querySelector("#charts_canvas")
+          document.getElementsByClassName("charts_canvas")[k]
+        );
+        // 初始化雷达图
+        _this.chartObj[k] = chartObj;
+        _this.chartObj[k].setOption(option);
+      });
+    },
+    openFile(f) {
+      this.pptImgUrl = f;
+      this.dialogVisible6 = true;
+    },
+    //获取班级列表
+    getClass() {
+      this.isLoading = true;
+      let params = {
+        oid: this.oid,
+      };
+      this.ajax
+        .get(this.$store.state.api + "selectClassBySchool", params)
+        .then((res) => {
+          this.isLoading = false;
+          this.grade = res.data[0];
+        })
+        .catch((err) => {
+          this.isLoading = false;
+          console.error(err);
+        });
+    },
+    //获取分组分类
+    getGroup() {
+      let params = {};
+      this.ajax
+        .get(this.$store.state.api + "getGroup", params)
+        .then((res) => {
+          this.subjectJuri = res.data[0];
+          this.projectJuri = res.data[0];
+        })
+        .catch((err) => {
+          console.error(err);
+        });
+    },
+    searchWork1() {
+      this.page = 1;
+      this.chooseTask = "";
+      this.getWorks();
+    },
+    searchWork2() {
+      this.page = 1;
+      this.getWorks();
+    },
+    //获取作业
+    getWorks() {
+      this.isLoading = true;
+      var mr = this.mr;
+      let params = {
+        cid: this.id,
+        uname: this.uname,
+        stage: this.chooseDy,
+        task: this.chooseTask,
+        page: this.page,
+      };
+      this.ajax
+        .get(this.$store.state.api + "getCourseWorks3", params)
+        .then((res) => {
+          this.isLoading = false;
+          this.total = res.data[0].length > 0 ? res.data[0][0].num : 0;
+          this.tableData = res.data[0];
+        })
+        .catch((err) => {
+          this.isLoading = false;
+          console.error(err);
+        });
+    },
+    fullTools() {
+      this.full = !this.full;
+    },
+    getCourseDetail() {
+      let params = {
+        cid: this.cid,
+      };
+      this.ajax
+        .get(this.$store.state.api + "getCourseWorksReport", params)
+        .then((res) => {
+          this.course = res.data[0][0];
+          var dyJSON = JSON.parse(res.data[0][0].chapters);
+          let dyList = [];
+          for (var i = 0; i < dyJSON.length; i++) {
+            dyList.push({ name: dyJSON[i].dyName, id: i, taskList: [] });
+            var a = dyJSON[i].chapterInfo[0].taskJson;
+            for (var j = 0; j < a.length; j++) {
+              dyList[i].taskList.push({ name: a[j].task, id: j });
+            }
+          }
+          this.dyList = dyList;
+          this.userAarray = res.data[1];
+        })
+        .catch((err) => {
+          console.error(err);
+        });
+    },
+    // getCourseDetail() {
+    //   const loading = this.$loading.service({
+    //     background: "rgba(255, 255, 255, 0.7)",
+    //     target: document.querySelector(".student_table"),
+    //   });
+    //   console.log(this.id);
+    //   let params = {
+    //     courseId: this.id,
+    //   };
+    //   this.ajax
+    //     .get(this.$store.state.api + "selectCourseDetail", params)
+    //     .then((res) => {
+    //       loading.close();
+    //       // this.chapInfo = JSON.parse(res.data[0][0].chapters);
+    //       var dyJSON = JSON.parse(res.data[0][0].chapters);
+    //       let dyList = [];
+    //       for (var i = 0; i < dyJSON.length; i++) {
+    //         dyList.push({ name: dyJSON[i].dyName, id: i, taskList: [] });
+    //         var a = dyJSON[i].chapterInfo[0].taskJson;
+    //         for (var j = 0; j < a.length; j++) {
+    //           dyList[i].taskList.push({ name: a[j].task, id: j });
+    //         }
+    //       }
+    //       console.log(dyList);
+    //       this.dyList = dyList;
+    //       // var dyJSON = JSON.parse()
+    //     })
+    //     .catch((err) => {
+    //       loading.close();
+    //       console.error(err);
+    //     });
+    // },
+    handlePictureCardPreview(url) {
+      this.dialogImageUrl = url;
+      this.pictureDialog = true;
+    },
+    updatePj() {
+      for (var i = 0; i < this.worksDetail.length; i++) {
+        this.updateWorks(
+          this.worksDetail[i].scopeId,
+          this.worksDetail[i].rateList,
+          i
+        );
+      }
+    },
+    getStar(i) {
+      const k = i;
+      var _ooption = JSON.parse(JSON.stringify(this.ooption[k]));
+      var _rate = this.worksDetail[i].rateList;
+      var _rateList = Object.keys(this.worksDetail[i].rateList);
+      for (var i = 0; i < _ooption.length; i++) {
+        if (_rateList.indexOf(_ooption[i].name) != -1) {
+          _ooption[i].value = _rate[_ooption[i].name];
+        }
+      }
+      // var _option = JSON.parse(JSON.stringify(this.radarOption));
+      var _option = this.radarOption;
+      _option.radar.indicator = [];
+      _option.series[0].data[0].value = [];
+      for (var i = 0; i < _ooption.length; i++) {
+        _option.radar.indicator.push({ name: _ooption[i].name, max: 5 });
+        _option.series[0].data[0].value.push(_ooption[i].value);
+      }
+      if (this.chartObj) {
+        // _option.series[0].data = _ooption;
+        this.chartObj[k].setOption(_option);
+      } else {
+        this.setChart(_ooption);
+      }
+    },
+    updateWorks(scopeId, rateList, i) {
+      let params = {
+        rate: rateList,
+        tuid: this.userid,
+        id: scopeId,
+      };
+      const k = i;
+      this.ajax
+        .get(this.$store.state.api + "updateWorks", params)
+        .then((res) => {
+          var _ooption = JSON.parse(JSON.stringify(this.ooption[k]));
+          // var _option = JSON.parse(JSON.stringify(this.option));
+
+          var _rate = rateList;
+          var _rateList = Object.keys(rateList);
+          for (var i = 0; i < _ooption.length; i++) {
+            if (_rateList.indexOf(_ooption[i].name) != -1) {
+              _ooption[i].value = _rate[_ooption[i].name];
+            }
+          }
+
+          // var _option = JSON.parse(JSON.stringify(this.radarOption));
+          var _option = this.radarOption;
+          _option.radar.indicator = [];
+          _option.series[0].data[0].value = [];
+          for (var i = 0; i < _ooption.length; i++) {
+            _option.radar.indicator.push({ name: _ooption[i].name, max: 5 });
+            _option.series[0].data[0].value.push(_ooption[i].value);
+          }
+          console.log(_option);
+          if (this.chartObj) {
+            // _option.series[0].data = _ooption;
+            this.chartObj[k].setOption(_option);
+          } else {
+            this.setChart(_ooption);
+          }
+          // this.uploadBoolean = false;
+          if (k == this.worksDetail.length - 1) {
+            this.$message({
+              message: "评价成功",
+              type: "success",
+            });
+          }
+        })
+        .catch((err) => {
+          this.$message.error("评价失败");
+          console.error(err);
+        });
+    },
+    switchVideo(media, index) {
+      this.playerO = {};
+      this.playerOptions.poster = "";
+      this.playerOptions.sources[0].src = media;
+      this.playerO = this.playerOptions;
+    },
+    onPlayerPlay() {},
+    // this.$store.commit("update", ["userInfo", userInfo]);
+    lookWork2(id, uid, stage, task) {
+      // this.scopeId = id;
+      let params = {
+        uid: uid,
+        cid: this.id,
+        stage: stage,
+        task: task,
+      };
+      this.ajax
+        .get(this.$store.state.api + "selectWorksDetail2", params)
+        .then((res) => {
+          this.sInfo = res.data[0][0];
+          this.chapInfo = JSON.parse(res.data[0][0].chapters);
+          var chapters = JSON.parse(res.data[0][0].chapters);
+          var worksDetail = res.data[1];
+          // var askArray = res.data[2];
+          this.scopeId = res.data[2].length ? res.data[2][0].id : this.sInfo.id;
+          var askInfo = res.data[3];
+          var answerInfo = res.data[4];
+          var linkInfo = res.data[5];
+          var workJson = {
+            img: [],
+            imgIndex: 0,
+            eList: [],
+            rateList: {},
+            wpptInfo: [],
+            askInfo: [],
+            answerInfo: [],
+          };
+          var eList =
+            chapters[this.sInfo.stage].chapterInfo[0].taskJson[this.sInfo.task]
+              .eList;
+          //           ooption: [
+          //   { value: 0, name: "意识能力" },
+          //   { value: 0, name: "科学探究能力" },
+          //   { value: 0, name: "实践创新能力" },
+          //   { value: 0, name: "学习反思能力" },
+          //   { value: 0, name: "工程思维能力" },
+          // ],
+          var _ooption = [];
+          if (eList) {
+            workJson.eList = eList;
+            for (var i = 0; i < eList.length; i++) {
+              _ooption.push({ value: 0, name: eList[i].value });
+              workJson.rateList[eList[i].value] = 0;
+            }
+            workJson.rateList.content = "";
+            this.ooption = _ooption;
+          } else {
+            workJson.eList = [
+              { value: "意识能力", detail: "", score: 5 },
+              { value: "科学探究能力", detail: "", score: 5 },
+              { value: "实践创新能力", detail: "", score: 5 },
+              { value: "学习反思能力", detail: "", score: 5 },
+              { value: "工程思维能力", detail: "", score: 5 },
+            ];
+            for (var i = 0; i < workJson.eList.length; i++) {
+              _ooption.push({ value: 0, name: workJson.eList[i].value });
+              workJson.rateList[workJson.eList[i].value] = 0;
+            }
+            workJson.rateList.content = "";
+            this.ooption = [
+              { value: 0, name: "意识能力" },
+              { value: 0, name: "科学探究能力" },
+              { value: 0, name: "实践创新能力" },
+              { value: 0, name: "学习反思能力" },
+              { value: 0, name: "工程思维能力" },
+            ];
+          }
+          if (this.sInfo.rate) {
+            var _rate = JSON.parse(this.sInfo.rate);
+            var _rateList = Object.keys(JSON.parse(this.sInfo.rate));
+            for (var i = 0; i < _rateList.length; i++) {
+              var _c = Object.keys(workJson.rateList);
+              if (_c.indexOf(_rateList[i]) != -1) {
+                workJson.rateList[_rateList[i]] = _rate[_rateList[i]];
+              }
+            }
+            for (var i = 0; i < this.ooption.length; i++) {
+              if (_rateList.indexOf(this.ooption[i].name) != -1) {
+                this.ooption[i].value = _rate[this.ooption[i].name];
+              }
+            }
+          }
+
+          for (var i = 0; i < worksDetail.length; i++) {
+            workJson.img.push({ src: worksDetail[i].content, id: i });
+          }
+          for (var i = 0; i < askInfo.length; i++) {
+            const element = askInfo[i];
+            let a = JSON.parse(element.content)[0];
+            let b = a.anwer.split(",");
+            let c = [];
+            for (var j = 0; j < b.length; j++) {
+              c.push(parseInt(b[j]));
+            }
+            a.askJson.radio = c;
+            a.askJson.time = element.time;
+            workJson.askInfo.push(a.askJson);
+          }
+
+          for (var i = 0; i < answerInfo.length; i++) {
+            const element = answerInfo[i];
+            workJson.answerInfo.push(JSON.parse(element.content)[0]);
+          }
+
+          this.worksDetail = workJson;
+
+          this.courseDetail = res.data[0][0];
+
+          this.$forceUpdate;
+
+          var _course = `<h1>${this.sInfo.course}</h1>`;
+          var _title =
+            "<h2>" +
+            "第" +
+            (this.sInfo.stage + 1) +
+            "阶段 " +
+            this.dyList[this.sInfo.stage].name +
+            "</h2>";
+          var _subtitle =
+            "<h3>" +
+            "任务" +
+            (this.sInfo.task + 1) +
+            " " +
+            this.dyList[this.sInfo.stage].taskList[this.sInfo.task].name +
+            "-" +
+            this.sInfo.sName +
+            "</h3>";
+          var _img = "";
+          if (workJson.img.length > 0) {
+            for (var i = 0; i < workJson.img.length; i++) {
+              // _img += `<div style="margin-top:10px"><div>图片${
+              //   i + 1
+              // }:<a href='${workJson.img[i].src}'>${
+              //   workJson.img[i].src
+              // }</a></div>`;
+              _img += `<div style="margin-top:10px"><div>图片${
+                i + 1
+              }</div><img style="max-width:500px" src="${
+                workJson.img[i].src
+              }"/></div>`;
+            }
+          }
+
+          var _ask = "";
+          if (workJson.askInfo.length > 0) {
+            var _ask = "<h3>问卷调查</h3>";
+            for (var i = 0; i < workJson.askInfo.length; i++) {
+              var _div = document.createElement("div");
+              _div.innerHTML = `<h4>问卷标题:${workJson.askInfo[i].askTitle}</h4>`;
+              for (var j = 0; j < workJson.askInfo[i].askJson.length; j++) {
+                var _div2 = document.createElement("div");
+                _div2.innerHTML = `<h5>第${j + 1}题:${
+                  workJson.askInfo[i].askJson[j].askstitle
+                }  选择:${workJson.askInfo[i].radio[j] + 1}</h5> `;
+                var _div3 = document.createElement("div");
+                for (
+                  var z = 0;
+                  z < workJson.askInfo[i].askJson[j].checkList.length;
+                  z++
+                ) {
+                  _div3.innerHTML += `<span style="margin-right:5px">${z + 1}.${
+                    workJson.askInfo[i].askJson[j].checkList[z]
+                  }</span>`;
+                }
+                _div2.innerHTML += `<div>${_div3.innerHTML}</div>`;
+                _div.innerHTML += `<div>${_div2.innerHTML}</div>`;
+              }
+              _ask += `<div>${_div.innerHTML}</div>`;
+            }
+          }
+
+          var _answer = "";
+          if (workJson.answerInfo.length > 0) {
+            var _answer = "<h3>问答</h3>";
+            for (var i = 0; i < workJson.answerInfo.length; i++) {
+              var _div = document.createElement("div");
+              _div.innerHTML = `<h4>问答:${workJson.answerInfo[i].answerTitle}</h4>`;
+              _div.innerHTML += `<div>${workJson.answerInfo[i].answer}</div>`;
+              _answer += `<div>${_div.innerHTML}</div>`;
+            }
+          }
+
+          var _link = "";
+          if (linkInfo.length > 0) {
+            for (var i = 0; i < linkInfo.length; i++) {
+              _link += `<div style="margin-top:10px"><a href='${linkInfo[i].content}'>${linkInfo[i].content}</a></div>`;
+            }
+          }
+
+          var _html =
+            _course + _title + _subtitle + _img + _ask + _answer + _link;
+          this.generate(_html);
+        })
+        .catch((err) => {
+          console.error(err);
+        });
+    },
+    isOpen(s) {
+      // this.stageIndex = s;
+      this.dyList2[s].isOpen = !this.dyList2[s].isOpen;
+    },
+    openTask(s, i) {
+      var a = s + "-" + i;
+      var b = document.getElementById(a);
+      var d = b.getAttribute("scrollindex");
+      var c = document.getElementsByClassName("shuBox")[0];
+      c.scrollTop = parseInt(d) * 375;
+      this.stageIndex = s;
+      this.taskCount = i;
+      this.navId = a;
+    },
+    async generate(a) {
+      // 将html文件中需要用到的数据挂载到store上
+      this.$store.commit("update", ["report", a]);
+      console.log(this.$store.state.report);
+      const content = `<!DOCTYPE html>
+      <html lang="en">
+      <head>
+          <meta charset="UTF-8">
+          <meta http-equiv="X-UA-Compatible" content="IE=edge">
+          <meta name="viewport" content="width=device-width, initial-scale=1.0">
+          <title>报告</title>
+      </head>
+      <body>
+      ${this.$store.state.report}
+      </body>
+      </html>`;
+      // debugger
+      // 生成报告
+      const link = document.createElement("a");
+      let dname = this.sInfo.course + "-" + this.sInfo.sName + ".html";
+      // link.download = "报告.html"; // 文件名
+      link.download = dname; // 文件名
+      link.style.display = "none";
+      // 创建文件流
+      // 创建bolb实例时,内容一定要放在[]中
+      const blob = new Blob([content], {
+        type: "text/plain;charset='utf-8'",
+      });
+      link.href = window.URL.createObjectURL(blob);
+      document.body.appendChild(link);
+      link.click();
+      document.body.removeChild(link);
+      // saveAs(
+      //   htmlDocx.asBlob(content, {
+      //     orientation: "landscape", //跨域设置
+      //   }),
+      //   //文件名
+      //   "报告.doc"
+      // );
+    },
+  },
+  created() {
+    this.page = 1;
+    this.getCourseDetail();
+    this.getClass();
+    this.getGroup();
+    this.getWorks();
+    this.lookWork();
+  },
+};
+</script>
+
+<style scoped>
+.pb_head > span:nth-child(2) {
+  font-size: 16px;
+  margin-left: 80px;
+  color: #ab582f;
+}
+.pb_head {
+  margin: 0 !important;
+  width: 100% !important;
+}
+.student_page {
+  margin-top: 10px;
+}
+.student_head {
+  margin-top: 10px;
+  padding-bottom: 15px;
+}
+.student_search {
+  display: flex;
+}
+.student_search > div:nth-child(1) {
+  line-height: 35px;
+  font-size: 14px;
+}
+.student_search >>> .el-input__inner {
+  width: 190px;
+  height: 35px;
+  margin-left: 10px;
+}
+.student_table >>> .el-table--border td {
+  border-right: 0px !important;
+}
+.add_work >>> .el-dialog__header {
+  padding: 20px 20px 10px;
+  text-align: center;
+  background: #32455b;
+}
+.add_work >>> .el-dialog__title {
+  font-size: 14px !important;
+  color: #fff !important;
+}
+.add_work >>> .el-dialog__headerbtn {
+  font-size: 20px !important;
+  top: 5px !important;
+  right: 8px !important;
+}
+.add_work >>> .el-form-item__label {
+  margin-left: 65px;
+}
+.add_work >>> .el-form-item {
+  display: flex;
+}
+.add_work >>> .el-form-item__content {
+  margin: 0 !important;
+}
+.add_work >>> .el-dialog__footer {
+  text-align: center !important;
+}
+.add_work >>> .el-dialog {
+  min-width: 650px !important;
+  width: 1080px;
+}
+.add_work >>> .el-dialog__body {
+  background: #fff;
+  height: 660px;
+  overflow: auto;
+}
+.header-title {
+  display: flex;
+}
+.logoImg {
+  width: 30px;
+}
+.logoImg > img {
+  width: 100%;
+  height: 100%;
+}
+.title_add_student {
+  margin: 0 auto;
+  color: #fff;
+}
+.first {
+  margin-top: 25px;
+  border-bottom: 1px solid #c5c5c5;
+}
+.one_top {
+  display: flex;
+  justify-content: space-between;
+}
+.one_top > div:nth-child(1) {
+  color: #2490bf;
+  font-size: 16px;
+}
+.one_top > button {
+  width: 100px;
+  background: #24a0a4;
+  height: 30px;
+  color: #e0e0e0;
+  font-size: 13px;
+  padding: 0 !important;
+}
+.work_Img {
+  width: 150px;
+  margin: 10px 0;
+}
+.assess_Img {
+  width: 400px;
+  margin: 0 auto;
+  padding: 15px 0;
+}
+.work_Img > img,
+.assess_Img > img {
+  width: 100%;
+  height: 100%;
+}
+.work_input {
+  border: 1px solid;
+  width: 135px;
+  height: 20px;
+  line-height: 20px;
+  font-size: 13px;
+  padding: 5px;
+}
+.poetry {
+  margin: 10px 0 15px 0;
+}
+.assess {
+  background: #169bd5 !important;
+}
+.assess_top {
+  border-bottom: 2px solid #eee;
+  padding-bottom: 10px;
+}
+.assess_top > div:nth-child(1) {
+  color: #2490bf;
+  font-size: 16px;
+}
+.student_Answer {
+  display: flex;
+  margin: 5px 10px;
+  /* padding-bottom: 25px; */
+}
+.workName {
+  font-size: 18px;
+  font-weight: bold;
+  margin: 5px 10px;
+}
+.toux {
+  width: 35px;
+  /* margin: auto 0; */
+  height: 35px;
+}
+.toux > img {
+  width: 100%;
+  height: 100%;
+}
+.nav {
+  display: flex;
+  flex-wrap: wrap;
+  margin-top: 10px;
+  flex-direction: column;
+}
+.studentName {
+  margin-left: 10px;
+  font-size: 13px;
+}
+.studentAnswer {
+  font-size: 12px;
+  margin: 5px 0 0 10px;
+  height: 42px;
+  overflow: auto;
+}
+.comment {
+  /* margin: 20px 0 0 10px;
+  overflow: auto;
+  height: 75%;
+  max-height: 330px; */
+  overflow: auto;
+  /* height: 290px; */
+  height: 525px;
+  background: #fff;
+  border-radius: 5px;
+  padding: 10px;
+  box-sizing: border-box;
+}
+.comment_body {
+  height: calc(100% - 25px);
+  overflow: auto;
+}
+.comment > .comment_title {
+  font-size: 18px;
+}
+.comment > .comment_title > span {
+  font-size: 14px;
+}
+.other_Answer {
+  display: flex;
+  margin: 5px 10px;
+  padding: 15px 0;
+  justify-content: center;
+}
+.nav {
+  margin-left: 5px;
+  width: 80%;
+}
+.nameAndTime {
+  display: flex;
+}
+.otherName {
+  font-weight: bold;
+  margin-left: 10px;
+  font-size: 13px;
+}
+.time {
+  margin-left: 25px;
+  font-size: 12px;
+  margin-top: 3px;
+}
+.otherAnswer {
+  width: 80%;
+  word-wrap: break-word;
+  word-break: break-all;
+  overflow: hidden;
+  font-size: 12px;
+  margin: 5px 0 0 10px;
+}
+.doingAssess {
+  margin: 0 auto;
+  width: 300px;
+  background: #169bd5;
+  height: 35px;
+  line-height: 35px;
+  border-radius: 3px;
+  font-size: 13px;
+  text-align: center;
+  color: #fff;
+  margin-top: 30px;
+  cursor: pointer;
+}
+.score_top {
+  display: flex;
+  margin-bottom: 10px;
+}
+.userTou {
+  width: 50px;
+}
+.userTou > img {
+  width: 100%;
+  height: 100%;
+}
+.score_user_name {
+  line-height: 53px;
+  margin-left: 15px;
+}
+.course_top {
+  display: flex;
+  align-items: center;
+}
+.course_top > div:nth-child(1) {
+  line-height: 25px;
+}
+.course_top > div:nth-child(2) {
+  border: 1px solid #ccc;
+  width: 250px;
+  text-align: center;
+  height: 25px;
+  line-height: 25px;
+  margin-left: 30px;
+}
+.sd_score {
+  font-size: 15px;
+  background: #fff;
+  height: 100%;
+  padding-top: 98px;
+  border-radius: 5px;
+  width: 90%;
+  box-shadow: 2px 2px 5px #909090;
+}
+.sd_score .score_box {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  margin-bottom: 15px;
+  /* margin-left: 30px; */
+}
+.sd_score .score_box:last-child {
+  margin-bottom: 0;
+}
+
+.rate_size >>> .el-rate__icon {
+  font-size: 25px;
+}
+.rate_size >>> .el-icon-star-off {
+  font-size: 22px;
+}
+.sd_score span {
+  width: 130px;
+  text-align: justify;
+  text-align-last: justify;
+  display: block;
+  margin-right: 20px;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  font-size: 16px;
+}
+.moreSay {
+  margin: 0px 0 5px 20px;
+}
+.more_say_input {
+  margin-left: 20px;
+  width: 80%;
+}
+.more_say_input >>> .el-input__inner {
+  height: 75px;
+  font-size: 13px;
+  padding: 0 0 0 10px;
+}
+.assess_right {
+  width: 200px;
+  background: #82b0ee;
+  color: #fff;
+  text-align: center;
+  height: 30px;
+  line-height: 30px;
+  border-radius: 5px;
+  margin: 0 auto;
+  margin-top: 20px;
+  font-size: 13px;
+  cursor: pointer;
+}
+.student_page {
+  margin-top: 10px;
+}
+.display {
+  display: none;
+}
+
+.firstTop {
+  background: #fff;
+  display: flex;
+  margin-bottom: 15px;
+  flex-direction: column;
+  align-items: flex-start;
+  height: 90px;
+  padding: 10px 25px;
+  border-radius: 5px;
+  width: 90%;
+  box-shadow: 2px 2px 5px #909090;
+}
+
+.talkScore >>> .el-dialog__body {
+  background: #efefef;
+  margin: 0 !important;
+}
+
+.lastTop {
+  background: #fff;
+  border-radius: 5px;
+  width: 98%;
+  height: 120px;
+  box-shadow: 2px 2px 5px #909090;
+}
+
+.left,
+.right {
+  /* background: #fff; */
+  border-radius: 5px;
+  /* padding: 10px; */
+  box-sizing: border-box;
+}
+
+.left {
+  margin-right: 10px;
+  width: 30%;
+  min-height: 425px;
+}
+/* .left .left_top {
+  background: #fff;
+  padding: 10px;
+  border-radius: 5px;
+  margin-bottom: 15px;
+} */
+.left .left_bottom {
+  background: #fff;
+  padding: 10px;
+  border-radius: 5px;
+  height: 160px;
+}
+.right {
+  width: 20%;
+  background: none;
+  padding: 0;
+}
+
+.courseTitle {
+  font-size: 16px;
+  color: #7c7c7c;
+  width: 100%;
+  margin-bottom: 10px;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+.course_t {
+  font-size: 19px;
+  display: flex;
+  align-items: flex-end;
+}
+.course_t span:nth-child(2) {
+  font-size: 16px;
+  margin-left: 10px;
+}
+
+.courseTitle span:nth-child(2) {
+  /* font-size: 14px;
+  cursor: pointer; */
+}
+
+.bigImg {
+  margin-top: 10px;
+  /* height: 300px; */
+  height: 150px;
+}
+
+.bigImg > img,
+.thumbnail > div > img {
+  width: 100%;
+  height: 100%;
+  object-fit: contain;
+}
+
+.thumbnail {
+  display: flex;
+  flex-direction: row;
+  justify-content: flex-start;
+  margin: 5px 0 8px;
+  overflow-x: auto;
+  overflow-y: hidden;
+}
+
+.isClick {
+  border: 3px solid #5f89d4;
+  border-radius: 5px;
+}
+
+.thumbnail > div {
+  width: 80px;
+  height: 80px;
+  margin-right: 5px;
+  cursor: pointer;
+  flex-shrink: 0;
+  box-sizing: border-box;
+}
+
+.zyBoxC {
+  background: #ededed;
+  display: flex;
+  align-items: flex-start;
+  justify-content: center;
+  padding: 20px 0px;
+  flex-direction: column;
+}
+
+.zyBox {
+  display: flex;
+  min-width: 600px;
+  width: 60%;
+  position: relative;
+  background: #fff;
+  flex-direction: column;
+  flex-wrap: nowrap;
+  align-items: flex-start;
+  overflow: hidden;
+}
+
+.zyBoxC + .zyBoxC {
+  margin-top: 10px;
+}
+.rbButtom {
+  position: absolute;
+  bottom: 0;
+  right: 0;
+  background: #06a7ff;
+  width: 100px;
+  height: 30px;
+  border-radius: 5px;
+  text-align: center;
+  color: #fff;
+  line-height: 30px;
+  font-size: 14px;
+  cursor: pointer;
+  right: 10px;
+}
+
+.bigImg >>> .vjs-tech,
+.bigImg >>> .video-js {
+  height: 300px !important;
+}
+
+.el-table >>> .even_row {
+  background-color: #f1f1f1;
+}
+
+.data_body {
+  height: 200px;
+  display: flex;
+  position: relative;
+  border-radius: 5px;
+  box-sizing: border-box;
+  width: 100%;
+  background: #fff;
+}
+.data_body .title {
+  position: absolute;
+  top: 10px;
+  left: 10px;
+}
+
+.dialog_diy >>> .el-dialog__header {
+  padding: 9px 20px 10px;
+  background: #32455b !important;
+}
+.dialog_diy >>> .el-dialog__title {
+  color: #fff;
+  font-size: 15px;
+}
+.dialog_diy >>> .el-dialog__headerbtn {
+  top: 14px;
+}
+.dialog_diy >>> .el-dialog__headerbtn .el-dialog__close {
+  color: #fff;
+}
+.dialog_diy >>> .el-dialog__headerbtn .el-dialog__close:hover {
+  color: #fff;
+}
+.dialog_diy >>> .el-dialog__body,
+.dialog_diy >>> .el-dialog__footer {
+  background: #fafafa;
+}
+
+.max_diy >>> .el-dialog {
+  /* max-width: 1200px; */
+  max-width: 1300px;
+}
+
+.dialog_diy2 >>> .el-dialog__header {
+  padding: 9px 20px 10px;
+  background: #32455b !important;
+}
+.dialog_diy2 >>> .el-dialog__title {
+  color: #fff;
+  font-size: 15px;
+}
+.dialog_diy2 >>> .el-dialog__headerbtn {
+  top: 14px;
+}
+.dialog_diy2 >>> .el-dialog__headerbtn .el-dialog__close {
+  color: #fff;
+}
+.dialog_diy2 >>> .el-dialog__headerbtn .el-dialog__close:hover {
+  color: #fff;
+}
+.dialog_diy2 >>> .el-dialog__body,
+.dialog_diy2 >>> .el-dialog__footer {
+  background: #ededed;
+  padding: 15px 20px;
+}
+.a_addBox2 {
+  margin: 10px 0;
+  background: #fff;
+  padding: 15px;
+}
+.a_addBox {
+  margin: 10px 0;
+  background: #fff;
+  padding: 15px;
+  /* max-height: 400px; */
+  max-height: 170px;
+  overflow: auto;
+}
+.a_add_box {
+  border-bottom: 2px solid #eee;
+  padding-bottom: 10px;
+}
+
+.a_add_head {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  margin: 10px 0;
+  font-size: 18px;
+}
+.a_add_head .a_add_head_input {
+  width: 300px;
+}
+.a_add_head .a_add_head_div {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+}
+.a_add_body {
+  display: flex;
+  align-items: center;
+}
+.a_add_input {
+  display: flex;
+  align-items: center;
+  flex-wrap: wrap;
+  /* flex-direction: column; */
+  /* width: 100%; */
+}
+.a_add_input >>> el-radio-group {
+  margin: 10px 0;
+}
+.a_add_input >>> .el-radio-group {
+  display: flex;
+  flex-direction: row;
+  flex-wrap: wrap;
+}
+.redioStyle >>> .el-radio__label {
+  font-size: 18px;
+}
+.task_title {
+  font-size: 18px;
+  font-weight: 700;
+}
+.ask_Answer {
+  /* margin-top: 10px; */
+}
+.ask_Answer_title {
+  font-size: 18px;
+}
+.ask_Answer_content {
+  display: flex;
+  justify-content: center;
+  margin: 10px 0;
+}
+
+.answer_body {
+  padding: 10px 0;
+  border-bottom: 1px solid #f5f5f5;
+}
+.answer_title {
+  font-size: 15px;
+  font-weight: 700;
+}
+.answer_content {
+  margin-top: 5px;
+}
+.ask_body {
+  display: flex;
+  font-size: 16px;
+  margin-top: 10px;
+  flex-direction: column;
+  height: 130px;
+  overflow: auto;
+  /* padding: 0 10px; */
+  box-sizing: border-box;
+}
+.ask_body div {
+  /* cursor: pointer; */
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+}
+.ask_body div .btn {
+  cursor: pointer;
+  color: #fff;
+  background-color: #409eff;
+  text-align: center;
+  font-size: 12px;
+  padding: 6px 12px;
+  box-sizing: border-box;
+  border-radius: 5px;
+  width: 60px;
+}
+.ask_body div span:nth-child(1) {
+  max-width: 250px;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+.ask_body div + div {
+  margin-top: 10px;
+}
+.work_nopicture {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  /* height: 350px; */
+  height: 352px;
+}
+.student_table >>> .el-table,
+.student_table >>> .el-table__body-wrapper {
+  height: auto !important;
+}
+.tx {
+  width: 35px;
+}
+.ech {
+  width: 100px;
+}
+.tx > img,
+.ech > img {
+  width: 100%;
+  height: 100%;
+}
+.txName {
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+  margin-left: 10px;
+}
+.txName > div:nth-child(2) {
+  margin-left: 10px;
+}
+.top {
+  display: flex;
+  justify-content: space-between;
+  padding: 15px 0 15px 20px;
+  flex-direction: row;
+  flex-wrap: nowrap;
+  width: 95%;
+}
+.jdName > div:nth-child(1) {
+  font-size: 20px;
+  font-weight: bold;
+}
+.taskName {
+  font-size: 14px;
+  margin-top: 10px;
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+}
+.task {
+  background: #49a0f0;
+  color: #fff;
+  width: 50px;
+  height: 22px;
+  border-radius: 5px;
+  text-align: center;
+  line-height: 22px;
+  margin-right: 10px;
+}
+.contentBox {
+  width: 100%;
+  display: flex;
+  flex-direction: row;
+  flex-wrap: nowrap;
+  align-items: flex-start;
+  height: 253px;
+}
+.left_top {
+  width: 45%;
+  padding-left: 20px;
+}
+.right_top {
+  width: 53%;
+}
+.cBox {
+  display: flex;
+  flex-direction: row;
+  flex-wrap: nowrap;
+  align-items: flex-start;
+  width: 100%;
+}
+.right_score {
+  min-width: 370px;
+  height: 351px;
+  margin-left: 10px;
+  width: 40%;
+}
+
+.pb_left {
+  width: 20%;
+  margin-right: 10px;
+  background: rgb(255, 255, 255);
+  /* padding-right: 10px; */
+  height: 500px;
+}
+.cTitle {
+  background: #205cc6;
+  width: 85%;
+  margin: 10px auto;
+  height: 50px;
+  color: #fff;
+  line-height: 50px;
+  text-align: center;
+  font-size: 20px;
+  font-weight: bold;
+  border-radius: 5px;
+  cursor: pointer;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  padding: 0 10px;
+}
+.ml {
+  margin-left: 20px;
+  color: #5b7dba;
+  border-left: 3px solid #5b7dba;
+  padding-left: 5px;
+  font-weight: bold;
+}
+.cru_selectBox {
+  width: 100%;
+  margin: 0 auto;
+  overflow: auto;
+  height: 400px;
+  overflow-x: hidden;
+}
+.cru_selectBox::-webkit-scrollbar {
+  /*滚动条整体样式*/
+  width: 6px;
+  /*高宽分别对应横竖滚动条的尺寸*/
+  height: 6px;
+}
+
+/*定义滚动条轨道 内阴影+圆角*/
+.cru_selectBox::-webkit-scrollbar-track {
+  border-radius: 10px;
+  background-color: #b8bdc9;
+}
+
+/*定义滑块 内阴影+圆角*/
+.cru_selectBox::-webkit-scrollbar-thumb {
+  border-radius: 10px;
+  -webkit-box-shadow: inset 0 0 6px rgb(96, 125, 184);
+  background-color: #2c5ab3;
+}
+.blue_box_one {
+  text-align: center;
+  color: #fff;
+  background-image: linear-gradient(90deg, #477cd7, #65b9fc);
+  border-radius: 7px;
+  margin: 10px auto;
+  cursor: pointer;
+  width: 95%;
+  height: 45px;
+  display: flex;
+  flex-direction: row;
+  justify-content: flex-start;
+  align-items: center;
+}
+.blue_box_one > div:nth-child(1) {
+  line-height: 30px;
+  margin: 0 5px 0 10px;
+  width: 30%;
+  min-width: 70px;
+  border-radius: 4px;
+}
+.blue_box_one > div:nth-child(2) {
+  white-space: nowrap;
+  text-overflow: ellipsis;
+  overflow: hidden;
+  word-break: break-all;
+  width: 70%;
+  text-align: left;
+  margin-right: 10px;
+  max-width: calc(100% - 85px);
+}
+.blue_box_one > div:nth-child(2):hover {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  cursor: pointer;
+}
+.twoChild {
+  width: 95%;
+  margin: 10px auto;
+  border-radius: 5px;
+  background: #f2f2f2;
+  display: flex;
+  flex-direction: column;
+  flex-wrap: nowrap;
+  justify-content: flex-start;
+  align-items: flex-start;
+  transition: all 0.5s;
+  overflow: hidden;
+  height: 0;
+  background: #e7f3ff;
+}
+.twoChild > div:nth-child(1) {
+  margin-top: 5px;
+}
+.navChild {
+  width: 100%;
+  cursor: pointer;
+  margin-bottom: 10px;
+}
+
+.navActive {
+  height: auto;
+}
+.navTask {
+  display: flex;
+  flex-direction: row;
+  flex-wrap: nowrap;
+  align-items: center;
+  align-content: flex-start;
+  height: 40px;
+  justify-content: flex-start;
+  padding: 0 10px;
+  width: 100%;
+  box-sizing: border-box;
+}
+.vedioNav {
+  margin: 10px 0 0 15px;
+  border-bottom: 1px solid #d7d7d7;
+  padding-bottom: 5px;
+  background: #96d1ff;
+  width: 55px;
+  min-width: 55px;
+  border-radius: 5px;
+  color: #fff;
+  text-align: center;
+  height: 20px;
+  line-height: 26px;
+  font-size: 14px;
+}
+.navTaskname {
+  white-space: nowrap;
+  text-overflow: ellipsis;
+  overflow: hidden;
+  word-break: break-all;
+  padding-left: 5px;
+}
+.allBox {
+  display: flex;
+  flex-direction: row;
+  flex-wrap: nowrap;
+  align-items: flex-start;
+  width: 100%;
+  margin-bottom: 20px;
+}
+.shuBox {
+  display: flex;
+  flex-direction: column;
+  flex-wrap: nowrap;
+  align-items: center;
+  width: 100%;
+  flex-wrap: nowrap;
+}
+.answerbox {
+  display: flex;
+  flex-direction: row;
+  /* align-items: center; */
+  margin-bottom: 20px;
+  font-size: 18px;
+  font-weight: bold;
+}
+.answerbox > div:nth-child(2) {
+  margin-left: 15px;
+}
+.answerbox1 {
+  display: flex;
+  flex-direction: column;
+  align-items: flex-start;
+  flex-wrap: nowrap;
+  font-size: 16px;
+}
+.answerbox1 > div:nth-child(2) {
+  margin-top: 10px;
+  width: 265px;
+  max-height: 147px;
+  overflow: auto;
+}
+.jdName {
+  width: 100%;
+}
+.full_diy >>> .el-dialog {
+  margin: 0 !important;
+  height: 100%;
+}
+
+.full_diy >>> .el-dialog__body {
+  height: calc(100% - 100px);
+}
+.openTaskActive {
+  color: #4386e6;
+}
+.isClick {
+  background: #4d9def;
+}
+.buttonCss {
+  width: 100%;
+  display: flex;
+  flex-direction: row;
+  flex-wrap: nowrap;
+  justify-content: flex-end;
+  margin: 10px 0;
+}
+.fullStyle >>> .el-dialog__body {
+  height: 100% !important;
+  overflow: auto;
+}
+.fullStyle >>> .el-dialog,
+.fullStyle {
+  width: 100% !important;
+  max-width: 100% !important;
+  height: 100% !important;
+  margin: 0 !important;
+}
+.worksTime {
+  position: absolute;
+  top: 10px;
+  right: 0;
+  display: flex;
+  flex-direction: row;
+  flex-wrap: nowrap;
+  align-items: baseline;
+}
+.fullBox {
+  overflow: unset !important;
+  height: auto !important;
+}
+.fullZyBox {
+  width: 60% !important;
+}
+.rightScoreFullBox {
+  width: 40%;
+}
+</style>

+ 41 - 13
src/components/pages/course.vue

@@ -261,6 +261,20 @@ export default {
     change(val) {
       console.log(val);
     },
+    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;
+        }
+      }
+    },
     addHomeworkBox() {
       this.homeworkList.push({ name: "" });
       this.itemCount++;
@@ -452,20 +466,34 @@ export default {
         document.querySelector(".student_table")
       );
       this.isLoading = true;
-      let params = {
-        cid: cid,
-      };
-      this.ajax
-        .get(this.$store.state.api + "deleteCourse", params)
-        .then((res) => {
-          loading.close();
-          this.isLoading = false;
-          this.$message.success("删除成功");
-          this.getCourse();
+      if (this.time()) {
+        this.$confirm("确定删除此课程吗?", "提示", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning",
         })
-        .catch((err) => {
-          console.error(err);
-        });
+          .then(() => {
+            let params = {
+              cid: cid,
+            };
+            this.ajax
+              .get(this.$store.state.api + "deleteCourse", params)
+              .then((res) => {
+                loading.close();
+                this.isLoading = false;
+                this.$message.success("删除成功");
+                this.getCourse();
+              })
+              .catch((err) => {
+                console.error(err);
+              });
+          })
+          .catch(() => {
+            loading.close();
+            this.isLoading = false;
+            return;
+          });
+      }
     },
     selectType() {
       this.ajax

+ 1 - 0
src/components/pages/works.vue

@@ -260,6 +260,7 @@
       <studentReport
         :checkCourse="checkCourse"
         :checkStudent="checkStudent"
+        :oid="oid"
       ></studentReport>
     </div>
     <div class="cancelbox" v-if="reportVisible">