| | |
| | | <template> |
| | | <div class="list-container w-full h-full"> |
| | | <el-scrollbar> |
| | | |
| | | <el-card shadow="hover" class="mb-3" v-for="item in props.dataList"> |
| | | <div class="item flex justify-between items-center"> |
| | | <div class="left-container flex flex-col justify-between"> |
| | | <div class="top-container flex items-center"> |
| | | <div class="title mr-5 text-xl font-bold">{{ item.examName }}</div> |
| | | <div class="tag"> |
| | | <el-tag :type="stateList[item.status].type" effect="light" round> |
| | | {{ stateList[item.status].text }} |
| | | </el-tag> |
| | | </div> |
| | | <div v-if="!item.isContinue" style="margin-left: 15px">您已提交试卷</div> |
| | | </div> |
| | | <div class="mid-container flex items-center my-4 text-gray-700"> |
| | | <el-icon class="mr-1"> |
| | | <Timer /> |
| | | </el-icon> |
| | | <div class="time"> |
| | | 考试时间: {{ item.startTime }} ~ {{ item.endTime }} |
| | | </div> |
| | | </div> |
| | | <!-- <div class="bottom-container flex text-sm text-gray-400"> |
| | | <div class="bottom-item"> |
| | | 总分: {{ item.examScore }} |
| | | </div> |
| | | <div class="bottom-item"> |
| | | 题数: {{ item.examTotal }} |
| | | </div> |
| | | <div class="bottom-item"> |
| | | 答题时间: {{ item.examTime }}分钟 |
| | | </div> |
| | | </div> --> |
| | | </div> |
| | | <div class="right-container"> |
| | | <div class="button-container"> |
| | | <el-button type="primary" size="large" @click="examClick(item)" |
| | | :disabled="stateList[item.status].disabled || !item.isContinue">开始考试</el-button> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </el-scrollbar> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { ref } from 'vue'; |
| | | import { Timer } from '@element-plus/icons-vue'; |
| | | import { useRouter } from 'vue-router'; |
| | | import { useExamStore } from '@/store/index.js'; |
| | | import { getExamInfo } from '@/api/modules/exam.js'; |
| | | const examStore = useExamStore(); |
| | | |
| | | const router = useRouter(); |
| | | |
| | | const props = defineProps({ |
| | | dataList: { |
| | | type: Array, |
| | | default: () => [] |
| | | } |
| | | }); |
| | | |
| | | const stateList = { |
| | | 'not_start': { |
| | | text: '未开始', |
| | | type: 'primary', |
| | | disabled: true |
| | | }, |
| | | 'ing': { |
| | | text: '进行中', |
| | | type: 'success', |
| | | disabled: false |
| | | }, |
| | | 'finished': { |
| | | text: '已结束', |
| | | type: 'info', |
| | | disabled: true |
| | | }, |
| | | 'cancel': { |
| | | text: '已作废', |
| | | type: 'danger', |
| | | disabled: true |
| | | } |
| | | }; |
| | | |
| | | const examClick = (exam) => { |
| | | console.log(exam); |
| | | getExamInfo(exam.id).then((res) => { |
| | | examStore.setExamInfo({ |
| | | id: res.data.id, |
| | | examName: res.data.examName, |
| | | suggestTime: res.data.suggestTime, |
| | | }); |
| | | examStore.setExamDetail(res.data.titleList); |
| | | examStore.initExam(res.data.titleList[0].questionType); |
| | | router.push('/exam'); |
| | | }).catch(err => { |
| | | |
| | | }); |
| | | } |
| | | |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .item { |
| | | width: 100%; |
| | | min-height: 120px; |
| | | } |
| | | |
| | | </style> |
| | | .bottom-item { |
| | | margin-right: 30px; |
| | | } |
| | | </style> |