Browse Source

多题干题型

natasha 2 years ago
parent
commit
61136e5967

+ 12 - 1
src/components/Adult/Preview.vue

@@ -747,6 +747,16 @@
                         :judgeAnswer="itemJ"
                       />
                     </template>
+                    <template v-if="itemss.type == 'sentence_single_chs'">
+                      <SentenceMulModule
+                        v-if="refresh"
+                        :cur-que="itemss.data"
+                        :type="itemss.type"
+                        :theme-color="themeColor"
+                        :task-model="TaskModel"
+                        :judgeAnswer="itemJ"
+                      />
+                    </template>
                   </template>
                 </div>
               </div>
@@ -851,6 +861,7 @@ import PdfView from "./preview/PdfView.vue"; // 视频控件
 import SentenceModule from "./preview/SentenceModule.vue"; // 图片模板
 import PlayRecordView from "./preview/PlayRecordView.vue";
 import OptionsList from "./preview/OptionsList.vue"; // 选项模板
+import SentenceMulModule from "./preview/SentenceMulModule.vue" // 多题干模板
 
 import PreviewDialogueNPC from "./preview/PreviewDialogueNPC.vue"; // 选项模板
 
@@ -898,6 +909,7 @@ export default {
     SentenceModule,
     OptionsList,
     PreviewDialogueNPC,
+    SentenceMulModule
   },
   props: [
     "context",
@@ -1189,7 +1201,6 @@ export default {
         });
       }
       this.$forceUpdate();
-      console.log(_this.cur);
     },
     // 上一页
     handleNNPEprev() {

+ 11 - 0
src/components/Adult/common/SentenceSegTemp.vue

@@ -47,6 +47,13 @@
         </ul> -->
       </div>
     </div>
+    <div class="adult-book-input-item" v-if="type=='sentence_single_chs'">
+        <span class="adult-book-lable">句子缩进:</span>
+        <el-radio-group v-model="detail.textindent">
+            <el-radio :label="true">是</el-radio>
+            <el-radio :label="false">否</el-radio>
+        </el-radio-group>
+    </div>
     <div
       class="sentence-option"
       v-for="(dItem, dIndex) in detail.detail"
@@ -252,6 +259,10 @@ export default {
           value: "robot",
           name: "使用英文字体",
         },
+        {
+          value: "Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif",
+          name: "系统字体",
+        },
       ],
       configVisible: false,
       items: null,

+ 4 - 0
src/components/Adult/common/data.js

