zhongshujie
2025-06-03 0154fdda05d3c59914d18afbc4c1f046781b1c34
Merge branch 'master' of http://182.92.203.7:2001/r/testbookLayout
3个文件已修改
2574 ■■■■ 已修改文件
.env.product 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/App.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/dialogExaminations/index.vue 2564 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.env.product
@@ -2,10 +2,10 @@
VUE_APP_API_URL = "https://jsek.bnuic.com"
# VUE_APP_API_URL = "https://www.tepcb.com"
VUE_APP_RESOURCE_CTX = 'https://jsek.bnuic.com/books/resource/'
VUE_APP_PUBLIC_PATH = 'https://jsek.bnuic.com/books/book/toddlerGameImplementation'
VUE_APP_PUBLIC_PATH = 'https://jsek.bnuic.com/books/book/meetingPlanners'
# VUE_APP_RESOURCE_CTX = 'http://182.92.203.7:3007/books/resource/'
# VUE_APP_PUBLIC_PATH = 'http://182.92.203.7:3007/books/book/policiesAndRegulations'
# VUE_APP_PUBLIC_PATH = 'http://182.92.203.7:3007/books/book/meetingPlanners'
# VUE_APP_RESOURCE_CTX = 'https://www.tepcb.com/books/resource/'
# VUE_APP_PUBLIC_PATH = 'https://www.tepcb.com/books/book/aviationPassengerTransport6th'
# VUE_APP_PUBLIC_PATH = 'https://www.tepcb.com/books/book/policiesAndRegulations'
VUE_APP_BOOK_LIST = "childHealth/lifeCare/sportsAndHealth/embedded/english/artAndDance/artAndDrama/mathBook/botany/civilAviation/civilServices/meetingPlanners/aviationBasicSkills/aviationEtiquette/aviationSafety/toddlerGameImplementation/childcareInstitutionsManagement/preschoolGameGuidance/kindergartenLanguageActivity/preschoolEvaluation/preschoolBasicKnowledge/practicalCareChildrenManual/OralAndBroadcasting/aurturingAndEducationAged0to3/policiesAndRegulations/kindergartenActivitiesDesignGuidance/toddlerSportsSafetyProtection/artInitiationForAges0to3/childIllnessPreventionCare/behaviorObserveAndGuid/cognitiveLanDevEduAges0to3/aviationPassengerTransport6th/hotelEnglishTrainingBrochure2nd/hydraulicTransmission/MMVRTCMP"
VUE_APP_BOOK_ID = 'toddlerGameImplementation'
VUE_APP_BOOK_ID = 'meetingPlanners'
src/App.vue
@@ -233,7 +233,7 @@
        process.env.VUE_APP_RESOURCE_CTX +
          (process.env.VUE_APP_ENV == "product"
            ? process.env.VUE_APP_BOOK_ID
            : "kindergartenActivitiesDesignGuidance")
            : "meetingPlanners")
      );
      // 测试试读30页
