Browse Source

模拟答题

dsy 5 days ago
parent
commit
62e3a4e69e

+ 17 - 2
src/components/CommonPreview.vue

@@ -11,6 +11,8 @@
         <div class="group">
           <el-checkbox v-model="isShowGroup">显示分组</el-checkbox>
           <el-checkbox v-model="groupShowAll">分组显示全部</el-checkbox>
+          <el-checkbox v-model="isJudgeCorrect">判断对错</el-checkbox>
+          <el-checkbox v-model="isShowAnswer" :disabled="!isJudgeCorrect">显示答案</el-checkbox>
         </div>
         <span class="link">
           <el-select v-model="lang" placeholder="请选择语言" size="mini" class="lang-select">
@@ -285,6 +287,8 @@ export default {
       langList: [],
       lang: 'ZH',
       chinese: 'zh-Hans',
+      isJudgeCorrect: false,
+      isShowAnswer: false,
     };
   },
   computed: {
@@ -295,6 +299,17 @@ export default {
       return this.file_list.length >= this.total_count && this.total_count > 0;
     },
   },
+  watch: {
+    isJudgeCorrect(newVal) {
+      if (!newVal) {
+        this.isShowAnswer = false;
+      }
+      this.simulateAnswer(newVal);
+    },
+    isShowAnswer() {
+      this.simulateAnswer();
+    },
+  },
   created() {
     if (this.id) {
       this.getBookCoursewareInfo(this.id);
@@ -582,8 +597,8 @@ export default {
       return text;
     },
 
-    simulateAnswer() {
-      this.$refs.courserware.simulateAnswer();
+    simulateAnswer(disabled = true) {
+      this.$refs.courserware.simulateAnswer(this.isJudgeCorrect, this.isShowAnswer, disabled);
     },
   },
 };

+ 5 - 1
src/views/book/courseware/create/components/question/fill/Fill.vue

@@ -128,7 +128,11 @@ export default {
     },
     'data.property': {
       handler({ view_pinyin }) {
-        if (!this.isEnable(view_pinyin)) return;
+        if (!this.isEnable(view_pinyin)) {
+          this.data.paragraph_list = [];
+          return;
+        }
+        if (this.data.paragraph_list.length > 0) return;
         this.data.model_essay.forEach((item, i) => {
           item.forEach((option, j) => {
             const text = option.content.replace(/<[^>]+>/g, '');

+ 5 - 1
src/views/book/courseware/create/components/question/judge/Judge.vue

@@ -80,7 +80,11 @@ export default {
     'data.option_list': 'handleMindMap',
     'data.property': {
       handler({ view_pinyin }) {
-        if (!isEnable(view_pinyin)) return;
+        if (!this.isEnable(view_pinyin)) {
+          this.data.paragraph_list = [];
+          return;
+        }
+        if (this.data.paragraph_list.length > 0) return;
         this.data.option_list.forEach((item, i) => {
           const text = item.content.replace(/<[^>]+>/g, '');
           if (!text) return;

+ 5 - 1
src/views/book/courseware/create/components/question/matching/Matching.vue

@@ -156,7 +156,11 @@ export default {
     ],
     'data.property': {
       handler({ view_pinyin }) {
-        if (!this.isEnable(view_pinyin)) return;
+        if (!this.isEnable(view_pinyin)) {
+          this.data.paragraph_list = [];
+          return;
+        }
+        if (this.data.paragraph_list.length > 0) return;
         this.data.option_list.forEach((item, i) => {
           item.forEach((option, j) => {
             const text = option.content.replace(/<[^>]+>/g, '');

+ 5 - 1
src/views/book/courseware/create/components/question/select/Select.vue

@@ -68,7 +68,11 @@ export default {
     'data.answer.answer_list': 'handlerMindMap',
     'data.property': {
       handler({ view_pinyin }) {
-        if (!this.isEnable(view_pinyin)) return;
+        if (!this.isEnable(view_pinyin)) {
+          this.data.paragraph_list = [];
+          return;
+        }
+        if (this.data.paragraph_list.length > 0) return;
         this.data.option_list.forEach((item, i) => {
           const text = item.content.replace(/<[^>]+>/g, '');
           if (!text) return;

+ 5 - 1
src/views/book/courseware/create/components/question/sort/Sort.vue

@@ -104,7 +104,11 @@ export default {
     'data.property.order_type': 'handleMindMap',
     'data.property': {
       handler({ view_pinyin }) {
-        if (!this.isEnable(view_pinyin)) return;
+        if (!this.isEnable(view_pinyin)) {
+          this.data.paragraph_list = [];
+          return;
+        }
+        if (this.data.paragraph_list.length > 0) return;
         this.data.option_list.forEach((item, i) => {
           const text = item.content.replace(/<[^>]+>/g, '');
           if (!text) return;

+ 8 - 2
src/views/book/courseware/preview/CoursewarePreview.vue

@@ -367,9 +367,15 @@ export default {
       await this.$nextTick();
       return this.$refs.component.find((child) => child.dataset.id === id);
     },
-    simulateAnswer() {
+    /**
+     * 模拟回答
+     * @param {boolean} isJudgingRightWrong 是否判断对错
+     * @param {boolean} isShowRightAnswer 是否显示正确答案
+     * @param {boolean} disabled 是否禁用
+     */
+    simulateAnswer(isJudgingRightWrong, isShowRightAnswer, disabled = true) {
       this.$refs.preview.forEach((item) => {
-        item.showAnswer(true, true, null, true);
+        item.showAnswer(isJudgingRightWrong, isShowRightAnswer, null, disabled);
       });
     },
   },

+ 24 - 0
src/views/book/courseware/preview/components/fill/FillPreview.vue

@@ -168,6 +168,30 @@ export default {
       deep: true,
       immediate: true,
     },
+    modelEssay: {
+      handler(list) {
+        if (!list || !Array.isArray(list)) return;
+
+        this.answer.answer_list = list
+          .map((item) => {
+            return item
+              .map(({ type, content, audio_answer_list, mark }) => {
+                if (type === 'input') {
+                  return {
+                    value: content,
+                    mark,
+                    audio_answer_list,
+                    write_base64: '',
+                  };
+                }
+              })
+              .filter((item) => item);
+          })
+          .flat();
+      },
+      deep: true,
+      immediate: true,
+    },
     isJudgingRightWrong(val) {
       if (!val) return;
 

+ 2 - 1
src/views/book/courseware/preview/components/select/SelectPreview.vue

@@ -100,6 +100,7 @@ export default {
     .option-item {
       display: flex;
       flex: 1;
+      flex-wrap: wrap;
       column-gap: 8px;
       align-items: center;
       padding: 12px 24px;
@@ -109,7 +110,7 @@ export default {
       border-radius: 40px;
 
       .lang {
-        width: 100%;
+        // width: 100%;
         padding-left: 52px;
       }
 

+ 0 - 5
src/views/personal_workbench/edit_task/preview/index.vue

@@ -8,7 +8,6 @@
         <span v-if="isTrue(courseware.is_can_submit_audit)" class="link" @click="submitCoursewareToAuditFlow">
           提交审校
         </span>
-        <span class="link" @click="simulateAnswer">模拟答题</span>
         <span class="link" @click="goBackBookList">返回教材列表</span>
       </template>
     </CommonPreview>
@@ -54,10 +53,6 @@ export default {
         this.$refs.preview.getBookCoursewareInfo(this.id);
       });
     },
-
-    simulateAnswer() {
-      this.$refs.preview.simulateAnswer();
-    },
   },
 };
 </script>