<script lang="ts" setup>
|
import type { ActionItem, BasicColumn } from '@jnpf/ui/vxeTable';
|
|
import type { GradeSessionListItem } from './types';
|
|
import { useRouter } from 'vue-router';
|
|
import { BasicVxeTable, TableAction, useVxeTable } from '@jnpf/ui/vxeTable';
|
|
import { getGradeSessionList } from '#/api/x/tms/examGrade';
|
import { TMS_BTN } from '#/views/x/tms/shared/ui';
|
|
import '#/views/x/tms/shared/page.css';
|
|
defineOptions({ name: 'TmsExamGrade' });
|
|
const router = useRouter();
|
|
const columns: BasicColumn[] = [
|
{ title: '试卷编号', dataIndex: 'taskNo', width: 140 },
|
{ title: '培训主题', dataIndex: 'taskSubject', minWidth: 260 },
|
{ title: '试卷名称', dataIndex: 'paperName', minWidth: 200 },
|
{
|
title: '考试时间',
|
dataIndex: 'examTime',
|
minWidth: 220,
|
slots: { default: 'examTime' },
|
},
|
{
|
title: '卷面总分',
|
dataIndex: 'totalScore',
|
width: 100,
|
align: 'center',
|
slots: { default: 'totalScore' },
|
},
|
{
|
title: '合格分数',
|
dataIndex: 'passScore',
|
width: 100,
|
align: 'center',
|
slots: { default: 'passScore' },
|
},
|
];
|
|
const [registerTable] = useVxeTable({
|
api: fetchList,
|
columns,
|
immediate: true,
|
rowKey: 'id',
|
useSearchForm: true,
|
formConfig: {
|
baseColProps: { span: 6 },
|
compact: true,
|
schemas: [
|
{
|
field: 'taskNo',
|
label: '试卷编号',
|
component: 'Input',
|
componentProps: { placeholder: '请输入试卷编号', submitOnPressEnter: true },
|
},
|
{
|
field: 'keyword',
|
label: '关键词',
|
component: 'Input',
|
componentProps: { placeholder: '主题/试卷名称', submitOnPressEnter: true },
|
},
|
],
|
},
|
actionColumn: {
|
width: 100,
|
title: '操作',
|
dataIndex: 'action',
|
fixed: 'right',
|
},
|
});
|
|
async function fetchList(params: Record<string, any>) {
|
const page = await getGradeSessionList(params);
|
return {
|
data: {
|
list: Array.isArray(page?.list) ? page.list : [],
|
pagination: page?.pagination || { total: 0 },
|
},
|
};
|
}
|
|
function handleEnter(record: GradeSessionListItem) {
|
router.push(`/tms/examGrade/session/${record.id}`);
|
}
|
|
function getTableActions(record: GradeSessionListItem): ActionItem[] {
|
return [{ label: TMS_BTN.grade, onClick: handleEnter.bind(null, record) }];
|
}
|
</script>
|
|
<template>
|
<div class="jnpf-content-wrapper">
|
<div class="jnpf-content-wrapper-center">
|
<div class="jnpf-content-wrapper-content">
|
<BasicVxeTable @register="registerTable">
|
<template #tableTitle>
|
<div>
|
<div class="tms-page-header__title">考试阅卷</div>
|
<div class="tms-page-header__sub">选择场次进入答卷列表,对待阅试卷评分。</div>
|
</div>
|
</template>
|
<template #examTime="{ record }">
|
<div class="leading-5">
|
<div>{{ record.durationMin }} 分钟</div>
|
<div class="text-gray-400 text-xs">{{ record.examStart }} 到 {{ record.examEnd }}</div>
|
</div>
|
</template>
|
<template #totalScore="{ record }">
|
<div class="leading-5">
|
<div class="text-xs text-gray-400">总分</div>
|
<div>{{ record.totalScore }}分</div>
|
</div>
|
</template>
|
<template #passScore="{ record }">
|
<div class="leading-5">
|
<div class="text-xs text-gray-400">合格分</div>
|
<div>{{ record.passScore }}分</div>
|
</div>
|
</template>
|
<template #action="{ record }">
|
<TableAction :actions="getTableActions(record)" />
|
</template>
|
</BasicVxeTable>
|
</div>
|
</div>
|
</div>
|
</template>
|