Преглед изворни кода

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

zengyicheng пре 1 година
родитељ
комит
6b50ef1873
40 измењених фајлова са 672 додато и 218 уклоњено
  1. 1 1
      dist/index.html
  2. 0 0
      dist/static/css/app.18480d37189981f655820af0fd4b57eb.css
  3. 0 0
      dist/static/css/app.18480d37189981f655820af0fd4b57eb.css.map
  4. 0 0
      dist/static/css/app.688d051224fbc839c601ed88c7fdadb6.css.map
  5. BIN
      dist/static/img/add_check_icon_active.de065e2.png
  6. BIN
      dist/static/img/add_edit_icon.7184d1d.png
  7. 0 0
      dist/static/js/app.0a147c1dd65b9883e0e7.js
  8. 0 0
      dist/static/js/app.8338eae5fb24e54e17d0.js
  9. 0 0
      dist/static/js/app.8338eae5fb24e54e17d0.js.map
  10. 0 0
      dist/static/js/manifest.3512a67a6213c2df4180.js.map
  11. 76 0
      src/assets/css/button.css
  12. BIN
      src/assets/icon/test/add_check_icon.png
  13. BIN
      src/assets/icon/test/add_check_icon_active.png
  14. BIN
      src/assets/icon/test/add_edit_icon.png
  15. BIN
      src/assets/icon/test/add_edit_icon_active.png
  16. BIN
      src/assets/icon/test/drag_icon.png
  17. BIN
      src/assets/icon/test/drag_icon_active.png
  18. BIN
      src/assets/icon/test/type_check_icon.png
  19. BIN
      src/assets/icon/test/type_file_icon.png
  20. BIN
      src/assets/icon/test/type_group_icon.png
  21. BIN
      src/assets/icon/test/type_page_icon.png
  22. BIN
      src/assets/icon/test/type_text_icon.png
  23. 9 7
      src/components/pages/test/add/addTest.vue
  24. 5 2
      src/components/pages/test/add/components/GapFilling/gap.vue
  25. 10 9
      src/components/pages/test/add/components/GapFilling/index.vue
  26. 78 34
      src/components/pages/test/add/components/checkOrder.vue
  27. 4 1
      src/components/pages/test/add/components/choice/choice.vue
  28. 13 6
      src/components/pages/test/add/components/choice/index.vue
  29. 4 1
      src/components/pages/test/add/components/file/file.vue
  30. 8 8
      src/components/pages/test/add/components/file/index.vue
  31. 1 1
      src/components/pages/test/add/edit/check/gap.vue
  32. 76 49
      src/components/pages/test/add/edit/edit/index.vue
  33. 92 11
      src/components/pages/test/add/edit/index.vue
  34. 24 4
      src/components/pages/test/add/setInfo/manualCreated.vue
  35. 6 1
      src/components/pages/test/check/check.vue
  36. 142 64
      src/components/pages/test/index.vue
  37. 97 16
      src/components/pages/testStudent/index.vue
  38. 7 2
      src/components/pages/testStudent/view/check.vue
  39. 13 0
      src/components/pages/testStudent/view/component/topic.vue
  40. 6 1
      src/components/pages/testStudent/view/preview.vue

+ 1 - 1
dist/index.html

@@ -25,7 +25,7 @@
       height: 100%;
       height: 100%;
       width: 100%;
       width: 100%;
       background: #e6eaf0;
       background: #e6eaf0;
-    }</style><link href=./static/css/app.688d051224fbc839c601ed88c7fdadb6.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.3512a67a6213c2df4180.js></script><script type=text/javascript src=./static/js/vendor.b01159b52abeac4e6216.js></script><script type=text/javascript src=./static/js/app.0a147c1dd65b9883e0e7.js></script></body></html><script>function stopSafari() {
+    }</style><link href=./static/css/app.18480d37189981f655820af0fd4b57eb.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.3512a67a6213c2df4180.js></script><script type=text/javascript src=./static/js/vendor.b01159b52abeac4e6216.js></script><script type=text/javascript src=./static/js/app.8338eae5fb24e54e17d0.js></script></body></html><script>function stopSafari() {
     //阻止safari浏览器双击放大功能
     //阻止safari浏览器双击放大功能
     let lastTouchEnd = 0  //更新手指弹起的时间
     let lastTouchEnd = 0  //更新手指弹起的时间
     document.documentElement.addEventListener("touchstart", function (event) {
     document.documentElement.addEventListener("touchstart", function (event) {

Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/static/css/app.18480d37189981f655820af0fd4b57eb.css


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/static/css/app.18480d37189981f655820af0fd4b57eb.css.map


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/static/css/app.688d051224fbc839c601ed88c7fdadb6.css.map


BIN
dist/static/img/add_check_icon_active.de065e2.png


BIN
dist/static/img/add_edit_icon.7184d1d.png


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/static/js/app.0a147c1dd65b9883e0e7.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/static/js/app.8338eae5fb24e54e17d0.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/static/js/app.8338eae5fb24e54e17d0.js.map


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/static/js/manifest.3512a67a6213c2df4180.js.map


+ 76 - 0
src/assets/css/button.css

@@ -243,3 +243,79 @@
   margin-right: 7px;
   margin-right: 7px;
   background-image: url(../icon/new/upload.png);
   background-image: url(../icon/new/upload.png);
 }
 }
+
+
+.pub_test_btn {
+  color: #101010;
+  background-color: rgb(240, 242, 245);
+  padding: 8px 10px;
+  font-size: 14px;
+  min-width: 90px;
+  font-weight: 500;
+  border-radius: 4px;
+  box-sizing: border-box;
+  border: none;
+  cursor: pointer;
+  transition: all 0.2s ease-in-out;
+  display: flex;
+  align-items: center;
+  justify-content: left;
+  line-height: 1;
+}
+
+.pub_test_btn:has(+.pub_test_btn) {
+  margin-right: 10px;
+}
+
+.pub_test_btn_text::before,
+.pub_test_btn_choose::before,
+.pub_test_btn_page::before,
+.pub_test_btn_group::before,
+.pub_test_btn_file::before {
+  content: "";
+  width: 14px;
+  height: 14px;
+  min-width: 14px;
+  min-height: 14px;
+  background-size: 100% 100%;
+  display: block;
+  margin-right: 7px;
+}
+
+
+.pub_test_btn_text::before {
+  background-image: url(../icon/test/type_text_icon.png);
+}
+.pub_test_btn_choose::before {
+  background-image: url(../icon/test/type_check_icon.png);
+}
+.pub_test_btn_file::before {
+  background-image: url(../icon/test/type_file_icon.png);
+}
+.pub_test_btn_page::before {
+  background-image: url(../icon/test/type_page_icon.png);
+}
+.pub_test_btn_group::before {
+  background-image: url(../icon/test/type_group_icon.png);
+}
+
+.test_icon{
+  display: inline-block;
+  width: 18px;
+  height: 18px;
+  background-size: 100% 100%;
+  cursor: pointer;
+  position: relative;
+  top: 3px;
+  margin-right: 5px;
+}
+
+.test_icon_check{
+  background-image: url('../icon/test/type_check_icon.png');
+}
+.test_icon_gap{
+  background-image: url('../icon/test/type_text_icon.png');
+}
+.test_icon_file{
+  background-image: url('../icon/test/type_file_icon.png');
+}

BIN
src/assets/icon/test/add_check_icon.png


BIN
src/assets/icon/test/add_check_icon_active.png


BIN
src/assets/icon/test/add_edit_icon.png


BIN
src/assets/icon/test/add_edit_icon_active.png


BIN
src/assets/icon/test/drag_icon.png


BIN
src/assets/icon/test/drag_icon_active.png


BIN
src/assets/icon/test/type_check_icon.png


BIN
src/assets/icon/test/type_file_icon.png


BIN
src/assets/icon/test/type_group_icon.png


BIN
src/assets/icon/test/type_page_icon.png


BIN
src/assets/icon/test/type_text_icon.png


+ 9 - 7
src/components/pages/test/add/addTest.vue

@@ -154,7 +154,7 @@ export default {
                         );
                         );
                     }
                     }
                     setTimeout(() => {
                     setTimeout(() => {
-                        this.getData();
+                        this.getData(2);
                     }, 1000);
                     }, 1000);
                 })
                 })
                 .catch((err) => {
                 .catch((err) => {
@@ -214,7 +214,7 @@ export default {
                         );
                         );
                     }
                     }
                     setTimeout(() => {
                     setTimeout(() => {
-                        this.getData();
+                        this.getData(2);
                     }, 1000);
                     }, 1000);
                 })
                 })
                 .catch((err) => {
                 .catch((err) => {
@@ -222,11 +222,13 @@ export default {
                     console.error(err);
                     console.error(err);
                 });
                 });
         },
         },
