Jelajahi Sumber

参考答案与解析兼容旧数据

dsy 1 jam lalu
induk
melakukan
319354537e
19 mengubah file dengan 43 tambahan dan 20 penghapusan
  1. 11 2
      src/components/CommonPreview.vue
  2. 6 0
      src/views/book/courseware/create/components/common/ModuleMixin.js
  3. 1 1
      src/views/book/courseware/create/components/question/character/Character.vue
  4. 1 1
      src/views/book/courseware/create/components/question/character_structure/CharacterStructure.vue
  5. 1 1
      src/views/book/courseware/create/components/question/fill/Fill.vue
  6. 1 1
      src/views/book/courseware/create/components/question/image_text/ImageText.vue
  7. 1 1
      src/views/book/courseware/create/components/question/input/Input.vue
  8. 1 1
      src/views/book/courseware/create/components/question/judge/Judge.vue
  9. 1 1
      src/views/book/courseware/create/components/question/matching/Matching.vue
  10. 1 1
      src/views/book/courseware/create/components/question/newWord_template/NewWordTemplate.vue
  11. 1 1
      src/views/book/courseware/create/components/question/pinyin_base/PinyinBase.vue
  12. 1 1
      src/views/book/courseware/create/components/question/record_input/RecordInput.vue
  13. 1 1
      src/views/book/courseware/create/components/question/select/Select.vue
  14. 1 1
      src/views/book/courseware/create/components/question/sort/Sort.vue
  15. 1 1
      src/views/book/courseware/create/components/question/table/Table.vue
  16. 1 1
      src/views/book/courseware/create/components/question/video_interaction/VideoInteraction.vue
  17. 1 1
      src/views/book/courseware/create/components/question/voice_matrix/VoiceMatrix.vue
  18. 2 0
      src/views/book/courseware/preview/common/AnswerAnalysis.vue
  19. 9 3
      src/views/book/courseware/preview/common/PreviewOperation.vue

+ 11 - 2
src/components/CommonPreview.vue

@@ -352,14 +352,12 @@
 <script>
 import CoursewarePreview from '@/views/book/courseware/preview/CoursewarePreview.vue';
 import RichText from '@/components/RichText.vue';
-import { isTrue } from '@/utils/validate';
 import MindMap from '@/components/MindMap.vue';
 import VisNetwork from '@/components/VisNetwork.vue';
 import VideoPlay from '@/views/book/courseware/preview/components/common/VideoPlay.vue';
 import AudioPlay from '@/views/book/courseware/preview/components/common/AudioPlay.vue';
 import AuditRemark from '@/components/AuditRemark.vue';
 import ExplanatoryNoteDialog from '@/components/ExplanatoryNoteDialog.vue';
