|
@@ -1,7 +1,7 @@
|
|
|
-<script setup name="practice">
|
|
|
+<script setup name="Exam">
|
|
|
import TopicPractice from "../../components/Topic/TopicPractice.vue";
|
|
|
import { ref, onMounted } from "vue";
|
|
|
-import { getRoute } from "../../utils/router";
|
|
|
+import { getRoute, router } from "../../utils/router";
|
|
|
import { request } from "../../utils/request";
|
|
|
import { useTimeStore } from "@/store/time";
|
|
|
import Container from "../../components/Container/Container.vue";
|
|
@@ -26,8 +26,8 @@ const submitter = ref({
|
|
|
isEndQuestion: false,
|
|
|
text: "提交查看",
|
|
|
totalTime: {
|
|
|
- formatTime: "00:03",
|
|
|
- totalTime: 2892,
|
|
|
+ formatTime: "00:00",
|
|
|
+ totalTime: 0,
|
|
|
},
|
|
|
});
|
|
|
|
|
@@ -43,12 +43,13 @@ const getList = async (params) => {
|
|
|
"api/question_bank/question_reception/topic/get_chapter_topic",
|
|
|
{
|
|
|
...params,
|
|
|
- id: getRoute().params.id,
|
|
|
+ // id: getRoute().params.id,
|
|
|
+ id: 66,
|
|
|
}
|
|
|
);
|
|
|
total.value = res.data.total;
|
|
|
data.value.push(
|
|
|
- ...res.data.data.map((item) => {
|
|
|
+ ...res.data.data.map((item, ind) => {
|
|
|
let questions = [];
|
|
|
const ans = item.correct_answer.split(",");
|
|
|
const ansList = [];
|
|
@@ -79,6 +80,7 @@ const getList = async (params) => {
|
|
|
showResult: false, // 是否展示答案
|
|
|
isRight: false, // 是否正确
|
|
|
isImage: item.title.includes("<img"),
|
|
|
+ ind,
|
|
|
};
|
|
|
})
|
|
|
);
|
|
@@ -100,7 +102,7 @@ const lookReport = (d, s) => {
|
|
|
totalTime,
|
|
|
};
|
|
|
const r = data.value.filter((item) => item.isRight).length;
|
|
|
- const n = data.value.filter((item) => !item.showResult).length;
|
|
|
+ const n = data.value.filter((item) => !item.selectAns.length).length;
|
|
|
correct.value = {
|
|
|
rate: (r / total.value) * 100,
|
|
|
right: r,
|
|
@@ -125,48 +127,66 @@ onMounted(() => {
|
|
|
:topics="data"
|
|
|
@nextPage="nextPage"
|
|
|
@lookReport="lookReport"
|
|
|
+ :empty="!data.length"
|
|
|
border
|
|
|
v-if="!showReport"
|
|
|
/>
|
|
|
- <Container v-else title="练习报告">
|
|
|
- <uni-card>
|
|
|
+ <Container
|
|
|
+ bgColor="url('https://openwork-oss.oss-cn-shenzhen.aliyuncs.com/uploads/question/2025/05/7i6ROn34tZGe8QR4gaWDP1ZzyPYjqlvPgLLFRmIe.png')"
|
|
|
+ bottomBorder
|
|
|
+ v-else
|
|
|
+ bottomBgColor="#fff"
|
|
|
+ title="练习报告"
|
|
|
+ >
|
|
|
+ <view class="reslut">
|
|
|
+ <div class="title-r">恭 喜 完 成 考 试</div>
|
|
|
<view class="card">
|
|
|
<view class="card-time">
|
|
|
<view>{{ submitter.totalTime?.formatTime }}</view>
|
|
|
<view>学习时长</view>
|
|
|
</view>
|
|
|
<view class="card-time">
|
|
|
- <view>{{ correct.rate.toFixed(2) }}%</view>
|
|
|
+ <view class="red">{{ correct.rate.toFixed(2) }}%</view>
|
|
|
<view>正确率</view>
|
|
|
</view>
|
|
|
</view>
|
|
|
- </uni-card>
|
|
|
- <view class="reslut">
|
|
|
- <view class="header">
|
|
|
- <view>答题卡</view>
|
|
|
- <view class="right-error">
|
|
|
- <view class="right">答对({{ correct.right }})</view>
|
|
|
- <view class="error">答错({{ correct.error }})</view>
|
|
|
- <view class="not">未作({{ correct.not }})</view>
|
|
|
+ <view class="template">
|
|
|
+ <view class="header">
|
|
|
+ <view>答题卡</view>
|
|
|
+ <view class="right-error">
|
|
|
+ <view class="right">答对({{ correct.right }})</view>
|
|
|
+ <view class="error">答错({{ correct.error }})</view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="group">
|
|
|
+ <view
|
|
|
+ class="item"
|
|
|
+ :class="{
|
|
|
+ right: it.isRight && it.showResult,
|
|
|
+ error: !it.isRight && it.showResult && it.selectAns.length,
|
|
|
+ }"
|
|
|
+ v-for="(it, index) in data"
|
|
|
+ :key="it.id"
|
|
|
+ >{{ index + 1 }}</view
|
|
|
+ >
|
|
|
</view>
|
|
|
- </view>
|
|
|
- <view class="group">
|
|
|
- <view
|
|
|
- class="item"
|
|
|
- :class="{
|
|
|
- right: it.isRight && it.showResult,
|
|
|
- error: !it.isRight && it.showResult,
|
|
|
- }"
|
|
|
- v-for="(it, index) in data"
|
|
|
- :key="it.id"
|
|
|
- >{{ index + 1 }}</view
|
|
|
- >
|
|
|
</view>
|
|
|
</view>
|
|
|
<template #footer>
|
|
|
<view class="footer">
|
|
|
- <view class="button plain">答题解析</view>
|
|
|
- <view class="button">炫耀一下</view>
|
|
|
+ <view class="button plain" @click="showReport = false">答题解析</view>
|
|
|
+ <view
|
|
|
+ class="button"
|
|
|
+ @click="
|
|
|
+ router.push({
|
|
|
+ url: '/pages/real/shareExam',
|
|
|
+ params: {
|
|
|
+ correct,
|
|
|
+ },
|
|
|
+ })
|
|
|
+ "
|
|
|
+ >炫耀一下</view
|
|
|
+ >
|
|
|
</view>
|
|
|
</template>
|
|
|
</Container>
|
|
@@ -174,12 +194,31 @@ onMounted(() => {
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
@import "@/uni.scss";
|
|
|
+.template {
|
|
|
+ padding: 15rpx;
|
|
|
+ border-radius: 24rpx;
|
|
|
+ background-color: #f8f9fb;
|
|
|
+}
|
|
|
+.red {
|
|
|
+ color: #ff4444;
|
|
|
+}
|
|
|
|
|
|
+.title-r {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ font-weight: 500;
|
|
|
+ font-size: 50rpx;
|
|
|
+ color: #002fa7;
|
|
|
+}
|
|
|
.card {
|
|
|
display: flex;
|
|
|
- justify-content: space-between;
|
|
|
+ justify-content: center;
|
|
|
align-items: center;
|
|
|
+ gap: 63rpx;
|
|
|
padding: 40rpx 50rpx;
|
|
|
+ background-color: #f8f9fb;
|
|
|
+ border-radius: 24rpx;
|
|
|
&-time {
|
|
|
font-family: PingFang SC, PingFang SC;
|
|
|
font-weight: 500;
|
|
@@ -193,14 +232,17 @@ onMounted(() => {
|
|
|
}
|
|
|
|
|
|
.reslut {
|
|
|
- margin: 0 30rpx;
|
|
|
- padding: 20rpx 50rpx;
|
|
|
+ margin: 0 32rpx;
|
|
|
+ padding: 24rpx;
|
|
|
font-family: PingFang SC, PingFang SC;
|
|
|
font-weight: 500;
|
|
|
font-size: 28rpx;
|
|
|
color: #333333;
|
|
|
background: #fff;
|
|
|
- border-radius: 10rpx;
|
|
|
+ border-radius: 24rpx;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ gap: 24rpx;
|
|
|
.header {
|
|
|
display: flex;
|
|
|
justify-content: space-between;
|