@@ -51,6 +51,10 @@ let fnData = [{
         type: "sentence_segtemp_chs",
         name: "句子拆分组件",
     },
+    {
+        type: "sentence_single_chs",
+        name: "多题干题型",
+    },
     // {
     //     type: "image_question",
     //     name: "看图模板",

+ 1338 - 0
src/components/Adult/inputModules/SentenceMulModule.vue

@@ -0,0 +1,1338 @@
+<!--  -->
+<template>
+  <div class="sentenceControl" v-if="curQue">
+    <div class="adult-book-input-item">
+      <span class="adult-book-lable">序号背景:</span>
+      <el-checkbox v-model="curQue.numberBg" style="margin-top: 6px"
+        >要背景色</el-checkbox
+      >
+    </div>
+    <div class="adult-book-input-item">
+      <span class="adult-book-lable">拼音位置:</span>
+      <el-radio-group v-model="curQue.pyPosition">
+        <el-radio :label="'top'">字的上面</el-radio>
+        <el-radio :label="'bottom'">字的下面</el-radio>
+      </el-radio-group>
+    </div>
+    <div class="adult-book-input-item">
+      <span class="adult-book-lable">分词模式:</span>
+      <el-radio-group v-model="curQue.segModel">
+        <el-radio :label="'word'">按字分割</el-radio>
+        <el-radio :label="'words'">按词分割</el-radio>
+      </el-radio-group>
+    </div>
+    <div class="adult-book-input-item">
+      <span class="adult-book-lable">排序方式:</span>
+      <el-radio-group v-model="curQue.sortType">
+        <el-radio label="col">横向</el-radio>
+        <el-radio label="row">纵向</el-radio>
+      </el-radio-group>
+    </div>
+    <Lrc :curQue="curQue" @setCurQue="setCurQue" />
+
+    <div class="option">
+      <div
+        class="option-item"
+        v-for="(item, col) in curQue.option"
+        :key="'control' + col"
+      >
+        <div class="adult-book-input-item">
+          <span class="adult-book-lable"
+            >第{{ col + 1 }}{{ curQue.sortType == "col" ? "行" : "列" }}:</span
+          >
+          <img
+            @click="deleteColRow(col)"
+            class="close"
+            src="../../../assets/adult/del-close.png"
+            alt=""
+          />
+        </div>
+
+        <div
+          v-for="(itemop, rowop) in item"
+          :key="'op' + rowop"
+          class="Big-Book-main"
+        >
+          <div class="adult-book-input-item">
+            <span class="adult-book-lable" style="width: 120px;text-align:left"
+                >第{{ col + 1 }}{{ curQue.sortType == "col" ? "行" : "列" }} 第 {{rowop+1}} 题:</span
+            >
+            <img
+                @click="deleteWOptionOne(col, rowop)"
+                class="close"
+                src="../../../assets/adult/del-close.png"
+                alt=""
+            />
+          </div>
+          <div
+            class="adult-book-input-item"
+            v-if="
+              curQue.wordTime &&
+              curQue.wordTime.length > 0 &&
+              curQue.wordTime[itemop.index]
+            "
+          >
+            <span class="adult-book-lable">字幕时间:</span>
+            <div style="display: flex; align-items: center">
+              <el-input
+                class="adult-book-input"
+                style="width: 200px"
+                v-model.trim="curQue.wordTime[itemop.index].bg"
+              ></el-input>
+              ~
+              <el-input
+                class="adult-book-input"
+                style="width: 200px"
+                v-model.trim="curQue.wordTime[itemop.index].ed"
+              ></el-input>
+            </div>
+          </div>
+          <div class="adult-book-input-item">
+            <span class="adult-book-lable">题干序号:</span>
+            <el-input
+                class="adult-book-input"
+                style="width: 200px"
+                v-model.trim="itemop.numbertotal"
+              ></el-input>
+              <el-radio-group
+                    v-model="itemop.numberfontSize"
+                >
+                    <el-radio label="12px">12px</el-radio>
+                    <el-radio label="16px">16px</el-radio>
+                    <el-radio label="20px">20px</el-radio>
+                    <el-radio label="24px">24px</el-radio>
+                    <el-radio label="28px">28px</el-radio>
+                </el-radio-group>
+          </div>
+          <div class="adult-book-input-item">
+            <span class="adult-book-lable">总题干:</span>
+            <el-button type="primary" @click="setOptionDetail(col, rowop)"
+              >添加句子</el-button
+            >
+          </div>
+          <div
+            v-if="itemop.detail.length > 0"
+            style="padding: 10px 0px 10px 86px"
+          >
+            <ul
+              class="option-detail-detail"
+              v-for="(dItem, dIndex) in itemop.detail"
+              :key="'ddItem' + col + rowop + dIndex"
+            >
+              <li
+                v-for="(ddItem, ddIndex) in dItem.detail"
+                :key="'ddItem' + col + rowop + dIndex + ddIndex"
+              >
+                <span
+                  :class="[
+                    ddItem.config.wordPadding.indexOf('left') > -1
+                      ? 'dleft'
+                      : '',
+                    ddItem.config.wordPadding.indexOf('right') > -1
+                      ? 'dright'
+                      : '',
+                    !ddItem.sentence ? 'placeholder' : '',
+                  ]"
+                  >{{ ddItem.sentence }}</span
+                >
+              </li>
+              <i
+                class="el-icon-edit"
+                @click.prevent="
+                  setOptionDetail(col, rowop, '', 'edit', dItem, dIndex)
+                "
+                style="margin-left: 14px"
+              ></i>
+              <i
+                class="el-icon-delete"
+                @click.prevent="deleteOptionDetail(itemop.detail, dIndex)"
+                style="margin-left: 14px"
+              ></i>
+            </ul>
+          </div>
+          
+          <div class="options-item" v-for="(items, row) in itemop.options"
+          :key="'ops' + row">
+            <div class="adult-book-input-item">
+                <span class="adult-book-lable" style="width: 200px;text-align:left"
+                    >第{{ col + 1 }}{{ curQue.sortType == "col" ? "行" : "列" }} 第 {{rowop+1}} 题  第 {{row+1}} 小题:</span
+                >
+                <img
+                    @click="deleteWOptionsOne(col, rowop, row)"
+                    class="close"
+                    src="../../../assets/adult/del-close.png"
+                    alt=""
+                />
+            </div>
+            <div class="adult-book-input-item">
+                <span class="adult-book-lable">功能:</span>
+                <el-button
+                type="primary"
+                size="small"
+                @click="setConfig(items, col, rowop, row)"
+                style="margin"
+                >功能设置</el-button
+                >
+                <ul class="check-fn-list">
+                <li v-if="items && items.fn_check_list.sent_check">
+                    {{ items.fn_check_list.sent_check | getFnName(fn_list) }}
+                </li>
+                <li v-if="items && items.fn_check_list.short_check">
+                    {{ items.fn_check_list.short_check | getFnName(fn_list) }}
+                </li>
+                <li v-if="items && items.fn_check_list.long_check">
+                    {{ items.fn_check_list.long_check | getFnName(fn_list) }}
+                </li>
+                <li v-if="items && items.fn_check_list.judge_check">
+                    {{ items.fn_check_list.judge_check | getFnName(fn_list) }}
+                </li>
+                <li v-if="items && items.fn_check_list.checkbox_check">
+                    {{ items.fn_check_list.checkbox_check | getFnName(fn_list) }}
+                </li>
+                <li v-if="items && items.fn_check_list.radio_check">
+                    {{ items.fn_check_list.radio_check | getFnName(fn_list) }}
+                </li>
+                </ul>
+            </div>
+            <!-- <div class="adult-book-input-item">
+                <span class="adult-book-lable">小题序号:</span>
+                <el-input
+                    class="adult-book-input"
+                    style="width: 200px"
+                    v-model.trim="items.numbertotal"
+                ></el-input>
+            </div> -->
+            <div class="adult-book-input-item">
+                <span class="adult-book-lable">小题干:</span>
+                <el-button type="primary" @click="setOptionDetail(col, rowop, row)"
+                >添加句子</el-button
+                >
+            </div>
+            <div
+                v-if="items.detail.length > 0"
+                style="padding: 10px 0px 10px 86px"
+            >
+                <ul
+                class="option-detail-detail"
+                v-for="(dItem, dIndex) in items.detail"
+                :key="'ddItem' + col + row + dIndex"
+                >
+                <li
+                    v-for="(ddItem, ddIndex) in dItem.detail"
+                    :key="'ddItem' + col + row + dIndex + ddIndex"
+                >
+                    <span
+                    :class="[
+                        ddItem.config.wordPadding.indexOf('left') > -1
+                        ? 'dleft'
+                        : '',
+                        ddItem.config.wordPadding.indexOf('right') > -1
+                        ? 'dright'
+                        : '',
+                        !ddItem.sentence ? 'placeholder' : '',
+                    ]"
+                    >{{ ddItem.sentence }}</span
+                    >
+                </li>
+                <i
+                    class="el-icon-edit"
+                    @click.prevent="
+                    setOptionDetail(col, rowop, row, 'edit', dItem, dIndex)
+                    "
+                    style="margin-left: 14px"
+                ></i>
+                <i
+                    class="el-icon-delete"
+                    @click.prevent="deleteOptionDetail(items.detail, dIndex)"
+                    style="margin-left: 14px"
+                ></i>
+                </ul>
+            </div>
+            <div class="adult-book-input-item">
+                <span class="adult-book-lable">例子:</span>
+                <el-radio-group v-model="items.Isexample">
+                <el-radio :label="true">是</el-radio>
+                <el-radio :label="false">否</el-radio>
+                </el-radio-group>
+            </div>
+            <div class="correct-box">
+                <div
+                style="width: 600px"
+                v-if="
+                    items.fn_check_list.sent_check &&
+                    (items.fn_check_list.sent_check ==
+                    'sentence_complete_input_chs' ||
+                    items.fn_check_list.sent_check == 'sentence_long_input_chs')
+                "
+                >
+                <div style="padding-top: 10px">
+                    <span style="display: block; margin-bottom: 10px"
+                    >句子填空答案:<b style="font-size: 12px"
+                        >请输入本题答案,答案用换行符隔开;如果有的输入框没有答案,答案请输入??</b
+                    ></span
+                    >
+                    <el-input
+                    class="adult-book-input"
+                    type="textarea"
+                    :autosize="{ minRows: 2 }"
+                    v-model="items.correct.completeInput"
+                    placeholder="请输入句子填空答案"
+                    @blur="onBlur"
+                    maxlength="200"
+                    ></el-input>
+                </div>
+                </div>
+                <div
+                class="adult-book-input-item"
+                v-if="
+                    items.fn_check_list.short_check &&
+                    items.fn_check_list.short_check != 'sentence_double_input_chs'
+                "
+                >
+                <span class="adult-book-lable">短输入答案:</span>
+                <el-input
+                    v-model="items.correct.shortInput"
+                    @blur="onBlur(items.correct, 'shortInput')"
+                    placeholder="请输入短输入答案"
+                ></el-input>
+                </div>
+                <div
+                class="adult-book-input-item"
+                v-if="items.fn_check_list.long_check"
+                >
+                <span class="adult-book-lable">长输入答案:</span>
+                <el-input
+                    type="textarea"
+                    @blur="onBlur(items.correct, 'longInput')"
+                    :autosize="{ minRows: 2 }"
+                    v-model="items.correct.longInput"
+                    placeholder="请输入答案"
+                ></el-input>
+                </div>
+                <div
+                class="adult-book-input-item"
+                v-if="
+                    items.fn_check_list.short_check &&
+                    items.fn_check_list.short_check == 'sentence_double_input_chs'
+                "
+                >
+                <span class="adult-book-lable">多输入答案:</span>
+                <div>
+                    <div
+                    class="adult-book-input-item"
+                    v-for="(cdItem, cdIndex) in items.correct.doubleInput"
+                    :key="'cd+' + col + rowop + row + cdIndex"
+                    >
+                    <el-input
+                        v-model="cdItem.notice"
+                        @blur="onBlur(cdItem, 'notice')"
+                        placeholder="提示语"
+                        style="margin-right: 10px; width: 120px"
+                    ></el-input>
+                    <el-input
+                        v-model="cdItem.correct"
+                        @blur="onBlur(cdItem, 'correct')"
+                        placeholder="请输入答案"
+                    ></el-input>
+                    <i
+                        class="el-icon-delete"
+                        @click="deleteCD(items.correct.doubleInput, cdIndex)"
+                        style="margin: 14px 0 0 10px; cursor: pointer"
+                    ></i>
+                    </div>
+                    <i
+                    class="el-icon-circle-plus"
+                    @click="plusCD(items.correct.doubleInput)"
+                    style="cursor: pointer"
+                    ></i>
+                </div>
+                </div>
+                <div
+                class="adult-book-input-item"
+                v-if="items.fn_check_list.judge_check"
+                >
+                <span class="adult-book-lable">判断答案:</span>
+                <el-radio-group v-model="items.correct.judge">
+                    <el-radio label="true">正确</el-radio>
+                    <el-radio label="false">错误</el-radio>
+                    <el-radio label="unso" v-if="items.judge_isNo">无解</el-radio>
+                </el-radio-group>
+                <el-checkbox-group
+                    v-model="items.judge_isNo"
+                    style="margin-left: 20px; margin-top: 5px"
+                >
+                    <el-checkbox :label="true">预览显示无解按钮</el-checkbox>
+                </el-checkbox-group>
+                </div>
+                <div
+                class="adult-book-input-item"
+                v-if="items.fn_check_list.checkbox_check"
+                >
+                <span class="adult-book-lable">多选选项:</span>
+                <div class="select-option-list">
+                    <div class="adult-book-input-item">
+                    <el-button
+                        type="primary"
+                        size="mini"
+                        plain
+                        @click="setSelectOption('checkbox', col, rowop, row, 'add')"
+                        style="margin-right: 10px"
+                        >添加选项</el-button
+                    >
+                    <el-select
+                        v-model="items.checkboxNumber"
+                        size="mini"
+                        placeholder="请选择每行选项最大数量"
+                    >
+                        <el-option
+                        v-for="(item, i) in numberList.arr"
+                        :key="i"
+                        :label="item.value"
+                        :value="item.id"
+                        >
+                        </el-option>
+                    </el-select>
+                    </div>
+                    <template v-if="items.checkbox_option.length > 0">
+                    <el-checkbox-group v-model="items.correct.checkbox">
+                        <el-checkbox
+                        v-for="(bItem, bIndex) in items.checkbox_option"
+                        :key="'box' + col + rowop + row + bIndex"
+                        :label="bIndex"
+                        >
+                        {{ bItem.number }} {{ bItem.detail.sentence }}
+                        <i
+                            class="el-icon-edit"
+                            @click.prevent="
+                            setSelectOption(
+                                'checkbox',
+                                col,
+                                rowop,
+                                row,
+                                'edit',
+                                bItem,
+                                bIndex
+                            )
+                            "
+                            style="margin-left: 14px"
+                        ></i>
+                        <i
+                            class="el-icon-delete"
+                            @click.prevent="
+                            deleteSelectOption(items.checkbox_option, bIndex)
+                            "
+                            style="margin-left: 14px"
+                        ></i
+                        ></el-checkbox>
+                    </el-checkbox-group>
+                    </template>
+                </div>
+                </div>
+                <div
+                class="adult-book-input-item"
+                v-if="items.fn_check_list.radio_check"
+                >
+                <span class="adult-book-lable">单选选项:</span>
+                <div class="select-option-list">
+                    <div class="adult-book-input-item">
+                    <el-button
+                        type="primary"
+                        size="mini"
+                        plain
+                        @click="setSelectOption('radio', col, rowop, row, 'add')"
+                        style="margin-right: 10px"
+                        >添加选项</el-button
+                    >
+
+                    <el-select
+                        v-model="items.radioNumber"
+                        size="mini"
+                        placeholder="请选择每行选项最大数量"
+                    >
+                        <el-option
+                        v-for="(item, i) in numberList.arr"
+                        :key="i"
+                        :label="item.value"
+                        :value="item.id"
+                        >
+                        </el-option>
+                    </el-select>
+                    </div>
+                    <template v-if="items.radio_option.length > 0">
+                    <el-radio-group v-model="items.correct.radio">
+                        <el-radio
+                        v-for="(bItem, bIndex) in items.radio_option"
+                        :key="'box' + col + rowop + row + bIndex"
+                        :label="bIndex"
+                        >
+                        {{ bItem.number }} {{ bItem.detail.sentence }}
+                        <i
+                            class="el-icon-edit"
+                            @click.prevent="
+                            setSelectOption(
+                                'radio',
+                                col,
+                                rowop,
+                                row,
+                                'edit',
+                                bItem,
+                                bIndex
+                            )
+                            "
+                            style="margin-left: 14px"
+                        ></i>
+                        <i
+                            class="el-icon-delete"
+                            @click.prevent="
+                            deleteSelectOption(items.radio_option, bIndex)
+                            "
+                            style="margin-left: 14px"
+                        ></i
+                        ></el-radio>
+                    </el-radio-group>
+                    </template>
+                </div>
+                </div>
+                <div
+                class="adult-book-input-item"
+                v-if="items.fn_check_list.radio_check.indexOf('sentence_radio_row_chs')>-1||items.fn_check_list.checkbox_check.indexOf('sentence_checkbox_row_chs')>-1"
+                >
+                <span class="adult-book-lable">选项对齐:</span>
+                <el-radio-group v-model="items.optionAlign">
+                    <el-radio label="left">左对齐</el-radio>
+                    <el-radio label="right">右对齐</el-radio>
+                </el-radio-group>
+                </div>
+            </div>
+          </div>
+          <div class="addoption" @click="addWOptions(col,rowop)">添加小题</div>
+        </div>
+        <div class="addoption" @click="addWOption(col)">添加一题</div>
+      </div>
+      <div class="addoption" @click="addColRow">
+        添加{{ curQue.sortType == "col" ? "行" : "列" }}
+      </div>
+    </div>
+    <el-dialog title="功能设置" :visible.sync="configVisible" width="60%">
+      <FnConfig :items="items" :config="queConfig" />
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="configVisible = false">取 消</el-button>
+        <el-button type="primary" @click="saveConfig">确 定</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog
+      title="设置选项"
+      :close-on-click-modal="false"
+      :modal-append-to-body="false"
+      append-to-body
+      :visible.sync="checkboxVisible"
+      width="40%"
+    >
+      <selectOption
+        :item="selectItem"
+        :segModel="curQue.segModel"
+        v-if="checkboxVisible"
+      />
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="checkboxVisible = false">取 消</el-button>
+        <el-button type="primary" @click="saveSelectOption">确 定</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog
+      title="添加句子"
+      :close-on-click-modal="false"
+      :modal-append-to-body="false"
+      append-to-body
+      :visible.sync="addStemVisible"
+      width="50%"
+    >
+      <SentenceSegTemp :detail="optionItemDetail" :segModel="curQue.segModel" :type="type" />
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="addStemVisible = false">取 消</el-button>
+        <el-button type="primary" @click="saveOptionDetail">确 定</el-button>
+      </span>
+    </el-dialog>
+    <el-dialog
+      title="添加词汇卡片"
+      :close-on-click-modal="false"
+      :modal-append-to-body="false"
+      append-to-body
+      :visible.sync="wordCardVisible"
+      width="40%"
+      top="10px"
+    >
+      <template v-if="curWordcard">
+        <Wordcard :curQue="curWordcard" />
+      </template>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="wordCardVisible = false">取 消</el-button>
+        <el-button type="primary" @click="wordCardVisible = false"
+          >确 定</el-button
+        >
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import Upload from "../common/Upload";
+import Lrc from "../common/Lrc";
+import FnConfig from "../common/FnConfig";
+import selectOption from "../common/selectOption";
+import SentenceSegwordChs from "../common/SentenceSegwordChs";
+import SentenceSegTemp from "../common/SentenceSegTemp";
+import Wordcard from "../inputModules/DialogueAnswerChs/Wordcard.vue";
+
+export default {
+  components: {
+    Upload,
+    Lrc,
+    FnConfig,
+    selectOption,
+    SentenceSegwordChs,
+    SentenceSegTemp,
+    Wordcard,
+  },
+  props: ["curQue", "changeCurQue", "tmIndex", "type"],
+  filters: {
+    getFnName(type, fn_list) {
+      let name = "";
+      let arr = fn_list.filter((item) => item.type == type);
+      if (arr.length > 0) {
+        name = arr[0].name;
+      }
+      return name;
+    },
+  },
+  data() {
+    return {
+      numberList: {
+        type: "number",
+        name: "每行几个",
+        arr: [
+          {
+            id: 1,
+            value: 1,
+          },
+          {
+            id: 2,
+            value: 2,
+          },
+          {
+            id: 3,
+            value: 3,
+          },
+          {
+            id: 4,
+            value: 4,
+          },
+        ],
+      },
+      wordCardVisible: false,
+      curWordcard: null,
+      optionItemDetail: null,
+      addStemVisible: false,
+      datailIndex: 0,
+      detailSelectType: "",
+      checkList: [],
+      mp3Number: 1,
+      imgNumber: 1,
+      configVisible: false,
+      items: null,
+      row: 0,
+      col: 0,
+      rows: '',
+      checkboxVisible: false,
+      selectItem: null,
+      optionEditIndex: 0,
+      optionType: "",
+      fn_list: [
+        {
+          type: "sentence_view_chs",
+          name: "句子预览(______不会转成输入框)",
+          isFn: false,
+        },
+        {
+          type: "sentence_complete_input_chs",
+          name: "补全句子",
+          isFn: false,
+        },
+        {
+          type: "sentence_long_input_chs",
+          name: "句子填空(长输入)",
+          isFn: true,
+        },
+        {
+          type: "sentence_double_input_chs",
+          name: "短输入或多输入",
+          isFn: false,
+        },
+        {
+          type: "sentence_judge_col_chs",
+          name: "判断(题干和选项横排)",
+          isFn: false,
+        },
+        {
+          type: "sentence_judge_row_chs",
+          name: "判断(题干和选项竖排)",
+          isFn: false,
+        },
+        {
+          type: "sentence_checkbox_col_chs",
+          name: "多选(题干和选项横排)",
+          isFn: false,
+        },
+        {
+          type: "sentence_checkbox_row_chs",
+          name: "多选(题干和选项竖排)",
+          isFn: false,
+        },
+        {
+          type: "sentence_radio_col_chs",
+          name: "单选(题干和选项横排)",
+          isFn: false,
+        },
+        {
+          type: "sentence_radio_row_chs",
+          name: "单选(题干和选项竖排)",
+          isFn: false,
+        },
+        {
+          type: "sentence_record_mini_chs",
+          name: "录音控件-mini",
+          isFn: false,
+        },
+        {
+          type: "sentence_record_normal_chs",
+          name: "录音控件-normal",
+          isFn: false,
+        },
+        {
+          type: "sentence_record_pro_chs",
+          name: "录音控件-pro",
+          isFn: false,
+        },
+        {
+          type: "sentence_record_promax_chs",
+          name: "录音控件-promax",
+          isFn: false,
+        },
+      ],
+
+      data_structure: {
+        type: "sentence_single_chs",
+        name: "多题干题型",
+        title: "",
+        mp3_list: [],
+        lrc_list: [],
+        img_list: [],
+        img_site: "rightCenter",
+        img_size: 240, // 图片大小
+        taskId: "",
+        wordTime: [],
+        detail: [],
+        sentenceType: "chinese",
+        isShowNumber: true, //是否显示序号
+        numberStyle: "number",
+        numberBg: false, //是否跟书籍主题色一致
+        pyPosition: "top", //top 拼音在上面;bottom 拼音在下面
+        pyColor: "black",
+        segModel: "words", //word 按字分割;words 按词分割
+        sortType: "col", //col横;row:纵
+        bgColor: "grey", //背景颜色
+        option: [
+          [
+            {
+              index: 0,
+              mp3_list: [],
+              img_list: [],
+              Isexample: false,
+              font: "",
+              detail: [],
+              numbertotal: '', // 总题干序号
+              numberfontSize: '16px', // 序号大小
+              options:[
+                {
+                    mp3_list: [],
+                    img_list: [],
+                    Isexample: false,
+                    font: "",
+                    numbertotal: '', // 小题干序号
+                    detail: [],
+                    radioNumber: 1,
+                    checkboxNumber: 1,
+                    checkbox_option: [],
+                    radio_option: [],
+                    judge_isNo: false,
+                    correct: {
+                        completeInput: "",
+                        shortInput: "",
+                        longInput: "",
+                        doubleInput: [
+                        {
+                            notice: "",
+                            correct: "",
+                        },
+                        ],
+                        judge: "",
+                        checkbox: [],
+                        radio: "",
+                    },
+                    fn_check_list: {
+                        sent_check: "sentence_complete_input_chs",
+                        style_check: "",
+                        short_check: "",
+                        is_short_auto: false, //短输入宽度是否自适应
+                        long_check: "",
+                        judge_check: "",
+                        checkbox_check: "",
+                        radio_check: "",
+                        record_check: "",
+                    },
+                    optionAlign: 'left',
+                    wordcard: {
+                        //词汇卡片配置
+                        pyPosition: "top",
+                        wordcardList: [
+                        [
+                            {
+                            chs: "",
+                            pinyin: "",
+                            },
+                        ],
+                        ],
+                    },
+                }
+              ]
+            },
+          ],
+        ],
+      },
+      queConfig: {
+        fn_sent_list: [
+          {
+            type: "sentence_view_chs",
+            name: "句子预览(______不会转成输入框)",
+            isFn: true,
+          },
+          {
+            type: "sentence_complete_input_chs",
+            name: "句子填空 (补全句子)",
+            isFn: true,
+          },
+          {
+            type: "sentence_long_input_chs",
+            name: "句子填空(长输入)",
+            isFn: true,
+          },
+        ],
+        fn_style_list: [
+          {
+            type: "sentence_input_chs",
+            name: "单行文本",
+            isFn: false,
+          },
+          {
+            type: "sentence_textarea_chs",
+            name: "多行文本",
+            isFn: false,
+          },
+        ],
+        fn_short_list: [
+          {
+            type: "sentence_double_input_chs",
+            name: "短输入或多输入(题干和选项横排)",
+            isFn: false,
+          },
+        ],
+        fn_judge_list: [
+          {
+            type: "sentence_judge_col_chs",
+            name: "判断(题干和选项横排)",
+            isFn: false,
+          },
+          {
+            type: "sentence_judge_row_chs",
+            name: "判断(题干和选项竖排)",
+            isFn: false,
+          },
+        ],
+        fn_checkbox_list: [
+          {
+            type: "sentence_checkbox_col_chs",
+            name: "多选(题干和选项横排)",
+            isFn: false,
+          },
+          {
+            type: "sentence_checkbox_row_chs",
+            name: "多选(题干和选项竖排)",
+            isFn: false,
+          },
+        ],
+        fn_radio_list: [
+          {
+            type: "sentence_radio_col_chs",
+            name: "单选(题干和选项横排)",
+            isFn: false,
+          },
+          {
+            type: "sentence_radio_row_chs",
+            name: "单选(题干和选项竖排)",
+            isFn: false,
+          },
+        ],
+      },
+    };
+  },
+  computed: {},
+  watch: {},
+  //方法集合
+  methods: {
+    onBlur(item, field) {
+      item[field] = item[field] ? item[field].trim() : "";
+    },
+    //功能设置
+    setConfig(items, col, row, rows) {
+      this.configVisible = true;
+      this.row = row;
+      this.col = col;
+      this.rows = rows
+      this.items = JSON.parse(JSON.stringify(items));
+    },
+    saveConfig() {
+      this.configVisible = false;
+      this.curQue.option[this.col][this.row].options[this.rows].fn_check_list =
+        this.items.fn_check_list;
+    },
+    //   添加行或者列
+    addColRow() {
+      let obj = JSON.parse(JSON.stringify(this.data_structure.option[0]));
+      this.curQue.option.push(obj);
+      this.curQue.option = this.changeoptionIndex(this.curQue.option);
+    },
+    // 删除行或者列
+    deleteColRow(index) {
+        this.$confirm("确定要删除吗?", "提示", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning",
+        })
+        .then(() => {
+            if (this.curQue.option.length <= 1) {
+                this.$message.warning(
+                `至少保留1${this.curQue.sortType == "col" ? "行" : "列"}`
+                );
+                return;
+            }
+            this.curQue.option.splice(index, 1);
+            this.curQue.option = this.changeoptionIndex(this.curQue.option);
+        })
+    },
+    // 新增题
+    addWOption(col) {
+      let obj = JSON.parse(JSON.stringify(this.data_structure.option[0][0]));
+      this.curQue.option[col].push(obj);
+      this.curQue.option = this.changeoptionIndex(this.curQue.option);
+      console.log(this.curQue.option)
+    },
+    // 新增小题
+    addWOptions(col,cols) {
+      let obj = JSON.parse(JSON.stringify(this.data_structure.option[0][0].options[0]));
+      let opleg = this.curQue.option[col][cols].options.length - 1;
+      let list = this.curQue.option[col][cols].options[opleg].fn_check_list;
+      obj.fn_check_list = list;
+      this.curQue.option[col][cols].options.push(obj);
+      this.curQue.option = this.changeoptionIndex(this.curQue.option);
+      console.log(this.curQue.option)
+    },
+    // 删除题
+    deleteWOptionOne(col, row) {
+        this.$confirm("确定要删除吗?", "提示", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning",
+        })
+        .then(() => {
+            if (this.curQue.option[col].length <= 1) {
+                this.$message.warning("至少要保留1题");
+                return;
+            }
+            this.curQue.option[col].splice(row, 1);
+            this.curQue.option = this.changeoptionIndex(this.curQue.option);
+        })
+    },
+    // 删除小题
+    deleteWOptionsOne(col, row, rows) {
+        this.$confirm("确定要删除吗?", "提示", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning",
+        })
+        .then(() => {
+            if (this.curQue.option[col][row].options.length <= 1) {
+                this.$message.warning("至少要保留1题");
+                return;
+            }
+            this.curQue.option[col][row].options.splice(rows, 1);
+            this.curQue.option = this.changeoptionIndex(this.curQue.option);
+        })
+    },
+    // 给二维的数组每个添加索引
+    changeoptionIndex(data) {
+      let index = 0;
+      data.forEach((item) => {
+        item.forEach((items) => {
+          items.index = index;
+          index++;
+        });
+      });
+      return data;
+    },
+    changeMp3(fileList, file, index, index2) {
+      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][index2].mp3_list = JSON.parse(
+        JSON.stringify(articleImgRes)
+      );
+    },
+    changeImg(fileList, file, index, index2) {
+      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][index2].img_list = JSON.parse(
+        JSON.stringify(articleImgRes)
+      );
+    },
+    cancleSelected(key) {
+      if (key) {
+        key = "";
+      }
+    },
+
+    // 更多配置选择
+    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) {
+          item.isFn = true;
+        } else {
+          item.isFn = false;
+          let option = JSON.parse(JSON.stringify(this.data_structure.option));
+          let optionItem = option[0];
+          this.curQue.option.forEach((it) => {
+            it.correct = optionItem.correct;
+          });
+        }
+        return item;
+      });
+    },
+    judgeFnList(type) {
+      let bool = false;
+      this.curQue.fn_list.forEach((item) => {
+        if (type == item.type && item.isFn) {
+          bool = true;
+        }
+      });
+      return bool;
+    },
+    judgeIsAnswer() {
+      let arr = [];
+      arr = this.curQue.fn_list.filter((item) => item.isFn);
+      return arr.length > 0;
+    },
+    setCurQue(key, data) {
+      this.curQue[key] = JSON.parse(JSON.stringify(data));
+      this.$forceUpdate();
+    },
+    setSelectOption(isSelectType, col, rowop, row, type, bItem, optionEditIndex) {
+      this.checkboxVisible = true;
+      if (type == "edit") {
+        this.selectItem = JSON.parse(JSON.stringify(bItem));
+        this.optionEditIndex = optionEditIndex;
+      } else {
+        let obj = {
+          number: "",
+          detail: {
+            sentence: "", //句子
+            sentenceArr: [],
+            segList: [], //分词结果
+            seg_words: "",
+            wordsList: [],
+            hengList: [],
+          },
+        };
+
+        this.selectItem = JSON.parse(JSON.stringify(obj));
+      }
+
+      this.rows = row;
+      this.col = col;
+      this.row = rowop
+      this.optionType = type;
+      this.isSelectType = isSelectType;
+    },
+    saveSelectOption() {
+      if (this.isSelectType == "checkbox") {
+        this.saveCheckboxOption();
+      } else if (this.isSelectType == "radio") {
+        this.saveRadioOption();
+      }
+    },
+    saveCheckboxOption() {
+      let _this = this;
+      _this.checkboxVisible = false;
+      let selectItem = JSON.parse(JSON.stringify(_this.selectItem));
+      if (this.optionType == "add") {
+        _this.curQue.option[_this.col][_this.row].options[_this.rows].checkbox_option.push(
+          selectItem
+        );
+      } else {
+        _this.curQue.option[_this.col][_this.row].options[_this.rows].checkbox_option[
+          this.optionEditIndex
+        ] = selectItem;
+      }
+    },
+    saveRadioOption() {
+      let _this = this;
+      _this.checkboxVisible = false;
+      let selectItem = JSON.parse(JSON.stringify(_this.selectItem));
+      if (this.optionType == "add") {
+        _this.curQue.option[_this.col][_this.row].options[_this.rows].radio_option.push(selectItem);
+      } else {
+        _this.curQue.option[_this.col][_this.row].options[_this.rows].radio_option[
+          this.optionEditIndex
+        ] = selectItem;
+      }
+    },
+    deleteSelectOption(arr, index) {
+        this.$confirm("确定要删除吗?", "提示", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning",
+        })
+        .then(() => {
+            arr.splice(index, 1);
+        })
+    },
+    //多输入的添加
+    plusCD(arr) {
+      let obj = {
+        notice: "",
+        correct: "",
+      };
+      arr.push(JSON.parse(JSON.stringify(obj)));
+    },
+    //多输入的删除
+    deleteCD(arr, index) {
+        this.$confirm("确定要删除吗?", "提示", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning",
+        })
+        .then(() => {
+            arr.splice(index, 1);
+        })
+    },
+    //添加句子
+    setOptionDetail(col, rowop, row, type, dItem, dIndex) {
+      let _this = this;
+      _this.addStemVisible = true;
+      if (type == "edit") {
+        this.optionItemDetail = JSON.parse(JSON.stringify(dItem));
+      } else {
+        let obj = {
+          hengLeg: -1,
+          textindent: false, // 缩进
+          detail: [
+            {
+              pyPosition: "top", //top 拼音在上面;bottom 拼音在下面
+              sentence: "", //句子
+              segList: [], //分词结果
+              seg_words: "",
+              wordsList: [],
+              hengList: [],
+              config: {
+                fontSize: "16px",
+                fontColor: "#000",
+                fontFamily: "FZJCGFKTK",
+                wordPadding: [],
+              },
+            },
+          ],
+          fn_check_list: {
+            record_check: "",
+          },
+        };
+        this.optionItemDetail = JSON.parse(JSON.stringify(obj));
+      }
+      this.row = rowop;
+      this.col = col;
+      this.rows = row
+      this.datailIndex = dIndex;
+      this.detailSelectType = type;
+    },
+    //删除句子
+    deleteOptionDetail(detail, dIndex) {
+        this.$confirm("确定要删除吗?", "提示", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning",
+        })
+        .then(() => {
+            detail.splice(dIndex, 1);
+        })
+    },
+    //保存句子
+    saveOptionDetail() {
+      let _this = this;
+      _this.addStemVisible = false;
+      if(_this.rows||_this.rows===0){
+        if (_this.detailSelectType == "edit") {
+            let optionItem = JSON.parse(JSON.stringify(_this.optionItemDetail));
+            _this.curQue.option[_this.col][_this.row].options[_this.rows].detail[_this.datailIndex] =
+            optionItem;
+        } else {
+            let optionItem = JSON.parse(JSON.stringify(_this.optionItemDetail));
+            _this.curQue.option[_this.col][_this.row].options[_this.rows].detail.push(optionItem);
+        }
+      }else{
+        if (_this.detailSelectType == "edit") {
+            let optionItem = JSON.parse(JSON.stringify(_this.optionItemDetail));
+            _this.curQue.option[_this.col][_this.row].detail[_this.datailIndex] =
+            optionItem;
+        } else {
+            let optionItem = JSON.parse(JSON.stringify(_this.optionItemDetail));
+            _this.curQue.option[_this.col][_this.row].detail.push(optionItem);
+        }
+      }
+    },
+    timuchangeImage(fileList, items) {
+      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.curQue.img_list = JSON.parse(JSON.stringify(articleImgRes));
+    },
+    addWordcard(wordcard) {
+      this.wordCardVisible = true;
+      this.curWordcard = wordcard;
+    },
+    initCurQueData() {
+      let res_data = JSON.parse(JSON.stringify(this.data_structure));
+      this.changeCurQue(res_data);
+    },
+  },
+  //生命周期 - 创建完成(可以访问当前this实例)
+  created() {},
+  //生命周期 - 挂载完成(可以访问DOM元素)
+  mounted() {
+    let _this = this;
+    if (!_this.curQue) {
+      _this.initCurQueData();
+    } else {
+    }
+  },
+  beforeCreate() {}, //生命周期 - 创建之前
+  beforeMount() {}, //生命周期 - 挂载之前
+  beforeUpdate() {}, //生命周期 - 更新之前
+  updated() {}, //生命周期 - 更新之后
+  beforeDestroy() {}, //生命周期 - 销毁之前
+  destroyed() {}, //生命周期 - 销毁完成
+  activated() {}, //如果页面有keep-alive缓存功能,这个函数会触发
+};
+</script>
+<style lang='scss' scoped>
+//@import url(); 引入公共css类
+.option-item {
+  width: 100%;
+  box-sizing: border-box;
+  border: 1px rgb(173, 173, 173) dotted;
+  background: rgb(241, 241, 241);
+  padding: 16px;
+  margin-bottom: 10px;
+}
+.correct-box {
+  width: 500px;
+  > div {
+    margin-bottom: 10px;
+  }
+  .adult-book-input-item {
+    .adult-book-lable {
+      width: 105px;
+    }
+  }
+}
+.Big-Book-main {
+  border-bottom: 1px rgb(173, 173, 173) dotted;
+}
+.check-fn-list {
+  display: flex;
+  > li {
+    margin-left: 10px;
+    line-height: 32px;
+    color: #999;
+  }
+}
+.select-option-list {
+  .el-checkbox,
+  .el-radio {
+    display: block;
+    margin-bottom: 10px;
+  }
+}
+.adult-book-input-sty .el-radio-group {
+  padding: 8px 0;
+  display: block;
+}
+.option-detail-detail {
+  clear: both;
+  overflow: hidden;
+  margin-bottom: 10px;
+  > li {
+    float: left;
+    > span {
+      float: left;
+      &.dleft {
+        padding-left: 4px;
+        padding-right: 4px;
+      }
+    }
+  }
+  > i {
+    float: left;
+  }
+}
+.placeholder {
+  width: 8px;
+  height: 18px;
+}
+</style>

