|
|
@@ -6,13 +6,11 @@
|
|
|
<div class="content_left">
|
|
|
<el-select v-model="params.batchNo" placeholder="选择批次" @change="GoSearch()" class="select_width" >
|
|
|
<el-option label="全部批次" value=""></el-option>
|
|
|
- <el-option v-for="item in batchList"
|
|
|
- :key="item.value"
|
|
|
- :label="item.label" :value="item.value"></el-option>
|
|
|
+ <el-option v-for="item in batchList" :key="item.value" :label="'批次'+item.label" :value="item.value"></el-option>
|
|
|
</el-select>
|
|
|
- <el-select v-model="params.batchNo" placeholder="选择状态" @change="GoSearch()" class="select_width" >
|
|
|
+ <el-select v-model="params.statusStr" placeholder="选择状态" @change="GoSearch()" class="select_width" >
|
|
|
<el-option label="全部状态" value=""></el-option>
|
|
|
- <el-option v-for="item in batchList"
|
|
|
+ <el-option v-for="item in stateList"
|
|
|
:key="item.value"
|
|
|
:label="item.label" :value="item.value"></el-option>
|
|
|
</el-select>
|
|
|
@@ -26,16 +24,12 @@
|
|
|
</el-button>
|
|
|
|
|
|
|
|
|
-
|
|
|
- <!-- <el-button class="delete_item" type="text" @click="OpenDeleteAllDialog" v-if="tableData.length>0">删除所有</el-button> -->
|
|
|
- <el-button @click="OpenReIdentify" >重新识别</el-button>
|
|
|
- <el-button @click="OpenEditExamList()" type="primary" v-if="isImportStudent">编辑考场名单</el-button>
|
|
|
- <el-button @click="OpenImportStudent()" type="primary" v-else>导入考场名单</el-button>
|
|
|
+ <el-button @click="GotoScanHome()" type="primary">扫描页面</el-button>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="page_jg_20"></div>
|
|
|
<div class="page_content" >
|
|
|
- <div class="content_table">
|
|
|
+ <div class="content_table" style="width: 100%">
|
|
|
<div class="table_header">
|
|
|
<div class="header_left">
|
|
|
<div class="scan_button_header">
|
|
|
@@ -45,21 +39,36 @@
|
|
|
|
|
|
</div>
|
|
|
<div class="header_right">
|
|
|
- 客户端状态:
|
|
|
- <span class="scan_state_open" v-if="scanClientStates">
|
|
|
- <i class="iconfont icon_open"></i>已打开</span>
|
|
|
- <span class="scan_state_close" v-else>
|
|
|
- <i class="iconfont icon_close"></i>未打开</span>
|
|
|
+
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="page_jg_20"></div>
|
|
|
<div class="page_table">
|
|
|
<el-table :data="tableData" style="width: 100%" :height="tableHeight">
|
|
|
- <el-table-column prop="questionName" label="序号" width="100" align="center" >
|
|
|
+ <el-table-column type="index" label="序号" width="100" align="center" >
|
|
|
</el-table-column>
|
|
|
- <el-table-column prop="questionType" label="批次" width="120" align="center">
|
|
|
+ <el-table-column prop="batchNo" label="批次" width="120" align="center">
|
|
|
+ <template v-slot="scope">
|
|
|
+ 批次{{ scope.row.batchNo}}
|
|
|
+ </template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column prop="questionType" label="考号" width="120" align="center">
|
|
|
+ <el-table-column prop="cardNumber" label="考号" width="120" align="center">
|
|
|
+ <template v-slot="scope">
|
|
|
+ <span v-if="scope.row.cardNumber">{{ scope.row.cardNumber}}</span>
|
|
|
+ <span v-else>-</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="studentName" label="姓名" width="120" align="center">
|
|
|
+ <template v-slot="scope">
|
|
|
+ <span v-if="scope.row.studentName">{{ scope.row.studentName}}</span>
|
|
|
+ <span v-else>-</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="studentName" label="页数" width="120" align="center">
|
|
|
+ <template v-slot="scope">
|
|
|
+ <span v-if="scope.row.studentName">{{ scope.row.studentName}}</span>
|
|
|
+ <span v-else>-</span>
|
|
|
+ </template>
|
|
|
</el-table-column>
|
|
|
<el-table-column prop="date" label="客观题" align="center">
|
|
|
<template v-slot="scope">
|
|
|
@@ -84,73 +93,6 @@
|
|
|
</el-table>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div class="content_right">
|
|
|
- <div class="right_header">
|
|
|
- <span> 扫描 设置</span>
|
|
|
- <span>
|
|
|
- 识别号:
|
|
|
- <el-select v-model="params.batchNo" placeholder="请选择" @change="GoSearch()" style="width: 120px;">
|
|
|
- <el-option label="全部状态" value=""></el-option>
|
|
|
- <el-option v-for="item in batchList" :key="item.value" :label="item.label" :value="item.value"></el-option>
|
|
|
- </el-select>
|
|
|
- </span>
|
|
|
- </div>
|
|
|
- <div class="right_center">
|
|
|
- <div class="scan_buttons" @click="OpenScan">
|
|
|
- <ScanButton></ScanButton>
|
|
|
- </div>
|
|
|
- <div class="scan_list">
|
|
|
- <div class="list_item no_scan" >
|
|
|
- <div class="list_item_info " @click="GotoDetail(0)">
|
|
|
- <div class="item_info_title">
|
|
|
- 未扫描
|
|
|
- </div>
|
|
|
- <div class="item_info_number">
|
|
|
- <span class="number_no_scan">{{}}人</span>
|
|
|
- <!-- <span class="number_no_icon"><img src="../../assets/icon/no_scan_icon.png"></span> -->
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="list_item no_exam" >
|
|
|
- <div class="list_item_info " @click="GotoDetail(2)">
|
|
|
- <div class="item_info_title">
|
|
|
- 缺考
|
|
|
- </div>
|
|
|
- <div class="item_info_number">
|
|
|
- <span class="number_no_exam">{{}}人</span>
|
|
|
- <!-- <span class="number_no_icon"><img src="../../assets/icon/miss_exam.png"></span> -->
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="list_item annormal_icon" >
|
|
|
- <div class="list_item_info " @click="GotoDetail(3)">
|
|
|
- <div class="item_info_title">
|
|
|
- 异常
|
|
|
- </div>
|
|
|
- <div class="item_info_number">
|
|
|
- <span class="number_abnormal">{{}}份</span>
|
|
|
- <!-- <span class="number_no_icon"><img src="../../assets/icon/abnormal_icon.png"></span> -->
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="list_item sucess_upload" >
|
|
|
- <div class="list_item_info " @click="GotoDetail(1)">
|
|
|
- <div class="item_info_title">
|
|
|
- 已上传
|
|
|
- </div>
|
|
|
- <div class="item_info_number">
|
|
|
- <span class="number_uploaded">{{}}人</span>
|
|
|
- <!-- <span class="number_no_icon"><img src="../../assets/icon/sucess_upload.png"></span> -->
|
|
|
-
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="right_button">
|
|
|
- <el-button type="primary" @click="GoSearch()" style="width:calc(100% - 40px);">扫描完成</el-button>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
</div>
|
|
|
<SelectStudent v-model="showSelectStudent" @success="StudentSuccess"></SelectStudent>
|
|
|
</div>
|
|
|
@@ -159,9 +101,16 @@
|
|
|
import { useExamStore } from '@/store/exam'
|
|
|
import { useRouter } from 'vue-router'
|
|
|
import { onMounted ,ref,computed} from 'vue';
|
|
|
-import ScanButton from './components/scanButton.vue'
|
|
|
+import { ElMessageBox, ElMessage } from 'element-plus'
|
|
|
import SelectStudent from './components/selectStudent.vue'
|
|
|
-import { hasImportStudent, } from '@/api/exam'
|
|
|
+import { getBatchDetailList } from '@/api/exam'
|
|
|
+
|
|
|
+// 定义选项接口类型
|
|
|
+interface OptionItem {
|
|
|
+ label: string
|
|
|
+ value: string | number
|
|
|
+ sort: number
|
|
|
+}
|
|
|
// 实例化 Store
|
|
|
const examStore = useExamStore()
|
|
|
const router = useRouter()
|
|
|
@@ -173,12 +122,16 @@ const examSubjectId = computed(() => {
|
|
|
|
|
|
const params=ref({
|
|
|
batchNo:'',
|
|
|
+ statusStr:'',//状态
|
|
|
keyWord:''
|
|
|
})
|
|
|
|
|
|
-const batchList=[];
|
|
|
+const batchList = ref<OptionItem[]>([])
|
|
|
+const stateList = ref<OptionItem[]>([])
|
|
|
+
|
|
|
+
|
|
|
const listMode=ref('list');
|
|
|
-const scanClientStates=ref(false);//客户端状态
|
|
|
+
|
|
|
const tableData=ref([]);
|
|
|
|
|
|
const tableHeight=ref(500);
|
|
|
@@ -193,9 +146,9 @@ const OpenImportStudent = () => {
|
|
|
}
|
|
|
|
|
|
// 打开编辑考试名单
|
|
|
-const OpenEditExamList = () => {
|
|
|
+const GotoScanHome = () => {
|
|
|
router.push({
|
|
|
- path: '/exam/examList',
|
|
|
+ path: '/exam/scanList',
|
|
|
query: {
|
|
|
examSubjectId: examSubjectId.value,
|
|
|
},
|
|
|
@@ -203,39 +156,82 @@ const OpenEditExamList = () => {
|
|
|
}
|
|
|
|
|
|
|
|
|
+//切换模式
|
|
|
+const ChangeMode = (mode: string) => {
|
|
|
+ listMode.value = mode;
|
|
|
+}
|
|
|
+
|
|
|
+//加载数据
|
|
|
+const LoadData = () => {
|
|
|
+ if(listMode.value=='list')
|
|
|
+ {
|
|
|
+ GetScanDetailList();
|
|
|
+ }
|
|
|
+ else if(listMode.value=='pic')
|
|
|
+ {
|
|
|
+ GetScanDetailList();
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
//学生名单导入成功
|
|
|
const StudentSuccess = () => {
|
|
|
|
|
|
- HasImportStudent();
|
|
|
+
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
-//查询是否导入了学生名单
|
|
|
-const HasImportStudent = async () => {
|
|
|
+
|
|
|
+
|
|
|
+//搜索
|
|
|
+const GoSearch = () => {
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+//刷新
|
|
|
+const Refresh=() => {
|
|
|
+ GetScanDetailList();
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+//获取扫描详情 列表模式
|
|
|
+const GetScanDetailList = async () => {
|
|
|
const params = {
|
|
|
examSubjectId: examSubjectId.value,
|
|
|
+ batchNo:'',//批次号
|
|
|
+ statusStr:'',//状态
|
|
|
+ nameCode:'',//搜索条件 姓名 考号
|
|
|
schoolId: 0,//单校 0
|
|
|
+ pageNum:1,//当前页码
|
|
|
+ pageSize:10,//每页条数
|
|
|
};
|
|
|
- const res = await hasImportStudent(params);
|
|
|
- console.log("打印是否导入了学生名单",res);
|
|
|
+ const res = await getBatchDetailList(params);
|
|
|
+ console.log("打印批次详情列表",res);
|
|
|
if(res.code==200)
|
|
|
{
|
|
|
- isImportStudent.value=res.data;
|
|
|
+ batchList.value=res.data.batchSelects;
|
|
|
+ stateList.value=res.data.statusSelects;
|
|
|
+ tableData.value=res.data.pageResult.records;
|
|
|
}
|
|
|
- else{
|
|
|
- isImportStudent.value=false;
|
|
|
+ else
|
|
|
+ {
|
|
|
+ ElMessage.error(res.msg);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
+
|
|
|
onMounted(() => {
|
|
|
|
|
|
if (!examStore.currentExam) {
|
|
|
console.warn('当前没有选中的考试信息')
|
|
|
// 可选:如果没有数据,可以重定向回列表页或提示用户
|
|
|
}
|
|
|
- HasImportStudent();
|
|
|
+ LoadData();//加载数据
|
|
|
|
|
|
})
|
|
|
</script>
|