|  | @@ -25,7 +25,39 @@
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        <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"
 | 
	
		
			
				|  |  | +              @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-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 +119,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,21 +136,62 @@
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  <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>
 | 
	
		
			
				|  |  |  
 |