zengyicheng 2 rokov pred
rodič
commit
68fd3c7b2a
35 zmenil súbory, kde vykonal 990 pridanie a 20 odobranie
  1. 0 0
      dist/index.html
  2. 1 1
      dist/report.html
  3. 0 0
      dist/static/css/app.dbec558a.css
  4. 0 0
      dist/static/css/chunk-0f529362.9c7aa8ca.css
  5. 0 0
      dist/static/css/chunk-29b1de2d.07cd7845.css
  6. 0 1
      dist/static/css/chunk-2bcf596a.a0bfd533.css
  7. 1 0
      dist/static/css/chunk-40de5f1e.c94776c5.css
  8. 1 0
      dist/static/css/chunk-637708de.959045c7.css
  9. 0 0
      dist/static/css/chunk-7a7058ee.2b52a6e3.css
  10. 0 1
      dist/static/css/chunk-7d027967.7f5e6538.css
  11. 0 0
      dist/static/css/chunk-ab1486c2.2f1ddd04.css
  12. 0 0
      dist/static/css/chunk-vantUI.6c0b0952.css
  13. 0 0
      dist/static/css/chunk-vantUI.ade4e21c.css
  14. 0 0
      dist/static/js/app.0dfcd25e.js
  15. 0 0
      dist/static/js/app.d30a7795.js
  16. 0 0
      dist/static/js/chunk-01979dd3.30fb23f3.js
  17. 0 0
      dist/static/js/chunk-0f529362.bd55f860.js
  18. 0 0
      dist/static/js/chunk-29b1de2d.dc4f471c.js
  19. 0 1
      dist/static/js/chunk-2bcf596a.3b82301e.js
  20. 1 0
      dist/static/js/chunk-40de5f1e.8723779d.js
  21. 0 0
      dist/static/js/chunk-5bd16f48.e0aa2b01.js
  22. 1 0
      dist/static/js/chunk-637708de.88dbccae.js
  23. 0 0
      dist/static/js/chunk-6637cd0c.d2f1b83f.js
  24. 0 0
      dist/static/js/chunk-7a7058ee.adad61c5.js
  25. 0 1
      dist/static/js/chunk-7d027967.789f01af.js
  26. 0 0
      dist/static/js/chunk-ab1486c2.46eea233.js
  27. 0 0
      dist/static/js/chunk-c8697d60.633e0995.js
  28. 0 0
      dist/static/js/chunk-libs.929f1c0b.js
  29. 0 0
      dist/static/js/chunk-vantUI.46a716df.js
  30. 0 0
      dist/static/js/chunk-vantUI.e6f750cb.js
  31. 282 0
      src/views/course/components/askPanel.vue
  32. 378 0
      src/views/course/components/choosePanel.vue
  33. 71 11
      src/views/course/components/stepsBox.vue
  34. 248 2
      src/views/course/components/works.vue
  35. 6 2
      src/views/course/index.vue

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
dist/index.html


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 1 - 1
dist/report.html


+ 0 - 0
dist/static/css/app.745921f5.css → dist/static/css/app.dbec558a.css


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
dist/static/css/chunk-0f529362.9c7aa8ca.css


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
dist/static/css/chunk-29b1de2d.07cd7845.css


+ 0 - 1
dist/static/css/chunk-2bcf596a.a0bfd533.css

@@ -1 +0,0 @@
-h3[data-v-70f5745f]{margin:1.06667rem 0 0}ul[data-v-70f5745f]{list-style-type:none;padding:0}li[data-v-70f5745f]{display:inline-block;margin:0 .26667rem}a[data-v-70f5745f]{color:#42b983}.app-container[data-v-232f728e]{height:100vh}.app-container .layout-content[data-v-232f728e]{height:100%}.app-container .layout-footer[data-v-232f728e]{display:block;height:1.33333rem}

+ 1 - 0
dist/static/css/chunk-40de5f1e.c94776c5.css

@@ -0,0 +1 @@
+.loginBox[data-v-02bea5b8]{position:relative;width:100vw;height:100vh;overflow:hidden}.loginBox>iframe[data-v-02bea5b8]{width:100%;height:100%;border:0}

+ 1 - 0
dist/static/css/chunk-637708de.959045c7.css

@@ -0,0 +1 @@
+h3[data-v-4a454b4a]{margin:1.06667rem 0 0}ul[data-v-4a454b4a]{list-style-type:none;padding:0}li[data-v-4a454b4a]{display:inline-block;margin:0 .26667rem}a[data-v-4a454b4a]{color:#42b983}.app-container[data-v-00570d68]{height:100vh}.app-container .layout-content[data-v-00570d68]{height:100%}.app-container .layout-footer[data-v-00570d68]{display:block;height:1.33333rem}

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
dist/static/css/chunk-7a7058ee.2b52a6e3.css


+ 0 - 1
dist/static/css/chunk-7d027967.7f5e6538.css

@@ -1 +0,0 @@
-.loginBox[data-v-4dc8186e]{position:relative;width:100vw;height:100vh;overflow:hidden}.loginBox>iframe[data-v-4dc8186e]{width:100%;height:100%;border:0}

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
dist/static/css/chunk-ab1486c2.2f1ddd04.css


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
dist/static/css/chunk-vantUI.6c0b0952.css


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
dist/static/css/chunk-vantUI.ade4e21c.css


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
dist/static/js/app.0dfcd25e.js


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
dist/static/js/app.d30a7795.js


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
dist/static/js/chunk-01979dd3.30fb23f3.js


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
dist/static/js/chunk-0f529362.bd55f860.js


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
dist/static/js/chunk-29b1de2d.dc4f471c.js


+ 0 - 1
dist/static/js/chunk-2bcf596a.3b82301e.js

@@ -1 +0,0 @@
-(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2bcf596a"],{"03af":function(e,t,a){},"2dee":function(e,t,a){},"64fe":function(e,t,a){"use strict";var n=a("2dee"),c=a.n(n);c.a},7431:function(e,t,a){"use strict";a.r(t);var n=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticClass:"app-container"},[a("div",{staticClass:"layout-content"},[e.$route.meta.keepAlive?a("keep-alive",[a("router-view")],1):a("router-view")],1),e._e()])},c=[],i=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",[a("van-tabbar",{attrs:{fixed:"",route:""},on:{change:e.handleChange},model:{value:e.active,callback:function(t){e.active=t},expression:"active"}},e._l(e.data,(function(t,n){return a("van-tabbar-item",{key:n,attrs:{to:t.to,icon:t.icon}},[e._v(" "+e._s(t.title)+" ")])})),1)],1)},o=[],r=(a("a9e3"),{name:"TabBar",props:{defaultActive:{type:Number,default:0},data:{type:Array,default:function(){return[]}}},data:function(){return{active:this.defaultActive}},methods:{handleChange:function(e){this.$emit("change",e)}}}),u=r,l=(a("cb41"),a("2877")),s=Object(l["a"])(u,i,o,!1,null,"70f5745f",null),f=s.exports,d={name:"AppLayout",data:function(){return{tabbars:[{title:"学习中心",to:{path:"/home"},icon:"home-o"}]}},components:{TabBar:f},methods:{handleChange:function(e){console.log("tab value:",e)}}},v=d,p=(a("64fe"),Object(l["a"])(v,n,c,!1,null,"232f728e",null));t["default"]=p.exports},cb41:function(e,t,a){"use strict";var n=a("03af"),c=a.n(n);c.a}}]);

