Bläddra i källkod

修改选择声调数据结构

natasha 1 år sedan
förälder
incheckning
e6a7d3a2ad

+ 18 - 10
src/views/exercise_questions/create/components/exercises/ChooseToneQuestion.vue

@@ -32,14 +32,14 @@
             </span>
             <el-input v-model="item.content" placeholder="输入内容" @blur="handleItemAnswer(item)" />
             <UploadAudio
-              v-if="data.property.audio_generation_method === 'upload'"
+              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.property.audio_generation_method === 'auto'" class="auto-matically">
+            <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>
@@ -51,7 +51,7 @@
               @deleteWav="deleteWav"
               @updataWav="updataWav"
             />
-            <SvgIcon icon-class="delete" class="delete pointer" @click="deleteOption(i)" />
+            <SvgIcon icon-class="delete" class="delete pointer" @click="deleteOption(i, item.audio_file_id)" />
           </li>
         </ul>
       </div>
@@ -126,7 +126,7 @@
           <el-radio
             v-for="{ value, label } in audioGenerationMethodList"
             :key="value"
-            v-model="data.property.audio_generation_method"
+            v-model="data.other.audio_generation_method"
             :label="value"
           >
             {{ label }}
@@ -173,9 +173,16 @@ export default {
     },
     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() {},
@@ -191,7 +198,7 @@ export default {
     },
     // 答案
     handleItemAnswer(item) {
-      const index = this.data.answer.select_list.findIndex((items) => items.mark === item.mark);
+      const index = this.data.answer.answer_list.findIndex((items) => items.mark === item.mark);
       let content = item.content.trim();
       let content_arr = content.split(' ');
       let select_item = '';
@@ -214,7 +221,8 @@ export default {
           }
           if (this.data.property.tone_type === 'select') {
             // 如果是选择声调 把声调放在拼音后面
-            select_item += `${items_yuan + items_trim.substring(indexs, indexs + 1)} `;
+            // select_item += `${items_yuan + items_trim.substring(indexs, indexs + 1)} `;
+            select_item += `${items_trim.substring(indexs, indexs + 1)} `;
           } else if (this.data.property.tone_type === 'dimension') {
             // 如果是标注声调 把声调放在对应字母后面
             select_item += `${items_trim} `;
@@ -225,13 +233,13 @@ export default {
       if (index === -1) {
         let obj = {
           mark: item.mark,
-          select_item: select_item.trim(),
+          value: select_item.trim().split(' '),
         };
-        this.data.answer.select_list.push(obj);
+        this.data.answer.answer_list.push(obj);
       } else {
-        this.data.answer.select_list[index].select_item = select_item.trim();
+        this.data.answer.answer_list[index].value = select_item.trim().split(' ');
       }
-      item.content_preview = content_preview.trim();
+      item.content_preview = content_preview.trim().split(' ');
     },
     // 改变类型
     handleChangeType() {

+ 4 - 3
src/views/exercise_questions/data/chooseTone.js

@@ -5,7 +5,7 @@ export function getOption(content = '') {
   return {
     content,
     mark: getRandomNumber(),
-    content_preview: '',
+    content_preview: [],
     audio_file_id: '',
     tone: '',
     audio_wav: '',
@@ -48,19 +48,20 @@ export const ChooseToneData = {
   description: '', // 描述
   option_number_show_mode: optionTypeList[0].value, // 选项类型
   option_list: [getOption(), getOption(), getOption()], // 选项
-  answer: { score: 0, score_type: scoreTypeList[0].value, select_list: [] }, // 答案
+  file_id_list: [],
+  answer: { score: 0, score_type: scoreTypeList[0].value, answer_list: [] }, // 答案
   // 题型属性
   property: {
     stem_type: stemTypeList[0].value, // 题干类型
     question_number: 1, // 题号
     is_enable_description: false, // 描述
     tone_type: toneTypeList[0].value, // 音调类型
-    audio_generation_method: audioGenerationMethodList[0].value, // 音频生成方式
     score: 1, // 分值
     score_type: scoreTypeList[0].value, // 分值类型
   },
   // 其他属性
   other: {
     question_number_type: questionNumberTypeList[0].value, // 题号类型
+    audio_generation_method: audioGenerationMethodList[0].value, // 音频生成方式
   },
 };

+ 1 - 1
src/views/exercise_questions/data/write.js

@@ -7,7 +7,7 @@ export const writeData = {
   description: '', // 描述
   article: '', // 文章
   sample_text: '', // 范文
-  answer: { score: 0, score_type: scoreTypeList[0].value, write_con: '', sound_src: '', file_list: [] }, // 答案
+  answer: { score: 0, score_type: scoreTypeList[0].value }, // 答案
   // 题型属性
   property: {
     stem_type: stemTypeList[0].value, // 题干类型

+ 2 - 5
src/views/exercise_questions/preview/ChooseTonePreview.vue

@@ -8,7 +8,7 @@
     <div v-if="data.property.is_enable_description" class="description">{{ data.description }}</div>
 
     <div class="option-list">
-      <li v-for="(item, i) in data.option_list" :key="i" :class="['option-item', { active: isAnswer(item.mark) }]">
+      <li v-for="(item, i) in data.option_list" :key="i" :class="['option-item']">
         <span>{{ computeOptionMethods[data.option_number_show_mode](i) }}. </span>
         <AudioPlay v-if="item.audio_file_id" :file-id="item.audio_file_id" />
         <div class="option-content">
@@ -103,9 +103,6 @@ export default {
     this.handleData();
   },
   methods: {
-    isAnswer(mark, option_type) {
-      return this.answer.select_list.some((li) => li.mark === mark && li.option_type === option_type);
-    },
     chooseTone(item, value, i) {
       if (!this.active_letter && this.data.property.tone_type === 'dimension') return;
       item.user_answer[item.item_active_index].select_tone = value;
@@ -133,7 +130,7 @@ export default {
     handleData() {
       this.con_preview = [];
       this.data.option_list.forEach((item) => {
-        let con_arr = item.content_preview.split(' ');
+        let con_arr = item.content_preview;
         let user_answer = [];
         con_arr.forEach(() => {
           user_answer.push({

+ 7 - 2
src/views/exercise_questions/preview/WritePreview.vue

@@ -7,7 +7,10 @@
     </div>
     <div v-html="sanitizeHTML(data.article)"></div>
     <div v-if="data.property.is_enable_description" class="description">{{ data.description }}</div>
-    <div v-html="sanitizeHTML(data.sample_text)"></div>
+    <template v-if="data.property.is_enable_model_essay">
+      <el-divider content-position="center"><span :class="[show_sample_text ? '' : '']">查看范文</span></el-divider>
+      <div v-html="sanitizeHTML(data.sample_text)"></div>
+    </template>
   </div>
 </template>
 
@@ -18,7 +21,9 @@ export default {
   name: 'WritePreview',
   mixins: [PreviewMixin],
   data() {
-    return {};
+    return {
+      show_sample_text: false,
+    };
   },
   created() {
     console.log(this.data);