Bläddra i källkod

数独 看图模板

秦鹏 3 år sedan
förälder
incheckning
94c2de6a67

+ 256 - 0
src/components/Adult/common/ImageQuestionModule.vue

@@ -0,0 +1,256 @@
+<!--  -->
+<template>
+  <div class="Big-Book-SentenceModule" v-if="curQueItem">
+    <div class="adult-book-input-item">
+      <span class="adult-book-lable">序号:</span>
+      <el-input
+        size="small"
+        class="adult-book-input"
+        :autosize="{ minRows: 2 }"
+        placeholder="请输入序号"
+        v-model="curQueItem.number"
+        @blur="onBlur(curQueItem, 'number')"
+      ></el-input>
+      <div class="deleteOptionBox">
+        <img
+          @click="deleteOption"
+          class="close"
+          src="../../../assets/adult/del-close.png"
+          alt=""
+        />
+      </div>
+    </div>
+    <div class="NPC-sentence-Segword">
+      <SentenceSegwordChs :curQue="curQueItem.detail" />
+    </div>
+    <div class="adult-book-input-item">
+      <span class="adult-book-lable">英文:</span>
+      <el-input
+        size="small"
+        class="adult-book-input"
+        placeholder="请输入句子翻译"
+        v-model="curQueItem.en"
+        @blur="onBlur(curQueItem, 'en')"
+      ></el-input>
+    </div>
+    <div class="adult-book-input-item">
+      <span class="adult-book-lable">答案:</span>
+      <div>
+        <div
+          class="NPC-sentence-input-box"
+          v-for="(ansItem, ansIndex) in curQueItem.answer"
+          :key="'answer' + ansIndex"
+        >
+          <el-input
+            class="adult-book-input"
+            type="textarea"
+            autosize
+            placeholder="请输入答案"
+            v-model="curQueItem.answer[ansIndex]"
+            @blur="onBlurIndex(ansIndex, 'answer')"
+          ></el-input>
+          <div class="adult-book-del-icon" @click="delAnswer(ansIndex)">
+            <i class="el-icon-circle-close"></i>
+          </div>
+        </div>
+      </div>
+    </div>
+    <div class="adult-book-input-item" style="padding-left: 80px">
+      <el-button
+        size="mini"
+        type="primary"
+        icon="el-icon-plus"
+        @click="addAnswer"
+        >添加答案</el-button
+      >
+    </div>
+
+    <div class="adult-book-input-item">
+      <span class="adult-book-lable">录音:</span>
+      <el-radio-group v-model="curQueItem.IsRecord">
+        <el-radio :label="true">需要</el-radio>
+        <el-radio :label="false">不需要</el-radio>
+      </el-radio-group>
+    </div>
+    <div class="adult-book-input-item">
+      <span class="adult-book-lable">录音组件:</span>
+      <img src="../../../assets/adult/mini.png" alt="" />
+    </div>
+    <div class="adult-book-input-item">
+      <span class="adult-book-lable">图片:</span>
+      <Upload
+        :changeFillId="changeImage"
+        :datafileList="fileCon.img_list"
+        :filleNumber="mp3Number"
+        :uploadType="'image'"
+      />
+    </div>
+  </div>
+</template>
+
+<script>
+import SentenceSegwordChs from "./SentenceSegwordChs/index.vue";
+import Upload from "./Upload.vue";
+import "@/utils/pinyin_dict_withtone";
+import "@/utils/pinyinUtil";
+export default {
+  components: { Upload, SentenceSegwordChs },
+  props: [
+    "curQue",
+    "curQueItem",
+    "index",
+    "changAnswer",
+    "deleteOptionOne",
+    "checkList",
+    "type",
+  ],
+  data() {
+    return {
+      //checkListRes: [],
+      fileCon: {
+        mp3_list: [],
+        img_list: [],
+      },
+      mp3Number: 1,
+      imgNumber: 1,
+    };
+  },
+  computed: {},
+  watch: {},
+  //方法集合
+  methods: {
+    onBlur(item, field) {
+      item[field] = item[field] ? item[field].trim() : "";
+    },
+    onBlurIndex(index, field) {
+      let res = this.curQueItem[field][index].trim();
+      this.$set(this.curQueItem[field], index, res);
+    },
+    onBlurCorrect(item) {
+      item[index] = item[index].trim();
+    },
+    //   删除当前选项
+    deleteOption() {
+      this.$confirm("确定要删除此选项吗?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      }).then(() => {
+        // this.deleteOptionOne(this.index);
+        console.log(this.deleteOptionOne());
+      });
+    },
+    //   修改正确答案
+    changeIsAnswer(type) {
+      this.changAnswer(this.index, type);
+    },
+    changeImage(fileList) {
+      console.log(fileList);
+      const articleImgList = JSON.parse(JSON.stringify(fileList));
+      const articleImgRes = [];
+      articleImgList.forEach((item) => {
+        if (item.response) {
+          const obj = {
+            name: item.name,
+            url: item.response.file_info_list[0].file_url,
+            id: "[FID##" + item.response.file_info_list[0].file_id + "##FID]",
+          };
+          articleImgRes.push(obj);
+        }
+      });
+      //this.articleImgList = articleImgRes;
+      this.curQueItem.img_list = JSON.parse(JSON.stringify(articleImgRes));
+    },
+    //添加答案
+    addAnswer() {
+      let leg = this.curQueItem.answer.length;
+      let last = this.curQueItem.answer[leg - 1];
+      if (!last) {
+        this.$message.warning("请先填写完整");
+        return;
+      }
+      this.curQueItem.answer.push("");
+    },
+    delAnswer(ansIndex) {
+      this.curQueItem.answer.splice(ansIndex, 1);
+    },
+  },
+  //生命周期 - 创建完成(可以访问当前this实例)
+  created() {},
+  //生命周期 - 挂载完成(可以访问DOM元素)
+  mounted() {
+    console.log(this.curQueItem);
+    if (this.curQueItem) {
+      this.fileCon.img_list = this.curQueItem.img_list;
+      this.fileCon.mp3_list = this.curQueItem.mp3_list;
+    }
+  },
+  beforeCreate() {}, //生命周期 - 创建之前
+  beforeMount() {}, //生命周期 - 挂载之前
+  beforeUpdate() {}, //生命周期 - 更新之前
+  updated() {}, //生命周期 - 更新之后
+  beforeDestroy() {}, //生命周期 - 销毁之前
+  destroyed() {}, //生命周期 - 销毁完成
+  activated() {}, //如果页面有keep-alive缓存功能,这个函数会触发
+};
+</script>
+<style lang='scss' scoped>
+//@import url(); 引入公共css类
+.Big-Book {
+  &-delDef {
+    padding: 0;
+    line-height: 32px;
+    color: #f56c6c;
+  }
+  &-def-list {
+    margin-bottom: 8px;
+  }
+  &-top {
+    display: flex;
+    justify-content: flex-start;
+    align-items: center;
+    margin-top: 10px;
+    .deleteOptionBox {
+      width: 40px;
+      height: 33px;
+      display: flex;
+      justify-content: center;
+      align-items: center;
+    }
+  }
+
+  &-mp3 {
+    margin-top: 6px;
+    span {
+      width: 50px;
+    }
+  }
+  &-img {
+    span {
+      width: 50px;
+    }
+  }
+}
+.NPC-sentence-input-box {
+  display: flex;
+  justify-content: flex-start;
+  align-items: flex-start;
+  margin-bottom: 10px;
+}
+.close {
+  width: 24px;
+  cursor: pointer;
+}
+</style>
+<style lang="scss">
+.NPC-sentence-input-box {
+  .NPC-sentence-input {
+    margin-right: 10px;
+  }
+  > i {
+    width: 24px;
+    height: 24px;
+    cursor: pointer;
+  }
+}
+</style>

