Browse Source

Merge branch 'lhd'

liuhaidi123 3 days ago
parent
commit
b70eb6fdc8

+ 5 - 0
src/views/book/courseware/preview/components/article/index.vue

@@ -338,6 +338,7 @@ export default {
           if (!this.isJudgingRightWrong) {
             let userAnswer = JSON.parse(JSON.stringify(_this.userAnswer));
             _this.$set(this.data, 'Bookanswer', userAnswer);
+            this.answer.answer_list = this.data.Bookanswer;
           }
           _this.$nextTick(() => {
             _this.bodyLeft = _this.$refs.ArticleViewbody.getBoundingClientRect().left;
@@ -362,6 +363,10 @@ export default {
       deep: true,
       immediate: true,
     },
+    isJudgingRightWrong(val) {
+      if (!val) return;
+      this.data.Bookanswer = this.answer.answer_list;
+    },
   },
   created() {},
   methods: {

+ 8 - 4
src/views/book/courseware/preview/components/dialogue_article/index.vue

@@ -325,10 +325,6 @@ export default {
         if (val) {
           this.handleData();
           let _this = this;
-          // if (!this.isJudgingRightWrong) {
-          // let userAnswer = JSON.parse(JSON.stringify(_this.userAnswer));
-          // _this.$set(this.data, 'Bookanswer', userAnswer);
-          // }
           _this.$nextTick(() => {
             _this.bodyLeft = _this.$refs.ArticleViewbody.getBoundingClientRect().left;
           });
@@ -352,6 +348,10 @@ export default {
       deep: true,
       immediate: true,
     },
+    isJudgingRightWrong(val) {
+      if (!val) return;
+      this.data.Bookanswer = this.answer.answer_list;
+    },
   },
   created() {},
   methods: {
@@ -511,6 +511,10 @@ export default {
       }
       let userAnswer = JSON.parse(JSON.stringify(this.userAnswer));
       this.$set(this.data, 'Bookanswer', userAnswer);
+
+      if (!this.isJudgingRightWrong) {
+        this.answer.answer_list = this.data.Bookanswer;
+      }
       if (this.data.mp3_list && this.data.mp3_list.length > 0) {
         this.data.mp3_list[0].url = this.data.mp3_list[0].temporary_url;
         // GetFileURLMap({ file_id_list: [this.data.mp3_list[0].file_id] }).then(({ url_map }) => {

+ 163 - 66
src/views/book/courseware/preview/components/pinyin_base/PinyinBasePreview.vue

@@ -16,7 +16,13 @@
           />
           <div
             class="option-content"
-            :class="[isJudgingRightWrong ? (con_preview[0].all_right ? 'all-right' : 'has-error') : '']"
+            :class="[
+              isJudgingRightWrong && data.property.fun_type === 'mark'
+                ? con_preview[0].all_right
+                  ? 'all-right'
+                  : 'has-error'
+                : '',
+            ]"
             :style="{
               fontSize: data.unified_attrib && data.unified_attrib.font_size ? data.unified_attrib.font_size : '',
             }"
@@ -27,12 +33,7 @@
               <span
                 v-for="(itemc, indexc) in con_preview"
                 :key="indexc"
-                :class="[
-                  'item-con',
-                  isJudgingRightWrong && itemc.type === 'input' && item.answer && item.con !== item.answer
-                    ? 'error'
-                    : '',
-                ]"
+                :class="['item-con', isJudgingRightWrong && itemc.type === 'input' ? itemc.is_right : '']"
               >
                 <el-input
                   v-if="itemc.type === 'input'"
@@ -142,13 +143,59 @@
             ref="record"
             type="normal"
             class="record-box"
-            :answer-record-list="data.record_list"
+            :answer-record-list="answer.answer_list[0].record_list"
             :task-model="isJudgingRightWrong ? 'ANSWER' : ''"
             :attrib="data.unified_attrib"
             @handleWav="handleWav"
           />
         </template>
       </div>
+      <div v-if="isShowRightAnswer && data.property.fun_type === 'input'" class="right-answer">
+        <div class="title" style="margin: 10px 0">正确答案</div>
+        <div
+          class="content-box"
+          :class="[data.property.arrange_type === 'horizontal' ? 'content-box-flex' : 'content-box-vertical']"
+        >
+          <div class="first-con">
+            <AudioPlay
+              v-if="data.audio_file_id && data.property.audio_position === 'front'"
+              :file-id="data.file_list[0].file_url"
+              :theme-color="
+                data.unified_attrib && data.unified_attrib.topic_color ? data.unified_attrib.topic_color : ''
+              "
+            />
+            <div
+              class="option-content"
+              :style="{
+                fontSize: data.unified_attrib && data.unified_attrib.font_size ? data.unified_attrib.font_size : '',
+              }"
+            >
+              <span v-if="data.content_hz" class="items-hz">{{ data.content_hz }}</span>
+              <!-- 拼音输入 -->
+              <template v-if="data.property.fun_type === 'input'">
+                <span
+                  v-for="(itemc, indexc) in con_preview"
+                  :key="indexc"
+                  :class="['item-con', itemc.type === 'input' ? 'right' : '']"
+                >
+                  <el-input
+                    v-if="itemc.type === 'input'"
+                    v-model="itemc.answer"
+                    :disabled="true"
+                    :style="[{ width: Math.max(20, itemc.con.length * 10) + 'px' }]"
+                    class="item-input"
+                  />
+                  <span v-else>{{ itemc.con }}</span>
+                </span>
+              </template>
+            </div>
+            <AudioPlay
+              v-if="data.audio_file_id && data.property.audio_position === 'back'"
+              :file-id="data.audio_file_id"
+            />
+          </div>
+        </div>
+      </div>
     </div>
   </div>
 </template>
@@ -160,6 +207,7 @@ import PreviewMixin from '../common/PreviewMixin';
 import AudioPlay from '../character_base/components/AudioPlay.vue';
 import SoundRecord from '../../common/SoundRecord.vue';
 import { addTone, handleToneValue } from '@/utils/common';
+import { data } from 'jquery';
 
 export default {
   name: 'PinyinBasePreview',
@@ -217,11 +265,12 @@ export default {
       handler(val) {
         if (!val) return;
         this.judgeRight();
+        this.$forceUpdate();
       },
       immediate: true,
     },
-    'data.record_list'(val) {
-      this.data.record_list = val;
+    'answer.answer_list'(val) {
+      this.answer.answer_list = val;
     },
   },
   created() {
@@ -309,6 +358,14 @@ export default {
             inputIndex++;
           }
         });
+        if (!this.isJudgingRightWrong) {
+          let obj = {
+            mark: this.data.mark,
+            value: this.con_preview,
+            record_list: [],
+          };
+          this.answer.answer_list.push(obj);
+        }
       } else {
         // this.data.option_list.forEach((item) => {
         let con_arr = JSON.parse(JSON.stringify(this.data.content_view));
@@ -334,12 +391,14 @@ export default {
           let obj = {
             mark: this.data.mark,
             value: user_submit,
+            record_list: [],
           };
           this.answer.answer_list.push(obj);
         }
         this.con_preview.push(obj);
         // });
       }
+
       this.show_preview = true;
     },
     handleReplaceTone(e, arr, index, resArr) {
@@ -479,72 +538,100 @@ export default {
     },
     // 判断对错
     judgeRight() {
-      if (this.data.property.fun_type === 'input') {
-      } else {
-        this.con_preview = [];
-      }
-
       this.show_preview = false;
-      // this.data.option_list.forEach((item, index) => {
-      let con_arr = JSON.parse(JSON.stringify(this.data.content_view));
-      let user_answer = [];
-      let user_select = [];
-      let user_res_arr = [];
 
       let answer_list_item = this.answer.answer_list.filter((items) => this.data.mark === items.mark);
-      con_arr.forEach((items, indexs) => {
-        user_answer.push({
-          select_tone: answer_list_item[0].value[indexs],
-          select_letter: '',
-          select_index: '',
-          is_right: answer_list_item[0].value[indexs] === this.data.answer.answer_list[0].value[indexs],
-          right_answer: this.data.answer.answer_list[0].value[indexs],
+      if (this.data.property.fun_type === 'input') {
+        this.con_preview.forEach((items, indexs) => {
+          if (items.type === 'input') {
+            let is_right = items.answer
+              ? answer_list_item[0].value[indexs].con === items.answer
+                ? 'right'
+                : 'error'
+              : '';
+            this.$set(items, 'is_right', is_right);
+          }
         });
-        user_res_arr.push([]);
-        user_select.push('');
-        if (this.data.property.answer_mode === 'label') {
-          this.handleReplaceTone(answer_list_item[0].value[indexs], user_select, indexs, user_res_arr[indexs]);
-          if (
-            answer_list_item[0].value[indexs].match(/\d+/g) &&
-            answer_list_item[0].value[indexs].match(/\d+/g).length > 0
-          ) {
-            user_answer[indexs].select_tone = answer_list_item[0].value[indexs].match(/\d+/g)[0];
-            let letter_number = answer_list_item[0].value[indexs].match(/\d+/g)[0];
-            let letter_index = answer_list_item[0].value[indexs].indexOf(letter_number) - 1;
-            user_answer[indexs].select_letter = answer_list_item[0].value[indexs].substring(
-              letter_index,
-              letter_index + 1,
-            );
-            user_answer[indexs].select_index_submit = letter_index;
-          } else {
-            user_select[indexs] = items;
+      } else {
+        this.con_preview = [];
+        let con_arr = JSON.parse(JSON.stringify(this.data.content_view));
+        let user_answer = [];
+        let user_select = [];
+        let user_res_arr = [];
+
+        con_arr.forEach((items, indexs) => {
+          user_answer.push({
+            select_tone: answer_list_item[0].value[indexs],
+            select_letter: '',
+            select_index: '',
+            is_right:
+              this.data.answer.answer_list[0] &&
+              this.data.answer.answer_list[0].value &&
+              this.data.answer.answer_list[0].value[indexs] &&
+              answer_list_item[0].value[indexs] === this.data.answer.answer_list[0].value[indexs],
+            right_answer:
+              this.data.answer.answer_list[0] &&
+              this.data.answer.answer_list[0].value &&
+              this.data.answer.answer_list[0].value[indexs]
+                ? this.data.answer.answer_list[0].value[indexs]
+                : null,
+          });
+          user_res_arr.push([]);
+          user_select.push('');
+          if (this.data.property.fun_type === 'mark') {
+            if (this.data.property.answer_mode === 'label') {
+              this.handleReplaceTone(answer_list_item[0].value[indexs], user_select, indexs, user_res_arr[indexs]);
+              if (
+                answer_list_item[0].value[indexs].match(/\d+/g) &&
+                answer_list_item[0].value[indexs].match(/\d+/g).length > 0
+              ) {
+                user_answer[indexs].select_tone = answer_list_item[0].value[indexs].match(/\d+/g)[0];
+                let letter_number = answer_list_item[0].value[indexs].match(/\d+/g)[0];
+                let letter_index = answer_list_item[0].value[indexs].indexOf(letter_number) - 1;
+                user_answer[indexs].select_letter = answer_list_item[0].value[indexs].substring(
+                  letter_index,
+                  letter_index + 1,
+                );
+                user_answer[indexs].select_index_submit = letter_index;
+              } else {
+                user_select[indexs] = items;
+              }
+              user_answer[indexs].right_answer = this.data.answer.answer_list[0].value[indexs].match(/0|1|2|3|4/)
+                ? this.data.answer.answer_list[0].value[indexs].match(/0|1|2|3|4/)[0]
+                : '';
+              user_answer[indexs].right_index = this.data.answer.answer_list[0].value[indexs].search(/0|1|2|3|4/) - 1;
+            } else {
+              this.handleReplaceTone(
+                items + answer_list_item[0].value[indexs],
+                user_select,
+                indexs,
+                user_res_arr[indexs],
+              );
+              user_select[indexs] = items;
+            }
+          } else if (this.data.property.fun_type === 'input') {
           }
-          user_answer[indexs].right_answer = this.data.answer.answer_list[0].value[indexs].match(/0|1|2|3|4/)
-            ? this.data.answer.answer_list[0].value[indexs].match(/0|1|2|3|4/)[0]
-            : '';
-          user_answer[indexs].right_index = this.data.answer.answer_list[0].value[indexs].search(/0|1|2|3|4/) - 1;
-        } else {
-          this.handleReplaceTone(items + answer_list_item[0].value[indexs], user_select, indexs, user_res_arr[indexs]);
-        }
-      });
-      let obj = {
-        item_con: user_select,
-        item_con_yuan: JSON.parse(JSON.stringify(con_arr)),
-        mark: this.data.mark,
-        user_answer,
-        item_active_index: 0,
-        active_letter: '',
-        user_res_arr,
-        all_right: JSON.stringify(answer_list_item[0].value) === JSON.stringify(this.data.answer.answer_list[0].value),
-      };
-      this.con_preview.push(obj);
-      // });
+        });
+        let obj = {
+          item_con: user_select,
+          item_con_yuan: JSON.parse(JSON.stringify(con_arr)),
+          mark: this.data.mark,
+          user_answer,
+          item_active_index: 0,
+          active_letter: '',
+          user_res_arr,
+          all_right:
+            JSON.stringify(answer_list_item[0].value) === JSON.stringify(this.data.answer.answer_list[0].value),
+        };
+        this.con_preview.push(obj);
+      }
+
       setTimeout(() => {
         this.show_preview = true;
       }, 100);
     },
     handleWav(data) {
-      this.data.record_list = data;
+      this.answer.answer_list[0].record_list = data;
     },
     onInputChange(item) {
       let answer = item.con;
@@ -630,10 +717,20 @@ export default {
 
     &.right {
       color: $right-color;
+
+      :deep .el-input__inner {
+        color: $right-color;
+        border-bottom-color: $right-color;
+      }
     }
 
     &.error {
       color: $error-color;
+
+      :deep .el-input__inner {
+        color: $error-color;
+        border-bottom-color: $error-color;
+      }
     }
 
     &.active {

+ 7 - 0
src/views/book/courseware/preview/components/record_input/RecordInputPreview.vue

@@ -53,6 +53,10 @@ export default {
     'data.answer.answer_list.answer_record_list'(val) {
       this.data.answer.answer_list.answer_record_list = val;
     },
+    isJudgingRightWrong(val) {
+      if (!val) return;
+      this.data.answer = this.answer;
+    },
   },
   created() {
     // console.log(getConfig());
@@ -60,6 +64,9 @@ export default {
     //   answerRecordList: [],
     //   input: '',
     // };
+    if (!this.isJudgingRightWrong) {
+      this.answer = this.data.answer;
+    }
   },
   methods: {
     handleWav(data) {

+ 2 - 1
src/views/book/courseware/preview/components/table/TablePreview.vue

@@ -287,7 +287,7 @@ export default {
     },
     isJudgingRightWrong(val) {
       if (!val) return;
-
+      this.data.answer_list = this.answer.answer_list;
       // this.answer.answer_list.forEach(({ mark, value }) => {
       //   this.modelEssay.forEach((item) => {
       //     item.forEach((li) => {
@@ -325,6 +325,7 @@ export default {
         });
       }
       if (!this.isJudgingRightWrong) {
+        this.answer.answer_list = this.data.answer_list;
       }
     },
     computedAnswerText(item, i, j) {

+ 9 - 1
src/views/book/courseware/preview/components/video_interaction/VideoInteractionPreview.vue

@@ -98,7 +98,12 @@ export default {
       },
     };
   },
-  watch: {},
+  watch: {
+    isJudgingRightWrong(val) {
+      if (!val) return;
+      this.userAnswer = this.answer.answer_list[0];
+    },
+  },
   created() {
     this.initData();
   },
@@ -106,6 +111,9 @@ export default {
   methods: {
     initData() {
       this.data.file_info_list = this.data.file_info_list.sort((a, b) => Number(a.currentTime) - Number(b.currentTime));
+      if (!this.isJudgingRightWrong) {
+        this.answer.answer_list[0] = this.userAnswer;
+      }
     },
     handleTimeUpdate(event) {
       let currentTime = event.target.currentTime;

+ 9 - 1
src/views/book/courseware/preview/components/write_base/WriteBasePreview.vue

@@ -50,9 +50,17 @@ export default {
     };
   },
   computed: {},
-  watch: {},
+  watch: {
+    isJudgingRightWrong(val) {
+      if (!val) return;
+      this.data.write_base64 = this.answer.answer_list;
+    },
+  },
   mounted() {
     this.width = document.getElementsByClassName('write-base-preview')[0].clientWidth - 16;
+    if (!this.isJudgingRightWrong) {
+      this.answer.answer_list = this.data.write_base64;
+    }
   },
   methods: {
     handleReset() {