|  | @@ -20,7 +20,7 @@
 | 
	
		
			
				|  |  |            {{ data.property.role_list.find(({ mark }) => mark === item.role).name }}
 | 
	
		
			
				|  |  |          </span>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        <div v-if="item.type === 'text'" class="text-wrapper">
 | 
	
		
			
				|  |  | +        <div v-if="item.type === 'text' || item.type === 'input'" class="text-wrapper">
 | 
	
		
			
				|  |  |            <div class="text">
 | 
	
		
			
				|  |  |              <template v-for="(li, j) in item.content_list">
 | 
	
		
			
				|  |  |                <span v-if="li.type === 'text'" :key="j">{{ li.content }}</span>
 | 
	
	
		
			
				|  | @@ -29,23 +29,21 @@
 | 
	
		
			
				|  |  |                    :key="j"
 | 
	
		
			
				|  |  |                    v-model="li.content"
 | 
	
		
			
				|  |  |                    :disabled="disabled"
 | 
	
		
			
				|  |  | -                  :class="[...computedAnswerClass(li.mark, li.content)]"
 | 
	
		
			
				|  |  | +                  :class="[...computedAnswerClass(item.mark, li.mark, li.content)]"
 | 
	
		
			
				|  |  |                    :style="[{ width: Math.max(80, li.content.length * 16) + 'px' }]"
 | 
	
		
			
				|  |  |                  />
 | 
	
		
			
				|  |  |                  <span
 | 
	
		
			
				|  |  | -                  v-show="computedAnswerText(li.mark, li.content).length > 0"
 | 
	
		
			
				|  |  | +                  v-show="computedAnswerText(item.mark, li.mark, li.content).length > 0"
 | 
	
		
			
				|  |  |                    :key="`answer-${j}`"
 | 
	
		
			
				|  |  |                    class="right-answer"
 | 
	
		
			
				|  |  |                  >
 | 
	
		
			
				|  |  | -                  {{ computedAnswerText(li.mark, li.content) }}
 | 
	
		
			
				|  |  | +                  {{ computedAnswerText(item.mark, li.mark, li.content) }}
 | 
	
		
			
				|  |  |                  </span>
 | 
	
		
			
				|  |  |                </template>
 | 
	
		
			
				|  |  |              </template>
 | 
	
		
			
				|  |  |            </div>
 | 
	
		
			
				|  |  |            <SoundRecordPreview
 | 
	
		
			
				|  |  | -            v-if="
 | 
	
		
			
				|  |  | -              isEnable(data.property.is_enable_voice_answer) && item.content_list.some(({ type }) => type === 'input')
 | 
	
		
			
				|  |  | -            "
 | 
	
		
			
				|  |  | +            v-if="isEnable(data.property.is_enable_voice_answer) && item.type === 'input'"
 | 
	
		
			
				|  |  |              :wav-blob.sync="item.file_id"
 | 
	
		
			
				|  |  |              :disabled="disabled"
 | 
	
		
			
				|  |  |              type="small"
 | 
	
	
		
			
				|  | @@ -109,20 +107,20 @@ export default {
 | 
	
		
			
				|  |  |        handler(val) {
 | 
	
		
			
				|  |  |          this.answer.answer_list = [];
 | 
	
		
			
				|  |  |          val.forEach(({ type, content_list, mark, file_id }) => {
 | 
	
		
			
				|  |  | -          if (type !== 'text') return;
 | 
	
		
			
				|  |  | +          if (type !== 'input') return;
 | 
	
		
			
				|  |  |            let list = content_list
 | 
	
		
			
				|  |  |              .map(({ type, mark, content }) => {
 | 
	
		
			
				|  |  |                if (type !== 'input') return;
 | 
	
		
			
				|  |  |                return {
 | 
	
		
			
				|  |  |                  mark,
 | 
	
		
			
				|  |  | -                content,
 | 
	
		
			
				|  |  | +                value: content,
 | 
	
		
			
				|  |  |                };
 | 
	
		
			
				|  |  |              })
 | 
	
		
			
				|  |  |              .filter((item) => item);
 | 
	
		
			
				|  |  |            if (list.length <= 0) return;
 | 
	
		
			
				|  |  |            this.answer.answer_list.push({
 | 
	
		
			
				|  |  |              content_list: list,
 | 
	
		
			
				|  |  | -            file_id,
 | 
	
		
			
				|  |  | +            audio_file_id: file_id,
 | 
	
		
			
				|  |  |              mark,
 | 
	
		
			
				|  |  |            });
 | 
	
		
			
				|  |  |          });
 | 
	
	
		
			
				|  | @@ -132,13 +130,13 @@ export default {
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  |      isJudgingRightWrong(val) {
 | 
	
		
			
				|  |  |        if (!val) return;
 | 
	
		
			
				|  |  | -      this.answer.answer_list.forEach(({ mark, file_id, content_list }) => {
 | 
	
		
			
				|  |  | -        let find = this.optionList.find((item) => item.mark === mark);
 | 
	
		
			
				|  |  | -        find.file_id = file_id;
 | 
	
		
			
				|  |  | -        find.content_list.forEach((item) => {
 | 
	
		
			
				|  |  | +      this.answer.answer_list.forEach(({ mark, audio_file_id, content_list }) => {
 | 
	
		
			
				|  |  | +        let findOption = this.optionList.find((item) => item.mark === mark);
 | 
	
		
			
				|  |  | +        findOption.file_id = audio_file_id;
 | 
	
		
			
				|  |  | +        findOption.content_list.forEach((item) => {
 | 
	
		
			
				|  |  |            if (item.type === 'text') return;
 | 
	
		
			
				|  |  |            let find = content_list.find((li) => li.mark === item.mark);
 | 
	
		
			
				|  |  | -          item.content = find.content;
 | 
	
		
			
				|  |  | +          item.content = find.value;
 | 
	
		
			
				|  |  |          });
 | 
	
		
			
				|  |  |        });
 | 
	
		
			
				|  |  |      },
 | 
	
	
		
			
				|  | @@ -146,16 +144,19 @@ export default {
 | 
	
		
			
				|  |  |    methods: {
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  |       * 计算答题对错选项字体颜色
 | 
	
		
			
				|  |  | +     * @param {string} optionMark 选项标识
 | 
	
		
			
				|  |  |       * @param {string} mark 选项标识
 | 
	
		
			
				|  |  |       * @param {string} content 选项内容
 | 
	
		
			
				|  |  |       */
 | 
	
		
			
				|  |  | -    computedAnswerClass(mark, content) {
 | 
	
		
			
				|  |  | +    computedAnswerClass(optionMark, mark, content) {
 | 
	
		
			
				|  |  |        if (!this.isJudgingRightWrong && !this.isShowRightAnswer) {
 | 
	
		
			
				|  |  |          return '';
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  | -      let rightValue = this.data.answer.answer_list.find((item) => item.mark === mark)?.value || '';
 | 
	
		
			
				|  |  | +      let rightValue = this.data.answer.answer_list
 | 
	
		
			
				|  |  | +        .find((item) => item.mark === optionMark)
 | 
	
		
			
				|  |  | +        .content_list.find((item) => item.mark === mark).value;
 | 
	
		
			
				|  |  |        let classList = [];
 | 
	
		
			
				|  |  | -      let isRight = rightValue === content;
 | 
	
		
			
				|  |  | +      let isRight = rightValue.split('/').includes(content);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        if (this.isJudgingRightWrong) {
 | 
	
		
			
				|  |  |          isRight ? classList.push('right') : classList.push('wrong');
 | 
	
	
		
			
				|  | @@ -166,11 +167,19 @@ export default {
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |        return classList;
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  | -    computedAnswerText(mark, content) {
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 计算答题对错选项内容
 | 
	
		
			
				|  |  | +     * @param {string} optionMark 选项标识
 | 
	
		
			
				|  |  | +     * @param {string} mark 选项标识
 | 
	
		
			
				|  |  | +     * @param {string} content 选项内容
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    computedAnswerText(optionMark, mark, content) {
 | 
	
		
			
				|  |  |        if (!this.isShowRightAnswer) return '';
 | 
	
		
			
				|  |  |        if (content.length === 0) return '';
 | 
	
		
			
				|  |  | -      let find = this.data.answer.answer_list.find((item) => item.mark === mark);
 | 
	
		
			
				|  |  | -      if (find.value === content) return '';
 | 
	
		
			
				|  |  | +      let find = this.data.answer.answer_list
 | 
	
		
			
				|  |  | +        .find((item) => item.mark === optionMark)
 | 
	
		
			
				|  |  | +        .content_list.find((item) => item.mark === mark);
 | 
	
		
			
				|  |  | +      if (find.value.split('/').includes(content)) return '';
 | 
	
		
			
				|  |  |        if (!find) return '';
 | 
	
		
			
				|  |  |        return `(${find.value})`;
 | 
	
		
			
				|  |  |      },
 |