lsc 2 years ago
parent
commit
3a1c7713d6

+ 1 - 1
dist/index.html

@@ -25,4 +25,4 @@
       height: 100%;
       width: 100%;
       background: #e6eaf0;
-    }</style><link href=./static/css/app.b85ca17c62bec1346f877eefb9f65559.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.85f48b0184f614b2b8d9.js></script><script type=text/javascript src=./static/js/vendor.5381b06bfaaab9dbd007.js></script><script type=text/javascript src=./static/js/app.49b87d4c6abaaef3353d.js></script></body></html><script>document.domain = document.domain.split(".").slice(-2).join(".");</script>
+    }</style><link href=./static/css/app.74ce4f069f0a5b92220b56f2f7333a37.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.85f48b0184f614b2b8d9.js></script><script type=text/javascript src=./static/js/vendor.5381b06bfaaab9dbd007.js></script><script type=text/javascript src=./static/js/app.33f1feebc1c12f730ed7.js></script></body></html><script>document.domain = document.domain.split(".").slice(-2).join(".");</script>

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


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


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


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


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/app.33f1feebc1c12f730ed7.js.map


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


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/app.49b87d4c6abaaef3353d.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/manifest.85f48b0184f614b2b8d9.js.map


+ 435 - 25
src/components/pages/components/report.vue

@@ -2,52 +2,451 @@
   <div class="r_box">
     <div class="r_cbox">
       <span>学生姓名</span>
-      <el-select class="r_select" v-model="uname" placeholder="全部">
-        <!-- <el-option
-          v-for="item in options"
-          :key="item.value"
-          :label="item.label"
-          :value="item.value"
+      <el-select
+        multiple
+        collapse-tags
+        class="r_select"
+        v-model="uname"
+        placeholder="全部"
+      >
+        <el-option
+          v-for="item in userAarray"
+          :key="item.userid"
+          :label="item.username"
+          :value="item.userid"
         >
-        </el-option> -->
+        </el-option>
       </el-select>
     </div>
     <div class="r_cbox">
       <span>选择阶段</span>
-      <el-select  class="r_select" v-model="chap" multiple collapse-tags placeholder="请选择阶段">
-        <!-- <el-option
-          v-for="item in options"
-          :key="item.value"
-          :label="item.label"
-          :value="item.value"
-        >
-        </el-option> -->
+      <el-select
+        class="r_select"
+        v-model="chap"
+        multiple
+        collapse-tags
+        placeholder="全部"
+        @change="changeChap"
+      >
+        <el-option
+          v-for="(item, index) in dyList"
+          :key="index"
+          :label="item.name"
+          :value="item.id"
+        ></el-option>
       </el-select>
     </div>
     <div class="r_cbox">
       <span>任务内容</span>
-      <el-select  class="r_select" v-model="task" multiple collapse-tags placeholder="全部">
-        <!-- <el-option
-          v-for="item in options"
-          :key="item.value"
-          :label="item.label"
-          :value="item.value"
+      <el-select
+        class="r_select"
+        v-model="task"
+        multiple
+        collapse-tags
+        placeholder="全部"
+      >
+        <el-option-group
+          v-for="(group, index) in dyAarray"
+          :key="index"
+          :label="group.name"
         >
-        </el-option> -->
+          <el-option
+            v-for="(item, index2) in group.taskList"
+            :key="index + '-' + index2"
+            :label="item.name"
+            :value="group.id + '-' + item.id"
+          >
+          </el-option>
+        </el-option-group>
       </el-select>
     </div>