src/components/dialogExaminations/index.vue
@@ -1,319 +1,543 @@
<template>
    <el-dialog :visible.sync="localDialogVisible" @open="hadleOpenDialog" width="60vw" top="2vh" append-to-body
        lock-scroll :show-close="false" class="custom-dialog">
        <div slot="title" class="header_title">
            <span>{{ questionTitle }}</span>
            <span @click="closeDialog"> x </span>
        </div>
        <div class="pdfModal" v-if="localDialogVisible">
            <!-- 原有的内容 -->
            <div class="pdfBox-component">
                <div class="examination" v-loading="loading">
                    <div v-for="(item, nindex) in cardData" :key="nindex + 'item'" class="border-box"
                        v-show="item.infoList.length">
                        <p class="catalogName" :style="{ color: primaryColor }">
                            <span class="catalogName-box">
                                <span v-if="nindex == 0">一、</span>
                                <span v-if="nindex == 1">二、</span>
                                <span v-if="nindex == 2">三、</span>
                                <span v-if="nindex == 3">四、</span>
                                <span v-if="nindex == 4">五、</span>
                                <span v-html="item.catalogName"></span>
                            </span>
                            <img :src="item.isCollect ? isHeart : heart" alt="" class="collect-png"
                                @click="setCollect(nindex, index)" v-if="!hideCollect && item.type == 'material'" />
                        </p>
                        <el-image v-if="item.catalogImage" :src="item.catalogImage"
                            :preview-src-list="[item.catalogImage]" class="catalogImage"></el-image>
                        <ul>
                            <li v-for="(value, index) in item.infoList" :key="index + 'value'"
                                :id="'listItem-' + value.id">
                                <!-- 标题 -->
                                <div class="questionTitle">
                                    <div class="titleContent">
                                        <span class="questionNum" :style="{
                                            marginTop:
                                                value.questionType == 'completion' ||
                                                    value.questionType == 'mathField'
                                                    ? '12px'
                                                    : '0',
                                        }">{{ index + 1 }}.
                                        </span>
                                        <!-- 听力进度条 -->
                                        <!-- <answerAudioPlayer :audioUrl="value.src" v-show="item.name == '听力题'" /> -->
                                        <!-- 仅文字 -->
                                        <p class="titleText text-fl" v-if="
                                            value.stemStyle == 'Txt' &&
                                            value.questionType != 'completion' &&
                                            value.questionType != 'dropdown' &&
                                            value.questionType != 'mathField'
                                        " :id="value.id" v-html="value.stem.stemTxt"></p>
                                        <!-- 仅图片 -->
                                        <el-image class="stemImg" v-else-if="value.stemStyle == 'Image'"
                                            :src="getPublicImage(value.stem.stemImage, 150)"
                                            :preview-src-list="[getPublicImage(value.stem.stemImage)]"></el-image>
                                        <!-- 文字加图片 -->
                                        <p class="stemTxtAndImage titleText"
                                            v-else-if="value.stemStyle == 'TxtAndImage'">
                                            <span v-html="value.stem.stemTxt"> </span>
                                            <el-image :src="getPublicImage(value.stem.stemImage, 150)"
                                                :preview-src-list="[getPublicImage(value.stem.stemImage)]"
                                                style="margin-left: 10px"></el-image>
                                        </p>
                                        <!-- 填空题题干 -->
                                        <p class="titleText" v-if="
                                            value.questionType == 'completion' ||
                                            value.questionType == 'mathField'
                                        ">
                                            <span v-for="(itemText, indexText) in value.stem"
                                                :key="indexText + 'questionType'">
                                                <span v-if="typeof itemText == 'string'" v-html="itemText"
                                                    class="input-txt"></span>
                                                <input v-if="
                                                    typeof itemText != 'string' &&
                                                    value.questionType == 'completion'
                                                " type="text" class="input"
                                                    v-model.trim="value.userAnswer[itemText.num]"
                                                    :disabled="value.isComplete"
                                                    :style="{ backgroundColor: inputBc }" />
                                                <math-field v-if="
                                                    typeof itemText != 'string' &&
                                                    value.questionType == 'mathField'
                                                " class="mathField" :menuItems="[]"
                                                    @input="onChangeInput($event, nindex, index, itemText.num)">
                                                    {{ value.userAnswer[itemText.num] }}
                                                </math-field>
                                            </span>
                                        </p>
                                        <!-- 富文本 -->
                                        <p class="titleText titleTextArea" v-else-if="value.stemStyle == 'RichText'"
                                            v-html="value.stem.stemTxt" v-cloak></p>
                                        <!-- 下拉选择题 -->
                                        <p class="titleText" v-if="value.questionType == 'dropdown'">
                                            <span v-for="(itemText, indexText) in value.stem"
                                                :key="indexText + 'questionType'">
                                                <span v-if="typeof itemText == 'string'" v-html="itemText"
                                                    class="input-txt"></span>
                                                <select v-else v-model="value.userAnswer" :disabled="value.isComplete">
                                                    <option v-for="(citem, cindex) in value.option"
                                                        :key="cindex + 'dropdown'" :label="citem" :value="citem">
                                                    </option>
                                                </select>
                                            </span>
                                        </p>
                                    </div>
                                    <img :src="value.isCollect ? isHeart : heart" alt="" class="collect-png"
                                        @click="setCollect(nindex, index)"
                                        v-if="!hideCollect && item.type != 'material'" />
                                    <!-- 收藏 -->
                                </div>
                                <div class="questionContent">
                                    <!-- 单选 -->
                                    <el-radio-group :disabled="value.isComplete" class="option" v-if="
                                        value.questionType == 'singleChoice' ||
                                        value.questionType == 'judge'
                                    " v-model="value.userAnswer">
                                        <el-radio v-for="(content, contentIndex) in value.option"
                                            :key="contentIndex + 'contentIndex'" :label="content.value" :class="value.optionStyle == 'Image' ||
                                                value.optionStyle == 'TxtAndImage' ||
                                                value.optionStyle == 'RichText'
                                                ? 'optionImg'
                                                : 'optionTxt'
                                                ">
                                            <p class="optionContent" v-if="value.optionStyle == 'Txt'">
                                                {{ content.value }}、{{ content.txt }}
                                            </p>
                                            <p class="optionContent" v-else-if="value.optionStyle == 'Image'">
                                                {{ content.value }}、<el-image :src="getPublicImage(content.img, 115)"
                                                    v-show="content.img"
                                                    :preview-src-list="[getPublicImage(content.img)]"
                                                    v-if="sourceType == 'bits'"></el-image>
                                                <img :src="content.img" alt="" v-else class="radio-img" />
                                            </p>
                                            <p class="optionContent" v-else-if="value.optionStyle == 'TxtAndImage'">
                                                <span> {{ content.value }}、</span><span>{{ content.txt }}</span>
                                                <el-image :src="getPublicImage(content.img, 115)" v-show="content.img"
                                                    :preview-src-list="[getPublicImage(content.img)]"></el-image>
                                            </p>
                                            <p class="optionContent titleTextArea"
                                                v-else-if="value.optionStyle == 'RichText'"
                                                v-html="`<span>${content.value}</span>` + '、' + content.txt"
                                                id="mathjax">
                                            </p>
                                        </el-radio>
                                    </el-radio-group>
                                    <!-- 多选 -->
                                    <el-checkbox-group :disabled="value.isComplete" v-model="value.userAnswer"
                                        class="option" v-else-if="value.questionType == 'multipleChoice'">
                                        <el-checkbox v-for="(content, contentCindex) in value.option"
                                            :key="contentCindex + 'contentCindex'" :label="content.value"
                                            :name="content.text" :class="value.optionStyle == 'Image' ||
                                                value.optionStyle == 'TxtAndImage' ||
                                                value.optionStyle == 'RichText'
                                                ? 'optionImg'
                                                : 'optionTxt'
                                                ">
                                            <p class="optionContent" v-if="value.optionStyle == 'Txt'">
                                                {{ content.value }}、{{ content.txt }}
                                            </p>
                                            <p class="optionContent" v-else-if="value.optionStyle == 'Image'">
                                                {{ content.value }}、<el-image :src="getPublicImage(content.img, 115)"
                                                    :preview-src-list="[getPublicImage(content.img)]"
                                                    v-show="content.img"></el-image>
                                            </p>
                                            <p class="optionContent" v-else-if="value.optionStyle == 'TxtAndImage'">
                                                <span> {{ content.value }}、</span><span>{{ content.txt }}</span>
                                                <el-image :src="getPublicImage(content.img, 115)"
                                                    :preview-src-list="[getPublicImage(content.img)]"
                                                    v-show="content.img"></el-image>
                                            </p>
                                            <p class="optionContent titleTextArea"
                                                v-else-if="value.optionStyle == 'RichText'"
                                                v-html="content.value + '、' + content.txt"></p>
                                        </el-checkbox>
                                    </el-checkbox-group>
                                    <!-- 简答 翻译 -->
                                    <TEditorVue v-else-if="value.questionType == 'formula'" :value="value.userAnswer"
                                        :disabled="value.isComplete" @getContent="(val) => {
                                            value.userAnswer = val;
                                        }
                                            " />
                                    <el-input :disabled="value.isComplete" style="width: 94%; margin: 0 auto"
                                        v-else-if="value.questionType == 'shortAnswer'" type="textarea" :rows="6"
                                        placeholder="请输入内容" v-model="value.userAnswer" />
                                    <div v-if="
                                        type != 'option' &&
                                        type != 'mock' &&
                                        (value.questionType == 'shortAnswer' ||
                                            value.questionType == 'multipleChoice' ||
                                            value.questionType == 'completion' ||
                                            value.questionType == 'mathField')
                                    ">
                                        <el-button @click="checkPares(value)" style="margin-top: 10px">查看解析</el-button>
                                    </div>
                                    <!-- 提交后解析 -->
                                    <div class="analysis" v-if="value.isComplete">
                                        <el-collapse v-model="value.isUnfold" accordion v-if="
                                            value.questionType != 'shortAnswer' &&
                                            value.questionType != 'formula'
                                        ">
                                            <el-collapse-item :name="value.id" class="objective">
                                                <template #title>
                                                    <div class="headerBox">
                                                        <div class="headerConent">
                                                            <p class="correct" :title="arrayToString(value.answer)">
                                                                <span>正确答案:</span>
                                                                <span v-html="arrayToString(value.answer)"
                                                                    class="correctBox"></span>
                                                            </p>
                                                            <p :class="value.isRight
                                                                ? 'correct textOverFlow'
                                                                : 'error textOverFlow'
                                                                " :title="arrayToString(value.userAnswer)"
                                                                style="margin-left: 20px">
                                                                <span>您的答案:</span>
                                                                <span class="errorBox"
                                                                    v-if="isHaveAnswer(value.userAnswer)">{{
                                                                        arrayToString(value.userAnswer) }}</span>
                                                            </p>
                                                        </div>
                                                        <p class="difficulty" v-if="value.difficulty">
                                                            <span style="color: #333">难度等级:</span>
                                                            <el-rate v-model="value.difficulty" :max="3" size="large"
                                                                disabled disabled-void-color="#949494" />
                                                        </p>
                                                        <!-- 正确错误图标 -->
                                                        <span class="mr-10">
                                                            <svg v-if="value.isRight" t="1716986419862" class="icon"
                                                                viewBox="0 0 1820 1024" version="1.1"
                                                                xmlns="http://www.w3.org/2000/svg" p-id="18767"
                                                                xmlns:xlink="http://www.w3.org/1999/xlink" width="40"
                                                                height="20">
                                                                <path
                                                                    d="M1439.374222 216.007111s-169.472 56.490667-367.179852 282.443852C888.604444 703.222519 846.241185 787.949037 775.632593 900.93037 768.568889 893.866667 662.651259 689.095111 380.207407 540.814222l148.290371-141.226666s134.162963 91.790222 225.953185 261.262222c0 0 233.016889-360.116148 684.923259-536.642371v91.799704z m0 0"
                                                                    fill="#1AFA29" p-id="18768"></path>
                                                            </svg>
                                                            <svg v-if="value.isRight == false" t="1716987085767"
                                                                class="icon" viewBox="0 0 1024 1024" version="1.1"
                                                                xmlns="http://www.w3.org/2000/svg" p-id="25745"
                                                                xmlns:xlink="http://www.w3.org/1999/xlink" width="20"
                                                                height="20">
                                                                <path
                                                                    d="M116.579135 38.64349531L38.703935 103.74399781c138.82075969 102.96027281 268.24660875 221.31426938 381.68489719 339.96758156C246.29374906 618.40145938 109.95003031 790.19602344 38.10817906 859.25288281l148.35573469 123.62658094c52.61360812-108.17625656 167.23381594-272.86683656 320.56281844-445.01635875 153.50744156 173.21056312 268.36844625 338.43166313 321.38977781 447.49243969 0 0 144.5682225-152.96636906 157.47435281-129.29729625-55.80632344-62.49011156-191.37776625-244.16501625-374.17990593-430.27403438 104.68422375-107.1132975 222.15274031-213.10127719 347.60304468-306.24740437L925.17746562 56.03842156C782.85412063 126.51895625 647.69328031 231.09093594 526.07845437 342.39755 403.34886594 226.82662719 264.46095125 116.16373719 116.579135 38.64349531L116.579135 38.64349531zM116.579135 38.64349531"
                                                                    fill="#d81e06" p-id="25746"></path>
                                                            </svg>
                                                        </span>
                                                        <div class="headerConent sitgBox">
                                                            <p v-if="!value.isUnfold">
                                                                <span class="analysisColor">展开解析</span><el-image />
                                                            </p>
                                                            <p v-else>
                                                                <span class="analysisColor">收起解析</span><el-image />
                                                            </p>
                                                        </div>
                                                    </div>
                                                </template>
                                                <!-- 解析 -->
                                                <div v-if="value.analysisCon" v-html="value.analysisCon"></div>
                                                <div v-else>暂无数据</div>
                                            </el-collapse-item>
                                        </el-collapse>
                                        <!-- 主观题 -->
                                        <el-collapse v-else v-model="value.isUnfold" accordion>
                                            <el-collapse-item :name="value.id" class="objective">
                                                <template #title>
                                                    <div class="headerBox">
                                                        <p v-if="!value.isUnfold">
                                                            <span class="analysisColor">展开答案与解析</span>
                                                        </p>
                                                        <p v-else>
                                                            <span class="analysisColor">收起答案与解析</span>
                                                        </p>
                                                    </div>
                                                </template>
                                                <div class="referBox">
                                                    <span>参考答案:</span>
                                                    <span v-html="value.answer" class="ti-2" :class="[
                                                        'subjectiveBox',
                                                        value.isUnfold ? 'showText' : 'hideText',
                                                    ]"></span>
                                                </div>
                                                <!-- 解析 -->
                                                <div class="referBox" v-if="value.analysisCon">
                                                    <span>解析:</span>
                                                    <p v-html="value.analysisCon" :class="[
                                                        'subjectiveBox',
                                                        'ti-2',
                                                        value.isUnfold ? 'yincang' : '',
                                                    ].join(' ')
                                                        "></p>
                                                </div>
                                            </el-collapse-item>
                                        </el-collapse>
                                    </div>
                                </div>
                            </li>
                        </ul>
                    </div>
                    <div class="bottom-btn" v-if="!loading">
                        <el-button class="examinations-btn-box" @click="saveAnswer">保存</el-button>
                        <el-button @click="(e) => {
                            handleQuestion();
                            saveAnswer(e);
                        }
                            " class="examinations-btn-box" :style="{ borderColor: primaryColor }">提交</el-button>
                        <el-button @click="redo" class="examinations-btn-box">重做</el-button>
                        <el-button @click="(e) => {
                            openAnswers();
                            saveAnswer(e);
                        }
                            " class="examinations-btn-box" :style="{ borderColor: primaryColor }">查看答案</el-button>
                    </div>
  <el-dialog
    :visible.sync="localDialogVisible"
    @open="hadleOpenDialog"
    width="60vw"
    top="2vh"
    append-to-body
    lock-scroll
    :show-close="false"
    class="custom-dialog"
  >
    <div slot="title" class="header_title">
      <span>{{ questionTitle }}</span>
      <span @click="closeDialog"> x </span>
    </div>
    <div class="pdfModal" v-if="localDialogVisible">
      <!-- 原有的内容 -->
      <div class="pdfBox-component">
        <div class="examination" v-loading="loading">
          <div
            v-for="(item, nindex) in cardData"
            :key="nindex + 'item'"
            class="border-box"
            v-show="item.infoList.length"
          >
            <p class="catalogName" :style="{ color: primaryColor }">
              <span class="catalogName-box">
                <span v-if="nindex == 0">一、</span>
                <span v-if="nindex == 1">二、</span>
                <span v-if="nindex == 2">三、</span>
                <span v-if="nindex == 3">四、</span>
                <span v-if="nindex == 4">五、</span>
                <span v-html="item.catalogName"></span>
              </span>
              <img
                :src="item.isCollect ? isHeart : heart"
                alt=""
                class="collect-png"
                @click="setCollect(nindex, index)"
                v-if="!hideCollect && item.type == 'material'"
              />
            </p>
            <el-image
              v-if="item.catalogImage"
              :src="item.catalogImage"
              :preview-src-list="[item.catalogImage]"
              class="catalogImage"
            ></el-image>
            <ul>
              <li
                v-for="(value, index) in item.infoList"
                :key="index + 'value'"
                :id="'listItem-' + value.id"
              >
                <!-- 标题 -->
                <div class="questionTitle">
                  <div class="titleContent">
                    <span
                      class="questionNum"
                      :style="{
                        marginTop:
                          value.questionType == 'completion' ||
                          value.questionType == 'mathField'
                            ? '12px'
                            : '0',
                      }"
                      >{{ index + 1 }}.
                    </span>
                    <!-- 听力进度条 -->
                    <!-- <answerAudioPlayer :audioUrl="value.src" v-show="item.name == '听力题'" /> -->
                    <!-- 仅文字 -->
                    <p
                      class="titleText text-fl"
                      v-if="
                        value.stemStyle == 'Txt' &&
                        value.questionType != 'completion' &&
                        value.questionType != 'dropdown' &&
                        value.questionType != 'mathField'
                      "
                      :id="value.id"
                      v-html="value.stem.stemTxt"
                    ></p>
                    <!-- 仅图片 -->
                    <el-image
                      class="stemImg"
                      v-else-if="value.stemStyle == 'Image'"
                      :src="getPublicImage(value.stem.stemImage, 150)"
                      :preview-src-list="[getPublicImage(value.stem.stemImage)]"
                    ></el-image>
                    <!-- 文字加图片 -->
                    <p
                      class="stemTxtAndImage titleText"
                      v-else-if="value.stemStyle == 'TxtAndImage'"
                    >
                      <span v-html="value.stem.stemTxt"> </span>
                      <el-image
                        :src="getPublicImage(value.stem.stemImage, 150)"
                        :preview-src-list="[
                          getPublicImage(value.stem.stemImage),
                        ]"
                        style="margin-left: 10px"
                      ></el-image>
                    </p>
                    <!-- 填空题题干 -->
                    <p
                      class="titleText"
                      v-if="
                        value.questionType == 'completion' ||
                        value.questionType == 'mathField'
                      "
                    >
                      <span
                        v-for="(itemText, indexText) in value.stem"
                        :key="indexText + 'questionType'"
                      >
                        <span
                          v-if="typeof itemText == 'string'"
                          v-html="itemText"
                          class="input-txt"
                        ></span>
                        <input
                          v-if="
                            typeof itemText != 'string' &&
                            value.questionType == 'completion'
                          "
                          type="text"
                          class="input"
                          v-model.trim="value.userAnswer[itemText.num]"
                          :disabled="value.isComplete"
                          :style="{ backgroundColor: inputBc }"
                        />
                        <math-field
                          v-if="
                            typeof itemText != 'string' &&
                            value.questionType == 'mathField'
                          "
                          class="mathField"
                          :menuItems="[]"
                          @input="
                            onChangeInput($event, nindex, index, itemText.num)
                          "
                        >
                          {{ value.userAnswer[itemText.num] }}
                        </math-field>
                      </span>
                    </p>
                    <!-- 富文本 -->
                    <p
                      class="titleText titleTextArea"
                      v-else-if="value.stemStyle == 'RichText'"
                      v-html="value.stem.stemTxt"
                      v-cloak
                    ></p>
                    <!-- 下拉选择题 -->
                    <p
                      class="titleText"
                      v-if="value.questionType == 'dropdown'"
                    >
                      <span
                        v-for="(itemText, indexText) in value.stem"
                        :key="indexText + 'questionType'"
                      >
                        <span
                          v-if="typeof itemText == 'string'"
                          v-html="itemText"
                          class="input-txt"
                        ></span>
                        <select
                          v-else
                          v-model="value.userAnswer"
                          :disabled="value.isComplete"
                        >
                          <option
                            v-for="(citem, cindex) in value.option"
                            :key="cindex + 'dropdown'"
                            :label="citem"
                            :value="citem"
                          ></option>
                        </select>
                      </span>
                    </p>
                  </div>
                  <img
                    :src="value.isCollect ? isHeart : heart"
                    alt=""
                    class="collect-png"
                    @click="setCollect(nindex, index)"
                    v-if="!hideCollect && item.type != 'material'"
                  />
                  <!-- 收藏 -->
                </div>
            </div>
                <div class="questionContent">
                  <!-- 单选 -->
                  <el-radio-group
                    :disabled="value.isComplete"
                    class="option"
                    v-if="
                      value.questionType == 'singleChoice' ||
                      value.questionType == 'judge'
                    "
                    v-model="value.userAnswer"
                  >
                    <el-radio
                      v-for="(content, contentIndex) in value.option"
                      :key="contentIndex + 'contentIndex'"
                      :label="content.value"
                      :class="
                        value.optionStyle == 'Image' ||
                        value.optionStyle == 'TxtAndImage' ||
                        value.optionStyle == 'RichText'
                          ? 'optionImg'
                          : 'optionTxt'
                      "
                    >
                      <p
                        class="optionContent"
                        v-if="value.optionStyle == 'Txt'"
                      >
                        {{ content.value }}、{{ content.txt }}
                      </p>
                      <p
                        class="optionContent"
                        v-else-if="value.optionStyle == 'Image'"
                      >
                        {{ content.value }}、<el-image
                          :src="getPublicImage(content.img, 115)"
                          v-show="content.img"
                          :preview-src-list="[getPublicImage(content.img)]"
                          v-if="sourceType == 'bits'"
                        ></el-image>
                        <img
                          :src="content.img"
                          alt=""
                          v-else
                          class="radio-img"
                        />
                      </p>
                      <p
                        class="optionContent"
                        v-else-if="value.optionStyle == 'TxtAndImage'"
                      >
                        <span> {{ content.value }}、</span
                        ><span>{{ content.txt }}</span>
                        <el-image
                          :src="getPublicImage(content.img, 115)"
                          v-show="content.img"
                          :preview-src-list="[getPublicImage(content.img)]"
                        ></el-image>
                      </p>
                      <p
                        class="optionContent titleTextArea"
                        v-else-if="value.optionStyle == 'RichText'"
                        v-html="
                          `<span>${content.value}</span>` + '、' + content.txt
                        "
                        id="mathjax"
                      ></p>
                    </el-radio>
                  </el-radio-group>
                  <!-- 多选 -->
                  <el-checkbox-group
                    :disabled="value.isComplete"
                    v-model="value.userAnswer"
                    class="option"
                    v-else-if="value.questionType == 'multipleChoice'"
                  >
                    <el-checkbox
                      v-for="(content, contentCindex) in value.option"
                      :key="contentCindex + 'contentCindex'"
                      :label="content.value"
                      :name="content.text"
                      :class="
                        value.optionStyle == 'Image' ||
                        value.optionStyle == 'TxtAndImage' ||
                        value.optionStyle == 'RichText'
                          ? 'optionImg'
                          : 'optionTxt'
                      "
                    >
                      <p
                        class="optionContent"
                        v-if="value.optionStyle == 'Txt'"
                      >
                        {{ content.value }}、{{ content.txt }}
                      </p>
                      <p
                        class="optionContent"
                        v-else-if="value.optionStyle == 'Image'"
                      >
                        {{ content.value }}、<el-image
                          :src="getPublicImage(content.img, 115)"
                          :preview-src-list="[getPublicImage(content.img)]"
                          v-show="content.img"
                        ></el-image>
                      </p>
                      <p
                        class="optionContent"
                        v-else-if="value.optionStyle == 'TxtAndImage'"
                      >
                        <span> {{ content.value }}、</span
                        ><span>{{ content.txt }}</span>
                        <el-image
                          :src="getPublicImage(content.img, 115)"
                          :preview-src-list="[getPublicImage(content.img)]"
                          v-show="content.img"
                        ></el-image>
                      </p>
                      <p
                        class="optionContent titleTextArea"
                        v-else-if="value.optionStyle == 'RichText'"
                        v-html="content.value + '、' + content.txt"
                      ></p>
                    </el-checkbox>
                  </el-checkbox-group>
                  <!-- 简答 翻译 -->
                  <TEditorVue
                    v-else-if="value.questionType == 'formula'"
                    :value="value.userAnswer"
                    :disabled="value.isComplete"
                    @getContent="
                      (val) => {
                        value.userAnswer = val;
                      }
                    "
                  />
                  <el-input
                    :disabled="value.isComplete"
                    style="width: 94%; margin: 0 auto"
                    v-else-if="value.questionType == 'shortAnswer'"
                    type="textarea"
                    :rows="6"
                    placeholder="请输入内容"
                    v-model="value.userAnswer"
                  />
                  <div
                    v-if="
                      type != 'option' &&
                      type != 'mock' &&
                      (value.questionType == 'shortAnswer' ||
                        value.questionType == 'multipleChoice' ||
                        value.questionType == 'completion' ||
                        value.questionType == 'mathField')
                    "
                  >
                    <el-button
                      @click="checkPares(value)"
                      style="margin-top: 10px"
                      >查看解析</el-button
                    >
                  </div>
                  <!-- 提交后解析 -->
                  <div class="analysis" v-if="value.isComplete">
                    <el-collapse
                      v-model="value.isUnfold"
                      accordion
                      v-if="
                        value.questionType != 'shortAnswer' &&
                        value.questionType != 'formula'
                      "
                    >
                      <el-collapse-item :name="value.id" class="objective">
                        <template #title>
                          <div class="headerBox">
                            <div class="headerConent">
                              <p
                                class="correct"
                                :title="arrayToString(value.answer)"
                              >
                                <span>正确答案:</span>
                                <span
                                  v-html="arrayToString(value.answer)"
                                  class="correctBox"
                                ></span>
                              </p>
                              <p
                                :class="
                                  value.isRight
                                    ? 'correct textOverFlow'
                                    : 'error textOverFlow'
                                "
                                :title="arrayToString(value.userAnswer)"
                                style="margin-left: 20px"
                              >
                                <span>您的答案:</span>
                                <span
                                  class="errorBox"
                                  v-if="isHaveAnswer(value.userAnswer)"
                                  >{{ arrayToString(value.userAnswer) }}</span
                                >
                              </p>
                            </div>
                            <p class="difficulty" v-if="value.difficulty">
                              <span style="color: #333">难度等级:</span>
                              <el-rate
                                v-model="value.difficulty"
                                :max="3"
                                size="large"
                                disabled
                                disabled-void-color="#949494"
                              />
                            </p>
                            <!-- 正确错误图标 -->
                            <span class="mr-10">
                              <svg
                                v-if="value.isRight"
                                t="1716986419862"
                                class="icon"
                                viewBox="0 0 1820 1024"
                                version="1.1"
                                xmlns="http://www.w3.org/2000/svg"
                                p-id="18767"
                                xmlns:xlink="http://www.w3.org/1999/xlink"
                                width="40"
                                height="20"
                              >
                                <path
                                  d="M1439.374222 216.007111s-169.472 56.490667-367.179852 282.443852C888.604444 703.222519 846.241185 787.949037 775.632593 900.93037 768.568889 893.866667 662.651259 689.095111 380.207407 540.814222l148.290371-141.226666s134.162963 91.790222 225.953185 261.262222c0 0 233.016889-360.116148 684.923259-536.642371v91.799704z m0 0"
                                  fill="#1AFA29"
                                  p-id="18768"
                                ></path>
                              </svg>
                              <svg
                                v-if="value.isRight == false"
                                t="1716987085767"
                                class="icon"
                                viewBox="0 0 1024 1024"
                                version="1.1"
                                xmlns="http://www.w3.org/2000/svg"
                                p-id="25745"
                                xmlns:xlink="http://www.w3.org/1999/xlink"
                                width="20"
                                height="20"
                              >
                                <path
                                  d="M116.579135 38.64349531L38.703935 103.74399781c138.82075969 102.96027281 268.24660875 221.31426938 381.68489719 339.96758156C246.29374906 618.40145938 109.95003031 790.19602344 38.10817906 859.25288281l148.35573469 123.62658094c52.61360812-108.17625656 167.23381594-272.86683656 320.56281844-445.01635875 153.50744156 173.21056312 268.36844625 338.43166313 321.38977781 447.49243969 0 0 144.5682225-152.96636906 157.47435281-129.29729625-55.80632344-62.49011156-191.37776625-244.16501625-374.17990593-430.27403438 104.68422375-107.1132975 222.15274031-213.10127719 347.60304468-306.24740437L925.17746562 56.03842156C782.85412063 126.51895625 647.69328031 231.09093594 526.07845437 342.39755 403.34886594 226.82662719 264.46095125 116.16373719 116.579135 38.64349531L116.579135 38.64349531zM116.579135 38.64349531"
                                  fill="#d81e06"
                                  p-id="25746"
                                ></path>
                              </svg>
                            </span>
                            <div class="headerConent sitgBox">
                              <p v-if="!value.isUnfold">
                                <span class="analysisColor">展开解析</span
                                ><el-image />
                              </p>
                              <p v-else>
                                <span class="analysisColor">收起解析</span
                                ><el-image />
                              </p>
                            </div>
                          </div>
                        </template>
                        <!-- 解析 -->
                        <div
                          v-if="value.analysisCon"
                          v-html="value.analysisCon"
                        ></div>
                        <div v-else>暂无数据</div>
                      </el-collapse-item>
                    </el-collapse>
                    <!-- 主观题 -->
                    <el-collapse v-else v-model="value.isUnfold" accordion>
                      <el-collapse-item :name="value.id" class="objective">
                        <template #title>
                          <div class="headerBox">
                            <p v-if="!value.isUnfold">
                              <span class="analysisColor">展开答案与解析</span>
                            </p>
                            <p v-else>
                              <span class="analysisColor">收起答案与解析</span>
                            </p>
                          </div>
                        </template>
                        <div class="referBox">
                          <span>参考答案:</span>
                          <span
                            v-html="value.answer"
                            class="ti-2"
                            :class="[
                              'subjectiveBox',
                              value.isUnfold ? 'showText' : 'hideText',
                            ]"
                          ></span>
                        </div>
                        <!-- 解析 -->
                        <div class="referBox" v-if="value.analysisCon">
                          <span>解析:</span>
                          <p
                            v-html="value.analysisCon"
                            :class="
                              [
                                'subjectiveBox',
                                'ti-2',
                                value.isUnfold ? 'yincang' : '',
                              ].join(' ')
                            "
                          ></p>
                        </div>
                      </el-collapse-item>
                    </el-collapse>
                  </div>
                </div>
              </li>
            </ul>
          </div>
          <div class="bottom-btn" v-if="!loading">
            <el-button class="examinations-btn-box" @click="saveAnswer"
              >保存</el-button
            >
            <el-button
              @click="
                (e) => {
                  handleQuestion();
                  saveAnswer(e);
                }
              "
              class="examinations-btn-box"
              :style="{ borderColor: primaryColor }"
              >提交</el-button
            >
            <el-button @click="redo" class="examinations-btn-box"
              >重做</el-button
            >
            <el-button
              @click="
                (e) => {
                  openAnswers();
                  saveAnswer(e);
                }
              "
              class="examinations-btn-box"
              :style="{ borderColor: primaryColor }"
              >查看答案</el-button
            >
          </div>
        </div>
    </el-dialog>
      </div>
    </div>
  </el-dialog>
