123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 |
- <template>
- <div class="header-back">
- <m-nav-bar :transparent="true" title="模拟考试" style="color: #ffffff" />
- <div class="user-data">
- <div class="left">
- <m-user-avatar />
- <div class="name">
- <m-user-name />
- <span
- >最高成绩<span class="grade">{{ testScoresInfo.maxScore }}</span
- >分</span
- >
- </div>
- </div>
- <m-button
- @click="goMockTest"
- class="continue"
- width="90px"
- height="30px"
- text="继续考试"
- />
- </div>
- </div>
- <div class="summary content-box">
- <div class="item">
- <div>
- <span class="number">{{ testScoresList.length }}</span
- >次
- </div>
- <div>考试次数</div>
- </div>
- <div class="item">
- <div>
- <span class="number">{{ testScoresInfo.avgScore }}</span
- >分
- </div>
- <div>平均成绩</div>
- </div>
- <div class="item">
- <div>
- <span class="number">{{ testScoresInfo.forecastScore }}</span
- >分
- </div>
- <div>成绩预测</div>
- </div>
- </div>
- <div class="test-scores content-box">
- <table class="table">
- <tr>
- <th>车型</th>
- <th>科目</th>
- <th>分数</th>
- <th>时间</th>
- </tr>
- <tr v-for="(item, index) in testScoresList" :key="index">
- <td>{{ item.type }}</td>
- <td>{{ item.kskm }}</td>
- <td>{{ item.score }}</td>
- <td>{{ item.createTime }}</td>
- </tr>
- </table>
- </div>
- </template>
- <script lang="ts">
- import { getTestScoresList, getTestScoresInfo } from "@/api";
- import { ref, onBeforeMount } from "vue";
- import { RouterBus } from "@/hooks";
- /**
- * 考试成绩数据结构
- */
- interface TestScores {
- createTime: string; //考试时间
- kskm: string; //科目
- score: number; //分数
- type: string; //车型
- }
- /**
- * 模拟考成绩列表
- */
- const useTestScoresList = () => {
- const testScoresList = ref<TestScores[]>([]);
- onBeforeMount(async () => {
- let res = await getTestScoresList();
- testScoresList.value = res.rows;
- });
- return {
- testScoresList,
- };
- };
- /**
- * 成绩信息数据结构
- */
- interface TestScoresInfo {
- avgScore: number; //平均成绩
- forecastScore: number; //预测成绩
- maxScore: number; //最大成绩
- }
- /**
- * 最大成绩,平均成绩,预测成绩
- */
- const useTestScoresInfo = () => {
- const testScoresInfo = ref<TestScoresInfo>({
- avgScore: 0,
- forecastScore: 0,
- maxScore: 0,
- });
- onBeforeMount(async () => {
- let res = await getTestScoresInfo();
- testScoresInfo.value = res.data;
- });
- return {
- testScoresInfo,
- };
- };
- </script>
- <script lang="ts" setup>
- const { testScoresList } = useTestScoresList();
- const { testScoresInfo } = useTestScoresInfo();
- const { goMockTest } = new RouterBus();
- </script>
- <style scoped lang="scss">
- .header-back {
- width: 375px;
- padding-bottom: 82px;
- background: linear-gradient(180deg, #498ef5 0%, #4da8e6 100%);
- border-radius: 0px 0px 82px 82px;
- .user-data {
- display: flex;
- justify-content: space-between;
- align-items: center;
- padding: 19px 17px 24px;
- .left {
- display: flex;
- justify-content: space-between;
- align-items: center;
- .name {
- display: flex;
- flex-direction: column;
- font-size: 13px;
- color: #ffffff;
- justify-content: space-between;
- margin-left: 6px;
- .grade {
- font-size: 24px;
- padding: 4px;
- }
- }
- }
- .continue {
- font-size: 13px;
- font-family: PingFang SC;
- font-weight: 400;
- line-height: 19px;
- color: #ffffff;
- background: #01c18d;
- }
- }
- }
- .content-box {
- width: 345px;
- background: #ffffff;
- box-shadow: 0px 0px 8px rgba(124, 129, 136, 0.2);
- border-radius: 10px;
- position: relative;
- left: 50%;
- transform: translateX(-50%);
- top: -82px;
- margin-top: 10px;
- }
- .summary {
- display: flex;
- justify-content: space-around;
- padding: 25px 30px;
- box-sizing: border-box;
- .item {
- font-size: 13px;
- font-family: PingFang SC;
- font-weight: 400;
- line-height: 19px;
- color: #8a9099;
- display: flex;
- flex-direction: column;
- align-items: center;
- .number {
- font-size: 24px;
- color: #0a1a33;
- padding: 4px;
- }
- }
- }
- .test-scores {
- font-size: 13px;
- font-family: PingFang SC;
- font-weight: 400;
- line-height: 19px;
- color: #0a1a33;
- padding: 15px;
- box-sizing: border-box;
- .table {
- width: 100%;
- border-collapse: collapse;
- font-size: 13px;
- th {
- padding: 5px;
- color: #0a1a33;
- }
- td {
- text-align: center;
- padding: 5px;
- color: #8a9099;
- }
- tr {
- &:nth-of-type(n) {
- background: #ffffff;
- }
- &:nth-of-type(2n) {
- background: rgba(73, 142, 245, 0.15);
- }
- }
- }
- }
- </style>
|