+    <div class="btn_box">
+      <el-button class="btn" type="primary" @click="confirm">确定</el-button>
+    </div>
   </div>
 </template>
 
 <script>
 export default {
+  props: ["cid"],
   data() {
     return {
       uname: [],
       chap: [],
       task: [],
+      dyAarray: [],
+      dyList: [],
+      userAarray: [],
+      imgList: [],
+      askList: [],
+      questList: [],
+      wordList: [],
+      course: {},
     };
   },
+  methods: {
+    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];
+          console.log(res.data[0][1]);
+          this.imgList = res.data[2];
+          this.askList = res.data[3];
+          this.questList = res.data[4];
+          this.wordList = res.data[5];
+        })
+        .catch((err) => {
+          console.error(err);
+        });
+    },
+    confirm() {
+      var _uname = [];
+      var _userA = this.userAarray;
+      var _chap = JSON.parse(JSON.stringify(this.chap));
+      var _task = this.task;
+
+      if (this.uname.length) {
+        for (var i = 0; i < _userA.length; i++) {
+          if (this.uname.join(",").indexOf(_userA[i].userid) != -1) {
+            _uname.push(_userA[i]);
+          }
+        }
+      } else {
+        for (var i = 0; i < _userA.length; i++) {
+          _uname.push(_userA[i]);
+        }
+      }
+
+      if (!_chap.length) {
+        for (var i = 0; i < this.dyList.length; i++) {
+          _chap.push(this.dyList[i].id);
+        }
+      }
+
+      let imgList = this.imgList;
+      let askList = this.askList;
+      let questList = this.questList;
+      let wordList = this.wordList;
+
+      let workArray = [];
+
+      // json{
+      //       img: [],
+      //       askList: [],
+      //       questList: {},
+      //       wordList: [],
+      //       chapName: "",
+      //       taskName: "",
+      //       username:""
+      //     }
+
+      for (let i = 0; i < _uname.length; i++) {
+        for (let chapI = 0; chapI < _chap.length; chapI++) {
+          if (_task.length) {
+            for (let taskI = 0; taskI < _task.length; taskI++) {
+              let _tI = _task[taskI].split("-");
+              if (_tI[0] == _chap[chapI]) {
+                let _workjson = {
+                  img: [],
+                  askList: [],
+                  questList: [],
+                  wordList: [],
+                  chapName:
+                    "第" +
+                    (parseInt(_chap[chapI]) + 1) +
+                    "阶段 " +
+                    this.dyList[_chap[chapI]].name,
+                  taskName:
+                    "任务" +
+                    (parseInt(_tI[1]) + 1) +
+                    this.dyList[_chap[chapI]].taskList[_tI[1]].name,
+                  username: _uname[i].username,
+                };
+                // imgList;askList;questList;wordList;
+                for (let a = 0; a < imgList.length; a++) {
+                  if (
+                    imgList[a].stage == _chap[chapI] &&
+                    imgList[a].task == _tI[1] &&
+                    imgList[a].userid == _uname[i].userid
+                  ) {
+                    _workjson.img.push({ src: imgList[a].content });
+                  }
+                }
+                for (let b = 0; b < askList.length; b++) {
+                  if (
+                    askList[b].stage == _chap[chapI] &&
+                    askList[b].task == _tI[1] &&
+                    askList[b].userid == _uname[i].userid
+                  ) {
+                    const element = askList[b];
+                    let a1 = JSON.parse(element.content)[0];
+                    let b1 = a1.anwer.split(",");
+                    let c1 = [];
+                    for (var j1 = 0; j1 < b1.length; j1++) {
+                      c1.push(parseInt(b1[j1]));
+                    }
+                    a1.askJson.radio = c1;
+                    a1.askJson.time = element.time;
+                    _workjson.askList.push(a1.askJson);
+                  }
+                }
+                for (let c = 0; c < questList.length; c++) {
+                  if (
+                    questList[c].stage == _chap[chapI] &&
+                    questList[c].task == _tI[1] &&
+                    questList[c].userid == _uname[i].userid
+                  ) {
+                    const element = questList[c];
+                    _workjson.questList.push(JSON.parse(element.content)[0]);
+                  }
+                }
+                for (let d = 0; d < wordList.length; d++) {
+                  if (
+                    wordList[d].stage == _chap[chapI] &&
+                    wordList[d].task == _tI[1] &&
+                    wordList[d].userid == _uname[i].userid
+                  ) {
+                    const element = wordList[d];
+                    _workjson.wordList.push(element.content);
+                  }
+                }
+                workArray.push(_workjson);
+              }
+            }
+          } else {
+            for (
+              let taskI = 0;
+              taskI < this.dyList[_chap[chapI]].taskList.length;
+              taskI++
+            ) {
+              let _tI = [
+                _chap[chapI],
+                this.dyList[_chap[chapI]].taskList[taskI].id,
+              ];
+              if (_tI[0] == _chap[chapI]) {
+                let _workjson = {
+                  img: [],
+                  askList: [],
+                  questList: [],
+                  wordList: [],
+                  chapName:
+                    "第" +
+                    (parseInt(_chap[chapI]) + 1) +
+                    "阶段 " +
+                    this.dyList[_chap[chapI]].name,
+                  taskName:
+                    "任务" +
+                    (parseInt(_tI[1]) + 1) +
+                    this.dyList[_chap[chapI]].taskList[_tI[1]].name,
+                  username: _uname[i].username,
+                };
+                // imgList;askList;questList;wordList;
+                for (let a = 0; a < imgList.length; a++) {
+                  if (
+                    imgList[a].stage == _chap[chapI] &&
+                    imgList[a].task == _tI[1] &&
+                    imgList[a].userid == _uname[i].userid
+                  ) {
+                    _workjson.img.push({ src: imgList[a].content });
+                  }
+                }
+                for (let b = 0; b < askList.length; b++) {
+                  if (
+                    askList[b].stage == _chap[chapI] &&
+                    askList[b].task == _tI[1] &&
+                    askList[b].userid == _uname[i].userid
+                  ) {
+                    const element = askList[b];
+                    let a1 = JSON.parse(element.content)[0];
+                    let b1 = a1.anwer.split(",");
+                    let c1 = [];
+                    for (var j1 = 0; j1 < b1.length; j1++) {
+                      c1.push(parseInt(b1[j1]));
+                    }
+                    a1.askJson.radio = c1;
+                    a1.askJson.time = element.time;
+                    _workjson.askList.push(a1.askJson);
+                  }
+                }
+                for (let c = 0; c < questList.length; c++) {
+                  if (
+                    questList[c].stage == _chap[chapI] &&
+                    questList[c].task == _tI[1] &&
+                    questList[c].userid == _uname[i].userid
+                  ) {
+                    const element = questList[c];
+                    _workjson.questList.push(JSON.parse(element.content)[0]);
+                  }
+                }
+                for (let d = 0; d < wordList.length; d++) {
+                  if (
+                    wordList[d].stage == _chap[chapI] &&
+                    wordList[d].task == _tI[1] &&
+                    wordList[d].userid == _uname[i].userid
+                  ) {
+                    const element = wordList[d];
+                    _workjson.wordList.push(element.content);
+                  }
+                }
+                workArray.push(_workjson);
+              }
+            }
+          }
+        }
+      }
+      var _course = `<h1>${this.course.title}</h1>`;
+      let html = "";
+      for (let i = 0; i < workArray.length; i++) {
+        let _html = this.setHtml(workArray[i]);
+        html += _html;
+      }
+
+      this.generate(_course + html);
+      console.log(workArray);
+    },
+    setHtml(workJson) {
+      var _title =
+        "<div style='display:flex;align-items:center'>" +
+        "<h2>" +
+        workJson.chapName +
+        "</h2>-" +
+        "<h3>" +
+        workJson.username +
+        "</h3>" +
+        "</div>";
+      var _subtitle = "<h3>" + workJson.taskName + "</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
+          }</div><img style="max-width:500px" src="${
+            workJson.img[i].src
+          }"/></div>`;
+        }
+      }
+
+      var _ask = "";
+      if (workJson.askList.length > 0) {
+        var _ask = "<h3>问卷调查</h3>";
+        for (var i = 0; i < workJson.askList.length; i++) {
+          var _div = document.createElement("div");
+          _div.innerHTML = `<h4>问卷标题:${workJson.askList[i].askTitle}</h4>`;
+          for (var j = 0; j < workJson.askList[i].askJson.length; j++) {
+            var _div2 = document.createElement("div");
+            _div2.innerHTML = `<h5>第${j + 1}题:${
+              workJson.askList[i].askJson[j].askstitle
+            }  选择:${workJson.askList[i].radio[j] + 1}</h5> `;
+            var _div3 = document.createElement("div");
+            for (
+              var z = 0;
+              z < workJson.askList[i].askJson[j].checkList.length;
+              z++
+            ) {
+              _div3.innerHTML += `<span style="margin-right:5px">${z + 1}.${
+                workJson.askList[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.questList.length > 0) {
+        var _answer = "<h3>问答</h3>";
+        for (var i = 0; i < workJson.questList.length; i++) {
+          var _div = document.createElement("div");
+          _div.innerHTML = `<h4>问答:${workJson.questList[i].answerTitle}</h4>`;
+          _div.innerHTML += `<div>${workJson.questList[i].answer}</div>`;
+          _answer += `<div>${_div.innerHTML}</div>`;
+        }
+      }
+
+      var _link = "";
+      if (workJson.wordList.length > 0) {
+        for (var i = 0; i < workJson.wordList.length; i++) {
+          _link += `<div style="margin-top:10px"><a href='${workJson.wordList[i]}'>${workJson.wordList[i]}</a></div>`;
+        }
+      }
+
+      if (
+        !workJson.img.length &&
+        !workJson.askList.length &&
+        !workJson.questList.length &&
+        !workJson.wordList.length
+      ) {
+        return "";
+      }
+      return _title + _subtitle + _img + _ask + _answer + _link;
+    },
+    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");
+      link.download = "报告.html"; // 文件名
+      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);
+    },
+    changeChap() {
+      let _dyList = this.dyList;
+      this.dyAarray = [];
+      this.task = [];
+      for (var i = 0; i < _dyList.length; i++) {
+        if (this.chap.indexOf(_dyList[i].id) != -1) {
+          this.dyAarray.push(_dyList[i]);
+        }
+      }
+    },
+  },
+  watch: {
+    cid(newValue, oldValue) {
+      this.getCourseDetail();
+    },
+  },
+  mounted() {
+    this.getCourseDetail();
+  },
 };
 </script>
 
@@ -61,10 +460,21 @@ export default {
   margin-bottom: 20px;
 }
 .r_cbox span {
-    margin-right: 20px;
+  margin-right: 20px;
 }
 
-.r_box .r_select{
-    width: 300px;
+.r_box .r_select {
+  width: 400px;
+}
+
+.btn_box {
+  margin: 40px 0 0 0;
+  width: 100%;
+  display: flex;
+  justify-content: center;
+}
+.btn_box .btn {
+  width: 60%;
+  background: rgb(14, 114, 230);
 }
 </style>

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

@@ -264,7 +264,14 @@
                     v-for="(item, index) in worksDetail.eList"
                     :key="index"
                   >
-                    <span>{{ item.value }}</span>
+                    <el-tooltip
+                      class="item"
+                      effect="dark"
+                      :content="item.value"
+                      placement="top-start"
+                    >
+                      <span>{{ item.value }}</span>
+                    </el-tooltip>
                     <el-rate
                       style="min-width: 120px"
                       v-model="worksDetail.rateList[item.value]"
@@ -1093,7 +1100,7 @@ export default {
                 var _div2 = document.createElement("div");
                 _div2.innerHTML = `<h5>第${j + 1}题:${
                   workJson.askInfo[i].askJson[j].askstitle
-                }  选择:${workJson.askInfo[i].radio[j]+1}</h5> `;
+                }  选择:${workJson.askInfo[i].radio[j] + 1}</h5> `;
                 var _div3 = document.createElement("div");
                 for (
                   var z = 0;
@@ -1124,12 +1131,13 @@ export default {
 
           var _link = "";
           if (linkInfo.length > 0) {
-           for (var i = 0; i < linkInfo.length; i++) {
+            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;
+          var _html =
+            _course + _title + _subtitle + _img + _ask + _answer + _link;
           this.generate(_html);
         })
         .catch((err) => {
@@ -1482,6 +1490,9 @@ export default {
   text-align-last: justify;
   display: block;
   margin-right: 20px;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
 }
 .moreSay {
   margin: 0px 0 5px 20px;

+ 256 - 67
src/components/pages/liveRoom.vue

@@ -23,17 +23,27 @@
         <div class="logoLive">
           <img src="../../assets/icon/logo.png" alt />
         </div>
-        <div style="color: #fff; line-height: 45px; padding-left: 15px">湖心亭看雪可可乐博模拟展示课件</div>
+        <div style="color: #fff; line-height: 45px; padding-left: 15px">
+          湖心亭看雪可可乐博模拟展示课件
+        </div>
       </div>
     </div>
     <div class="isNoOther">
-      <div class="imgMiddle" :class="isBlock > 0 ? 'imghalf' : 'imgMiddle'" v-show="!full">
+      <div
+        class="imgMiddle"
+        :class="isBlock > 0 ? 'imghalf' : 'imgMiddle'"
+        v-show="!full"
+      >
         <!-- <img src="../../assets/icon/kc1.png" alt /> -->
         <!-- <iframe
           style="width: 100%; height: 100%; border: none"
           src="https://view.officeapps.live.com/op/view.aspx?src=https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/0701%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%B61656644341323.pptx"
         ></iframe>-->
-        <pdf :pdfUrl="pdfUrl" style="width: 100%; height: 100%" :getPage="getPage"></pdf>
+        <pdf
+          :pdfUrl="pdfUrl"
+          style="width: 100%; height: 100%"
+          :getPage="getPage"
+        ></pdf>
       </div>
       <div
         style="
@@ -46,8 +56,14 @@
         "
         v-if="isBlock == 1 || isBlock == 6"
       >
-        <div style="background: #fff; height: 92%; width: 96%; margin: 10px auto">
-          <div style="color: #bfbfbf; padding: 15px 0 20px 25px; font-size: 20px">答题查看</div>
+        <div
+          style="background: #fff; height: 92%; width: 96%; margin: 10px auto"
+        >
+          <div
+            style="color: #bfbfbf; padding: 15px 0 20px 25px; font-size: 20px"
+          >
+            答题查看
+          </div>
           <!-- <div class="answerBox" v-if="isBlock == 1">
             <div class="answerTimuBox" v-for="item in 1" :key="item">
               <div class="choose_style">
@@ -64,7 +80,9 @@
                 :class="{ pAnswer: item.is == 2 }"
                 v-for="(item, index) in studentArray"
                 :key="index"
-              >{{ item.name }}</div>
+              >
+                {{ item.name }}
+              </div>
             </div>
             <div class="memberBox" v-if="isBlock == 6">
               <div
@@ -72,11 +90,21 @@
                 v-for="(item, index) in studentArray2"
                 :key="index"
                 @click="whoAnswer(item, index)"
-              >{{ item.name }}</div>
+              >
+                {{ item.name }}
+              </div>
+            </div>
+            <div style="color: #948bdc; padding-top: 15px" v-if="isBlock == 1">
+              共有四个选项,正在答题......
+            </div>
+            <div class="viewSta" @click="isBlock = 3" v-if="isBlock == 1">
+              查看数据统计
             </div>
-            <div style="color: #948bdc; padding-top: 15px" v-if="isBlock == 1">共有四个选项,正在答题......</div>
-            <div class="viewSta" @click="isBlock = 3" v-if="isBlock == 1">查看数据统计</div>
-            <span slot="footer" class="dialog-footer sztFooter" v-if="isBlock == 6">
+            <span
+              slot="footer"
+              class="dialog-footer sztFooter"
+              v-if="isBlock == 6"
+            >
               <el-button type="primary" @click="isBlock = 0">结束</el-button>
               <!-- <el-button type="primary" @click="isBlock = 2">返回</el-button> -->
             </span>
@@ -123,7 +151,11 @@
           </span>
         </div>
       </div>
-      <div class="answerBox tools_box" v-if="isBlock == 2" style="padding: 10px 0 0 25px">
+      <div
+        class="answerBox tools_box"
+        v-if="isBlock == 2"
+        style="padding: 10px 0 0 25px"
+      >
         <div style="color: #d1d1d1; font-size: 24px">课堂实践</div>
         <div
           style="
@@ -133,7 +165,9 @@
             text-align: center;
             padding-bottom: 3px;
           "
-        >选择工具</div>
+        >
+          选择工具
+        </div>
         <div
           style="
             display: flex;
@@ -247,7 +281,8 @@
             style="width: 100%; height: 100%; border: none"
             src="https://pbl.cocorobo.cn/pbl-teacher-table/dist/#/Grid"
             ></iframe>-->
-            <div class="toolImg">
+            <div class="toolImg" @click="timeDialogVisible = true">
+              <img src="../../assets/icon/thirdToolList/time.png" alt />
               <div>倒计时</div>
             </div>
           </div>
@@ -280,7 +315,11 @@
           </div>
         </div>
       </div>
-      <div class="answerBox tools_box" :class="{ fullStyle: full }" v-if="isBlock == 5">
+      <div
+        class="answerBox tools_box"
+        :class="{ fullStyle: full }"
+        v-if="isBlock == 5"
+      >
         <!-- <div
           style="
             border-bottom: 3px solid rgb(44, 131, 238);
@@ -297,18 +336,37 @@
             <div class="tools_title">
               <span>电子白板</span>
               <div>
-                <img src="../../assets/full.png" class="full" @click="fullTools" />
-                <img src="../../assets/close1.png" class="closeImg" @click="closeTools" />
+                <img
+                  src="../../assets/full.png"
+                  class="full"
+                  @click="fullTools"
+                />
+                <img
+                  src="../../assets/close1.png"
+                  class="closeImg"
+                  @click="closeTools"
+                />
               </div>
             </div>
-            <iframe style="width: 100%; height: 100%; border: none" src="https://iwb.cocorobo.cn/"></iframe>
+            <iframe
+              style="width: 100%; height: 100%; border: none"
+              src="https://iwb.cocorobo.cn/"
+            ></iframe>
           </div>
           <div v-if="toolsList[0].tools[howTools] == 2" class="tools_child_box">
             <div class="tools_title">
               <span>便签</span>
               <div>
-                <img src="../../assets/full.png" class="full" @click="fullTools" />
-                <img src="../../assets/close1.png" class="closeImg" @click="closeTools" />
+                <img
+                  src="../../assets/full.png"
+                  class="full"
+                  @click="fullTools"
+                />
+                <img
+                  src="../../assets/close1.png"
+                  class="closeImg"
+                  @click="closeTools"
+                />
               </div>
             </div>
             <iframe
@@ -320,8 +378,16 @@
             <div class="tools_title">
               <span>思维导图</span>
               <div>
-                <img src="../../assets/full.png" class="full" @click="fullTools" />
-                <img src="../../assets/close1.png" class="closeImg" @click="closeTools" />
+                <img
+                  src="../../assets/full.png"
+                  class="full"
+                  @click="fullTools"
+                />
+                <img
+                  src="../../assets/close1.png"
+                  class="closeImg"
+                  @click="closeTools"
+                />
               </div>
             </div>
             <iframe
@@ -333,8 +399,16 @@
             <div class="tools_title">
               <span>问卷调查</span>
               <div>
-                <img src="../../assets/full.png" class="full" @click="fullTools" />
-                <img src="../../assets/close1.png" class="closeImg" @click="closeTools" />
+                <img
+                  src="../../assets/full.png"
+                  class="full"
+                  @click="fullTools"
+                />
+                <img
+                  src="../../assets/close1.png"
+                  class="closeImg"
+                  @click="closeTools"
+                />
               </div>
             </div>
             <iframe
@@ -346,8 +420,16 @@
             <div class="tools_title">
               <span>协同文档</span>
               <div>
-                <img src="../../assets/full.png" class="full" @click="fullTools" />
-                <img src="../../assets/close1.png" class="closeImg" @click="closeTools" />
+                <img
+                  src="../../assets/full.png"
+                  class="full"
+                  @click="fullTools"
+                />
+                <img
+                  src="../../assets/close1.png"
+                  class="closeImg"
+                  @click="closeTools"
+                />
               </div>
             </div>
             <iframe
@@ -359,8 +441,16 @@
             <div class="tools_title">
               <span>思维网格</span>
               <div>
-                <img src="../../assets/full.png" class="full" @click="fullTools" />
-                <img src="../../assets/close1.png" class="closeImg" @click="closeTools" />
+                <img
+                  src="../../assets/full.png"
+                  class="full"
+                  @click="fullTools"
+                />
+                <img
+                  src="../../assets/close1.png"
+                  class="closeImg"
+                  @click="closeTools"
+                />
               </div>
             </div>
             <iframe
@@ -372,8 +462,16 @@
             <div class="tools_title">
               <span>素材库</span>
               <div>
-                <img src="../../assets/full.png" class="full" @click="fullTools" />
-                <img src="../../assets/close1.png" class="closeImg" @click="closeTools" />
+                <img
+                  src="../../assets/full.png"
+                  class="full"
+                  @click="fullTools"
+                />
+                <img
+                  src="../../assets/close1.png"
+                  class="closeImg"
+                  @click="closeTools"
+                />
               </div>
             </div>
             <iframe
@@ -385,48 +483,100 @@
             <div class="tools_title">
               <span>选择题</span>
               <div>
-                <img src="../../assets/full.png" class="full" @click="fullTools" />
-                <img src="../../assets/close1.png" class="closeImg" @click="closeTools" />
+                <img
+                  src="../../assets/full.png"
+                  class="full"
+                  @click="fullTools"
+                />
+                <img
+                  src="../../assets/close1.png"
+                  class="closeImg"
+                  @click="closeTools"
+                />
               </div>
             </div>
             <div>选择题</div>
           </div>
-          <div v-if="toolsList[0].tools[howTools] == 10" class="tools_child_box">
+          <div
+            v-if="toolsList[0].tools[howTools] == 10"
+            class="tools_child_box"
+          >
             <div class="tools_title">
               <span>倒计时</span>
               <div>
-                <img src="../../assets/full.png" class="full" @click="fullTools" />
-                <img src="../../assets/close1.png" class="closeImg" @click="closeTools" />
+                <img
+                  src="../../assets/full.png"
+                  class="full"
+                  @click="fullTools"
+                />
+                <img
+                  src="../../assets/close1.png"
+                  class="closeImg"
+                  @click="closeTools"
+                />
               </div>
             </div>
             <div>倒计时</div>
           </div>
-          <div v-if="toolsList[0].tools[howTools] == 11" class="tools_child_box">
+          <div
+            v-if="toolsList[0].tools[howTools] == 11"
+            class="tools_child_box"
+          >
             <div class="tools_title">
               <span>问答题</span>
               <div>
-                <img src="../../assets/full.png" class="full" @click="fullTools" />
-                <img src="../../assets/close1.png" class="closeImg" @click="closeTools" />
+                <img
+                  src="../../assets/full.png"
+                  class="full"
+                  @click="fullTools"
+                />
+                <img
+                  src="../../assets/close1.png"
+                  class="closeImg"
+                  @click="closeTools"
+                />
               </div>
             </div>
             <div>问答题</div>
           </div>
-          <div v-if="toolsList[0].tools[howTools] == 13" class="tools_child_box">
+          <div
+            v-if="toolsList[0].tools[howTools] == 13"
+            class="tools_child_box"
+          >
             <div class="tools_title">
               <span>分小组</span>
               <div>
-                <img src="../../assets/full.png" class="full" @click="fullTools" />
-                <img src="../../assets/close1.png" class="closeImg" @click="closeTools" />
+                <img
+                  src="../../assets/full.png"
+                  class="full"
+                  @click="fullTools"
+                />
+                <img
+                  src="../../assets/close1.png"
+                  class="closeImg"
+                  @click="closeTools"
+                />
               </div>
             </div>
             <div>分小组</div>
           </div>
-          <div v-if="toolsList[0].tools[howTools] == 14" class="tools_child_box">
+          <div
+            v-if="toolsList[0].tools[howTools] == 14"
+            class="tools_child_box"
+          >
             <div class="tools_title">
               <span>作业评价</span>
               <div>
-                <img src="../../assets/full.png" class="full" @click="fullTools" />
-                <img src="../../assets/close1.png" class="closeImg" @click="closeTools" />
+                <img
+                  src="../../assets/full.png"
+                  class="full"
+                  @click="fullTools"
+                />
+                <img
+                  src="../../assets/close1.png"
+                  class="closeImg"
+                  @click="closeTools"
+                />
               </div>
             </div>
             <div>作业评价</div>
@@ -487,7 +637,9 @@
             height: 25px;
             line-height: 25px;
           "
-        >查看作业</div>
+        >
+          查看作业
+        </div>
         <div class="workBox">
           <div class="works" v-for="(w, wIndex) in worksList" :key="wIndex">
             <div class="workImg">
@@ -525,7 +677,9 @@
           margin: 10px 15px;
         "
       >
-        <div style="color: #bfbfbf; padding: 15px 0 15px 0; font-size: 20px">课堂评价</div>
+        <div style="color: #bfbfbf; padding: 15px 0 15px 0; font-size: 20px">
+          课堂评价
+        </div>
         <div>
           <div class="score_box">
             <span>自我评价</span>
@@ -565,7 +719,9 @@
 
     <div class="blackBottomB">
       <div style="display: flex">
-        <div class="blackButton" @click="showMember(0)" v-if="steps == 3">开始答题</div>
+        <div class="blackButton" @click="showMember(0)" v-if="steps == 3">
+          开始答题
+        </div>
         <div
           class="blackButton"
           @click="isBlock = 2"
@@ -575,12 +731,15 @@
             steps != 8 &&
             steps != 11 &&
             steps != 12 &&
-            toolsList[0].tools[howTools] != 10 &&
             toolsList[0].tools[howTools] != 11 &&
             toolsList[0].tools[howTools] != 13
           "
-        >查看工具</div>
-        <div class="blackButton" @click="checkStudentAnswer" v-if="steps == 8">选择学生回答</div>
+        >
+          查看工具
+        </div>
+        <div class="blackButton" @click="checkStudentAnswer" v-if="steps == 8">
+          选择学生回答
+        </div>
         <div
           class="blackButton"
           @click="selectSWork"
@@ -596,7 +755,9 @@
               toolsList[0].tools[howTools] != 11 &&
               toolsList[0].tools[howTools] != 13)
           "
-        >查看作业</div>
+        >
+          查看作业
+        </div>
       </div>
       <!-- <div
         class="blackButton"
@@ -614,9 +775,9 @@
       :before-close="handleClose"
       class="dialog_diy"
     >
-      <div
-        style="text-align: center; padding: 20px 0 50px 0; font-size: 18px"
-      >是否让“{{ answerStudent }}”同学进行单独答题?</div>
+      <div style="text-align: center; padding: 20px 0 50px 0; font-size: 18px">
+        是否让“{{ answerStudent }}”同学进行单独答题?
+      </div>
       <div
         style="
           width: 200px;
@@ -630,7 +791,9 @@
           cursor: pointer;
         "
         @click="dialogVisible = false"
-      >确定</div>
+      >
+        确定
+      </div>
     </el-dialog>
     <el-dialog
       :visible.sync="dialogVisible1"
@@ -639,7 +802,9 @@
       :before-close="handleClose"
       class="dialog_diy"
     >
-      <div style="text-align: center; padding: 20px 0 50px 0; font-size: 18px">正在开发中!</div>
+      <div style="text-align: center; padding: 20px 0 50px 0; font-size: 18px">
+        正在开发中!
+      </div>
       <div
         style="
           width: 200px;
@@ -653,7 +818,9 @@
           cursor: pointer;
         "
         @click="dialogVisible1 = false"
-      >确定</div>
+      >
+        确定
+      </div>
     </el-dialog>
     <el-dialog
       :visible.sync="dialogVisible2"
@@ -662,7 +829,9 @@
       :before-close="handleClose"
       class="dialog_diy"
     >
-      <div style="text-align: center; padding: 20px 0 50px 0; font-size: 18px">课程结束后才有报告!</div>
+      <div style="text-align: center; padding: 20px 0 50px 0; font-size: 18px">
+        课程结束后才有报告!
+      </div>
       <div
         style="
           width: 200px;
@@ -676,7 +845,24 @@
           cursor: pointer;
         "
         @click="dialogVisible2 = false"
-      >确定</div>
+      >
+        确定
+      </div>
+    </el-dialog>
+    <el-dialog
+      title="倒计时"
+      :visible.sync="timeDialogVisible"
+      :append-to-body="true"
+      width="800px"
+      :before-close="handleClose"
+      class="dialog_diy"
+    >
+      <div>
+        <Time v-if="timeDialogVisible"></Time>
+      </div>
+      <div slot="footer">
+        <el-button @click="timeDialogVisible = false">关 闭</el-button>
+      </div>
     </el-dialog>
     <ImgDraw :drawShow="drawShow" @closeDraw="closeDraw" :bg="bg"></ImgDraw>
     <img id="img1" ref="img1" hidden="hidden" />
@@ -689,8 +875,9 @@ import EditorBar from "../../components/tools/wangEnduit";
 import AnswerData from "./components/answerData";
 import pdf from "./components/pdf";
 import ImgDraw from "./components/imgDraw/imgDraw";
+import Time from "../tools/time.vue";
 export default {
-  components: { EditorBar, AnswerData, pdf, ImgDraw },
+  components: { EditorBar, AnswerData, pdf, ImgDraw, Time },
   data() {
     return {
       pdfUrl:
@@ -710,6 +897,7 @@ export default {
       // c: false,
       steps: 0,
       isBlock: 0,
+      timeDialogVisible: false,
       dialogVisible: false,
       dialogVisible1: false,
       dialogVisible2: false,
@@ -780,7 +968,7 @@ export default {
         { tools: [10] }, //倒计时
         { tools: [11] }, //问答题
         { tools: [11] }, //问答题
-        { tools: [1] }, //思维导图/电子白板
+        { tools: [3] }, //思维导图/电子白板
         { tools: [12] }, //选人回答
         { tools: [10, 13] }, //倒计时、分小组
         { tools: [3] }, //思维导图/电子白板/思维网格
@@ -828,13 +1016,14 @@ export default {
     },
     //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);
-      });
+      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) {

+ 39 - 12
src/components/pages/works.vue

@@ -40,7 +40,11 @@
               <el-option value="0" label="我的课程"></el-option>
               <el-option value="1" label="他人课程"></el-option>
             </el-select>
-            <el-input v-model="cn" placeholder="筛选项目名称" @input="search"></el-input>
+            <el-input
+              v-model="cn"
+              placeholder="筛选项目名称"
+              @input="search"
+            ></el-input>
           </div>
         </div>
       </div>
@@ -57,9 +61,24 @@
             :header-cell-style="{ background: '#f1f1f1', fontSize: '17px' }"
             :row-class-name="tableRowClassName"
           >
-            <el-table-column prop="title" label="项目" min-width="30" align="center"></el-table-column>
-            <el-table-column prop="uname" label="创建人" min-width="30" align="center"></el-table-column>
-            <el-table-column prop="time" label="时间" min-width="20" align="center"></el-table-column>
+            <el-table-column
+              prop="title"
+              label="项目"
+              min-width="30"
+              align="center"
+            ></el-table-column>
+            <el-table-column
+              prop="uname"
+              label="创建人"
+              min-width="30"
+              align="center"
+            ></el-table-column>
+            <el-table-column
+              prop="time"
+              label="时间"
+              min-width="20"
+              align="center"
+            ></el-table-column>
             <el-table-column label="操作" min-width="30">
               <template slot-scope="scope">
                 <!-- <el-button
@@ -77,7 +96,12 @@
                 "
                 >查看学生</el-button>-->
                 <!-- <el-button type="primary" size="small" @click="getWorkData(scope.row)">生成报告</el-button> -->
-                <el-button type="primary" size="small" @click="getWorkData(scope.row)">查看课程</el-button>
+                <el-button
+                  type="primary"
+                  size="small"
+                  @click="getWorkData(scope.row)"
+                  >查看课程</el-button
+                >
               </template>
             </el-table-column>
           </el-table>
@@ -120,7 +144,9 @@
       class="workdates"
     ></WorkDate>
     <div class="cancelbox" v-if="dialogVisible">
-      <!-- <el-button @click="dialogVisibleBao = true" type="primary" size="small">自定义导出</el-button> -->
+      <el-button @click="dialogVisibleBao = true" type="primary" size="small"
+        >自定义导出</el-button
+      >
       <el-button @click="cancel" type="primary" size="small">返回</el-button>
       <!-- <el-button
         type="primary"
@@ -144,16 +170,14 @@
       :append-to-body="true"
       width="550px"
       :before-close="handleClose"
-      class="dialog_diy"
+      class="dialog_diy r_diy"
     >
       <div>
         <div>
           <Report :cid="dataJson.courseId"></Report>
         </div>
       </div>
-      <span slot="footer" class="dialog-footer">
-        <el-button @click="dialogVisibleBao = false">关 闭</el-button>
-      </span>
+      <span slot="footer" class="dialog-footer"> </span>
     </el-dialog>
   </div>
 </template>
@@ -164,7 +188,7 @@ import Report from "./components/report";
 export default {
   components: {
     WorkDate,
-    Report
+    Report,
   },
   data() {
     return {
@@ -185,7 +209,7 @@ export default {
       userid: this.$route.query.userid,
       oid: this.$route.query.oid,
       dialogVisible: false,
-      dialogVisibleBao:false,
+      dialogVisibleBao: false,
       dataJson: {},
     };
   },
@@ -356,6 +380,9 @@ export default {
 .dialog_diy >>> .el-dialog__footer {
   background: #fafafa;
 }
+.r_diy >>> .el-dialog__footer {
+  padding: 0;
+}
 .a_addBox {
   height: 570px;
   overflow: auto;

+ 306 - 0
src/components/tools/time.vue

@@ -0,0 +1,306 @@
+<template>
+  <div class="container">
+    <div class="setters">
+      <div class="minutes-set">
+        <button
+          data-setter="minutes-plus"
+          @click="changeTime('minutes-plus')"
+          :disabled="isStarted"
+          :style="{ opacity: isStarted ? 0.5 : 1 }"
+        >
+          +
+        </button>
+        <button
+          data-setter="minutes-minus"
+          @click="changeTime('minutes-minus')"
+          :disabled="isStarted"
+          :style="{ opacity: isStarted ? 0.5 : 1 }"
+        >
+          -
+        </button>
+      </div>
+      <div class="seconds-set">
+        <button
+          data-setter="seconds-plus"
+          @click="changeTime('seconds-plus')"
+          :disabled="isStarted"
+          :style="{ opacity: isStarted ? 0.5 : 1 }"
+        >
+          +
+        </button>
+        <button
+          data-setter="seconds-minus"
+          @click="changeTime('seconds-minus')"
+          :disabled="isStarted"
+          :style="{ opacity: isStarted ? 0.5 : 1 }"
+        >
+          -
+        </button>
+      </div>
+    </div>
+    <div class="circle">
+      <svg width="300" viewBox="0 0 220 220" xmlns="http://www.w3.org/2000/svg">
+        <g transform="translate(110,110)">
+          <circle r="100" class="e-c-base" />
+          <g transform="rotate(-90)">
+            <circle
+              r="100"
+              class="e-c-progress"
+              :style="{ strokeDasharray: offset }"
+            />
+            <g id="e-pointer" :style="{ transform: pointerTransform }">
+              <circle cx="100" cy="0" r="8" class="e-c-pointer" />
+            </g>
+          </g>
+        </g>
+      </svg>
+    </div>
+    <div class="controlls">
+      <div class="display-remain-time">{{ displayString }}</div>
+      <button
+        :class="{ play: !play, pause: play }"
+        id="pause"
+        @click="pauseTimer"
+      ></button>
+    </div>
+    <el-button type="primary" @click="reset" class="reset_btn">重置</el-button>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      length: Math.PI * 2 * 100,
+      offset: 0,
+      pointerTransform: "",
+      play: false,
+      intervalTimer: null,
+      wholeTime: 0,
+      timeLeft: "",
+      isPaused: false,
+      isStarted: false,
+      displayString: "",
+    };
+  },
+  methods: {
+    changeWholeTime(seconds) {
+      if (this.wholeTime + seconds >= 0) {
+        this.wholeTime += seconds;
+        this.update(this.wholeTime, this.wholeTime);
+      }
+    },
+    changeTime(param) {
+      switch (param) {
+        case "minutes-plus":
+          this.changeWholeTime(1 * 60);
+          break;
+        case "minutes-minus":
+          this.changeWholeTime(-1 * 60);
+          break;
+        case "seconds-plus":
+          this.changeWholeTime(1);
+          break;
+        case "seconds-minus":
+          this.changeWholeTime(-1);
+          break;
+      }
+      this.displayTimeLeft(this.wholeTime);
+    },
+    update(value, timePercent, type) {
+      this.offset = -this.length - (this.length * value) / timePercent;
+      if (value === 0 && type === 1) {
+        this.pointerTransform = `rotate(${360}deg)`;
+      } else {
+        this.pointerTransform = `rotate(${(360 * value) / timePercent}deg)`;
+      }
+    },
+    displayTimeLeft(timeLeft, type) {
+      //displays time on the input
+      let minutes = Math.floor(timeLeft / 60);
+      let seconds = timeLeft % 60;
+      this.displayString = `${minutes < 10 ? "0" : ""}${minutes}:${
+        seconds < 10 ? "0" : ""
+      }${seconds}`;
+      // displayOutput.textContent = displayString;
+      this.update(timeLeft, this.wholeTime, type);
+    },
+    timer(seconds) {
+      //counts time, takes seconds
+      let remainTime = Date.now() + seconds * 1000;
+      this.displayTimeLeft(seconds);
+
+      let _this = this;
+      _this.intervalTimer = setInterval(function () {
+        _this.timeLeft = Math.round((remainTime - Date.now()) / 1000);
+        if (_this.timeLeft < 0) {
+          clearInterval(_this.intervalTimer);
+          _this.isStarted = false;
+          _this.play = false;
+          // setterBtns.forEach(function (btn) {
+          //   btn.disabled = false;
+          //   btn.style.opacity = 1;
+          // });
+          _this.displayTimeLeft(_this.wholeTime);
+          _this.$message.success("时间到!!!");
+          // pauseBtn.classList.remove("pause");
+          // pauseBtn.classList.add("play");
+          return;
+        }
+        _this.displayTimeLeft(_this.timeLeft);
+      }, 1000);
+    },
+    pauseTimer() {
+      if (!this.play && !this.isPaused) {
+        this.play = true;
+        this.isStarted = true;
+        this.timer(this.wholeTime);
+      } else if (this.isPaused) {
+        this.play = true;
+        this.timer(this.timeLeft);
+        this.isStarted = true;
+        this.isPaused = this.isPaused ? false : true;
+      } else {
+        this.play = false;
+        this.isStarted = true;
+        clearInterval(this.intervalTimer);
+        this.isPaused = this.isPaused ? false : true;
+      }
+      console.log(1);
+    },
+    reset() {
+      clearInterval(this.intervalTimer);
+      this.play = false;
+      this.isStarted = false;
+      this.isPaused = false;
+      this.wholeTime = 0;
+      this.timeLeft = null;
+      this.update(this.wholeTime, this.wholeTime, 1);
+      this.displayTimeLeft(this.wholeTime, 1);
+    },
+  },
+  created() {
+    this.offset = this.length;
+    this.update(this.wholeTime, this.wholeTime);
+    this.displayTimeLeft(this.wholeTime);
+  },
+  beforeDestroy() {
+    clearInterval(this.intervalTimer);
+  },
+};
+</script>
+
+<style scoped>
+button[data-setter] {
+  outline: none;
+  background: transparent;
+  border: none;
+  font-family: "Roboto";
+  font-weight: 300;
+  font-size: 36px;
+  width: 32px;
+  /* height: 30px; */
+  color: #409eff;
+  cursor: pointer;
+}
+button[data-setter]:hover {
+  opacity: 0.5;
+}
+.container {
+  position: relative;
+  /* top: 30px; */
+  width: 300px;
+  margin: 0 auto;
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+}
+.setters {
+  position: absolute;
+  /* left: 85px;
+  top: 75px; */
+  left: 78px;
+  top: 75px;
+}
+.minutes-set {
+  float: left;
+  /* margin-right: 28px; */
+  margin-right: 20px;
+}
+.seconds-set {
+  float: right;
+}
+.controlls {
+  position: absolute;
+  left: 75px;
+  top: 105px;
+  text-align: center;
+}
+.display-remain-time {
+  font-family: "Roboto";
+  font-weight: 100;
+  font-size: 65px;
+  color: #409eff;
+}
+#pause {
+  outline: none;
+  background: transparent;
+  border: none;
+  margin-top: 10px;
+  width: 50px;
+  height: 50px;
+  position: relative;
+}
+.play::before {
+  display: block;
+  content: "";
+  position: absolute;
+  top: 8px;
+  left: 16px;
+  border-top: 15px solid transparent;
+  border-bottom: 15px solid transparent;
+  border-left: 22px solid #77a4d3;
+}
+.pause::after {
+  content: "";
+  position: absolute;
+  top: 8px;
+  left: 12px;
+  width: 15px;
+  height: 30px;
+  background-color: transparent;
+  border-radius: 1px;
+  border: 5px solid #77a4d3;
+  border-top: none;
+  border-bottom: none;
+}
+#pause:hover {
+  opacity: 0.8;
+}
+.e-c-base {
+  fill: none;
+  stroke: #b6b6b6;
+  stroke-width: 4px;
+}
+.e-c-progress {
+  fill: none;
+  stroke: #6eaded;
+  stroke-width: 4px;
+  transition: stroke-dashoffset 0.7s;
+}
+.e-c-pointer {
+  fill: #fff;
+  stroke: #6eaded;
+  stroke-width: 2px;
+}
+#e-pointer {
+  transition: transform 0.7s;
+}
+
+.reset_btn {
+  width: 100px;
+  margin: 15px auto 0px;
+  background: #527aa3;
+  border: none;
+}
+</style>

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