|
@@ -0,0 +1,306 @@
|
|
|
+<template>
|
|
|
+ <div class="part-box is-filter">
|
|
|
+ <el-form inline>
|
|
|
+ <el-form-item label="姓名">
|
|
|
+ <el-input
|
|
|
+ v-model.trim="searchModel.name"
|
|
|
+ placeholder="请选择"
|
|
|
+ clearable
|
|
|
+ style="width: 120px"
|
|
|
+ >
|
|
|
+ </el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="准考证号">
|
|
|
+ <el-input
|
|
|
+ v-model.trim="searchModel.examNo"
|
|
|
+ placeholder="请选择"
|
|
|
+ clearable
|
|
|
+ style="width: 120px"
|
|
|
+ >
|
|
|
+ </el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="密号">
|
|
|
+ <el-input
|
|
|
+ v-model.trim="searchModel.secretNo"
|
|
|
+ placeholder="请选择"
|
|
|
+ clearable
|
|
|
+ style="width: 120px"
|
|
|
+ >
|
|
|
+ </el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="学号">
|
|
|
+ <el-input
|
|
|
+ v-model.trim="searchModel.studentNo"
|
|
|
+ placeholder="请选择"
|
|
|
+ clearable
|
|
|
+ style="width: 120px"
|
|
|
+ >
|
|
|
+ </el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="科目">
|
|
|
+ <el-select
|
|
|
+ v-model="searchModel.subject"
|
|
|
+ placeholder="请选择"
|
|
|
+ clearable
|
|
|
+ style="width: 120px"
|
|
|
+ >
|
|
|
+ <el-option label="请选择" value="" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="层次">
|
|
|
+ <el-select
|
|
|
+ v-model="searchModel.level"
|
|
|
+ placeholder="请选择"
|
|
|
+ clearable
|
|
|
+ style="width: 120px"
|
|
|
+ >
|
|
|
+ <el-option label="请选择" value="" />
|
|
|
+ <el-option label="不限" value="不限" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="专业类型">
|
|
|
+ <el-select
|
|
|
+ v-model="searchModel.majorType"
|
|
|
+ placeholder="请选择"
|
|
|
+ clearable
|
|
|
+ style="width: 120px"
|
|
|
+ >
|
|
|
+ <el-option label="请选择" value="" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="状态">
|
|
|
+ <el-space>
|
|
|
+ <el-select
|
|
|
+ v-model="searchModel.status"
|
|
|
+ placeholder="请选择"
|
|
|
+ clearable
|
|
|
+ style="width: 120px"
|
|
|
+ >
|
|
|
+ <el-option label="不限" value="" />
|
|
|
+ </el-select>
|
|
|
+ <el-select placeholder="不限" clearable style="width: 120px">
|
|
|
+ <el-option label="不限" value="" />
|
|
|
+ </el-select>
|
|
|
+ <el-select placeholder="不限" clearable style="width: 120px">
|
|
|
+ <el-option label="不限" value="" />
|
|
|
+ </el-select>
|
|
|
+ <el-select placeholder="不限" clearable style="width: 120px">
|
|
|
+ <el-option label="不限" value="" />
|
|
|
+ </el-select>
|
|
|
+ </el-space>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="签到表编号">
|
|
|
+ <el-input
|
|
|
+ v-model.trim="searchModel.signBookNo"
|
|
|
+ placeholder="请选择"
|
|
|
+ clearable
|
|
|
+ style="width: 120px"
|
|
|
+ >
|
|
|
+ </el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="批次编号">
|
|
|
+ <el-input
|
|
|
+ v-model.trim="searchModel.batchNo"
|
|
|
+ placeholder="请选择"
|
|
|
+ clearable
|
|
|
+ style="width: 120px"
|
|
|
+ >
|
|
|
+ </el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="学院">
|
|
|
+ <el-select
|
|
|
+ v-model="searchModel.college"
|
|
|
+ placeholder="请选择"
|
|
|
+ clearable
|
|
|
+ style="width: 120px"
|
|
|
+ >
|
|
|
+ <el-option label="请选择" value="" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="班级">
|
|
|
+ <el-select
|
|
|
+ v-model="searchModel.className"
|
|
|
+ placeholder="请选择"
|
|
|
+ clearable
|
|
|
+ style="width: 120px"
|
|
|
+ >
|
|
|
+ <el-option label="请选择" value="" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="任课老师">
|
|
|
+ <el-input
|
|
|
+ v-model.trim="searchModel.teacher"
|
|
|
+ placeholder="请选择"
|
|
|
+ clearable
|
|
|
+ style="width: 120px"
|
|
|
+ >
|
|
|
+ </el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="考点">
|
|
|
+ <el-input
|
|
|
+ v-model.trim="searchModel.examSite"
|
|
|
+ placeholder="请选择"
|
|
|
+ clearable
|
|
|
+ style="width: 120px"
|
|
|
+ >
|
|
|
+ </el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="考场">
|
|
|
+ <el-input
|
|
|
+ v-model.trim="searchModel.examRoom"
|
|
|
+ placeholder="请选择"
|
|
|
+ clearable
|
|
|
+ style="width: 120px"
|
|
|
+ >
|
|
|
+ </el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="扫描张数">
|
|
|
+ <el-input-number
|
|
|
+ v-model.number="searchModel.scanPages"
|
|
|
+ :min="1"
|
|
|
+ :max="20"
|
|
|
+ :step="1"
|
|
|
+ :precision="0"
|
|
|
+ :controls="false"
|
|
|
+ step-strictly
|
|
|
+ style="width: 100px"
|
|
|
+ >
|
|
|
+ </el-input-number>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ <el-space wrap>
|
|
|
+ <el-button type="primary" @click="toPage(1)">查询</el-button>
|
|
|
+ <el-button @click="onAdd">添加</el-button>
|
|
|
+ <el-button type="success" @click="onImport">导入</el-button>
|
|
|
+ <el-button @click="exportData">导出</el-button>
|
|
|
+ </el-space>
|
|
|
+ </div>
|
|
|
+ <div class="part-box">
|
|
|
+ <el-table class="page-table" :data="dataList" :loading="loading">
|
|
|
+ <el-table-column type="index" label="序号" width="60" />
|
|
|
+ <el-table-column property="examNo" label="准考证号" width="120" />
|
|
|
+ <el-table-column property="name" label="姓名" min-width="100" />
|
|
|
+ <el-table-column property="studentNo" label="学号" width="120" />
|
|
|
+ <el-table-column property="subject" label="科目" min-width="100" />
|
|
|
+ <el-table-column property="examType" label="试卷类型" width="100" />
|
|
|
+ <el-table-column property="level" label="层次" width="80" />
|
|
|
+ <el-table-column property="majorType" label="专业类型" width="100" />
|
|
|
+ <el-table-column property="college" label="学院" width="120" />
|
|
|
+ <el-table-column property="className" label="班级" width="100" />
|
|
|
+ <el-table-column property="teacher" label="任课老师" width="100" />
|
|
|
+ <el-table-column property="examSite" label="考点" width="100" />
|
|
|
+ <el-table-column property="examRoom" label="考场" width="80" />
|
|
|
+ <el-table-column property="signBookNo" label="签到表编号" width="120" />
|
|
|
+ <el-table-column property="batchNo" label="批次编号" width="100" />
|
|
|
+ <el-table-column label="扫描识别" width="80">
|
|
|
+ <template #default="scope">
|
|
|
+ <el-tag :type="scope.row.scanRecognition ? 'success' : 'danger'">
|
|
|
+ {{ scope.row.scanRecognition ? '是' : '否' }}
|
|
|
+ </el-tag>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column property="scanPages" label="扫描张数" width="80" />
|
|
|
+ <el-table-column label="人工指定" width="80">
|
|
|
+ <template #default="scope">
|
|
|
+ <el-tag :type="scope.row.manualAssign ? 'success' : 'danger'">
|
|
|
+ {{ scope.row.manualAssign ? '是' : '否' }}
|
|
|
+ </el-tag>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="操作" width="100" fixed="right">
|
|
|
+ <template #default="scope">
|
|
|
+ <el-button size="small" link @click="onEdit(scope.row)">
|
|
|
+ 编辑
|
|
|
+ </el-button>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ <el-pagination
|
|
|
+ v-model:current-page="pagination.pageNumber"
|
|
|
+ v-model:page-size="pagination.pageSize"
|
|
|
+ :layout="pagination.layout"
|
|
|
+ :total="pagination.total"
|
|
|
+ @size-change="pageSizeChange"
|
|
|
+ @current-change="toPage"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 新增/编辑学生弹窗 -->
|
|
|
+ <ModifyStudent
|
|
|
+ ref="modifyStudentRef"
|
|
|
+ :row-data="curRow"
|
|
|
+ @modified="getList"
|
|
|
+ />
|
|
|
+
|
|
|
+ <!-- 导入学生 -->
|
|
|
+ <ImportDialog
|
|
|
+ ref="importDialogRef"
|
|
|
+ title="导入学生"
|
|
|
+ upload-url="/api/admin/site/import"
|
|
|
+ :format="['xls', 'xlsx']"
|
|
|
+ :download-handle="downloadTemplate"
|
|
|
+ download-filename="学生导入模板.xlsx"
|
|
|
+ />
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup lang="ts">
|
|
|
+ import { reactive, ref } from 'vue';
|
|
|
+ import { getStudentList } from '@/api/student';
|
|
|
+ import { StudentItem, StudentListFilter } from '@/api/types/student';
|
|
|
+ import useTable from '@/hooks/table';
|
|
|
+
|
|
|
+ import ModifyStudent from './ModifyStudent.vue';
|
|
|
+
|
|
|
+ defineOptions({
|
|
|
+ name: 'StudentManage',
|
|
|
+ });
|
|
|
+
|
|
|
+ const searchModel = reactive<StudentListFilter>({
|
|
|
+ name: '',
|
|
|
+ examNo: '',
|
|
|
+ secretNo: '',
|
|
|
+ studentNo: '',
|
|
|
+ subject: '',
|
|
|
+ level: '',
|
|
|
+ majorType: '',
|
|
|
+ status: '',
|
|
|
+ batchNo: '',
|
|
|
+ signBookNo: '',
|
|
|
+ college: '',
|
|
|
+ className: '',
|
|
|
+ teacher: '',
|
|
|
+ examSite: '',
|
|
|
+ examRoom: '',
|
|
|
+ scanPages: undefined,
|
|
|
+ });
|
|
|
+
|
|
|
+ const { dataList, pagination, loading, getList, toPage, pageSizeChange } =
|
|
|
+ useTable<StudentItem>(getStudentList, searchModel, false);
|
|
|
+
|
|
|
+ // table action
|
|
|
+ const curRow = ref({} as StudentItem);
|
|
|
+ const modifyStudentRef = ref();
|
|
|
+
|
|
|
+ function onEdit(row: StudentItem) {
|
|
|
+ curRow.value = row;
|
|
|
+ modifyStudentRef.value?.open();
|
|
|
+ }
|
|
|
+
|
|
|
+ function onAdd() {
|
|
|
+ curRow.value = {} as StudentItem;
|
|
|
+ modifyStudentRef.value?.open();
|
|
|
+ }
|
|
|
+
|
|
|
+ // 导入学生
|
|
|
+ const importDialogRef = ref();
|
|
|
+ function downloadTemplate() {
|
|
|
+ // TODO: 实现下载模板功能
|
|
|
+ }
|
|
|
+ function onImport() {
|
|
|
+ importDialogRef.value?.open();
|
|
|
+ }
|
|
|
+
|
|
|
+ function exportData() {
|
|
|
+ // TODO: 实现导出功能
|
|
|
+ }
|
|
|
+</script>
|