Ver Fonte

61、58、55

natasha há 1 ano atrás
pai
commit
abdddb0d80

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

@@ -55,7 +55,9 @@
             />
             <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)">自动生成</span>
+              <span class="auto-btn" @click="handleMatically(item)" v-loading="item.loading">{{
+                item.audio_file_id ? '已生成' : '自动生成'
+              }}</span>
             </div>
             <SoundRecord v-else :wav-blob.sync="item.audio_file_id" />
             <el-input
@@ -220,17 +222,23 @@ export default {
     // 自动生成音频
     handleMatically(item) {
       if (item.pinyin.trim()) {
+        this.$set(item, 'loading', true);
         let MethodName = 'tool-PinyinToVoiceFile';
         let data = {
           pinyin: item.pinyin.trim(),
         };
-        GetStaticResources(MethodName, data).then((res) => {
-          if (res.status === 1) {
-            this.data.file_id_list.splice(this.data.file_id_list.indexOf(item.file_id), 1);
-            item.audio_file_id = res.file_id;
-            this.data.file_id_list.push(res.file_id);
-          }
-        });
+        GetStaticResources(MethodName, data)
+          .then((res) => {
+            item.loading = false;
+            if (res.status === 1) {
+              this.data.file_id_list.splice(this.data.file_id_list.indexOf(item.file_id), 1);
+              item.audio_file_id = res.file_id;
+              this.data.file_id_list.push(res.file_id);
+            }
+          })
+          .catch(() => {
+            item.loading = false;
+          });
       }
     },
     // 改变类型

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

@@ -42,7 +42,9 @@
             />
             <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)">自动生成</span>
+              <span class="auto-btn" @click="handleMatically(item)" v-loading="item.loading">{{
+                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)" />
@@ -195,6 +197,7 @@ export default {
     // 自动生成音频
     handleMatically(item) {
       if (item.content.trim()) {
+        this.$set(item, 'loading', true);
         if (!this.matically_pinyin_obj[item.mark]) {
           this.handleItemAnswer(item);
         }
@@ -202,13 +205,18 @@ export default {
         let data = {
           pinyin: this.matically_pinyin_obj[item.mark],
         };
-        GetStaticResources(MethodName, data).then((res) => {
-          if (res.status === 1) {
-            this.data.file_id_list.splice(this.data.file_id_list.indexOf(item.file_id), 1);
-            item.audio_file_id = res.file_id;
-            this.data.file_id_list.push(res.file_id);
-          }
-        });
+        GetStaticResources(MethodName, data)
+          .then((res) => {
+            item.loading = false;
+            if (res.status === 1) {
+              this.data.file_id_list.splice(this.data.file_id_list.indexOf(item.file_id), 1);
+              item.audio_file_id = res.file_id;
+              this.data.file_id_list.push(res.file_id);
+            }
+          })
+          .catch(() => {
+            item.loading = false;
+          });
       }
     },
     handleReplaceTone(value, mark) {

+ 16 - 8
src/views/exercise_questions/create/components/exercises/WordCardQuestion.vue

@@ -60,7 +60,9 @@
                 />
                 <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)">自动生成</span>
+                  <span class="auto-btn" @click="handleMatically(item)" v-loading="item.loading">{{
+                    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"></el-rate></span>
@@ -254,17 +256,23 @@ export default {
     // 自动生成音频
     handleMatically(item) {
       if (item.pinyin.trim()) {
+        this.$set(item, 'loading', true);
         let MethodName = 'tool-PinyinToVoiceFile';
         let data = {
           pinyin: item.pinyin.trim().split(' ').join(','),
         };
-        GetStaticResources(MethodName, data).then((res) => {
-          if (res.status === 1) {
-            this.data.file_id_list.splice(this.data.file_id_list.indexOf(item.file_id), 1);
-            item.audio_file_id = res.file_id;
-            this.data.file_id_list.push(res.file_id);
-          }
-        });
+        GetStaticResources(MethodName, data)
+          .then((res) => {
+            item.loading = false;
+            if (res.status === 1) {
+              this.data.file_id_list.splice(this.data.file_id_list.indexOf(item.file_id), 1);
+              item.audio_file_id = res.file_id;
+              this.data.file_id_list.push(res.file_id);
+            }
+          })
+          .catch(() => {
+            item.loading = false;
+          });
       }
     },
     fileUploadSuccess(file_id, file_url, index) {

+ 1 - 1
src/views/exercise_questions/preview/AnswerQuestionPreview.vue

@@ -11,7 +11,7 @@
     <AudioPlay v-if="data.file_id_list.length > 0" :file-id="data.file_id_list[0]" />
 
     <SoundRecordPreview :wav-blob.sync="answer.answer_list[0].voice_file_id" />
-    <div v-if="isEnable(data.property.is_enable_reference_answer)" class="reference-box">
+    <div v-if="isEnable(data.property.is_enable_reference_answer) && 1 === 2" class="reference-box">
       <h5 class="reference-title">参考答案</h5>
       <span class="reference-answer" v-html="sanitizeHTML(data.reference_answer)"></span>
     </div>

+ 11 - 11
src/views/exercise_questions/preview/TalkPictruePreview.vue

@@ -13,7 +13,7 @@
           height="276px"
           :autoplay="false"
           indicator-position="none"
-          arrow="never"
+          arrow="always"
           @change="changeImg"
         >
           <el-carousel-item v-for="(item, index) in data.option_list" :key="index">
@@ -27,20 +27,13 @@
         </el-carousel>
         <h3 class="pic-title" v-html="sanitizeHTML(data.option_list[active_index].picture_title)"></h3>
         <p class="pic-info" v-html="sanitizeHTML(data.option_list[active_index].picture_info)"></p>
-      </div>
-      <div class="content-right">
-        <el-input
-          v-model="answer_list[active_index].value"
-          rows="12"
-          resize="none"
-          type="textarea"
-          placeholder="请输入"
-        />
+
         <template v-if="isEnable(data.property.is_enable_voice_answer)">
           <!-- 语音作答 -->
           <SoundRecordPreview :wav-blob.sync="answer_list[active_index].audio_file_id" />
         </template>
       </div>
+      <div class="content-right"></div>
     </div>
     <div v-if="isEnable(data.property.is_enable_reference_answer) && 1 === 2" class="reference-box">
       <h5 class="reference-title">参考答案</h5>
@@ -84,7 +77,6 @@ export default {
       this.data.option_list.forEach((item) => {
         let obj = {
           mark: item.mark,
-          value: '',
           audio_file_id: '',
         };
         this.answer_list.push(obj);
@@ -124,6 +116,10 @@ export default {
         opacity: 0.2;
       }
 
+      :deep .el-carousel__arrow:focus {
+        outline: none;
+      }
+
       .el-carousel__item--card.is-active {
         .el-image {
           background: #fff;
@@ -150,6 +146,10 @@ export default {
       }
     }
 
+    .sound-record-wrapper {
+      margin-top: 8px;
+    }
+
     &-right {
       flex: 1;
 

+ 5 - 1
src/views/exercise_questions/preview/WritePictruePreview.vue

@@ -16,7 +16,7 @@
           height="276px"
           :autoplay="false"
           indicator-position="none"
-          arrow="never"
+          arrow="always"
           @change="changeImg"
         >
           <el-carousel-item v-for="(item, index) in data.option_list" :key="index">
@@ -190,6 +190,10 @@ export default {
       }
     }
 
+    :deep .el-carousel__arrow:focus {
+      outline: none;
+    }
+
     &-right {
       flex: 1;