natasha před 5 měsíci
rodič
revize
5447777246

+ 0 - 2
src/views/book/courseware/create/components/base/h5_games/H5Games.vue

@@ -3,8 +3,6 @@
     <template #content>
       <UploadFile
         key="upload_games"
-        :courseware-id="courseware_id"
-        :component-id="id"
         :type="data.type"
         :total-size="200"
         :file-list="data.file_list"

+ 0 - 2
src/views/book/courseware/create/components/base/upload_preview/UploadPreview.vue

@@ -2,8 +2,6 @@
   <ModuleBase :type="data.type">
     <template #content>
       <UploadFile
-        :courseware-id="courseware_id"
-        :component-id="id"
         :type="data.type"
         :single-size="data.single_size"
         :total-size="data.total_size"

+ 0 - 2
src/views/book/courseware/create/components/question/character_structure/CharacterStructure.vue

@@ -3,8 +3,6 @@
     <template #content>
       <UploadFile
         key="upload_image"
-        :courseware-id="courseware_id"
-        :component-id="id"
         :type="data.type"
         :file-list="data.image_list"
         :file-id-list="data.image_id_list"

+ 0 - 2
src/views/book/courseware/create/components/question/drawing/Drawing.vue

@@ -3,8 +3,6 @@
     <template #content>
       <UploadFile
         key="upload_image"
-        :courseware-id="courseware_id"
-        :component-id="id"
         :type="data.type"
         :total-size="data.total_size"
         :file-list="data.image_list"

+ 0 - 2
src/views/book/courseware/create/components/question/image_text/ImageText.vue

@@ -3,8 +3,6 @@
     <template #content>
       <UploadFile
         key="upload_image"
-        :courseware-id="courseware_id"
-        :component-id="id"
         :type="data.type"
         :total-size="data.total_size"
         :file-list="data.image_list"

+ 147 - 25
src/views/book/courseware/create/components/question/newWord_template/NewWordTemplate.vue

@@ -1,6 +1,30 @@
 <template>
   <ModuleBase :type="data.type">
     <template #content>
+      <div class="fun-type">
+        <a
+          v-for="{ value, label } in modelList"
+          :key="value"
+          :class="[data.property.model === value ? 'active' : '']"
+          @click="data.property.model = value"
+          >{{ label }}</a
+        >
+      </div>
+      <div class="content-box" v-for="(item, index) in data.option_list" :key="index">
+        <div class="content-item">
+          <el-input
+            v-model="item.content"
+            maxlength="10"
+            show-word-limit
+            placeholder="输入汉字,@:代表图片"
+            @blur="handleMindMap"
+          ></el-input>
+          <el-button @click="identify(item)">识别</el-button>
+        </div>
+        <div class="content-items" v-for="(items, indexs) in item.content_list" :key="indexs">
+          <template v-if="items"> <label>内容:</label>{{ items.con }} </template>
+        </div>
+      </div>
       <el-button icon="el-icon-plus" style="margin: 24px 0" @click="addElement">增加一个</el-button>
     </template>
   </ModuleBase>
@@ -9,7 +33,13 @@
 <script>
 import ModuleMixin from '../../common/ModuleMixin';
 
