| 
					
				 | 
			
			
				@@ -25,7 +25,40 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       <div class="content"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         <label class="title-little">题目:</label> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        <el-input v-model="data.content" rows="3" resize="none" type="textarea" placeholder="输入汉字,用空格分开" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <ul> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <li v-for="(item, i) in data.option_list" :key="i" class="content-item"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <el-input v-model="item.content" maxlength="1" placeholder="输入一个汉字" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <el-input v-model="item.pinyin" placeholder="输入拼音" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <UploadAudio 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              v-if="data.other.audio_generation_method === 'upload'" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              :key="item.audio_file_id || i" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              :file-id="item.audio_file_id" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              :item-index="i" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              :show-upload="!item.audio_file_id" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              @upload="uploads" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              @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" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              <span class="auto-btn" @click="handleMatically">自动生成</span> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <SoundRecord 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              v-else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              :wav-blob="item.audio_wav" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              :record-time="item.audio_wav_time" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              :item-index="i" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              @deleteWav="deleteWav" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              @updateWav="updateWav" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <el-input v-if="data.property.learn_type !== 'learn'" v-model="item.definition" placeholder="输入释义" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <SvgIcon icon-class="delete" class="delete pointer" @click="deleteOption(i, item.audio_file_id)" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          </li> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        </ul> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      <div class="footer"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <span class="add-option" @click="addOption"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <SvgIcon icon-class="add-circle" size="14" /> <span>增加选项</span> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        </span> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     </template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -87,6 +120,16 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             {{ label }} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           </el-radio> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         </el-form-item> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <el-form-item label="音频"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <el-radio 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            v-for="{ value, label } in audioGenerationMethodList" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            :key="value" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            v-model="data.other.audio_generation_method" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            :label="value" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          > 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            {{ label }} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          </el-radio> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        </el-form-item> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       </el-form> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     </template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   </QuestionBase> 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -94,22 +137,124 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 <script> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import QuestionMixin from '../common/QuestionMixin.js'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import UploadAudio from '../common/UploadAudio.vue'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import SoundRecord from '../common/SoundRecord.vue'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { changeOptionType } from '@/views/exercise_questions/data/common'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import { chineseData, learnTypeList } from '@/views/exercise_questions/data/chinese'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  chineseData, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  learnTypeList, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  audioGenerationMethodList, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  getOption, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} from '@/views/exercise_questions/data/chinese'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   name: 'ChineseQuestion', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  components: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    UploadAudio, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    SoundRecord, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   mixins: [QuestionMixin], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   data() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       learnTypeList, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      audioGenerationMethodList, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       changeOptionType, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       data: JSON.parse(JSON.stringify(chineseData)), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  methods: {}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  methods: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    addOption() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.data.option_list.push(getOption()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    uploads(file_id, index) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.data.option_list[index].audio_file_id = file_id; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.data.file_id_list.push(file_id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    deleteFiles(file_id, itemIndex) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.data.option_list[itemIndex].audio_file_id = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.data.file_id_list.splice(this.data.file_id_list.indexOf(file_id), 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 删除小题 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    deleteOption(i, file_id) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.data.option_list.splice(i, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.data.file_id_list.splice(this.data.file_id_list.indexOf(file_id), 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 自动生成音频 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    handleMatically() {}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 清除录音 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    deleteWav(index) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.data.option_list[index].audio_wav = ''; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.data.option_list[index].audio_wav_time = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 更新录音内容和时间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    updateWav(index, wav, time) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.data.option_list[index].audio_wav = wav; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.data.option_list[index].audio_wav_time = time; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 </script> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-<style lang="scss" scoped></style> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<style lang="scss" scoped> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+.content { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  display: flex; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  flex-direction: column; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  .content-item { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    .upload-wrapper { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      margin-top: 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    :deep .file-name { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      width: 205px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      overflow: hidden; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      text-overflow: ellipsis; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      white-space: nowrap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    .auto-matically { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      display: flex; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      align-items: center; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      width: 233px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      padding: 5px 12px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      background-color: $fill-color; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      border-radius: 2px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      .audio-wrapper { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        margin-right: 12px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        :deep .audio-play { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          width: 16px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          height: 16px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          color: #000; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          background-color: initial; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        :deep .audio-play.not-url { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          color: #a1a1a1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        :deep .voice-play { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          width: 16px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          height: 16px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      .auto-btn { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        font-size: 14px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        font-weight: 400; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        line-height: 22px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        color: #1d2129; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        cursor: pointer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    .delete { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      flex-shrink: 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      width: 16px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      height: 16px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+</style> 
			 |