|
|
@@ -16,7 +16,13 @@
|
|
|
/>
|
|
|
<div
|
|
|
class="option-content"
|
|
|
- :class="[isJudgingRightWrong ? (con_preview[0].all_right ? 'all-right' : 'has-error') : '']"
|
|
|
+ :class="[
|
|
|
+ isJudgingRightWrong && data.property.fun_type === 'mark'
|
|
|
+ ? con_preview[0].all_right
|
|
|
+ ? 'all-right'
|
|
|
+ : 'has-error'
|
|
|
+ : '',
|
|
|
+ ]"
|
|
|
:style="{
|
|
|
fontSize: data.unified_attrib && data.unified_attrib.font_size ? data.unified_attrib.font_size : '',
|
|
|
}"
|
|
|
@@ -27,12 +33,7 @@
|
|
|
<span
|
|
|
v-for="(itemc, indexc) in con_preview"
|
|
|
:key="indexc"
|
|
|
- :class="[
|
|
|
- 'item-con',
|
|
|
- isJudgingRightWrong && itemc.type === 'input' && item.answer && item.con !== item.answer
|
|
|
- ? 'error'
|
|
|
- : '',
|
|
|
- ]"
|
|
|
+ :class="['item-con', isJudgingRightWrong && itemc.type === 'input' ? itemc.is_right : '']"
|
|
|
>
|
|
|
<el-input
|
|
|
v-if="itemc.type === 'input'"
|
|
|
@@ -142,13 +143,59 @@
|
|
|
ref="record"
|
|
|
type="normal"
|
|
|
class="record-box"
|
|
|
- :answer-record-list="data.record_list"
|
|
|
+ :answer-record-list="answer.answer_list[0].record_list"
|
|
|
:task-model="isJudgingRightWrong ? 'ANSWER' : ''"
|
|
|
:attrib="data.unified_attrib"
|
|
|
@handleWav="handleWav"
|
|
|
/>
|
|
|
</template>
|
|
|
</div>
|
|
|
+ <div v-if="isShowRightAnswer && data.property.fun_type === 'input'" class="right-answer">
|
|
|
+ <div class="title" style="margin: 10px 0">正确答案</div>
|
|
|
+ <div
|
|
|
+ class="content-box"
|
|
|
+ :class="[data.property.arrange_type === 'horizontal' ? 'content-box-flex' : 'content-box-vertical']"
|
|
|
+ >
|
|
|
+ <div class="first-con">
|
|
|
+ <AudioPlay
|
|
|
+ v-if="data.audio_file_id && data.property.audio_position === 'front'"
|
|
|
+ :file-id="data.file_list[0].file_url"
|
|
|
+ :theme-color="
|
|
|
+ data.unified_attrib && data.unified_attrib.topic_color ? data.unified_attrib.topic_color : ''
|
|
|
+ "
|
|
|
+ />
|
|
|
+ <div
|
|
|
+ class="option-content"
|
|
|
+ :style="{
|
|
|
+ fontSize: data.unified_attrib && data.unified_attrib.font_size ? data.unified_attrib.font_size : '',
|
|
|
+ }"
|
|
|
+ >
|
|
|
+ <span v-if="data.content_hz" class="items-hz">{{ data.content_hz }}</span>
|
|
|
+ <!-- 拼音输入 -->
|
|
|
+ <template v-if="data.property.fun_type === 'input'">
|
|
|
+ <span
|
|
|
+ v-for="(itemc, indexc) in con_preview"
|
|
|
+ :key="indexc"
|
|
|
+ :class="['item-con', itemc.type === 'input' ? 'right' : '']"
|
|
|
+ >
|
|
|
+ <el-input
|
|
|
+ v-if="itemc.type === 'input'"
|
|
|
+ v-model="itemc.answer"
|
|
|
+ :disabled="true"
|
|
|
+ :style="[{ width: Math.max(20, itemc.con.length * 10) + 'px' }]"
|
|
|
+ class="item-input"
|
|
|
+ />
|
|
|
+ <span v-else>{{ itemc.con }}</span>
|
|
|
+ </span>
|
|
|
+ </template>
|
|
|
+ </div>
|
|
|
+ <AudioPlay
|
|
|
+ v-if="data.audio_file_id && data.property.audio_position === 'back'"
|
|
|
+ :file-id="data.audio_file_id"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</template>
|
|
|
@@ -160,6 +207,7 @@ import PreviewMixin from '../common/PreviewMixin';
|
|
|
import AudioPlay from '../character_base/components/AudioPlay.vue';
|
|
|
import SoundRecord from '../../common/SoundRecord.vue';
|
|
|
import { addTone, handleToneValue } from '@/utils/common';
|
|
|
+import { data } from 'jquery';
|
|
|
|
|
|
export default {
|
|
|
name: 'PinyinBasePreview',
|
|
|
@@ -217,11 +265,12 @@ export default {
|
|
|
handler(val) {
|
|
|
if (!val) return;
|
|
|
this.judgeRight();
|
|
|
+ this.$forceUpdate();
|
|
|
},
|
|
|
immediate: true,
|
|
|
},
|
|
|
- 'data.record_list'(val) {
|
|
|
- this.data.record_list = val;
|
|
|
+ 'answer.answer_list'(val) {
|
|
|
+ this.answer.answer_list = val;
|
|
|
},
|
|
|
},
|
|
|
created() {
|
|
|
@@ -309,6 +358,14 @@ export default {
|
|
|
inputIndex++;
|
|
|
}
|
|
|
});
|
|
|
+ if (!this.isJudgingRightWrong) {
|
|
|
+ let obj = {
|
|
|
+ mark: this.data.mark,
|
|
|
+ value: this.con_preview,
|
|
|
+ record_list: [],
|
|
|
+ };
|
|
|
+ this.answer.answer_list.push(obj);
|
|
|
+ }
|
|
|
} else {
|
|
|
// this.data.option_list.forEach((item) => {
|
|
|
let con_arr = JSON.parse(JSON.stringify(this.data.content_view));
|
|
|
@@ -334,12 +391,14 @@ export default {
|
|
|
let obj = {
|
|
|
mark: this.data.mark,
|
|
|
value: user_submit,
|
|
|
+ record_list: [],
|
|
|
};
|
|
|
this.answer.answer_list.push(obj);
|
|
|
}
|
|
|
this.con_preview.push(obj);
|
|
|
// });
|
|
|
}
|
|
|
+
|
|
|
this.show_preview = true;
|
|
|
},
|
|
|
handleReplaceTone(e, arr, index, resArr) {
|
|
|
@@ -479,72 +538,100 @@ export default {
|
|
|
},
|
|
|
// 判断对错
|
|
|
judgeRight() {
|
|
|
- if (this.data.property.fun_type === 'input') {
|
|
|
- } else {
|
|
|
- this.con_preview = [];
|
|
|
- }
|
|
|
-
|
|
|
this.show_preview = false;
|
|
|
- // this.data.option_list.forEach((item, index) => {
|
|
|
- let con_arr = JSON.parse(JSON.stringify(this.data.content_view));
|
|
|
- let user_answer = [];
|
|
|
- let user_select = [];
|
|
|
- let user_res_arr = [];
|
|
|
|
|
|
let answer_list_item = this.answer.answer_list.filter((items) => this.data.mark === items.mark);
|
|
|
- con_arr.forEach((items, indexs) => {
|
|
|
- user_answer.push({
|
|
|
- select_tone: answer_list_item[0].value[indexs],
|
|
|
- select_letter: '',
|
|
|
- select_index: '',
|
|
|
- is_right: answer_list_item[0].value[indexs] === this.data.answer.answer_list[0].value[indexs],
|
|
|
- right_answer: this.data.answer.answer_list[0].value[indexs],
|
|
|
+ if (this.data.property.fun_type === 'input') {
|
|
|
+ this.con_preview.forEach((items, indexs) => {
|
|
|
+ if (items.type === 'input') {
|
|
|
+ let is_right = items.answer
|
|
|
+ ? answer_list_item[0].value[indexs].con === items.answer
|
|
|
+ ? 'right'
|
|
|
+ : 'error'
|
|
|
+ : '';
|
|
|
+ this.$set(items, 'is_right', is_right);
|
|
|
+ }
|
|
|
});
|
|
|
- user_res_arr.push([]);
|
|
|
- user_select.push('');
|
|
|
- if (this.data.property.answer_mode === 'label') {
|
|
|
- this.handleReplaceTone(answer_list_item[0].value[indexs], user_select, indexs, user_res_arr[indexs]);
|
|
|
- if (
|
|
|
- answer_list_item[0].value[indexs].match(/\d+/g) &&
|
|
|
- answer_list_item[0].value[indexs].match(/\d+/g).length > 0
|
|
|
- ) {
|
|
|
- user_answer[indexs].select_tone = answer_list_item[0].value[indexs].match(/\d+/g)[0];
|
|
|
- let letter_number = answer_list_item[0].value[indexs].match(/\d+/g)[0];
|
|
|
- let letter_index = answer_list_item[0].value[indexs].indexOf(letter_number) - 1;
|
|
|
- user_answer[indexs].select_letter = answer_list_item[0].value[indexs].substring(
|
|
|
- letter_index,
|
|
|
- letter_index + 1,
|
|
|
- );
|
|
|
- user_answer[indexs].select_index_submit = letter_index;
|
|
|
- } else {
|
|
|
- user_select[indexs] = items;
|
|
|
+ } else {
|
|
|
+ this.con_preview = [];
|
|
|
+ let con_arr = JSON.parse(JSON.stringify(this.data.content_view));
|
|
|
+ let user_answer = [];
|
|
|
+ let user_select = [];
|
|
|
+ let user_res_arr = [];
|
|
|
+
|
|
|
+ con_arr.forEach((items, indexs) => {
|
|
|
+ user_answer.push({
|
|
|
+ select_tone: answer_list_item[0].value[indexs],
|
|
|
+ select_letter: '',
|
|
|
+ select_index: '',
|
|
|
+ is_right:
|
|
|
+ this.data.answer.answer_list[0] &&
|
|
|
+ this.data.answer.answer_list[0].value &&
|
|
|
+ this.data.answer.answer_list[0].value[indexs] &&
|
|
|
+ answer_list_item[0].value[indexs] === this.data.answer.answer_list[0].value[indexs],
|
|
|
+ right_answer:
|
|
|
+ this.data.answer.answer_list[0] &&
|
|
|
+ this.data.answer.answer_list[0].value &&
|
|
|
+ this.data.answer.answer_list[0].value[indexs]
|
|
|
+ ? this.data.answer.answer_list[0].value[indexs]
|
|
|
+ : null,
|
|
|
+ });
|
|
|
+ user_res_arr.push([]);
|
|
|
+ user_select.push('');
|
|
|
+ if (this.data.property.fun_type === 'mark') {
|
|
|
+ if (this.data.property.answer_mode === 'label') {
|
|
|
+ this.handleReplaceTone(answer_list_item[0].value[indexs], user_select, indexs, user_res_arr[indexs]);
|
|
|
+ if (
|
|
|
+ answer_list_item[0].value[indexs].match(/\d+/g) &&
|
|
|
+ answer_list_item[0].value[indexs].match(/\d+/g).length > 0
|
|
|
+ ) {
|
|
|
+ user_answer[indexs].select_tone = answer_list_item[0].value[indexs].match(/\d+/g)[0];
|
|
|
+ let letter_number = answer_list_item[0].value[indexs].match(/\d+/g)[0];
|
|
|
+ let letter_index = answer_list_item[0].value[indexs].indexOf(letter_number) - 1;
|
|
|
+ user_answer[indexs].select_letter = answer_list_item[0].value[indexs].substring(
|
|
|
+ letter_index,
|
|
|
+ letter_index + 1,
|
|
|
+ );
|
|
|
+ user_answer[indexs].select_index_submit = letter_index;
|
|
|
+ } else {
|
|
|
+ user_select[indexs] = items;
|
|
|
+ }
|
|
|
+ user_answer[indexs].right_answer = this.data.answer.answer_list[0].value[indexs].match(/0|1|2|3|4/)
|
|
|
+ ? this.data.answer.answer_list[0].value[indexs].match(/0|1|2|3|4/)[0]
|
|
|
+ : '';
|
|
|
+ user_answer[indexs].right_index = this.data.answer.answer_list[0].value[indexs].search(/0|1|2|3|4/) - 1;
|
|
|
+ } else {
|
|
|
+ this.handleReplaceTone(
|
|
|
+ items + answer_list_item[0].value[indexs],
|
|
|
+ user_select,
|
|
|
+ indexs,
|
|
|
+ user_res_arr[indexs],
|
|
|
+ );
|
|
|
+ user_select[indexs] = items;
|
|
|
+ }
|
|
|
+ } else if (this.data.property.fun_type === 'input') {
|
|
|
}
|
|
|
- user_answer[indexs].right_answer = this.data.answer.answer_list[0].value[indexs].match(/0|1|2|3|4/)
|
|
|
- ? this.data.answer.answer_list[0].value[indexs].match(/0|1|2|3|4/)[0]
|
|
|
- : '';
|
|
|
- user_answer[indexs].right_index = this.data.answer.answer_list[0].value[indexs].search(/0|1|2|3|4/) - 1;
|
|
|
- } else {
|
|
|
- this.handleReplaceTone(items + answer_list_item[0].value[indexs], user_select, indexs, user_res_arr[indexs]);
|
|
|
- }
|
|
|
- });
|
|
|
- let obj = {
|
|
|
- item_con: user_select,
|
|
|
- item_con_yuan: JSON.parse(JSON.stringify(con_arr)),
|
|
|
- mark: this.data.mark,
|
|
|
- user_answer,
|
|
|
- item_active_index: 0,
|
|
|
- active_letter: '',
|
|
|
- user_res_arr,
|
|
|
- all_right: JSON.stringify(answer_list_item[0].value) === JSON.stringify(this.data.answer.answer_list[0].value),
|
|
|
- };
|
|
|
- this.con_preview.push(obj);
|
|
|
- // });
|
|
|
+ });
|
|
|
+ let obj = {
|
|
|
+ item_con: user_select,
|
|
|
+ item_con_yuan: JSON.parse(JSON.stringify(con_arr)),
|
|
|
+ mark: this.data.mark,
|
|
|
+ user_answer,
|
|
|
+ item_active_index: 0,
|
|
|
+ active_letter: '',
|
|
|
+ user_res_arr,
|
|
|
+ all_right:
|
|
|
+ JSON.stringify(answer_list_item[0].value) === JSON.stringify(this.data.answer.answer_list[0].value),
|
|
|
+ };
|
|
|
+ this.con_preview.push(obj);
|
|
|
+ }
|
|
|
+
|
|
|
setTimeout(() => {
|
|
|
this.show_preview = true;
|
|
|
}, 100);
|
|
|
},
|
|
|
handleWav(data) {
|
|
|
- this.data.record_list = data;
|
|
|
+ this.answer.answer_list[0].record_list = data;
|
|
|
},
|
|
|
onInputChange(item) {
|
|
|
let answer = item.con;
|
|
|
@@ -630,10 +717,20 @@ export default {
|
|
|
|
|
|
&.right {
|
|
|
color: $right-color;
|
|
|
+
|
|
|
+ :deep .el-input__inner {
|
|
|
+ color: $right-color;
|
|
|
+ border-bottom-color: $right-color;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
&.error {
|
|
|
color: $error-color;
|
|
|
+
|
|
|
+ :deep .el-input__inner {
|
|
|
+ color: $error-color;
|
|
|
+ border-bottom-color: $error-color;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
&.active {
|