-import * as OpenCC from 'opencc-js';
 
 import {
   GetBookCoursewareInfo,
@@ -388,6 +386,8 @@ import {
   SearchBookContentText,
 } from '@/api/book';
 import { toggleFullScreen } from '@/utils/common';
+import * as OpenCC from 'opencc-js';
+import { isTrue } from '@/utils/validate';
 
 export default {
   name: 'CommonPreview',
@@ -408,6 +408,7 @@ export default {
       getLangList: () => this.langList,
       convertText: this.convertText,
       getTitleList: () => this.title_list,
+      getPermissionControl: () => this.permissionControl,
     };
   },
   inject: ['processHtmlString'],
@@ -547,6 +548,14 @@ export default {
       multimediaLoadingStates: true,
       isFullScreen: false, // 是否全屏状态
       title_list: [],
+      // 模拟答题权限控制
+      permissionControl: {
+        can_answer: false, // 可作答
+        can_judge_correct: false, // 可判断对错
+        can_show_answer: false, // 可查看答案
+        can_correct: false, // 可批改
+        can_check_correct: false, // 可查看批改
+      },
     };
   },
   computed: {

+ 6 - 0
src/views/book/courseware/create/components/common/ModuleMixin.js

@@ -363,6 +363,12 @@ const mixin = {
      * @param {'answer'|'analysis'} type 类型 answer 答案 analysis 解析
      */
     addAnswerAndAnalysis(type) {
+      // 确保 answer_list 和 analysis_list 已初始化
+      ['answer_list', 'analysis_list'].forEach((key) => {
+        if (!this.data[key]) {
+          this.$set(this.data, key, []);
+        }
+      });
       if (type === 'answer') {
         this.data.answer_list.push(structuredClone(answerData));
       } else if (type === 'analysis') {

+ 1 - 1
src/views/book/courseware/create/components/question/character/Character.vue

@@ -89,7 +89,7 @@
         <el-button icon="el-icon-plus" style="margin: 10px 0" @click="addElement">增加一个</el-button>
       </div>
       <AnswerAnalysisList
-        v-if="data.answer_list.length > 0 || data.analysis_list.length > 0"
+        v-if="data.answer_list?.length > 0 || data.analysis_list?.length > 0"
         :answer-list="data.answer_list"
         :analysis-list="data.analysis_list"
         :unified-attrib="data.unified_attrib"

+ 1 - 1
src/views/book/courseware/create/components/question/character_structure/CharacterStructure.vue

@@ -66,7 +66,7 @@
       </div>
       <el-button icon="el-icon-plus" style="margin: 24px 0" @click="addElement">增加一个</el-button>
       <AnswerAnalysisList
-        v-if="data.answer_list.length > 0 || data.analysis_list.length > 0"
+        v-if="data.answer_list?.length > 0 || data.analysis_list?.length > 0"
         :answer-list="data.answer_list"
         :analysis-list="data.analysis_list"
         :unified-attrib="data.unified_attrib"

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

@@ -83,7 +83,7 @@
         @SubmitTranslation="handleMultilingualTranslation"
       />
       <AnswerAnalysisList
-        v-if="data.answer_list.length > 0 || data.analysis_list.length > 0"
+        v-if="data.answer_list?.length > 0 || data.analysis_list?.length > 0"
         :answer-list="data.answer_list"
         :analysis-list="data.analysis_list"
         :unified-attrib="data.unified_attrib"

+ 1 - 1
src/views/book/courseware/create/components/question/image_text/ImageText.vue

@@ -204,7 +204,7 @@
       </template>
       <el-button @click="handleMultilingual">多语言</el-button>
       <AnswerAnalysisList
-        v-if="data.answer_list.length > 0 || data.analysis_list.length > 0"
+        v-if="data.answer_list?.length > 0 || data.analysis_list?.length > 0"
         :answer-list="data.answer_list"
         :analysis-list="data.analysis_list"
         :unified-attrib="data.unified_attrib"

+ 1 - 1
src/views/book/courseware/create/components/question/input/Input.vue

@@ -19,7 +19,7 @@
       />
 
       <AnswerAnalysisList
-        v-if="data.answer_list.length > 0 || data.analysis_list.length > 0"
+        v-if="data.answer_list?.length > 0 || data.analysis_list?.length > 0"
         :answer-list="data.answer_list"
         :analysis-list="data.analysis_list"
         :unified-attrib="data.unified_attrib"

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

@@ -52,7 +52,7 @@
       />
 
       <AnswerAnalysisList
-        v-if="data.answer_list.length > 0 || data.analysis_list.length > 0"
+        v-if="data.answer_list?.length > 0 || data.analysis_list?.length > 0"
         :answer-list="data.answer_list"
         :analysis-list="data.analysis_list"
         :unified-attrib="data.unified_attrib"

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

@@ -67,7 +67,7 @@
       />
 
       <AnswerAnalysisList
-        v-if="data.answer_list.length > 0 || data.analysis_list.length > 0"
+        v-if="data.answer_list?.length > 0 || data.analysis_list?.length > 0"
         :answer-list="data.answer_list"
         :analysis-list="data.analysis_list"
         :unified-attrib="data.unified_attrib"

+ 1 - 1
src/views/book/courseware/create/components/question/newWord_template/NewWordTemplate.vue

@@ -149,7 +149,7 @@
       </div>
       <el-button icon="el-icon-plus" style="margin: 10px 0" @click="addElement">增加一个</el-button>
       <AnswerAnalysisList
-        v-if="data.answer_list.length > 0 || data.analysis_list.length > 0"
+        v-if="data.answer_list?.length > 0 || data.analysis_list?.length > 0"
         :answer-list="data.answer_list"
         :analysis-list="data.analysis_list"
         :unified-attrib="data.unified_attrib"

+ 1 - 1
src/views/book/courseware/create/components/question/pinyin_base/PinyinBase.vue

@@ -72,7 +72,7 @@
         </div>
       </div>
       <AnswerAnalysisList
-        v-if="data.answer_list.length > 0 || data.analysis_list.length > 0"
+        v-if="data.answer_list?.length > 0 || data.analysis_list?.length > 0"
         :answer-list="data.answer_list"
         :analysis-list="data.analysis_list"
         :unified-attrib="data.unified_attrib"

+ 1 - 1
src/views/book/courseware/create/components/question/record_input/RecordInput.vue

@@ -33,7 +33,7 @@
         </el-form-item>
       </el-form>
       <AnswerAnalysisList
-        v-if="data.answer_list.length > 0 || data.analysis_list.length > 0"
+        v-if="data.answer_list?.length > 0 || data.analysis_list?.length > 0"
         :answer-list="data.answer_list"
         :analysis-list="data.analysis_list"
         :unified-attrib="data.unified_attrib"

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

@@ -54,7 +54,7 @@
       />
 
       <AnswerAnalysisList
-        v-if="data.answer_list.length > 0 || data.analysis_list.length > 0"
+        v-if="data.answer_list?.length > 0 || data.analysis_list?.length > 0"
         :answer-list="data.answer_list"
         :analysis-list="data.analysis_list"
         :unified-attrib="data.unified_attrib"

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

@@ -62,7 +62,7 @@
       />
 
       <AnswerAnalysisList
-        v-if="data.answer_list.length > 0 || data.analysis_list.length > 0"
+        v-if="data.answer_list?.length > 0 || data.analysis_list?.length > 0"
         :answer-list="data.answer_list"
         :analysis-list="data.analysis_list"
         :unified-attrib="data.unified_attrib"

+ 1 - 1
src/views/book/courseware/create/components/question/table/Table.vue

@@ -105,7 +105,7 @@
         </div>
       </template>
       <AnswerAnalysisList
-        v-if="data.answer_list.length > 0 || data.analysis_list.length > 0"
+        v-if="data.answer_list?.length > 0 || data.analysis_list?.length > 0"
         :answer-list="data.answer_list"
         :analysis-list="data.analysis_list"
         :unified-attrib="data.unified_attrib"

+ 1 - 1
src/views/book/courseware/create/components/question/video_interaction/VideoInteraction.vue

@@ -84,7 +84,7 @@
         @SubmitTranslation="handleMultilingualTranslation"
       />
       <AnswerAnalysisList
-        v-if="data.answer_list.length > 0 || data.analysis_list.length > 0"
+        v-if="data.answer_list?.length > 0 || data.analysis_list?.length > 0"
         :answer-list="data.answer_list"
         :analysis-list="data.analysis_list"
         :unified-attrib="data.unified_attrib"

+ 1 - 1
src/views/book/courseware/create/components/question/voice_matrix/VoiceMatrix.vue

@@ -84,7 +84,7 @@
       />
 
       <AnswerAnalysisList
-        v-if="data.answer_list.length > 0 || data.analysis_list.length > 0"
+        v-if="data.answer_list?.length > 0 || data.analysis_list?.length > 0"
         :answer-list="data.answer_list"
         :analysis-list="data.analysis_list"
         :unified-attrib="data.unified_attrib"

+ 2 - 0
src/views/book/courseware/preview/common/AnswerAnalysis.vue

@@ -112,10 +112,12 @@ export default {
     answerList: {
       type: Array,
       required: true,
+      default: () => [],
     },
     analysisList: {
       type: Array,
       required: true,
+      default: () => [],
     },
   },
   data() {

+ 9 - 3
src/views/book/courseware/preview/common/PreviewOperation.vue

@@ -1,17 +1,23 @@
 <template>
   <div class="operation">
-    <div class="button retry"></div>
-    <div class="button correct"></div>
-    <div class="button answer" @click="showAnswerAnalysis()"></div>
+    <div v-show="permissionControl.can_answer" class="button retry"></div>
+    <div v-show="permissionControl.can_correct || permissionControl.can_check_correct" class="button correct"></div>
+    <div v-show="permissionControl.can_show_answer" class="button answer" @click="showAnswerAnalysis()"></div>
   </div>
 </template>
 
 <script>
 export default {
   name: 'PreviewOperation',
+  inject: ['getPermissionControl'],
   data() {
     return {};
   },
+  computed: {
+    permissionControl() {
+      return this.getPermissionControl();
+    },
+  },
   methods: {
     showAnswerAnalysis() {
       this.$emit('showAnswerAnalysis');