Sfoglia il codice sorgente

修改句子听+朗读增加选项字体

秦鹏 3 anni fa
parent
commit
6c4358d290

+ 19 - 2
src/components/Adult/common/SentenceModule.vue

@@ -33,6 +33,18 @@
         @blur="onBlur(curQueItem, 'en')"
       ></el-input>
     </div>
+    <div
+      class="adult-book-input-item"
+      v-if="type == 'sentence_listen_read_chs'"
+    >
+      <span class="adult-book-lable">选项字体:</span>
+      <el-radio-group v-model="curQueItem.font">
+        <el-radio label="cn">中文字体</el-radio>
+        <el-radio label="en">英文字体</el-radio>
+        <el-radio label="py">拼音字体</el-radio>
+      </el-radio-group>
+    </div>
+
     <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">
@@ -84,7 +96,11 @@
     <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&&type!='sentence_listen_read_chs'"
+        v-if="
+          item.type == 'sentence_record_chs' &&
+          item.isFn &&
+          type != 'sentence_listen_read_chs'
+        "
       >
         <span class="adult-book-lable">录音:</span>
         <el-radio-group v-model="curQueItem.IsRecord">
@@ -97,7 +113,8 @@
       class="adult-book-input-item"
       v-if="
         (type == 'sentence_input_record_chs' && curQueItem.IsRecord) ||
-        type == 'sentence_record_chs'||type=='sentence_listen_read_chs'
+        type == 'sentence_record_chs' ||
+        type == 'sentence_listen_read_chs'
       "
     >
       <span class="adult-book-lable">录音组件:</span>

+ 1 - 199
src/components/Adult/inputModules/PurePreview.vue

@@ -125,119 +125,10 @@
             />
           </div>
         </template>
-        <template v-if="type == 'zi_transverse_line_chs'">
-          <div class="adult-book-input-item">
-            <span class="adult-book-lable">序号:</span>
-            <el-input
-              class="adult-book-input"
-              type="textarea"
-              :autosize="{ minRows: 2 }"
-              placeholder="请输入序号"
-              v-model="item.number"
-              @blur="onBlur(item, 'number')"
-            ></el-input>
-            <img
-              @click="deleteOptionOne(index)"
-              class="close"
-              src="../../../assets/adult/del-close.png"
-              alt=""
-            />
-          </div>
-          <div class="adult-book-input-item">
-            <span class="adult-book-lable">内容:</span>
-            <el-input
-              class="adult-book-input"
-              type="textarea"
-              :autosize="{ minRows: 2 }"
-              placeholder="请输入内容"
-              v-model="item.con"
-              @blur="onBlur(item, 'con')"
-            ></el-input>
-          </div>
-          <div
-            class="adult-book-input-item"
-            v-for="(ans, anIndex) in item.answer"
-            :key="'an' + anIndex"
-          >
-            <span class="adult-book-lable">答案:</span>
-            <el-input
-              class="adult-book-input"
-              type="textarea"
-              :autosize="{ minRows: 2 }"
-              placeholder="请输入答案"
-              v-model="ans.con"
-              @blur="onBlur(ans, 'con')"
-            ></el-input>
-            <img
-              @click="deleteanswer(anIndex, index)"
-              class="close"
-              src="../../../assets/adult/del-close.png"
-              alt=""
-            />
-          </div>
-          <div class="addoption" @click="addanswer(index)">添加答案</div>
-          <div class="adult-book-input-item">
-            <span class="adult-book-lable">拼音状态:</span>
-            <el-radio-group v-model="item.Ispinyin">
-              <el-radio :label="true">需要拼音</el-radio>
-              <el-radio :label="false">不需要拼音</el-radio>
-            </el-radio-group>
-          </div>
-          <div class="adult-book-input-item" v-if="item.Ispinyin">
-            <span class="adult-book-lable">拼音位置:</span>
-            <el-radio-group v-model="item.pinyinSite">
-              <el-radio label="top">上</el-radio>
-              <el-radio label="bottom">下</el-radio>
-              <el-radio label="left">左</el-radio>
-              <el-radio label="right">右</el-radio>
-            </el-radio-group>
-          </div>
-          <template v-if="item.Ispinyin && item.pinyinSite">
-            <div
-              class="adult-book-input-item"
-              v-for="(py, pyIndex) in item.pinyinList"
-              :key="'py' + pyIndex"
-            >
-              <span class="adult-book-lable">拼音:</span>
-              <el-input
-                class="adult-book-input"
-                type="textarea"
-                :autosize="{ minRows: 2 }"
-                placeholder="请输入拼音"
-                v-model="py.con"
-                @blur="onBlur(py, 'con')"
-              ></el-input>
-              <img
-                @click="deletepinyin(pyIndex, index)"
-                class="close"
-                src="../../../assets/adult/del-close.png"
-                alt=""
-              />
-            </div>
-            <div class="addoption" @click="addpinyin(index)">添加拼音</div>
-          </template>
-          <div class="adult-book-input-item">
-            <span class="adult-book-lable">音频控件:</span>
-            <img src="../../../assets/adult/mini.png" alt="" />
-          </div>
-        </template>
       </div>
       <div class="Big-Book-addrole">
         <div class="addoption" @click="addOption">添加一个</div>
       </div>