</template>
<script>
@@ -321,1101 +545,1095 @@
import { Message } from "element-ui";
import TEditorVue from "../teditor/index.vue";
export default {
    name: "examination-option",
    components: { TEditorVue },
    props: {
        isClear: {
            type: Boolean,
            default: false,
  name: "examination-option",
  components: { TEditorVue },
  props: {
    isClear: {
      type: Boolean,
      default: false,
    },
    cardList: {
      type: Array,
    },
    primaryColor: {
      type: String,
      default: "#00aeef",
    },
    chapter: {
      type: Number,
    },
    page: {
      type: Number || String,
    },
    inputBc: {
      type: String,
      default: "#fff",
    },
    hideCollect: {
      type: Boolean,
      default: false,
    },
    sourceType: {
      type: String,
      default: "bits",
    },
    questionTitle: {
      type: String,
    },
  },
  data() {
    return {
      type: "option",
      cardData: [],
      loading: true,
      heart: require("@/assets/images/heart.png"),
      isHeart: require("@/assets/images/heart-check.png"),
      collectList: [],
      localDialogVisible: false,
      allCollect: [
        {
          type: "bits",
          collectList: [],
        },
        cardList: {
            type: Array,
        {
          type: "json",
          collectList: [],
        },
        primaryColor: {
            type: String,
            default: "#00aeef",
      ],
      errorList: [],
      allError: [
        {
          type: "bits",
          errorList: [],
        },
        chapter: {
            type: Number,
        {
          type: "json",
          errorList: [],
        },
        page: {
            type: Number || String,
        },
        inputBc: {
            type: String,
            default: "#fff",
        },
        hideCollect: {
            type: Boolean,
            default: false,
        },
        sourceType: {
            type: String,
            default: "bits",
        },
        questionTitle: {
            type: String,
      ],
    };
  },
  watch: {
    cardList: {
      handler(newVal) {
        this.cardData = this.cardList;
        if (newVal && newVal.length) {
          this.loading = false;
        }
      },
      immediate: true,
      deep: true,
    },
    data() {
        return {
            type: "option",
            cardData: [],
            loading: true,
            heart: require("@/assets/images/heart.png"),
            isHeart: require("@/assets/images/heart-check.png"),
            collectList: [],
            localDialogVisible: false,
            allCollect: [
                {
                    type: "bits",
                    collectList: [],
                },
                {
                    type: "json",
                    collectList: [],
                },
            ],
            errorList: [],
            allError: [
                {
                    type: "bits",
                    errorList: [],
                },
                {
                    type: "json",
                    errorList: [],
                },
            ],
        };
  },
  mounted() {
    this.getCollectIdList();
    this.getErrorList();
  },
  methods: {
    hadleOpenDialog() {},
    // 获取不受保护的图片
    getPublicImage(md5, width, height) {
      if (!md5) return;
      if (md5.includes("http")) {
        if (width) {
          return md5 + `?width=${width}`;
        } else {
          return md5;
        }
      }
      let src = null;
      if (md5) {
        src = process.env.VUE_APP_API_URL + `/file/GetPreViewImage?md5=${md5}`;
      }
      if (width) src += `&width=${width}`;
      if (height) src += `&height=${height}`;
      return src;
    },
    watch: {
        cardList: {
            handler(newVal) {
                this.cardData = this.cardList;
                if (newVal && newVal.length) {
                    this.loading = false;
                }
    // 数组转为字符串方法
    arrayToString(data) {
      // 检查是否为数组
      if (Array.isArray(data)) {
        // 使用 join 方法将数组转换为字符串,默认使用逗号分隔
        return data.join(",").replace(/<[^>]*>/g, "");
      } else {
        // 如果不是数组,直接返回原始值
        return data.replace(/<[^>]*>/g, "");
      }
    },
    isHaveAnswer(data) {
      if (typeof data == "string") {
        data = data
          .replace(/<[^>]*>/g, "")
          .replace(/&nbsp;/g, "")
          .trim();
        if (data.length) {
          return true;
        } else {
          return false;
        }
      } else {
        const answer = data.find((item) => item.length > 0);
        if (answer) {
          return true;
        } else {
          return false;
        }
      }
    },
    redo() {
      for (let index = 0; index < this.cardData.length; index++) {
        const item = this.cardData[index];
        for (let cindex = 0; cindex < item.infoList.length; cindex++) {
          const citem = item.infoList[cindex];
          if (typeof citem.userAnswer == "string") {
            citem.userAnswer = "";
          } else {
            if (citem.questionType == "multipleChoice") {
              citem.userAnswer = [];
            } else {
              // 填空题
              for (let dindex = 0; dindex < citem.userAnswer.length; dindex++) {
                citem.userAnswer[dindex] = "";
              }
            }
          }
          citem.isComplete = false;
        }
      }
    },
    openAnswers() {
      this.$data.loading = true;
      for (let index = 0; index < this.cardData.length; index++) {
        const item = this.cardData[index];
        for (let cindex = 0; cindex < item.infoList.length; cindex++) {
          const citem = item.infoList[cindex];
          citem.isComplete = true;
        }
      }
      this.$data.loading = false;
    },
    watchParsing(data) {
      data.isUnfold = !data.isUnfold;
    },
    // 批改题目  (练习,我的做题,我的收藏模式下)
    handleQuestion() {
      let errorId = [];
      const list = this.cardData;
      for (let index = 0; index < list.length; index++) {
        const item = list[index];
        for (let cindex = 0; cindex < item.infoList.length; cindex++) {
          const citem = item.infoList[cindex];
          citem.isComplete = true;
          // 修改题目状态为完成
          citem.isComplete = true;
          // 批改题目
          if (citem.questionType == "multipleChoice") {
            // 多选题
            if (citem.answer.length == citem.userAnswer.length) {
              const sortedArr1 = citem.answer.slice().sort();
              const sortedArr2 = citem.userAnswer.slice().sort();
              citem.isRight = sortedArr1.every(
                (value, index) => value === sortedArr2[index]
              );
            } else {
              citem.isRight = false;
            }
          } else if (
            citem.questionType == "singleChoice" ||
            citem.questionType == "judge" ||
            citem.questionType == "dropdown"
          ) {
            citem.isRight = citem.answer == citem.userAnswer;
          } else if (citem.questionType == "shortAnswer") {
            // 简答 翻译
            citem.isRight = null;
          } else if (
            citem.questionType == "completion" ||
            citem.questionType == "mathField"
          ) {
            // 填空
            if (typeof citem.answer == "string") {
              citem.isRight = citem.answer == citem.userAnswer[0];
            } else {
              if (citem.answer.length != citem.userAnswer.length) {
                citem.isRight = false;
              } else {
                citem.isRight = citem.answer.every(
                  (value, index) => value === citem.userAnswer[index]
                );
              }
            }
          }
          if (citem.isRight == false) {
            errorId.push(citem.id);
          }
        }
      }
      this.cardData = list;
      let oldErrodId = this.allError.find(
        (item) => item.type == this.sourceType
      ).errorList;
      for (let index = 0; index < errorId.length; index++) {
        const item = errorId[index];
        if (oldErrodId.indexOf(item) == -1) {
          oldErrodId.push(item);
        }
      }
      for (let cindex = 0; cindex < this.allError.length; cindex++) {
        const citem = this.allError[cindex];
        if (citem.type == this.sourceType) citem.errorList = oldErrodId;
      }
      this.MG.identity
        .setUserKey({
          setKeyRequests: [
            {
              domain: "errorData",
              key: this.config.activeBook.bookId,
              value: JSON.stringify(this.allError),
            },
            immediate: true,
            deep: true,
        },
          ],
        })
        .then((res) => {
          console.log("错题已保存", this.allError);
        });
    },
    mounted() {
        this.getCollectIdList();
        this.getErrorList();
    getParentWithClass(element, className) {
      while (element.parentElement) {
        element = element.parentElement;
        if (element.classList.contains(className)) {
          return element;
        }
      }
    },
    methods: {
        hadleOpenDialog() {
        },
        // 获取不受保护的图片
        getPublicImage(md5, width, height) {
            if (!md5) return;
            if (md5.includes("http")) {
                if (width) {
                    return md5 + `?width=${width}`;
                } else {
                    return md5;
                }
            }
            let src = null;
            if (md5) {
                src = process.env.VUE_APP_API_URL + `/file/GetPreViewImage?md5=${md5}`;
            }
            if (width) src += `&width=${width}`;
            if (height) src += `&height=${height}`;
            return src;
        },
        // 数组转为字符串方法
        arrayToString(data) {
            // 检查是否为数组
            if (Array.isArray(data)) {
                // 使用 join 方法将数组转换为字符串,默认使用逗号分隔
                return data.join(",").replace(/<[^>]*>/g, "");
            } else {
                // 如果不是数组,直接返回原始值
                return data.replace(/<[^>]*>/g, "");
            }
        },
        isHaveAnswer(data) {
            if (typeof data == "string") {
                data = data
                    .replace(/<[^>]*>/g, "")
                    .replace(/&nbsp;/g, "")
                    .trim();
                if (data.length) {
                    return true;
                } else {
                    return false;
                }
            } else {
                const answer = data.find((item) => item.length > 0);
                if (answer) {
                    return true;
                } else {
                    return false;
                }
            }
        },
        redo() {
            for (let index = 0; index < this.cardData.length; index++) {
                const item = this.cardData[index];
                for (let cindex = 0; cindex < item.infoList.length; cindex++) {
                    const citem = item.infoList[cindex];
                    if (typeof citem.userAnswer == "string") {
                        citem.userAnswer = "";
                    } else {
                        if (citem.questionType == "multipleChoice") {
                            citem.userAnswer = [];
                        } else {
                            // 填空题
                            for (let dindex = 0; dindex < citem.userAnswer.length; dindex++) {
                                citem.userAnswer[dindex] = "";
                            }
                        }
                    }
                    citem.isComplete = false;
                }
            }
        },
        openAnswers() {
            this.$data.loading = true;
            for (let index = 0; index < this.cardData.length; index++) {
                const item = this.cardData[index];
                for (let cindex = 0; cindex < item.infoList.length; cindex++) {
                    const citem = item.infoList[cindex];
                    citem.isComplete = true;
                }
            }
            this.$data.loading = false;
        },
        watchParsing(data) {
            data.isUnfold = !data.isUnfold;
        },
        // 批改题目  (练习,我的做题,我的收藏模式下)
        handleQuestion() {
            let errorId = [];
            const list = this.cardData;
            for (let index = 0; index < list.length; index++) {
                const item = list[index];
                for (let cindex = 0; cindex < item.infoList.length; cindex++) {
                    const citem = item.infoList[cindex];
                    citem.isComplete = true;
                    // 修改题目状态为完成
                    citem.isComplete = true;
                    // 批改题目
                    if (citem.questionType == "multipleChoice") {
                        // 多选题
                        if (citem.answer.length == citem.userAnswer.length) {
                            const sortedArr1 = citem.answer.slice().sort();
                            const sortedArr2 = citem.userAnswer.slice().sort();
                            citem.isRight = sortedArr1.every(
                                (value, index) => value === sortedArr2[index]
                            );
                        } else {
                            citem.isRight = false;
                        }
                    } else if (
                        citem.questionType == "singleChoice" ||
                        citem.questionType == "judge" ||
                        citem.questionType == "dropdown"
                    ) {
                        citem.isRight = citem.answer == citem.userAnswer;
                    } else if (citem.questionType == "shortAnswer") {
                        // 简答 翻译
                        citem.isRight = null;
                    } else if (
                        citem.questionType == "completion" ||
                        citem.questionType == "mathField"
                    ) {
                        // 填空
                        if (typeof citem.answer == "string") {
                            citem.isRight = citem.answer == citem.userAnswer[0];
                        } else {
                            if (citem.answer.length != citem.userAnswer.length) {
                                citem.isRight = false;
                            } else {
                                citem.isRight = citem.answer.every(
                                    (value, index) => value === citem.userAnswer[index]
                                );
                            }
                        }
                    }
                    if (citem.isRight == false) {
                        errorId.push(citem.id);
                    }
                }
            }
            this.cardData = list;
            let oldErrodId = this.allError.find(
                (item) => item.type == this.sourceType
            ).errorList;
            for (let index = 0; index < errorId.length; index++) {
                const item = errorId[index];
                if (oldErrodId.indexOf(item) == -1) {
                    oldErrodId.push(item);
                }
            }
            for (let cindex = 0; cindex < this.allError.length; cindex++) {
                const citem = this.allError[cindex];
                if (citem.type == this.sourceType) citem.errorList = oldErrodId;
            }
            this.MG.identity
                .setUserKey({
                    setKeyRequests: [
                        {
                            domain: "errorData",
                            key: this.config.activeBook.bookId,
                            value: JSON.stringify(this.allError),
                        },
                    ],
                })
                .then((res) => {
                    console.log("错题已保存", this.allError);
                });
        },
        getParentWithClass(element, className) {
            while (element.parentElement) {
                element = element.parentElement;
                if (element.classList.contains(className)) {
                    return element;
                }
            }
        },
        // 保存按钮
        saveAnswer(e) {
            if (e.srcElement) {
                const pageNum = this.getParentWithClass(
                    e.srcElement,
                    "page-box"
                ).getAttribute("page");
                const oldAnswerData = localStorage.getItem(
                    this.config.activeBook.name + "oldAnswerData"
                );
                let oldData = oldAnswerData ? JSON.parse(oldAnswerData) : {};
                const asnwerList = [];
                for (let index = 0; index < this.cardData.length; index++) {
                    const item = this.cardData[index];
                    for (let cindex = 0; cindex < item.infoList.length; cindex++) {
                        const citem = item.infoList[cindex];
                        asnwerList.push({
                            id: citem.id,
                            userAnswer: citem.userAnswer,
                        });
                    }
                }
                if (oldData[pageNum]) {
                    oldData[pageNum] = oldData[pageNum].filter(
                        (citem) =>
                            asnwerList.findIndex((ditem) => ditem.id == citem.id) == -1
                    );
                    oldData[pageNum].push(...asnwerList);
                } else {
                    oldData[pageNum] = asnwerList;
                }
                localStorage.setItem(
                    this.config.activeBook.name + "oldAnswerData",
                    JSON.stringify(oldData)
                );
                Message.success("保存成功");
            }
    // 保存按钮
    saveAnswer(e) {
      if (e.srcElement) {
        const pageNum = this.getParentWithClass(
          e.srcElement,
          "page-box"
        ).getAttribute("page");
        const oldAnswerData = localStorage.getItem(
          this.config.activeBook.name + "oldAnswerData"
        );
        let oldData = oldAnswerData ? JSON.parse(oldAnswerData) : {};
        const asnwerList = [];
        for (let index = 0; index < this.cardData.length; index++) {
          const item = this.cardData[index];
          for (let cindex = 0; cindex < item.infoList.length; cindex++) {
            const citem = item.infoList[cindex];
            asnwerList.push({
              id: citem.id,
              userAnswer: citem.userAnswer,
            });
          }
        }
        if (oldData[pageNum]) {
          oldData[pageNum] = oldData[pageNum].filter(
            (citem) =>
              asnwerList.findIndex((ditem) => ditem.id == citem.id) == -1
          );
          oldData[pageNum].push(...asnwerList);
        } else {
          oldData[pageNum] = asnwerList;
        }
        localStorage.setItem(
          this.config.activeBook.name + "oldAnswerData",
          JSON.stringify(oldData)
        );
        Message.success("保存成功");
      }
            // if(oldData[this.chapter]) {
            //   oldData[this.chapter][this.page] = asnwerList
            // } else {
            //   oldData[this.chapter] = {}
            //   oldData[this.chapter][this.page] = asnwerList
            // }
            // console.log(oldData);
        },
        handleCollect(infoNum, num) {
            this.cardData[infoNum].infoList[num].isCollect =
                !this.cardData[infoNum].infoList[num].isCollect;
        },
        // 题目收藏按钮,收藏和取消同一接口,取消数组减去该项id
        setCollect(num, number) {
            let item = null;
            if (number) {
                item = this.cardData[num].infoList[number];
            } else {
                item = this.cardData[num];
            }
            item.isCollect = !item.isCollect;
            console.log(111, item);
            if (this.cardData.length == 0) {
                this.collectList.push(item.id);
            } else {
                const isShow = this.collectList.findIndex((citem) => citem == item.id);
                if (isShow == -1) {
                    this.collectList.push(item.id);
                } else {
                    this.collectList = this.collectList.filter(
                        (citem) => citem != item.id
                    );
                }
            }
            const list = this.collectList;
            for (let index = 0; index < this.allCollect.length; index++) {
                const item = this.allCollect[index];
                if (item.type == this.sourceType) item.collectList = this.collectList;
            }
            console.log("点击收藏按钮", this.allCollect);
            this.MG.identity
                .setUserKey({
                    setKeyRequests: [
                        {
                            domain: "collectData",
                            key: this.config.activeBook.bookId,
                            value: JSON.stringify(this.allCollect),
                        },
                    ],
                })
                .then((res) => {
                    console.log("收藏/取消成功");
                });
        },
        // 获取收藏id列表
        getCollectIdList() {
            const token = localStorage.getItem("token");
            if (!token) return false;
            this.MG.identity
                .getUserKey({
                    domain: "collectData",
                    keys: [this.config.activeBook.bookId],
                })
                .then((res) => {
                    try {
                        const collect = JSON.parse(res[0].value);
                        console.log("全部收藏id", collect);
                        if (collect.length) {
                            this.collectList = collect.find(
                                (citem) => citem.type == this.sourceType
                            ).collectList;
                            this.allCollect[0].collectList = collect.find(
                                (citem) => citem.type == "bits"
                            ).collectList;
                            this.allCollect[1].collectList = collect.find(
                                (citem) => citem.type == "json"
                            ).collectList;
                        }
                    } catch (error) {
                        console.log("暂无数据");
                    }
                })
                .catch((res) => {
                    console.log("答题器请求题目收藏id报错");
                });
        },
        // 获取错题id列表
        getErrorList() {
            const token = localStorage.getItem("token");
            if (!token) return false;
            this.MG.identity
                .getUserKey({
                    domain: "errorData",
                    keys: [this.config.activeBook.bookId],
                })
                .then((res) => {
                    try {
                        const error = JSON.parse(res[0].value);
                        if (error.length) {
                            this.errorList = error.find(
                                (citem) => citem.type == this.sourceType
                            ).errorList;
                            this.allError[0].errorList = error.find(
                                (citem) => citem.type == "bits"
                            ).errorList;
                            this.allError[1].errorList = error.find(
                                (citem) => citem.type == "json"
                            ).errorList;
                        }
                    } catch (error) { }
                })
                .catch(() => { });
        },
        onChangeInput(e, index, cindex, num) {
            this.cardData[index].infoList[cindex].userAnswer[num] = e.target.value;
        },
        closeDialog() {
            this.localDialogVisible = false
        },
        openDialogQuestion() {
            this.localDialogVisible = true
        },
      // if(oldData[this.chapter]) {
      //   oldData[this.chapter][this.page] = asnwerList
      // } else {
      //   oldData[this.chapter] = {}
      //   oldData[this.chapter][this.page] = asnwerList
      // }
      // console.log(oldData);
    },
    handleCollect(infoNum, num) {
      this.cardData[infoNum].infoList[num].isCollect =
        !this.cardData[infoNum].infoList[num].isCollect;
    },
    // 题目收藏按钮,收藏和取消同一接口,取消数组减去该项id
    setCollect(num, number) {
      let item = null;
      if (number >=0) {
        item = this.cardData[num].infoList[number];
      } else {
        item = this.cardData[num];
      }
      item.isCollect = !item.isCollect;
      console.log(111, item);
      if (this.cardData.length == 0) {
        this.collectList.push(item.id);
      } else {
        const isShow = this.collectList.findIndex((citem) => citem == item.id);
        if (isShow == -1) {
          this.collectList.push(item.id);
        } else {
          this.collectList = this.collectList.filter(
            (citem) => citem != item.id
          );
        }
      }
      const list = this.collectList;
      for (let index = 0; index < this.allCollect.length; index++) {
        const item = this.allCollect[index];
        if (item.type == this.sourceType) item.collectList = this.collectList;
      }
      console.log("点击收藏按钮", this.allCollect);
      this.MG.identity
        .setUserKey({
          setKeyRequests: [
            {
              domain: "collectData",
              key: this.config.activeBook.bookId,
              value: JSON.stringify(this.allCollect),
            },
          ],
        })
        .then((res) => {
          console.log("收藏/取消成功");
        });
    },
    // 获取收藏id列表
    getCollectIdList() {
      console.log(this.cardList,"cardList")
      const token = localStorage.getItem("token");
      if (!token) return false;
      this.MG.identity
        .getUserKey({
          domain: "collectData",
          keys: [this.config.activeBook.bookId],
        })
        .then((res) => {
          try {
            const collect = JSON.parse(res[0].value);
            console.log("全部收藏id", collect);
            if (collect.length) {
              this.collectList = collect.find(
                (citem) => citem.type == this.sourceType
              ).collectList;
              this.allCollect[0].collectList = collect.find(
                (citem) => citem.type == "bits"
              ).collectList;
              this.allCollect[1].collectList = collect.find(
                (citem) => citem.type == "json"
              ).collectList;
            }
          } catch (error) {
            console.log("暂无数据");
          }
        })
        .catch((res) => {
          console.log("答题器请求题目收藏id报错");
        });
    },
    // 获取错题id列表
    getErrorList() {
      const token = localStorage.getItem("token");
      if (!token) return false;
      this.MG.identity
        .getUserKey({
          domain: "errorData",
          keys: [this.config.activeBook.bookId],
        })
        .then((res) => {
          try {
            const error = JSON.parse(res[0].value);
            if (error.length) {
              this.errorList = error.find(
                (citem) => citem.type == this.sourceType
              ).errorList;
              this.allError[0].errorList = error.find(
                (citem) => citem.type == "bits"
              ).errorList;
              this.allError[1].errorList = error.find(
                (citem) => citem.type == "json"
              ).errorList;
            }
          } catch (error) {}
        })
        .catch(() => {});
    },
    onChangeInput(e, index, cindex, num) {
      this.cardData[index].infoList[cindex].userAnswer[num] = e.target.value;
    },
    closeDialog() {
      this.localDialogVisible = false;
    },
    openDialogQuestion() {
      this.localDialogVisible = true;
    },
  },
};
</script>
<style lang="less" scoped>
.titleText img {
    max-width: 80%;
    min-width: 220px;
  max-width: 80%;
  min-width: 220px;
}
.custom-dialog {
    height: 90vh;
    overflow: scroll;
  height: 90vh;
  overflow: scroll;
}
/deep/.el-loading-mask {
    background: transparent !important;
  background: transparent !important;
}
.catalogName {
    display: flex;
    text-indent: 1em !important;
    font-size: 16px;
  display: flex;
  text-indent: 1em !important;
  font-size: 16px;
    .catalogName-box {
        display: inline-block;
        width: 94%;
    }
  .catalogName-box {
    display: inline-block;
    width: 94%;
  }
}
.catalogImage {
    width: 50%;
  width: 50%;
}
.examination {
    padding: 10px 0 50px 0;
    ul {
        list-style: none;
    }
  padding: 10px 0 50px 0;
  ul {
    list-style: none;
  }
    p {
        margin: 0;
    }
  p {
    margin: 0;
  }
    math {}
  math {
  }
}
.examinations-btn-box {
    height: 30px;
    width: 78px;
    padding: 4px 10px;
  height: 30px;
  width: 78px;
  padding: 4px 10px;
}
.border-box {
    padding-top: 20px;
    // border: 2px solid #e9e9e9;
  padding-top: 20px;
  // border: 2px solid #e9e9e9;
}
.ti-2 {
    text-indent: 2em !important;
  text-indent: 2em !important;
}
.questionContent {
    text-indent: 0em !important;
    margin-left: 20px;
  text-indent: 0em !important;
  margin-left: 20px;
    /deep/ .el-textarea__inner:focus {
        border-color: #15c0f2;
    }
  /deep/ .el-textarea__inner:focus {
    border-color: #15c0f2;
  }
}
.input {
    /deep/ .el-input__inner {
        height: 26px;
    }
  /deep/ .el-input__inner {
    height: 26px;
  }
}
p {
    margin-top: 0em;
    text-indent: 0em !important;
    line-height: 1.5em;
    font-size: 16px;
  margin-top: 0em;
  text-indent: 0em !important;
  line-height: 1.5em;
  font-size: 16px;
}
.colorBox {
    margin: 0 10px 0 23px;
    width: 4px;
    height: 19px;
    background-color: #ff6c00;
  margin: 0 10px 0 23px;
  width: 4px;
  height: 19px;
  background-color: #ff6c00;
}
.textOverFlow {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.question {
    overflow: auto;
    height: 775px;
    padding-bottom: 20px;
  overflow: auto;
  height: 775px;
  padding-bottom: 20px;
}
.question::-webkit-scrollbar {
    width: 3px;
  width: 3px;
}
/*滚动条滑块*/
.question::-webkit-scrollbar-thumb {
    border-radius: 20px;
    -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
    background-color: #333;
  border-radius: 20px;
  -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
  background-color: #333;
}
/*滚动条轨道*/
.question::-webkit-scrollbar-track {
    -webkit-box-shadow: inset 0 0 1px rgba(0, 0, 0, 0);
    border-radius: 20px;
    background: #d9d9d9;
  -webkit-box-shadow: inset 0 0 1px rgba(0, 0, 0, 0);
  border-radius: 20px;
  background: #d9d9d9;
}
.paperMargin {
    margin-top: 30px;
  margin-top: 30px;
    ul li {
        padding: 20px 41px 0px 46px;
    }
  ul li {
    padding: 20px 41px 0px 46px;
  }
    li:last-child {
        padding-bottom: 20px;
    }
  li:last-child {
    padding-bottom: 20px;
  }
}
.paperQuestion {
    padding-left: 12px;
    display: flex;
    align-items: center;
  padding-left: 12px;
  display: flex;
  align-items: center;
  font-size: 16px;
  .questionText {
    font-size: 16px;
    color: #000;
  }
    .questionText {
        font-size: 16px;
        color: #000;
    }
    span {
        color: #c2c2c2;
    }
  span {
    color: #c2c2c2;
  }
}
/** 题干 */
.questionTitle {
  display: flex;
  justify-content: center;
  .titleContent {
    width: 95%;
    display: flex;
    justify-content: center;
    align-items: flex-start;
    .titleContent {
        width: 95%;
    .questionNum {
      text-indent: 0 !important;
      margin-right: 5px;
      height: 32px;
      line-height: 32px;
      text-align: center;
      font-size: 16px;
      color: #333;
      font-weight: bold;
    }
    .text-fl {
      display: flex;
      align-items: center;
      flex-wrap: wrap;
    }
    .titleText {
      display: flex;
      flex-wrap: wrap;
      align-items: center;
      text-align: left;
      min-width: 90%;
      font-size: 16px;
      line-height: 32px;
      color: #000;
      .input-txt {
        display: flex;
        align-items: flex-start;
        flex-wrap: wrap;
        align-items: center;
      }
        .questionNum {
            text-indent: 0 !important;
            margin-right: 5px;
            height: 32px;
            line-height: 32px;
            text-align: center;
            font-size: 16px;
            color: #333;
            font-weight: bold;
        }
      span {
        display: inline-block;
        font-size: 16px;
        color: #000;
        font-weight: 400;
        margin-top: 6px;
      }
        .text-fl {
            display: flex;
            align-items: center;
            flex-wrap: wrap;
        }
      select {
        outline: none;
        min-width: 100px;
      }
        .titleText {
            display: flex;
            flex-wrap: wrap;
            align-items: center;
            text-align: left;
            min-width: 90%;
            font-size: 16px;
            line-height: 32px;
            color: #000;
      input {
        width: 140px;
        height: 24px;
        border: 0;
        outline: none;
        border-bottom: 1px solid #000;
      }
            .input-txt {
                display: flex;
                flex-wrap: wrap;
                align-items: center;
            }
      /deep/ .el-textarea.is-disabled .el-textarea__inner {
        background-color: #fff;
      }
            span {
                display: inline-block;
                font-size: 16px;
                color: #000;
                font-weight: 400;
                margin-top: 6px;
            }
      /deep/ .el-input.is-disabled .el-input__inner {
        background-color: #fff;
      }
            select {
                outline: none;
                min-width: 100px;
            }
            input {
                width: 140px;
                height: 24px;
                border: 0;
                outline: none;
                border-bottom: 1px solid #000;
            }
            /deep/ .el-textarea.is-disabled .el-textarea__inner {
                background-color: #fff;
            }
            /deep/ .el-input.is-disabled .el-input__inner {
                background-color: #fff;
            }
            /dee/ p {
                display: flex;
                align-items: center;
            }
        }
        ::v-deep {
            .el-input__wrapper {
                border-top: 0 !important;
            }
        }
      /dee/ p {
        display: flex;
        align-items: center;
      }
    }
    .collect {
        cursor: pointer;
        width: 21px;
        height: 21px;
    ::v-deep {
      .el-input__wrapper {
        border-top: 0 !important;
      }
    }
  }
    .mathField {
        min-width: 200px;
        max-width: 518px;
    }
  .collect {
    cursor: pointer;
    width: 21px;
    height: 21px;
  }
  .mathField {
    min-width: 200px;
    max-width: 518px;
  }
}
/** 选项 */
.option {
  .el-radio,
  .el-checkbox {
    // min-height: 32px;
    height: min-content;
    display: flex;
    align-items: center;
    min-width: 45%;
    margin-right: 50px;
    margin-bottom: 6px;
    white-space: pre-wrap !important;
    color: #000;
    .el-radio,
    .el-checkbox {
        // min-height: 32px;
        height: min-content;
        display: flex;
        align-items: center;
        min-width: 45%;
        margin-right: 50px;
        margin-bottom: 6px;
        white-space: pre-wrap !important;
        color: #000;
        /deep/ .el-checkbox__label {
            line-height: 1.5;
        }
    /deep/ .el-checkbox__label {
      line-height: 1.5;
    }
  }
    /deep/ .el-radio__inner {
        border-color: #a5a3a3;
    }
  /deep/ .el-radio__inner {
    border-color: #a5a3a3;
  }
    .optionContent {
        margin: 0;
        display: flex;
        align-items: center;
        line-height: 26px;
        color: #000;
    }
  .optionContent {
    margin: 0;
    display: flex;
    align-items: center;
    line-height: 26px;
    color: #000;
  }
}
.analysis {
    margin: 20px 0;
    width: 94%;
    // margin-left: 12px;
  margin: 20px 0;
  width: 94%;
  // margin-left: 12px;
}
.el-collapse {
    width: 100%;
  width: 100%;
}
/** 解析 */
.objective {
    /deep/ .el-collapse-item__header {
        min-height: 48px;
        height: min-content;
        padding: 0 20px;
        font-size: 16px;
        background-color: #f4f4f4;
  /deep/ .el-collapse-item__header {
    min-height: 48px;
    height: min-content;
    padding: 0 20px;
    font-size: 16px;
    background-color: #f4f4f4;
        .headerBox {
            width: 100%;
            height: 100%;
            display: flex;
            justify-content: space-between;
            align-items: center;
            flex-wrap: wrap;
    .headerBox {
      width: 100%;
      height: 100%;
      display: flex;
      justify-content: space-between;
      align-items: center;
      flex-wrap: wrap;
            .headerConent {
                height: 100%;
                display: flex;
                align-items: center;
                flex-wrap: wrap;
      .headerConent {
        height: 100%;
        display: flex;
        align-items: center;
        flex-wrap: wrap;
                p {
                    margin-bottom: 0;
                }
        p {
          margin-bottom: 0;
        }
                .el-image {
                    width: 9px;
                    height: 9px;
                }
        .el-image {
          width: 9px;
          height: 9px;
        }
                .correct {
                    color: #1fbc1f;
                    width: 180px;
                    text-align: left;
                    display: flex;
        .correct {
          color: #1fbc1f;
          width: 180px;
          text-align: left;
          display: flex;
                    span:nth-child(1) {
                        display: inline-block;
                        width: 82px;
                    }
                }
          span:nth-child(1) {
            display: inline-block;
            width: 82px;
          }
        }
                .correctBox {
                    width: 100px;
                    height: min-content;
                    word-break: break-all;
                    text-overflow: ellipsis;
                    display: -webkit-box;
                    -webkit-box-orient: vertical;
                    -webkit-line-clamp: 1;
                    /* 这里是超出几行省略 */
                    overflow: hidden;
                }
        .correctBox {
          width: 100px;
          height: min-content;
          word-break: break-all;
          text-overflow: ellipsis;
          display: -webkit-box;
          -webkit-box-orient: vertical;
          -webkit-line-clamp: 1;
          /* 这里是超出几行省略 */
          overflow: hidden;
        }
                .error {
                    display: flex;
                    text-align: left;
                    width: 170px;
                    color: #ee1818;
        .error {
          display: flex;
          text-align: left;
          width: 170px;
          color: #ee1818;
                    span {
                        height: min-content;
                    }
          span {
            height: min-content;
          }
                    .errorBox {
                        width: 100px;
                        // height: 48px;
                        overflow: hidden;
                        text-overflow: ellipsis;
                        white-space: nowrap;
          .errorBox {
            width: 100px;
            // height: 48px;
            overflow: hidden;
            text-overflow: ellipsis;
            white-space: nowrap;
                        ::v-deep {
                            img {
                                max-height: 48px;
                            }
                        }
                    }
                }
            ::v-deep {
              img {
                max-height: 48px;
              }
            }
          }
        }
        .checkAnalysis {
            cursor: pointer;
            height: 100%;
            display: flex;
            align-items: center;
        }
      }
    }
    .checkAnalysis {
      cursor: pointer;
      height: 100%;
      display: flex;
      align-items: center;
    }
  }
}
/deep/ .el-collapse-item__header:focus:not(:hover) {
    color: #333;
  color: #333;
}
/deep/ .el-collapse-item__content {
    width: 93%;
    padding: 0 20px;
    background-color: #f4f4f4;
    font-size: 16px;
    color: #333;
  width: 93%;
  padding: 0 20px;
  background-color: #f4f4f4;
  font-size: 16px;
  color: #333;
}
/deep/ .el-collapse-item__arrow {
    display: none;
  display: none;
}
.subjectiveItem {
    background-color: #f4f4f4;
    padding: 10px 20px;
  background-color: #f4f4f4;
  padding: 10px 20px;
    p {
        text-indent: 0em;
    }
  p {
    text-indent: 0em;
  }
}
.subjective {
    /deep/ .el-collapse-item__header {
        height: 80px;
        background-color: #f4f4f4;
        width: 100%;
        padding: 0 20px;
        font-size: 16px;
        display: flex;
        flex-direction: column;
        justify-content: flex-start;
  /deep/ .el-collapse-item__header {
    height: 80px;
    background-color: #f4f4f4;
    width: 100%;
    padding: 0 20px;
    font-size: 16px;
    display: flex;
    flex-direction: column;
    justify-content: flex-start;
  }
  .subjectiveTitle {
    width: 80px;
    height: 20px;
    line-height: 20px;
  }
  .subjectiveRefer {
    display: flex;
    align-items: flex-start;
    text-align: left;
  }
  .subjectiveAnswer {
    width: 540px;
    height: 20px;
    text-align: left;
    word-break: break-all;
    text-overflow: ellipsis;
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 1;
    /* 这里是超出几行省略 */
    overflow: hidden;
    line-height: 20px;
  }
  .analysisDetailBox {
    overflow: hidden;
    max-height: 100px;
    transition: 1s;
    &.open {
      max-height: 500px;
    }
    .subjectiveTitle {
    &.close {
      max-height: 20px;
    }
    .referBox {
      display: flex;
      margin-bottom: 10px;
      span {
        width: 80px;
        height: 20px;
        line-height: 20px;
    }
        color: #999;
      }
    .subjectiveRefer {
        display: flex;
        align-items: flex-start;
        text-align: left;
    }
    .subjectiveAnswer {
        width: 540px;
        height: 20px;
        text-align: left;
        word-break: break-all;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-box-orient: vertical;
        -webkit-line-clamp: 1;
        /* 这里是超出几行省略 */
      p {
        flex: 1;
        overflow: hidden;
      }
      span,
      p {
        text-indent: 0em;
        font-size: 16px;
        line-height: 20px;
      }
    }
    .analysisDetailBox {
        overflow: hidden;
        max-height: 100px;
        transition: 1s;
        &.open {
            max-height: 500px;
        }
        &.close {
            max-height: 20px;
        }
        .referBox {
            display: flex;
            margin-bottom: 10px;
            span {
                width: 80px;
                color: #999;
            }
            p {
                flex: 1;
                overflow: hidden;
            }
            span,
            p {
                text-indent: 0em;
                font-size: 16px;
                line-height: 20px;
            }
        }
    }
  }
}
// 选项
.optionImg {
    height: min-content;
    margin-bottom: 6px;
  height: min-content;
  margin-bottom: 6px;
    /deep/ img {
        margin-left: 10px;
        object-fit: contain;
        vertical-align: middle;
    }
  /deep/ img {
    margin-left: 10px;
    object-fit: contain;
    vertical-align: middle;
  }
}
.optionTxt {
    height: 32px;
  height: 32px;
}
// 题干仅图片
.stemImg {
    margin: 0 10px 10px 10px;
  margin: 0 10px 10px 10px;
}
// 文字加图片
.stemTxtAndImage {
    display: flex;
    align-items: flex-start;
  display: flex;
  align-items: flex-start;
}
.titleTextArea {
    ::v-deep {
        img,
        .el-image__inner {
            max-width: 150px !important;
            max-height: 100px !important;
            object-fit: contain;
        }
  ::v-deep {
    img,
    .el-image__inner {
      max-width: 150px !important;
      max-height: 100px !important;
      object-fit: contain;
    }
  }
}
.questionAnalysis {
    width: 100%;
    height: 48px;
  width: 100%;
  height: 48px;
  display: flex;
  justify-content: space-between;
  .analysisAnswer {
    width: 74%;
    display: flex;
    justify-content: space-between;
  }
    .analysisAnswer {
        width: 74%;
        display: flex;
    }
  .referAnswer {
    display: inline-block;
    width: 60px;
  }
    .referAnswer {
        display: inline-block;
        width: 60px;
    }
  .answerContent {
    height: 48px;
    width: 80%;
    text-align: left;
    word-break: break-all;
    text-overflow: ellipsis;
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 1;
    /* 这里是超出几行省略 */
    overflow: hidden;
  }
    .answerContent {
        height: 48px;
        width: 80%;
        text-align: left;
        word-break: break-all;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-box-orient: vertical;
        -webkit-line-clamp: 1;
        /* 这里是超出几行省略 */
        overflow: hidden;
    }
    .el-image {
        width: 9px;
        height: 9px;
    }
  .el-image {
    width: 9px;
    height: 9px;
  }
}
.analysisColor {
    cursor: pointer;
    color: #949494;
    margin-right: 4px;
  cursor: pointer;
  color: #949494;
  margin-right: 4px;
}
.difficulty {
    display: flex;
    align-items: center;
  display: flex;
  align-items: center;
}
.cartoon {
    animation: spread 1s linear forwards;
  animation: spread 1s linear forwards;
}
.downCartoon {
    animation: downSpred 1s linear forwards;
  animation: downSpred 1s linear forwards;
}
.showText {
    animation: showText 1s linear forwards;
  animation: showText 1s linear forwards;
}
.hideText {
    animation: hideText 2s linear forwards;
  animation: hideText 2s linear forwards;
}
@keyframes spread {
    from {
        max-height: 20px;
    }
  from {
    max-height: 20px;
  }
    to {
        max-height: 500px;
  to {
    max-height: 500px;
        p {
            flex: 1;
            overflow: hidden;
        }
    p {
      flex: 1;
      overflow: hidden;
    }
  }
}
@keyframes downSpred {
    from {
        max-height: 500px;
    }
  from {
    max-height: 500px;
  }
    to {
        max-height: 20px;
    }
  to {
    max-height: 20px;
  }
}
@keyframes showText {
    100% {
        height: auto;
    }
  100% {
    height: auto;
  }
}
@keyframes hideText {
    0% {
        height: auto;
    }
  0% {
    height: auto;
  }
    100% {
        height: 20px;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
    }
  100% {
    height: 20px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
}
.yincang {
    animation: yincang 1s linear forwards;
  animation: yincang 1s linear forwards;
}
@keyframes yincang {
    from {
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
    }
  from {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
    to {
        overflow: auto;
        text-overflow: initial;
        white-space: pre-wrap;
    }
  to {
    overflow: auto;
    text-overflow: initial;
    white-space: pre-wrap;
  }
}
.bottom-btn {
    margin-top: 25px;
    display: flex;
    justify-content: center;
    flex-wrap: wrap;
    margin-bottom: 50px;
    .el-button {
        margin-top: 10px;
    }
  margin-top: 25px;
  display: flex;
  justify-content: center;
  flex-wrap: wrap;
  margin-bottom: 50px;
  .el-button {
    margin-top: 10px;
  }
}
.radio-img {
    width: 200px;
    object-fit: contain;
  width: 200px;
  object-fit: contain;
}
.collect-png {
    cursor: pointer;
    width: 18px;
    object-fit: contain;
  cursor: pointer;
  width: 18px;
  object-fit: contain;
}
/deep/ .examination-math {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
  display: flex;
  align-items: center;
  flex-wrap: wrap;
}
</style>
</style>