+ 12 - 0
src/components/Adult/preview/PreviewDialogueNPC.vue

@@ -632,6 +632,16 @@
                           :judgeAnswer="itemJ"
                         />
                       </template>
+                      <template v-if="itemss.type == 'sentence_single_chs'">
+                        <SentenceMulModule
+                            v-if="refresh"
+                            :cur-que="itemss.data"
+                            :type="itemss.type"
+                            :theme-color="themeColor"
+                            :task-model="TaskModel"
+                            :judgeAnswer="itemJ"
+                        />
+                      </template>
                     </template>
                   </div>
                 </div>
@@ -699,6 +709,7 @@ import PdfView from "./PdfView.vue"; // 视频控件
 import SentenceModule from "./SentenceModule.vue"; // 图片模板
 import PlayRecordView from "./PlayRecordView.vue";
 import OptionsList from "./OptionsList.vue"; // 选项模板
+import SentenceMulModule from "./SentenceMulModule.vue" // 多题干模板
 
 import { getToken } from "../../../utils/auth";
 
@@ -743,6 +754,7 @@ export default {
     PlayRecordView,
     SentenceModule,
     OptionsList,
+    SentenceMulModule
   },
   props: [
     "context",

+ 1586 - 0
src/components/Adult/preview/SentenceMulModule.vue

@@ -0,0 +1,1586 @@
+<!--  -->
+<template>
+  <div
+    class="sentence-control"
+    :class="[
+      curQue.mp3_list && curQue.mp3_list.length > 0 && curQue.mp3_list[0].id
+        ? 'hasmp3'
+        : '',
+    ]"
+    v-if="isShowTemp"
+  >
+    <div
+      class="out-audioLine-box"
+      v-if="
+        curQue.mp3_list && curQue.mp3_list.length > 0 && curQue.mp3_list[0].id
+      "
+    >
+      <div class="aduioLine-box aduioLine-practice">
+        <AudioLine
+          audioId="fillInforAudioLine"
+          :mp3="curQue.mp3_list[0].id"
+          :getCurTime="getCurTime"
+          :themeColor="themeColor"
+          :ed="ed"
+          type="audioLine"
+          ref="fillInforAudioLine"
+          @handleListenRead="handleListenRead"
+        />
+      </div>
+    </div>
+    <div
+      :class="[
+        'container-box',
+        curQue.img_list &&
+        curQue.img_list.length > 0 &&
+        curQue.img_site == 'rightCenter'
+          ? 'container-box-flex'
+          : '',
+      ]"
+    >
+      <div
+        class="fill-img-box"
+        v-if="
+          curQue.img_list &&
+          curQue.img_list.length > 0 &&
+          curQue.img_site == 'top'
+        "
+      >
+        <el-image
+          :src="curQue.img_list[0].id"
+          v-if="curQue.img_list[0].id"
+          fit="scale-down"
+          class="fill-img"
+          :style="{ width: curQue.img_size + 'px' }"
+        ></el-image>
+      </div>
+      <div
+        v-if="judgeAnswer == 'standardAnswer'"
+        :class="['container', curQue.sortType == 'row' ? 'ul-flex' : '']"
+      >
+        <div :class="['sent-option li-flex sent-option-standardAnswer']">
+          <div
+            :class="[
+              'sent-option-items',
+              itemsWidth == 780 ? 'sent-option-items-0' : 'sent-option-items-8',
+            ]"
+            v-for="(items, indexs) in userErrorList"
+            :key="'sent-option-items' + judgeAnswer + indexs"
+            :style="{
+              width:
+                curQue.sortType == 'col'
+                  ? itemsWidth + 'px'
+                  : Math.floor(780 / curQue.option.length) - 16 + 'px',
+            }"
+          >
+            <div
+              :class="[
+                'horn-24',
+                items.pyNumber &&
+                items.pyNumber[0] > 0 &&
+                curQue.pyPosition == 'top'
+                  ? 'horn-hasPY'
+                  : '',
+              ]"
+              v-if="
+                curQue.mp3_list &&
+                curQue.mp3_list.length > 0 &&
+                curQue.mp3_list[0].id &&
+                items.bg &&
+                items.ed
+              "
+              :style="{
+                height:
+                  items.detail &&
+                  items.detail.length > 0 &&
+                  items.detail[0].maxFontsize
+                    ? (items.detail[0].maxFontsize * 3) / 2 + 'px'
+                    : '32px',
+                marginTop:
+                  items.detail &&
+                  items.detail.length > 0 &&
+                  items.detail[0].maxFontsize
+                    ? ''
+                    : '0px',
+              }"
+            >
+              <AudioItem
+                :itemBg="items.bg"
+                :itemEd="items.ed"
+                :curTime="curTime"
+                :handleChangeTime="handleChangeTime"
+                :stopAudioS="stopAudioS"
+                :themeColor="themeColor"
+              />
+            </div>
+            <div :class="['sent-stem', bgClassName]">
+              <!-- 题干 -->
+              <div class="stem-content">
+                <!--  items.fn_check_list.judge_check || sdItem.fn_check_list.record_check.indexOf('normal') > -1
+                  ? 'sent-main-138'
+                  : '', -->
+                <div
+                  :class="[
+                    'sent-main',
+                    items.fn_check_list.judge_check.indexOf('col') > -1 ||
+                    items.fn_check_list.short_check ||
+                    sdItem.fn_check_list.record_check.indexOf('normal') > -1
+                      ? 'sent-que-flex'
+                      : '',
+                    items.fn_check_list.radio_check.indexOf('row') > -1 ||
+                    items.fn_check_list.checkbox_check.indexOf('row') > -1
+                      ? 'sent-main-bottom'
+                      : '',
+                  ]"
+                  v-for="(sdItem, sdIndex) in items.detail"
+                  :key="'sent-option-items' + indexs + sdIndex"
+                >
+                  <div class="sent-que-box">
+                    <div
+                      class="sent-que"
+                      v-for="(sddItem, sddIndex) in sdItem.detail"
+                      :key="'sent-option-items' + indexs + sdIndex + sddIndex"
+                      :style="{
+                        paddingLeft:
+                          sddItem.config.wordPadding.indexOf('left') > -1
+                            ? '4px'
+                            : '0px',
+                        paddingRight:
+                          sddItem.config.wordPadding.indexOf('right') > -1
+                            ? '4px'
+                            : '0px',
+                      }"
+                    >
+                      <!-- 补全句子 -->
+                      <OneSentenceTemp
+                        :detail="sddItem"
+                        :pyPosition="curQue.pyPosition"
+                        :TaskModel="TaskModel"
+                        :pyColor="curQue.pyColor"
+                        :Bookanswer="userBookanswer[indexs]"
+                        :judgeAnswer="judgeAnswer"
+                        :correctAnswer="items.correct.complateArr"
+                        :isInput="
+                          items.fn_check_list.sent_check ==
+                            'sentence_complete_input_chs' ||
+                          items.fn_check_list.sent_check ==
+                            'sentence_long_input_chs'
+                        "
+                        :fn_check_list="items.fn_check_list"
+                        :bgColor="curQue.bgColor"
+                        :pyNumber="items.pyNumber && items.pyNumber[sdIndex]"
+                        :record_check="sdItem.fn_check_list.record_check"
+                        :hengLeg="sdItem.hengLeg"
+                        :maxFontsize="sdItem.maxFontsize"
+                        :textIndent="sdItem.textindent"
+                      />
+                      <!-- <div class="en" v-if="sdItem.en">{{ sdItem.en }}</div> -->
+                      <div
+                        class="promax-box-div"
+                        v-if="
+                          sdItem.fn_check_list.record_check.indexOf('promax') >
+                          -1
+                        "
+                      >
+                        <Soundrecord
+                          :type="
+                            sdItem.fn_check_list.record_check
+                              ? typeList[sdItem.fn_check_list.record_check]
+                              : 'normal'
+                          "
+                          class="promax-box"
+                          :TaskModel="TaskModel"
+                          :tmIndex="sdIndex"
+                          :answerRecordList="[]"
+                        />
+                      </div>
+                    </div>
+                  </div>
+                  <div
+                    ref="answerpart"
+                    v-if="
+                      items.fn_check_list.judge_check ||
+                      sdItem.fn_check_list.record_check ||
+                      items.fn_check_list.short_check ||
+                      items.fn_check_list.radio_check.indexOf('col') > -1 ||
+                      items.fn_check_list.checkbox_check.indexOf('col') > -1
+                    "
+                    :class="[
+                      'answer-part',
+                      items.pyNumber && items.pyNumber[1] > 0
+                        ? 'answer-part-hasPY'
+                        : '',
+                      items.fn_check_list.judge_check ||
+                      sdItem.fn_check_list.record_check
+                        ? 'answer-part-138'
+                        : '',
+                    ]"
+                  >
+                    <!-- 短输入 -->
+                    <div
+                      :class="[
+                        'short-part',
+                        items.pyNumber && items.pyNumber[0] > 0
+                          ? 'short-part-hasPY'
+                          : '',
+                        items.fn_check_list.is_short_auto
+                          ? 'short-part-flex'
+                          : '',
+                      ]"
+                      v-if="sdIndex == 0 && items.fn_check_list.short_check"
+                    >
+                      <ShortInputTemp
+                        :doubleInput="items.correct.doubleInput"
+                        :Bookanswer="userBookanswer[indexs]"
+                        :TaskModel="TaskModel"
+                        :is_short_auto="items.fn_check_list.is_short_auto"
+                        :judgeAnswer="judgeAnswer"
+                      />
+                    </div>
+                    <!-- 判断 -->
+                    <div
+                      :class="[
+                        'judge-part',
+                        items.fn_check_list.judge_check.indexOf('row') > -1
+                          ? 'answer-part-padding-5'
+                          : '',
+                      ]"
+                      v-if="sdIndex == 0 && items.fn_check_list.judge_check"
+                    >
+                      <JudgeTemp
+                        :isRecord="items.fn_check_list.record_check"
+                        :Bookanswer="userBookanswer[indexs]"
+                        :judge_isNo="items.judge_isNo"
+                        :TaskModel="TaskModel"
+                        :Isexample="items.Isexample"
+                        :judgeCorrectAnswer="items.correct.judge"
+                        :judgeAnswer="judgeAnswer"
+                      />
+                    </div>
+                    <!-- 多选题 -->
+                    <div
+                      :class="[
+                        'short-part',
+                        items.pyNumber && items.pyNumber[0] > 0
+                          ? 'short-part-hasPY'
+                          : '',
+                      ]"
+                      v-if="
+                        sdIndex == 0 &&
+                        items.fn_check_list.checkbox_check.indexOf('col') > -1
+                      "
+                    >
+                      <OptionTemp
+                        :option="items.checkbox_option"
+                        :row="
+                          items.fn_check_list.checkbox_check.indexOf('row') > -1
+                        "
+                        :Bookanswer="userBookanswer[indexs]"
+                        :TaskModel="TaskModel"
+                        type="checkbox"
+                        :curQue="curQue"
+                        :items="items"
+                        :judgeAnswer="judgeAnswer"
+                      />
+                    </div>
+                    <!-- 单选题 -->
+                    <div
+                      :class="[
+                        'short-part',
+                        items.pyNumber && items.pyNumber[0] > 0
+                          ? 'short-part-hasPY'
+                          : '',
+                      ]"
+                      v-if="
+                        sdIndex == 0 &&
+                        items.fn_check_list.radio_check.indexOf('col') > -1
+                      "
+                    >
+                      <OptionTemp
+                        :option="items.radio_option"
+                        :row="
+                          items.fn_check_list.radio_check.indexOf('row') > -1
+                        "
+                        :Bookanswer="userBookanswer[indexs]"
+                        :correctAnswer="items.correct"
+                        :TaskModel="TaskModel"
+                        type="radio"
+                        :curQue="curQue"
+                        :items="items"
+                        :judgeAnswer="judgeAnswer"
+                      />
+                    </div>
+                    <!-- 录音 -->
+                    <div
+                      class="judge-part record-part"
+                      v-if="
+                        sdItem.fn_check_list.record_check &&
+                        items.fn_check_list.sent_check !=
+                          'sentence_long_input_chs'
+                      "
+                    >
+                      <Soundrecord
+                        :type="
+                          sdItem.fn_check_list.record_check
+                            ? typeList[sdItem.fn_check_list.record_check]
+                            : 'normal'
+                        "
+                        :class="[
+                          'record_' +
+                            typeList[sdItem.fn_check_list.record_check],
+                          'record-common',
+                          items.fn_check_list.short_check
+                            ? 'record-common-40'
+                            : '',
+                        ]"
+                        :TaskModel="TaskModel"
+                        :tmIndex="sdIndex"
+                        :answerRecordList="[]"
+                      />
+                    </div>
+                  </div>
+                </div>
+                <!-- 多选题 -->
+                <div
+                  class="select-que"
+                  v-if="items.fn_check_list.checkbox_check.indexOf('row') > -1"
+                  :style="{paddingLeft:items.detail&&items.detail[0]&&items.detail[0].textindent&&items.detail[0].detail&&items.detail[0].detail[0]?items.detail[0].detail[0].config.fontSize.replace('px','')*2+'px':'0'}"
+                >
+                  <OptionTemp
+                    :option="items.checkbox_option"
+                    :row="
+                      items.fn_check_list.checkbox_check.indexOf('row') > -1
+                    "
+                    :Bookanswer="userBookanswer[indexs]"
+                    :correctAnswer="items.correct"
+                    :TaskModel="TaskModel"
+                    type="checkbox"
+                    :curQue="curQue"
+                    :items="items"
+                    :judgeAnswer="judgeAnswer"
+                  />
+                </div>
+                <!-- 单选题 -->
+                <div
+                  class="select-que"
+                  v-if="items.fn_check_list.radio_check.indexOf('row') > -1"
+                  :style="{paddingLeft:items.detail&&items.detail[0]&&items.detail[0].textindent&&items.detail[0].detail&&items.detail[0].detail[0]?items.detail[0].detail[0].config.fontSize.replace('px','')*2+'px':'0'}"
+                >
+                  <OptionTemp
+                    :option="items.radio_option"
+                    :row="items.fn_check_list.radio_check.indexOf('row') > -1"
+                    :Bookanswer="userBookanswer[indexs]"
+                    :correctAnswer="items.correct"
+                    :TaskModel="TaskModel"
+                    type="radio"
+                    :curQue="curQue"
+                    :items="items"
+                    :judgeAnswer="judgeAnswer"
+                  />
+                </div>
+              </div>
+            </div>
+            <!-- 题干 -->
+          </div>
+        </div>
+      </div>
+      <div
+        v-else
+        :class="['container', curQue.sortType == 'row' ? 'ul-flex' : '']"
+      >
+        <div
+          :class="[
+            'sent-option',
+            curQue.mp3_list &&
+            curQue.mp3_list.length > 0 &&
+            curQue.mp3_list[0].id
+              ? 'sent-option-24'
+              : '',
+            curQue.sortType == 'row' ? 'sent-option-row' : 'li-flex',
+          ]"
+          v-for="(item, index) in curQue.option"
+          :key="'sent-option' + index"
+        >
+          <div
+            :class="[
+              'sent-option-items',
+              itemsWidth == 780 ? 'sent-option-items-0' : 'sent-option-items-8',
+            ]"
+            v-for="(itemO, indeO) in item"
+            :key="'sent-option-items' + index + indeO"
+            :style="{
+              width: curQue.sortType == 'col' ? itemsWidth + 'px' : '100%',
+
+            }"
+          >
+            <div
+              :class="[
+                'horn-24',
+                itemO.pyNumber &&
+                itemO.pyNumber[0] > 0 &&
+                curQue.pyPosition == 'top'
+                  ? 'horn-hasPY'
+                  : '',
+              ]"
+              v-if="
+                curQue.mp3_list &&
+                curQue.mp3_list.length > 0 &&
+                curQue.mp3_list[0].id &&
+                itemO.bg &&
+                itemO.ed
+              "
+              :style="{
+                height:
+                  itemO.detail &&
+                  itemO.detail.length > 0 &&
+                  itemO.detail[0].maxFontsize
+                    ? (itemO.detail[0].maxFontsize * 3) / 2 + 'px'
+                    : '32px',
+                marginTop:
+                  itemO.detail &&
+                  itemO.detail.length > 0 &&
+                  itemO.detail[0].maxFontsize
+                    ? ''
+                    : '0px',
+              }"
+            >
+              <AudioItem
+                :itemBg="itemO.bg"
+                :itemEd="itemO.ed"
+                :curTime="curTime"
+                :handleChangeTime="handleChangeTime"
+                :stopAudioS="stopAudioS"
+                :themeColor="themeColor"
+              />
+            </div>
+            <div :class="['sent-stem', bgClassName]">
+              <div
+                v-if="itemO.numbertotal"
+                :class="[
+                  'number-box number-box-hasmp3',
+                  itemO.pyNumber &&
+                  itemO.pyNumber[0] > 0 &&
+                  curQue.pyPosition == 'top'
+                    ? 'number-box-hasPY'
+                    : '',
+                  curQue.numberBg ? '' : 'number-box-nobg',
+                ]"
+                :style="{
+                  height:
+                    itemO.detail &&
+                    itemO.detail.length > 0 &&
+                    itemO.detail[0].maxFontsize
+                      ? (itemO.detail[0].maxFontsize * 3) / 2 + 'px'
+                      : '32px',
+                  marginTop:
+                    itemO.detail &&
+                    itemO.detail.length > 0 &&
+                    itemO.detail[0].maxFontsize
+                      ? ''
+                      : '0px',
+                  fontSize: itemO.numberfontSize
+                }"
+              >
+                {{itemO.numbertotal}}
+              </div>
+              <div class="stem-maincontent">
+                <div>
+                    <div
+                    :class="[
+                        'sent-main',
+                    ]"
+                    v-for="(sdItem, sdIndex) in itemO.detail"
+                    :key="'sent-option-items' + index + indeO + sdIndex"
+                    >
+                    <div class="sent-que-box">
+                        <div
+                        class="sent-que"
+                        v-for="(sddItem, sddIndex) in sdItem.detail"
+                        :key="
+                            'sent-option-items' +
+                            index +
+                            indeO +
+                            sdIndex +
+                            sddIndex
+                        "
+                        :style="{
+                            paddingLeft:
+                            sddItem.config.wordPadding.indexOf('left') > -1
+                                ? '4px'
+                                : '0px',
+                            paddingRight:
+                            sddItem.config.wordPadding.indexOf('right') > -1
+                                ? '4px'
+                                : '0px',
+                        }"
+                        >
+                        <OneSentenceTemp
+                            :detail="sddItem"
+                            :pyPosition="curQue.pyPosition"
+                            :TaskModel="TaskModel"
+                            :pyColor="curQue.pyColor"
+                            :Bookanswer="curQue.Bookanswer[index][indeO]"
+                            :judgeAnswer="judgeAnswer"
+                            :isInput="
+                            false
+                            "
+                            :fn_check_list="itemO.fn_check_list"
+                            :bgColor="curQue.bgColor"
+                            :pyNumber="itemO.pyNumber && itemO.pyNumber[sdIndex]"
+                            :record_check="sdItem.fn_check_list.record_check"
+                            :hengLeg="sdItem.hengLeg"
+                            :maxFontsize="sdItem.maxFontsize"
+                            :textIndent="sdItem.textindent"
+                        />
+                        <div
+                            class="promax-box-div"
+                            v-if="
+                            sdItem.fn_check_list.record_check.indexOf('promax') >
+                            -1
+                            "
+                        >
+                            <Soundrecord
+                            :type="
+                                sdItem.fn_check_list.record_check
+                                ? typeList[sdItem.fn_check_list.record_check]
+                                : 'normal'
+                            "
+                            class="promax-box"
+                            :TaskModel="TaskModel"
+                            :tmIndex="sdIndex"
+                            :answerRecordList="
+                                curQue.Bookanswer[index][indexs].recordList[sdIndex]
+                            "
+                            :index="index"
+                            :indexs="indexs"
+                            @handleWav="handleWav"
+                            />
+                        </div>
+                        </div>
+                    </div>
+                    </div>
+                </div>
+                <div v-for="(items, indexs) in itemO.options" :key="indexs">
+                    <div
+                    :class="[
+                        'sent-main',
+                        items.fn_check_list.judge_check.indexOf('col') > -1 ||
+                        items.fn_check_list.short_check ||
+                        sdItem.fn_check_list.record_check.indexOf('normal') > -1
+                        ? 'sent-que-flex'
+                        : '',
+                        items.fn_check_list.radio_check.indexOf('row') > -1 ||
+                        items.fn_check_list.checkbox_check.indexOf('row') > -1
+                        ? 'sent-main-bottom'
+                        : '',
+                    ]"
+                    v-for="(sdItem, sdIndex) in items.detail"
+                    :key="'sent-option-items' + index + indexs + sdIndex"
+                    >
+                    <div class="sent-que-box">
+                        <div
+                        class="sent-que"
+                        v-for="(sddItem, sddIndex) in sdItem.detail"
+                        :key="
+                            'sent-option-items' +
+                            index +
+                            indexs +
+                            sdIndex +
+                            sddIndex
+                        "
+                        :style="{
+                            paddingLeft:
+                            sddItem.config.wordPadding.indexOf('left') > -1
+                                ? '4px'
+                                : '0px',
+                            paddingRight:
+                            sddItem.config.wordPadding.indexOf('right') > -1
+                                ? '4px'
+                                : '0px',
+                        }"
+                        >
+                        <OneSentenceTemp
+                            :detail="sddItem"
+                            :pyPosition="curQue.pyPosition"
+                            :TaskModel="TaskModel"
+                            :pyColor="curQue.pyColor"
+                            :Bookanswer="curQue.Bookanswer[index][indeO][indexs]"
+                            :judgeAnswer="judgeAnswer"
+                            :correctAnswer="items.correct.complateArr"
+                            :isInput="
+                            items.fn_check_list.sent_check ==
+                                'sentence_complete_input_chs' ||
+                            items.fn_check_list.sent_check ==
+                                'sentence_long_input_chs'
+                            "
+                            :fn_check_list="items.fn_check_list"
+                            :bgColor="curQue.bgColor"
+                            :pyNumber="items.pyNumber && items.pyNumber[sdIndex]"
+                            :record_check="sdItem.fn_check_list.record_check"
+                            :hengLeg="sdItem.hengLeg"
+                            :maxFontsize="sdItem.maxFontsize"
+                            :textIndent="sdItem.textindent"
+                        />
+                        <div
+                            class="promax-box-div"
+                            v-if="
+                            sdItem.fn_check_list.record_check.indexOf('promax') >
+                            -1
+                            "
+                        >
+                            <Soundrecord
+                            :type="
+                                sdItem.fn_check_list.record_check
+                                ? typeList[sdItem.fn_check_list.record_check]
+                                : 'normal'
+                            "
+                            class="promax-box"
+                            :TaskModel="TaskModel"
+                            :tmIndex="sdIndex"
+                            :answerRecordList="
+                                curQue.Bookanswer[index][indeO][indexs].recordList[sdIndex]
+                            "
+                            :index="index"
+                            :indexs="indexs"
+                            @handleWav="handleWav"
+                            />
+                        </div>
+                        </div>
+                    </div>
+                    <div
+                        ref="answerpart"
+                        v-if="
+                        items.fn_check_list.judge_check ||
+                        sdItem.fn_check_list.record_check ||
+                        items.fn_check_list.short_check ||
+                        items.fn_check_list.radio_check.indexOf('col') > -1 ||
+                        items.fn_check_list.checkbox_check.indexOf('col') > -1
+                        "
+                        :class="[
+                        'answer-part',
+                        items.pyNumber && items.pyNumber[1] > 0
+                            ? 'answer-part-hasPY'
+                            : '',
+                        items.fn_check_list.judge_check ||
+                        sdItem.fn_check_list.record_check
+                            ? 'answer-part-138'
+                            : '',
+                        ]"
+                    >
+                        <div
+                        :class="[
+                            'short-part',
+                            items.pyNumber && items.pyNumber[0] > 0
+                            ? 'short-part-hasPY'
+                            : '',
+                            items.fn_check_list.is_short_auto
+                            ? 'short-part-flex'
+                            : '',
+                        ]"
+                        v-if="sdIndex == 0 && items.fn_check_list.short_check"
+                        >
+                        <ShortInputTemp
+                            :doubleInput="items.correct.doubleInput"
+                            :Bookanswer="curQue.Bookanswer[index][indeO][indexs]"
+                            :TaskModel="TaskModel"
+                            :is_short_auto="items.fn_check_list.is_short_auto"
+                            :judgeAnswer="judgeAnswer"
+                        />
+                        </div>
+                        <div
+                        :class="[
+                            'judge-part',
+                            items.fn_check_list.judge_check.indexOf('row') > -1
+                            ? 'answer-part-padding-5'
+                            : '',
+                        ]"
+                        v-if="sdIndex == 0 && items.fn_check_list.judge_check"
+                        >
+                        <JudgeTemp
+                            :isRecord="items.fn_check_list.record_check"
+                            :Bookanswer="curQue.Bookanswer[index][indeO][indexs]"
+                            :judge_isNo="items.judge_isNo"
+                            :TaskModel="TaskModel"
+                            :Isexample="items.Isexample"
+                            :judgeCorrectAnswer="items.correct.judge"
+                            :judgeAnswer="judgeAnswer"
+                        />
+                        </div>
+                        <div
+                        :class="[
+                            'short-part',
+                            items.pyNumber && items.pyNumber[0] > 0
+                            ? 'short-part-hasPY'
+                            : '',
+                        ]"
+                        v-if="
+                            sdIndex == 0 &&
+                            items.fn_check_list.checkbox_check.indexOf('col') > -1
+                        "
+                        >
+                        <OptionTemp
+                            :option="items.checkbox_option"
+                            :row="
+                            items.fn_check_list.checkbox_check.indexOf('row') > -1
+                            "
+                            :Bookanswer="curQue.Bookanswer[index][indeO][indexs]"
+                            :TaskModel="TaskModel"
+                            type="checkbox"
+                            :curQue="curQue"
+                            :items="items"
+                            :judgeAnswer="judgeAnswer"
+                        />
+                        </div>
+                        <div
+                        :class="[
+                            'short-part',
+                            items.pyNumber && items.pyNumber[0] > 0
+                            ? 'short-part-hasPY'
+                            : '',
+                        ]"
+                        v-if="
+                            sdIndex == 0 &&
+                            items.fn_check_list.radio_check.indexOf('col') > -1
+                        "
+                        >
+                        <OptionTemp
+                            :option="items.radio_option"
+                            :row="
+                            items.fn_check_list.radio_check.indexOf('row') > -1
+                            "
+                            :Bookanswer="curQue.Bookanswer[index][indeO][indexs]"
+                            :correctAnswer="items.correct"
+                            :TaskModel="TaskModel"
+                            type="radio"
+                            :curQue="curQue"
+                            :items="items"
+                            :judgeAnswer="judgeAnswer"
+                        />
+                        </div>
+                        <div
+                        class="judge-part record-part"
+                        v-if="
+                            sdItem.fn_check_list.record_check &&
+                            items.fn_check_list.sent_check !=
+                            'sentence_long_input_chs'
+                        "
+                        >
+                        <Soundrecord
+                            :type="
+                            sdItem.fn_check_list.record_check
+                                ? typeList[sdItem.fn_check_list.record_check]
+                                : 'normal'
+                            "
+                            :class="[
+                            'record_' +
+                                typeList[sdItem.fn_check_list.record_check],
+                            'record-common',
+                            items.fn_check_list.short_check
+                                ? 'record-common-40'
+                                : '',
+                            ]"
+                            :TaskModel="TaskModel"
+                            :tmIndex="sdIndex"
+                            :answerRecordList="
+                            curQue.Bookanswer[index][indeO][indexs].recordList[sdIndex]
+                            "
+                            :index="index"
+                            :indexs="indexs"
+                            @handleWav="handleWav"
+                        />
+                        </div>
+                    </div>
+                    </div>
+                    <div
+                    class="select-que"
+                    v-if="items.fn_check_list.checkbox_check.indexOf('row') > -1"
+                    :style="{paddingLeft:items.detail&&items.detail[0]&&items.detail[0].textindent&&items.detail[0].detail&&items.detail[0].detail[0]?items.detail[0].detail[0].config.fontSize.replace('px','')*2+'px':'0'}"
+                    >
+                    <OptionTemp
+                        :option="items.checkbox_option"
+                        :row="
+                        items.fn_check_list.checkbox_check.indexOf('row') > -1
+                        "
+                        :Bookanswer="curQue.Bookanswer[index][indeO][indexs]"
+                        :correctAnswer="items.correct"
+                        :TaskModel="TaskModel"
+                        type="checkbox"
+                        :curQue="curQue"
+                        :items="items"
+                        :judgeAnswer="judgeAnswer"
+                    />
+                    </div>
+                    <div
+                    class="select-que"
+                    v-if="items.fn_check_list.radio_check.indexOf('row') > -1"
+                    :style="{paddingLeft:items.detail&&items.detail[0]&&items.detail[0].textindent&&items.detail[0].detail&&items.detail[0].detail[0]?items.detail[0].detail[0].config.fontSize.replace('px','')*2+'px':'0'}"
+                    >
+                    <OptionTemp
+                        :option="items.radio_option"
+                        :row="items.fn_check_list.radio_check.indexOf('row') > -1"
+                        :Bookanswer="curQue.Bookanswer[index][indeO][indexs]"
+                        :correctAnswer="items.correct"
+                        :TaskModel="TaskModel"
+                        type="radio"
+                        :curQue="curQue"
+                        :items="items"
+                        :judgeAnswer="judgeAnswer"
+                    />
+                    </div>
+                </div>
+              </div>
+              
+            </div>
+
+          </div>
+        </div>
+      </div>
+      <div
+        class="fill-img-box"
+        v-if="
+          curQue.img_list &&
+          curQue.img_list.length > 0 &&
+          (curQue.img_site == 'rightCenter' || curQue.img_site == 'bottom')
+        "
+      >
+        <el-image
+          :src="curQue.img_list[0].id"
+          v-if="curQue.img_list[0].id"
+          fit="scale-down"
+          class="fill-img"
+          :style="{ width: curQue.img_size + 'px' }"
+        ></el-image>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import AudioLine from "./AudioLine.vue";
+import AudioItem from "./components/AudioItem.vue";
+import OneSentenceTemp from "./components/OneSentenceTemp.vue";
+import JudgeTemp from "./components/JudgeTemp.vue";
+import ShortInputTemp from "./components/ShortInputTemp.vue";
+import NumberStyle from "./components/NumberStyle.vue";
+import EditDiv from "./EditDiv.vue";
+import Soundrecord from "./Soundrecord.vue"; // 录音模板
+import OptionTemp from "./components/OptionTemp.vue";
+export default {
+  components: {
+    AudioLine,
+    AudioItem,
+    NumberStyle,
+    EditDiv,
+    Soundrecord,
+    OneSentenceTemp,
+    JudgeTemp,
+    ShortInputTemp,
+    OptionTemp,
+  },
+  props: ["curQue", "themeColor", "TaskModel", "judgeAnswer"],
+  data() {
+    return {
+      curTime: 0,
+      stopAudioS: false,
+      ed: null,
+      userAnswer: {
+        Isexample: false,
+        completeInput: [],
+        shortInput: "",
+        longInput: "",
+        doubleInput: [],
+        judge: {},
+        checkbox: {},
+        radio: {},
+        recordList: {},
+        completeImage: [],
+      },
+      chsFhList: [",", "。", "”", ":", "》", "《", "?", "!", ";"],
+      itemsWidth: 0,
+      typeList: {
+        sentence_record_mini_chs: "mini",
+        sentence_record_normal_chs: "normal",
+        sentence_record_pro_chs: "pro",
+        sentence_record_promax_chs: "promax",
+      },
+      answerpart: [],
+      userErrorList: [],
+      userBookanswer: [],
+      userErrorNumberTotal: 0,
+    };
+  },
+  computed: {
+    isShowTemp() {
+      let _this = this;
+      let bool = false;
+      if (_this.curQue && _this.curQue.Bookanswer) {
+        if (_this.judgeAnswer == "standardAnswer") {
+          if (_this.userErrorNumberTotal > 0) {
+            bool = true;
+          } else {
+            bool = false;
+          }
+        } else {
+          bool = true;
+        }
+      }
+      return bool;
+    },
+    bgClassName() {
+      let className = "";
+      if (this.curQue.bgColor == "grey") {
+        className = "sent-stem-grey";
+      } else if (this.curQue.bgColor == "white") {
+        className = "sent-stem-white";
+      }
+      return className;
+    },
+  },
+  watch: {},
+  //方法集合
+  methods: {
+    getCurTime(curTime) {
+      this.curTime = curTime * 1000;
+    },
+    //点击播放某个句子
+    handleChangeTime(time, edTime) {
+      let _this = this;
+      _this.curTime = time;
+      _this.stopAudioS = true;
+      _this.$refs.fillInforAudioLine.onTimeupdateTime(time / 1000, true);
+      _this.ed = edTime;
+    },
+    handleListenRead(playFlag) {
+      this.stopAudioS = playFlag;
+    },
+    handleWav(list, tmIndex, index, indexs) {
+      tmIndex = tmIndex ? tmIndex : 0;
+      let resList = list.filter((item, index) => index == list.length - 1);
+      this.$set(
+        this.curQue.Bookanswer[index][indexs].recordList,
+        tmIndex,
+        resList
+      );
+    },
+    handleData() {
+      let Bookanswer = [];
+      let itemLeg = 0;
+      this.totalHasPy = false;
+      let option = JSON.parse(JSON.stringify(this.curQue.option));
+      let completeImage = [];
+      option.forEach((itemO, indexO) => {
+        Bookanswer.push([]);
+        completeImage = [];
+        itemLeg = itemO.length > itemLeg ? itemO.length : itemLeg;
+        itemO.forEach((item,index)=>{
+            Bookanswer[indexO].push([])
+            // this.$set(Bookanswer[indexO][index],'optionsAnswer',[])
+            if (this.curQue.wordTime && this.curQue.wordTime.length > 0) {
+                let time = this.curQue.wordTime[item.index];
+                if (time) {
+                    item.ed = time.ed;
+                    item.bg = time.bg;
+                }
+            }
+            if(item.detail){
+                item.detail.forEach(itemI=>{
+                    itemI.detail.forEach(itemss=>{
+                        if(itemss.wordsList&&itemss.wordsList.length>0){
+                            itemss.wordsList.forEach(itemsss=>{
+                                this.mergeWordSymbol(itemsss);
+                            })
+                        }
+                    })
+                    
+                })
+            }
+            
+            item.options.forEach((items, indexs) => {
+                let userAnswer = JSON.parse(JSON.stringify(this.userAnswer));
+                let correct = JSON.parse(JSON.stringify(items.correct));
+                let complateArr = correct.completeInput.split("\n");
+                complateArr.forEach((itemI, indexI) => {
+                    if (itemI == "??" || itemI == "??") {
+                    complateArr[indexI] = "";
+                    }
+                });
+                items.correct.complateArr = complateArr;
+                this.curQue.option[indexO][index].options[indexs].correct.complateArr = complateArr;
+                if (items.Isexample) {
+                    userAnswer.Isexample = true;
+                    userAnswer.recordList = {};
+                }
+                Bookanswer[indexO][index].push(userAnswer);
+                let hengIndex = 0;
+                items.pyNumber = [];
+
+                items.detail.forEach((sdItem, sdIndex) => {
+                    let isHasPY = 0;
+                    let maxFontsize = 0;
+                    sdItem.detail.forEach((sddItem) => {
+                    if (sddItem.wordsList.length > 0) {
+                        sddItem.wordsList.forEach((sItem, sIndex) => {
+                        let reg = /_{2,}/g;
+                        if (reg.test(sItem.chs)) {
+                            sItem.index = sIndex;
+                            sItem.isHeng = true;
+                            sItem.hengIndex = hengIndex;
+                            hengIndex++;
+                        }
+                        //补全句子
+                        if (
+                            !this.curQue.Bookanswer &&
+                            (items.fn_check_list.sent_check ==
+                            "sentence_complete_input_chs" ||
+                            items.fn_check_list.sent_check ==
+                                "sentence_long_input_chs")
+                        ) {
+                            let reg = /_{2,}/g;
+                            if (reg.test(sItem.chs)) {
+                            let bool = false;
+                            if (sddItem.hasOwnProperty("input_Isexample")) {
+                                bool = sddItem.input_Isexample;
+                            } else {
+                                bool = items.Isexample;
+                            }
+                            let obj = null;
+                            if (!sddItem.input_tian) {
+                                obj = {
+                                answer:
+                                    bool && complateArr[sItem.hengIndex]
+                                    ? complateArr[sItem.hengIndex]
+                                    : "",
+                                userAnswerJudge:
+                                    bool || !complateArr[sItem.hengIndex]
+                                    ? ""
+                                    : "[JUDGE##F##JUDGE]",
+                                input_Isexample: bool ? true : false,
+                                };
+                                Bookanswer[indexO][index][indexs].completeInput.push(
+                                JSON.parse(JSON.stringify(obj))
+                                );
+                            } else {
+                                if (sddItem.hengLeg == "-1") {
+                                completeImage.push(obj);
+                                } else {
+                                for (let i = 0; i < Number(sddItem.hengLeg); i++) {
+                                    completeImage.push(obj);
+                                }
+                                }
+                                Bookanswer[indexO][index][indexs].completeInput.push(
+                                JSON.parse(JSON.stringify(completeImage))
+                                );
+                            }
+                            }
+                        }
+
+                        this.mergeWordSymbol(sItem);
+                        if (sItem.pinyin) {
+                            isHasPY++;
+                            this.totalHasPy = true;
+                        }
+                        let fontSize = JSON.parse(JSON.stringify(sItem.fontSize));
+                        fontSize = Number(fontSize.replace("px", ""));
+                        maxFontsize = fontSize > maxFontsize ? fontSize : maxFontsize;
+                        });
+                    } else {
+                        if (sddItem.sentence) {
+                        let fontSize = JSON.parse(
+                            JSON.stringify(sddItem.config.fontSize)
+                        );
+                        fontSize = Number(fontSize.replace("px", ""));
+                        maxFontsize = fontSize > maxFontsize ? fontSize : maxFontsize;
+                        }
+                    }
+                    });
+                    sdItem.maxFontsize = maxFontsize;
+                    items.pyNumber.push(isHasPY);
+                });
+                if (!this.curQue.Bookanswer) {
+                    //双输入/短输入
+                    if (
+                    items.fn_check_list.short_check == "sentence_double_input_chs"
+                    ) {
+                    items.correct.doubleInput.forEach((cItem) => {
+                        let obj = {
+                        correct:
+                            items.Isexample && cItem.correct ? cItem.correct : "",
+                        userAnswerJudge:
+                            !items.Isexample && (cItem.correct || cItem.correct == "0")
+                            ? "[JUDGE##F##JUDGE]"
+                            : "",
+                        };
+                        Bookanswer[indexO][index][indexs].doubleInput.push(
+                        JSON.parse(JSON.stringify(obj))
+                        );
+                    });
+                    }
+                    //判断
+                    if (items.fn_check_list.judge_check) {
+                    let judge_obj = {
+                        correct:
+                        items.Isexample && items.correct.judge
+                            ? items.correct.judge
+                            : "",
+                        userAnswerJudge:
+                        !items.Isexample && items.correct.judge
+                            ? "[JUDGE##F##JUDGE]"
+                            : "",
+                    };
+                    Bookanswer[indexO][index][indexs].judge = JSON.parse(
+                        JSON.stringify(judge_obj)
+                    );
+                    }
+
+                    //单选
+                    if (items.fn_check_list.radio_check) {
+                    let radio_obj = {
+                        correct:
+                        items.Isexample &&
+                        (items.correct.radio || items.correct.radio === 0)
+                            ? items.correct.radio
+                            : "",
+                        userAnswerJudge:
+                        !items.Isexample &&
+                        (items.correct.radio || items.correct.radio === 0)
+                            ? "[JUDGE##F##JUDGE]"
+                            : "",
+                    };
+                    Bookanswer[indexO][index][indexs].radio = JSON.parse(
+                        JSON.stringify(radio_obj)
+                    );
+                    }
+
+                    //多选
+                    if (items.fn_check_list.checkbox_check) {
+                    let checkbox_obj = {
+                        correct:
+                        items.Isexample &&
+                        items.correct.checkbox &&
+                        items.correct.checkbox.length > 0
+                            ? items.correct.checkbox
+                            : [],
+                        userAnswerJudge:
+                        !items.Isexample &&
+                        items.correct.checkbox &&
+                        items.correct.checkbox.length > 0
+                            ? "[JUDGE##F##JUDGE]"
+                            : "",
+                    };
+                    Bookanswer[indexO][index][indexs].checkbox = JSON.parse(
+                        JSON.stringify(checkbox_obj)
+                    );
+                    }
+                }
+
+                items.radio_option.forEach((rItem, rIndex) => {
+                    rItem.detail.pyNumber = [];
+                    rItem.detail.wordsList.forEach((rpwItem) => {
+                    let isHasPY2 = 0;
+                    rpwItem.forEach((rpsItem) => {
+                        this.mergeWordSymbol(rpsItem);
+                        if (rpsItem.pinyin) {
+                        isHasPY2++;
+                        }
+                    });
+                    rItem.detail.pyNumber.push(isHasPY2);
+                    });
+                });
+                items.checkbox_option.forEach((cItem, rIndex) => {
+                    cItem.detail.pyNumber = [];
+                    cItem.detail.wordsList.forEach((cpwItem) => {
+                    let isHasPY3 = 0;
+                    cpwItem.forEach((cpsItem) => {
+                        this.mergeWordSymbol(cpsItem);
+                        if (cpsItem.pinyin) {
+                        isHasPY3++;
+                        }
+                    });
+                    cItem.detail.pyNumber.push(isHasPY3);
+                    });
+                });
+            });
+            
+        })
+      })
+      if (!this.curQue.Bookanswer) {
+        this.$nextTick(() => {
+          this.$set(
+            this.curQue,
+            "Bookanswer",
+            JSON.parse(JSON.stringify(Bookanswer))
+        );
+        });
+      } else {
+        let BookanswerStr = JSON.stringify(this.curQue.Bookanswer);
+        let errReg = /\[JUDGE##F##JUDGE\]/g;
+        if (errReg.test(BookanswerStr)) {
+          let errorArr = BookanswerStr.match(/\[JUDGE##F##JUDGE\]/g);
+          this.userErrorNumberTotal = errorArr.length;
+        }
+      }
+
+      this.$set(this.curQue, "option", option);
+      let contentWidth = 780;
+      if (this.curQue.img_list && this.curQue.img_list.length > 0) {
+        contentWidth = 780 - this.curQue.img_size;
+      }
+      if(itemLeg==1){
+        this.itemsWidth = 780
+      }else{
+        this.itemsWidth = Math.floor(contentWidth / itemLeg) - 16;
+      }
+      
+
+      // 把答错的挑出来
+      if (this.judgeAnswer == "standardAnswer") {
+        this.userErrorList = [];
+        this.userBookanswer = [];
+        this.curQue.option.forEach((itemO, indexO) => {
+          itemO.forEach((item,index)=>{
+            item.options.forEach((items, indexs) => {
+                let flag = false;
+                // 多输入或者短输入
+                items.correct.doubleInput.forEach((itemI, indexI) => {
+                if (
+                    itemI.correct &&
+                    itemI.correct !=
+                    this.curQue.Bookanswer[indexO][index][indexs].doubleInput[indexI]
+                        .correct
+                ) {
+                    flag = true;
+                }
+                });
+
+                // 句子填空
+                items.correct.complateArr.forEach((itemI, indexI) => {
+                if (
+                    itemI &&
+                    itemI !=
+                    this.curQue.Bookanswer[indexO][index][indexs].completeInput[indexI]
+                        .answer
+                ) {
+                    flag = true;
+                }
+                });
+
+                // 句子判断
+                if (
+                items.correct.judge &&
+                items.correct.judge !=
+                    this.curQue.Bookanswer[indexO][index][indexs].judge.correct
+                ) {
+                flag = true;
+                }
+
+                // 句子单选
+                if (
+                items.correct.radio !== "" &&
+                items.correct.radio !==
+                    this.curQue.Bookanswer[indexO][index][indexs].radio.correct
+                ) {
+                flag = true;
+                }
+                // 句子多选
+                if (
+                items.correct &&
+                items.correct.checkbox.length > 0 &&
+                items.correct.checkbox.sort().toString() !=
+                    this.curQue.Bookanswer[indexO][index][indexs].checkbox.correct
+                    .sort()
+                    .toString()
+                ) {
+                flag = true;
+                }
+                if (flag) {
+                this.userErrorList.push(items);
+                this.userBookanswer.push(this.curQue.Bookanswer[indexO][index][indexs]);
+                }
+            });
+            
+          })
+          
+        
+        });
+        console.log(this.userErrorList)
+      }
+    },
+    //词和标点合一起
+    mergeWordSymbol(sItem) {
+      if (this.chsFhList.indexOf(sItem.chs) > -1) {
+        sItem.isShow = false;
+      } else {
+        sItem.isShow = true;
+      }
+    },
+  },
+  //生命周期 - 创建完成(可以访问当前this实例)
+  created() {},
+  //生命周期 - 挂载完成(可以访问DOM元素)
+  mounted() {
+    let _this = this;
+    _this.handleData();
+    _this.$nextTick(() => {
+      if (_this.$refs.answerpart) {
+        _this.$refs.answerpart.forEach((item) => {
+          _this.answerpart.push(item.offsetWidth);
+        });
+      }
+    });
+  },
+  beforeCreate() {}, //生命周期 - 创建之前
+  beforeMount() {}, //生命周期 - 挂载之前
+  beforeUpdate() {}, //生命周期 - 更新之前
+  updated() {}, //生命周期 - 更新之后
+  beforeDestroy() {}, //生命周期 - 销毁之前
+  destroyed() {}, //生命周期 - 销毁完成
+  activated() {}, //如果页面有keep-alive缓存功能,这个函数会触发
+};
+</script>
+<style lang='scss' scoped>
+//@import url(); 引入公共css类
+
+.sentence-control {
+  width: 100%;
+  box-sizing: border-box;
+  border-radius: 8px;
+  overflow: hidden;
+  .out-audioLine-box {
+    background: #f7f7f7;
+    border-bottom: 1px solid rgba(0, 0, 0, 0.1);
+  }
+  .container-box {
+    width: 100%;
+    &-flex {
+      display: flex;
+      align-items: stretch;
+    }
+    &-auto {
+      .fill-img-box {
+        width: 100%;
+      }
+    }
+    .fill-img-box {
+      display: flex;
+      justify-content: center;
+      align-items: center;
+    }
+  }
+  .container {
+    flex: 1;
+    padding: 0;
+    box-sizing: border-box;
+
+    &.ul-flex {
+      display: flex;
+      flex-wrap: wrap;
+      justify-content: space-between;
+      .sent-option-24 {
+        padding: 0 24px;
+      }
+    }
+    .sent-option {
+      &.li-flex {
+        display: flex;
+        margin: 0px;
+        .sent-option-items {
+          &-0 {
+            margin: 8px 0; // 单列左右间距去掉
+          }
+          &-8 {
+            margin-left: 8px;
+            margin-right: 8px;
+          }
+        }
+      }
+      &-row {
+        flex: 1;
+      }
+      &-standardAnswer {
+        flex-flow: wrap;
+      }
+    }
+    .sent-option-items {
+      width: 100%;
+      display: flex;
+      flex-direction: row;
+      justify-content: flex-start;
+      box-sizing: border-box;
+      background: #ffffff;
+      border: 1px solid rgba(0, 0, 0, 0.1);
+      border-radius: 8px;
+      margin: 8px 0;
+      padding: 8px 12px;
+      .number-box {
+        width: 16px;
+        height: 30px;
+        border-radius: 100%;
+        display: flex;
+        justify-content: center;
+        align-items: center;
+        margin-right: 8px;
+        margin-top: 3px;
+        color: #000;
+        // &-hasmp3 {
+        //   margin-top: 8px;
+        // }
+        &-hasPY {
+          margin-top: 21px;
+        }
+        &-nobg {
+          width: 24px;
+          justify-content: flex-end;
+        }
+      }
+      > .number-box {
+        margin-right: 16px;
+      }
+      .horn-24 {
+        height: 30px;
+        display: flex;
+        justify-content: center;
+        align-items: center;
+        margin-right: 8px;
+        margin-top: 3px;
+        &.horn-hasPY {
+          margin-top: 28px;
+        }
+      }
+    }
+    .sent-stem {
+      flex: 1;
+      display: flex;
+      background: #fff;
+      .stem-maincontent{
+        flex: 1;
+      }
+      .stem-content {
+        flex: 1;
+      }
+      .number-box {
+        // &-hasPY {
+        //   margin-top: 19px;
+        // }
+      }
+      .sent-main {
+        position: relative;
+        width: 100%;
+        display: flex;
+        flex-wrap: wrap;
+
+        box-sizing: border-box;
+        &-138 {
+          padding-right: 138px;
+        }
+        &-bottom {
+          margin-bottom: 9px;
+        }
+      }
+      .sent-que-box {
+        display: flex;
+        flex-wrap: wrap;
+        padding: 4px 0;
+      }
+      .sent-que {
+        &-flex {
+          flex: 1;
+          display: flex;
+          justify-content: space-between;
+          align-items: stretch;
+        }
+        .sentence-part {
+          flex: 1;
+        }
+      }
+      .answer-part {
+        flex: 1;
+        display: flex;
+        justify-content: flex-end;
+        align-items: center;
+        // padding-left: 16px;
+        // &-hasPY {
+        //   padding-top: 9px;
+        // }
+        // &.answer-part-138 {
+        //   position: absolute;
+        //   right: 0px;
+        //   top: 1px;
+        // }
+        > div {
+          margin-left: 8px;
+        }
+        .judge-part {
+          &-padding-5 {
+            padding: 5px 0 16px;
+          }
+        }
+        .record-part {
+          padding: 0;
+        }
+        .short-part {
+          display: flex;
+          align-items: center;
+          margin-left: 0;
+          &-flex {
+            flex: 1;
+          }
+          // padding-top: 16px;
+          // &-hasPY {
+          //   padding-top: 24px;
+          // }
+        }
+      }
+    }
+  }
+  .record-common {
+    background: #ffffff;
+    border: 1px solid rgba(0, 0, 0, 0.1);
+    box-sizing: border-box;
+    border-radius: 8px;
+    padding: 0 12px;
+    margin: 0 auto;
+    &-40 {
+      height: 40px;
+    }
+  }
+  // .record_mini {
+  //   width: 68px;
+  // }
+  // .record_normal {
+  //   width: 126px;
+  // }
+  .promax-box-div {
+    width: 100%;
+    background: #ffffff;
+    border: 1px solid rgba(0, 0, 0, 0.1);
+    box-sizing: border-box;
+    border-radius: 0px 0px 8px 8px;
+    .promax-box {
+      width: 320px;
+      height: 40px;
+      border-radius: 20px;
+      padding: 0 16px;
+    }
+  }
+  &.hasmp3 {
+    .sent-option {
+      padding: 0px 16px;
+    }
+    &.sentence-control {
+      background: #f7f7f7;
+      border: 1px solid rgba(0, 0, 0, 0.1);
+    }
+  }
+}
+</style>
+<style lang="scss">
+.sentence-control{
+    .answer-part{
+        .OptionComponents{
+            ul{
+                justify-content: flex-end;
+            }
+        }
+    }
+}
+</style>

+ 10 - 0
src/components/Adult/preview/components/OneSentenceTemp.vue

@@ -5,6 +5,14 @@
     v-if="detail"
   >
     <template v-if="detail.wordsList && detail.wordsList.length > 0">
+      <div :class="[
+          'NPC-words',
+          pyNumber > 0 ? 'NPC-words-hasPY' : '',
+        ]" :style="{width:detail.wordsList[0].fontSize,height:detail.wordsList[0].fontSize.replace('px', '')*1.5+'px'}" v-if="textIndent"></div>
+      <div :class="[
+          'NPC-words',
+          pyNumber > 0 ? 'NPC-words-hasPY' : '',
+        ]" :style="{width:detail.wordsList[0].fontSize,height:detail.wordsList[0].fontSize.replace('px', '')*1.5+'px'}" v-if="textIndent"></div>
       <div
         :class="[
           'NPC-words',
@@ -523,6 +531,7 @@
           {
             'white-space': 'pre-wrap',
             'line-height': (maxFontsize * 3) / 2 + 'px',
+            'text-indent': textIndent ? '2em' : '0'
           },
           sentenceStyle,
         ]"