+ 1 - 0
dist/static/js/chunk-40de5f1e.8723779d.js

@@ -0,0 +1 @@
+(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-40de5f1e"],{"08dc":function(e,t,n){},"9ed6":function(e,t,n){"use strict";n.r(t);var r=function(){var e=this;e._self._c;return e._m(0)},i=[function(){var e=this,t=e._self._c;return t("div",{staticClass:"loginBox"},[t("iframe",{attrs:{src:"//edu.cocorobo.cn/course/login?type=2",frameborder:"0"}})])}],c=n("c7eb"),o=n("1da1"),u=n("5530"),s=(n("14d9"),n("2f62")),a={data:function(){return{redirect:void 0,timer:null}},watch:{$route:{handler:function(e){this.redirect=e.query&&e.query.redirect},immediate:!0}},methods:Object(u["a"])(Object(u["a"])({},Object(s["b"])({login:"user/login"})),{},{handleLogin:function(){this.$router.push({path:this.redirect||"/"})},getLogin:function(){var e=this;return Object(o["a"])(Object(c["a"])().mark((function t(){var n;return Object(c["a"])().wrap((function(t){while(1)switch(t.prev=t.next){case 0:return t.next=2,e.login();case 2:n=t.sent,n&&e.$router.push({path:e.redirect||"/"});case 4:case"end":return t.stop()}}),t)})))()}}),beforeDestroy:function(){clearInterval(this.timer),this.timer=null},mounted:function(){var e=this;this.getLogin(),this.timer=setInterval((function(){e.getLogin()}),2e3)}},d=a,h=(n("d02e"),n("2877")),l=Object(h["a"])(d,r,i,!1,null,"02bea5b8",null);t["default"]=l.exports},d02e:function(e,t,n){"use strict";n("08dc")}}]);

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
dist/static/js/chunk-5bd16f48.e0aa2b01.js


+ 1 - 0
dist/static/js/chunk-637708de.88dbccae.js

@@ -0,0 +1 @@
+(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-637708de"],{4639:function(t,e,a){"use strict";a("80ce")},7431:function(t,e,a){"use strict";a.r(e);var n=function(){var t=this,e=t._self._c;return e("div",{staticClass:"app-container"},[e("div",{staticClass:"layout-content"},[t.$route.meta.keepAlive?e("keep-alive",[e("router-view")],1):e("router-view")],1),t._e()])},i=[],o=function(){var t=this,e=t._self._c;return e("div",[e("van-tabbar",{attrs:{fixed:"",route:""},on:{change:t.handleChange},model:{value:t.active,callback:function(e){t.active=e},expression:"active"}},t._l(t.data,(function(a,n){return e("van-tabbar-item",{key:n,attrs:{to:a.to,icon:a.icon}},[t._v(" "+t._s(a.title)+" ")])})),1)],1)},c=[],u=(a("a9e3"),{name:"TabBar",props:{defaultActive:{type:Number,default:0},data:{type:Array,default:function(){return[]}}},data:function(){return{active:this.defaultActive}},methods:{handleChange:function(t){this.$emit("change",t)}}}),r=u,s=(a("4639"),a("2877")),l=Object(s["a"])(r,o,c,!1,null,"4a454b4a",null),d=l.exports,f={name:"AppLayout",data:function(){return{tabbars:[{title:"学习中心",to:{path:"/home"},icon:"home-o"}]}},components:{TabBar:d},methods:{handleChange:function(t){console.log("tab value:",t)}}},v=f,p=(a("d6aa"),Object(s["a"])(v,n,i,!1,null,"00570d68",null));e["default"]=p.exports},"80ce":function(t,e,a){},"9d17":function(t,e,a){},d6aa:function(t,e,a){"use strict";a("9d17")}}]);

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
dist/static/js/chunk-6637cd0c.d2f1b83f.js


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
dist/static/js/chunk-7a7058ee.adad61c5.js


+ 0 - 1
dist/static/js/chunk-7d027967.789f01af.js

@@ -1 +0,0 @@
-(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-7d027967"],{"6605e":function(e,t,r){},"9ed6":function(e,t,r){"use strict";r.r(t);var n=function(){var e=this,t=e.$createElement;e._self._c;return e._m(0)},i=[function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",{staticClass:"loginBox"},[r("iframe",{attrs:{src:"//edu.cocorobo.cn/course/login?type=2",frameborder:"0"}})])}],c=(r("96cf"),r("1da1")),o=r("5530"),u=r("2f62"),a={data:function(){return{redirect:void 0,timer:null}},watch:{$route:{handler:function(e){this.redirect=e.query&&e.query.redirect},immediate:!0}},methods:Object(o["a"])(Object(o["a"])({},Object(u["b"])({login:"user/login"})),{},{handleLogin:function(){this.$router.push({path:this.redirect||"/"})},getLogin:function(){var e=this;return Object(c["a"])(regeneratorRuntime.mark((function t(){var r;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return t.next=2,e.login();case 2:r=t.sent,r&&e.$router.push({path:e.redirect||"/"});case 4:case"end":return t.stop()}}),t)})))()}}),beforeDestroy:function(){clearInterval(this.timer),this.timer=null},mounted:function(){var e=this;this.getLogin(),this.timer=setInterval((function(){e.getLogin()}),2e3)}},s=a,l=(r("b792"),r("2877")),d=Object(l["a"])(s,n,i,!1,null,"4dc8186e",null);t["default"]=d.exports},b792:function(e,t,r){"use strict";var n=r("6605e"),i=r.n(n);i.a}}]);

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
dist/static/js/chunk-ab1486c2.46eea233.js


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
dist/static/js/chunk-c8697d60.633e0995.js


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
dist/static/js/chunk-libs.929f1c0b.js


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
dist/static/js/chunk-vantUI.46a716df.js


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
dist/static/js/chunk-vantUI.e6f750cb.js


