Browse Source

汉字练习笔画

natasha 1 year ago
parent
commit
10f713f45b

+ 39 - 5
src/views/exercise_questions/create/components/exercises/ChineseQuestion.vue

@@ -26,7 +26,7 @@
       <div class="content">
         <label class="title-little">题目:</label>
         <ul>
-          <li v-for="(item, i) in data.option_list" :key="i" class="content-item">
+          <li v-for="(item, i) in data.option_list" :key="i" class="content-item" v-loading="item.loadings">
             <span
               class="question-number"
               @dblclick="changeOptionType(data)"
@@ -39,6 +39,7 @@
               v-model="item.content"
               :maxlength="data.property.learn_type === 'dictation' ? null : 1"
               :placeholder="data.property.learn_type === 'dictation' ? '输入汉字或词汇' : '输入一个汉字'"
+              @blur="handleChineseStrokes(item)"
             />
             <el-input
               v-model="item.pinyin"
@@ -214,10 +215,12 @@ export default {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning',
-      }).then(() => {
-        this.data.option_list.splice(i, 1);
-        this.data.file_id_list.splice(this.data.file_id_list.indexOf(file_id), 1);
-      });
+      })
+        .then(() => {
+          this.data.option_list.splice(i, 1);
+          this.data.file_id_list.splice(this.data.file_id_list.indexOf(file_id), 1);
+        })
+        .catch(() => {});
     },
     // 自动生成音频
     handleMatically(item) {
@@ -251,6 +254,37 @@ export default {
         });
       }
     },
+    // 生成汉字
+    handleChineseStrokes(item) {
+      if (item.content.trim()) {
+        this.$set(item, 'loadings', true);
+        let content_arr = item.content.trim().split('');
+        let content_arrs = [];
+        let content_arr_strokes = [];
+        content_arr.forEach((itemc) => {
+          if (itemc.trim()) {
+            content_arrs.push(itemc.trim());
+          }
+        });
+        content_arrs.forEach((itemc, indexc) => {
+          content_arr_strokes.push(null);
+          let MethodName = 'hz_resource_manager-GetHZStrokesContent';
+          let data = {
+            hz: itemc,
+          };
+          GetStaticResources(MethodName, data).then((res) => {
+            let obj = {
+              hz: itemc.trim(),
+              strokes: res,
+            };
+            content_arr_strokes[indexc] = obj;
+          });
+        });
+        item.loadings = false;
+
+        item.chinese_strokes = content_arr_strokes;
+      }
+    },
   },
 };
 </script>

+ 6 - 4
src/views/exercise_questions/create/components/exercises/ChooseToneQuestion.vue

@@ -189,10 +189,12 @@ export default {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning',
-      }).then(() => {
-        this.data.option_list.splice(i, 1);
-        this.data.file_id_list.splice(this.data.file_id_list.indexOf(file_id), 1);
-      });
+      })
+        .then(() => {
+          this.data.option_list.splice(i, 1);
+          this.data.file_id_list.splice(this.data.file_id_list.indexOf(file_id), 1);
+        })
+        .catch(() => {});
     },
     // 自动生成音频
     handleMatically(item) {

+ 6 - 4
src/views/exercise_questions/create/components/exercises/RepeatQuestion.vue

@@ -164,10 +164,12 @@ export default {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning',
-      }).then(() => {
-        this.data.option_list.splice(i, 1);
-        this.data.file_id_list.splice(this.data.file_id_list.indexOf(file_id), 1);
-      });
+      })
+        .then(() => {
+          this.data.option_list.splice(i, 1);
+          this.data.file_id_list.splice(this.data.file_id_list.indexOf(file_id), 1);
+        })
+        .catch(() => {});
     },
   },
 };

+ 7 - 5
src/views/exercise_questions/create/components/exercises/WordCardQuestion.vue

