natasha hai 1 ano
pai
achega
9c51053faf

+ 1 - 1
src/views/exercise_questions/create/components/exercises/ChineseQuestion.vue

@@ -284,7 +284,7 @@ export default {
         this.loading_list[i].loading = true;
         let MethodName = 'tool-PinyinToVoiceFile';
         let data = {
-          pinyin: item.pinyin.trim(),
+          pinyin: item.pinyin.trim().split(' ').join(','),
         };
         GetStaticResources(MethodName, data)
           .then((res) => {

+ 38 - 8
src/views/exercise_questions/create/components/exercises/ChooseToneQuestion.vue

@@ -45,10 +45,13 @@
               @deleteFile="deleteFiles"
             />
             <div v-else-if="data.other.audio_generation_method === 'auto'" class="auto-matically">
-              <AudioPlay :file-id="item.audio_file_id" theme-color="gray" v-if="item.audio_file_id" />
-              <span class="auto-btn" @click="handleMatically(item)" v-loading="item.loading">{{
-                item.audio_file_id ? '已生成' : '自动生成'
-              }}</span>
+              <AudioPlay v-if="item.audio_file_id" :file-id="item.audio_file_id" theme-color="gray" />
+              <span
+                v-loading="loading_list[i] ? loading_list[i].loading : false"
+                class="auto-btn"
+                @click="handleMatically(item, i)"
+                >{{ item.audio_file_id ? '已生成' : '自动生成' }}</span
+              >
             </div>
             <SoundRecord v-else :wav-blob.sync="item.audio_file_id" />
             <SvgIcon icon-class="delete" class="delete pointer" @click="deleteOption(i, item.audio_file_id)" />
@@ -172,8 +175,34 @@ export default {
       data: JSON.parse(JSON.stringify(ChooseToneData)),
       matically_pinyin_obj: {}, // 存放转成声调的拼音
       res_arr: [],
+      loading_list: [
+        {
+          loading: false,
+        },
+        {
+          loading: false,
+        },
+        {
+          loading: false,
+        },
+      ],
     };
   },
+  watch: {
+    'data.option_list.length': {
+      handler(val) {
+        this.loading_list = [];
+        for (let i = 0; i < val; i++) {
+          let obj = {
+            loading: false,
+          };
+          this.loading_list.push(obj);
+        }
+      },
+      deep: true,
+      immediate: true,
+    },
+  },
   created() {},
   methods: {
     addOption() {
@@ -197,13 +226,14 @@ export default {
         .then(() => {
           this.data.option_list.splice(i, 1);
           this.data.file_id_list.splice(this.data.file_id_list.indexOf(file_id), 1);
+          this.loading_list.splice(i, 1);
         })
         .catch(() => {});
     },
     // 自动生成音频
-    handleMatically(item) {
+    handleMatically(item, i) {
       if (item.content.trim()) {
-        this.$set(item, 'loading', true);
+        this.loading_list[i].loading = true;
         if (!this.matically_pinyin_obj[item.mark]) {
           this.handleItemAnswer(item);
         }
@@ -213,14 +243,14 @@ export default {
         };
         GetStaticResources(MethodName, data)
           .then((res) => {
-            item.loading = false;
+            this.loading_list[i].loading = false;
             if (res.status === 1) {
               item.audio_file_id = res.file_id;
               this.data.file_id_list.push(res.file_id);
             }
           })
           .catch(() => {
-            item.loading = false;
+            this.loading_list[i].loading = false;
           });
       }
     },

+ 48 - 12
src/views/exercise_questions/create/components/exercises/WordCardQuestion.vue

@@ -39,9 +39,13 @@
               </el-button>
             </div>
             <UploadDrag v-else ref="uploadDrag" :item-index="i" :limit="1" @fileUploadSuccess="fileUploadSuccess" />
-            <div v-loading="item.loadings" class="word-card-item">
+            <div v-loading="loading_list[i] ? loading_list[i].loadings : false" class="word-card-item">
               <div class="word-card">
-                <el-input v-model="item.content" :placeholder="'输入汉字或词汇'" @blur="handleChineseStrokes(item)" />
+                <el-input
+                  v-model="item.content"
+                  :placeholder="'输入汉字或词汇'"
+                  @blur="handleChineseStrokes(item, i)"
+                />
                 <el-input v-model="item.pinyin" :placeholder="'拼音间用空格隔开'" />
                 <UploadAudio
                   v-if="data.other.audio_generation_method === 'upload'"
@@ -54,9 +58,12 @@
                 />
                 <div v-else-if="data.other.audio_generation_method === 'auto'" class="auto-matically">
                   <AudioPlay v-if="item.audio_file_id" :file-id="item.audio_file_id" theme-color="gray" />
-                  <span v-loading="item.loading" class="auto-btn" @click="handleMatically(item)">{{
-                    item.audio_file_id ? '已生成' : '自动生成'
-                  }}</span>
+                  <span
+                    v-loading="loading_list[i] ? loading_list[i].loading : false"
+                    class="auto-btn"
+                    @click="handleMatically(item, i)"
+                    >{{ item.audio_file_id ? '已生成' : '自动生成' }}</span
+                  >
                 </div>
                 <SoundRecord v-else :wav-blob.sync="item.audio_file_id" />
                 <span class="rate-box"><el-rate v-model="item.rate" /></span>
@@ -186,6 +193,20 @@ export default {
       handleInputNumber,
       pic_list: {},
       is_first: true,
+      loading_list: [
+        {
+          loading: false,
+          loadings: false,
+        },
+        {
+          loading: false,
+          loadings: false,
+        },
+        {
+          loading: false,
+          loadings: false,
+        },
+      ],
     };
   },
   watch: {
@@ -197,6 +218,20 @@ export default {
       },
       deep: true,
     },
+    'data.option_list.length': {
+      handler(val) {
+        this.loading_list = [];
+        for (let i = 0; i < val; i++) {
+          let obj = {
+            loading: false,
+            loadings: false,
+          };
+          this.loading_list.push(obj);
+        }
+      },
+      deep: true,
+      immediate: true,
+    },
   },
   methods: {
     // 初始化数据
@@ -230,6 +265,7 @@ export default {
           this.data.option_list.splice(i, 1);
           this.data.file_id_list.splice(this.data.file_id_list.indexOf(file_id), 1);
           this.data.file_id_list.splice(this.data.file_id_list.indexOf(pic_id), 1);
+          this.loading_list.splice(i, 1);
         })
         .catch(() => {});
     },
@@ -249,23 +285,23 @@ export default {
         .catch(() => {});
     },
     // 自动生成音频
-    handleMatically(item) {
+    handleMatically(item, i) {
       if (item.pinyin.trim()) {
-        this.$set(item, 'loading', true);
+        this.loading_list[i].loading = true;
         let MethodName = 'tool-PinyinToVoiceFile';
         let data = {
           pinyin: item.pinyin.trim().split(' ').join(','),
         };
         GetStaticResources(MethodName, data)
           .then((res) => {
-            item.loading = false;
+            this.loading_list[i].loading = false;
             if (res.status === 1) {
               item.audio_file_id = res.file_id;
               this.data.file_id_list.push(res.file_id);
             }
           })
           .catch(() => {
-            item.loading = false;
+            this.loading_list[i].loading = false;
           });
       }
     },
@@ -275,9 +311,9 @@ export default {
       this.$set(this.pic_list, file_id, file_url);
     },
     // 生成汉字
-    handleChineseStrokes(item) {
+    handleChineseStrokes(item, i) {
       if (item.content.trim()) {
-        this.$set(item, 'loadings', true);
+        this.loading_list[i].loadings = true;
         let content_arr = item.content.trim().split('');
         let content_arrs = [];
         let content_arr_strokes = [];
@@ -300,7 +336,7 @@ export default {
             content_arr_strokes[indexc] = obj;
           });
         });
-        item.loadings = false;
+        this.loading_list[i].loadings = false;
 
         item.hz_strokes_list = content_arr_strokes;
       }

+ 32 - 11
src/views/exercise_questions/preview/ReplaceAnswerPreview.vue

@@ -9,12 +9,13 @@
     <div class="option-list">
       <div v-for="(item, i) in option_list" :key="i" :class="['option-item']">
         <template v-if="item.length > 1">
-          <!-- <el-select v-model="answer.answer_list[0].mark_list[i]" placeholder="请选择">
-            <el-option v-for="items in item" :key="items.content" :label="items.content" :value="items.content">
-            </el-option>
-          </el-select> -->
           <span class="select-item select-active">{{ active_content[i] }}</span>
-          <ul :ref="'ui' + i" class="replace-ul" @scroll="handleScroll($event, i)">
+          <ul
+            :ref="'ui' + i"
+            class="replace-ul"
+            :style="{ overflow: isJudgingRightWrong ? 'hidden' : 'scroll' }"
+            @scroll="handleScroll($event, i)"
+          >
             <li
               v-for="(items, indexs) in item"
               :key="indexs"
@@ -25,7 +26,7 @@
             </li>
           </ul>
         </template>
-        <span v-else class="select-item">{{ item[0].content }}</span>
+        <span v-else class="select-item replace-ul">{{ item[0].content }}</span>
       </div>
       <SoundRecordPreview
         :wav-blob.sync="answer.answer_list[0].audio_file_id"
@@ -64,10 +65,15 @@ export default {
       deep: true,
       immediate: true,
     },
+    isJudgingRightWrong: {
+      handler(val) {
+        if (!val) return;
+        this.handleData();
+      },
+      immediate: true,
+    },
   },
-  created() {
-    // this.handleData();
-  },
+  created() {},
   mounted() {},
   methods: {
     // 初始化数据
@@ -94,8 +100,22 @@ export default {
       option_lists.forEach((option_item) => {
         if (option_item.length > 0) {
           this.option_list.push(option_item);
-          this.answer.answer_list[0].mark_list.push(option_item.length > 1 ? option_item[0].mark : '');
-          this.active_content.push(option_item.length > 1 ? option_item[0].content : '');
+          if (this.isJudgingRightWrong) {
+            this.active_content.push('');
+            this.answer.answer_list[0].mark_list.forEach((item_mark, index_mark) => {
+              option_item.forEach((option_items, index_items) => {
+                if (item_mark === option_items.mark) {
+                  this.active_content[index_mark] = option_items.content;
+                  setTimeout(() => {
+                    this.$refs[`ui${index_mark}`][0].scrollTop = index_items * 48;
+                  }, 100);
+                }
+              });
+            });
+          } else {
+            this.answer.answer_list[0].mark_list.push(option_item.length > 1 ? option_item[0].mark : '');
+            this.active_content.push(option_item.length > 1 ? option_item[0].content : '');
+          }
         }
       });
     },
@@ -108,6 +128,7 @@ export default {
       this.$forceUpdate();
     },
     handleClickItem(i, indexs) {
+      if (this.isJudgingRightWrong) return;
       this.$refs[`ui${i}`][0].scrollTop = indexs * 48;
       this.active_content[i] = this.option_list[i][indexs].content;
       this.answer.answer_list[0].mark_list[i] = this.option_list[i][indexs].mark;

+ 3 - 1
src/views/exercise_questions/preview/SortPreview.vue

@@ -44,7 +44,7 @@
         </div>
       </transition-group>
     </draggable>
-    <template v-if="isJudgingRightWrong">
+    <template v-if="isJudgingRightWrong && !is_all_right">
       <h4 class="right-title">正确答案:</h4>
       <draggable
         v-model="move_list"
@@ -87,6 +87,7 @@ export default {
       drag: false,
       click_index_list: [], // 点击选中的索引
       disrupted: false, // 是否打乱
+      is_all_right: false, // 是否全对
     };
   },
   watch: {
@@ -108,6 +109,7 @@ export default {
             ...this.data.option_list.find((items) => items.mark === item),
           };
         });
+        this.is_all_right = JSON.stringify(this.answer.answer_list) === JSON.stringify(this.data.answer.answer_list);
       },
       immediate: true,
     },

+ 2 - 2
src/views/exercise_questions/preview/WritePictruePreview.vue

@@ -28,7 +28,7 @@
 
     <div class="content-right" v-if="answer.answer_list[active_index]">
       <el-input
-        v-model="answer.answer_list[active_index].value"
+        v-model="answer.answer_list[active_index].text"
         rows="12"
         resize="none"
         type="textarea"
@@ -114,7 +114,7 @@ export default {
         this.data.option_list.forEach((item) => {
           let obj = {
             mark: item.mark,
-            value: '',
+            text: '',
             accessory_file_id: [], // 上传文件列表
           };
           this.answer.answer_list.push(obj);