Browse Source

Merge branch 'beta' of https://git.cocorobo.cn/CocoRoboLabs/pbl-student-table into beta

zengyicheng 1 year ago
parent
commit
e75f7d8624

+ 1 - 1
dist/index.html

@@ -18,7 +18,7 @@
       border-radius: 10px;
       -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, .3);
       background-color: rgba(0, 0, 0, 0.1);
-    }</style><link href=./static/css/app.5cd65174590a1881fa1323e18c391774.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.3ad1d5771e9b13dbdad2.js></script><script type=text/javascript src=./static/js/vendor.257b11831736f4184ff9.js></script><script type=text/javascript src=./static/js/app.7d961b3159cb66ea4592.js></script></body></html><script>function stopSafari() {
+    }</style><link href=./static/css/app.265f824edd56e0bd862bae01ae5f23c5.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.3ad1d5771e9b13dbdad2.js></script><script type=text/javascript src=./static/js/vendor.257b11831736f4184ff9.js></script><script type=text/javascript src=./static/js/app.2e4e8990ef2cd226b1c5.js></script></body></html><script>function stopSafari() {
     //阻止safari浏览器双击放大功能
     let lastTouchEnd = 0  //更新手指弹起的时间
     document.documentElement.addEventListener("touchstart", function (event) {

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


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


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


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


BIN
dist/static/img/interVideo.384a822.png


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


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


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


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


BIN
src/assets/icon/fourthToolList/Wood.png


BIN
src/assets/icon/fourthToolList/interVideo.png


+ 353 - 0
src/components/Choice/index.vue

@@ -0,0 +1,353 @@
+<template>
+    <div>
+        <el-dialog title="选择题" :visible.sync="dialogVisibleChoice" :append-to-body="true" width="1000px"
+            :before-close="handleClose" class="dialog_diy dialog_diy3">
+            <div v-if="dialogVisibleChoice">
+                <div class="a_addBox">
+                    <div style="font-size: 16px; color: #c7c7c7">题目内容</div>
+                    <div class="a_add_box" v-for="(item1, index1) in testJson.testCount" :key="index1">
+                        <div class="a_add_head">
+                            <div style="display: flex">
+                                {{ index1 + 1 + "、" }}
+                                <div v-if="testJson.testJson[index1].type == '1'" style="margin-right: 5px">
+                                    (单选题)
+                                </div>
+                                <div v-if="testJson.testJson[index1].type == '2'" style="margin-right: 5px">
+                                    (多选题)
+                                </div>
+                                <div>题目:{{ testJson.testJson[index1].teststitle }}</div>
+                            </div>
+                            <img v-if="testJson.testJson[index1].img" :src="testJson.testJson[index1].img"
+                                style="height: 300px; margin-top: 10px; max-width: 100%" />
+                        </div>
+                        <div class="timuImgBox" v-if="testJson.testJson[index1].timuList &&
+                            testJson.testJson[index1].timuList.length
+                            ">
+                            <div v-for="(timg, tIndex) in testJson.testJson[index1].timuList" :key="tIndex" class="timuImg"
+                                @click.stop="previewImg(timg.src)">
+                                <img :src="timg.src" alt="" />
+                            </div>
+                        </div>
+                        <div class="a_add_body">
+                            <div class="a_add_input">
+                                <el-radio-group v-model="radio[index1]" v-if="testJson.testJson[index1].type == '1'">
+                                    <div class="radioBox">
+                                        <el-radio v-for="(item2, checkIndex) in testJson.testJson[index1]
+                                            .checkList" :key="checkIndex" :label="checkIndex"
+                                            class="redioStyle">
+                                            <div style="margin-right: 10px"
+                                                v-if="item2 && item2.imgType && item2.imgType == 1">
+                                                <div class="inImg" @click.stop="previewImg(item2.src)">
+                                                    <img :src="item2.src" alt="" />
+                                                </div>
+                                            </div>
+                                            <span v-else v-html="item2"></span>
+                                        </el-radio>
+                                    </div>
+                                </el-radio-group>
+                                <el-checkbox-group v-model="radio[index1]" v-if="testJson.testJson[index1].type == '2'">
+                                    <div class="radioBox">
+                                        <el-checkbox v-for="(item2, checkIndex) in testJson.testJson[index1]
+                                            .checkList" :key="checkIndex" :label="checkIndex"
+                                            class="redioStyle">
+                                            <div style="margin-right: 10px"
+                                                v-if="item2 && item2.imgType && item2.imgType == 1">
+                                                <div class="inImg" @click.stop="previewImg(item2.src)">
+                                                    <img :src="item2.src" alt="" />
+                                                </div>
+                                            </div>
+                                            <span v-else v-html="item2"></span>
+                                        </el-checkbox>
+                                    </div>
+                                </el-checkbox-group>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <span slot="footer" class="dialog-footer">
+                <el-button @click="close">取 消</el-button>
+                <el-button type="primary" @click="addStudentTest">确 定</el-button>
+            </span>
+        </el-dialog>
+    </div>
+</template>
+
+<script>
+export default {
+    props: {
+        dialogVisibleChoice: {
+            type: Boolean,
+            default: false
+        },
+        json: {
+            type: Object
+        },
+        userid: {
+            type: String,
+        },
+        id: {
+            type: String,
+        },
+        courseType: {
+            type: String,
+        },
+        taskCount: {
+            type: Number,
+        },
+        toolindex: {
+            type: Number,
+        },
+        videoTime: {
+            type: Number,
+        }
+    },
+    data() {
+        return {
+            testJson: {},
+            radio: []
+
+        }
+    },
+    watch: {
+        dialogVisibleChoice(newValue, oldValue) {
+            this.radio = []
+            this.testJson = JSON.parse(JSON.stringify(this.json));
+            for (var k = 0; k < this.testJson.testJson.length; k++) {
+                if (this.testJson.testJson[k].type == "2") {
+                    this.radio.push([]);
+                } else {
+                    this.radio.push("");
+                }
+            }
+        }
+    },
+    methods: {
+        handleClose(done) {
+            this.close();
+            done()
+        },
+        close() {
+            this.$emit("update:dialogVisibleChoice", false)
+            this.$emit("play")
+        },
+        previewImg(url) {
+            this.$hevueImgPreview(url);
+        },
+        addStudentTest() {
+            if (!this.radio.length) {
+                this.$message.error("请选择选项");
+                return;
+            }
+            for (var i = 0; i < this.testJson.testCount; i++) {
+                if (
+                    (this.radio[i] instanceof Array && !this.radio[i].length) ||
+                    (this.radio[i] !== 0 && !this.radio[i])
+                ) {
+                    this.$message.error("请选择选项");
+                    return;
+                }
+            }
+            this.close();
+            // let askList = []
+            // askList.push({ testJson: this.testJson, anwer: this.radio,type:8,tool:45 });
+            // let params = [
+            //     {
+            //         uid: this.userid,
+            //         cid: this.id,
+            //         stage: this.courseType,
+            //         task: this.taskCount,
+            //         tool: this.toolindex,
+            //         content: JSON.stringify(askList).replaceAll(/%/g, "%25"),
+            //         type: 14,
+            //         atool: 62,
+            //         vtime: this.videoTime,
+            //     },
+            // ];
+            // this.ajax
+            //     .post(this.$store.state.api + "addCourseWorks2Inter", params)
+            //     .then((res) => {
+            //         this.$message({
+            //             message: "提交成功",
+            //             type: "success",
+            //         });
+            //         this.close();
+
+            //     })
+            //     .catch((err) => {
+            //         this.$message.error("提交失败");
+            //         console.error(err);
+            //     });
+        }
+    },
+    mounted() {
+        this.radio = []
+        this.testJson = JSON.parse(JSON.stringify(this.json));
+        for (var k = 0; k < this.testJson.testJson.length; k++) {
+            if (this.testJson.testJson[k].type == "2") {
+                this.radio.push([]);
+            } else {
+                this.radio.push("");
+            }
+        }
+    },
+}
+</script>
+
+<style scoped>
+@media screen and (max-width: 1280px) {
+    .dialog_diy3>>>.el-dialog {
+        width: 100% !important;
+    }
+}
+
+.dialog_diy>>>.el-dialog {
+    margin-top: 10vh !important;
+}
+
+.dialog_diy>>>.el-dialog__header {
+    background: #454545 !important;
+    padding: 15px 20px;
+}
+
+.dialog_diy>>>.el-dialog__title,
+.dialog_diy1>>>.el-dialog__title {
+    color: #fff;
+}
+
+.dialog_diy>>>.el-dialog__headerbtn {
+    top: 19px;
+}
+
+.dialog_diy>>>.el-dialog__headerbtn .el-dialog__close {
+    color: #fff;
+}
+
+.dialog_diy>>>.el-dialog__headerbtn .el-dialog__close:hover {
+    color: #fff;
+}
+
+.dialog_diy1>>>.el-dialog__body {
+    padding: 0;
+}
+
+.dialog_diy>>>.el-dialog__body,
+.dialog_diy>>>.el-dialog__footer {
+    background: #fafafa;
+}
+
+.a_addBox {
+    margin: 10px 0;
+    background: #fff;
+    padding: 15px;
+    max-height: 400px;
+    overflow: auto;
+}
+
+.a_add_box {
+    border-bottom: 2px solid #eee;
+    padding-bottom: 10px;
+}
+
+.a_add_head {
+    display: flex;
+    align-items: flex-start;
+    /* justify-content: space-between; */
+    flex-direction: column;
+    /* flex-direction: row; */
+    margin: 10px 0 20px 0;
+    font-size: 18px;
+    width: 100%;
+}
+
+.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;
+}
+
+.a_add_input>>>el-radio-group {
+    margin: 10px 0;
+}
+
+.a_add_input>>>.el-radio,
+.a_add_input>>>.el-checkbox {
+    margin-bottom: 10px;
+    display: flex;
+    flex-direction: row;
+    flex-wrap: nowrap;
+    align-items: center;
+}
+
+.redioStyle>>>.el-radio__label {
+    font-size: 18px;
+}
+
+.redioStyle>>>.el-checkbox__label {
+    font-size: 18px;
+}
+
+.radioBox {
+    display: flex;
+    flex-direction: row;
+    flex-wrap: nowrap;
+    align-items: center;
+}
+
+.radioBox>div {
+    margin: 10px 0 0 10px;
+}
+
+
+.radioBox>>>.el-radio__label,
+.radioBox>>>.el-checkbox__label {
+    display: flex;
+    align-items: center;
+}
+
+.inImg {
+    width: 100px;
+    cursor: pointer;
+}
+
+.inImg>img {
+    width: 100%;
+    height: 100%;
+    object-fit: cover;
+}
+
+.timuImgBox {
+    margin: 10px 0;
+    display: flex;
+    flex-direction: column;
+    flex-wrap: wrap;
+    align-items: flex-start;
+}
+
+.timuImg {
+    width: 100px;
+    margin: 5px 0;
+    cursor: pointer;
+}
+
+.timuImg>img {
+    width: 100%;
+    height: 100%;
+    object-fit: cover;
+}
+</style>

+ 9 - 1
src/components/courseDetail.vue

@@ -74,7 +74,7 @@
               <div class="cType" style="font-size: 18px; color: #6c6c6c" v-if="classList.length && tType != 2">
                 <div>
                   授课班级:<el-button @click="gotoCourse('')"
-                    style="background: #4a9eed; color: #fff; margin: 0 5px">全部</el-button><el-button
+                    style="background: #4a9eed; color: #fff; margin: 0 5px" v-if="classList.length != 1">全部</el-button><el-button
                     @click="gotoCourse(item.id)" v-for="(item, index) in classList" :key="index"
                     style="background: #4a9eed; color: #fff; margin: 0 5px">{{ item.name }}</el-button>
                 </div>
@@ -327,6 +327,14 @@
                                 <img src="../assets/icon/fourthToolList/allHistory.png" alt />
                                 <div>深度学习</div>
                               </div>
+                              <div v-if="item3.tool == 62">
+                                <img src="../assets/icon/fourthToolList/interVideo.png" alt />
+                                <div>交互视频</div>
+                              </div>
+                              <div v-if="item3.tool == 63">
+                                <img src="../assets/icon/fourthToolList/Wood.png" alt />
+                                <div>海龟编程</div>
+                              </div>
                               <div v-if="item3.tool == undefined">
                                 <img src="../assets/icon/empytool.png" alt style="width: 64px; height: 75px" />
                               </div>

+ 57 - 14
src/components/group/group.vue

@@ -14,7 +14,8 @@
                         <div @click="setClassid(item.id)" :class="{ active: classid == item.id }"
                             v-for="(item, index) in classList" :key="index">{{ item.name }}</div>
                     </div>
-                    <div class="btn_right" v-if="courseDetail.userid == userid || courseDetail.course_teacher.indexOf(userid) != -1">
+                    <div class="btn_right"
+                        v-if="courseDetail.userid == userid || courseDetail.course_teacher.indexOf(userid) != -1">
                         <div style="color: rgb(171 171 171); margin: 0 10px 0 0">
                             提示:开启【开放选座】,学生能够自由加入和退出小组。
                         </div>
@@ -34,6 +35,9 @@
                         <div type="primary" @click="updateGroup" class="returnBtn" style="background-color: #225bc7">
                             分组设置
                         </div>
+                        <div type="primary" @click="deleteCourseGroup" class="returnBtn" style="background-color: #225bc7">
+                            删除分组
+                        </div>
                     </div>
                 </div>
                 <div>
@@ -152,7 +156,8 @@
                                                 groupStudent[g.id][
                                                     groupStudentUid[g.id].indexOf(userid)
                                                 ].id)
-                                        " v-else-if="groupStudentUid && groupStudentUid[g.id].indexOf(userid) != -1">
+                                            "
+                                            v-else-if="groupStudentUid && groupStudentUid[g.id].indexOf(userid) != -1">
                                             退出分组
                                         </div>
                                         <div style="margin-top:10px"
@@ -366,7 +371,8 @@
                     </el-checkbox>
                 </el-checkbox-group> -->
                 <div class="i_box_login2" v-if="classJuri.length">
-                    <div :class="{active:checkboxList3.indexOf(item.userid)!= -1}" v-for="item in classJuri" :key="item.userid" :label="item.userid" @click="addGroupUser(item.userid)">
+                    <div :class="{ active: checkboxList3.indexOf(item.userid) != -1 }" v-for="item in classJuri"
+                        :key="item.userid" :label="item.userid" @click="addGroupUser(item.userid)">
                         <el-tooltip placement="top" :content="item.name ? item.name : '暂无姓名'">
                             <span>{{ item.name ? item.name : "暂无姓名" }}</span>
                         </el-tooltip>
@@ -401,7 +407,7 @@ export default {
                 number: undefined,
                 islock: 1,
             },
-            islock:false,
+            islock: false,
             timer: null,
             groupStudent: {},
             groupStudentUid: {},
@@ -494,6 +500,39 @@ export default {
             }
             this.dialogVisibleGroup2 = true;
         },
