123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- <template>
- <view class="page-content">
- <mx-nav-bar title="必刷题"/>
- <view class="p-30">
- <view class="bg-white p-30 mx-card">
- <view class="fx-row fx-bet-sta">
- <view class="fx-col gap-5">
- <view class="text-main font-[FZBangSKJW] objective-paper-major">
- {{ prevData.subjectName }}
- </view>
- <view class="text-2xs text-tips">{{ statTips }}</view>
- </view>
- <view v-if="showTendency">
- <mx-subsection v-model="current" :list="chartTypes" width="140px"/>
- </view>
- </view>
- <template v-if="chartData">
- <accuracy-chart v-if="current==0" :value="chartData.accuracy"/>
- <recent-detail-chart v-if="current==1" :data="chartData.recentDetails"/>
- </template>
- <uv-gap v-else height="240"/>
- <completed-progress :accuracy="chartData&&chartData.accuracy"
- :completed="chartData&&chartData.completed"
- :total="chartData&&chartData.total"/>
- </view>
- </view>
- <view class="my-20 text-center">
- <text v-if="showExamTip" class="text-2xs text-tips">没有做题记录,快来开始做题吧!</text>
- </view>
- <view class="mb-40 flex justify-center">
- <uv-button type="primary" shape="circle" size="large" text="开始刷题"
- color="linear-gradient(to right, var(--primary-light-color), var(--primary-deep-color))"
- :custom-style="{width: '55vw', height: '44px'}" @click="handleExam"/>
- </view>
- </view>
- </template>
- <script setup>
- import {ref, computed, onMounted} from 'vue'
- import {useTransfer} from "@/hooks/useTransfer";
- import mxConst from "@/common/mxConst";
- import {getObjectivePaperStatistic} from "@/api/webApi/paper";
- import CompletedProgress from "@/pages/topic-center/paper-objective/components/completed-progress.vue";
- import AccuracyChart from "@/pages/topic-center/paper-objective/components/accuracy-chart.vue";
- import RecentDetailChart from "@/pages/topic-center/paper-objective/components/recent-detail-chart.vue";
- const loaded = ref(false)
- const chartTypes = ref(['正确率', '趋势图'])
- const current = ref(0)
- const chartData = ref(null)
- const {prevData, transferTo, onPageCallback} = useTransfer()
- const statTips = computed(() => current.value == 0 ? '必刷题分析' : '最近刷题正确率趋势')
- const showExamTip = computed(() => chartData.value?.recentDetails?.length == 0)
- const showTendency = computed(() => chartData.value?.recentDetails?.length > 2)
- onMounted(() => loadChartData())
- onPageCallback((data) => {
- if (data) {
- loaded.value = false
- loadChartData()
- }
- })
- const loadChartData = () => {
- if (loaded.value) return
- loaded.value = true
- const {subjectId} = prevData.value
- getObjectivePaperStatistic({subjectId}).then(res => {
- chartData.value = res.data || {}
- })
- }
- const handleExam = () => {
- const {type, testType, subjectId} = prevData.value
- const next = {
- type, testType, subjectId,
- title: '必刷题',
- callback: mxConst.globalEvents.paperCompleted
- }
- transferTo('/pages/topic-center/paper-exam/paper-exam', next)
- }
- </script>
- <style lang="scss">
- .objective-paper-major {
- position: relative;
- z-index: 1;
- }
- .objective-paper-major::before {
- content: " ";
- position: absolute;
- width: 40px;
- height: 8px;
- left: -3px;
- bottom: 0;
- z-index: -1;
- border-radius: 4px;
- background: linear-gradient(90deg, #62B6FF, #fff);
- }
- </style>
|