-      <div class="Big-Book-divide" v-if="type == 'zi_transverse_line_chs'">
-        <el-divider content-position="center">功能设置</el-divider>
-        <span style="margin: 0 10px">请选择每行数量</span>
-        <el-select v-model="curQue.numberList.con" placeholder="请选择">
-          <el-option
-            v-for="(item, i) in curQue.numberList.arr"
-            :key="i"
-            :label="item.value"
-            :value="item.id"
-          >
-          </el-option>
-        </el-select>
-      </div>
     </div>
   </div>
 </template>
@@ -288,7 +179,6 @@ export default {
           },
         ],
       },
-
       data_structure2: {
         type: "newWord_preview_chs",
         name: "生字展示",
@@ -313,50 +203,6 @@ export default {
           },
         ],
       },
-      data_structure4: {
-        type: "zi_transverse_line_chs",
-        name: "字+横线",
-        title: "",
-        mp3_list: [],
-        option: [
-          {
-            number: "", //序号
-            con: "", //内容
-            Ispinyin: null, //是否有拼音
-            pinyinSite: null, //拼音位置
-            pinyinList: [{ con: "" }],
-            answer: [
-              {
-                con: "",
-              },
-            ],
-          },
-        ],
-
-        numberList: {
-          type: "number",
-          name: "每行几个",
-          con: "2",
-          arr: [
-            {
-              id: 1,
-              value: 1,
-            },
-            {
-              id: 2,
-              value: 2,
-            },
-            {
-              id: 3,
-              value: 3,
-            },
-            {
-              id: 4,
-              value: 4,
-            },
-          ],
-        },
-      },
     };
   },
   computed: {},