+        deleteCourseGroup() {
+            this.$confirm(
+                "确定删除该分组么?删除后分组将会被清空!",
+                "提示",
+                {
+                    confirmButtonText: "确定",
+                    cancelButtonText: "取消",
+                    type: "warning",
+                }
+            )
+                .then(() => {
+                    let params = [{
+                        gid: this.groupid,
+                    }];
+                    this.ajax
+                        .post(this.$store.state.api + "deleteCourseGroup", params)
+                        .then((res) => {
+                            this.groupJson = {
+                                group: [],
+                                number: undefined,
+                                islock: 1,
+                            }
+                            this.islock = false
+                            this.$message.success("操作成功");
+                            this.getCourseGroup();
+                            this.$forceUpdate()
+                        })
+                        .catch((err) => {
+                            console.error(err);
+                        });
+                })
+                .catch(() => { });
+        },
         addGroup() {
             this.groupJson2.group.push({
                 name: "第" + (this.groupJson2.group.length + 1) + "组",
@@ -714,11 +753,11 @@ export default {
                     console.error(err);
                 });
         },
-        addGroupUser(uid){
-            if(this.checkboxList3.indexOf(uid) == -1){
+        addGroupUser(uid) {
+            if (this.checkboxList3.indexOf(uid) == -1) {
                 this.checkboxList3.push(uid)
-            }else{
-                this.checkboxList3.splice(this.checkboxList3.indexOf(uid),1)
+            } else {
+                this.checkboxList3.splice(this.checkboxList3.indexOf(uid), 1)
             }
         },
         async joinGroup2() {
@@ -1029,7 +1068,7 @@ export default {
 
 .btn_right {
     display: flex;
-    align-items: flex-end;
+    align-items: center;
 }
 
 .updateChair {
@@ -1190,18 +1229,21 @@ export default {
     padding: 0 5px;
     overflow: hidden;
     background: rgb(225, 237, 255);
-    margin: 10px calc((100% - (80px*5)) / 4 ) 0 0 ;
+    margin: 10px calc((100% - (80px*5)) / 4) 0 0;
     color: rgb(37 124 255);
     border-radius: 5px;
     box-sizing: border-box;
 }
+
 .i_box_login2>div:nth-child(5n) {
-    margin: 10px 0 0 0 ;
+    margin: 10px 0 0 0;
 }
-.i_box_login2 > .active{
+
+.i_box_login2>.active {
     background: rgb(92, 157, 255);
     color: #fff;
 }
+
 .i_box_login2>div>span {
     width: 100%;
     overflow: hidden;
@@ -1210,13 +1252,14 @@ export default {
     display: block;
 }
 
-.group_switch{
+.group_switch {
     margin-right: 10px;
     height: 30px;
     display: flex;
     align-items: center;
 }
-.group_switch>span{
+
+.group_switch>span {
     margin-right: 5px;
 }
 </style>

+ 32 - 3
src/components/index.vue

@@ -496,6 +496,21 @@ export default {
         this.selectAll2();
       }
     },
+    arrayToArray(arrayo, arrayt) {
+      let array1 = arrayo;
+      let array2 = arrayt;
+
+      let commonElements = [];
+
+      for (let i = 0; i < array1.length; i++) {
+        for (let j = 0; j < array2.length; j++) {
+          if (array1[i] === array2[j]) {
+            commonElements.push(array1[i]);
+          }
+        }
+      }
+      return commonElements;
+    },
     selectAll() {
       this.zoneListId = 0;
       this.isListAjax = true;
@@ -523,10 +538,24 @@ export default {
           this.zoneClass = res.data[0];
           // this.total = res.data[0].length ? res.data[0][0].num : 0;
           let CourseType2 = JSON.parse(JSON.stringify(this.CourseType[0]))
+          if(this.oid == "69893dca-1d47-11ed-8c78-005056b86db5"){
+            if(this.pTypeCheckName.length){
+              CourseType2 = this.CourseType3.filter(el => {
+                return el.name == this.pTypeCheckName
+              })
+            }else{
+              CourseType2 = JSON.parse(JSON.stringify(this.CourseType3))
+            }
+          }
           for (var i = 0; i < CourseType2.length; i++) {
             CourseType2[i].course = []
             for (var j = 0; j < res.data[0].length; j++) {
-              if (res.data[0][j].pid && res.data[0][j].pid.indexOf(CourseType2[i].id) != -1) {
+              // if (res.data[0][j].pid && res.data[0][j].pid.indexOf(CourseType2[i].id) != -1) {
+              //   CourseType2[i].course.push(res.data[0][j])
+              // }
+              let pid = CourseType2[i].id
+              if(typeof pid != "object") pid.split(",")
+              if(res.data[0][j].pid && this.arrayToArray(pid,res.data[0][j].pid.split(",").length)){
                 CourseType2[i].course.push(res.data[0][j])
               }
             }
@@ -537,7 +566,7 @@ export default {
               noTypeCourse.push(res.data[0][j])
             }
           }
-          if (noTypeCourse.length > 0) {
+          if (noTypeCourse.length > 0 && !this.pTypeCheckName.length) {
             CourseType2.push({
               course: noTypeCourse,
               name: '其他'
@@ -1192,7 +1221,7 @@ export default {
   display: flex;
   align-items: center;
   justify-content: flex-end;
-  /* margin-bottom: 20px; */
+  margin-bottom: 10px;
 }
 
 .typeCheck>span {

+ 205 - 0
src/components/interVideo/index.vue

@@ -0,0 +1,205 @@
+<template>
+    <div style="position: relative;">
+        <el-dialog title="交互视频" :visible.sync="dialogVisibleVideo" :append-to-body="true" width="95%"
+            :before-close="handleClose" class="dialog_diy">
+            <div v-if="dialogVisibleVideo">
+                <div class="videoBox">
+                    <video-player class="video-player vjs-custom-skin" ref="videoPlayer" :playsinline="true"
+                        :options="playerO" v-if="this.json.video" @timeupdate="onPlayerTimeupdate($event)"></video-player>
+                </div>
+            </div>
+            <span slot="footer" class="dialog-footer">
+                <el-button @click="close">关 闭</el-button>
+            </span>
+        </el-dialog>
+        <choiceD 
+        :dialogVisibleChoice.sync="dialogVisibleChoice" 
+        :json="toolJson" 
+        @play="gotoPlay"
+        :userid="userid"
+        :id="id"
+        :courseType="courseType"
+        :taskCount="taskCount"
+        :toolindex="toolindex"
+        :videoTime="stopTime"
+        ></choiceD>
+    </div>
+</template>
+
+<script>
+import choiceD from '../Choice/index.vue'
+
+export default {
+    props: {
+        dialogVisibleVideo: {
+            type: Boolean,
+            default: false
+        },
+        videoJson: {
+            type: Object
+        },
+        userid: {
+            type: String,
+        },
+        id: {
+            type: String,
+        },
+        courseType: {
+            type: String,
+        },
+        taskCount: {
+            type: Number,
+        },
+        toolindex: {
+            type: Number,
+        }
+    },
+    components: {
+        choiceD,
+    },
+    data() {
+        return {
+            json: {},
+            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: false, //全屏按钮
+                },
+            },
+            playerO: {},
+            videoTime: 0,
+            dialogVisibleChoice: false,
+            stopTime: 0,
+            toolJson: {}
+        }
+    },
+    watch: {
+        dialogVisibleVideo(newValue, oldValue) {
+            this.json = JSON.parse(JSON.stringify(this.videoJson));
+            if (this.json.video) {
+                this.playerO = JSON.parse(JSON.stringify(this.playerOptions));
+                this.playerO.sources[0].src = this.json.video
+                this.$nextTick(() => {
+                    setTimeout(() => {
+                        this.videoTime = Math.round(this.$refs['videoPlayer'].player.cache_.duration)
+                    }, 500)
+                })
+            }
+        }
+    },
+    methods: {
+        handleClose(done) {
+            this.close()
+            done()
+        },
+        close() {
+            this.$emit("update:dialogVisibleVideo", false)
+        },
+        onPlayerTimeupdate(player) {
+            let gklog = player.cache_.currentTime;//当前播放的秒数
+            let gklog2 = parseInt(gklog)
+            for (var i = 0; i < this.json.setting.length; i++) {
+                if (gklog2 == this.json.setting[i].time) {
+                    this.stopTime = this.json.setting[i].time
+                    player.pause()
+                    if (this.json.setting[i].tool.tool == 45) {
+                        this.dialogVisibleChoice = true
+                        this.toolJson = this.json.setting[i].tool.toolJson
+                    }
+                }
+            }
+            console.log(" onPlayerTimeupdate!", gklog);
+            console.log(" onPlayerTimeupdate!", gklog2);
+        },
+        gotoPlay() {
+            this.$refs['videoPlayer'].player.currentTime(this.stopTime + 1)
+            this.$refs['videoPlayer'].player.play()
+        },
+    },
+    mounted() {
+        this.json = JSON.parse(JSON.stringify(this.videoJson));
+        if (this.json.video) {
+            this.playerO = JSON.parse(JSON.stringify(this.playerOptions));
+            this.playerO.sources[0].src = this.json.video
+            this.$nextTick(() => {
+                setTimeout(() => {
+                    this.videoTime = Math.round(this.$refs['videoPlayer'].player.cache_.duration)
+                }, 500)
+            })
+        }
+    },
+}
+</script>
+
+<style scoped>
+.dialog_diy>>>.el-dialog__header {
+    background: #3c3c3c !important;
+    padding: 15px 20px;
+}
+
+.dialog_diy>>>.el-dialog__title {
+    color: #fff;
+}
+
+.dialog_diy>>>.el-dialog__headerbtn {
+    top: 19px;
+}
+
+.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;
+}
+
+.videoBox {
+    width: 100%;
+    height: 600px;
+    background: #fff;
+    margin-top: 20px;
+    position: relative;
+}
+
+.videoBox>.content {
+    /* position: absolute; */
+    line-height: 600px;
+    text-align: center;
+    font-size: 18px;
+    user-select: none;
+}
+
+.videoBox .video-player {
+    height: 100%;
+    width: auto;
+}
+
+.videoBox>>>.vjs-fluid {
+    padding: 0 !important;
+    height: 100%;
+}
+</style>

+ 33 - 7
src/components/noTerminal/studyStudent.vue

@@ -625,6 +625,16 @@
                               src="../../assets/icon/fourthToolList/allHistory.png" alt />
                             <div style="margin: 5px 0">全历史</div>
                           </div>
+                          <div v-if="tooC == 62">
+                            <img @click="addTools(tooC, toolIndex, taskCount)"
+                              src="../../assets/icon/fourthToolList/interVideo.png" alt />
+                            <div style="margin: 5px 0">交互视频</div>
+                          </div>
+                          <div v-if="tooC == 63">
+                            <img @click="addTools(tooC, toolIndex, taskCount)"
+                              src="../../assets/icon/fourthToolList/Wood.png" alt />
+                            <div style="margin: 5px 0">海龟编程</div>
+                          </div>
                         </div>
                       </div>
                     </div>
@@ -1155,12 +1165,9 @@
                         <div class="answerBg" style="border-radius: 15px 15px 0 0"
                           @click="commentOther(w, toolIndex, wIndex)">
                           <!-- <div>{{ w.sName }}</div> -->
-                          <el-tooltip class="item" effect="light" :content="JSON.parse(w.works)[0].answer"
-                            placement="top">
                             <div class="answerContent">
                               {{ JSON.parse(w.works)[0].answer }}
                             </div>
-                          </el-tooltip>
                           <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
                               rightW:
                                 w.userid == userid ||
@@ -2475,12 +2482,9 @@
                         <div class="answerBg" style="border-radius: 15px 15px 0 0"
                           @click="commentOther(w, toolIndex, wIndex)">
                           <!-- <div>{{ w.sName }}</div> -->
-                          <el-tooltip class="item" effect="light" :content="JSON.parse(w.works)[0].answer"
-                            placement="top">
                             <div class="answerContent">
                               {{ JSON.parse(w.works)[0].answer }}
                             </div>
-                          </el-tooltip>
                           <div class="answerScore" v-if="w.score" @click.stop="openScore(w)" :class="{
                               rightW:
                                 w.userid == userid ||
@@ -5098,6 +5102,15 @@
         <el-button type="primary" @click="updateName">确 定</el-button>
       </span>
     </el-dialog>
+    <interVideo 
+    :dialogVisibleVideo.sync="dialogVisibleVideo" 
+    :videoJson="videoJson"
+    :userid="userid"
+    :id="id"
+    :courseType="courseType"
+    :taskCount="taskCount"
+    :toolindex="toolindex"
+    ></interVideo>
   </div>
 </template>
 
@@ -5120,6 +5133,7 @@ import Audio from "../components/audio.vue";
 import ImgDraw from "../tools/imgDraw/imgDraw";
 import { Empty } from "element-ui";
 import RecordRTC from "recordrtc";
+import interVideo from "../interVideo/index.vue"
 
 export default {
   components: {
@@ -5136,6 +5150,7 @@ export default {
     Audio,
     ImgDraw,
     Table,
+    interVideo
   },
   data() {
     return {
@@ -5165,6 +5180,7 @@ export default {
       dialogVisibleUpdateGroup: false,
       dialogVisibleDeleteGroup: false,
       dialogVisibleSname: false,
+      dialogVisibleVideo:false,
       worksSName: "",
       classJuri: [],
       uploadStudentJuri: [],
@@ -5424,7 +5440,8 @@ export default {
       isGroup: false,
       toolIndex: null,
       tool: {},
-      isWorkTool: [16, 32, 57, 4, 45, 15, 1, 3, 6, 7, 26, 41, 47, 48, 52, 50, 40]//, 40
+      isWorkTool: [16, 32, 57, 4, 45, 15, 1, 3, 6, 7, 26, 41, 47, 48, 52, 50, 40],//, 40
+      videoJson:{},
     };
   },
   methods: {
@@ -9792,6 +9809,8 @@ export default {
         window.parent.postMessage({ tools: "60" }, "*");
       } else if (t == 61) {
         window.parent.postMessage({ tools: "61" }, "*");
+      } else if (t == 63) {
+        window.parent.postMessage({ tools: "63" }, "*");
       } else if (t == 26) {
         window.parent.postMessage(
           {
@@ -9931,6 +9950,12 @@ export default {
           ].toolChoose[i].groupJson;
 
         this.dialogVisibleGroup = true;
+      } else if (t == 62) {
+        this.videoJson =
+          this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
+            index
+          ].toolChoose[i].videoJson;
+        this.dialogVisibleVideo = true;
       }
     },
     teacherWorkSubmit(t, i, index, s) {
@@ -12497,6 +12522,7 @@ export default {
   -webkit-box-orient: vertical;
   display: -webkit-box;
   font-size: 15px;
+  cursor: pointer;
 }
 
 .elist_input_box {

+ 6 - 1
src/components/studentIndex.vue

@@ -239,6 +239,7 @@ export default {
       isCType: "",
       typea: "",
       typeb: "",
+      typec: "",
       typed: "",
       typef: "",
       typeE: [],
@@ -499,6 +500,8 @@ export default {
       } else {
         if (this.role == 1) {
           type = '2'
+        }else  if (this.tType == 1) {
+          type = '1'
         }
       }
       let params = {
@@ -573,6 +576,8 @@ export default {
       } else {
         if (this.role == 1) {
           type = '2'
+        }else if(this.tType == 1){
+          type = '1'
         }
       }
       let params = {
@@ -1222,7 +1227,7 @@ export default {
   display: flex;
   align-items: center;
   justify-content: flex-end;
-  /* margin-bottom: 20px; */
+  margin-bottom: 10px;
 }
 
 .typeCheck>span {

+ 63 - 60
src/components/studio/index.vue

@@ -17,7 +17,7 @@
             <div class="search" @click="search">
               <img src="../../assets/icon/search.png" alt="" />
             </div>
-            <input class="sInput" type="text" placeholder="请输入关键字" v-model="sCourse" @keyup.enter="search"/>
+            <input class="sInput" type="text" placeholder="请输入关键字" v-model="sCourse" @keyup.enter="search" />
           </div>
         </div>
         <div class="choose">
@@ -31,11 +31,10 @@
               </div>
               <div v-for="(item1, index1) in CourseTypeJson[item.id]" :key="index + '-' + index1" :label="item1.id"
                 @click="getCourse(item.name, item.id, item1.id, 2)">
-                <div class="cName" :class="
-                  typea == item1.id || typeb == item1.id || typec == item1.id
+                <div class="cName" :class="typea == item1.id || typeb == item1.id || typec == item1.id
                     ? 'isCType'
                     : ''
-                ">
+                  ">
                   {{ item1.name }}
                 </div>
               </div>
@@ -51,31 +50,30 @@
           <div class="main_box" v-loading="loading">
             <div style="display:flex;flex-wrap:wrap" v-if="!typeCheck">
               <div class="box_course" v-for="(item, index) in zoneClass" :key="index" @click="
-                      goTo(
-                    '/coursedetailStudio?courseId=' +
-                    item.courseId +
-                    '&userid=' +
-                    userid +
-                    '&oid=' +
-                    oid +
-                    '&org=' +
-                    org +
-                    '&cid=' +
-                    classId +
-                    '&tType=' +
-                    tType +
-                    '&role=' +
-                    role +
-                    '&screenType=' +
-                    screenType
-                  )
+                goTo(
+                  '/coursedetailStudio?courseId=' +
+                  item.courseId +
+                  '&userid=' +
+                  userid +
+                  '&oid=' +
+                  oid +
+                  '&org=' +
+                  org +
+                  '&cid=' +
+                  classId +
+                  '&tType=' +
+                  tType +
+                  '&role=' +
+                  role +
+                  '&screenType=' +
+                  screenType
+                )
                 ">
                 <div class="wheel">
-                  <img :src="
-                    item.cover
+                  <img :src="item.cover
                       ? JSON.parse(item.cover)[0].url
                       : require('../../assets/wheel.png')
-                  " alt="" />
+                    " alt="" />
                 </div>
                 <div class="middle_white">
                   <div class="textOverflow">{{ item.title }}</div>
@@ -114,7 +112,7 @@
                     '&screenType=' +
                     screenType
                   )
-                ">
+                  ">
                   立即学习
                 </div>
               </div>
@@ -124,31 +122,30 @@
                 <div class="title">{{ type.name }}</div>
                 <div style="display: flex;flex-flow: wrap;margin-top: 20px;">
                   <div class="box_course" v-for="(item, index) in type.course" :key="tindex + '-' + index" @click="
-                      goTo(
-                    '/coursedetailStudio?courseId=' +
-                    item.courseId +
-                    '&userid=' +
-                    userid +
-                    '&oid=' +
-                    oid +
-                    '&org=' +
-                    org +
-                    '&cid=' +
-                    classId +
-                    '&tType=' +
-                    tType +
-                    '&role=' +
-                    role +
-                    '&screenType=' +
-                    screenType
-                  )
-                ">
+                    goTo(
+                      '/coursedetailStudio?courseId=' +
+                      item.courseId +
+                      '&userid=' +
+                      userid +
+                      '&oid=' +
+                      oid +
+                      '&org=' +
+                      org +
+                      '&cid=' +
+                      classId +
+                      '&tType=' +
+                      tType +
+                      '&role=' +
+                      role +
+                      '&screenType=' +
+                      screenType
+                    )
+                    ">
                     <div class="wheel">
-                      <img :src="
-                        item.cover
+                      <img :src="item.cover
                           ? JSON.parse(item.cover)[0].url
                           : require('../../assets/wheel.png')
-                      " alt="" />
+                        " alt="" />
                     </div>
                     <div class="middle_white">
                       <div class="textOverflow">{{ item.title }}</div>
@@ -187,7 +184,7 @@
                         '&screenType=' +
                         screenType
                       )
-                    ">
+                      ">
                       立即学习
                     </div>
                   </div>
@@ -236,29 +233,30 @@ export default {
       isCType: "",
       typea: "",
       typeb: "",
+      typec: "",
       typed: "",
       typef: "",
       typeE: [],
       loading: "",
-      typeCheck:false,
+      typeCheck: false,
     };
   },
   watch: {
     typeCheck(newValue, oldValue) {
       this.loading = true
-      if(newValue){
+      if (newValue) {
         this.selectAll()
-      }else{
+      } else {
         this.page = 1
         this.selectAll2()
       }
     }
   },
   methods: {
-    search(){
-      if(this.typeCheck){
+    search() {
+      if (this.typeCheck) {
         this.selectAll()
-      }else{
+      } else {
         this.page = 1
         this.selectAll2()
       }
@@ -350,8 +348,10 @@ export default {
           type = '2'
         }
       } else {
-        if (this.role == 1) {
+        if (this.role == 1 || this.tType == 1) {
           type = '2'
+        }else {
+          type = '1'
         }
       }
       let params = {
@@ -424,8 +424,10 @@ export default {
           type = '2'
         }
       } else {
-        if (this.role == 1) {
+        if (this.role == 1 || this.tType == 1) {
           type = '2'
+        }else {
+          type = '1'
         }
       }
       let params = {
@@ -1005,13 +1007,14 @@ export default {
   font-weight: 700;
 }
 
-.typeCheck{
+.typeCheck {
   display: flex;
   align-items: center;
   justify-content: flex-end;
-  /* margin-bottom: 20px; */
+  margin-bottom: 10px;
 }
-.typeCheck>span{
+
+.typeCheck>span {
   margin-left: 10px;
 }
 </style>

+ 167 - 45
src/components/studyStudent.vue

@@ -142,12 +142,25 @@
             >
               下一步
             </div>
-            <div
+            <!-- <div
               class="returnBtn"
               @click="allScrell"
               v-if="!(IsFollow && tType == 2)"
             >
               全屏
+            </div> -->
+            <div
+              class="returnBtn"
+              @click="refreshCourse"
+            >
+              刷新
+            </div>
+            <div
+              class="returnBtn"
+              @click="setPz"
+              v-if="tType == 1"
+            >
+              评课
             </div>
             <div
               class="returnBtn"
@@ -261,7 +274,7 @@
                   "
                 >
                   <div
-                    style="padding: 15px 0 15px 20px; line-height: 25px"
+                    style="padding: 15px 0 15px 20px; line-height: 29px;font-size:18px;"
                     class="cont"
                     v-if="
                       chapInfoList[courseType].chapterInfo[0].taskJson[
@@ -1027,6 +1040,22 @@
                             />
                             <div style="margin: 5px 0">全历史</div>
                           </div>
+                          <div v-if="tooC == 62">
+                            <img
+                              @click="addTools(tooC, toolIndex, taskCount)"
+                              src="../assets/icon/fourthToolList/interVideo.png"
+                              alt
+                            />
+                            <div style="margin: 5px 0">交互视频</div>
+                          </div>
+                          <div v-if="tooC == 63">
+                            <img
+                              @click="addTools(tooC, toolIndex, taskCount)"
+                              src="../assets/icon/fourthToolList/Wood.png"
+                              alt
+                            />
+                            <div style="margin: 5px 0">海龟编程</div>
+                          </div>
                         </div>
                       </div>
                     </div>
@@ -2492,7 +2521,7 @@
                         </div>
                       </div>
                     </div>
-                    <div style="font-size: 18px">未提交</div>
+                    <div style="font-size: 18px" v-if="courseDetail.juri != ''">未提交</div>
                     <div class="noWorksS">
                       <div
                         v-for="(s, sIndex) in noWorksS[toolIndex]"
@@ -2644,7 +2673,7 @@
                         </div>
                       </div>
                     </div>
-                    <div style="font-size: 18px">未提交</div>
+                    <div style="font-size: 18px" v-if="courseDetail.juri != ''">未提交</div>
                     <div class="noWorksS">
                       <div
                         v-for="(s, sIndex) in noWorksS[toolIndex]"
@@ -2796,7 +2825,7 @@
                         </div>
                       </div>
                     </div>
-                    <div style="font-size: 18px">未提交</div>
+                    <div style="font-size: 18px" v-if="courseDetail.juri != ''">未提交</div>
                     <div class="noWorksS">
                       <div
                         v-for="(s, sIndex) in noWorksS[toolIndex]"
@@ -3035,7 +3064,7 @@
                         </div>
                       </div>
                     </div>
-                    <div style="font-size: 18px">未提交</div>
+                    <div style="font-size: 18px" v-if="courseDetail.juri != ''">未提交</div>
                     <div class="noWorksS">
                       <div
                         v-for="(s, sIndex) in noWorksS[toolIndex]"
@@ -3195,7 +3224,7 @@
                       </div>
                     </div>
 
-                    <div style="font-size: 18px">未提交</div>
+                    <div style="font-size: 18px" v-if="courseDetail.juri != ''">未提交</div>
                     <div class="noWorksS">
                       <div
                         v-for="(s, sIndex) in noWorksS[toolIndex]"
@@ -3336,7 +3365,7 @@
                       </div>
                     </div>
 
-                    <div style="font-size: 18px">未提交</div>
+                    <div style="font-size: 18px" v-if="courseDetail.juri != ''">未提交</div>
                     <div class="noWorksS">
                       <div
                         v-for="(s, sIndex) in noWorksS[toolIndex]"
@@ -3434,16 +3463,9 @@
                                         g.id
                                       )"
                               >
-                                <el-tooltip
-                                  class="item"
-                                  effect="light"
-                                  :content="JSON.parse(w.works)[0].answer"
-                                  placement="top"
-                                >
-                                  <div class="answerContent">
-                                    {{ JSON.parse(w.works)[0].answer }}
-                                  </div>
-                                </el-tooltip>
+                                <div class="answerContent">
+                                  {{ JSON.parse(w.works)[0].answer }}
+                                </div>
                                 <div
                                   class="answerScore"
                                   v-if="w.score"
@@ -3563,16 +3585,9 @@
                             @click="commentOther(w, toolIndex, wIndex)"
                           >
                             <!-- <div>{{ w.sName }}</div> -->
-                            <el-tooltip
-                              class="item"
-                              effect="light"
-                              :content="JSON.parse(w.works)[0].answer"
-                              placement="top"
-                            >
-                              <div class="answerContent">
-                                {{ JSON.parse(w.works)[0].answer }}
-                              </div>
-                            </el-tooltip>
+                            <div class="answerContent">
+                              {{ JSON.parse(w.works)[0].answer }}
+                            </div>
                             <div
                               class="answerScore"
                               v-if="w.score"
@@ -3643,7 +3658,7 @@
                         </div>
                       </div>
                     </div>
-                    <div style="font-size: 18px">未提交</div>
+                    <div style="font-size: 18px" v-if="courseDetail.juri != ''">未提交</div>
                     <div class="noWorksS">
                       <div
                         v-for="(s, sIndex) in noWorksS[toolIndex]"
@@ -3916,7 +3931,7 @@
                         </div>
                       </div>
                     </div>
-                    <div style="font-size: 18px">未提交</div>
+                    <div style="font-size: 18px" v-if="courseDetail.juri != ''">未提交</div>
                     <div class="noWorksS">
                       <div
                         v-for="(s, sIndex) in noWorksS[toolIndex]"
@@ -4189,7 +4204,7 @@
                         </div>
                       </div>
                     </div>
-                    <div style="font-size: 18px">未提交</div>
+                    <div style="font-size: 18px" v-if="courseDetail.juri != ''">未提交</div>
                     <div class="noWorksS">
                       <div
                         v-for="(s, sIndex) in noWorksS[toolIndex]"
@@ -4462,7 +4477,7 @@
                         </div>
                       </div>
                     </div>
-                    <div style="font-size: 18px">未提交</div>
+                    <div style="font-size: 18px" v-if="courseDetail.juri != ''">未提交</div>
                     <div class="noWorksS">
                       <div
                         v-for="(s, sIndex) in noWorksS[toolIndex]"
@@ -4734,7 +4749,7 @@
                         </div>
                       </div>
                     </div>
-                    <div style="font-size: 18px">未提交</div>
+                    <div style="font-size: 18px" v-if="courseDetail.juri != ''">未提交</div>
                     <div class="noWorksS">
                       <div
                         v-for="(s, sIndex) in noWorksS[toolIndex]"
@@ -4835,7 +4850,7 @@
                         </div>
                       </div>
                     </div>
-                    <div style="font-size: 18px">未提交</div>
+                    <div style="font-size: 18px" v-if="courseDetail.juri != ''">未提交</div>
                     <div class="noWorksS">
                       <div
                         v-for="(s, sIndex) in noWorksS[toolIndex]"
@@ -4959,7 +4974,7 @@
                         </div>
                       </div>
                     </div>
-                    <div style="font-size: 18px">未提交</div>
+                    <div style="font-size: 18px" v-if="courseDetail.juri != ''">未提交</div>
                     <div class="noWorksS">
                       <div
                         v-for="(s, sIndex) in noWorksS[toolIndex]"
@@ -5124,7 +5139,7 @@
                         </div>
                       </div> -->
                     </div>
-                    <div style="font-size: 18px">未提交</div>
+                    <div style="font-size: 18px" v-if="courseDetail.juri != ''">未提交</div>
                     <div class="noWorksS">
                       <div
                         v-for="(s, sIndex) in noWorksS[toolIndex]"
@@ -5347,7 +5362,7 @@
                         />
                       </div>
                     </div>
-                    <div style="font-size: 18px">未提交</div>
+                    <div style="font-size: 18px" v-if="courseDetail.juri != ''">未提交</div>
                     <div class="noWorksS">
                       <div
                         v-for="(s, sIndex) in noWorksS[toolIndex]"
@@ -5498,7 +5513,7 @@
                         </div>
                       </div>
                     </div>
-                    <div style="font-size: 18px">未提交</div>
+                    <div style="font-size: 18px" v-if="courseDetail.juri != ''">未提交</div>
                     <div class="noWorksS">
                       <div
                         v-for="(s, sIndex) in noWorksS[toolIndex]"
@@ -5720,7 +5735,7 @@
                         </div>
                       </div>
                     </div>
-                    <div style="font-size: 18px">未提交</div>
+                    <div style="font-size: 18px" v-if="courseDetail.juri != ''">未提交</div>
                     <div class="noWorksS">
                       <div
                         v-for="(s, sIndex) in noWorksS[toolIndex]"
@@ -6434,7 +6449,7 @@
     <div
       class="pButton"
       @click="(pzDialog = true), selectPz()"
-      v-if="tType == 4"
+      v-if="tType == 4 || ispzType == 4"
     >
       <!-- 批 -->
       <img src="../assets/pzBtn2.png" style="width: 25px" alt="" />
@@ -8476,7 +8491,10 @@
       class="dialog_diy"
     >
       <el-form>
-        <div>表格内容</div>
+        <div style="display: flex;align-items: center;justify-content: space-between;">
+          <span>表格内容</span>  
+          <el-button type="primary" size="small" @click="returnTableText">还原模板</el-button>
+        </div>
         <Table
           v-model="tableJson.text"
           @change="change"
@@ -8521,7 +8539,10 @@
       class="dialog_diy"
     >
       <el-form>
-        <div>文档内容</div>
+        <div style="display: flex;align-items: center;justify-content: space-between;">
+          <span>文档内容</span> 
+          <el-button type="primary" size="small" @click="returnWordText">还原模板</el-button>
+        </div>
         <editor-bar
           v-model="wordJson.text"
           v-if="dialogVisibleWord"
@@ -9264,6 +9285,15 @@
         <el-button type="primary" @click="updateName">确 定</el-button>
       </span>
     </el-dialog>
+    <interVideo 
+    :dialogVisibleVideo.sync="dialogVisibleVideo" 
+    :videoJson="videoJson"
+    :userid="userid"
+    :id="id"
+    :courseType="courseType"
+    :taskCount="taskCount"
+    :toolindex="toolindex"
+    ></interVideo>
   </div>
 </template>
 
@@ -9286,6 +9316,7 @@ import Audio from "./components/audio.vue";
 import ImgDraw from "./tools/imgDraw/imgDraw";
 import { Empty } from "element-ui";
 import RecordRTC from "recordrtc";
+import interVideo from "./interVideo/index.vue"
 
 export default {
   components: {
@@ -9302,6 +9333,7 @@ export default {
     Audio,
     ImgDraw,
     Table,
+    interVideo
   },
   data() {
     return {
@@ -9330,6 +9362,7 @@ export default {
       dialogVisibleUpdateGroup: false,
       dialogVisibleDeleteGroup: false,
       dialogVisibleSname: false,
+      dialogVisibleVideo:false,
       worksSName: "",
       classJuri: [],
       uploadStudentJuri: [],
@@ -9368,7 +9401,9 @@ export default {
       sentenceList: [{ sentenceTitle: "", addSentence: [], rightAnswer: [] }],
       sentenceList1: [],
       tableJson: [],
+      tableJsonO: [],
       wordJson: [],
+      wordJsonO: [],
       vedio: [],
       text: [],
       textList: [],
@@ -9566,6 +9601,7 @@ export default {
       fullUrl: "",
       commentIndexJson: {},
       Stbodywidth: 0,
+      ispzType:0,
       pzType: 1,
       wScore: 0,
       scoreDetail: "",
@@ -9587,6 +9623,7 @@ export default {
       courseGroupStudentUid: [],
       courseGroup: {},
       isGroup: false,
+      videoJson:{},
     };
   },
   methods: {
@@ -9802,6 +9839,17 @@ export default {
           console.error(err);
         });
     },
+    returnTableText(){
+      this.$confirm("确定还原此模板吗?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          this.tableJson = JSON.parse(JSON.stringify(this.tableJsonO))
+        })
+        .catch(() => {});
+    },
     addTableWorks() {
       let params = [
         {
@@ -9860,6 +9908,17 @@ export default {
           console.error(err);
         });
     },
+    returnWordText(){
+      this.$confirm("确定还原此模板吗?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          this.wordJson = JSON.parse(JSON.stringify(this.wordJsonO))
+        })
+        .catch(() => {});
+    },
     addWordWorks() {
       let params = [{
         uid: this.userid,
@@ -11937,6 +11996,7 @@ export default {
         "GIF",
         "PNG",
         "JPGE",
+        "JPEG",
         "JPG",
         "TIF",
         "PCX",
@@ -12750,6 +12810,11 @@ export default {
           console.error(err);
         });
     },
+    refreshCourse(){
+      // window.location.reload();
+      this.navList = [];
+      this.getCourseDetail(1)
+    },
     getCourseDetail(type, gindex) {
       let loading;
       if (type != 2) {
@@ -13165,7 +13230,7 @@ export default {
                 ].toolChoose[_this.toolindex].groupJson;
             }
 
-            if (_this.tType == 4) {
+            if (_this.tType == 4 || _this.ispzType == 4) {
               _this.selectPz();
             }
           }, 5000);
@@ -13325,6 +13390,16 @@ export default {
         })
         .catch(() => {});
     },
+    setPz(){
+      if(this.ispzType == 4){
+        this.ispzType = 0
+        this.pzDialog = false
+        return;
+      }
+      this.ispzType = 4
+      this.pzDialog = true
+      this.selectPz();
+    },
     selectPz() {
       let params = {
         cid: this.id,
@@ -13636,6 +13711,20 @@ export default {
       this.playerO = this.playerOptions;
     },
     onPlayerPlay() {},
+    onPlayerTimeupdate(player) {
+      let gklog = player.cache_.currentTime;//当前播放的秒数
+      let a=player.cache_.duration//视频的总时长
+      let gklog2 = parseInt(gklog)
+      // if(gklog2 == '3'){
+      //   player.pause()
+      //   setTimeout(()=>{
+      //     player.currentTime(gklog2+1)
+      //     player.play()
+      //   },1000)
+      // }
+      console.log(" onPlayerTimeupdate!", gklog);
+      console.log(" onPlayerTimeupdate!", gklog2);
+    },
     lookVedio(u, i) {
       this.isClickNav = "";
       // this.playerOptions.sources[0].src = u;
@@ -14385,6 +14474,8 @@ export default {
         window.parent.postMessage({ tools: "60" }, "*");
       } else if (t == 61) {
         window.parent.postMessage({ tools: "61" }, "*");
+      } else if (t == 63) {
+        window.parent.postMessage({ tools: "63" }, "*");
       } else if (t == 26) {
         window.parent.postMessage(
           {
@@ -14496,6 +14587,7 @@ export default {
               )
             )
           : { text: "" };
+          this.tableJsonO = JSON.parse(JSON.stringify(this.tableJson))
         if (this.worksStudent[i].length) {
           for (var k = 0; k < this.worksStudent[i].length; k++) {
             if (this.userid == this.worksStudent[i][k].userid) {
@@ -14516,6 +14608,15 @@ export default {
               )
             )
           : { text: "" };
+        this.wordJsonO = JSON.parse(JSON.stringify(this.wordJson))
+        if (this.worksStudent[i].length) {
+          for (var k = 0; k < this.worksStudent[i].length; k++) {
+            if (this.userid == this.worksStudent[i][k].userid) {
+              this.wordJson = JSON.parse(this.worksStudent[i][k].works);
+              break;
+            }
+          }
+        }
         this.dialogVisibleWord = true;
       } else if (t == 49) {
         this.groupJson =
@@ -14524,6 +14625,12 @@ export default {
           ].toolChoose[i].groupJson;
         this.islock = this.groupJson.islock == 1 ? true : false;
         this.dialogVisibleGroup = true;
+      } else if (t == 62) {
+        this.videoJson =
+          this.chapInfoList[this.courseType].chapterInfo[0].taskJson[
+            index
+          ].toolChoose[i].videoJson;
+        this.dialogVisibleVideo = true;
       }
     },
     teacherWorkSubmit(t, i, index, s) {
@@ -14554,6 +14661,14 @@ export default {
               )
             )
           : { text: "" };
+        if (this.worksStudent[i].length) {
+          for (var k = 0; k < this.worksStudent[i].length; k++) {
+            if (this.sStudent.userid == this.worksStudent[i][k].userid) {
+              this.wordJson = JSON.parse(this.worksStudent[i][k].works);
+              break;
+            }
+          }
+        }
         this.dialogVisibleWordTeacher = true; //文档
       } else if (t == 4) {
         this.radio = [];
@@ -15800,6 +15915,7 @@ export default {
   padding: 20px;
   line-height: 30px;
   word-break: break-word;
+  font-size:18px;
 }
 
 .file {
@@ -16247,7 +16363,7 @@ export default {
   display: flex;
   flex-direction: row;
   align-items: center;
-  width: calc(100% - 520px);
+  width: calc(100% - 600px);
 }
 
 .courseIndex > div:nth-child(1) {
@@ -17061,6 +17177,7 @@ export default {
   -webkit-box-orient: vertical;
   display: -webkit-box;
   font-size: 15px;
+  cursor: pointer;
 }
 
 .elist_input_box {
@@ -18186,6 +18303,11 @@ export default {
 }
 
 /* code 样式 */
+.cont{
+  /* -webkit-user-modify: read-write; */
+  overflow-wrap: break-word;
+  -webkit-line-break: after-white-space;
+}
 .cont >>> code {
   display: inline-block;
   *display: inline;
@@ -18684,7 +18806,7 @@ ol {
 .g_d_btnBox {
   display: flex;
   justify-content: flex-end;
-  align-items: flex-end;
+  align-items: center;
   margin-bottom: 20px;
 }
 

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