|
|
@@ -71,7 +71,7 @@
|
|
|
</el-table-column>
|
|
|
<el-table-column prop="name" label="操作" width="250" align="center">
|
|
|
<template v-slot="scope">
|
|
|
- <div class="ele_button table_row_button" v-if="scope.row.uploadStatus==0">
|
|
|
+ <div class="ele_button table_row_button" v-if="scope.row.uploadStatus==0" style="color:#2E64FA;">
|
|
|
<i class="el-icon-loading"></i>{{loadingText}}……
|
|
|
</div>
|
|
|
<div class="ele_button table_row_button" v-else>
|
|
|
@@ -97,16 +97,16 @@
|
|
|
</div>
|
|
|
<div class="right_center">
|
|
|
<div class="scan_buttons">
|
|
|
- <ScanButton @click="OpenScan()"></ScanButton>
|
|
|
+ <ScanButton :process="scanProcess" :quekao="scanQuekao" :yichang="scanYichang" @click="OpenScan()"></ScanButton>
|
|
|
</div>
|
|
|
<div class="scan_list">
|
|
|
<div class="list_item no_scan" >
|
|
|
- <div class="list_item_info " @click="GotoDetail(0)">
|
|
|
+ <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_scan">{{scanDataInfo.unScanned}}人</span>
|
|
|
<!-- <span class="number_no_icon"><img src="../../assets/icon/no_scan_icon.png"></span> -->
|
|
|
</div>
|
|
|
</div>
|
|
|
@@ -117,7 +117,7 @@
|
|
|
缺考
|
|
|
</div>
|
|
|
<div class="item_info_number">
|
|
|
- <span class="number_no_exam">{{}}人</span>
|
|
|
+ <span class="number_no_exam">{{scanDataInfo.examMissNum}}人</span>
|
|
|
<!-- <span class="number_no_icon"><img src="../../assets/icon/miss_exam.png"></span> -->
|
|
|
</div>
|
|
|
</div>
|
|
|
@@ -128,7 +128,7 @@
|
|
|
异常
|
|
|
</div>
|
|
|
<div class="item_info_number">
|
|
|
- <span class="number_abnormal">{{}}份</span>
|
|
|
+ <span class="number_abnormal">{{scanDataInfo.abnormalNum}}份</span>
|
|
|
<!-- <span class="number_no_icon"><img src="../../assets/icon/abnormal_icon.png"></span> -->
|
|
|
</div>
|
|
|
</div>
|
|
|
@@ -139,7 +139,7 @@
|
|
|
已上传
|
|
|
</div>
|
|
|
<div class="item_info_number">
|
|
|
- <span class="number_uploaded">{{}}人</span>
|
|
|
+ <span class="number_uploaded">{{scanDataInfo.scannedNum}}人</span>
|
|
|
<!-- <span class="number_no_icon"><img src="../../assets/icon/sucess_upload.png"></span> -->
|
|
|
|
|
|
</div>
|
|
|
@@ -162,7 +162,7 @@ import { useRouter } from 'vue-router'
|
|
|
import { onMounted ,ref,computed,onUnmounted,nextTick } from 'vue';
|
|
|
import ScanButton from './components/scanButton.vue'
|
|
|
import SelectStudent from './components/selectStudent.vue'
|
|
|
-import { hasImportStudent,getBatchList,getCurrentBatchNo,deleteBatch } from '@/api/exam'
|
|
|
+import { hasImportStudent,getBatchList,getCurrentBatchNo,deleteBatch,updateScanCount } from '@/api/exam'
|
|
|
import scanCommon from '@/utils/scanCommon';
|
|
|
import { ElMessageBox, ElMessage } from 'element-plus'
|
|
|
import { formatTimestamp } from '@/utils/common';
|
|
|
@@ -203,8 +203,21 @@ const loadingText=ref('');//加载文本
|
|
|
const baseUrl=import.meta.env.VITE_API_BASE_URL;
|
|
|
const uploadUrl=`https://dev3.k12100.net/teaching/api/v1/ai_exam_scan/upload_multi_img`;//图片上传地址
|
|
|
|
|
|
-const tableData=ref([]);//批次列表
|
|
|
|
|
|
+// 定义数据类型接口
|
|
|
+interface BatchItem {
|
|
|
+ id?: string | number;
|
|
|
+ batchNo: string;
|
|
|
+ batchTypeName?: string;
|
|
|
+ scanUserName?: string;
|
|
|
+ scannedPaperNum?: number;
|
|
|
+ scannedTime?: number | string;
|
|
|
+ uploadNum?: number;
|
|
|
+ uploadStatus?: number; // 确保包含此属性
|
|
|
+ failedNumber?: number;
|
|
|
+ [key: string]: any; // 允许其他动态属性
|
|
|
+}
|
|
|
+const tableData=ref<BatchItem[]>([]); //批次列表
|
|
|
const tableHeight=ref(500);
|
|
|
const scanIdentifyList=[
|
|
|
{
|
|
|
@@ -219,7 +232,30 @@ const scanIdentifyList=[
|
|
|
|
|
|
const isImportStudent=ref(false);//是否导入了学生名单
|
|
|
const showSelectStudent=ref(false);//是否显示选择学生名单弹窗
|
|
|
+const scanDataInfo=ref({
|
|
|
+ abnormalNum:0,//异常数量
|
|
|
+ examMissNum:0,//缺考数量
|
|
|
+ unScanned:0,//未扫描数量
|
|
|
+ scannedNum:0,//已上传数量
|
|
|
+ examTotal:0,//考试总人数
|
|
|
+
|
|
|
+});//扫描返回的数据信息
|
|
|
+
|
|
|
+//扫描进度
|
|
|
+const scanProcess=computed(() => {
|
|
|
+
|
|
|
+ return Math.floor((scanDataInfo.value.scannedNum+scanDataInfo.value.examMissNum)/scanDataInfo.value.examTotal)*100;
|
|
|
+});
|
|
|
|
|
|
+//缺考进度
|
|
|
+const scanQuekao=computed(() => {
|
|
|
+ return Math.floor((scanDataInfo.value.examMissNum)/scanDataInfo.value.examTotal)*100;
|
|
|
+});
|
|
|
+//异常进度
|
|
|
+const scanYichang=computed(() => {
|
|
|
+
|
|
|
+ return Math.floor((scanDataInfo.value.abnormalNum)/scanDataInfo.value.examTotal)*100;
|
|
|
+});
|
|
|
//刷新
|
|
|
const Refresh = () => {
|
|
|
|
|
|
@@ -457,6 +493,11 @@ const GetScanBatchList=async()=>{
|
|
|
{
|
|
|
tableData.value=res.data.scannedWebSocketVO.data;
|
|
|
selectSchoolId.value=res.data.schoolId;//获取学校id
|
|
|
+ scanDataInfo.value.abnormalNum=res.data.scannedWebSocketVO.abnormalNum;//异常数量
|
|
|
+ scanDataInfo.value.examMissNum=res.data.scannedWebSocketVO.examMissNum;//缺考数量
|
|
|
+ scanDataInfo.value.scannedNum=res.data.scannedWebSocketVO.scannedNum;//已上传数量
|
|
|
+ scanDataInfo.value.unScanned=res.data.scannedWebSocketVO.unScanned;//未扫描数量
|
|
|
+ scanDataInfo.value.examTotal=res.data.scannedWebSocketVO.examTotal;//总人数
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -479,116 +520,132 @@ const CalculateTableHeight = () => {
|
|
|
tableHeight.value = computedHeight;
|
|
|
});
|
|
|
};
|
|
|
+
|
|
|
+
|
|
|
+//更新扫描张数
|
|
|
+const UpdateBatchScanNumber = (batchId: any, scanNumber: Number) => {
|
|
|
+ const params={
|
|
|
+ id:batchId,
|
|
|
+ recordNumber: scanNumber,
|
|
|
+ };
|
|
|
+ updateScanCount(params).then((res:any)=>{
|
|
|
+ if(res.code==200)
|
|
|
+ {
|
|
|
+ console.log("第"+batchId+"批次更新扫描张数"+scanNumber+"成功", res);
|
|
|
+ }
|
|
|
+
|
|
|
+ })
|
|
|
+};
|
|
|
// 处理扫描结果
|
|
|
const HandleScanResult = (res: any) => {
|
|
|
- console.log('收到扫描数据', res);
|
|
|
- // 业务逻辑...
|
|
|
- if (res.action == 'uploading') {
|
|
|
- let batchNumber: any = '';
|
|
|
- if (res.batchNumber)
|
|
|
+ console.log('收到扫描数据', res);
|
|
|
+ // 业务逻辑...
|
|
|
+ if (res.action == 'uploading')
|
|
|
+ {
|
|
|
+ let batchNumber: any = '';
|
|
|
+ if (res.batchNumber)
|
|
|
+ {
|
|
|
+ batchNumber = GetBatchNumber(res.batchNumber || res.data?.batchNumber);
|
|
|
+ }
|
|
|
+ const targetItem = tableData.value.find((item: any) => item.batchNo == batchNumber);
|
|
|
+
|
|
|
+ if (typeof loadingText !== 'undefined') loadingText.value = "启动扫描仪中";
|
|
|
+
|
|
|
+ ElMessage.success("正在启动扫描仪,请稍后…");
|
|
|
+ if (targetItem)
|
|
|
+ {
|
|
|
+ targetItem.uploadStatus = 0; //更新上传状态 0 开始上传
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 开始扫描指令
|
|
|
+ if (res.action == 'startScan')
|
|
|
{
|
|
|
- batchNumber = GetBatchNumber(res.batchNumber || res.data?.batchNumber);
|
|
|
- }
|
|
|
- const targetItem = tableData.value.find((item: any) => item.batchNo == batchNumber);
|
|
|
|
|
|
- if (typeof loadingText !== 'undefined') loadingText.value = "启动扫描仪中";
|
|
|
+ let batchNumber = GetBatchNumber(res?.batchNumber || res.data?.batchNumber);
|
|
|
+ let currentItem = tableData.value.find((item: any) => item.batchNo == batchNumber);
|
|
|
+ console.log("打印currentItem", currentItem);
|
|
|
+
|
|
|
+ //开始扫描指令
|
|
|
+ if (res.code == 200) {
|
|
|
+ ElMessage.success("扫描仪启动成功,开始扫描…");
|
|
|
+ if (typeof loadingText !== 'undefined') loadingText.value = "正在扫描中";
|
|
|
+ }
|
|
|
+
|
|
|
+ if (res.code == 502)
|
|
|
+ {
|
|
|
+ console.log("开始扫描指令502错误 未检测到纸张或者卡纸", res);
|
|
|
+ console.log("打印currentItem", currentItem);
|
|
|
+ if (currentItem) {
|
|
|
+ currentItem.uploadStatus = 1; //更新上传状态
|
|
|
+ }
|
|
|
+ if (typeof loadingText !== 'undefined') loadingText.value = ""; //清空上传提示
|
|
|
+ isScanning.value = false; //重置扫描状态
|
|
|
+ ElMessage.error(res.msg);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (res.code == 510)
|
|
|
+ {
|
|
|
+ console.log("启动扫描失败,上传正在进行中", res);
|
|
|
+ isScanning.value = true; //重置扫描状态
|
|
|
+ ElMessage.warning(res.msg + '请勿重复点击');
|
|
|
+ }
|
|
|
+
|
|
|
+ if (res.code == 509) {
|
|
|
+ console.log("扫描仪正在使用中", res);
|
|
|
|
|
|
- ElMessage.success("正在启动扫描仪,请稍后…");
|
|
|
- if (targetItem)
|
|
|
- {
|
|
|
- targetItem.uploadStatus = 0; //更新上传状态 0 开始上传
|
|
|
- }
|
|
|
- }
|
|
|
+ if (res.msg == '未找到指定的扫描仪') {
|
|
|
+ isScanning.value = false; //重置扫描状态
|
|
|
+ }
|
|
|
|
|
|
- if (res.action == 'startScan') {
|
|
|
- // 修复:直接调用 GetBatchNumber,去掉 this
|
|
|
- let batchNumber = GetBatchNumber(res?.batchNumber || res.data?.batchNumber);
|
|
|
- // 修复:tableData.value
|
|
|
- let currentItem = tableData.value.find((item: any) => item.batchNo == batchNumber);
|
|
|
- console.log("打印currentItem", currentItem);
|
|
|
-
|
|
|
- //开始扫描指令
|
|
|
- if (res.code == 200) {
|
|
|
- ElMessage.success("扫描仪启动成功,开始扫描…");
|
|
|
- if (typeof loadingText !== 'undefined') loadingText.value = "正在扫描中";
|
|
|
- }
|
|
|
-
|
|
|
- if (res.code == 502)
|
|
|
- {
|
|
|
- console.log("开始扫描指令502错误 未检测到纸张或者卡纸", res);
|
|
|
- console.log("打印currentItem", currentItem);
|
|
|
- if (currentItem) {
|
|
|
- currentItem.uploadStatus = 1; //更新上传状态
|
|
|
- }
|
|
|
- if (typeof loadingText !== 'undefined') loadingText.value = ""; //清空上传提示
|
|
|
- isScanning.value = false; //重置扫描状态
|
|
|
- ElMessage.error(res.msg);
|
|
|
- }
|
|
|
-
|
|
|
- if (res.code == 510)
|
|
|
- {
|
|
|
- console.log("启动扫描失败,上传正在进行中", res);
|
|
|
- isScanning.value = true; //重置扫描状态
|
|
|
- ElMessage.warning(res.msg + '请勿重复点击');
|
|
|
+ ElMessage.warning(res.msg + ',请稍后再试!');
|
|
|
+ if (currentItem) {
|
|
|
+ currentItem.uploadStatus = 1; //更新上传状态
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
- if (res.code == 509) {
|
|
|
- console.log("扫描仪正在使用中", res);
|
|
|
-
|
|
|
- if (res.msg == '未找到指定的扫描仪') {
|
|
|
+ // 扫描完成指令
|
|
|
+ if (res.action == 'uploadFinish') {
|
|
|
+ console.log("上传完成uploadFinish 更新上传动画状态", res);
|
|
|
+
|
|
|
+ // 修复:直接调用 GetBatchNumber
|
|
|
+ let batchNumber = GetBatchNumber(res?.batchNumber || res.data?.batchNumber);
|
|
|
+ let targetItem = tableData.value.find((item: any) => item.batchNo == batchNumber);
|
|
|
+
|
|
|
+ if (typeof loadingText !== 'undefined') loadingText.value = '正在上传中';
|
|
|
+
|
|
|
+ if (targetItem) {
|
|
|
+ targetItem.scannedPaperNum = res.scanNumber; //更新扫描张数
|
|
|
+ targetItem.failedNumber = res.failedNumber; //更新失败张数
|
|
|
+
|
|
|
+ if (typeof UpdateBatchScanNumber === 'function') {
|
|
|
+ UpdateBatchScanNumber(targetItem.id, Number(targetItem.scannedPaperNum));
|
|
|
+ }
|
|
|
+ }
|
|
|
isScanning.value = false; //重置扫描状态
|
|
|
- }
|
|
|
-
|
|
|
- ElMessage.warning(res.msg + ',请稍后再试!');
|
|
|
- if (currentItem) {
|
|
|
- currentItem.uploadStatus = 1; //更新上传状态
|
|
|
- }
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- if (res.action == 'uploadFinish') {
|
|
|
- console.log("上传完成uploadFinish 更新上传动画状态", res);
|
|
|
-
|
|
|
- // 修复:直接调用 GetBatchNumber
|
|
|
- let batchNumber = GetBatchNumber(res?.batchNumber || res.data?.batchNumber);
|
|
|
- let targetItem = tableData.value.find((item: any) => item.batchNo == batchNumber);
|
|
|
-
|
|
|
- if (typeof loadingText !== 'undefined') loadingText.value = '正在上传中';
|
|
|
-
|
|
|
- if (targetItem) {
|
|
|
- targetItem.scannedPaperNum = res.scanNumber; //更新扫描张数
|
|
|
- targetItem.failedNumber = res.failedNumber; //更新失败张数
|
|
|
-
|
|
|
- // 修复:确保 UpdateBatchScanNumber 已定义并直接调用
|
|
|
- if (typeof UpdateBatchScanNumber === 'function') {
|
|
|
- UpdateBatchScanNumber(targetItem.id, targetItem.scannedPaperNum);
|
|
|
- }
|
|
|
+ if (res.action == 'uploadNumber') {
|
|
|
+ console.log("上传完成uploadNumber 更新上传张数", res);
|
|
|
+ // 逻辑已注释,保持原样
|
|
|
}
|
|
|
- isScanning.value = false; //重置扫描状态
|
|
|
- }
|
|
|
-
|
|
|
- if (res.action == 'uploadNumber') {
|
|
|
- console.log("上传完成uploadNumber 更新上传张数", res);
|
|
|
- // 逻辑已注释,保持原样
|
|
|
- }
|
|
|
|
|
|
- if (res.action == 'scanNumber') {
|
|
|
- console.log("扫描张数scanNumber 更新扫描张数");
|
|
|
- // 修复:直接调用 GetBatchNumber
|
|
|
- let batchNumber = GetBatchNumber(res.batchNumber || res.data?.batchNumber);
|
|
|
- let targetItem = tableData.value.find((item: any) => item.batchNo == batchNumber);
|
|
|
- console.log("打印targetItem", targetItem);
|
|
|
-
|
|
|
- if (targetItem) {
|
|
|
- targetItem.scannedPaperNum = res.number; //更新上传张数
|
|
|
- targetItem.uploadStatus = 0; //更新上传状态 0 开始上传
|
|
|
- }
|
|
|
-
|
|
|
- // 修复:确保 UpdateBatchScanNumber 已定义
|
|
|
- if (targetItem && typeof UpdateBatchScanNumber === 'function') {
|
|
|
- UpdateBatchScanNumber(targetItem.id, targetItem.scannedPaperNum);
|
|
|
+ if (res.action == 'scanNumber') {
|
|
|
+ console.log("扫描张数scanNumber 更新扫描张数");
|
|
|
+ // 修复:直接调用 GetBatchNumber
|
|
|
+ let batchNumber = GetBatchNumber(res.batchNumber || res.data?.batchNumber);
|
|
|
+ let targetItem = tableData.value.find((item: any) => item.batchNo == batchNumber);
|
|
|
+ console.log("打印targetItem", targetItem);
|
|
|
+
|
|
|
+ if (targetItem) {
|
|
|
+ targetItem.scannedPaperNum = res.number; //更新上传张数
|
|
|
+ targetItem.uploadStatus = 0; //更新上传状态 0 开始上传
|
|
|
+ }
|
|
|
+
|
|
|
+ // 修复:确保 UpdateBatchScanNumber 已定义
|
|
|
+ if (targetItem && typeof UpdateBatchScanNumber === 'function') {
|
|
|
+ UpdateBatchScanNumber(targetItem.id, Number(targetItem.scannedPaperNum));
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
if (res.action == 'loadImage') {
|
|
|
console.log("加载图片loadImage 获取图片数据", res);
|
|
|
@@ -688,6 +745,7 @@ const HandleScanResult = (res: any) => {
|
|
|
if (res.action == 'scanFinishBatch') {
|
|
|
if (typeof loadingText !== 'undefined') loadingText.value = '本次扫描结束';
|
|
|
console.log("本批次扫描完成scanFinishBatch 更新扫描张数", res);
|
|
|
+
|
|
|
}
|
|
|
|
|
|
};
|
|
|
@@ -697,10 +755,10 @@ onMounted(() => {
|
|
|
scanCommon.init(HandleScanResult);
|
|
|
// 监听连接状态
|
|
|
scanCommon.watchConnection((isOnline,clientVersion) => {
|
|
|
- console.log('连接状态:', isOnline ? '在线' : '离线');
|
|
|
+
|
|
|
scanClientStates.value=isOnline;
|
|
|
scanClientVersion.value=clientVersion; //客户端版本号
|
|
|
- console.log("客户端版本",clientVersion);
|
|
|
+ // console.log("客户端版本",clientVersion);
|
|
|
});
|
|
|
if (!examStore.currentExam) {
|
|
|
console.warn('当前没有选中的考试信息')
|