@@ -552,6 +561,7 @@ export default {
     "maxFontsize",
     "judgeAnswer",
     "correctAnswer",
+    "textIndent"
   ],
   filters: {
     handlePY(pinyin) {

+ 13 - 9
src/views/adultInput.vue

@@ -800,6 +800,17 @@
                       </template>
                       <template v-else> </template>
                     </template>
+                    <template v-if="topicIitem.type == 'sentence_single_chs'">
+                      <template v-if="topicIitem.is_edit">
+                        <SentenceMulModule
+                          :curQue="topicIitem.data"
+                          :type="topicIitem.type"
+                          :changeCurQue="changeCurQue"
+                          v-if="refresh"
+                        />
+                      </template>
+                      <template v-else> </template>
+                    </template>
                   </div>
                   <div
                     v-if="topicIitem.data && topicIitem.is_edit"
@@ -998,6 +1009,7 @@ import Record from "@/components/Adult/inputModules/Record.vue";
 import Hanzi from "@/components/Adult/inputModules/Hanzi.vue";
 import Picture from "@/components/Adult/inputModules/Picture.vue";
 import SentenceModule from "@/components/Adult/inputModules/SentenceModule.vue";
+import SentenceMulModule from "@/components/Adult/inputModules/SentenceMulModule.vue"
 import Singleview from "@/components/Adult/preview/Single.vue";
 import Judgeview from "@/components/Adult/preview/Judge.vue";
 import Textdesview from "@/components/Adult/preview/Textdes.vue";
@@ -1090,6 +1102,7 @@ export default {
     UploadPdf,
     SentenceModule,
     OptionsList,
+    SentenceMulModule,
   },
   data() {
     return {
@@ -1228,7 +1241,6 @@ export default {
   },
   // 生命周期 - 挂载完成(可以访问DOM元素)
   mounted() {
-    console.log(this.question_list);
     if (localStorage.getItem("Bookanswer")) {
       this.TaskModel = "ANSWER";
     }
@@ -1558,7 +1570,6 @@ export default {
       let data = {
         id,
       };
-      console.log(this.question_list);
       getContent(MethodName, data)
         .then((res) => {
           this.themeColor = res.book_theme_color ? res.book_theme_color : "";
@@ -1678,7 +1689,6 @@ export default {
       ) {
         this.$message.warning("每列只能添加一个模板");
       } else {
-        console.log("不存在");
         this.$set(
           this.question_list.cur_fn_data[this.TopicIndex].table_list[
             this.RowIndex
@@ -1693,11 +1703,9 @@ export default {
           "data",
           undefined
         );
-        console.log(this.question_list);
       }
     },
     changeCurQue(data_stru) {
-      console.log(this.RowIndex, this.LineIndex);
       this.$set(
         this.question_list.cur_fn_data[this.TopicIndex].table_list[
           this.RowIndex
@@ -1705,11 +1713,9 @@ export default {
         "data",
         JSON.parse(JSON.stringify(data_stru))
       );
-      console.log(this.question_list);
     },
     // 小模板
     selectSmallModule(item, child, itemIndex, childIndex) {
-      console.log("选择了小模版");
       if (
         Object.prototype.toString.call(this.TopicIndex).indexOf("Number") ==
           -1 &&
@@ -1788,7 +1794,6 @@ export default {
                   return sItem;
                 });
 
-                console.log(item);
                 new_word_list = new_word_list.concat(item);
               });
             }
@@ -1873,7 +1878,6 @@ export default {
       }
 
       let question_list_str = JSON.stringify(this.question_list);
-      console.log(this.question_list);
       localStorage.setItem("question_list", question_list_str);
       let result = this.saveNewwordAndSentences();
       const MethodName = "book-courseware_manager-SaveCoursewareContent";