+ 67 - 45
src/components/Adult/common/SentenceModule.vue

@@ -33,54 +33,74 @@
         @blur="onBlur(curQueItem, 'en')"
       ></el-input>
     </div>
-    <template v-if="type == 'sentence_input'">
-      <div class="adult-book-input-item">
-        <span class="adult-book-lable">答案:</span>
-        <div>
-          <div
-            class="NPC-sentence-input-box"
-            v-for="(ansItem, ansIndex) in curQueItem.answer"
-            :key="'answer' + ansIndex"
-          >
-            <el-input
-              class="adult-book-input"
-              type="textarea"
-              autosize
-              placeholder="请输入答案"
-              v-model="curQueItem.answer[ansIndex]"
-              @blur="onBlurIndex(ansIndex, 'answer')"
-            ></el-input>
-            <div class="adult-book-del-icon" @click="delAnswer(ansIndex)">
-              <i class="el-icon-circle-close"></i>
+    <div v-for="(item, i) in fn_list" :key="i+'answer'">
+      <template v-if="item.type == 'sentence_input_chs'&&item.isFn">
+        <div class="adult-book-input-item">
+          <span class="adult-book-lable">答案:</span>
+          <div>
+            <div
+              class="NPC-sentence-input-box"
+              v-for="(ansItem, ansIndex) in curQueItem.answer"
+              :key="'answer' + ansIndex"
+            >
+              <el-input
+                class="adult-book-input"
+                type="textarea"
+                autosize
+                placeholder="请输入答案"
+                v-model="curQueItem.answer[ansIndex]"
+                @blur="onBlurIndex(ansIndex, 'answer')"
+              ></el-input>
+              <div class="adult-book-del-icon" @click="delAnswer(ansIndex)">
+                <i class="el-icon-circle-close"></i>
+              </div>
             </div>
           </div>
         </div>
+        <div class="adult-book-input-item" style="padding-left: 80px">
+          <el-button
+            size="mini"
+            type="primary"
+            icon="el-icon-plus"
+            @click="addAnswer"
+            >添加答案</el-button
+          >
+        </div>
+      </template>
+    </div>
+    <div v-for="(item, i) in fn_list" :key="i+'judge'">
+      <div
+        class="adult-book-input-item"
+        v-if="item.type == 'sentence_judge_chs' && item.isFn"
+      >
+        <span class="adult-book-lable">判断:</span>
+        <el-radio-group v-model="curQueItem.judge">
+          <el-radio :lable="true" :label="true">正确</el-radio>
+          <el-radio :lable="false" :label="false">错误</el-radio>
+        </el-radio-group>
       </div>
-      <div class="adult-book-input-item" style="padding-left: 80px">
-        <el-button
-          size="mini"
-          type="primary"
-          icon="el-icon-plus"
-          @click="addAnswer"
-          >添加答案</el-button
-        >
-      </div>
-    </template>
-    <div class="adult-book-input-item" v-if="type == 'sentence_judge'">
-      <span class="adult-book-lable">判断:</span>
-      <el-radio-group v-model="curQueItem.judge">
-        <el-radio :lable="true" :label="true">正确</el-radio>
-        <el-radio :lable="false" :label="false">错误</el-radio>
-      </el-radio-group>
     </div>
-    <div class="adult-book-input-item" v-if="type == 'sentence_record'">
+
+    <div
+      class="adult-book-input-item"
+      v-if="
+        type == 'sentence_input_record_chs' || type == 'sentence_record_chs'
+      "
+    >
       <span class="adult-book-lable">录音组件:</span>
-      <img src="../../../assets/adult/mini.png" class="adult-record-min" />
+      <img src="../../../assets/adult/mini.png" alt="" />
     </div>
-    <div class="adult-book-input-item" v-if="type == 'recordHZ_inputPY_chs'">
-      <span>录音</span>
-      <el-radio v-model="curQueItem.IsRecord" :label="true">需要</el-radio>
-      <el-radio v-model="curQueItem.IsRecord" :label="false">不需要</el-radio>
+    <div v-for="(item, i) in fn_list" :key="i+'record'">
+      <div
+        class="adult-book-input-item"
+        v-if="item.type == 'sentence_record_chs' && item.isFn"
+      >
+        <span class="adult-book-lable">录音:</span>
+        <el-radio-group v-model="curQueItem.IsRecord">
+          <el-radio :label="true">需要</el-radio>
+          <el-radio :label="false">不需要</el-radio>
+        </el-radio-group>
+      </div>
     </div>
     <div
       class="adult-book-input-item"