@@ -366,46 +212,6 @@ export default {
     onBlur(item, field) {
       item[field] = item[field] ? item[field].trim() : "";
     },
-    // 增加拼音
-    addpinyin(index) {
-      let obj;
-      if (this.type == "zi_transverse_line_chs") {
-        obj = JSON.parse(
-          JSON.stringify(this.data_structure4.option[0].pinyinList[0])
-        );
-        this.curQue.option[index].pinyinList.push(obj);
-      }
-    },
-    // 删除拼音
-    deletepinyin(aindex, index) {
-      if (this.type == "zi_transverse_line_chs") {
-        if (this.curQue.option[index].pinyinList.length <= 1) {
-          this.$message.warning("至少要保留1个拼音");
-          return;
-        }
-        this.curQue.option[index].pinyinList.splice(aindex, 1);
-      }
-    },
-    // 增加答案
-    addanswer(index) {
-      let obj;
-      if (this.type == "zi_transverse_line_chs") {
-        obj = JSON.parse(
-          JSON.stringify(this.data_structure4.option[0].answer[0])
-        );
-        this.curQue.option[index].answer.push(obj);
-      }
-    },
-    // 删除答案
-    deleteanswer(aindex, index) {
-      if (this.type == "zi_transverse_line_chs") {
-        if (this.curQue.option[index].answer.length <= 1) {
-          this.$message.warning("至少要保留1个答案");
-          return;
-        }
-        this.curQue.option[index].answer.splice(aindex, 1);
-      }
-    },
     // 删除其中一个选项
     deleteOptionOne(index) {
       if (this.curQue.option.length <= 1) {
@@ -423,9 +229,7 @@ export default {
         obj = JSON.parse(JSON.stringify(this.data_structure.option[0]));
       } else if (this.type == "listen_record_single_syllable_chs") {
         obj = JSON.parse(JSON.stringify(this.data_structure3.option[0]));
-      } else if (this.type == "zi_transverse_line_chs") {
-        obj = JSON.parse(JSON.stringify(this.data_structure4.option[0]));
-      }
+      } 
       this.curQue.option.push(obj);
     },
     initcurQue() {
@@ -436,8 +240,6 @@ export default {
         data = JSON.parse(JSON.stringify(this.data_structure));
       } else if (this.type == "listen_record_single_syllable_chs") {
         data = JSON.parse(JSON.stringify(this.data_structure3));
-      } else if (this.type == "zi_transverse_line_chs") {
-        data = JSON.parse(JSON.stringify(this.data_structure4));
       }
       this.changeCurQue(data);
     },

+ 1 - 0
src/components/Adult/inputModules/Sentence.vue

@@ -117,6 +117,7 @@ export default {
           {
             mp3_list: [],
             number: "",
+            font:"",
             detail: {
               pyPosition: "top", //top 拼音在上面;bottom 拼音在下面
               sentence: "", //句子

+ 493 - 0
src/components/Adult/inputModules/ZiLine.vue

@@ -0,0 +1,493 @@
+<!--  -->
+<template>
+  <div class="Big-Book-PurePreview" 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="{ minRows: 2 }"
+          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.arrangeWay" @change="changearrangeWay">
+          <el-radio label="单列">单列</el-radio>
+          <el-radio label="双列">双列</el-radio>
+          <el-radio label="四列">四列</el-radio>
+        </el-radio-group>
+      </div>
+      <div class="adult-book-input-item">
+        <span class="adult-book-lable">配置:</span>
+        <div class="xorl">
+          <el-switch v-model="curQue.Isnumber" active-text="序号"> </el-switch>
+          <el-switch v-model="curQue.IsRecord" active-text="录音"> </el-switch>
+        </div>
+      </div>
+      <div class="main">
+        <div
+          class="row"
+          v-for="(row, rowIndex) in curQue.option"
+          :key="'row' + rowIndex"
+        >
+          <div
+            :style="{
+              width: `${
+                curQue.arrangeWay == '单列'
+                  ? '732px'
+                  : curQue.arrangeWay == '双列'
+                  ? '362px'
+                  : '177px'
+              }`,
+            }"
+            class="col"
+            v-for="(col, colIndex) in row"
+            :key="'col' + colIndex"
+          >
+            <div class="td">
+              <span>1</span>
+              <div></div>
+              <img src="../../../assets/adult/mini.png" alt="" />
+            </div>
+            <p>
+              <span> 编辑 </span>
+            </p>
+          </div>
+        </div>
+      </div>
+    </div>
+    <el-dialog
+      title="提示"
+      :visible.sync="dialogVisible"
+      width="30%"
+      :before-close="handleClose"
+    >
+      <div class="Module" v-if="dialogData">
+        <div class="adult-book-input-item">
+          <el-radio-group v-model="dialogData.type">
+            <el-radio label="英文">英文</el-radio>
+            <el-radio label="拼音+中文">拼音+中文</el-radio>
+          </el-radio-group>
+        </div>
+        <div v-for="(item, index) in dialogData.list" :key="'h' + index">
+          <div class="adult-book-input-item">
+            <span class="adult-book-lable">内容:</span>
+            <el-input
+              class="adult-book-input"
+              type="textarea"
+              :autosize="{ minRows: 2 }"
+              placeholder="请输入内容"
+              v-model="item.con"
+              @blur="onBlur(item, 'con')"
+            ></el-input>
+          </div>
+          <div
+            class="adult-book-input-item"
+            v-if="dialogData.type == '拼音+中文'"
+          >
+            <span class="adult-book-lable">拼音:</span>
+            <el-input
+              class="adult-book-input"
+              type="textarea"
+              :autosize="{ minRows: 2 }"
+              placeholder="请输入拼音"
+              v-model="item.pinyin"
+              @blur="onBlur(item, 'pinyin')"
+            ></el-input>
+          </div>
+        </div>
+        <div class="addoption">增加</div>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="handleClose">取 消</el-button>
+        <el-button type="primary" @click="dialogVisible = false"
+          >确 定</el-button
+        >
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import Upload from "../common/Upload";
+import SentenceSegwordChs from "../common/SentenceSegwordChs/index.vue";
+export default {
+  name: "PurePreview",
+  props: ["curQue", "fn_data", "changeCurQue", "type"],
+  components: {
+    SentenceSegwordChs,
+    Upload,
+  },
+  data() {
+    return {
+      checkList: [],
+      mp3Number: 1,
+      form: {
+        stem: {
+          con: "",
+          pinyin: "",
+          english: "",
+          highlight: "",
+          underline: "",
+          img_url: [],
+          mp3_url: [],
+        },
+      },
+      data_structure: {
+        type: "zi_transverse_line_chs",
+        name: "字+横线",
+        title: "",
+        arrangeWay: "单列", //排列方式
+        Isnumber: false, //需不需要 序号
+        IsRecord: false, //需不需要录音
+        option: [
+          [
+            {
+              type: "", //英文还是拼音+中文
+              list: [
+                {
+                  con: "",
+                  pinyin: "",
+                  answer: [
+                    {
+                      con: "",
+                    },
+                  ],
+                },
+              ],
+            },
+          ],
+        ],
+        numberList: {
+          type: "number",
+          name: "每行几个",
+          con: "2",
+          arr: [
+            {
+              id: 1,
+              value: 1,
+            },
+            {
+              id: 2,
+              value: 2,
+            },
+            {
+              id: 3,
+              value: 3,
+            },
+            {
+              id: 4,
+              value: 4,
+            },
+          ],
+        },
+      },
+      dialogVisible: false,
+      dialogData: null,
+    };
+  },
+  computed: {},
+  watch: {},
+  //方法集合
+  methods: {
+    //   关闭弹窗
+    handleClose() {
+      this.dialogVisible = false;
+      this.dialogData = null;
+    },
+    //   修改排列方式
+    changearrangeWay(value) {
+      let obj = this.data_structure.option[0][0];
+      if (value == "双列") {
+        this.curQue.option.forEach((row) => {
+          if (row.length > 1) {
+            row.splice(2, row.length - 1);
+          } else {
+            row.push(obj);
+          }
+        });
+      } else if (value == "四列") {
+        this.curQue.option.forEach((row) => {
+          if (row.length >= 2) {
+            for (let i = 0; i < 2; i++) {
+              row.push(obj);
+            }
+          } else {
+            for (let i = 0; i < 3; i++) {
+              row.push(obj);
+            }
+          }
+        });
+      } else if (value == "单列") {
+        this.curQue.option.forEach((row) => {
+          row.splice(1, row.length - 1);
+        });
+      }
+    },
+    onBlur(item, field) {
+      item[field] = item[field] ? item[field].trim() : "";
+    },
+    // 增加拼音
+    addpinyin(index) {
+      let obj;
+      obj = JSON.parse(
+        JSON.stringify(this.data_structure.option[0].pinyinList[0])
+      );
+      this.curQue.option[index].pinyinList.push(obj);
+    },
+    // 删除拼音
+    deletepinyin(aindex, index) {
+      if (this.type == "zi_transverse_line_chs") {
+        if (this.curQue.option[index].pinyinList.length <= 1) {
+          this.$message.warning("至少要保留1个拼音");
+          return;
+        }
+        this.curQue.option[index].pinyinList.splice(aindex, 1);
+      }
+    },
+    // 增加答案
+    addanswer(index) {
+      let obj;
+      if (this.type == "zi_transverse_line_chs") {
+        obj = JSON.parse(
+          JSON.stringify(this.data_structure.option[0].answer[0])
+        );
+        this.curQue.option[index].answer.push(obj);
+      }
+    },
+    // 删除答案
+    deleteanswer(aindex, index) {
+      if (this.curQue.option[index].answer.length <= 1) {
+        this.$message.warning("至少要保留1个答案");
+        return;
+      }
+      this.curQue.option[index].answer.splice(aindex, 1);
+    },
+    // 删除其中一个选项
+    deleteOptionOne(index) {
+      if (this.curQue.option.length <= 1) {
+        this.$message.warning("至少要保留1个选项");
+        return;
+      }
+      this.curQue.option.splice(index, 1);
+    },
+    // 新增选项
+    addOption() {
+      let obj = JSON.parse(JSON.stringify(this.data_structure.option[0]));
+      this.curQue.option.push(obj);
+    },
+    initcurQue() {
+      let data = JSON.parse(JSON.stringify(this.data_structure));
+      this.changeCurQue(data);
+    },
+    // 选项的音频
+    changeMp3(fileList, item, index) {
+      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.curQue.option[index].mp3_list = JSON.parse(
+        JSON.stringify(articleImgRes)
+      );
+    },
+    // 题目的音频
+    timuchangeMp3(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.curQue.mp3_list = JSON.parse(JSON.stringify(articleImgRes));
+    },
+  },
+  //生命周期 - 创建完成(可以访问当前this实例)
+  created() {
+    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-PurePreview {
+  &-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;
+        }
+      }
+    }
+  }
+  .addoption {
+    width: 200px;
+    height: 40px;
+    left: 40px;
+    top: 304px;
+    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-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;
+  }
+  .close {
+    width: 24px;
+    cursor: pointer;
+  }
+  .xorl {
+    display: flex;
+    align-items: center;
+    margin-top: 5px;
+    > :nth-child(1) {
+      margin-right: 33px;
+    }
+  }
+  .main {
+    width: 780px;
+    min-height: 251px;
+    background: #f2f2f2;
+    border: 1px solid rgba(0, 0, 0, 0.1);
+    box-sizing: border-box;
+    border-radius: 8px;
+    padding: 24px 16px;
+    .row {
+      display: flex;
+      .col {
+        width: 732px;
+        margin: 0 4px;
+        .td {
+          width: 100%;
+          display: flex;
+          background: #ffffff;
+          border: 1px solid rgba(0, 0, 0, 0.1);
+          box-sizing: border-box;
+          border-radius: 8px;
+          min-height: 48px;
+          display: flex;
+          align-items: center;
+          padding: 0 12px;
+          > div {
+            margin: 0 8px;
+            width: 67%;
+          }
+          > span {
+            display: inline-block;
+            width: 16px;
+            height: 16px;
+            color: white;
+            background: #de4444;
+            border-radius: 50%;
+            text-align: center;
+            font-size: 12px;
+            line-height: 16px;
+          }
+        }
+        > p {
+          width: 100%;
+          text-align: center;
+          span {
+            cursor: pointer;
+          }
+        }
+      }
+    }
+  }
+}
+</style>
+<style lang="scss">
+</style>

+ 17 - 3
src/views/adultInput3.vue

@@ -290,13 +290,12 @@
                       </template>
                       <template v-else> </template>
                     </template>
+
                     <template
                       v-if="
                         topicIitem.type == 'text_problem_chs' ||
                         topicIitem.type == 'newWord_preview_chs' ||
-                        topicIitem.type ==
-                          'listen_record_single_syllable_chs' ||
-                        topicIitem.type == 'zi_transverse_line_chs'
+                        topicIitem.type == 'listen_record_single_syllable_chs'
                       "
                     >
                       <template v-if="topicIitem.is_edit">
@@ -309,6 +308,19 @@
                       </template>
                       <template v-else> </template>
                     </template>
+                    <template
+                      v-if="topicIitem.type == 'zi_transverse_line_chs'"
+                    >
+                      <template v-if="topicIitem.is_edit">
+                        <ZiLine
+                          :curQue="topicIitem.data"
+                          :type="topicIitem.type"
+                          :fn_data="fn_data"
+                          :changeCurQue="changeCurQue"
+                        />
+                      </template>
+                      <template v-else> </template>
+                    </template>
                   </div>
                   <div
                     class="addoption"
@@ -432,6 +444,7 @@ 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 PurePreview from "@/components/Adult/inputModules/PurePreview.vue";
+import ZiLine from "@/components/Adult/inputModules/ZiLine.vue";
 
 import Textdes from "@/components/Adult/inputModules/Textdes.vue";
 import Record from "@/components/Adult/inputModules/Record.vue";
@@ -500,6 +513,7 @@ export default {
     ToneSelect,
     ImageQuestion,
     PurePreview,
+    ZiLine,
   },
   data() {
     return {