|
@@ -14,7 +14,7 @@
|
|
<div class="content-wrapper">
|
|
<div class="content-wrapper">
|
|
<div class="content">
|
|
<div class="content">
|
|
<div
|
|
<div
|
|
- v-for="({ role, type, text, file_id }, i) in data.option_list"
|
|
|
|
|
|
+ v-for="({ role, type, text }, i) in data.option_list"
|
|
:key="i"
|
|
:key="i"
|
|
class="option-list"
|
|
class="option-list"
|
|
:style="{ flexDirection: type === 'input_student' ? 'row-reverse' : 'row' }"
|
|
:style="{ flexDirection: type === 'input_student' ? 'row-reverse' : 'row' }"
|
|
@@ -31,7 +31,7 @@
|
|
{{ type === 'input_student' ? '学生' : data.property.role_list.find((item) => item.mark === role).name }}
|
|
{{ type === 'input_student' ? '学生' : data.property.role_list.find((item) => item.mark === role).name }}
|
|
</span>
|
|
</span>
|
|
|
|
|
|
- <div v-if="type === 'text' || type === 'input'" class="text">{{ text }}</div>
|
|
|
|
|
|
+ <div v-if="type === 'text'" class="text">{{ text }}</div>
|
|
|
|
|
|
<div v-else-if="type === 'image'" class="image">
|
|
<div v-else-if="type === 'image'" class="image">
|
|
<img :src="file_map_list[file_id]" />
|
|
<img :src="file_map_list[file_id]" />
|
|
@@ -111,15 +111,7 @@
|
|
:autosize="{ minRows: 3 }"
|
|
:autosize="{ minRows: 3 }"
|
|
@keyup.enter.native="handleText"
|
|
@keyup.enter.native="handleText"
|
|
/>
|
|
/>
|
|
- </div>
|
|
|
|
-
|
|
|
|
- <el-button @click="identifyText">识别</el-button>
|
|
|
|
- <div v-if="data.answer.answer_list.length > 0" class="correct-answer">
|
|
|
|
- <template v-for="{ content_list } in data.answer.answer_list">
|
|
|
|
- <el-input v-for="(item, i) in content_list" :key="item.mark" v-model="item.value">
|
|
|
|
- <span slot="prefix">{{ i + 1 }}.</span>
|
|
|
|
- </el-input>
|
|
|
|
- </template>
|
|
|
|
|
|
+ <span class="tips">输入对话内容后请按回车上屏</span>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<div v-if="isEnable(data.property.is_enable_reference_answer)" class="reference-answer">
|
|
<div v-if="isEnable(data.property.is_enable_reference_answer)" class="reference-answer">
|
|
@@ -196,7 +188,7 @@
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item label="角色数">
|
|
<el-form-item label="角色数">
|
|
<el-select v-model="data.property.role_number" placeholder="请选择">
|
|
<el-select v-model="data.property.role_number" placeholder="请选择">
|
|
- <el-option v-for="item in [1, 2, 3, 4, 5]" :key="item" :label="item" :value="item" />
|
|
|
|
|
|
+ <el-option v-for="item in 5" :key="item" :label="item" :value="item" />
|
|
</el-select>
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item v-for="(item, i) in data.property.role_list" :key="i" :label="`角色 ${i + 1}`" class="role">
|
|
<el-form-item v-for="(item, i) in data.property.role_list" :key="i" :label="`角色 ${i + 1}`" class="role">
|
|
@@ -216,12 +208,7 @@ import SoundRecordPreview from '@/views/exercise_questions/preview/components/co
|
|
|
|
|
|
import { getRandomNumber } from '@/utils';
|
|
import { getRandomNumber } from '@/utils';
|
|
import { fileUpload, GetFileURLMap } from '@/api/app';
|
|
import { fileUpload, GetFileURLMap } from '@/api/app';
|
|
-import {
|
|
|
|
- analysisRecognitionDialogueData,
|
|
|
|
- getDialogueData,
|
|
|
|
- getRole,
|
|
|
|
- getTextContenList,
|
|
|
|
-} from '@/views/exercise_questions/data/dialogue';
|
|
|
|
|
|
+import { analysisRecognitionDialogueData, getDialogueData, getRole } from '@/views/exercise_questions/data/dialogue';
|
|
|
|
|
|
export default {
|
|
export default {
|
|
name: 'DialogueQuestion',
|
|
name: 'DialogueQuestion',
|
|
@@ -290,25 +277,6 @@ export default {
|
|
let arr = this.recognitionCommon(text);
|
|
let arr = this.recognitionCommon(text);
|
|
let obj = analysisRecognitionDialogueData(arr);
|
|
let obj = analysisRecognitionDialogueData(arr);
|
|
this.recognitionCommonSetObj(obj);
|
|
this.recognitionCommonSetObj(obj);
|
|
- this.identifyText();
|
|
|
|
- },
|
|
|
|
- // 识别
|
|
|
|
- identifyText() {
|
|
|
|
- let answer_list = [];
|
|
|
|
- this.data.option_list.forEach(({ type, mark, content_list }) => {
|
|
|
|
- if (type !== 'input') return;
|
|
|
|
- let answer = { mark, content_list: [] };
|
|
|
|
- content_list.forEach(({ type, mark }) => {
|
|
|
|
- if (type !== 'input') return;
|
|
|
|
- answer.content_list.push({
|
|
|
|
- mark,
|
|
|
|
- value: this.data.answer.answer_list.find((item) => item.mark === mark)?.value || '',
|
|
|
|
- type: 'any_one',
|
|
|
|
- });
|
|
|
|
- });
|
|
|
|
- answer_list.push(answer);
|
|
|
|
- });
|
|
|
|
- this.data.answer.answer_list = answer_list;
|
|
|
|
},
|
|
},
|
|
// 音频上传前处理
|
|
// 音频上传前处理
|
|
handleBeforeAudio(file) {
|
|
handleBeforeAudio(file) {
|
|
@@ -360,16 +328,12 @@ export default {
|
|
if (this.curRole.length <= 0) {
|
|
if (this.curRole.length <= 0) {
|
|
return this.$message.error('请先选择角色');
|
|
return this.$message.error('请先选择角色');
|
|
}
|
|
}
|
|
- let text = this.textInput.replace(/\n/, '');
|
|
|
|
|
|
|
|
- let { hasFill, content_list } = getTextContenList(text);
|
|
|
|
this.data.option_list.push({
|
|
this.data.option_list.push({
|
|
role: this.curRole,
|
|
role: this.curRole,
|
|
text: this.textInput.replace(/\n/, ''),
|
|
text: this.textInput.replace(/\n/, ''),
|
|
mark: getRandomNumber(),
|
|
mark: getRandomNumber(),
|
|
- file_id: '',
|
|
|
|
- content_list,
|
|
|
|
- type: hasFill ? 'input' : 'text',
|
|
|
|
|
|
+ type: 'text',
|
|
});
|
|
});
|
|
this.textInput = '';
|
|
this.textInput = '';
|
|
},
|
|
},
|
|
@@ -390,12 +354,7 @@ export default {
|
|
* @param {number} i 索引
|
|
* @param {number} i 索引
|
|
*/
|
|
*/
|
|
deleteOption(i) {
|
|
deleteOption(i) {
|
|
- let type = this.data.option_list[i].type;
|
|
|
|
this.data.option_list.splice(i, 1);
|
|
this.data.option_list.splice(i, 1);
|
|
- // 如果删除的是 input,需要重新识别
|
|
|
|
- if (type === 'input') {
|
|
|
|
- this.identifyText();
|
|
|
|
- }
|
|
|
|
},
|
|
},
|
|
// 插入学生
|
|
// 插入学生
|
|
insertStudent() {
|
|
insertStudent() {
|
|
@@ -553,6 +512,11 @@ export default {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ .tips {
|
|
|
|
+ font-size: 14px;
|
|
|
|
+ color: #e82d2d;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
.correct-answer {
|
|
.correct-answer {
|