-import { getNewWordTemplateData } from '@/views/book/courseware/data/newWordTemplate';
+import {
+  getNewWordTemplateData,
+  modelList,
+  answer_list,
+  getOption,
+} from '@/views/book/courseware/data/newWordTemplate';
+import { GetStaticResources } from '@/api/app';
 
 export default {
   name: 'NewWordTemplatePage',
@@ -18,44 +48,104 @@ export default {
   data() {
     return {
       data: getNewWordTemplateData(),
+      modelList,
+      answer_list,
+      getOption,
     };
   },
   watch: {
     // 'data.option': 'handleMindMap',
   },
   methods: {
-    // 删除行
-    handleDelete(index) {
-      this.data.option.splice(index, 1);
-    },
-    // 上移下移
-    moveElement(dItem, index, type) {
-      let obj = JSON.parse(JSON.stringify(dItem));
-      if (type == 'up' && index > 0) {
-        this.data.option.splice(index - 1, 0, obj);
-        this.data.option.splice(index + 1, 1);
-      }
-      if (type == 'down' && index < this.data.option.length - 1) {
-        this.data.option[index] = this.data.option.splice(index + 1, 1, this.data.option[index])[0];
-      }
-    },
     // 增加
     addElement() {
-      this.data.option.push(getOption());
+      this.data.option_list.push(getOption());
     },
     handleMindMap() {
       // 思维导图数据
       let node_list = [];
-      this.data.option.forEach((item) => {
+      this.data.option_list.forEach((item) => {
         node_list.push({
-          name: item.con.replace(/<[^>]*>?/gm, ''),
+          name: item.content.replace(/<[^>]*>?/gm, ''),
           id: Math.random().toString(36).substring(2, 12),
         });
       });
       this.data.mind_map.node_list = node_list;
     },
-    handleBlurCon() {
-      this.handleMindMap();
+    // 识别
+    async identify(items) {
+      let con = items.content.trim();
+      if (con) {
+        items.content_list = [];
+        let arr = con.split('');
+        const regex = /[\u4E00-\u9FFF]/;
+        let str = '';
+        arr.forEach((item) => {
+          if (regex.test(item)) {
+            str += item;
+          }
+        });
+        let MethodName = 'hz_resource_manager-GetMultHZStrokesContent';
+        let data = {
+          hz_str: str,
+        };
+
+        await GetStaticResources(MethodName, data)
+          .then((res) => {
+            for (let key in res) {
+              if (key != 'status' && key != ',' && res[key]) {
+                res[key] = JSON.parse(res[key]);
+              }
+            }
+            let hzDetailList = res;
+            arr.forEach((item, index) => {
+              let objs = {};
+              if (item === '@') {
+                // 图片
+                objs = {
+                  con: item,
+                  type: 'img',
+                  file_list: [],
+                  file_id_list: [],
+                };
+              } else if (item === '#') {
+                // 书写
+                objs = {
+                  con: item,
+                  type: 'write',
+                  img: '',
+                  base64: '',
+                };
+              } else if (regex.test(item)) {
+                // 汉字
+                let hz_list = [];
+                let res = JSON.parse(JSON.stringify(hzDetailList[item]));
+                let obj = {
+                  con: item,
+                  hzDetail: {
+                    hz_json: res,
+                  },
+                };
+                hz_list.push(obj);
+                objs = {
+                  con: item,
+                  type: 'hanzi',
+                  hz_info: hz_list,
+                };
+              } else {
+                // 连字符
+                objs = {
+                  con: item,
+                  type: 'lian',
+                };
+              }
+              this.$set(items.content_list, index, objs);
+            });
+          })
+          .catch(() => {});
+      } else {
+        this.$message.warning('请先输入内容');
+      }
     },
   },
 };
@@ -89,9 +179,41 @@ export default {
     cursor: pointer;
   }
 }
-</style>
-<style lang="scss">
-.tox .tox-editor-header {
-  z-index: 3 !important;
+
+.fun-type {
+  display: flex;
+  gap: 5px;
+  width: 100%;
+  padding-bottom: 10px;
+  border-bottom: 1px solid #e5e6eb;
+
+  a {
+    padding: 5px 10px;
+    font-weight: normal;
+    color: #1d2129;
+    cursor: pointer;
+    background: #f2f3f5;
+    border: 1px solid #f2f3f5;
+    border-radius: 2px;
+
+    &.active {
+      color: #165dff;
+      background: #e7eeff;
+      border-color: #165dff;
+    }
+  }
+}
+
+.content-box {
+  margin: 10px 0;
+}
+
+.content-item {
+  display: flex;
+  gap: 16px;
+
+  .el-input {
+    max-width: 400px;
+  }
 }
 </style>

+ 31 - 1
src/views/book/courseware/create/components/question/newWord_template/NewWordTemplateSetting.vue

@@ -2,14 +2,42 @@
   <div>
     <el-form :model="property" label-width="72px" label-position="left">
       <SerailNumber :property="property" />
+      <el-form-item label="播放笔顺">
+        <el-radio-group v-model="property.is_enable_play_structure">
+          <el-radio v-for="{ value, label } in showList" :key="value" :label="value">
+            {{ label }}
+          </el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="拼音">
+        <el-radio-group v-model="property.is_enable_pinyin">
+          <el-radio v-for="{ value, label } in showList" :key="value" :label="value">
+            {{ label }}
+          </el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="标红笔画">
+        <el-radio-group v-model="property.is_enable_high_strokes">
+          <el-radio v-for="{ value, label } in showList" :key="value" :label="value">
+            {{ label }}
+          </el-radio>
+        </el-radio-group>
+      </el-form-item>
     </el-form>
+    <el-form-item label="释义" v-if="property.model === 'input'">
+      <el-radio-group v-model="property.is_enable_shiyi">
+        <el-radio v-for="{ value, label } in showList" :key="value" :label="value">
+          {{ label }}
+        </el-radio>
+      </el-radio-group>
+    </el-form-item>
   </div>
 </template>
 
 <script>
 import SettingMixin from '@/views/book/courseware/create/components/common/SettingMixin';
 
-import { getNewWordTemplateProperty } from '@/views/book/courseware/data/newWordTemplate';
+import { getNewWordTemplateProperty, showList, displayList } from '@/views/book/courseware/data/newWordTemplate';
 
 export default {
   name: 'NewWordTemplateSetting',
@@ -17,6 +45,8 @@ export default {
   data() {
     return {
       property: getNewWordTemplateProperty(),
+      showList,
+      displayList,
     };
   },
   methods: {},

+ 0 - 2
src/views/book/courseware/create/components/question/video_interaction/VideoInteraction.vue

@@ -3,8 +3,6 @@
     <template #content>
       <UploadFile
         key="upload_image"
-        :courseware-id="courseware_id"
-        :component-id="id"
         :type="data.type"
         :total-size="data.total_size"
         :file-list="data.video_list"

+ 0 - 1
src/views/book/courseware/create/components/question/write/Write.vue

@@ -9,7 +9,6 @@
         </template>
         <template v-else>
           <UploadFile
-            :courseware-id="courseware_id"
             :type="'picture'"
             :single-size="data.single_size"
             :total-size="data.total_size"

+ 8 - 8
src/views/book/courseware/data/bookType.js

@@ -407,14 +407,14 @@ export const bookTypeOption = [
         set: DrawingSetting,
         preview: DrawingPreview,
       },
-      // {
-      //   value: 'newWord_template',
-      //   label: '生字',
-      //   icon: '',
-      //   component: NewWordTemplate,
-      //   set: NewWordTemplateSetting,
-      //   preview: NewWordTemplatePreview,
-      // },
+      {
+        value: 'newWord_template',
+        label: '生字',
+        icon: '',
+        component: NewWordTemplate,
+        set: NewWordTemplateSetting,
+        preview: NewWordTemplatePreview,
+      },
       {
         value: 'character_structure',
         label: '汉字结构',

+ 0 - 66
src/views/book/courseware/data/newWordTemplate copy.js

@@ -1,66 +0,0 @@
-import {
-  displayList,
-  serialNumberTypeList,
-  serialNumberPositionList,
-  arrangeTypeList,
-  switchOption,
-  isEnable,
-} from '@/views/book/courseware/data/common';
-
-export { arrangeTypeList, switchOption, isEnable };
-
-// 显示
-export const showList = [
-  {
-    value: 'true',
-    label: '显示',
-  },
-  {
-    value: 'false',
-    label: '不显示',
-  },
-];
-
-// 汉字框
-export const frameList = [
-  {
-    value: 'tian',
-    label: '田字格',
-  },
-  {
-    value: 'fang',
-    label: '方框',
-  },
-  {
-    value: 'none',
-    label: '无',
-  },
-];
-
-export function getNewWordTemplateProperty() {
-  return {
-    serial_number: 1,
-    sn_type: serialNumberTypeList[0].value,
-    sn_position: serialNumberPositionList[3].value,
-    sn_display_mode: displayList[0].value,
-
-    is_enable_pinyin: showList[0].value,
-    
-  };
-}
-
-export function getNewWordTemplateData() {
-  return {
-    type: 'newWord_template',
-    title: '生字',
-    property: getNewWordTemplateProperty(),
-    content: '',
-    content_list: [],
-    mind_map: {
-      node_list: [{ name: '生字' }], // 思维导图数据
-    },
-    answer: {
-      answer_list: [],
-    },
-  };
-}

+ 51 - 3
src/views/book/courseware/data/newWordTemplate.js

@@ -6,8 +6,9 @@ import {
   switchOption,
   isEnable,
 } from '@/views/book/courseware/data/common';
+import { getRandomNumber } from '@/utils';
 
-export { arrangeTypeList, switchOption, isEnable };
+export { arrangeTypeList, switchOption, isEnable, displayList };
 
 // 显示
 export const showList = [
@@ -37,6 +38,45 @@ export const frameList = [
   },
 ];
 
+// 模式类型
+export const modelList = [
+  {
+    value: 'miao',
+    label: '标红笔画',
+  },
+  {
+    value: 'input',
+    label: '输入拼音释义',
+  },
+];
+
+// 答题方式
+export const answer_list = [
+  {
+    value: 'pinyin',
+    label: '填拼音',
+  },
+  {
+    value: 'en',
+    label: '填英文',
+  },
+];
+
+export function getOption() {
+  return {
+    content: '',
+    pinyin: '',
+    mark: getRandomNumber(),
+    is_example: false,
+    answer: '',
+    hz_info: [],
+    file_list: [],
+    file_id_list: [],
+    content_list: [],
+    is_common_pinyin: false
+  };
+}
+
 export function getNewWordTemplateProperty() {
   return {
     serial_number: 1,
@@ -44,7 +84,15 @@ export function getNewWordTemplateProperty() {
     sn_position: serialNumberPositionList[3].value,
     sn_display_mode: displayList[0].value,
 
+    is_enable_play_structure: showList[0].value,
     is_enable_pinyin: showList[0].value,
+    is_enable_high_strokes: showList[1].value,
+    model:modelList[0].value,
+    
+    // miao模式
+
+    // input模式
+    is_enable_shiyi: showList[0].value,
     
   };
 }
@@ -54,8 +102,8 @@ export function getNewWordTemplateData() {
     type: 'newWord_template',
     title: '生字',
     property: getNewWordTemplateProperty(),
-    content: '',
-    content_list: [],
+    option_list: [getOption()],
+    answer_type:'',
     mind_map: {
       node_list: [{ name: '生字' }], // 思维导图数据
     },