-        getData() {
+        getData(type) {
             if (this.cid == "" || this.cid == undefined) {
             if (this.cid == "" || this.cid == undefined) {
                 console.log("这是新增课程");
                 console.log("这是新增课程");
             } else {
             } else {
-                this.loading = true
+                if(type != 2){
+                    this.loading = true
+                }
                 let params = {
                 let params = {
                     cid: this.cid,
                     cid: this.cid,
                 };
                 };
@@ -234,7 +236,6 @@ export default {
                     .get(this.$store.state.api + "getTestCourseDetail", params)
                     .get(this.$store.state.api + "getTestCourseDetail", params)
                     .then((res) => {
                     .then((res) => {
                         this.cJson = JSON.parse(res.data[0][0].chapters);
                         this.cJson = JSON.parse(res.data[0][0].chapters);
-                        this.$forceUpdate();
                         this.title = res.data[0][0].title;
                         this.title = res.data[0][0].title;
 
 
                         this.see = res.data[0][0].open == 1 ? true : false;
                         this.see = res.data[0][0].open == 1 ? true : false;
@@ -248,8 +249,9 @@ export default {
                         console.log(this.testType);
                         console.log(this.testType);
                         this.look = res.data[0][0].look
                         this.look = res.data[0][0].look
                         this.$forceUpdate()
                         this.$forceUpdate()
-                        this.loading = false
-
+                        if(type != 2){
+                            this.loading = false
+                        }
                     })
                     })
                     .catch((err) => {
                     .catch((err) => {
                         console.error(err);
                         console.error(err);

+ 5 - 2
src/components/pages/test/add/components/GapFilling/gap.vue

@@ -10,7 +10,7 @@
             </div>
             </div>
             <div class="choices">
             <div class="choices">
                 <textarea readonly rows="2" class="binfo_input binfo_textarea" cols
                 <textarea readonly rows="2" class="binfo_input binfo_textarea" cols
-                    placeholder=""></textarea>
+                    placeholder="填写者回答区"></textarea>
             </div>
             </div>
         </div>
         </div>
     </div>
     </div>
@@ -36,8 +36,11 @@ export default {
 
 
 <style scoped>
 <style scoped>
 .c_box {
 .c_box {
-    width: 100%;
+    width: calc(100% - 20px);
     position: relative;
     position: relative;
+    margin: 0 auto;
+    padding-left: 26px;
+    box-sizing: border-box;
 }
 }
 .mask{
 .mask{
     position: absolute;
     position: absolute;

+ 10 - 9
src/components/pages/test/add/components/GapFilling/index.vue

@@ -74,6 +74,7 @@ export default {
         checkJson: {
         checkJson: {
             handler(newVal) {
             handler(newVal) {
                 this.$emit("setJson", newVal)
                 this.$emit("setJson", newVal)
+                console.log('gapW', this.cJson);
             },
             },
             deep: true
             deep: true
         }
         }
@@ -110,17 +111,17 @@ export default {
         } else {
         } else {
             this.checkJson = this.depthCopy(this.cJson);
             this.checkJson = this.depthCopy(this.cJson);
         }
         }
-
+        console.log('gap', this.cJson);
     },
     },
 }
 }
 </script>
 </script>
 
 
 <style scoped>
 <style scoped>
 .choice_box {
 .choice_box {
-    margin-top: 20px;
+    margin-top: 10px;
     width: 100%;
     width: 100%;
-    background: #f6f6f6;
-    padding: 10px;
+    background: #f5f6f7;
+    padding: 10px 10px 10px 36px;
     box-sizing: border-box;
     box-sizing: border-box;
     position: relative;
     position: relative;
 }
 }
@@ -178,11 +179,11 @@ export default {
     font-family: 'Microsoft YaHei';
     font-family: 'Microsoft YaHei';
     min-height: 48px;
     min-height: 48px;
     /* border: 1px solid #3682fc00; */
     /* border: 1px solid #3682fc00; */
-    border: 1.5px solid #CAD1DC;
+    border: 1px solid #CAD1DC;
 }
 }
 
 
 .binfo_textarea {
 .binfo_textarea {
-    border: 1.5px solid #CAD1DC;
+    border: 1px solid #CAD1DC;
     font-size: 16px;
     font-size: 16px;
     resize: none;
     resize: none;
     /* background: #f6f6f6; */
     /* background: #f6f6f6; */
@@ -190,10 +191,10 @@ export default {
 }
 }
 
 
 .binfo_input:focus-visible {
 .binfo_input:focus-visible {
-    border: 1.5px solid #3681FC !important;
+    border: 1px solid #3681FC !important;
 }
 }
 
 
-.jiao::before{
+/* .jiao::before{
     content: '';
     content: '';
     position: absolute;
     position: absolute;
     width: 0px;
     width: 0px;
@@ -204,5 +205,5 @@ export default {
     border-right: 12px solid transparent;
     border-right: 12px solid transparent;
     border-bottom: 10px solid #f6f6f6;
     border-bottom: 10px solid #f6f6f6;
     border-top: 10px solid transparent;
     border-top: 10px solid transparent;
-}
+} */
 </style>
 </style>

+ 78 - 34
src/components/pages/test/add/components/checkOrder.vue

@@ -2,9 +2,10 @@
     <div class="co_box">
     <div class="co_box">
         <div v-for="(item1, index1) in this.checkJson" :key="index1" class="mc_ti_1" :draggable="isdrag == `${index1}`"
         <div v-for="(item1, index1) in this.checkJson" :key="index1" class="mc_ti_1" :draggable="isdrag == `${index1}`"
             :class="{ active: checkC === `x${index1}` }" @click.stop="checkTitle(`${index1}`, 1, item1)">
             :class="{ active: checkC === `x${index1}` }" @click.stop="checkTitle(`${index1}`, 1, item1)">
-            <div class="title" :style="{fontSize: etype == 'order' && '16px'}">
+            <div class="title" :style="{ fontSize: etype == 'order' && '16px' }">
                 <div class="drag" @mousedown="setDrag(`${index1}`)" @mouseup="isdrag = ''"></div>
                 <div class="drag" @mousedown="setDrag(`${index1}`)" @mouseup="isdrag = ''"></div>
-                <span>{{ selectType(item1, index1) }}</span>
+                <span class="content" v-html="selectType(item1, index1)"></span>
+                <!-- {{ selectType(item1, index1) }} -->
                 <div class="btnBox">
                 <div class="btnBox">
                     <!-- <div class="edit" @click.stop="editCheck(`${index1}`,item1)" v-if="item1.ttype == 1 && canEdit.indexOf(item1.type) !== -1 && etype == 'edit'"></div> -->
                     <!-- <div class="edit" @click.stop="editCheck(`${index1}`,item1)" v-if="item1.ttype == 1 && canEdit.indexOf(item1.type) !== -1 && etype == 'edit'"></div> -->
                     <div class="delete" @click.stop="deleteCheck(`${index1}`)"></div>
                     <div class="delete" @click.stop="deleteCheck(`${index1}`)"></div>
@@ -16,9 +17,9 @@
                 <div v-for="(item2, index2) in item1.array" :key="`${index1}-${index2}`" class="mc_ti_2"
                 <div v-for="(item2, index2) in item1.array" :key="`${index1}-${index2}`" class="mc_ti_2"
                     :draggable="isdrag == `${index1}-${index2}`" :class="{ active: checkC === `x${index1}-${index2}` }"
                     :draggable="isdrag == `${index1}-${index2}`" :class="{ active: checkC === `x${index1}-${index2}` }"
                     @click.stop="checkTitle(`${index1}-${index2}`, 2, item2)">
                     @click.stop="checkTitle(`${index1}-${index2}`, 2, item2)">
-                    <div class="title" :style="{fontSize: etype == 'order' && '16px'}">
+                    <div class="title" :style="{ fontSize: etype == 'order' && '16px' }">
                         <div class="drag" @mousedown="setDrag(`${index1}-${index2}`)" @mouseup="isdrag = ''"></div>
                         <div class="drag" @mousedown="setDrag(`${index1}-${index2}`)" @mouseup="isdrag = ''"></div>
-                        <span>{{ selectType(item2, index2) }}</span>
+                        <span class="content" v-html="selectType(item2, index2)"></span>
                         <div class="btnBox">
                         <div class="btnBox">
                             <!-- <div class="edit" @click.stop="editCheck(`${index1}-${index2}`,item2)" v-if="item2.ttype == 1 && canEdit.indexOf(item2.type) !== -1 && etype == 'edit'"></div> -->
                             <!-- <div class="edit" @click.stop="editCheck(`${index1}-${index2}`,item2)" v-if="item2.ttype == 1 && canEdit.indexOf(item2.type) !== -1 && etype == 'edit'"></div> -->
                             <div class="delete" @click.stop="deleteCheck(`${index1}-${index2}`)"></div>
                             <div class="delete" @click.stop="deleteCheck(`${index1}-${index2}`)"></div>
@@ -31,10 +32,10 @@
                             :draggable="isdrag == `${index1}-${index2}-${index3}`"
                             :draggable="isdrag == `${index1}-${index2}-${index3}`"
                             :class="{ active: checkC === `x${index1}-${index2}-${index3}` }"
                             :class="{ active: checkC === `x${index1}-${index2}-${index3}` }"
                             @click.stop="checkTitle(`${index1}-${index2}-${index3}`, 3, item3)">
                             @click.stop="checkTitle(`${index1}-${index2}-${index3}`, 3, item3)">
-                            <div class="title" :style="{fontSize: etype == 'order' && '16px'}">
+                            <div class="title" :style="{ fontSize: etype == 'order' && '16px' }">
                                 <div class="drag" @mousedown="setDrag(`${index1}-${index2}-${index3}`)"
                                 <div class="drag" @mousedown="setDrag(`${index1}-${index2}-${index3}`)"
                                     @mouseup="isdrag = ''"></div>
                                     @mouseup="isdrag = ''"></div>
-                                <span>{{ selectType(item3, index3) }}</span>
+                                <span class="content" v-html="selectType(item3, index3)"></span>
                                 <div class="btnBox">
                                 <div class="btnBox">
                                     <!-- <div class="edit" @click.stop="editCheck(`${index1}-${index2}-${index3}`,item3)" v-if="item3.ttype == 1 && canEdit.indexOf(item3.type) !== -1 && etype == 'edit'"></div> -->
                                     <!-- <div class="edit" @click.stop="editCheck(`${index1}-${index2}-${index3}`,item3)" v-if="item3.ttype == 1 && canEdit.indexOf(item3.type) !== -1 && etype == 'edit'"></div> -->
                                     <div class="delete" @click.stop="deleteCheck(`${index1}-${index2}-${index3}`)"></div>
                                     <div class="delete" @click.stop="deleteCheck(`${index1}-${index2}-${index3}`)"></div>
@@ -133,6 +134,9 @@ export default {
         etype: {
         etype: {
             type: String,
             type: String,
             default: ""
             default: ""
+        },
+        cJson:{
+            type:Object,
         }
         }
     },
     },
     data() {
     data() {
@@ -141,14 +145,22 @@ export default {
             isdrag: "",
             isdrag: "",
             canEdit: [1, 3, 5],
             canEdit: [1, 3, 5],
             ctype: "",
             ctype: "",
-            cJson: {}
+            // cJson: {}
         }
         }
     },
     },
     computed: {
     computed: {
         selectType() {
         selectType() {
             return function (item, index) {
             return function (item, index) {
                 if (item.ttype == 1) {
                 if (item.ttype == 1) {
-                    return index + 1 + "、" + this.options2[item.type] + (item.json && this.etype != 'edit' ? `:${item.json.title}` : "");
+                    let className = "test_icon"
+                    if(item.type == 1){
+                        className += " test_icon_check"
+                    }else if(item.type == 3){
+                        className += " test_icon_gap"
+                    }else if(item.type == 5){
+                        className += " test_icon_file"
+                    }
+                    return index + 1 + "、" + (item.json && this.etype != 'edit' ? `<span class='${className}'></span>` : `<span class='${className}'></span>`+this.options2[item.type]) + (item.json && this.etype != 'edit' ? `${item.json.title}` : "");
                 } else if (item.ttype == 2) {
                 } else if (item.ttype == 2) {
                     return `第${index + 1}组 (共${item.array.length}题)`;
                     return `第${index + 1}组 (共${item.array.length}题)`;
                 } else if (item.ttype == 3) {
                 } else if (item.ttype == 3) {
@@ -181,25 +193,32 @@ export default {
             this.$emit("changeJson", this.manualJson);
             this.$emit("changeJson", this.manualJson);
         },
         },
         checkTitle(index, type, item) {
         checkTitle(index, type, item) {
+            let _index = index.split("-");
+            let cJson = {}
+            if (type == 1 && item.ttype == 1) {
+                cJson = this.manualJson[_index[0]].json ? JSON.parse(JSON.stringify(this.manualJson[_index[0]].json)) : '';
+            } else if (type == 2 && item.ttype == 1) {
+                cJson = this.manualJson[_index[0]].array[_index[1]].json ? JSON.parse(JSON.stringify(this.manualJson[_index[0]].array[_index[1]].json)) : '';
+            } else if (type == 3 && item.ttype == 1) {
+                cJson = this.manualJson[_index[0]].array[_index[1]].array[_index[2]].json ? JSON.parse(JSON.stringify(this.manualJson[_index[0]].array[_index[1]].array[_index[2]].json)) : '';
+            }
+            // this.cJson = {type: type, index: _index, item: item}
+            // this.cJson = item.json;
+            this.$forceUpdate();
+            this.ctype = type
             if (this.checkC === "x" + index) {
             if (this.checkC === "x" + index) {
                 this.$emit("update:checkC", "")
                 this.$emit("update:checkC", "")
             } else {
             } else {
                 this.$emit("update:checkC", 'x' + index)
                 this.$emit("update:checkC", 'x' + index)
             }
             }
-            let _index = index.split("-");
-
-            this.ctype = type
-            if (this.ctype == 1 && item.ttype == 1) {
-                this.cJson = this.manualJson[_index[0]].json
-            } else if (this.ctype == 2 && item.ttype == 1) {
-                this.cJson = this.manualJson[_index[0]].array[_index[1]].json
-            } else if (this.ctype == 3 && item.ttype == 1) {
-                this.cJson = this.manualJson[_index[0]].array[_index[1]].array[_index[2]].json
-            }
+            this.$forceUpdate();
+            // console.log(this.cJson);
+            this.$emit("update:cJson", cJson)
         },
         },
         setJson(json) {
         setJson(json) {
             let _index = this.checkC.replace("x", "").split("-");
             let _index = this.checkC.replace("x", "").split("-");
-            this.cJson = json
+            // this.cJson = json
+            this.$emit("update:cJson", json)
             if (this.ctype == 1) {
             if (this.ctype == 1) {
                 this.manualJson[_index[0]].json = json
                 this.manualJson[_index[0]].json = json
             } else if (this.ctype == 2) {
             } else if (this.ctype == 2) {
@@ -267,10 +286,11 @@ export default {
 .mc_ti_1 {
 .mc_ti_1 {
     width: 100%;
     width: 100%;
     min-height: 40px;
     min-height: 40px;
-    border: 1px solid #bcbcbc;
-    padding: 10px;
+    /* border: 1px solid #bcbcbc00; */
+    padding: 10px 0 0;
     box-sizing: border-box;
     box-sizing: border-box;
     margin-bottom: 10px;
     margin-bottom: 10px;
+    overflow: hidden;
 }
 }
 
 
 
 
@@ -280,10 +300,12 @@ export default {
 }
 }
 
 
 .mc_ti_1>.title {
 .mc_ti_1>.title {
-    font-size: 20px;
+    font-size: 16px;
     cursor: pointer;
     cursor: pointer;
     display: flex;
     display: flex;
     align-items: center;
     align-items: center;
+    width: calc(100% - 20px);
+    margin: 0 auto 10px;
 }
 }
 
 
 .mc_ti_1_xia,
 .mc_ti_1_xia,
@@ -296,8 +318,9 @@ export default {
 .mc_ti_2 {
 .mc_ti_2 {
     width: 100%;
     width: 100%;
     box-sizing: border-box;
     box-sizing: border-box;
-    padding: 10px;
-    border: 1px solid #bcbcbc;
+    padding: 10px 0 0;
+    /* border: 1px solid #bcbcbc00; */
+    overflow: hidden;
 }
 }
 
 
 .mc_ti_2+.mc_ti_2 {
 .mc_ti_2+.mc_ti_2 {
@@ -306,18 +329,20 @@ export default {
 
 
 .mc_ti_2>.title {
 .mc_ti_2>.title {
     cursor: pointer;
     cursor: pointer;
-    font-size: 18px;
+    font-size: 16px;
     display: flex;
     display: flex;
     align-items: center;
     align-items: center;
     word-break: break-all;
     word-break: break-all;
+    width: calc(100% - 20px);
+    margin: 0 auto 10px;
 }
 }
 
 
-
 .mc_ti_3 {
 .mc_ti_3 {
-    padding: 10px;
+    padding: 10px 0 0;
     width: 100%;
     width: 100%;
     box-sizing: border-box;
     box-sizing: border-box;
-    border: 1px solid #bcbcbc;
+    /* border: 1px solid #bcbcbc00; */
+    overflow: hidden;
 }
 }
 
 
 .mc_ti_3+.mc_ti_3 {
 .mc_ti_3+.mc_ti_3 {
@@ -328,16 +353,19 @@ export default {
     cursor: pointer;
     cursor: pointer;
     display: flex;
     display: flex;
     align-items: center;
     align-items: center;
+    width: calc(100% - 20px);
+    margin: 0 auto 10px;
 }
 }
 
 
 .mc_ti_1>.title>.drag,
 .mc_ti_1>.title>.drag,
 .mc_ti_2>.title>.drag,
 .mc_ti_2>.title>.drag,
 .mc_ti_3>.title>.drag {
 .mc_ti_3>.title>.drag {
     display: block;
     display: block;
-    background-image: url('../../../../../assets/icon/new/icon_course_drag.png');
+    background-image: url('../../../../../assets/icon/test/drag_icon.png');
     background-size: 100% 100%;
     background-size: 100% 100%;
-    min-width: 20px;
-    min-height: 20px;
+    min-width: 16px;
+    min-height: 16px;
+    margin-right: 10px;
     cursor: pointer;
     cursor: pointer;
 }
 }
 
 
@@ -392,11 +420,27 @@ export default {
 .mc_ti_1.active,
 .mc_ti_1.active,
 .mc_ti_2.active,
 .mc_ti_2.active,
 .mc_ti_3.active {
 .mc_ti_3.active {
-    border: 1px solid #0062ff;
+    /* border: 1px solid #0062ff; */
+    background: rgb(239, 240, 241);
+}
+
+.mc_ti_1.active>.title>.drag,
+.mc_ti_2.active>.title>.drag,
+.mc_ti_3.active>.title>.drag {
+    background-image: url('../../../../../assets/icon/test/drag_icon_active.png');
+}
+
+.mc_ti_1>.title>.content,
+.mc_ti_2>.title>.content,
+.mc_ti_3>.title>.content {
+    word-break: break-all;
 }
 }
 
 
 .edit_box {
 .edit_box {
     width: 100%;
     width: 100%;
     box-sizing: border-box;
     box-sizing: border-box;
-    padding: 10px;
-}</style>
+    padding: 10px 0 0;
+}
+
+
+</style>

+ 4 - 1
src/components/pages/test/add/components/choice/choice.vue

@@ -34,8 +34,11 @@ export default {
 
 
 <style scoped>
 <style scoped>
 .c_box {
 .c_box {
-    width: 100%;
+    width: calc(100% - 20px);
     position: relative;
     position: relative;
+    margin: 0 auto;
+    padding-left: 26px;
+    box-sizing: border-box;
 }
 }
 .mask{
 .mask{
     position: absolute;
     position: absolute;

+ 13 - 6
src/components/pages/test/add/components/choice/index.vue

@@ -68,6 +68,13 @@ export default {
         checkJson: {
         checkJson: {
             handler(newVal) {
             handler(newVal) {
                 this.$emit("setJson", newVal)
                 this.$emit("setJson", newVal)
+                console.log('checkW',this.cJson);
+            },
+            deep: true
+        },
+        cJson: {
+            handler(newVal) {
+                console.log(newVal);
             },
             },
             deep: true
             deep: true
         }
         }
@@ -119,17 +126,17 @@ export default {
         } else {
         } else {
             this.checkJson = this.depthCopy(this.cJson);
             this.checkJson = this.depthCopy(this.cJson);
         }
         }
-
+        console.log('check',this.cJson);
     },
     },
 }
 }
 </script>
 </script>
 
 
 <style scoped>
 <style scoped>
 .choice_box {
 .choice_box {
-    margin-top: 20px;
+    margin-top: 10px;
     width: 100%;
     width: 100%;
-    background: #f6f6f6;
-    padding: 10px;
+    background: #f5f6f7;
+    padding: 10px 10px 10px 36px;
     box-sizing: border-box;
     box-sizing: border-box;
     position: relative;
     position: relative;
 }
 }
@@ -224,7 +231,7 @@ export default {
     margin-top: 10px;
     margin-top: 10px;
 }
 }
 
 
-.jiao::before{
+/* .jiao::before{
     content: '';
     content: '';
     position: absolute;
     position: absolute;
     width: 0px;
     width: 0px;
@@ -235,5 +242,5 @@ export default {
     border-right: 12px solid transparent;
     border-right: 12px solid transparent;
     border-bottom: 10px solid #f6f6f6;
     border-bottom: 10px solid #f6f6f6;
     border-top: 10px solid transparent;
     border-top: 10px solid transparent;
-}
+} */
 </style>
 </style>

+ 4 - 1
src/components/pages/test/add/components/file/file.vue

@@ -42,8 +42,11 @@ export default {
 
 
 <style scoped>
 <style scoped>
 .c_box {
 .c_box {
-    width: 100%;
+    width: calc(100% - 20px);
     position: relative;
     position: relative;
+    margin: 0 auto;
+    padding-left: 26px;
+    box-sizing: border-box;
 }
 }
 .mask{
 .mask{
     position: absolute;
     position: absolute;

+ 8 - 8
src/components/pages/test/add/components/file/index.vue

@@ -117,10 +117,10 @@ export default {
 
 
 <style scoped>
 <style scoped>
 .choice_box {
 .choice_box {
-    margin-top: 20px;
+    margin-top: 10px;
     width: 100%;
     width: 100%;
-    background: #f6f6f6;
-    padding: 10px;
+    background: #f5f6f7;
+    padding: 10px 10px 10px 36px;
     box-sizing: border-box;
     box-sizing: border-box;
     position: relative;
     position: relative;
 }
 }
@@ -178,11 +178,11 @@ export default {
     font-family: 'Microsoft YaHei';
     font-family: 'Microsoft YaHei';
     min-height: 48px;
     min-height: 48px;
     /* border: 1px solid #3682fc00; */
     /* border: 1px solid #3682fc00; */
-    border: 1.5px solid #CAD1DC;
+    border: 1px solid #CAD1DC;
 }
 }
 
 
 .binfo_textarea {
 .binfo_textarea {
-    border: 1.5px solid #CAD1DC;
+    border: 1px solid #CAD1DC;
     font-size: 16px;
     font-size: 16px;
     resize: none;
     resize: none;
     /* background: #f6f6f6; */
     /* background: #f6f6f6; */
@@ -190,10 +190,10 @@ export default {
 }
 }
 
 
 .binfo_input:focus-visible {
 .binfo_input:focus-visible {
-    border: 1.5px solid #3681FC !important;
+    border: 1px solid #3681FC !important;
 }
 }
 
 
-.jiao::before{
+/* .jiao::before{
     content: '';
     content: '';
     position: absolute;
     position: absolute;
     width: 0px;
     width: 0px;
@@ -204,5 +204,5 @@ export default {
     border-right: 12px solid transparent;
     border-right: 12px solid transparent;
     border-bottom: 10px solid #f6f6f6;
     border-bottom: 10px solid #f6f6f6;
     border-top: 10px solid transparent;
     border-top: 10px solid transparent;
-}
+} */
 </style>
 </style>

+ 1 - 1
src/components/pages/test/add/edit/check/gap.vue

@@ -9,7 +9,7 @@
                 <!-- </div><div v-html="checkJson.title"></div> -->
                 <!-- </div><div v-html="checkJson.title"></div> -->
             </div>
             </div>
             <div class="choices">
             <div class="choices">
-                <textarea  :readonly="checktype == 2" rows="2" v-autoHeight="68" class="binfo_input binfo_textarea" cols v-model="checkJson.answer2"
+                <textarea :readonly="checktype == 2" rows="2" v-autoHeight="68" class="binfo_input binfo_textarea" cols v-model="checkJson.answer2"
                     placeholder=""></textarea>
                     placeholder=""></textarea>
             </div>
             </div>
         </div>
         </div>

+ 76 - 49
src/components/pages/test/add/edit/edit/index.vue

@@ -1,14 +1,19 @@
 <template>
 <template>
     <div class="edit_box">
     <div class="edit_box">
         <div class="e_add">
         <div class="e_add">
-            <div class="title">题目添加</div>
+            <div class="title" style="margin-bottom: 20px;">题目添加</div>
             <div class="e_add_box">
             <div class="e_add_box">
-                <div class="title">添加题型</div>
+                <div class="title">基础题型</div>
                 <div class="e_add_ci">
                 <div class="e_add_ci">
-                    <div class="title">基础题型</div>
+                    <!-- <div class="title">基础题型</div> -->
                     <div class="box">
                     <div class="box">
-                        <div class="btn" v-for="item in options" :key="item.label" @click="addCheck(item.value)"><el-button type="primary"
-                                size="mini">{{ item.label }}</el-button></div>
+                        <div class="btn" v-for="item in options" :key="item.label" @click="addCheck(item.value)">
+                            <!-- <el-button type="primary"
+                                size="mini">{{ item.label }}</el-button> -->
+                            <button class="pub_test_btn"
+                                :class="{ pub_test_btn_text: item.value == 3, pub_test_btn_choose: item.value == 1, pub_test_btn_file: item.value == 5 }">{{
+                                    item.label }}</button>
+                        </div>
                     </div>
                     </div>
                 </div>
                 </div>
             </div>
             </div>
@@ -16,22 +21,29 @@
                 <div class="title">添加组件</div>
                 <div class="title">添加组件</div>
                 <div class="e_add_ci">
                 <div class="e_add_ci">
                     <div class="box">
                     <div class="box">
-                        <div class="btn" v-for="item in buttonOptions" :key="item.name" @click="addQtype(item.type)"><el-button type="primary"
-                                size="mini">{{ item.name }}</el-button></div>
+                        <div class="btn" v-for="item in buttonOptions" :key="item.name" @click="addQtype(item.type)">
+                            <!-- <el-button type="primary"
+                                size="mini">{{ item.name }}</el-button> -->
+                            <button class="pub_test_btn"
+                                :class="{ pub_test_btn_group: item.type == 1, pub_test_btn_page: item.type == 2 }">{{ item.name
+                                }}</button>
+                        </div>
                     </div>
                     </div>
                 </div>
                 </div>
             </div>
             </div>
         </div>
         </div>
         <div class="e_content">
         <div class="e_content">
-            <div class="title">{{title}}</div>
+            <div class="title">{{ title }}</div>
             <div class="e_order_box">
             <div class="e_order_box">
-                <checkOrder :checkC.sync="checkC" :checkJson="manualJson" @changeJson="changeJson" etype="edit"></checkOrder>
+                <checkOrder :checkC.sync="checkC" :checkJson="manualJson" @changeJson="changeJson" etype="edit" :cJson.sync="cJson">
+                </checkOrder>
             </div>
             </div>
         </div>
         </div>
         <div class="e_order">
         <div class="e_order">
             <div class="title">题目排序 <span style="font-size: 14px;color: #373737;">总分:{{ score }}分</span></div>
             <div class="title">题目排序 <span style="font-size: 14px;color: #373737;">总分:{{ score }}分</span></div>
             <div class="e_order_box" style="margin-top: 20px;">
             <div class="e_order_box" style="margin-top: 20px;">
-                <checkOrder :checkC.sync="checkC" :checkJson="manualJson" @changeJson="changeJson" etype="order"></checkOrder>
+                <checkOrder :checkC.sync="checkC" :checkJson="manualJson" @changeJson="changeJson" etype="order" :cJson.sync="cJson">
+                </checkOrder>
             </div>
             </div>
         </div>
         </div>
     </div>
     </div>
@@ -49,19 +61,20 @@ export default {
         checkJson: {
         checkJson: {
             type: Array,
             type: Array,
         },
         },
-        title:{
-            type:String
+        title: {
+            type: String
         }
         }
     },
     },
     data() {
     data() {
         return {
         return {
             manualJson: [],
             manualJson: [],
             checkC: "",
             checkC: "",
+            cJson:{}
         }
         }
     },
     },
     watch: {
     watch: {
-        checkJson:{
-            handler(newVal){
+        checkJson: {
+            handler(newVal) {
                 this.manualJson = this.depthCopy(newVal);
                 this.manualJson = this.depthCopy(newVal);
             },
             },
             deep: true
             deep: true
@@ -73,21 +86,21 @@ export default {
             this.manualJson.forEach(el => {
             this.manualJson.forEach(el => {
                 if ((el.ttype == 3 || el.ttype == 2) && el.array.length > 0) {
                 if ((el.ttype == 3 || el.ttype == 2) && el.array.length > 0) {
                     el.array.forEach(item => {
                     el.array.forEach(item => {
-                      if(item.ttype == 2 && item.array.length > 0){
-                          item.array.forEach(item2 => {
-                            if(item2.ttype == 1 && item2.json){
-                                score += item2.json.score ? parseFloat(item2.json.score) : 0
-                            } 
-                          })
-                      } else if(item.ttype == 1 && item.json){
-                        score += item.json.score ? parseFloat(item.json.score) : 0
-                      } 
+                        if (item.ttype == 2 && item.array.length > 0) {
+                            item.array.forEach(item2 => {
+                                if (item2.ttype == 1 && item2.json) {
+                                    score += item2.json.score ? parseFloat(item2.json.score) : 0
+                                }
+                            })
+                        } else if (item.ttype == 1 && item.json) {
+                            score += item.json.score ? parseFloat(item.json.score) : 0
+                        }
                     })
                     })
-                } else if(el.ttype == 1 && el.json){ 
+                } else if (el.ttype == 1 && el.json) {
                     score += el.json.score ? parseFloat(el.json.score) : 0
                     score += el.json.score ? parseFloat(el.json.score) : 0
                 }
                 }
             })
             })
-            return  score > 0 ? score : '未设置分数'
+            return score > 0 ? score : '未设置分数'
         }
         }
     },
     },
     methods: {
     methods: {
@@ -116,33 +129,33 @@ export default {
                 if (_json.array) {
                 if (_json.array) {
                     if (type == 3 && _check.length == 2) {
                     if (type == 3 && _check.length == 2) {
                         if (this.manualJson[_check[0]].array[_check[1]].array) {
                         if (this.manualJson[_check[0]].array[_check[1]].array) {
-                                this.manualJson[_check[0]].array[_check[1]].array.push(json)
+                            this.manualJson[_check[0]].array[_check[1]].array.push(json)
                         } else {
                         } else {
-                                this.manualJson[_check[0]].array.splice(parseInt(_check[1]) + 1, 0, json)
+                            this.manualJson[_check[0]].array.splice(parseInt(_check[1]) + 1, 0, json)
                         }
                         }
 
 
                     } else if (type == 3 && _check.length == 3) {
                     } else if (type == 3 && _check.length == 3) {
-                            this.manualJson[_check[0]].array[_check[1]].array.splice(parseInt(_check[2]) + 1, 0, json)
+                        this.manualJson[_check[0]].array[_check[1]].array.splice(parseInt(_check[2]) + 1, 0, json)
                     } else if (type == 2 && _check.length == 2) {
                     } else if (type == 2 && _check.length == 2) {
-                            this.manualJson[_check[0]].array.splice(parseInt(_check[1]) + 1, 0, json)
+                        this.manualJson[_check[0]].array.splice(parseInt(_check[1]) + 1, 0, json)
                     } else if (type == 2 && _check.length == 1) {
                     } else if (type == 2 && _check.length == 1) {
-                            this.manualJson[_check[0]].array.push(json)
+                        this.manualJson[_check[0]].array.push(json)
                     } else if (type == 3 && _check.length == 1) {
                     } else if (type == 3 && _check.length == 1) {
-                        if(this.manualJson[_check[0]].array[0] && this.manualJson[_check[0]].array[0].array){
-                                this.manualJson[_check[0]].array[0].array.push(json)
-                        }else{
-                                this.manualJson[_check[0]].array.push(json)
+                        if (this.manualJson[_check[0]].array[0] && this.manualJson[_check[0]].array[0].array) {
+                            this.manualJson[_check[0]].array[0].array.push(json)
+                        } else {
+                            this.manualJson[_check[0]].array.push(json)
                         }
                         }
                     }
                     }
                 } else {
                 } else {
-                        this.manualJson.splice(parseInt(_check[0]) + 1, 0, json);
+                    this.manualJson.splice(parseInt(_check[0]) + 1, 0, json);
                 }
                 }
             } else {
             } else {
                 if (type == 1) {
                 if (type == 1) {
-                        this.manualJson.push({
-                            ttype: 1,
-                            type: topicType
-                        });
+                    this.manualJson.push({
+                        ttype: 1,
+                        type: topicType
+                    });
                 } else if (type == 3 || type == 2) {
                 } else if (type == 3 || type == 2) {
                     this.$message.error("请选中分页或者分组添加题目");
                     this.$message.error("请选中分页或者分组添加题目");
                     return;
                     return;
@@ -257,7 +270,7 @@ export default {
     overflow: hidden;
     overflow: hidden;
     display: flex;
     display: flex;
     justify-content: space-between;
     justify-content: space-between;
-    padding: 10px 0 0;
+    padding: 0 0 0;
     box-sizing: border-box;
     box-sizing: border-box;
 }
 }
 
 
@@ -268,18 +281,19 @@ export default {
     overflow: auto;
     overflow: auto;
     padding: 20px 10px;
     padding: 20px 10px;
     box-sizing: border-box;
     box-sizing: border-box;
+    border-right: 1px solid #E5E5E5;
 }
 }
 
 
 .e_content {
 .e_content {
     height: 100%;
     height: 100%;
-    width: calc(100% - 620px);
+    width: calc(100% - 600px);
     background: #fff;
     background: #fff;
     overflow: auto;
     overflow: auto;
-    padding: 20px 10px;
+    padding: 20px 0;
     box-sizing: border-box;
     box-sizing: border-box;
 }
 }
 
 
-.e_content > .title{
+.e_content>.title {
     font-size: 24px;
     font-size: 24px;
     font-weight: bold;
     font-weight: bold;
     text-align: center;
     text-align: center;
@@ -305,17 +319,30 @@ export default {
 
 
 .e_add_box {
 .e_add_box {
     width: 100%;
     width: 100%;
-    border: 1px solid #dcdcdc;
-    margin-top: 20px;
+    /* border: 1px solid #dcdcdc; */
+    margin-top: 10px;
     border-radius: 3px;
     border-radius: 3px;
-    background: #f4f4f4;
+    /* background: #f4f4f4; */
     box-sizing: border-box;
     box-sizing: border-box;
-    padding: 10px 20px;
+    padding: 0 20px 0;
 }
 }
 
 
 .e_add_box>.title {
 .e_add_box>.title {
-    text-align: center;
-    font-weight: bold;
+    margin-bottom: 10px;
+    font-size: 15px;
+    font-weight: 700;
+    display: flex;
+    align-items: center;
+}
+
+.e_add_box>.title::before{
+    content: '';
+    width: 10px;
+    height: 10px;
+    border-radius: 50%;
+    background: rgb(54, 129, 252);
+    margin-right: 10px;
+    display: block;
 }
 }
 
 
 .e_add_box>.e_add_ci {
 .e_add_box>.e_add_ci {

+ 92 - 11
src/components/pages/test/add/edit/index.vue

@@ -1,9 +1,12 @@
 <template>
 <template>
   <div class="rightBox">
   <div class="rightBox">
+    <div class="title">
+      <div class="c_info_title">创建评测内容</div>
+    </div>
     <div class="edit_top">
     <div class="edit_top">
       <div class="edit_btn">
       <div class="edit_btn">
-        <span :class="{ active: type == 1 }" @click="type = 1">编辑</span>
-        <span :class="{ active: type == 2 }" @click="type = 2">预览</span>
+        <span class="edit" :class="{ active: type == 1 }" @click="type = 1">编辑</span>
+        <span class="check" :class="{ active: type == 2 }" @click="type = 2">预览</span>
         <!-- <span :class="{ active: type == 3 }" @click="type = 3">回答</span>
         <!-- <span :class="{ active: type == 3 }" @click="type = 3">回答</span>
         <span :class="{ active: type == 4 }" @click="type = 4">统计</span> -->
         <span :class="{ active: type == 4 }" @click="type = 4">统计</span> -->
       </div>
       </div>
@@ -15,7 +18,7 @@
       </div>
       </div>
     </div>
     </div>
     <div class="e_box">
     <div class="e_box">
-      <editBox v-if="type == 1" :checkJson="checkJson"  @changeJson="changeJson" :title="title"></editBox>
+      <editBox v-if="type == 1" :checkJson="checkJson" @changeJson="changeJson" :title="title"></editBox>
       <checkBox v-if="type == 2" :cJson="checkJson" :title="title"></checkBox>
       <checkBox v-if="type == 2" :cJson="checkJson" :title="title"></checkBox>
     </div>
     </div>
   </div>
   </div>
@@ -55,7 +58,7 @@ export default {
   },
   },
   watch: {
   watch: {
     cJson: {
     cJson: {
-      handler: function (newVal, oldVal) { 
+      handler: function (newVal, oldVal) {
         this.checkJson = this.depthCopy(newVal);
         this.checkJson = this.depthCopy(newVal);
       },
       },
       deep: true,
       deep: true,
@@ -85,9 +88,31 @@ export default {
 </script>
 </script>
 
 
 <style scoped>
 <style scoped>
+.c_info_title {
+  padding: 15px 0 15px 0;
+  font-size: 16px;
+  font-weight: bold;
+  margin: 0 0 0 0;
+  box-sizing: border-box;
+  display: flex;
+  align-items: center;
+  line-height: 20px;
+}
+
+.c_info_title::before {
+  content: '';
+  display: block;
+  width: 3px;
+  height: 20px;
+  background: #0061FF;
+  border-radius: 3px;
+  margin: 0 5px 0 0;
+}
+
 .rightBox {
 .rightBox {
   width: calc(100%);
   width: calc(100%);
-  background: #F0F2F5;
+  /* background: #F0F2F5; */
+  background: #fff;
   overflow: auto;
   overflow: auto;
   height: calc(100%);
   height: calc(100%);
   margin: 0 auto;
   margin: 0 auto;
@@ -95,6 +120,13 @@ export default {
   box-sizing: border-box;
   box-sizing: border-box;
 }
 }
 
 
+.rightBox>.title {
+  background: #fff;
+  width: 100%;
+  padding: 0 20px 0;
+  box-sizing: border-box;
+}
+
 .edit_top {
 .edit_top {
   height: 50px;
   height: 50px;
   background: #fff;
   background: #fff;
@@ -106,33 +138,82 @@ export default {
 
 
 .edit_top>.edit_btn {
 .edit_top>.edit_btn {
   display: flex;
   display: flex;
-  height: 100%;
+  height: 40px;
   align-items: center;
   align-items: center;
+  border: 1px solid #E5E5E5;
+  box-sizing: border-box;
+  padding: 4px;
+  border-radius: 4px;
 }
 }
 
 
 .edit_top>.edit_btn>span {
 .edit_top>.edit_btn>span {
   cursor: pointer;
   cursor: pointer;
   padding-bottom: 5px;
   padding-bottom: 5px;
   display: block;
   display: block;
+  width: 90px;
+  padding: 0 15px;
+  height: 100%;
+  font-size: 14px;
+  box-sizing: border-box;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  border-radius: 4px;
 }
 }
 
 
 .edit_top>.edit_btn>.active {
 .edit_top>.edit_btn>.active {
   color: #3e88f4;
   color: #3e88f4;
-  border-bottom: 2px solid #2f80f3;
+  /* border-bottom: 2px solid #2f80f3; */
+  background: rgb(224, 234, 251);
 }
 }
 
 
 .edit_top>.edit_btn>span+span {
 .edit_top>.edit_btn>span+span {
-  margin-left: 35px;
+  margin-left: 10px;
+}
+
+
+.edit_top>.edit_btn>span::before {
+  content: '';
+  display: block;
+  background-size: 100% 100%;
+  margin-right: 8px;
 }
 }
 
 
+.edit_top>.edit_btn>.check::before {
+  width: 15px;
+  height: 15px;
+  background-image: url(../../../../../assets/icon/test/add_check_icon.png);
+}
+
+.edit_top>.edit_btn>.edit::before {
+  width: 15px;
+  height: 16px;
+  background-image: url(../../../../../assets/icon/test/add_edit_icon.png);
+}
+
+.edit_top>.edit_btn>.active.check::before {
+  background-image: url(../../../../../assets/icon/test/add_check_icon_active.png);
+}
+
+.edit_top>.edit_btn>.active.edit::before {
+  background-image: url(../../../../../assets/icon/test/add_edit_icon_active.png);
+}
+
+
 .edit_top>.op_btn {
 .edit_top>.op_btn {
   position: absolute;
   position: absolute;
   right: 30px;
   right: 30px;
 }
 }
 
 
 .e_box {
 .e_box {
-  height: calc(100% - 50px);
-  width: 100%;
+  height: calc(100% - 135px);
+  width: calc(100% - 40px);
   overflow: hidden;
   overflow: hidden;
-  background: rgb(196, 226, 241);
+  /* background: rgb(196, 226, 241); */
+  background: #fff;
+  border: 1px solid #E5E5E5;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  margin: 15px auto 0;
+  border-radius: 5px;
 }</style>
 }</style>

+ 24 - 4
src/components/pages/test/add/setInfo/manualCreated.vue

@@ -14,10 +14,13 @@
                 </div>
                 </div>
             </div>
             </div>
             <div class="mc_addBox_add">
             <div class="mc_addBox_add">
-                <div class="title">请添加题目类型与数量</div>
+                <div class="title">请添加试卷组件</div>
                 <div class="btnBox">
                 <div class="btnBox">
-                    <el-button type="primary" size="mini" v-for="item in buttonOptions" :key="item.type" class="e-button"
-                        @click="addQtype(item.type)">{{ item.name }}</el-button>
+                    <!-- <el-button type="primary" size="mini" v-for="item in buttonOptions" :key="item.type" class="e-button"
+                        @click="addQtype(item.type)">{{ item.name }}</el-button> -->
+                        <button v-for="item in buttonOptions" :key="item.type" class="pub_test_btn" 
+                        :class="{ pub_test_btn_group: item.type == 1, pub_test_btn_page: item.type == 2 }"
+                        @click="addQtype(item.type)">{{ item.name }}</button>
                 </div>
                 </div>
             </div>
             </div>
         </div>
         </div>
@@ -291,6 +294,20 @@ export default {
 
 
 .mc_addBox_add .title {
 .mc_addBox_add .title {
     margin-bottom: 10px;
     margin-bottom: 10px;
+    font-size: 15px;
+    font-weight: 700;
+    display: flex;
+    align-items: center;
+}
+
+.mc_addBox_add .title::before{
+    content: '';
+    width: 10px;
+    height: 10px;
+    border-radius: 50%;
+    background: rgb(54, 129, 252);
+    margin-right: 10px;
+    display: block;
 }
 }
 
 
 .mc_addBox_add .select {
 .mc_addBox_add .select {
@@ -298,7 +315,10 @@ export default {
     align-items: center;
     align-items: center;
 }
 }
 
 
-.mc_addBox_add .btnBox {}
+.mc_addBox_add .btnBox {
+    display: flex;
+    flex-wrap: wrap;
+}
 
 
 .mc_addBox_add .select .e-select {}
 .mc_addBox_add .select .e-select {}
 
 

+ 6 - 1
src/components/pages/test/check/check.vue

@@ -49,7 +49,7 @@
               <el-button type="primary" size="small" @click="publish">确定批改</el-button>
               <el-button type="primary" size="small" @click="publish">确定批改</el-button>
             </div>
             </div>
           </div>
           </div>
-          <topicVue :cJson="cJson" :title="title" :checktype="2" :see="see" :isTeacher="1" :name="name" ref="topicVue"></topicVue>
+          <topicVue :cJson="cJson" :title="title" :brief="brief" :checktype="2" :see="see" :isTeacher="1" :name="name" ref="topicVue"></topicVue>
         </div>
         </div>
       </div>
       </div>
     </div>
     </div>
@@ -73,6 +73,7 @@ export default {
       cid: this.$route.query.cid,
       cid: this.$route.query.cid,
       steps: 1,
       steps: 1,
       title: "",
       title: "",
+      brief: "",
       id:"",
       id:"",
       testType: [],
       testType: [],
       see: true,
       see: true,
@@ -113,6 +114,7 @@ export default {
           // this.cJson = JSON.parse(res.data[0][0].chapters);
           // this.cJson = JSON.parse(res.data[0][0].chapters);
           this.$forceUpdate();
           this.$forceUpdate();
           this.title = res.data[0][0].title;
           this.title = res.data[0][0].title;
+          this.brief = res.data[0][0].brief;
 
 
           this.testType = [];
           this.testType = [];
           for (var i = 0; i < res.data[1].length; i++) {
           for (var i = 0; i < res.data[1].length; i++) {
@@ -216,5 +218,8 @@ export default {
   padding: 0 30px;
   padding: 0 30px;
   border-top: 2px solid #eee;
   border-top: 2px solid #eee;
   border-bottom: 2px solid #eee;
   border-bottom: 2px solid #eee;
+  width: 95%;
+  margin: 0 auto;
+  box-sizing: border-box;
 }
 }
 </style>
 </style>

+ 142 - 64
src/components/pages/test/index.vue

@@ -88,17 +88,30 @@
                     </div> -->
                     </div> -->
                     <div class="test_box" v-for="(item, index) in course" :key="index">
                     <div class="test_box" v-for="(item, index) in course" :key="index">
                         <div class="test_top">
                         <div class="test_top">
-                            <div class="test_top_img" :class="{ gr: item.typeid == 'afc3f97f-2429-408d-8dcd-5e63a44d355a', md: item.typeid == '478bcccd-e3a1-472b-aa29-3ed7bc479469', jy: item.typeid == '178a377a-b4f1-4a75-b3c3-2787a7c98784', yy: item.typeid == 'dda9728e-5f11-469e-89ee-aca518daf223'}"></div>
+                            <div class="test_top_img" v-if="!item.typeN"></div>
+                            <el-tooltip :content="item.typeN" placement="top" effect="dark" v-else>
+                                <div class="test_top_img"
+                                    :class="{ gr: item.typeid == 'afc3f97f-2429-408d-8dcd-5e63a44d355a', md: item.typeid == '478bcccd-e3a1-472b-aa29-3ed7bc479469', jy: item.typeid == '178a377a-b4f1-4a75-b3c3-2787a7c98784', yy: item.typeid == 'dda9728e-5f11-469e-89ee-aca518daf223' }">
+                                </div>
+                            </el-tooltip>
                             <div class="test_top_title">
                             <div class="test_top_title">
                                 <span>{{ item.title }}</span>
                                 <span>{{ item.title }}</span>
                                 <span>创建人:{{ item.uname }}</span>
                                 <span>创建人:{{ item.uname }}</span>
                             </div>
                             </div>
                         </div>
                         </div>
                         <div class="test_time">
                         <div class="test_time">
-                            <span>创建日期:</span>{{ item.time }}
+                            <span><span>创建日期</span></span><span>{{ item.time }}</span>
                         </div>
                         </div>
                         <div class="test_time">
                         <div class="test_time">
-                            <span>修改日期:</span>{{ item.utime }}
+                            <span><span>修改日期</span></span><span>{{ item.utime }}</span>
+                        </div>
+                        <div class="test_time">
+                            <span><span>分类</span></span>
+                            <span v-if="!item.typename">未设置分类</span>
+                            <el-tooltip :content="item.typename" placement="top" effect="dark" v-else>
+                                <!-- content to trigger tooltip here -->
+                                <span>{{ item.typename }}</span>
+                            </el-tooltip>
                         </div>
                         </div>
                         <div class="test_btn">
                         <div class="test_btn">
                             <div class="test_o_btn">
                             <div class="test_o_btn">
@@ -114,7 +127,7 @@
                                     <span @click="deleteCourse(item.courseId)"></span>
                                     <span @click="deleteCourse(item.courseId)"></span>
                                 </el-tooltip>
                                 </el-tooltip>
                             </div>
                             </div>
-                            <div class="test_type" :class="{no:item.look == '1',is:item.look == '2'}">
+                            <div class="test_type" :class="{ no: item.look == '1', is: item.look == '2' }">
                                 <span>{{ item.look == '1' ? '未发布' : '已发布' }}</span>
                                 <span>{{ item.look == '1' ? '未发布' : '已发布' }}</span>
                             </div>
                             </div>
                         </div>
                         </div>
@@ -759,6 +772,38 @@ export default {
 </script>
 </script>
   
   
 <style scoped>
 <style scoped>
+@media screen and (max-width: 1380px) {
+    .test_box {
+        width: calc(100% / 4 - (15px * 3) / 4) !important;
+    }
+
+    .test_box:nth-child(5n) {
+        margin-right: 15px !important;
+    }
+
+    .test_box:nth-child(4n) {
+        margin-right: 0 !important;
+    }
+}
+
+@media screen and (max-width: 1080px) {
+    .test_box {
+        width: calc(100% / 3 - (15px * 2) / 3) !important;
+    }
+
+    .test_box:nth-child(5n) {
+        margin-right: 15px !important;
+    }
+
+    .test_box:nth-child(4n) {
+        margin-right: 15px !important;
+    }
+
+    .test_box:nth-child(3n) {
+        margin-right: 0 !important;
+    }
+}
+
 .dialog_diy>>>.el-dialog__header {
 .dialog_diy>>>.el-dialog__header {
     background: #3d67bc !important;
     background: #3d67bc !important;
     padding: 15px 20px;
     padding: 15px 20px;
@@ -797,6 +842,7 @@ export default {
     align-items: baseline;
     align-items: baseline;
     flex-direction: row;
     flex-direction: row;
     flex-wrap: wrap;
     flex-wrap: wrap;
+    padding: 0 0 15px;
 }
 }
 
 
 .top {
 .top {
@@ -1085,6 +1131,7 @@ export default {
 
 
 .head_left {
 .head_left {
     display: flex;
     display: flex;
+    margin-top: 15px;
 }
 }
 
 
 .student_input>>>.el-input__inner {
 .student_input>>>.el-input__inner {
@@ -1105,12 +1152,13 @@ export default {
 }
 }
 
 
 .all_choose {
 .all_choose {
-    margin: 15px 0 10px;
-    height: 20%;
+    /* margin: 15px 0 10px; */
+    /* height: 20%; */
     display: flex;
     display: flex;
     flex-direction: row;
     flex-direction: row;
     align-items: center;
     align-items: center;
-    max-width: calc(100% / 4 - 50px);
+    max-width: 180px;
+    width: 180px;
 }
 }
 
 
 .all_choose>span {
 .all_choose>span {
@@ -1127,38 +1175,19 @@ export default {
     align-content: space-between;
     align-content: space-between;
     height: 100%;
     height: 100%;
     justify-content: flex-start;
     justify-content: flex-start;
-    width: 60%;
-    min-width: 868px;
+    /* width: 60%; */
+    /* min-width: 868px; */
     align-items: center;
     align-items: center;
 }
 }
 
 
-.choose>div:nth-child(2) {
-    margin-left: 10px;
-    width: calc(100% / 4 - 50px)
-}
-
-.choose>div:nth-child(3) {
-    margin-left: 10px;
-    width: calc(100% / 4 - 50px)
-}
-
-.choose>div:nth-child(4) {
+.choose>div {
     margin-left: 10px;
     margin-left: 10px;
-    width: calc(100% / 4 - 50px)
-}
-
-.choose>div:nth-child(5) {
-    margin: 5px 0 0 1%;
-}
-
-.choose>div:nth-child(4)>span {
-    /* width: 74px !important;
-    min-width: 74px; */
+    width: 180px;
+    margin-top: 15px;
 }
 }
 
 
-.choose>div:nth-child(4)>>>.el-select {
-    /* width: 217.5px;
-    min-width: 215.06px; */
+.choose>.clear {
+    width: 70px
 }
 }
 
 
 .clear {
 .clear {
@@ -1254,42 +1283,53 @@ export default {
 }
 }
 
 
 .test_box {
 .test_box {
-    width: 250px;
+    width: calc(100% / 5 - (15px * 4) / 5);
+    /* width: 250px; */
     background: #fff;
     background: #fff;
-    margin-right: 25px;
     border-radius: 5px;
     border-radius: 5px;
     padding: 20px;
     padding: 20px;
     margin: 5px 15px 10px 0;
     margin: 5px 15px 10px 0;
+    box-sizing: border-box;
 }
 }
 
 
-.test_top{
+.test_box:nth-child(5n) {
+    margin-right: 0;
+}
+
+.test_top {
     width: 100%;
     width: 100%;
     display: flex;
     display: flex;
     align-items: center;
     align-items: center;
 }
 }
-.test_top > .test_top_img{
+
+.test_top>.test_top_img {
     height: 40px;
     height: 40px;
     width: 40px;
     width: 40px;
     background: rgb(108 150 217);
     background: rgb(108 150 217);
     margin-right: 10px;
     margin-right: 10px;
     border-radius: 5px;
     border-radius: 5px;
-    display:flex;
+    display: flex;
     align-items: center;
     align-items: center;
     justify-content: center;
     justify-content: center;
 }
 }
-.test_top > .gr{
+
+.test_top>.gr {
     background: rgb(142, 189, 176);
     background: rgb(142, 189, 176);
 }
 }
-.test_top > .md{
+
+.test_top>.md {
     background: rgb(139, 174, 227);
     background: rgb(139, 174, 227);
 }
 }
-.test_top > .js{
+
+.test_top>.js {
     background: rgb(64, 149, 174);
     background: rgb(64, 149, 174);
 }
 }
-.test_top > .yy{
+
+.test_top>.yy {
     background: rgb(98, 102, 188);
     background: rgb(98, 102, 188);
 }
 }
-.test_top > .test_top_img:after{
+
+.test_top>.test_top_img:after {
     content: '';
     content: '';
     display: block;
     display: block;
     width: 23px;
     width: 23px;
@@ -1297,26 +1337,32 @@ export default {
     background-size: 100% 100%;
     background-size: 100% 100%;
     background-image: url('../../../assets/icon/test/all_icon_b.png');
     background-image: url('../../../assets/icon/test/all_icon_b.png');
 }
 }
-.test_top > .gr:after{
+
+.test_top>.gr:after {
     background-image: url('../../../assets/icon/test/gr_icon_b.png');
     background-image: url('../../../assets/icon/test/gr_icon_b.png');
 }
 }
-.test_top > .md:after{
+
+.test_top>.md:after {
     background-image: url('../../../assets/icon/test/md_icon_b.png');
     background-image: url('../../../assets/icon/test/md_icon_b.png');
 }
 }
-.test_top > .js:after{
+
+.test_top>.js:after {
     background-image: url('../../../assets/icon/test/js_icon_b.png');
     background-image: url('../../../assets/icon/test/js_icon_b.png');
 }
 }
-.test_top > .yy:after{
+
+.test_top>.yy:after {
     background-image: url('../../../assets/icon/test/yy_icon_b.png');
     background-image: url('../../../assets/icon/test/yy_icon_b.png');
 }
 }
-.test_top > .test_top_title{
+
+.test_top>.test_top_title {
     display: flex;
     display: flex;
     flex-direction: column;
     flex-direction: column;
     justify-content: space-between;
     justify-content: space-between;
     height: 40px;
     height: 40px;
     width: calc(100% - 40px - 10px)
     width: calc(100% - 40px - 10px)
 }
 }
-.test_top > .test_top_title > span{
+
+.test_top>.test_top_title>span {
     width: 100;
     width: 100;
     display: block;
     display: block;
     word-break: break-all;
     word-break: break-all;
@@ -1324,63 +1370,95 @@ export default {
     text-overflow: ellipsis;
     text-overflow: ellipsis;
     white-space: nowrap;
     white-space: nowrap;
 }
 }
-.test_top > .test_top_title > span:nth-child(1){
+
+.test_top>.test_top_title>span:nth-child(1) {
     font-size: 15px;
     font-size: 15px;
 }
 }
-.test_top > .test_top_title > span:nth-child(2){
+
+.test_top>.test_top_title>span:nth-child(2) {
     font-size: 14px;
     font-size: 14px;
     color: rgb(58, 131, 252);
     color: rgb(58, 131, 252);
 }
 }
 
 
-.test_box > .test_time{
+.test_box>.test_time {
     margin-top: 10px;
     margin-top: 10px;
     font-size: 14px;
     font-size: 14px;
     color: #a7a7a7;
     color: #a7a7a7;
+    display: flex;
+}
+
+.test_box>.test_time>span:nth-child(1) {
+    width: 70px;
+    display: flex;
+}
+
+
+.test_box>.test_time>span:nth-child(1) > span{
+  width: 100%;
+  text-align-last: justify;
+}
+
+.test_box>.test_time>span:nth-child(1)::after{
+    content: ':';
+}
+.test_box>.test_time>span:nth-child(2) {
+    width: calc(100% - 70px);
+    overflow: hidden;
+    display: block;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+    word-break: break-all;
 }
 }
 
 
-.test_box > .test_btn{
+.test_box>.test_btn {
     margin-top: 10px;
     margin-top: 10px;
-    display:flex;
+    display: flex;
     align-items: center;
     align-items: center;
     justify-content: space-between;
     justify-content: space-between;
 }
 }
 
 
-.test_box > .test_btn > .test_o_btn{
+.test_box>.test_btn>.test_o_btn {
     display: flex;
     display: flex;
     align-items: center;
     align-items: center;
 }
 }
-.test_box > .test_btn > .test_o_btn > span{
+
+.test_box>.test_btn>.test_o_btn>span {
     display: block;
     display: block;
     width: 14px;
     width: 14px;
     height: 14px;
     height: 14px;
     background-size: 100% 100%;
     background-size: 100% 100%;
     cursor: pointer;
     cursor: pointer;
 }
 }
-.test_box > .test_btn > .test_o_btn > .edit{
+
+.test_box>.test_btn>.test_o_btn>.edit {
     background-image: url('../../../assets/icon/test/edit_test_icon.png');
     background-image: url('../../../assets/icon/test/edit_test_icon.png');
     margin-right: 20px;
     margin-right: 20px;
 }
 }
-.test_box > .test_btn > .test_o_btn > .check{
+
+.test_box>.test_btn>.test_o_btn>.check {
     background-image: url('../../../assets/icon/test/check_test_icon.png');
     background-image: url('../../../assets/icon/test/check_test_icon.png');
     margin-right: 20px;
     margin-right: 20px;
 }
 }
-.test_box > .test_btn > .test_o_btn > .delete{
+
+.test_box>.test_btn>.test_o_btn>.delete {
     background-image: url('../../../assets/icon/test/delete_test_icon.png');
     background-image: url('../../../assets/icon/test/delete_test_icon.png');
 }
 }
 
 
-.test_box > .test_btn > .test_type{
+.test_box>.test_btn>.test_type {
     font-size: 12px;
     font-size: 12px;
     border-radius: 5px;
     border-radius: 5px;
     border: 1.5px solid;
     border: 1.5px solid;
     padding: 3px 8px;
     padding: 3px 8px;
 }
 }
-.test_box > .test_btn > .is{
+
+.test_box>.test_btn>.is {
     color: rgb(57, 204, 127);
     color: rgb(57, 204, 127);
-    background-color: rgba(57, 204, 127,.1);
+    background-color: rgba(57, 204, 127, .1);
 }
 }
-.test_box > .test_btn > .no{
+
+.test_box>.test_btn>.no {
     color: rgb(235, 154, 96);
     color: rgb(235, 154, 96);
-    background-color: rgba(235, 154, 96,.1);
+    background-color: rgba(235, 154, 96, .1);
 }
 }
 </style>
 </style>
   
   

+ 97 - 16
src/components/pages/testStudent/index.vue

@@ -32,7 +32,7 @@
               <el-option value="0" label="全部"></el-option>
               <el-option value="0" label="全部"></el-option>
               <el-option value="1" label="已完成"></el-option>
               <el-option value="1" label="已完成"></el-option>
               <el-option value="2" label="未完成"></el-option>
               <el-option value="2" label="未完成"></el-option>
-              <el-option value="3" label="已批改"></el-option>
+              <!-- <el-option value="3" label="已批改"></el-option> -->
             </el-select>
             </el-select>
             <!-- <el-select v-model="groupA" @change="search" v-else>
             <!-- <el-select v-model="groupA" @change="search" v-else>
                 <el-option value="4" label="全部"></el-option>
                 <el-option value="4" label="全部"></el-option>
@@ -79,19 +79,30 @@
           </div> -->
           </div> -->
           <div class="test_box" v-for="(item, index) in course" :key="index">
           <div class="test_box" v-for="(item, index) in course" :key="index">
             <div class="test_top">
             <div class="test_top">
-              <div class="test_top_img"
-                :class="{ gr: item.typeid == 'afc3f97f-2429-408d-8dcd-5e63a44d355a', md: item.typeid == '478bcccd-e3a1-472b-aa29-3ed7bc479469', jy: item.typeid == '178a377a-b4f1-4a75-b3c3-2787a7c98784', yy: item.typeid == 'dda9728e-5f11-469e-89ee-aca518daf223' }">
-              </div>
+              <div class="test_top_img" v-if="!item.typeN"></div>
+              <el-tooltip :content="item.typeN" placement="top" effect="dark" v-else>
+                <div class="test_top_img"
+                  :class="{ gr: item.typeid == 'afc3f97f-2429-408d-8dcd-5e63a44d355a', md: item.typeid == '478bcccd-e3a1-472b-aa29-3ed7bc479469', jy: item.typeid == '178a377a-b4f1-4a75-b3c3-2787a7c98784', yy: item.typeid == 'dda9728e-5f11-469e-89ee-aca518daf223' }">
+                </div>
+              </el-tooltip>
               <div class="test_top_title">
               <div class="test_top_title">
                 <span>{{ item.title }}</span>
                 <span>{{ item.title }}</span>
                 <span>创建人:{{ item.uname }}</span>
                 <span>创建人:{{ item.uname }}</span>
               </div>
               </div>
             </div>
             </div>
             <div class="test_time">
             <div class="test_time">
-              <span>创建日期:</span>{{ item.time }}
+              <span><span>创建日期</span></span><span>{{ item.time }}</span>
             </div>
             </div>
             <div class="test_time">
             <div class="test_time">
-              <span>修改日期:</span>{{ item.utime }}
+              <span><span>修改日期</span></span><span>{{ item.utime }}</span>
+            </div>
+            <div class="test_time tset_type">
+              <span><span>分类</span></span>
+              <span v-if="!item.typename">未设置分类</span>
+              <el-tooltip :content="item.typename" placement="top" effect="dark" v-else>
+                <!-- content to trigger tooltip here -->
+                <span>{{ item.typename }}</span>
+              </el-tooltip>
             </div>
             </div>
             <div class="test_btn">
             <div class="test_btn">
               <div class="test_o_btn">
               <div class="test_o_btn">
@@ -105,7 +116,7 @@
             </div>
             </div>
             <div class="three_bottom">
             <div class="three_bottom">
               <!-- <div @click="checkTest(item.courseId)" v-if="item.type == 3 || item.type == 2">查看答题</div> -->
               <!-- <div @click="checkTest(item.courseId)" v-if="item.type == 3 || item.type == 2">查看答题</div> -->
-              <div @click="goToCourse2(item.courseId)">{{ item.testCount > 0 ? item.type == 1 ? '继续答题' : '继续答题' : '进入答题'
+              <div @click="goToCourse2(item.courseId)">{{ item.testCount > 0 ? item.type == 1 ? '再次答题' : '再次答题' : '开始答题'
               }}</div>
               }}</div>
             </div>
             </div>
           </div>
           </div>
@@ -764,6 +775,38 @@ export default {
 </script>
 </script>
   
   
 <style scoped>
 <style scoped>
+@media screen and (max-width: 1380px) {
+  .test_box {
+    width: calc(100% / 4 - (15px * 3) / 4) !important;
+  }
+
+  .test_box:nth-child(5n) {
+    margin-right: 15px !important;
+  }
+
+  .test_box:nth-child(4n) {
+    margin-right: 0 !important;
+  }
+}
+
+@media screen and (max-width: 1080px) {
+  .test_box {
+    width: calc(100% / 3 - (15px * 2) / 3) !important;
+  }
+
+  .test_box:nth-child(5n) {
+    margin-right: 15px !important;
+  }
+
+  .test_box:nth-child(4n) {
+    margin-right: 15px !important;
+  }
+
+  .test_box:nth-child(3n) {
+    margin-right: 0 !important;
+  }
+}
+
 .dialog_diy>>>.el-dialog__header {
 .dialog_diy>>>.el-dialog__header {
   background: #3d67bc !important;
   background: #3d67bc !important;
   padding: 15px 20px;
   padding: 15px 20px;
@@ -802,6 +845,7 @@ export default {
   align-items: baseline;
   align-items: baseline;
   flex-direction: row;
   flex-direction: row;
   flex-wrap: wrap;
   flex-wrap: wrap;
+  padding: 0 0 15px;
 }
 }
 
 
 .top {
 .top {
@@ -1108,6 +1152,7 @@ export default {
 
 
 .head_left {
 .head_left {
   display: flex;
   display: flex;
+  margin-top: 15px;
 }
 }
 
 
 .student_input>>>.el-input__inner {
 .student_input>>>.el-input__inner {
@@ -1128,12 +1173,12 @@ export default {
 }
 }
 
 
 .all_choose {
 .all_choose {
-  margin: 15px 0 10px;
-  height: 20%;
+  /* margin: 15px 0 10px;
+  height: 20%; */
   display: flex;
   display: flex;
   flex-direction: row;
   flex-direction: row;
   align-items: center;
   align-items: center;
-  max-width: calc(100% / 4 - 50px);
+  /* max-width: calc(100% / 4 - 50px); */
 }
 }
 
 
 .all_choose>span {
 .all_choose>span {
@@ -1150,14 +1195,20 @@ export default {
   align-content: space-between;
   align-content: space-between;
   height: 100%;
   height: 100%;
   justify-content: flex-start;
   justify-content: flex-start;
-  width: 60%;
-  min-width: 868px;
+  /* width: 60%;
+  min-width: 868px; */
   align-items: center;
   align-items: center;
 }
 }
 
 
 .choose>div {
 .choose>div {
   margin-right: 10px;
   margin-right: 10px;
-  width: calc(100% / 4 - 50px)
+  /* width: calc(100% / 4 - 50px) */
+  width: 180px;
+  margin-top: 15px;
+}
+
+.choose>.clear {
+  width: 70px;
 }
 }
 
 
 /* 
 /* 
@@ -1272,12 +1323,18 @@ export default {
 }
 }
 
 
 .test_box {
 .test_box {
-  width: 250px;
+  width: calc(100% / 5 - (15px * 4) / 5);
+  /* width: 250px; */
   background: #fff;
   background: #fff;
   margin-right: 25px;
   margin-right: 25px;
   border-radius: 5px;
   border-radius: 5px;
   padding: 20px;
   padding: 20px;
   margin: 5px 15px 10px 0;
   margin: 5px 15px 10px 0;
+  box-sizing: border-box;
+}
+
+.test_box:nth-child(5n) {
+  margin-right: 0;
 }
 }
 
 
 .test_top {
 .test_top {
@@ -1368,6 +1425,31 @@ export default {
   margin-top: 10px;
   margin-top: 10px;
   font-size: 14px;
   font-size: 14px;
   color: #a7a7a7;
   color: #a7a7a7;
+  display: flex;
+}
+
+.test_box>.test_time>span:nth-child(1) {
+    width: 70px;
+    display: flex;
+}
+
+
+.test_box>.test_time>span:nth-child(1) > span{
+  width: 100%;
+  text-align-last: justify;
+}
+
+.test_box>.test_time>span:nth-child(1)::after{
+    content: ':';
+}
+
+.test_box>.test_time > span:nth-child(2){
+  width: calc(100% - 70px);
+  overflow: hidden;
+  display: block;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  word-break: break-all;
 }
 }
 
 
 .test_box>.test_btn {
 .test_box>.test_btn {
@@ -1412,9 +1494,8 @@ export default {
   background-color: rgba(255, 173, 31, .1);
   background-color: rgba(255, 173, 31, .1);
 }
 }
 
 
-.test_box .three_bottom{
+.test_box .three_bottom {
   margin-top: 10px;
   margin-top: 10px;
 }
 }
-
 </style>
 </style>
   
   

+ 7 - 2
src/components/pages/testStudent/view/check.vue

@@ -39,7 +39,7 @@
             <div class="op_btn">
             <div class="op_btn">
             </div>
             </div>
           </div>
           </div>
-          <topicVue :cJson="cJson" :title="title" :checktype='2' :see="see"></topicVue>
+          <topicVue :cJson="cJson" :title="title" :brief="brief" :checktype='2' :see="see"></topicVue>
         </div>
         </div>
       </div>
       </div>
     </div>
     </div>
@@ -63,6 +63,7 @@ export default {
       type: this.$route.query.type,
       type: this.$route.query.type,
       steps: 1,
       steps: 1,
       title: "",
       title: "",
+      brief: "",
       testType: [],
       testType: [],
       see: false,
       see: false,
       cJson: [],
       cJson: [],
@@ -110,8 +111,8 @@ export default {
         .get(this.$store.state.api + "getTestWorks2", params)
         .get(this.$store.state.api + "getTestWorks2", params)
         .then((res) => {
         .then((res) => {
           // this.cJson = JSON.parse(res.data[0][0].chapters);
           // this.cJson = JSON.parse(res.data[0][0].chapters);
-          this.$forceUpdate();
           this.title = res.data[0][0].title;
           this.title = res.data[0][0].title;
+          this.brief = res.data[0][0].brief;
           this.see = res.data[0][0].open == 1 ? true : false;
           this.see = res.data[0][0].open == 1 ? true : false;
           this.testType = [];
           this.testType = [];
           for (var i = 0; i < res.data[1].length; i++) {
           for (var i = 0; i < res.data[1].length; i++) {
@@ -123,6 +124,7 @@ export default {
           
           
           this.cJson = JSON.parse(res.data[2][0].courseJson)
           this.cJson = JSON.parse(res.data[2][0].courseJson)
           this.loading = false
           this.loading = false
+          this.$forceUpdate();
 
 
         })
         })
         .catch((err) => {
         .catch((err) => {
@@ -237,5 +239,8 @@ export default {
   padding: 0 30px;
   padding: 0 30px;
   border-top: 2px solid #eee;
   border-top: 2px solid #eee;
   border-bottom: 2px solid #eee;
   border-bottom: 2px solid #eee;
+  width: 95%;
+  margin: 0 auto;
+  box-sizing: border-box;
 }
 }
 </style>
 </style>

+ 13 - 0
src/components/pages/testStudent/view/component/topic.vue

@@ -1,6 +1,7 @@
 <template>
 <template>
   <div class="c_box">
   <div class="c_box">
     <div class="c_box_title">{{ title }}</div>
     <div class="c_box_title">{{ title }}</div>
+    <div class="c_box_brief" v-if="brief">{{ brief }}</div>
     <div class="c_box_score">
     <div class="c_box_score">
       <span>总分:{{ score }}</span>
       <span>总分:{{ score }}</span>
       <span v-if="name" style="margin-left: 10px;">答题人:{{ name }}</span>
       <span v-if="name" style="margin-left: 10px;">答题人:{{ name }}</span>
@@ -71,6 +72,9 @@ export default {
     title: {
     title: {
       type: String,
       type: String,
     },
     },
+    brief:{
+      type: String
+    },
     checktype: {
     checktype: {
       type: Number,
       type: Number,
       default: 1,
       default: 1,
@@ -237,6 +241,15 @@ export default {
   margin: 10px auto;
   margin: 10px auto;
 }
 }
 
 
+.c_box_brief{
+  width: 90%;
+  text-align: left;
+  font-size: 14px;
+  word-break: break-all;
+  margin: 10px auto;
+  color: #373737;
+}
+
 .c_box_score {
 .c_box_score {
   width: 90%;
   width: 90%;
   text-align: center;
   text-align: center;

+ 6 - 1
src/components/pages/testStudent/view/preview.vue

@@ -43,7 +43,7 @@
               <el-button type="primary" size="small" @click="publish">提交</el-button>
               <el-button type="primary" size="small" @click="publish">提交</el-button>
             </div>
             </div>
           </div>
           </div>
-          <topicVue :cJson="cJson" :title="title" ref="topicVue" v-if="!loading"></topicVue>
+          <topicVue :cJson="cJson" :title="title" :brief="brief" ref="topicVue" v-if="!loading"></topicVue>
         </div>
         </div>
       </div>
       </div>
     </div>
     </div>
@@ -67,6 +67,7 @@ export default {
       type: this.$route.query.type,
       type: this.$route.query.type,
       steps: 1,
       steps: 1,
       title: "",
       title: "",
+      brief: "",
       testType: [],
       testType: [],
       see: false,
       see: false,
       cJson: [],
       cJson: [],
@@ -291,6 +292,7 @@ export default {
           this.cJson = JSON.parse(res.data[0][0].chapters);
           this.cJson = JSON.parse(res.data[0][0].chapters);
           this.cJson2 = JSON.parse(res.data[0][0].chapters);
           this.cJson2 = JSON.parse(res.data[0][0].chapters);
           this.title = res.data[0][0].title;
           this.title = res.data[0][0].title;
+          this.brief = res.data[0][0].brief;
 
 
           this.see = res.data[0][0].open == 1 ? true : false;
           this.see = res.data[0][0].open == 1 ? true : false;
 
 
@@ -455,5 +457,8 @@ export default {
   padding: 0 30px;
   padding: 0 30px;
   border-top: 2px solid #eee;
   border-top: 2px solid #eee;
   border-bottom: 2px solid #eee;
   border-bottom: 2px solid #eee;
+  width: 95%;
+  margin: 0 auto;
+  box-sizing: border-box;
 }
 }
 </style>
 </style>

Неке датотеке нису приказане због велике количине промена