fix: 优化考生列表界面一些逻辑
This commit is contained in:
		
							parent
							
								
									c80ab32e5d
								
							
						
					
					
						commit
						59a54c0ec7
					
				| @ -45,10 +45,10 @@ export async function faceCompare(params: FaceCompareParams) { | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| export async function getExaminationStudentInfo(params: ESObject) { | ||||
| export async function getExaminationStudentInfo(params: ExaminationStuAbsentParams) { | ||||
|   return request<GetExaminationStudentInfoResponse>({ | ||||
|     url: '/der2/services/exam/getExaminationStudentInfo.ws', | ||||
|     data: params, | ||||
|     data: `<getExaminationStudentInfoReq><head><checkCode>${params.md5Message}</checkCode></head><body><carId>${params.carId}</carId><examinationRoomId>${params.examinationRoomId}</examinationRoomId><examinerName>${params.username}</examinerName><sfzmhm></sfzmhm></body></getExaminationStudentInfoReq>`, | ||||
|     method: http.RequestMethod.POST, | ||||
|     xml: true | ||||
|   }) | ||||
|  | ||||
| @ -34,3 +34,46 @@ export interface CheckItemType { | ||||
|   audio: string; | ||||
|   message: string; | ||||
| } | ||||
| // const SYSSET_VNO = { | ||||
| //   SERIAL_NUMBER: '901', | ||||
| //   EXAM_SYSTEM_CODE: '902', | ||||
| //   STUDENT_REFRESH: '452', | ||||
| //   OPEN_CHECK_FLAG: '17', | ||||
| //   FACE_PARAM: '2413', | ||||
| //   JUDGMENT_TIMING: '364', | ||||
| //   SECOND_EXAM_PREPARE: '398', | ||||
| //   NO_ABSENT_FUNCTION: '770', | ||||
| //   SEATBELT_DOOR: '803', | ||||
| //   EXAM_ORDER: '341', | ||||
| //   EXAM_TRIGGER: '612', | ||||
| //   NO_ABSENT_AFTER_ONCE: '352', | ||||
| //   EXAMINER_DISPLAY: '828', | ||||
| //   VIDEO_SAVE_DAYS: '305' | ||||
| // }; | ||||
| export const SYSSET_VNO_MAP=new Map([ | ||||
|   ['SERIAL_NUMBER', '901'], | ||||
|   ['EXAM_SYSTEM_CODE', '902'], | ||||
|   ['STUDENT_REFRESH', '452'], | ||||
|   ['OPEN_CHECK_FLAG', '17'], | ||||
|   ['FACE_PARAM', '2413'], | ||||
|   ['JUDGMENT_TIMING', '364'], | ||||
|   ['SECOND_EXAM_PREPARE', '398'], | ||||
|   ['NO_ABSENT_FUNCTION', '770'], | ||||
|   ['SEATBELT_DOOR', '803'], | ||||
|   ['EXAM_ORDER', '341'], | ||||
|   ['EXAM_TRIGGER', '612'], | ||||
|   ['NO_ABSENT_AFTER_ONCE', '352'], | ||||
|   ['EXAMINER_DISPLAY', '828'], | ||||
|   ['VIDEO_SAVE_DAYS', '305'] | ||||
| ]) | ||||
| //   // 定义更新策略常量 | ||||
| //   const REFRESH_STRATEGY = { | ||||
| //   NO_AUTO: '0', | ||||
| //   AUTO_UNLIMITED: '1', | ||||
| //   AUTO_TWICE: '2' | ||||
| // }; | ||||
| export const REFRESH_STRATEGY_MAP=new Map([ | ||||
|   ['NO_AUTO', '0'], | ||||
|   ['AUTO_UNLIMITED', '1'], | ||||
|   ['AUTO_TWICE', '2'] | ||||
| ]) | ||||
| @ -276,9 +276,10 @@ interface GetExaminationItemRspBody { | ||||
| 
 | ||||
| export interface ExaminationStuAbsentParams { | ||||
|   carId: string; | ||||
|   sfzmhm: string; | ||||
|   sfzmhm?: string; | ||||
|   examinationRoomId: string; | ||||
|   username: string; | ||||
|   lsh: string; | ||||
|   lsh?: string; | ||||
|   md5Message?: string | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -25,9 +25,11 @@ import { | ||||
|   IdCard, | ||||
|   LabelBlockType, | ||||
|   MASYSSETTableType, | ||||
|   REFRESH_STRATEGY_MAP, | ||||
|   RegulatoryInterfaceParams, | ||||
|   RouteParamsType, | ||||
|   SckType, | ||||
|   SYSSET_VNO_MAP, | ||||
|   SystemParamType, | ||||
|   UDPParamType, | ||||
|   User | ||||
| @ -362,7 +364,6 @@ struct UserInfoPage { | ||||
|     }) | ||||
|     this.dataList = this.list.slice(this.pageIndex * 4, this.pageIndex * 4 + 4) | ||||
|     if (!flag) { | ||||
| 
 | ||||
|       AppStorage.setOrCreate('lsh', '0000000000000') | ||||
|       await SqlInsertTable('USER', []) | ||||
|       setTimeout(() => { | ||||
| @ -459,9 +460,6 @@ struct UserInfoPage { | ||||
|       AppStorage.setOrCreate('examinerInfo', this.examinerLoginInfo) | ||||
|       AppStorage.setOrCreate('lsh', this.lsh) | ||||
|     } | ||||
| 
 | ||||
|     // const syssetParams = await getSyncData('MA_SYSSET'); | ||||
| 
 | ||||
|   } | ||||
| 
 | ||||
|   async heartMsg() { | ||||
| @ -484,117 +482,146 @@ struct UserInfoPage { | ||||
|   } | ||||
| 
 | ||||
|   async initSysset() { | ||||
|     const that = this; | ||||
|     GetSyncData<MASYSSETTableType>("MA_SYSSET").then((syssetParams: MASYSSETTableType[]) => { | ||||
|       const serialNumberArr = syssetParams.filter(sys => sys.v_no === '901') | ||||
|       that.jkxlh = serialNumberArr?.[0]?.v_value || '' | ||||
|       const ksxtbhArr = syssetParams.filter(sys => sys.v_no === '902') | ||||
|       that.ksxtbh = ksxtbhArr?.[0]?.v_value || '222' | ||||
|       const studentRefreshParam = syssetParams.filter(sys => sys.v_no === '452') //判断自动更新 | ||||
|       that.studentRefreshStatue = studentRefreshParam?.[0]?.v_value || '0' | ||||
|       const openCheckFlagParam = syssetParams.filter(sys => sys.v_no == '17') //0 | ||||
|       const openCheckFlag = openCheckFlagParam?.[0]?.v_value == '1' ? '1' : '0' | ||||
|     // 使用 try-catch 处理可能的异常 | ||||
|     try { | ||||
|       const syssetParams = await GetSyncData<MASYSSETTableType>("MA_SYSSET"); | ||||
|       // 创建映射表以避免多次 filter 操作 | ||||
|       const syssetMap = new Map<string, MASYSSETTableType>(); | ||||
|       syssetParams.forEach(sys => syssetMap.set(sys.v_no!, sys)); | ||||
| 
 | ||||
|       const faceParam = syssetParams.filter(sys => sys.v_no == '2413') //3 | ||||
|       dConsole.log('FaceOpenStatue', openCheckFlag, this.FaceOpenStatue) | ||||
|       // 1身份证读卡器 2指纹 3人脸 | ||||
|       if (openCheckFlag == '1') { | ||||
|         that.FaceOpenStatue = faceParam?.[0]?.v_value == '3' ? '1' : '0' | ||||
|         this.faceFlag = faceParam?.[0]?.v_value || '0' | ||||
|         if (faceParam?.[0]?.v_value == '1') { | ||||
|           that.openDeviceByIDCard() | ||||
|       // 使用映射表获取所需参数 | ||||
|       this.jkxlh = syssetMap.get(SYSSET_VNO_MAP.get('SERIAL_NUMBER')!)?.v_value || ''; | ||||
|       this.ksxtbh = syssetMap.get(SYSSET_VNO_MAP.get("EXAM_SYSTEM_CODE")!)?.v_value || '222'; | ||||
|       this.studentRefreshStatue = syssetMap.get(SYSSET_VNO_MAP.get("STUDENT_REFRESH")!)?.v_value || '0'; | ||||
| 
 | ||||
|       // 获取验证标志和人脸参数 | ||||
|       const openCheckFlagParam = syssetMap.get(SYSSET_VNO_MAP.get("OPEN_CHECK_FLAG")!); | ||||
|       const openCheckFlag = openCheckFlagParam?.v_value === '1' ? '1' : '0'; | ||||
|       const faceParam = syssetMap.get(SYSSET_VNO_MAP.get("FACE_PARAM")!); | ||||
| 
 | ||||
|       dConsole.log('FaceOpenStatue', openCheckFlag, this.FaceOpenStatue); | ||||
| 
 | ||||
|       // 处理人脸识别状态 | ||||
|       if (openCheckFlag === '1') { | ||||
|         const faceValue = faceParam?.v_value || '0'; | ||||
|         this.FaceOpenStatue = faceValue === '3' ? '1' : '0'; | ||||
|         this.faceFlag = faceValue; | ||||
| 
 | ||||
|         if (faceValue === '1') { | ||||
|           this.openDeviceByIDCard(); | ||||
|         } | ||||
|       } | ||||
|       // let a = await this.fileUtil.initFolder("/config/temptable") | ||||
|       // this.fileUtil.addFile("temp.log", JSON.stringify(syssetParams)) | ||||
| 
 | ||||
|       // 遍历处理系统参数 | ||||
|       syssetParams.forEach(sys => { | ||||
|         //364	绕车一周评判时机(1-开始考试后判 2-开始考试前判) | ||||
|         if (sys.v_no === '364' && decodeURIComponent(sys.v_value || "") == '2') { | ||||
|           this.systemParam.Param364 = sys.v_value || "" | ||||
|           that.isBoardPrePareSetPopupOpen = true; | ||||
|           that.isFirstBoardPrePareSetPopupBtnShow = false | ||||
|         } | ||||
|         const vNo = sys.v_no; | ||||
|         const vValue = decodeURIComponent(sys.v_value || ''); | ||||
| 
 | ||||
|         //398参数为1 第二场考试上车准备不考 | ||||
|         if (sys.v_no === '398' && decodeURIComponent(sys.v_value || "") == '1') { | ||||
|           that.systemParam.Param398 = decodeURIComponent(sys.v_value || "") | ||||
|           that.isSecondBoardPrePareSetPopupOpen = true; | ||||
|         switch (vNo) { | ||||
|           case SYSSET_VNO_MAP.get("JUDGMENT_TIMING"): | ||||
|           // 绕车一周评判时机 | ||||
|             if (vValue === '2') { | ||||
|               this.systemParam.Param364 = sys.v_value || ''; | ||||
|               this.isBoardPrePareSetPopupOpen = true; | ||||
|               this.isFirstBoardPrePareSetPopupBtnShow = false; | ||||
|             } | ||||
|             break; | ||||
| 
 | ||||
|           case SYSSET_VNO_MAP.get("SECOND_EXAM_PREPARE"): | ||||
|           // 第二场考试上车准备不考 | ||||
|             if (vValue === '1') { | ||||
|               this.systemParam.Param398 = vValue; | ||||
|               this.isSecondBoardPrePareSetPopupOpen = true; | ||||
|             } | ||||
|             break; | ||||
| 
 | ||||
|           case SYSSET_VNO_MAP.get("NO_ABSENT_FUNCTION"): | ||||
|           // 车上没有缺考功能 | ||||
|         if (sys.v_no === '770') { | ||||
|           that.systemParam.Param770Str = sys.v_value || ""; | ||||
|         } | ||||
|             this.systemParam.Param770Str = sys.v_value || ''; | ||||
|             break; | ||||
| 
 | ||||
|           case SYSSET_VNO_MAP.get("SEATBELT_DOOR"): | ||||
|           // 开始考试前必须解开安全带或关车门 | ||||
|         if (sys.v_no === '803') { | ||||
|           that.systemParam.Param803Str = sys.v_value + ''; | ||||
|         } | ||||
|         //判断是否考生是否按顺序考试 | ||||
|         if (sys.v_no === '341' && decodeURIComponent(sys.v_value || "") == '1') { | ||||
|           that.systemParam.Param341 = true | ||||
|         } else { | ||||
|           //todo | ||||
|           that.systemParam.Param341 = true | ||||
|         } | ||||
|         //开始考试触发方式 | ||||
|         if (sys.v_no === '612') { | ||||
|           that.systemParam.Param612Str = decodeURIComponent(sys.v_value || "") | ||||
|         } | ||||
|         //车上考试过一次就不能缺考 | ||||
|         if (sys.v_no === '352') { | ||||
|           that.systemParam.Param352Str = decodeURIComponent(sys.v_value || "") | ||||
|         } | ||||
|         //828考生待考界面,安全员显示考试员 | ||||
|         if (sys.v_no === '828') { | ||||
|           that.systemParam.Param828Str = decodeURIComponent(sys.v_value || "") | ||||
|           if (that.systemParam.Param828Str == '1') { | ||||
|             that.labelBlocks[5].label = '安全员名' | ||||
|           } else { | ||||
|             that.labelBlocks[5].label = '考试员名' | ||||
|           } | ||||
|           that.labelBlocks = JSON.parse(JSON.stringify(this.labelBlocks)) | ||||
|             this.systemParam.Param803Str = sys.v_value + ''; | ||||
|             break; | ||||
| 
 | ||||
|         } | ||||
|         //视频保存天数 | ||||
|         if (sys.v_no === '305') { | ||||
|           that.systemParam.Param305Str = decodeURIComponent(sys.v_value || "") | ||||
|           case SYSSET_VNO_MAP.get("EXAM_ORDER"): | ||||
|           // 判断是否考生是否按顺序考试 | ||||
|             this.systemParam.Param341 = vValue === '1'; | ||||
|             break; | ||||
| 
 | ||||
|           case SYSSET_VNO_MAP.get("EXAM_TRIGGER"): | ||||
|           // 开始考试触发方式 | ||||
|             this.systemParam.Param612Str = vValue; | ||||
|             break; | ||||
| 
 | ||||
|           case SYSSET_VNO_MAP.get("NO_ABSENT_AFTER_ONCE"): | ||||
|           // 车上考试过一次就不能缺考 | ||||
|             this.systemParam.Param352Str = vValue; | ||||
|             break; | ||||
| 
 | ||||
|           case SYSSET_VNO_MAP.get("EXAMINER_DISPLAY"): | ||||
|           // 考生待考界面,安全员显示考试员 | ||||
|             this.systemParam.Param828Str = vValue; | ||||
|             this.labelBlocks[5].label = vValue === '1' ? '安全员名' : '考试员名'; | ||||
|           // 使用 Array.from 创建新数组,避免使用扩展运算符 | ||||
|             this.labelBlocks = Array.from(this.labelBlocks); | ||||
|             break; | ||||
| 
 | ||||
|           case SYSSET_VNO_MAP.get("VIDEO_SAVE_DAYS"): | ||||
|           // 视频保存天数 | ||||
|             this.systemParam.Param305Str = vValue; | ||||
|             if (!Number(this.systemParam.Param305Str)) { | ||||
|             that.systemParam.Param305Str = '2' | ||||
|               this.systemParam.Param305Str = '2'; | ||||
|             } | ||||
|             break; | ||||
|         } | ||||
|       }) | ||||
|       }); | ||||
| 
 | ||||
|       // 处理考生刷新逻辑 | ||||
|       const handleStudentRefresh = () => { | ||||
|         // 清除旧的定时器 | ||||
|         if (this.interval) { | ||||
|           clearInterval(this.interval); | ||||
|           this.interval = -1; | ||||
|         } | ||||
| 
 | ||||
|       //0不自动更新 1自动更新(不限次数) 2没有考生更新2次 | ||||
|       if (that.studentRefreshStatue == '2') { | ||||
|         if (that.list.length == 0) { | ||||
|           clearInterval(that.interval) | ||||
|           that.interval = setInterval(() => { | ||||
|             if (that.numCount < 3) { | ||||
|               that.numCount++ | ||||
|               if (that.list.length == 0) { | ||||
|                 that.getExaminationStudentInfoFn() | ||||
|               } | ||||
|             } | ||||
|           }, 5000) | ||||
|         } else { | ||||
|           that.getExaminationStudentInfoFn() | ||||
|         } | ||||
|       } else if (that.studentRefreshStatue == '1') { | ||||
|         if (that.list.length == 0) { | ||||
|           clearInterval(that.interval) | ||||
|           that.interval = setInterval(() => { | ||||
|             if (that.list.length == 0) { | ||||
|               that.getExaminationStudentInfoFn() | ||||
|             } | ||||
|           }, 5000) | ||||
|         } else { | ||||
|           that.getExaminationStudentInfoFn() | ||||
|         // 如果列表为空,设置定时器 | ||||
|         if (this.list.length === 0) { | ||||
|           switch (this.studentRefreshStatue) { | ||||
|             case REFRESH_STRATEGY_MAP.get("AUTO_TWICE"): | ||||
|               this.interval = setInterval(() => { | ||||
|                 if (this.numCount < 3) { | ||||
|                   this.numCount++; | ||||
|                   if (this.list.length === 0) { | ||||
|                     this.getExaminationStudentInfoFn(); | ||||
|                   } | ||||
|                 } else { | ||||
|         // this.getExaminationItemFn() | ||||
|                   clearInterval(this.interval); | ||||
|                   this.interval = -1; | ||||
|                 } | ||||
|               }, 5000); | ||||
|               break; | ||||
| 
 | ||||
|             case REFRESH_STRATEGY_MAP.get("AUTO_UNLIMITED"): | ||||
|               this.interval = setInterval(() => { | ||||
|                 if (this.list.length === 0) { | ||||
|                   this.getExaminationStudentInfoFn(); | ||||
|                 } | ||||
|               }, 5000); | ||||
|               break; | ||||
|           } | ||||
|         } | ||||
|         // 获取考生信息 | ||||
|         this.getExaminationStudentInfoFn(); | ||||
|       }; | ||||
| 
 | ||||
|       handleStudentRefresh(); | ||||
| 
 | ||||
|     } catch (error) { | ||||
|       dConsole.error('初始化系统设置失败:', error); | ||||
|       // 可以添加错误处理逻辑 | ||||
|     } | ||||
|     }) | ||||
|   } | ||||
| 
 | ||||
|   //人脸比对窗口关闭 | ||||
| @ -632,7 +659,6 @@ struct UserInfoPage { | ||||
|     this.isExamStart = false | ||||
|     this.startExam = false | ||||
|     this.updateTimeLimit = false | ||||
|     // this.isBoardPrePareSetPopupOpen=true | ||||
|     this.isFirstBoardPrePareSetPopupBtnShow = false | ||||
|     dConsole.log('isFirstBoardPrePareSetPopupBtnShow', this.isFirstBoardPrePareSetPopupBtnShow, | ||||
|       this.isBoardPrePareSetPopupOpen) | ||||
| @ -643,8 +669,12 @@ struct UserInfoPage { | ||||
|     let md5Message: string = CryptoJS.MD5(this.carInfo.carId! + | ||||
|       this.carInfo.examinationRoomId! + | ||||
|       this.examinerLoginInfo.username!).toString(); | ||||
|     const param = | ||||
|       `<getExaminationStudentInfoReq><head><checkCode>${md5Message}</checkCode></head><body><carId>${this.carInfo.carId}</carId><examinationRoomId>${this.carInfo.examinationRoomId}</examinationRoomId><examinerName>${this.examinerLoginInfo.username}</examinerName><sfzmhm></sfzmhm></body></getExaminationStudentInfoReq>` | ||||
|     const param: ExaminationStuAbsentParams = { | ||||
|       md5Message: md5Message, | ||||
|       carId: this.carInfo.carId || "", | ||||
|       examinationRoomId: this.carInfo.examinationRoomId || "", | ||||
|       username: this.examinerLoginInfo.username || "" | ||||
|     } | ||||
|     try { | ||||
|       getExaminationStudentInfo(param).then(async (res) => { | ||||
|         dConsole.log("temp log ", JSON.stringify(res)) | ||||
| @ -946,7 +976,7 @@ struct UserInfoPage { | ||||
|       this.stepFlag = false | ||||
|       this.stopDeviceById() | ||||
|     } catch (e) { | ||||
| 
 | ||||
|       dConsole.error(UserInfoTag, JSON.stringify(e)) | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user