+ 282 - 0
src/views/course/components/askPanel.vue

@@ -0,0 +1,282 @@
+<template>
+  <div class="cp-container" v-if="panelVisible">
+    <div class="cp-title">
+      <span class="back" @click="back"></span>
+      <span class="title" v-if="isTeacher">问卷调查作业</span>
+      <span class="title" v-else>问卷调查作业-{{ sStudent.student }}</span>
+      <span class="btn" v-if="type == 1" @click="addPz(type)">提交</span>
+    </div>
+    <div class="cp-box">
+      <div class="cp-quest">标题:{{ askJson.askTitle }}</div>
+      <div class="cp-conent" v-if="type == 1">
+        <div v-for="(item, index) in askJson.askCount" :key="index" class="askBox">
+          <div class="askTitle">
+            {{ index + 1 + '、' }}
+            <div>题目:{{ askJson.askJson[index].askstitle }}</div>
+          </div>
+          <img v-if="askJson.askJson[index].img" :src="askJson.askJson[index].img" />
+          <div class="askBody">
+            <el-radio-group
+              v-model="radio[index]"
+              v-if="askJson.askJson[index].type == '1' || !askJson.askJson[index].type"
+            >
+              <el-radio
+                v-for="(item1, checkIndex) in askJson.askJson[index].checkList"
+                :key="checkIndex"
+                :label="checkIndex"
+                class="redioStyle"
+                ><span v-html="item1"></span
+              ></el-radio>
+            </el-radio-group>
+            <el-checkbox-group v-model="radio[index]" v-if="askJson.askJson[index].type == '2'">
+              <el-checkbox
+                v-for="(item1, checkIndex) in askJson.askJson[index].checkList"
+                :key="checkIndex"
+                :label="checkIndex"
+                class="redioStyle"
+                ><span v-html="item1"></span>
+              </el-checkbox>
+            </el-checkbox-group>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { addCourseWorks, addCourseWorksTeacher } from '@/api/course'
+import { mapGetters } from 'vuex'
+
+export default {
+  props: {
+    panelVisible: {
+      type: Boolean
+    },
+    courseid: {
+      type: String,
+      default: ''
+    },
+    courseType: {
+      type: Number,
+      default: 0
+    },
+    taskCount: {
+      type: Number,
+      default: 0
+    },
+    toolindex: {
+      type: Number
+    },
+    isTeacher: {
+      type: Boolean
+    },
+    askJson: {
+      type: Object
+    },
+    sStudent: {
+      type: Object
+    }
+  },
+  components: {},
+  data() {
+    return {
+      type: 1,
+      message: '',
+      imgList: [],
+      radio: [],
+      askList: []
+    }
+  },
+  computed: {
+    ...mapGetters(['userinfo'])
+  },
+  mounted() {
+    for (var k = 0; k < this.askJson.askJson.length; k++) {
+      if (this.askJson.askJson[k].type == '2') {
+        this.radio.push([])
+      } else {
+        this.radio.push('')
+      }
+    }
+  },
+  methods: {
+    back() {
+      this.$emit('setAskPanelVisible', false)
+    },
+    setType(type) {
+      this.type = type
+    },
+    getImage(imgList) {
+      this.imgList = imgList
+      this.$forceUpdate()
+    },
+    addPz() {
+      if (!this.radio.length) {
+        this.$message.error('请选择选项')
+        return
+      }
+      for (var i = 0; i < this.askJson.askCount; i++) {
+        if ((this.radio[i] instanceof Array && !this.radio[i].length) || (this.radio[i] !== 0 && !this.radio[i])) {
+          this.$message.error('请选择选项')
+          return
+        }
+      }
+      const fun = [addCourseWorks, addCourseWorksTeacher]
+      const askList = [
+        {
+          askJson: this.askJson,
+          anwer: this.radio
+        }
+      ]
+      let params = []
+      if (this.isTeacher) {
+        params = [
+          {
+            uid: this.userinfo.userid,
+            cid: this.courseid,
+            stage: this.courseType,
+            task: this.taskCount,
+            tool: this.toolindex,
+            content: JSON.stringify(askList).replaceAll(/%/g, '%25'),
+            type: 2
+          }
+        ]
+      } else {
+        params = [
+          {
+            uid: this.sStudent.userid,
+            cid: this.courseid,
+            stage: this.courseType,
+            task: this.taskCount,
+            tool: this.toolindex,
+            content: JSON.stringify(askList),
+            type: 2,
+            ateacher: this.userinfo.userid
+          }
+        ]
+      }
+      fun[this.isTeacher ? 0 : 1](params)
+        .then(res => {
+          this.$toast({
+            message: '上传成功',
+            type: 'success'
+          })
+          this.$emit('setAskPanelVisible', false)
+        })
+        .catch(err => {
+          console.error(err)
+        })
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.cp-container {
+  width: 100vw;
+  height: 100vh;
+  position: fixed;
+  top: 0;
+  left: 0;
+  background: #fff;
+  z-index: 2;
+  .cp-title {
+    height: 1.5rem;
+    width: 100%;
+    border-bottom: 1px solid #cecece;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    box-sizing: border-box;
+    position: relative;
+    .back {
+      width: 0.3rem;
+      height: 0.3rem;
+      border-top: 2px solid #000000;
+      border-left: 2px solid #000000;
+      position: absolute;
+      transform: rotate(-45deg) translateY(-50%);
+      top: 47%;
+      left: 0.8rem;
+      cursor: pointer;
+    }
+    .title {
+      font-size: 16px;
+    }
+    .btn {
+      font-size: 14px;
+      transform: translateY(-50%);
+      top: 50%;
+      right: 0.8rem;
+      position: absolute;
+      color: #2274ff;
+      cursor: pointer;
+    }
+  }
+  .cp-box {
+    width: 100%;
+    height: calc(100% - 1.5rem);
+    overflow: auto;
+    .type-nav {
+      height: 60px;
+      width: 100%;
+      display: flex;
+      align-items: center;
+      padding: 10px 0.3rem;
+      box-sizing: border-box;
+
+      .type-nav-box {
+        height: 100%;
+        opacity: 0.5;
+        transition: all 0.5s;
+
+        + .type-nav-box {
+          margin-left: 0.3rem;
+        }
+
+        &.active {
+          opacity: 1;
+        }
+        > img {
+          height: 100%;
+        }
+      }
+    }
+    .cp-quest {
+      width: 100%;
+      padding: 10px 15px;
+      font-size: 18px;
+      word-break: break-all;
+      box-sizing: border-box;
+    }
+    .cp-conent {
+      // margin-top: 10px;
+      height: auto;
+      overflow: auto;
+      font-size: 14px;
+      width: 100%;
+      /deep/ .van-field__control {
+        // height: auto !important;
+      }
+      .askBox {
+        padding: 0.26667rem 0.4rem;
+        .askTitle {
+          display: flex;
+        }
+        .askBody {
+          margin-top: 10px;
+          /deep/.redioStyle {
+            margin-bottom: 10px;
+          }
+        }
+      }
+    }
+    .cp-audio {
+      height: calc(100% - 60px);
+      position: relative;
+      width: 100%;
+    }
+  }
+}
+</style>

+ 378 - 0
src/views/course/components/choosePanel.vue

@@ -0,0 +1,378 @@
+<template>
+  <div class="cp-container" v-if="panelVisible">
+    <div class="cp-title">
+      <span class="back" @click="back"></span>
+      <span class="title" v-if="isTeacher">选择题作业</span>
+      <span class="title" v-else>选择题作业-{{ sStudent.student }}</span>
+      <span class="btn" v-if="type == 1" @click="addPz(type)">提交</span>
+    </div>
+    <div class="cp-box">
+      <div class="cp-conent" v-if="type == 1">
+        <div v-for="(item, index) in chooseJson.testJson.testCount" :key="index" class="askBox">
+          <div class="askTitle">
+            {{ index + 1 + '、' }}
+            <div v-if="chooseJson.testJson.testJson[index].type == '1'" style="margin-right: 5px; min-width: 70px">
+              (单选题)
+            </div>
+            <div v-if="chooseJson.testJson.testJson[index].type == '2'" style="margin-right: 5px; min-width: 70px">
+              (多选题)
+            </div>
+            <div>题目:{{ chooseJson.testJson.testJson[index].teststitle }}</div>
+          </div>
+          <img
+            v-if="chooseJson.testJson.testJson[index].img"
+            :src="chooseJson.testJson.testJson[index].img"
+            style="height: 300px; margin-top: 10px; max-width: 100%"
+          />
+          <div
+            class="timuImgBox"
+            v-if="chooseJson.testJson.testJson[index].timuList && chooseJson.testJson.testJson[index].timuList.length"
+          >
+            <div
+              v-for="(timg, tIndex) in chooseJson.testJson.testJson[index].timuList"
+              :key="tIndex"
+              class="timuImg"
+              @click.stop="previewImg(timg.src)"
+            >
+              <img :src="timg.src" alt="" />
+            </div>
+          </div>
+          <div class="askBody">
+            <el-radio-group v-model="radio[index]" v-if="chooseJson.testJson.testJson[index].type == '1'">
+              <div class="radioBox">
+                <el-radio
+                  v-for="(item1, checkIndex1) in chooseJson.testJson.testJson[index].checkList"
+                  :key="checkIndex1"
+                  :label="checkIndex1"
+                  class="redioStyle"
+                >
+                  <div style="margin-right: 10px" v-if="item1 && item1.imgType && item1.imgType == 1">
+                    <div class="inImg" @click.stop="previewImg(item1.src)">
+                      <img :src="item1.src" alt="" />
+                    </div>
+                  </div>
+                  <span v-else v-html="item1"></span>
+                </el-radio>
+              </div>
+            </el-radio-group>
+            <el-checkbox-group v-model="radio[index]" v-if="chooseJson.testJson.testJson[index].type == '2'">
+              <div class="radioBox">
+                <el-checkbox
+                  v-for="(item2, checkIndex2) in chooseJson.testJson.testJson[index].checkList"
+                  :key="checkIndex2"
+                  :label="checkIndex2"
+                  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>
+</template>
+
+<script>
+import { addCourseWorks, addCourseWorksTeacher } from '@/api/course'
+import { mapGetters } from 'vuex'
+
+export default {
+  props: {
+    panelVisible: {
+      type: Boolean
+    },
+    courseid: {
+      type: String,
+      default: ''
+    },
+    courseType: {
+      type: Number,
+      default: 0
+    },
+    taskCount: {
+      type: Number,
+      default: 0
+    },
+    toolindex: {
+      type: Number
+    },
+    isTeacher: {
+      type: Boolean
+    },
+    chooseJson: {
+      type: Object
+    },
+    sStudent: {
+      type: Object
+    }
+  },
+  components: {},
+  data() {
+    return {
+      type: 1,
+      message: '',
+      imgList: [],
+      radio: [],
+      chooseList: []
+    }
+  },
+  computed: {
+    ...mapGetters(['userinfo'])
+  },
+  mounted() {
+    for (var k = 0; k < this.chooseJson.testJson.testJson.length; k++) {
+      if (this.chooseJson.testJson.testJson[k].type == '2') {
+        this.radio.push([])
+      } else {
+        this.radio.push('')
+      }
+    }
+  },
+  methods: {
+    back() {
+      this.$emit('setChoosePanelVisible', false)
+    },
+    previewImg(url) {
+      this.$hevueImgPreview(url)
+    },
+    setType(type) {
+      this.type = type
+    },
+    getImage(imgList) {
+      this.imgList = imgList
+      this.$forceUpdate()
+    },
+    addPz() {
+      if (!this.radio.length) {
+        this.$message.error('请选择选项')
+        return
+      }
+      for (var i = 0; i < this.chooseJson.testJson.testCount; i++) {
+        if ((this.radio[i] instanceof Array && !this.radio[i].length) || (this.radio[i] !== 0 && !this.radio[i])) {
+          this.$message.error('请选择选项')
+          return
+        }
+      }
+      const fun = [addCourseWorks, addCourseWorksTeacher]
+      const chooseList = [
+        {
+          chooseJson: this.chooseJson,
+          anwer: this.radio
+        }
+      ]
+      let params = []
+      if (this.isTeacher) {
+        params = [
+          {
+            uid: this.userinfo.userid,
+            cid: this.courseid,
+            stage: this.courseType,
+            task: this.taskCount,
+            tool: this.toolindex,
+            content: JSON.stringify(chooseList).replaceAll(/%/g, '%25'),
+            type: 8
+          }
+        ]
+      } else {
+        params = [
+          {
+            uid: this.sStudent.userid,
+            cid: this.courseid,
+            stage: this.courseType,
+            task: this.taskCount,
+            tool: this.toolindex,
+            content: JSON.stringify(chooseList),
+            type: 8,
+            ateacher: this.userinfo.userid
+          }
+        ]
+      }
+      fun[this.isTeacher ? 0 : 1](params)
+        .then(res => {
+          this.$toast({
+            message: '上传成功',
+            type: 'success'
+          })
+          this.$emit('setChoosePanelVisible', false)
+        })
+        .catch(err => {
+          console.error(err)
+        })
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.cp-container {
+  width: 100vw;
+  height: 100vh;
+  position: fixed;
+  top: 0;
+  left: 0;
+  background: #fff;
+  z-index: 2;
+  .cp-title {
+    height: 1.5rem;
+    width: 100%;
+    border-bottom: 1px solid #cecece;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    box-sizing: border-box;
+    position: relative;
+    .back {
+      width: 0.3rem;
+      height: 0.3rem;
+      border-top: 2px solid #000000;
+      border-left: 2px solid #000000;
+      position: absolute;
+      transform: rotate(-45deg) translateY(-50%);
+      top: 47%;
+      left: 0.8rem;
+      cursor: pointer;
+    }
+    .title {
+      font-size: 16px;
+    }
+    .btn {
+      font-size: 14px;
+      transform: translateY(-50%);
+      top: 50%;
+      right: 0.8rem;
+      position: absolute;
+      color: #2274ff;
+      cursor: pointer;
+    }
+  }
+  .cp-box {
+    width: 100%;
+    height: calc(100% - 1.5rem);
+    overflow: auto;
+    .type-nav {
+      height: 60px;
+      width: 100%;
+      display: flex;
+      align-items: center;
+      padding: 10px 0.3rem;
+      box-sizing: border-box;
+
+      .type-nav-box {
+        height: 100%;
+        opacity: 0.5;
+        transition: all 0.5s;
+
+        + .type-nav-box {
+          margin-left: 0.3rem;
+        }
+
+        &.active {
+          opacity: 1;
+        }
+        > img {
+          height: 100%;
+        }
+      }
+    }
+    .cp-quest {
+      width: 100%;
+      padding: 10px 15px;
+      font-size: 18px;
+      word-break: break-all;
+      box-sizing: border-box;
+    }
+    .cp-conent {
+      // margin-top: 10px;
+      height: auto;
+      overflow: auto;
+      font-size: 14px;
+      width: 100%;
+      /deep/ .van-field__control {
+        // height: auto !important;
+      }
+      .askBox {
+        padding: 0.26667rem 0.4rem;
+        .askTitle {
+          display: flex;
+        }
+        .askBody {
+          margin-top: 10px;
+          /deep/.redioStyle {
+            margin-bottom: 10px;
+            display: flex;
+            flex-direction: row;
+            flex-wrap: nowrap;
+            align-items: center;
+          }
+          .radioBox {
+            display: flex;
+            flex-direction: column;
+            flex-wrap: nowrap;
+            align-items: flex-start;
+          }
+
+          .radioBox > div {
+            margin: 10px 0 0 10px;
+          }
+
+          .radioBox >>> .el-radio__label,
+          .radioBox >>> .el-checkbox__label {
+            display: flex;
+            align-items: center;
+          }
+
+          .radioBox >>> .el-radio__label > span {
+            width: 100%;
+            display: -webkit-box;
+            overflow: hidden;
+            white-space: normal !important;
+            text-overflow: ellipsis;
+            word-wrap: break-word;
+          }
+          .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: 150px;
+          margin: 5px 0;
+          cursor: pointer;
+        }
+
+        .timuImg > img {
+          width: 100%;
+          height: 100%;
+          object-fit: cover;
+        }
+      }
+    }
+    .cp-audio {
+      height: calc(100% - 60px);
+      position: relative;
+      width: 100%;
+    }
+  }
+}
+</style>

+ 71 - 11
src/views/course/components/stepsBox.vue

@@ -116,6 +116,30 @@
       :answerQ="answerQ"
       :sStudent="sStudent"
     ></answerPanel>
+    <askPanel
+      v-if="askPanelVisible"
+      @setAskPanelVisible="setAskPanelVisible"
+      :panelVisible="askPanelVisible"
+      :courseid="courseid"
+      :courseType="courseType"
+      :taskCount="taskCount"
+      :toolindex="toolindex"
+      :isTeacher="isTeacher"
+      :askJson="askJson"
+      :sStudent="sStudent"
+    ></askPanel>
+    <choosePanel
+      v-if="choosePanelVisible"
+      @setChoosePanelVisible="setChoosePanelVisible"
+      :panelVisible="choosePanelVisible"
+      :courseid="courseid"
+      :courseType="courseType"
+      :taskCount="taskCount"
+      :toolindex="toolindex"
+      :isTeacher="isTeacher"
+      :chooseJson="chooseJson"
+      :sStudent="sStudent"
+    ></choosePanel>
   </div>
 </template>
 
@@ -134,6 +158,8 @@ import { tools } from '@/const/index'
 import Works from './works.vue'
 import { mapGetters } from 'vuex'
 import answerPanel from './answerPanel.vue'
+import askPanel from './askPanel.vue'
+import choosePanel from './choosePanel.vue'
 
 export default {
   props: {
@@ -170,11 +196,19 @@ export default {
     },
     answerPanelVisible: {
       type: Boolean
+    },
+    askPanelVisible: {
+      type: Boolean
+    },
+    choosePanelVisible: {
+      type: Boolean
     }
   },
   components: {
     Works,
-    answerPanel
+    answerPanel,
+    askPanel,
+    choosePanel
   },
   data() {
     return {
@@ -184,7 +218,7 @@ export default {
       noWorksS: [],
       isWorkTool: [16, 32, 57, 4, 45, 15, 1, 3, 6, 7, 26, 41, 47, 48, 52, 50, 40, 63], //, 49
       canWork: [16, 50], //, 49
-      canWork2: [15],
+      canWork2: [15,4,45],
       fileType: 0,
       tools: tools,
       proVisible: false,
@@ -196,7 +230,9 @@ export default {
       sStudent: {},
       isTeacher: false,
       toolindex: 0,
-      answerQ: ''
+      answerQ: '',
+      askJson: {},
+      chooseJson: {}
     }
   },
   watch: {
@@ -218,7 +254,17 @@ export default {
       if (!newValue) {
         this.getWorks()
       }
-    }
+    },
+    askPanelVisible(newValue) {
+      if (!newValue) {
+        this.getWorks()
+      }
+    },
+    choosePanelVisible(newValue) {
+      if (!newValue) {
+        this.getWorks()
+      }
+    },
   },
   computed: {
     ...mapGetters(['userinfo']),
@@ -236,6 +282,12 @@ export default {
     setPanelVisible(bool) {
       this.$emit('update:answerPanelVisible', bool)
     },
+    setAskPanelVisible(bool) {
+      this.$emit('update:askPanelVisible', bool)
+    },
+    setChoosePanelVisible(bool) {
+      this.$emit('update:choosePanelVisible', bool)
+    },
     arrayToArray(arrayo, arrayt) {
       const array1 = arrayo
       const array2 = arrayt
@@ -540,7 +592,7 @@ export default {
                     wid: works[j].id,
                     works: works[j].content,
                     sName: works[j].name,
-                    type: 2,
+                    type: 4,
                     time: works[j].time,
                     score: works[j].score,
                     img: works[j].img,
@@ -851,7 +903,7 @@ export default {
         window.AWS.config.region = 'cn-northwest-1' // 设置区域
 
         // eslint-disable-next-line prettier/prettier
-        var bucket = new window.AWS.S3({ params: { Bucket: 'ccrb' }}) // 选择桶
+        var bucket = new window.AWS.S3({ params: { Bucket: 'ccrb' } }) // 选择桶
         var _this = this
         _this.progress = 0
         _this.proVisible = true
@@ -888,13 +940,13 @@ export default {
           }
           bucket
             .upload(params, options)
-            .on('httpUploadProgress', function(evt) {
+            .on('httpUploadProgress', function (evt) {
               // 这里可以写进度条
               // console.log("Uploaded : " + parseInt((evt.loaded * 80) / evt.total) + '%');
               _this.progress = parseInt((evt.loaded / evt.total) * 100)
               _this.isFinishSize = (evt.loaded / 1024 / 1024).toFixed(2)
             })
-            .send(function(err, data) {
+            .send(function (err, data) {
               _this.progress = 100
               _this.isFinishSize = _this.isAllSize
               if (cfindex2 === files.length - 1 || cfindex2 > files.length - 1) {
@@ -1000,7 +1052,7 @@ export default {
       window.AWS.config.region = 'cn-northwest-1' // 设置区域
 
       // eslint-disable-next-line prettier/prettier
-      var bucket = new window.AWS.S3({ params: { Bucket: 'ccrb' }}) // 选择桶
+      var bucket = new window.AWS.S3({ params: { Bucket: 'ccrb' } }) // 选择桶
       var _this = this
       _this.progress = 0
       _this.proVisible = true
@@ -1034,13 +1086,13 @@ export default {
         }
         bucket
           .upload(params, options)
-          .on('httpUploadProgress', function(evt) {
+          .on('httpUploadProgress', function (evt) {
             // 这里可以写进度条
             // console.log("Uploaded : " + parseInt((evt.loaded * 80) / evt.total) + '%');
             _this.progress = parseInt((evt.loaded / evt.total) * 100)
             _this.isFinishSize = (evt.loaded / 1024 / 1024).toFixed(2)
           })
-          .send(function(err, data) {
+          .send(function (err, data) {
             _this.progress = 100
             _this.isFinishSize = _this.isAllSize
             setTimeout(() => {
@@ -1275,6 +1327,14 @@ export default {
         this.isTeacher = true
         this.answerQ = content.answerQ
         this.setPanelVisible(true)
+      } else if (tool === 4) {
+        this.isTeacher = true
+        this.askJson = content
+        this.setAskPanelVisible(true)
+      }else if(tool == 45){
+        this.isTeacher = true
+        this.chooseJson = content
+        this.setChoosePanelVisible(true)
       }
     }
   },

+ 248 - 2
src/views/course/components/works.vue

@@ -10,7 +10,9 @@
         <img src="@/assets/images/works/answerBgNew.png" alt="" />
         <div class="anwerBox">{{ JSON.parse(work.works)[0].answer }}</div>
       </div>
-      <div class="work" v-else><img src="@/assets/images/works/noImg.png" alt="" /></div>
+      <div class="work" @click="lookAnswer(work.works, work.type)" v-else>
+        <img src="@/assets/images/works/noImg.png" alt="" />
+      </div>
     </div>
     <div class="s-name">
       <span>{{ work.sName }}</span>
@@ -39,6 +41,144 @@
         </div>
       </div>
     </van-overlay>
+    <van-overlay :show="askShow" @click="overlayAskShow" style="display: flex; align-items: center">
+      <div class="wrapper" @click.stop>
+        <div class="answerBox">
+          <div class="cancel" @click="overlayAskShow"></div>
+          <div class="box" v-if="Object.keys(askJson).length !== 0">
+            <div class="answerTitle">标题:{{ askJson.askJson.askTitle }}</div>
+            <div class="answerContent">
+              <div v-for="(item, index) in askJson.askJson.askCount" :key="index" class="askBox">
+                <div class="askT">
+                  {{ index + 1 + '、' }}
+                  <div>题目:{{ askJson.askJson.askJson[index].askstitle }}</div>
+                </div>
+                <img v-if="askJson.askJson.askJson[index].img" :src="askJson.askJson.askJson[index].img" />
+                <div class="askBody">
+                  <el-radio-group
+                    v-model="askRadio[index]"
+                    v-if="askJson.askJson.askJson[index].type == '1' || !askJson.askJson.askJson[index].type"
+                  >
+                    <el-radio
+                      v-for="(item1, checkIndex) in askJson.askJson.askJson[index].checkList"
+                      :key="checkIndex"
+                      :label="checkIndex"
+                      disabled
+                      class="redioStyle"
+                      ><span v-html="item1"></span
+                    ></el-radio>
+                  </el-radio-group>
+                  <el-checkbox-group v-model="askRadio[index]" v-if="askJson.askJson.askJson[index].type == '2'">
+                    <el-checkbox
+                      v-for="(item1, checkIndex) in askJson.askJson.askJson[index].checkList"
+                      :key="checkIndex"
+                      :label="checkIndex"
+                      disabled
+                      class="redioStyle"
+                      ><span v-html="item1"></span>
+                    </el-checkbox>
+                  </el-checkbox-group>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </van-overlay>
+    <van-overlay :show="chooseShow" @click="overlayChooseShow" style="display: flex; align-items: center">
+      <div class="wrapper" @click.stop>
+        <div class="answerBox">
+          <div class="cancel" @click="overlayChooseShow"></div>
+          <div class="box" v-if="Object.keys(chooseJson).length !== 0">
+            <div class="answerContent">
+              <div v-for="(item, index) in chooseJson.chooseJson.testJson.testCount" :key="index" class="askBox">
+                <div class="askTitle">
+                  {{ index + 1 + '、' }}
+                  <div
+                    v-if="chooseJson.chooseJson.testJson.testJson[index].type == '1'"
+                    style="margin-right: 5px; min-width: 70px"
+                  >
+                    (单选题)
+                  </div>
+                  <div
+                    v-if="chooseJson.chooseJson.testJson.testJson[index].type == '2'"
+                    style="margin-right: 5px; min-width: 70px"
+                  >
+                    (多选题)
+                  </div>
+                  <div>题目:{{ chooseJson.chooseJson.testJson.testJson[index].teststitle }}</div>
+                </div>
+                <img
+                  v-if="chooseJson.chooseJson.testJson.testJson[index].img"
+                  :src="chooseJson.chooseJson.testJson.testJson[index].img"
+                  style="height: 300px; margin-top: 10px; max-width: 100%"
+                />
+                <div
+                  class="timuImgBox"
+                  v-if="
+                    chooseJson.chooseJson.testJson.testJson[index].timuList &&
+                    chooseJson.chooseJson.testJson.testJson[index].timuList.length
+                  "
+                >
+                  <div
+                    v-for="(timg, tIndex) in chooseJson.chooseJson.testJson.testJson[index].timuList"
+                    :key="tIndex"
+                    class="timuImg"
+                    @click.stop="previewImg(timg.src)"
+                  >
+                    <img :src="timg.src" alt="" />
+                  </div>
+                </div>
+                <div class="askBody">
+                  <el-radio-group
+                    v-model="chooseRadio[index]"
+                    v-if="chooseJson.chooseJson.testJson.testJson[index].type == '1'"
+                  >
+                    <div class="radioBox">
+                      <el-radio
+                        v-for="(item1, checkIndex1) in chooseJson.chooseJson.testJson.testJson[index].checkList"
+                        :key="checkIndex1"
+                        :label="checkIndex1"
+                        disabled
+                        class="redioStyle"
+                      >
+                        <div style="margin-right: 10px" v-if="item1 && item1.imgType && item1.imgType == 1">
+                          <div class="inImg" @click.stop="previewImg(item1.src)">
+                            <img :src="item1.src" alt="" />
+                          </div>
+                        </div>
+                        <span v-else v-html="item1"></span>
+                      </el-radio>
+                    </div>
+                  </el-radio-group>
+                  <el-checkbox-group
+                    v-model="chooseRadio[index]"
+                    v-if="chooseJson.chooseJson.testJson.testJson[index].type == '2'"
+                  >
+                    <div class="radioBox">
+                      <el-checkbox
+                        v-for="(item2, checkIndex2) in chooseJson.chooseJson.testJson.testJson[index].checkList"
+                        :key="checkIndex2"
+                        :label="checkIndex2"
+                        disabled
+                        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>
+      </div>
+    </van-overlay>
   </div>
 </template>
 
@@ -80,7 +220,13 @@ export default {
       show: false,
       playerO: {},
       answerShow: false,
-      answerJson: {}
+      askShow: false,
+      chooseShow: false,
+      answerJson: {},
+      askJson: {},
+      chooseJson: {},
+      askRadio: [],
+      chooseRadio: []
     }
   },
   computed: {
@@ -100,6 +246,9 @@ export default {
       // ImagePreview([src]);
       this.$hevueImgPreview({ url: src, clickMaskCLose: true })
     },
+    previewImg(url) {
+      this.$hevueImgPreview(url)
+    },
     mediaPreview(file) {
       console.log(file)
       this.show = true
@@ -113,11 +262,37 @@ export default {
     overlayAnswerShow() {
       this.answerShow = false
     },
+    overlayAskShow() {
+      this.askShow = false
+    },
+    overlayChooseShow() {
+      this.chooseShow = false
+    },
     onPlayerCanplay() {},
     onPlayerPlay() {},
     checkAnswer(work) {
       this.answerJson = JSON.parse(work)[0]
       this.answerShow = true
+    },
+    lookAnswer(work, t) {
+      var a = JSON.parse(work)[0]
+      if (t == 4) {
+        this.askJson = a
+        if (a.anwer instanceof Array) {
+          this.askRadio = a.anwer
+        } else {
+          this.askRadio.push(parseInt(a.anwer))
+        }
+        this.askShow = true
+      } else if (t == 8) {
+        this.chooseJson = a
+        if (a.anwer instanceof Array) {
+          this.chooseRadio = a.anwer
+        } else {
+          this.chooseRadio.push(parseInt(a.anwer))
+        }
+        this.chooseShow = true
+      }
     }
   }
 }
@@ -214,6 +389,77 @@ export default {
           word-break: break-all;
           font-size: 18px;
           margin-top: 15px;
+          .askBox {
+            padding: 0.26667rem 0.4rem;
+            .askT,
+            .askTitle {
+              display: flex;
+            }
+            .askBody {
+              margin-top: 10px;
+              /deep/.redioStyle {
+                margin-bottom: 10px;
+                display: flex;
+                flex-direction: row;
+                flex-wrap: nowrap;
+                align-items: center;
+              }
+              .radioBox {
+                display: flex;
+                flex-direction: column;
+                flex-wrap: nowrap;
+                align-items: flex-start;
+              }
+
+              .radioBox > div {
+                margin: 10px 0 0 10px;
+              }
+
+              .radioBox >>> .el-radio__label,
+              .radioBox >>> .el-checkbox__label {
+                display: flex;
+                align-items: center;
+              }
+
+              .radioBox >>> .el-radio__label > span {
+                width: 100%;
+                display: -webkit-box;
+                overflow: hidden;
+                white-space: normal !important;
+                text-overflow: ellipsis;
+                word-wrap: break-word;
+              }
+              .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: 150px;
+              margin: 5px 0;
+              cursor: pointer;
+            }
+
+            .timuImg > img {
+              width: 100%;
+              height: 100%;
+              object-fit: cover;
+            }
+          }
         }
       }
     }

+ 6 - 2
src/views/course/index.vue

@@ -12,7 +12,7 @@
       </template>
     </head-bar>
     <div class="course-box" ref="cBox">
-      <van-pull-refresh v-model="isLoading" @refresh="onRefresh" :disabled="panelVisible || answerPanelVisible">
+      <van-pull-refresh v-model="isLoading" @refresh="onRefresh" :disabled="panelVisible || answerPanelVisible || askPanelVisible">
         <course-title :chapInfo="chapInfo" :courseType="courseType" :taskCount="taskCount"></course-title>
         <course-content-list v-if="false"></course-content-list>
         <div class="course-type-box">
@@ -31,6 +31,8 @@
           <steps-box
             v-show="type == 1"
             :answerPanelVisible.sync="answerPanelVisible"
+            :askPanelVisible.sync="askPanelVisible"
+            :choosePanelVisible.sync="choosePanelVisible"
             :courseDetail="courseDetail"
             :chapInfo="chapInfo"
             :courseType="courseType"
@@ -115,7 +117,9 @@ export default {
       navVisible: false,
       isLoading: false,
       panelVisible: false,
-      answerPanelVisible: false
+      answerPanelVisible: false,
+      askPanelVisible:false,
+      choosePanelVisible:false
     }
   },
   methods: {

Niektoré súbory nie sú zobrazené, pretože je v týchto rozdielových dátach zmenené mnoho súborov