@@ -115,6 +135,7 @@ export default {
     "deleteOptionOne",
     "checkList",
     "type",
+    "fn_list",
   ],
   data() {
     return {
@@ -228,12 +249,9 @@ export default {
       display: flex;
       justify-content: center;
       align-items: center;
-      .close {
-        width: 24px;
-        cursor: pointer;
-      }
     }
   }
+
   &-mp3 {
     margin-top: 6px;
     span {
@@ -252,6 +270,10 @@ export default {
   align-items: flex-start;
   margin-bottom: 10px;
 }
+.close {
+  width: 24px;
+  cursor: pointer;
+}
 </style>
 <style lang="scss">
 .NPC-sentence-input-box {

+ 70 - 42
src/components/Adult/common/SingleModule.vue

@@ -1,16 +1,10 @@
 <!--  -->
 <template>
-  <div class="Big-Book-input">
+  <div class="Big-Book-single">
     <div class="Big-Book-content m">
       <div class="Big-Book-main">
-        <img
-          @click="deleteOption"
-          class="close"
-          src="../../../assets/adult/del-close.png"
-          alt=""
-        />
         <div class="adult-book-input-item">
-          <span class="adult-book-lable">题:</span>
+          <span class="adult-book-lable">题目:</span>
           <el-input
             class="adult-book-input"
             :autosize="{ minRows: 2 }"
@@ -19,9 +13,33 @@
             v-model="curQueItem.title"
             @blur="curQueItem.title = curQueItem.title.trim()"
           ></el-input>
+          <img
+            @click="deleteOption"
+            class="close"
+            src="../../../assets/adult/del-close.png"
+            alt=""
+          />
+        </div>
+        <div class="adult-book-input-item">
+          <span class="adult-book-lable">题目图片:</span>
+          <Upload
+            :changeFillId="timuchangeImage"
+            :datafileList="fileCon.img_list"
+            :filleNumber="imgNumber"
+            :uploadType="'image'"
+          />
         </div>
         <div class="adult-book-input-item">
-          <span class="adult-book-lable">内容:</span>
+          <span class="adult-book-lable">题目音频:</span>
+          <Upload
+            :changeFillId="timuchangeMp3"
+            :datafileList="fileCon.mp3_list"
+            :filleNumber="mp3Number"
+            :uploadType="'mp3'"
+          />
+        </div>
+        <div class="adult-book-input-item">
+          <span class="adult-book-lable">选项内容:</span>
           <el-input
             class="adult-book-input"
             :autosize="{ minRows: 2 }"
@@ -30,7 +48,7 @@
             v-model="curQueItem.con"
             @blur="curQueItem.con = curQueItem.con.trim()"
           ></el-input>
-          <template v-if="type == 'single'">
+          <template v-if="type == 'single_chs'">
             <el-radio
               style="margin-left: 7px"
               @change="changeIsAnswer"
@@ -51,32 +69,7 @@
           <!-- <div class=""></div> -->
         </div>
         <div class="adult-book-input-item">
-          <span class="adult-book-lable">拼音:</span>
-
-          <el-input
-            class="adult-book-input"
-            :autosize="{ minRows: 2 }"
-            type="textarea"
-            placeholder="请输入拼音"
-            v-model="curQueItem.pinyin"
-            @blur="curQueItem.pinyin = curQueItem.pinyin.trim()"
-          ></el-input>
-          <el-button @click="getPinyin(curQueItem)" type="text"
-            >插入拼音</el-button
-          >
-        </div>
-        <div class="adult-book-input-item">
-          <span class="adult-book-lable">英文:</span>
-          <el-input
-            class="adult-book-input"
-            :autosize="{ minRows: 2 }"
-            type="textarea"
-            placeholder="请输入英文"
-            v-model="curQueItem.english"
-            @blur="curQueItem.english = curQueItem.english.trim()"
-          ></el-input>
-        </div>
-        <div class="adult-book-input-item">
+          <span class="adult-book-lable">选项图片:</span>
           <Upload
             :changeFillId="changeImage"
             :datafileList="fileCon.img_list"
@@ -85,6 +78,7 @@
           />
         </div>
         <div class="adult-book-input-item">
+          <span class="adult-book-lable">选项音频:</span>
           <Upload
             :changeFillId="changeMp3"
             :datafileList="fileCon.mp3_list"
@@ -111,6 +105,8 @@ export default {
       imgNumber: 10,
       mp3Number: 10,
       fileCon: {
+        timu_img_list: [],
+        timu_mp3_list: [],
         img_list: [],
         mp3_list: [],
       },
@@ -166,7 +162,6 @@ export default {
           articleImgRes.push(obj);
         }
       });
-      //this.articleImgList = articleImgRes;
       this.curQueItem.mp3_list = JSON.parse(JSON.stringify(articleImgRes));
     },
     changeImage(fileList) {
@@ -186,6 +181,41 @@ export default {
       //this.articleImgList = articleImgRes;
       this.curQueItem.img_list = JSON.parse(JSON.stringify(articleImgRes));
     },
+    timuchangeMp3(fileList) {
+      console.log(fileList);
+      const articleImgList = JSON.parse(JSON.stringify(fileList));
+      const articleImgRes = [];
+      articleImgList.forEach((item) => {
+        if (item.response) {
+          const obj = {
+            name: item.name,
+            url: item.response.file_info_list[0].file_url,
+            id: "[FID##" + item.response.file_info_list[0].file_id + "##FID]",
+
+            media_duration: item.response.file_info_list[0].media_duration, //音频时长
+          };
+          articleImgRes.push(obj);
+        }
+      });
+      this.curQueItem.con.mp3_list = JSON.parse(JSON.stringify(articleImgRes));
+    },
+    timuchangeImage(fileList) {
+      console.log(fileList);
+      const articleImgList = JSON.parse(JSON.stringify(fileList));
+      const articleImgRes = [];
+      articleImgList.forEach((item) => {
+        if (item.response) {
+          const obj = {
+            name: item.name,
+            url: item.response.file_info_list[0].file_url,
+            id: "[FID##" + item.response.file_info_list[0].file_id + "##FID]",
+          };
+          articleImgRes.push(obj);
+        }
+      });
+      //this.articleImgList = articleImgRes;
+      this.curQueItem.con.img_list = JSON.parse(JSON.stringify(articleImgRes));
+    },
   },
   //生命周期 - 创建完成(可以访问当前this实例)
   created() {},
@@ -207,7 +237,7 @@ export default {
 </script>
 <style lang='scss' scoped>
 //@import url(); 引入公共css类
-.Big-Book-input {
+.Big-Book-single {
   .Big-Book-content {
     &.m {
       display: flex;
@@ -238,11 +268,9 @@ export default {
         }
       }
       .close {
-        position: absolute;
-        width: 24px;
         cursor: pointer;
-        right: -30px;
-        top: 3px;
+        width: 24px;
+        height: 24px;
       }
     }
   }

+ 799 - 0
src/components/Adult/common/data3.js

@@ -0,0 +1,799 @@
+let fnData = [{
+        type: "article_chs",
+        name: "课文",
+    }, {
+        type: "dialogue_article_chs",
+        name: "对话课文",
+    },
+    {
+        type: "sentence_segword_chs",
+        name: "句子分词",
+    },
+    {
+        type: "NewWord_chs",
+        name: "生词",
+    },
+    {
+        type: "notes_chs",
+        name: "注释",
+
+    }, {
+        type: "sentence_chs",
+        name: "句子模板",
+        list: [{
+                type: "sentence_input_chs",
+                name: "句子填空",
+            },
+            {
+                type: "sentence_judge_chs",
+                name: "句子判断",
+            },
+            {
+                type: "sentence_record_chs",
+                name: "句子录音",
+            },
+            {
+                type: "sentence_input_record_chs",
+                name: "句子填空+录音",
+            }
+        ],
+
+    }, {
+        type: "image_question",
+        name: "看图模板",
+        list: [{
+            type: "image_question_input",
+            name: "看图填空",
+        }, {
+            type: "image_question_record",
+            name: "看图录音",
+        }, {
+            type: "image_question_input_record",
+            name: "看图填空+录入",
+        }]
+    }, {
+        type: "voice_matrix",
+        name: "语音矩阵",
+    }, {
+        type: "divider",
+        name: "分割线",
+        data_structure: {
+            type: 'divider',
+            name: "分割线",
+        }
+    },
+    {
+        type: "text",
+        name: "文本描述",
+        data_structure: {
+            type: 'text',
+            name: "文本描述",
+            con: '',
+            pinyin: '',
+            english: '',
+            img_list: [],
+            mp3_list: []
+        }
+    },
+    {
+        type: "single_chs",
+        name: "单选题",
+
+    },
+    {
+        type: "checkbox",
+        name: "多选题",
+        data_structure: {
+            type: 'checkbox',
+            name: "多选题",
+            title: "",
+            option: [{
+                    con: '',
+                    pinyin: '',
+                    img_list: [],
+                    mp3_list: [],
+                    isAnswer: ''
+                },
+                {
+                    con: '',
+                    pinyin: '',
+                    img_list: [],
+                    mp3_list: [],
+                    isAnswer: ''
+                }
+            ],
+            correct: [],
+            numberList: {
+                type: "number",
+                name: "每行几个",
+                con: "2",
+                arr: [{
+                        id: 1,
+                        value: 1,
+                    }, {
+                        id: 2,
+                        value: 2,
+
+                    }, {
+                        id: 3,
+                        value: 3,
+                    },
+                    {
+                        id: 4,
+                        value: 4,
+                    },
+                ]
+            }
+        }
+    },
+    {
+        type: "judge",
+        name: "判断题",
+        data_structure: {
+            type: 'judge',
+            name: "判断题",
+            title: "",
+            con: '',
+            pinyin: '',
+            img_list: [],
+            mp3_list: [],
+            judge: ''
+        }
+    },
+    {
+        type: "multiRowInput",
+        name: "多行文本题",
+        data_structure: {
+            type: 'multiRowInput',
+            name: "多行文本题",
+            title: "",
+            con: [{
+                con: '',
+                annotation: "", //注释
+            }],
+            pinyin: '',
+            img_list: [],
+            mp3_list: [],
+            fn_list: [{
+                type: 'astrictNumber',
+                name: '限制字数',
+                isFn: false,
+            }, ],
+        }
+    },
+    {
+        type: "singleRowInput",
+        name: "单行文本题",
+        data_structure: {
+            type: 'singleRowInput',
+            name: "单行文本题",
+            title: "",
+
+            con: [{
+                con: '',
+                annotation: "", //注释
+            }],
+            pinyin: '',
+            img_list: [],
+            mp3_list: [],
+            fn_list: [{
+                type: 'astrictNumber',
+                name: '限制字数',
+                isFn: false,
+            }, ],
+        }
+    },
+    {
+        type: "hanzi",
+        name: "汉字模版",
+        data_structure: {
+            type: 'hanzi',
+            name: "汉字模版",
+            title: "",
+            option: [{
+                hanzi: '',
+                pinyin: '',
+                mp3_list: [],
+                img_list: [],
+                definition_list: [''],
+                isAnswer: '',
+                isChecked: '',
+                isJudge: '',
+                correctInput: ''
+            }],
+
+            correct: [{
+                single: [],
+                checkBox: [],
+                judge: [],
+                input: [],
+                spell: []
+            }],
+            fn_list: [{
+                    type: 'def',
+                    name: '更多释义',
+                    isFn: false,
+                    isDisable: false,
+                },
+                {
+                    type: 'record',
+                    name: '跟读',
+                    isFn: false,
+                    isDisable: false,
+                },
+                {
+                    type: 'spell',
+                    name: '拼写',
+                    isFn: false,
+                    isDisable: false,
+                },
+                {
+                    type: 'input',
+                    name: '输入',
+                    isFn: false,
+                    isDisable: false,
+                },
+                {
+                    type: 'copy',
+                    name: '摹写',
+                    isFn: false,
+                    isDisable: false,
+                },
+                {
+                    type: 'single',
+                    name: '单选',
+                    isFn: false,
+                    isDisable: false,
+                }, {
+                    type: 'checkBox',
+                    name: '多选',
+                    isFn: false,
+                    isDisable: false,
+                }, {
+                    type: 'judge',
+                    name: '判断',
+                    isFn: false,
+                    isDisable: false,
+                },
+            ]
+        },
+    },
+    {
+        type: "image",
+        name: "图片控件",
+        list: [{
+                type: 'image_checkBox',
+                name: "图片多选",
+            },
+            {
+                type: 'image_judge',
+                name: "图片判断",
+            },
+            {
+                type: 'image_single',
+                name: "图片单选",
+            },
+            {
+                type: 'image_dobleinput',
+                name: "双输入",
+            },
+            {
+                type: 'image_gdcy',
+                name: "固定词语",
+            },
+            {
+                type: 'image_wordInput',
+                name: "单词+输入",
+            },
+            {
+                type: "imgage_image",
+                name: "纯图片",
+            },
+        ],
+        data_structure: {
+            type: 'image',
+            name: "图片控件",
+            title: "",
+            option: [{
+                hanzi: '',
+                pinyin: '',
+                mp3_list: [],
+                img_list: [],
+                isAnswer: '',
+                isChecked: '',
+                isJudge: '',
+                correctInput: '',
+            }],
+            correct: [{
+                single: [],
+                checkBox: [],
+                judge: [],
+                input: [],
+                spell: []
+            }],
+            fn_list: [{
+                    type: 'image_record',
+                    name: '跟读',
+                    isFn: false,
+                    isDisable: false,
+                },
+                {
+                    type: 'image_spell',
+                    name: '拼写',
+                    isFn: false,
+                    isDisable: false,
+                },
+                {
+                    type: 'image_input',
+                    name: '输入',
+                    isFn: false,
+                    isDisable: false,
+                },
+                {
+                    type: 'image_dobleinput',
+                    name: '双输入',
+                    isFn: false,
+                    isDisable: false,
+                },
+                {
+                    type: 'image_single',
+                    name: '单选',
+                    isFn: false,
+                    isDisable: false,
+                }, {
+                    type: 'image_checkBox',
+                    name: '多选',
+                    isFn: false,
+                    isDisable: false,
+                }, {
+                    type: 'image_judge',
+                    name: '判断',
+                    isFn: false,
+                    isDisable: false,
+                },
+            ],
+            numberList: {
+                type: "number",
+                name: "每行几个",
+                con: "2",
+                arr: [{
+                        id: 1,
+                        value: 1,
+                    }, {
+                        id: 2,
+                        value: 2,
+
+                    }, {
+                        id: 3,
+                        value: 3,
+                    },
+                    {
+                        id: 4,
+                        value: 4,
+                    },
+                ]
+            }
+        },
+    },
+
+    {
+        type: "audio_control",
+        name: "音频控制条",
+        data_structure: {
+            type: 'audio_control',
+            name: "音频控制条",
+            option: [{
+                xuhao: '',
+                yinbiao: '',
+                img_list: [],
+                mp3_list: [],
+                isAnswer: ''
+            }, ],
+        }
+    },
+    {
+        type: "audio_control_easy",
+        name: "音频控制条-简易",
+        data_structure: {
+            type: 'audio_control_easy',
+            name: "音频控制条-简易",
+            option: [{
+                xuhao: '',
+                yinbiao: '',
+                img_list: [],
+                mp3_list: [],
+                isAnswer: ''
+            }, ],
+        }
+    },
+    {
+        type: "input_record_chs",
+        name: "输入+录音",
+    },
+    {
+        type: "recordHZ_inputPY_chs",
+        name: "读汉字写拼音",
+    },
+    {
+        type: "inputItem_chs",
+        name: "输入选项",
+    },
+    {
+        type: "upload_control_chs",
+        name: "上传控件",
+    },
+    // {
+    //     type: "inputItem_chs",
+    //     name: "输入选项",
+    // },
+    {
+        type: "switch_control",
+        name: "开关控件",
+        data_structure: {
+            type: 'switch_control',
+            name: "开关控件",
+            con: "",
+            option: [{
+                con: "", //标题
+                answer: "", //答案
+                record: false, //需要录音
+                mp3_list: [],
+            }, ],
+        }
+    },
+    {
+        type: "record_control",
+        name: "录音控件",
+        list: [{
+                type: 'record_control_mini',
+                name: "录音控件-mini",
+            },
+            {
+                type: 'record_control_normal',
+                name: "录音控件-normal",
+            },
+            {
+                type: 'record_control_pro',
+                name: "录音控件-pro",
+            },
+            {
+                type: 'record_control_promax',
+                name: "录音控件-promax",
+            },
+        ],
+        data_structure: {
+            type: 'record_control',
+            name: "录音控件",
+            option: [{
+                hanzi: '',
+                pinyin: '',
+                mp3_list: [],
+                img_list: [],
+                isAnswer: '',
+                isChecked: '',
+                isJudge: '',
+                correctInput: '',
+            }],
+        },
+    },
+    {
+        type: "pure_input",
+        name: "纯输入",
+        data_structure: {
+            type: 'pure_input',
+            name: "纯输入",
+            option: [{
+                answer: "",
+            }, ],
+            answer: "",
+            record: false, //需要录音
+            mp3_list: [],
+        }
+    },
+    {
+        type: "matrixSingle",
+        name: "矩阵单选",
+        data_structure: {
+            type: 'matrixSingle',
+            name: "矩阵单选",
+            title: "",
+            con: [{
+                    con: "",
+                    Answer: "",
+                },
+                {
+                    con: "",
+                    Answer: "",
+                },
+            ],
+            option: [{
+                    con: '',
+                    pinyin: '',
+                    img_list: [],
+                    mp3_list: [],
+                    isAnswer: ''
+                },
+                {
+                    con: '',
+                    pinyin: '',
+                    img_list: [],
+                    mp3_list: [],
+                    isAnswer: ''
+                }
+            ],
+            correct: ["", ""]
+        }
+    },
+    {
+        type: "matrixChckbox",
+        name: "矩阵多选",
+        data_structure: {
+            type: 'matrixChckbox',
+            name: "矩阵多选",
+            title: "",
+
+            con: [{
+                    con: "",
+                    AnswerList: [],
+                },
+                {
+                    type: "matrixChekbox",
+                    name: "矩阵多选",
+                    data_structure: {
+                        type: 'matrixChekbox',
+                        name: "矩阵多选",
+                        con: [{
+                                con: "",
+                                AnswerList: [],
+                            },
+                            {
+                                con: "",
+                                AnswerList: [],
+                            },
+                        ],
+                        option: [{
+                                con: '',
+                                pinyin: '',
+                                img_list: [],
+                                mp3_list: [],
+                                isAnswer: ''
+                            },
+                            {
+                                con: '',
+                                pinyin: '',
+                                img_list: [],
+                                mp3_list: [],
+                                isAnswer: ''
+                            }
+                        ],
+                        correct: [
+                            [],
+                            []
+                        ]
+                    }
+                },
+
+                {
+                    con: '',
+                    pinyin: '',
+                    img_list: [],
+                    mp3_list: [],
+                    isAnswer: ''
+                }
+            ],
+            correct: [
+                [],
+                []
+            ]
+        }
+    },
+
+    {
+        type: "text_input_RecoedItem",
+        name: "文字+录入+录音条",
+        data_structure: {
+            type: "text_input_RecoedItem",
+            name: "文字+录入+录音条",
+            title: "",
+            option: [{
+                number: "",
+                con: "",
+                answer: "",
+            }, ]
+        },
+    },
+    {
+        type: "dialogue",
+        name: "对话题",
+        data_structure: {
+            type: 'dialogue',
+            name: "对话题",
+            title: "",
+            option: [{
+                    roleName: "",
+                    site: "left",
+                    con: '',
+                    number: "",
+                    isRecord: "", //是否需要录音
+                    mp3_list: [],
+                    img_list: [],
+                    definition_list: [],
+                    AnswerList: [""],
+                    isAnswer: '',
+                    isChecked: '',
+                    judge: '',
+                    correctInput: ''
+                },
+                {
+                    roleName: "",
+                    site: "left",
+                    con: '',
+                    number: "",
+                    isRecord: "", //是否需要录音
+                    mp3_list: [],
+                    img_list: [],
+                    definition_list: [],
+                    AnswerList: [""],
+                    isAnswer: '',
+                    isChecked: '',
+                    judge: '',
+                    correctInput: ''
+                },
+            ],
+            fn_list: [
+                // {
+                //       type: 'def',
+                //       name: '更多释义',
+                //       isFn: false,
+                //   },
+                {
+                    type: 'record',
+                    name: '跟读',
+                    isFn: false,
+                },
+                // {
+                //     type: 'spell',
+                //     name: '拼写',
+                //     isFn: false,
+                // },
+                {
+                    type: 'input',
+                    name: '输入',
+                    isFn: false,
+                },
+                // {
+                //     type: 'copy',
+                //     name: '摹写',
+                //     isFn: false,
+                // },
+                // {
+                //     type: 'single',
+                //     name: '单选',
+                //     isFn: false,
+                // }, {
+                //     type: 'checkout',
+                //     name: '多选',
+                //     isFn: false,
+                // }, {
+                //     type: 'judge',
+                //     name: '判断',
+                //     isFn: false,
+                // },
+            ],
+            correct: [{
+                input: ["", ""],
+            }]
+        },
+    },
+    {
+        type: "ligature_chs",
+        name: "连线",
+    },
+    {
+        type: "record",
+        name: "录音题",
+        data_structure: {
+            type: "record",
+            name: "录音题",
+            title: "",
+            option: [{
+                mp3_list: [],
+                con: "",
+                value: "",
+            }, ]
+        }
+    },
+    {
+        type: "hearRecord",
+        name: "听录音题",
+        data_structure: {
+            type: "hearRecord",
+            name: "听录音题",
+
+            title: "",
+            option: [{
+                mp3_list: [],
+                con: "",
+                value: "",
+            }, ]
+        }
+    },
+    // {
+    //     type: "sort",
+    //     name: "排序题",
+    // },
+    // {
+    //     type: "blank",
+    //     name: "填空题",
+    // },
+    // {
+    //     type: "annex",
+    //     name: "附件题",
+    // },
+    // {
+    //     type: "dropdown",
+    //     name: "下拉题",
+    // },
+    // {
+    //     type: "drawing",
+    //     name: "画图题",
+    // },
+    {
+        type: "text_item",
+        name: "文本条",
+        data_structure: {
+            type: "text_item",
+            name: "文本条",
+            title: "",
+            option: [{
+                number: "",
+                con: "",
+            }],
+            numberList: {
+                type: "number",
+                name: "每行几个",
+                con: "2",
+                arr: [{
+                        id: 1,
+                        value: 1,
+                    }, {
+                        id: 2,
+                        value: 2,
+
+                    }, {
+                        id: 3,
+                        value: 3,
+                    },
+                    {
+                        id: 4,
+                        value: 4,
+                    },
+                ]
+            }
+        }
+    },
+    {
+        type: "bg_control",
+        name: "背景图控件",
+        data_structure: {
+            type: 'bg_control',
+            name: "背景图控件",
+            img_list: [],
+        }
+    },
+    {
+        type: "NumberCombination_chs",
+        name: "数字组合",
+    },
+    {
+        type: "toneSelect_chs",
+        name: "音调选择",
+    },
+    {
+        type: "sudoku_chs",
+        name: "数独",
+    },
+]
+
+
+export default { fnData: fnData }

+ 0 - 1
src/components/Adult/inputModules/DialogueArticleChs/index.vue

@@ -3029,7 +3029,6 @@ export default {
           name: file.name,
           url: file.response.file_info_list[0].file_url,
           id: "[FID##" + item.response.file_info_list[0].file_id + "##FID]",
-
           imgNumber: 0,
         };
         this.curQue.img_list.push(obj);

+ 275 - 0
src/components/Adult/inputModules/ImageQuestion.vue

@@ -0,0 +1,275 @@
+<!--  -->
+<template>
+  <div class="Big-Book-sentence" v-if="curQue">
+    <div
+      class="Big-Book-Single-content"
+      style="margin-left: 20px; margin-top: 20px"
+    >
+      <div class="adult-book-input-item">
+        <span class="adult-book-lable">标题:</span>
+        <el-input
+          class="adult-book-input"
+          type="textarea"
+          autosize
+          placeholder="请输入标题"
+          v-model="curQue.title"
+          @blur="onBlur(curQue, 'title')"
+        ></el-input>
+      </div>
+      <div
+        class="Big-Book-main"
+        v-for="(item, index) in curQue.option"
+        :key="item + index"
+        style="margin-bottom: 20px"
+      >
+        <ImageQuestionModule
+          :curQueItem="item"
+          :curQue="curQue"
+          :deleteOptionOne="deleteOptionOne"
+          :index="index"
+          :type="type"
+        />
+      </div>
+      <div class="Big-Book-addrole">
+        <div class="addoption" @click="addOption">添加一个</div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import ImageQuestionModule from "../common/ImageQuestionModule.vue";
+
+export default {
+  name: "Single",
+  props: ["curQue", "fn_data", "changeCurQue", "type"],
+  components: {
+    ImageQuestionModule,
+  },
+  data() {
+    return {
+      checkList: [],
+      form: {
+        stem: {
+          con: "",
+          pinyin: "",
+          english: "",
+          highlight: "",
+          underline: "",
+          img_url: [],
+          mp3_url: [],
+        },
+      },
+      data_structure: {
+        type: "image_question_input_record",
+        name: "看图填空+录入",
+        title: "",
+        option: [
+          {
+            number: "",
+            con: "",
+            answer: "",
+            IsRecord: false,
+            mp3_url: [],
+          },
+        ],
+      },
+      data_structure_sentence: {
+        type: "image_question",
+        name: "看图模板",
+        title: "",
+        option: [
+          {
+            img_list: [],
+            number: "",
+            detail: {
+              pyPosition: "top", //top 拼音在上面;bottom 拼音在下面
+              sentence: "", //句子
+              segList: [], //分词结果
+              seg_words: "",
+              wordsList: [],
+            },
+            en: "", //英文
+            answer: [""],
+            judge: true,
+          },
+        ],
+        fn_list: [
+          {
+            type: "image_question_record",
+            name: "录音",
+            isFn: false,
+          },
+          {
+            type: "image_question_input",
+            name: "输入",
+            isFn: false,
+          },
+        ],
+      },
+    };
+  },
+  computed: {},
+  watch: {},
+  //方法集合
+  methods: {
+    onBlur(item, field) {
+      item[field] = item[field] ? item[field].trim() : "";
+    },
+    // 修改正确选项中得某一个为正确答案
+    changAnswer(index) {
+      this.curQue.option.forEach((item, i) => {
+        if (index == i) {
+          this.curQue.correct[0].input[index] = item.Answer;
+        }
+      });
+    },
+    // 删除其中一个选项
+    deleteOptionOne(index) {
+      if (this.curQue.option.length <= 1) {
+        this.$message.warning("至少要保留1个选项");
+        return;
+      }
+      this.curQue.option.splice(index, 1);
+    },
+    // 新增选项
+    addOption() {
+      let obj;
+      if (this.type.indexOf("image_question") > -1) {
+        obj = JSON.parse(
+          JSON.stringify(this.data_structure_sentence.option[0])
+        );
+      }
+      this.curQue.option.push(obj);
+    },
+    // 更多配置选择
+    handleCheckedFnChange(value) {
+      //   let fn_list = JSON.parse(JSON.stringify(this.curQue.fn_list));
+      //   this.curQue.fn_list = fn_list.map((item) => {
+      //     if (value.indexOf(item.name) > -1) {
+      //       this.checkList.push(item.name);
+      //       item.isFn = true;
+      //     } else {
+      //       item.isFn = false;
+      //       this.curQue.con.forEach((it) => {
+      //         it.annotation = "";
+      //       });
+      //     }
+      //     return item;
+      //   });
+    },
+    //处理数据
+    handleStructure(type) {
+      let data = JSON.parse(JSON.stringify(this.data_structure_sentence));
+      data.fn_list.map((item) => {
+        if (type == "image_question_input_record") {
+          if (item.type == "image_question_record" || item.type == "image_question_input") {
+            item.isFn = true;
+          }
+        }
+        return item;
+      });
+      return data;
+    },
+    initcurQue() {
+      let data = null;
+      if (this.type.indexOf("image_question") > -1) {
+        data = this.handleStructure(this.type);
+      }
+      this.changeCurQue(data);
+    },
+  },
+  //生命周期 - 创建完成(可以访问当前this实例)
+  created() {
+    console.log("看图控件的录入");
+    if (!this.curQue) {
+      this.initcurQue();
+    }
+  },
+  //生命周期 - 挂载完成(可以访问DOM元素)
+  mounted() {},
+  beforeCreate() {}, //生命周期 - 创建之前
+  beforeMount() {}, //生命周期 - 挂载之前
+  beforeUpdate() {}, //生命周期 - 更新之前
+  updated() {}, //生命周期 - 更新之后
+  beforeDestroy() {}, //生命周期 - 销毁之前
+  destroyed() {}, //生命周期 - 销毁完成
+  activated() {}, //如果页面有keep-alive缓存功能,这个函数会触发
+};
+</script>
+<style lang='scss' scope>
+//@import url(); 引入公共css类
+.Big-Book-sentence {
+  &-content {
+    &.m {
+      display: flex;
+      justify-content: flex-start;
+      align-items: flex-start;
+    }
+
+    .Big-Book-title {
+      font-size: 16px;
+      line-height: 40px;
+      color: #000;
+      margin-right: 15px;
+    }
+    .Big-Book-main {
+      > div {
+        margin-bottom: 10px;
+        &.Big-Book-pinyin {
+          display: flex;
+          justify-content: flex-start;
+          align-items: center;
+        }
+      }
+    }
+  }
+
+  .Big-Book-addrole {
+    > div {
+      width: 300px;
+      height: 40px;
+      background: #f3f3f3;
+      border: 1px dashed rgba(0, 0, 0, 0.15);
+      box-sizing: border-box;
+      border-radius: 4px;
+      text-align: center;
+      line-height: 40px;
+      cursor: pointer;
+    }
+  }
+  .Big-Book-more {
+    .Big-Book-more-text {
+      position: relative;
+      text-align: center;
+    }
+    .Big-Book-more-text:before,
+    .Big-Book-more-text:after {
+      position: absolute;
+      background: #ccc;
+      content: "";
+      height: 1px;
+      top: 50%;
+      width: 45%;
+    }
+    .Big-Book-more-text:before {
+      left: 10px;
+    }
+    .Big-Book-more-text:after {
+      right: 10px;
+    }
+    .Big-Book-more-main {
+      display: flex;
+      > :not(:nth-child(1)) {
+        margin-left: 30px;
+      }
+    }
+  }
+  .Big-Book-con {
+    display: flex;
+    align-items: center;
+  }
+}
+</style>
+<style lang="scss">
+</style>

+ 20 - 3
src/components/Adult/inputModules/Sentence.vue

@@ -28,6 +28,7 @@
           :deleteOptionOne="deleteOptionOne"
           :index="index"
           :type="type"
+          :fn_list="curQue.fn_list"
         />
       </div>
       <div class="Big-Book-addrole">
@@ -87,7 +88,7 @@ export default {
         ],
       },
       data_structure_sentence: {
-        type: "sentence",
+        type: "sentence_chs",
         name: "句子模板",
         title: "",
         option: [
@@ -186,6 +187,21 @@ export default {
         if (item.type == type) {
           item.isFn = true;
         }
+        if (type == "sentence_input_record_chs") {
+          if (
+            item.type == "sentence_record_chs" ||
+            item.type == "sentence_input_chs"
+          ) {
+            item.isFn = true;
+          }
+        }
+        if (type == "recordHZ_inputPY_chs") {
+          if (
+            item.type == "sentence_record_chs"
+          ) {
+            item.isFn = true;
+          }
+        }
         return item;
       });
       return data;
@@ -193,19 +209,20 @@ export default {
     initcurQue() {
       let data = null;
       if (this.type == "recordHZ_inputPY_chs") {
-        data = JSON.parse(JSON.stringify(this.data_structure));
+        // data = JSON.parse(JSON.stringify(this.data_structure));
+        data = this.handleStructure(this.type);
       } else if (this.type == "inputItem_chs") {
         data = JSON.parse(JSON.stringify(this.data_structure2));
       } else if (this.type.indexOf("sentence_") > -1) {
         data = this.handleStructure(this.type);
       }
+      console.log(data);
       this.changeCurQue(data);
     },
   },
   //生命周期 - 创建完成(可以访问当前this实例)
   created() {
     console.log("句子控件的录入");
-    debugger;
     if (!this.curQue) {
       this.initcurQue();
     }

+ 81 - 15
src/components/Adult/inputModules/Single.vue

@@ -1,10 +1,28 @@
 <!--  -->
 <template>
-  <div class="Big-Book-Single">
+  <div class="Big-Book-Single" v-if="curQue">
     <div
       class="Big-Book-Single-content"
-      style="margin-left: 50px; margin-top: 20px"
+      style="margin-left: 20px; margin-top: 20px"
     >
+      <div class="adult-book-input-item">
+        <span class="adult-book-lable">标题:</span>
+        <el-input
+          class="adult-book-input"
+          type="textarea"
+          autosize
+          placeholder="请输入标题"
+          v-model="curQue.title"
+          @blur="onBlur(curQue, 'title')"
+        ></el-input>
+      </div>
+      <div class="adult-book-input-item">
+        <span class="adult-book-lable">录音:</span>
+        <el-radio-group v-model="curQue.IsRecord">
+          <el-radio :label="true">需要</el-radio>
+          <el-radio :label="false">不需要</el-radio>
+        </el-radio-group>
+      </div>
       <div
         class="Big-Book-main"
         v-for="(item, index) in curQue.option"
@@ -43,7 +61,7 @@ import SingleModule from "../common/SingleModule.vue";
 
 export default {
   name: "Single",
-  props: ["curQue", "fn_data"],
+  props: ["curQue", "fn_data", "changeCurQue"],
   components: {
     Inputmodule,
     SingleModule,
@@ -61,6 +79,59 @@ export default {
           mp3_url: [],
         },
       },
+      data_structure: {
+        type: "single_chs",
+        name: "单选题",
+        title: "",
+        IsRecord: false,
+        option: [
+          {
+            topic: {
+              con: "",
+              img_list: [],
+              mp3_list: [],
+            },
+            img_list: [],
+            mp3_list: [],
+            isAnswer: "",
+          },
+          {
+            topic: {
+              con: "",
+              img_list: [],
+              mp3_list: [],
+            },
+            con: "",
+            img_list: [],
+            mp3_list: [],
+            isAnswer: "",
+          },
+        ],
+        correct: [],
+        numberList: {
+          type: "number",
+          name: "每行几个",
+          con: "2",
+          arr: [
+            {
+              id: 1,
+              value: 1,
+            },
+            {
+              id: 2,
+              value: 2,
+            },
+            {
+              id: 3,
+              value: 3,
+            },
+            {
+              id: 4,
+              value: 4,
+            },
+          ],
+        },
+      },
     };
   },
   computed: {},
@@ -70,7 +141,7 @@ export default {
     // 修改正确选项中得某一个为正确答案
     changAnswer(index) {
       let arr = [];
-      if (this.curQue.type == "single") {
+      if (this.curQue.type == "single_chs") {
         this.curQue.option.forEach((item, i) => {
           if (index == i) {
             this.curQue.correct = [];
@@ -100,21 +171,16 @@ export default {
     },
     //添加一个选项
     addOption() {
-      let leg = this.curQue.option.length;
-      let last = this.curQue.option[leg - 1];
-      // if (!last.hanzi && !last.pinyin) {
-      //   this.$message.warning("数据不能全是空");
-      //   return;
-      // }
-      let type = this.curQue.type;
-      let cur_fn_data_arr = this.fn_data.filter((item) => item.type == type);
-      let cur_fn_data = JSON.parse(JSON.stringify(cur_fn_data_arr[0]));
-      let obj = cur_fn_data.data_structure.option[0];
+      let obj = JSON.parse(JSON.stringify(this.data_structure.option[0]));
       this.curQue.option.push(obj);
     },
   },
   //生命周期 - 创建完成(可以访问当前this实例)
-  created() {},
+  created() {
+    if (!this.curQue) {
+      this.changeCurQue(this.data_structure);
+    }
+  },
   //生命周期 - 挂载完成(可以访问DOM元素)
   mounted() {},
   beforeCreate() {}, //生命周期 - 创建之前

+ 438 - 13
src/components/Adult/inputModules/Sudoku.vue

@@ -1,37 +1,429 @@
 <!--  -->
 <template>
-  <div class="Big-Book-Sudoku">
-    <div
-      class="Big-Book-Sudoku-content"
-      style="margin-left: 50px; margin-top: 20px"
-    >
+  <div class="Big-Book-Sudoku" v-if="curQue">
+    <div class="Big-Book-Sudoku-content">
+      <div class="adult-book-input-item">
+        <span class="adult-book-lable">标题:</span>           
+        <el-input
+          type="textarea"
+          class="adult-book-input"
+          :autosize="{ minRows: 2 }"
+          placeholder="请输入标题"
+          v-model="curQue.title"
+          @blur="onBlur(curQue, 'title')"
+        ></el-input>
+      </div>
+      <p>双击修改为提示</p>
+      <div class="Big-Book-table">
+        <div v-for="(item, index) in curQue.option" :key="index">
+          <div v-for="(it, itindex) in item" :key="itindex + 'td'">
+            <input
+              :class="it.isHint ? 'dbclick' : ''"
+              type="text"
+              @input="changeNumber(it)"
+              maxlength="1"
+              v-model="it.value"
+              @dblclick="dbClickHint(it)"
+            />
+          </div>
+        </div>
+      </div>
     </div>
   </div>
 </template>
 
 <script>
-
 export default {
   name: "Sudoku",
-  props: ["curQue", "fn_data"],
-  components: {
-    
-  },
+  props: ["curQue", "fn_data", "changeCurQue"],
+  components: {},
   data() {
     return {
-
+      data_structure: {
+        type: "sudoku_chs",
+        name: "数独",
+        title: "",
+        option: [
+          [
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+          ],
+          [
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+          ],
+          [
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+          ],
+          [
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+          ],
+          [
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+          ],
+          [
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+          ],
+          [
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+          ],
+          [
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+          ],
+          [
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+            {
+              value: "",
+              isHint: false, //是不是提示
+            },
+          ],
+        ],
+      },
+      hintNumber: 0,
     };
   },
   computed: {},
   watch: {},
   //方法集合
   methods: {
- 
+    dbClickHint(item) {
+      if (item.isHint) {
+        if (this.hintNumber > 0) {
+          this.hintNumber--;
+          item.isHint = false;
+        }
+      } else {
+        if (this.hintNumber < 17) {
+          this.hintNumber++;
+          item.isHint = true;
+        }else{
+          this.$message.warning("最多为17个提示")
+          return
+        }
+      }
+    },
+    changeNumber(item) {
+      item.value = item.value.replace(/[^\d]/g, "");
+    },
   },
   //生命周期 - 创建完成(可以访问当前this实例)
   created() {},
   //生命周期 - 挂载完成(可以访问DOM元素)
-  mounted() {},
+  mounted() {
+    if (!this.curQue) {
+      let res_data = JSON.parse(JSON.stringify(this.data_structure));
+      this.changeCurQue(res_data);
+    }
+  },
   beforeCreate() {}, //生命周期 - 创建之前
   beforeMount() {}, //生命周期 - 挂载之前
   beforeUpdate() {}, //生命周期 - 更新之前
@@ -81,6 +473,39 @@ export default {
     line-height: 40px;
     cursor: pointer;
   }
+  .Big-Book-table {
+    width: 546px;
+    height: 546px;
+    display: flex;
+    flex-wrap: wrap;
+    > div {
+      display: flex;
+      flex-wrap: wrap;
+      width: 182px;
+      height: 182px;
+      border: 1px solid #484848;
+      box-sizing: border-box;
+      > div {
+        width: 60px;
+        height: 60px;
+        border: 1px solid #d1d1d1;
+        box-sizing: border-box;
+        input {
+          width: 100%;
+          height: 100%;
+          border: none;
+          outline: none;
+          font-size: 20px;
+          line-height: 150%;
+          color: #000000;
+          text-align: center;
+        }
+        .dbclick {
+          background: #bdbdbd;
+        }
+      }
+    }
+  }
 }
 </style>
 <style lang="scss">

+ 36 - 4
src/views/adultInput3.vue

@@ -178,9 +178,10 @@
                       v-if="
                         topicIitem.type == 'recordHZ_inputPY_chs' ||
                         topicIitem.type == 'inputItem_chs' ||
-                        topicIitem.type == 'sentence_input' ||
-                        topicIitem.type == 'sentence_judge' ||
-                        topicIitem.type == 'sentence_record'
+                        topicIitem.type == 'sentence_input_chs' ||
+                        topicIitem.type == 'sentence_judge_chs' ||
+                        topicIitem.type == 'sentence_record_chs' ||
+                        topicIitem.type == 'sentence_input_record_chs'
                       "
                     >
                       <template v-if="topicIitem.is_edit">
@@ -254,6 +255,34 @@
                         <Ligatureview :curQue="topicIitem.data" />
                       </template>
                     </template>
+                    <template
+                      v-if="topicIitem.type == 'image_question_input_record'"
+                    >
+                      <template v-if="topicIitem.is_edit">
+                        <ImageQuestion
+                          :curQue="topicIitem.data"
+                          :type="topicIitem.type"
+                          :fn_data="fn_data"
+                          :changeCurQue="changeCurQue"
+                        />
+                      </template>
+                      <template v-else> </template>
+                    </template>
+                    <template
+                      v-if="
+                        topicIitem.type == 'single_chs'
+                      "
+                    >
+                      <template v-if="topicIitem.is_edit">
+                        <Single
+                          :curQue="topicIitem.data"
+                          :type="topicIitem.type"
+                          :fn_data="fn_data"
+                          :changeCurQue="changeCurQue"
+                        />
+                      </template>
+                      <template v-else> </template>
+                    </template>
                   </div>
                   <div
                     class="addoption"
@@ -375,6 +404,7 @@ import Sentence from "@/components/Adult/inputModules/Sentence.vue";
 import Sudoku from "@/components/Adult/inputModules/Sudoku.vue";
 import ToneSelect from "@/components/Adult/inputModules/ToneSelect.vue";
 import NumberCombination from "@/components/Adult/inputModules/NumberCombination.vue";
+import ImageQuestion from "@/components/Adult/inputModules/ImageQuestion.vue";
 
 import Textdes from "@/components/Adult/inputModules/Textdes.vue";
 import Record from "@/components/Adult/inputModules/Record.vue";
@@ -395,7 +425,7 @@ import NewordPhraseview from "@/components/Adult/preview/WordPhrase.vue";
 import UploadControlView from "@/components/Adult/preview/UploadControlView.vue";
 
 import Preview from "@/components/Adult/Preview.vue";
-import fn from "@/components/Adult/common/data.js";
+import fn from "@/components/Adult/common/data3.js";
 import { getContent, getStaticContent } from "@/api/ajax";
 
 export default {
@@ -441,6 +471,7 @@ export default {
     Sudoku,
     NumberCombination,
     ToneSelect,
+    ImageQuestion,
   },
   data() {
     return {
@@ -668,6 +699,7 @@ export default {
       }
     },
     changeCurQue(data_stru) {
+      console.log(data_stru);
       console.log(this.RowIndex, this.LineIndex);
       this.$set(
         this.question_list[this.tabIndex].cur_fn_data[this.TopicIndex]