| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- <template>
- <div style="margin-top: 10px" class="app-contain">
- <a-row :gutter="50">
- <a-col :span="14">
- <a-table
- :loading="listLoading"
- :data-source="tableData"
- :columns="columns"
- row-key="id"
- :custom-row="customRow"
- :pagination="false"
- >
- <template #bodyCell="{ column, record }">
- <template v-if="column.key === 'questionType'">
- {{ questionTypeFormatter(record.questionType) }}
- </template>
- <template v-else-if="column.key === 'subjectName'">
- {{ record.subjectName }}
- </template>
- <template v-else-if="column.key === 'createTime'">
- {{ record.createTime }}
- </template>
- <template v-else-if="column.key === 'shortTitle'">
- <span :title="record.shortTitle">{{ record.shortTitle }}</span>
- </template>
- </template>
- </a-table>
- <a-pagination
- v-if="total > 0"
- :total="total"
- :current="queryParam.pageIndex"
- :page-size="queryParam.pageSize"
- @change="onPageChange"
- @showSizeChange="onPageSizeChange"
- :show-size-changer="true"
- :page-size-options="['10', '20', '50', '100']"
- style="margin-top: 20px"
- />
- </a-col>
- <a-col :span="10">
- <a-card class="record-answer-info">
- <a-form layout="vertical">
- <a-form-item>
- <QuestionAnswerShow
- :qType="selectItem.questionType"
- :qLoading="qAnswerLoading"
- :question="selectItem.questionItem"
- :answer="selectItem.answerItem"
- />
- </a-form-item>
- </a-form>
- </a-card>
- </a-col>
- </a-row>
- </div>
- </template>
- <script setup>
- import { ref, reactive, onMounted } from 'vue'
- import { useExamStore } from '@/store/exam'
- import examPaperAnswerApi from '@/api/student/questionAnswer'
- import QuestionAnswerShow from '../exam/components/QuestionAnswerShow.vue'
- const examStore = useExamStore()
- const queryParam = reactive({
- pageIndex: 1,
- pageSize: 10
- })
- const listLoading = ref(false)
- const tableData = ref([])
- const total = ref(0)
- const qAnswerLoading = ref(false)
- const selectItem = reactive({
- questionType: 0,
- questionItem: null,
- answerItem: null
- })
- const columns = [
- { title: '题干', dataIndex: 'shortTitle', key: 'shortTitle', ellipsis: true },
- { title: '题型', dataIndex: 'questionType', key: 'questionType', width: 70 },
- { title: '学科', dataIndex: 'subjectName', key: 'subjectName', width: 50 },
- { title: '做题时间', dataIndex: 'createTime', key: 'createTime', width: 170 }
- ]
- function search() {
- listLoading.value = true
- const params = { ...queryParam, current: queryParam.pageIndex, size: queryParam.pageSize }
- delete params.pageIndex
- delete params.pageSize
- examPaperAnswerApi
- .pageList(params)
- .then((data) => {
- const re = data
- tableData.value = re.records
- total.value = re.total
- queryParam.pageIndex = re.current
- listLoading.value = false
- if (re.records && re.records.length !== 0) {
- qAnswerShow(re.records[0].id)
- }
- })
- .catch(() => {
- listLoading.value = false
- })
- }
- function customRow(record) {
- return {
- onClick: () => itemSelect(record)
- }
- }
- function itemSelect(record) {
- qAnswerShow(record.id)
- }
- function qAnswerShow(id) {
- qAnswerLoading.value = true
- examPaperAnswerApi.select(id).then((re) => {
- let response = re
- selectItem.questionType = response.questionVM.questionType
- selectItem.questionItem = response.questionVM
- selectItem.answerItem = response.questionAnswerVM
- qAnswerLoading.value = false
- })
- }
- function questionTypeFormatter(type) {
- return examStore.enumFormat(examStore.exam.question.typeEnum, type)
- }
- function onPageChange(page, pageSize) {
- queryParam.pageIndex = page
- queryParam.pageSize = pageSize
- search()
- }
- function onPageSizeChange(current, size) {
- queryParam.pageIndex = 1
- queryParam.pageSize = size
- search()
- }
- onMounted(() => {
- search()
- })
- </script>
- <style lang="less" scoped>
- .app-contain {
- // 可根据需要自定义样式
- }
- .record-answer-info {
- margin-top: 20px;
- }
- </style>
|