@@ -232,11 +232,13 @@ export default {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning',
-      }).then(() => {
-        this.data.option_list.splice(i, 1);
-        this.data.file_id_list.splice(this.data.file_id_list.indexOf(file_id), 1);
-        this.data.file_id_list.splice(this.data.file_id_list.indexOf(pic_id), 1);
-      });
+      })
+        .then(() => {
+          this.data.option_list.splice(i, 1);
+          this.data.file_id_list.splice(this.data.file_id_list.indexOf(file_id), 1);
+          this.data.file_id_list.splice(this.data.file_id_list.indexOf(pic_id), 1);
+        })
+        .catch(() => {});
     },
     // 删除
     delectOptions(i, id) {

+ 1 - 0
src/views/exercise_questions/data/chinese.js

@@ -9,6 +9,7 @@ export function getOption(content = '') {
     pinyin: '',
     definition: '',
     collocation: '',
+    chinese_strokes: [],
   };
 }
 // 汉字类型列表

+ 11 - 12
src/views/exercise_questions/preview/ChinesePreview.vue

@@ -10,7 +10,7 @@
     <!-- 笔画学习 -->
     <div :class="['words-box', 'words-box-' + data.property.learn_type]">
       <div v-for="(item, index) in data.option_list" :key="index" :class="['words-item']">
-        <template v-if="item.content && item.content.trim() && item.strokes">
+        <template v-if="item.content && item.content.trim() && item.chinese_strokes[0].strokes">
           <div
             v-if="data.property.learn_type !== 'dictation'"
             class="words-top"
@@ -31,7 +31,7 @@
               :play-storkes="true"
               :book-text="item.content"
               :target-div="'pre' + item.content + index"
-              :book-strokes="item.strokes"
+              :book-strokes="item.chinese_strokes[0].strokes"
               :class="['strock-chinese', 'border-right-none']"
             />
             <Strockred
@@ -41,7 +41,7 @@
               :hanzi-color="hanzi_color"
               :reset="true"
               :target-div="'write-praT' + item.content + itemI + Math.random().toString(36).substring(2, 10)"
-              :book-strokes="item.strokes"
+              :book-strokes="item.chinese_strokes[0].strokes"
               :class="[
                 'strock-chinese',
                 (itemI + 1) % writer_number_yuan !== 0 && itemI !== writer_number ? 'border-right-none' : '',
@@ -68,7 +68,7 @@
               :play-storkes="true"
               :book-text="item.content"
               :target-div="'pre' + item.content + index"
-              :book-strokes="item.strokes"
+              :book-strokes="item.chinese_strokes[0].strokes"
               :class="['strock-chinese']"
             />
             <div v-for="(items, indexs) in item.imgArr" :key="indexs" class="con-box">
@@ -133,7 +133,6 @@ import PreviewMixin from './components/PreviewMixin';
 import Strockplayredline from './components/common/Strockplayredline.vue';
 import Strockred from './components/common/Strockred.vue';
 import FreewriteLettle from './components/common/FreewriteLettle.vue';
-import { GetStaticResources } from '@/api/app';
 
 export default {
   name: 'ChinesePreview',
@@ -249,13 +248,13 @@ export default {
           item.imgArr = arr;
           this.answer_list.write_model[this.hz_data[index]] = arr;
         } else if (item.content.trim()) {
-          let MethodName = 'hz_resource_manager-GetHZStrokesContent';
-          let data = {
-            hz: item.content.trim(),
-          };
-          GetStaticResources(MethodName, data).then((res) => {
-            this.$set(item, 'strokes', res);
-          });
+          // let MethodName = 'hz_resource_manager-GetHZStrokesContent';
+          // let data = {
+          //   hz: item.content.trim(),
+          // };
+          // GetStaticResources(MethodName, data).then((res) => {
+          //   this.$set(item, 'strokes', res);
+          // });
 
           for (let i = 0; i < this.writer_number; i++) {
             arr.push(null);

+ 1 - 1
src/views/exercise_questions/preview/WordCardPreview.vue

@@ -84,7 +84,7 @@
 <script>
 import { computeOptionMethods } from '@/views/exercise_questions/data/common';
 import PreviewMixin from './components/PreviewMixin';
-import { GetStaticResources, GetFileStoreInfo } from '@/api/app';
+import { GetFileStoreInfo } from '@/api/app';
 import SoundRecordPreview from './components/common/SoundRecordPreview.vue';
 import Strockplayredline from './components/common/Strockplayredline.vue';