|
@@ -20,28 +20,10 @@
|
|
|
<!-- 题目预加载end -->
|
|
|
<div class="problem-box" v-else>
|
|
|
<!-- 题目内容 -->
|
|
|
- <div class="problem">
|
|
|
- <span class="type">{{ currentSubject.type }}</span>
|
|
|
- <span class="text">{{ currentSubjectIndex + 1 }}、{{ currentSubject.explain }}</span>
|
|
|
- <van-image v-if="currentSubject.image" :src="currentSubject.image" class="img">
|
|
|
- <template v-slot:loading>
|
|
|
- <van-loading type="spinner" size="20" />
|
|
|
- </template>
|
|
|
- </van-image>
|
|
|
- </div>
|
|
|
+ <subjectContext :currentSubject="currentSubject" :currentSubjectIndex="currentSubjectIndex" />
|
|
|
<!-- 背题模式展示 -->
|
|
|
<div v-if="typeParams.answerShow">
|
|
|
- <div>
|
|
|
- <div class="answer-box" v-for="(item, index) in currentSubject.opts" :key="Number(index)">
|
|
|
- <div class="choose-icon">
|
|
|
- {{ String.fromCharCode(65 + Number(index)) }}
|
|
|
- </div>
|
|
|
- <span class="answer-text" :class="{ true: currentSubject.answer.includes(item) }">
|
|
|
- {{ item }}
|
|
|
- </span>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="checkbox-answer">答案: {{ currentSubject.answer.toString() }}</div>
|
|
|
+ <reciteMode :currentSubject="currentSubject" />
|
|
|
</div>
|
|
|
<!-- 背题模式展示end -->
|
|
|
<!-- 选择内容 -->
|
|
@@ -94,65 +76,11 @@
|
|
|
<!-- 分割线 -->
|
|
|
<van-divider />
|
|
|
<!-- 功能选择列表 -->
|
|
|
- <div class="function-list">
|
|
|
- <div class="function-item" @click="addCurrentQuestion">
|
|
|
- <m-icon :type="currentSubject?.isCollection ? 'shoucanghuang' : 'shoucanghui'" size="25px" />
|
|
|
- <span>收藏</span>
|
|
|
- </div>
|
|
|
- <div class="function-item" @click="subjectAudioPlay('读题+答案')">
|
|
|
- <m-icon type="a-dtda" size="25px" />
|
|
|
- <span>读题+答案</span>
|
|
|
- </div>
|
|
|
- <div class="function-item" @click="subjectAudioPlay('读题')">
|
|
|
- <m-icon type="duti" size="25px" />
|
|
|
- <span>读题</span>
|
|
|
- </div>
|
|
|
- <div
|
|
|
- class="function-item"
|
|
|
- @click="
|
|
|
- () => {
|
|
|
- subjectAudioPlay('读技巧解释');
|
|
|
- skillsShow = true;
|
|
|
- }
|
|
|
- ">
|
|
|
- <m-icon type="jqjj" size="25px" />
|
|
|
- <span>技巧讲解</span>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <!-- 功能选择列表End -->
|
|
|
+ <functionList :currentSubject="currentSubject" @subjectAudioPlay="subjectAudioPlay" @addCurrentQuestion="addCurrentQuestion" v-model:skillsShow="skillsShow" />
|
|
|
<!-- 技巧讲解 -->
|
|
|
- <van-overlay :show="skillsShow" z-index="10">
|
|
|
- <div class="skills-box">
|
|
|
- <div class="skills">
|
|
|
- <div class="title">技巧讲解</div>
|
|
|
- <img v-if="!!currentSubject.explainGif" :src="currentSubject.explainGif" class="img" />
|
|
|
- <van-divider class="divider">本题速记口诀</van-divider>
|
|
|
- <div class="text">{{ currentSubject.explainJq }}</div>
|
|
|
- <div class="btn">
|
|
|
- <span @click="skillsShow = false">关闭</span>
|
|
|
- <span @click="subjectAudioPlay('读技巧解释')">语音重播</span>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </van-overlay>
|
|
|
- <!-- 技巧讲解end -->
|
|
|
+ <explainJq :currentSubject="currentSubject" v-model:skillsShow="skillsShow" @subjectAudioPlay="subjectAudioPlay" />
|
|
|
<!-- 官方解释 -->
|
|
|
- <van-overlay :show="officialShow" z-index="10">
|
|
|
- <div class="skills-box">
|
|
|
- <div class="skills">
|
|
|
- <div class="title">官方解释</div>
|
|
|
- <div class="text">
|
|
|
- {{ currentSubject.explainJs }}
|
|
|
- </div>
|
|
|
- <div class="btn">
|
|
|
- <span @click="officialShow = false">关闭</span>
|
|
|
- <span @click="subjectAudioPlay('读官方解释')">语音重播</span>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </van-overlay>
|
|
|
- <!-- 官方解释end -->
|
|
|
- <!-- 题目模块end -->
|
|
|
+ <explainJs :currentSubject="currentSubject" v-model:officialShow="officialShow" @subjectAudioPlay="subjectAudioPlay" />
|
|
|
<!-- 设置操作栏 -->
|
|
|
<van-popup v-model:show="setShow" position="bottom">
|
|
|
<van-cell center title="答对跳转下一题">
|
|
@@ -172,45 +100,7 @@
|
|
|
<subjectChangePopup :trueNum="trueNum" :falseNum="falseNum" v-model:currentSubjectIndex="currentSubjectIndex" :subjectList="subjectList" />
|
|
|
</van-popup>
|
|
|
<!-- 底部操作栏 -->
|
|
|
- <van-tabbar placeholder route>
|
|
|
- <van-tabbar-item @click="lastSubject"
|
|
|
- >上一题
|
|
|
- <template #icon>
|
|
|
- <m-icon type="shangyiti" />
|
|
|
- </template>
|
|
|
- </van-tabbar-item>
|
|
|
- <van-tabbar-item
|
|
|
- >{{ trueNum }}
|
|
|
- <template #icon>
|
|
|
- <m-icon type="dui" />
|
|
|
- </template>
|
|
|
- </van-tabbar-item>
|
|
|
- <van-tabbar-item
|
|
|
- >{{ falseNum }}
|
|
|
- <template #icon>
|
|
|
- <m-icon type="cuo" />
|
|
|
- </template>
|
|
|
- </van-tabbar-item>
|
|
|
- <van-tabbar-item @click="showSubjectChangePopup = true"
|
|
|
- >{{ currentSubjectIndex + 1 }}/{{ subjectTotal }}
|
|
|
- <template #icon>
|
|
|
- <m-icon type="zongtishu" />
|
|
|
- </template>
|
|
|
- </van-tabbar-item>
|
|
|
- <van-tabbar-item @click="officialShow = true"
|
|
|
- >官方解释
|
|
|
- <template #icon>
|
|
|
- <m-icon type="gfjs" />
|
|
|
- </template>
|
|
|
- </van-tabbar-item>
|
|
|
- <van-tabbar-item @click="nextSubject"
|
|
|
- >下一题
|
|
|
- <template #icon>
|
|
|
- <m-icon type="xiayiti" />
|
|
|
- </template>
|
|
|
- </van-tabbar-item>
|
|
|
- </van-tabbar>
|
|
|
- <!-- 底部操作栏end -->
|
|
|
+ <bottomBar :currentSubjectIndex="currentSubjectIndex" :subjectTotal="subjectTotal" :trueNum="trueNum" :falseNum="falseNum" v-model:showSubjectChangePopup="showSubjectChangePopup" v-model:officialShow="officialShow" @lastSubject="lastSubject" @nextSubject="nextSubject" />
|
|
|
</template>
|
|
|
|
|
|
<script lang="ts" setup>
|
|
@@ -218,6 +108,12 @@
|
|
|
import subjectChangePopup from "./components/subjectChangePopup.vue";
|
|
|
import { useTopicMode, useAudioSet, useSubjectShowLogic } from "@/hooks/exercise";
|
|
|
import { RouterBus } from "@/hooks";
|
|
|
+ import subjectContext from "./components/subjectContext.vue";
|
|
|
+ import functionList from "./components/functionList.vue";
|
|
|
+ import explainJq from "./components/explainJq.vue";
|
|
|
+ import explainJs from "./components/explainJs.vue";
|
|
|
+ import reciteMode from "./components/reciteMode.vue";
|
|
|
+ import bottomBar from "./components/bottomBar.vue";
|
|
|
const {
|
|
|
router: { back },
|
|
|
route: { query },
|
|
@@ -250,25 +146,6 @@
|
|
|
width: 100%;
|
|
|
margin-top: 10px;
|
|
|
}
|
|
|
- .function-list {
|
|
|
- width: 100%;
|
|
|
- font-size: 13px;
|
|
|
- display: flex;
|
|
|
- justify-content: space-around;
|
|
|
- padding: 15px;
|
|
|
- box-sizing: border-box;
|
|
|
- .function-item {
|
|
|
- display: flex;
|
|
|
- flex-direction: column;
|
|
|
- align-items: center;
|
|
|
- font-size: 13px;
|
|
|
- font-weight: 400;
|
|
|
- color: #8a9099;
|
|
|
- span {
|
|
|
- margin-top: 5px;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
.answerType {
|
|
|
width: 100%;
|
|
|
font-size: 13px;
|
|
@@ -294,27 +171,6 @@
|
|
|
.problem-box {
|
|
|
font-size: 17px;
|
|
|
padding: 15px;
|
|
|
- .problem {
|
|
|
- .type {
|
|
|
- width: 47px;
|
|
|
- height: 24px;
|
|
|
- background: #498ef5;
|
|
|
- border-radius: 10px 10px 0px 10px;
|
|
|
- font-size: 11px;
|
|
|
- padding: 2px 7px;
|
|
|
- margin-right: 5px;
|
|
|
- }
|
|
|
- .text {
|
|
|
- font-family: PingFang SC;
|
|
|
- font-weight: 400;
|
|
|
- color: #0a1a33;
|
|
|
- letter-spacing: 0.3px;
|
|
|
- }
|
|
|
- .img {
|
|
|
- width: 100%;
|
|
|
- margin-top: 10px;
|
|
|
- }
|
|
|
- }
|
|
|
.answer {
|
|
|
margin-top: 25px;
|
|
|
}
|
|
@@ -366,77 +222,4 @@
|
|
|
margin-top: 25px;
|
|
|
}
|
|
|
}
|
|
|
- .skills-box {
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- justify-content: center;
|
|
|
- height: 100%;
|
|
|
- .skills {
|
|
|
- width: 290px;
|
|
|
- background: #ffffff;
|
|
|
- box-shadow: 0px 0px 8px rgba(124, 129, 136, 0.16);
|
|
|
- border-radius: 10px;
|
|
|
- display: flex;
|
|
|
- flex-direction: column;
|
|
|
- align-items: center;
|
|
|
- padding: 20px 16px;
|
|
|
- box-sizing: border-box;
|
|
|
- .title {
|
|
|
- font-size: 15px;
|
|
|
- font-family: PingFang SC;
|
|
|
- font-weight: bold;
|
|
|
- line-height: 21px;
|
|
|
- color: #0a1a33;
|
|
|
- }
|
|
|
- .img {
|
|
|
- width: 258px;
|
|
|
- height: 129px;
|
|
|
- border: 1px solid #e8e8e8;
|
|
|
- margin-top: 16px;
|
|
|
- }
|
|
|
- .divider {
|
|
|
- margin-top: 20px;
|
|
|
- color: #0a1a33;
|
|
|
- background: #ffffff;
|
|
|
- }
|
|
|
- .text {
|
|
|
- font-size: 13px;
|
|
|
- font-family: PingFang SC;
|
|
|
- font-weight: 400;
|
|
|
- line-height: 19px;
|
|
|
- color: #5c6066;
|
|
|
- margin-top: 10px;
|
|
|
- }
|
|
|
- .btn {
|
|
|
- width: 100%;
|
|
|
- display: flex;
|
|
|
- justify-content: space-between;
|
|
|
- padding: 0 40px;
|
|
|
- box-sizing: border-box;
|
|
|
- margin-top: 20px;
|
|
|
- span {
|
|
|
- width: 76px;
|
|
|
- height: 30px;
|
|
|
- border-radius: 15px;
|
|
|
- font-size: 13px;
|
|
|
- display: flex;
|
|
|
- justify-content: center;
|
|
|
- align-items: center;
|
|
|
- &:active {
|
|
|
- background-color: #afaaaa;
|
|
|
- filter: brightness(50%);
|
|
|
- }
|
|
|
- &:nth-of-type(1) {
|
|
|
- border: 1px solid #707070;
|
|
|
- color: #5c6066;
|
|
|
- }
|
|
|
- &:nth-of-type(2) {
|
|
|
- background: #498ef5;
|
|
|
- border: 1px solid #498ef5;
|
|
|
- color: #ffffff;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
</style>
|