|
@@ -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>
|