lsc 1 년 전
부모
커밋
d0fc8c530e

+ 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.6802f38c87e98ee5d26efe785f411582.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.149d4f59c0026a97192e.js></script></body></html><script>function stopSafari() {
+    }</style><link href=./static/css/app.4fd2abf4171422458ca0714e21b04fb7.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.aeb333190a63e668e843.js></script></body></html><script>function stopSafari() {
     //阻止safari浏览器双击放大功能
     let lastTouchEnd = 0  //更新手指弹起的时间
     document.documentElement.addEventListener("touchstart", function (event) {

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
dist/static/css/app.4fd2abf4171422458ca0714e21b04fb7.css


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
dist/static/css/app.4fd2abf4171422458ca0714e21b04fb7.css.map


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
dist/static/css/app.6802f38c87e98ee5d26efe785f411582.css.map


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
dist/static/js/app.149d4f59c0026a97192e.js


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
dist/static/js/app.aeb333190a63e668e843.js


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
dist/static/js/app.aeb333190a63e668e843.js.map


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
dist/static/js/manifest.3ad1d5771e9b13dbdad2.js.map


BIN
src/assets/icon/fourthToolList/Wood.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>

+ 4 - 0
src/components/courseDetail.vue

@@ -331,6 +331,10 @@
                                 <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>

+ 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>

+ 27 - 1
src/components/noTerminal/studyStudent.vue

@@ -630,6 +630,11 @@
                               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>
@@ -5097,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>
 
@@ -5119,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: {
@@ -5135,6 +5150,7 @@ export default {
     Audio,
     ImgDraw,
     Table,
+    interVideo
   },
   data() {
     return {
@@ -5164,6 +5180,7 @@ export default {
       dialogVisibleUpdateGroup: false,
       dialogVisibleDeleteGroup: false,
       dialogVisibleSname: false,
+      dialogVisibleVideo:false,
       worksSName: "",
       classJuri: [],
       uploadStudentJuri: [],
@@ -5423,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: {
@@ -9791,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(
           {
@@ -9930,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) {

+ 29 - 0
src/components/studyStudent.vue

@@ -1048,6 +1048,14 @@
                             />
                             <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>
@@ -9277,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>
 
@@ -9299,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: {
@@ -9315,6 +9333,7 @@ export default {
     Audio,
     ImgDraw,
     Table,
+    interVideo
   },
   data() {
     return {
@@ -9343,6 +9362,7 @@ export default {
       dialogVisibleUpdateGroup: false,
       dialogVisibleDeleteGroup: false,
       dialogVisibleSname: false,
+      dialogVisibleVideo:false,
       worksSName: "",
       classJuri: [],
       uploadStudentJuri: [],
@@ -9603,6 +9623,7 @@ export default {
       courseGroupStudentUid: [],
       courseGroup: {},
       isGroup: false,
+      videoJson:{},
     };
   },
   methods: {
@@ -14452,6 +14473,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(
           {
@@ -14601,6 +14624,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) {

이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.