| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  | import router from '@ohos.router'; | 
					
						
							|  |  |  |  | import Prompt from '@system.prompt'; | 
					
						
							|  |  |  |  | import common from '@ohos.app.ability.common'; | 
					
						
							|  |  |  |  | import EndPoPup from './compontents/judge/EndPopup'; | 
					
						
							|  |  |  |  | import LoadingPopup from './compontents/judge/LoadingPopup'; | 
					
						
							|  |  |  |  | import DeductedPopup from './compontents/judge/DeductionPopup'; | 
					
						
							|  |  |  |  | import AmplifyPopup from './compontents/judge/AmplifyPopup'; | 
					
						
							|  |  |  |  | import Judge from './judgeSDK/judge'; | 
					
						
							|  |  |  |  | import { uploadExamMileage } from '../api/judge'; | 
					
						
							|  |  |  |  | import DwztErrorPopup from './compontents/judge/DwztErrorPopup'; | 
					
						
							|  |  |  |  | import MsgPopup from './compontents/judge/MsgPopup'; | 
					
						
							| 
									
										
										
										
											2025-06-23 13:50:43 +08:00
										 |  |  |  | import { JudgeConfig, JudgeTag } from '../config'; | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | import { | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |   AmplifyItem, | 
					
						
							| 
									
										
										
										
											2025-06-20 16:42:34 +08:00
										 |  |  |  |   CARINFO, | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |   CarInfoType, | 
					
						
							| 
									
										
										
										
											2025-06-20 16:42:34 +08:00
										 |  |  |  |   CDSBInfo, | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |   CDSBInfos, | 
					
						
							|  |  |  |  |   DefaultJudgeConfigObj, | 
					
						
							|  |  |  |  |   ES_CARINFOType, | 
					
						
							|  |  |  |  |   ItemInfos, | 
					
						
							|  |  |  |  |   JudgeBeginObj, | 
					
						
							|  |  |  |  |   JudgeCallBacData, | 
					
						
							|  |  |  |  |   JudgeInitObj, | 
					
						
							| 
									
										
										
										
											2025-06-20 16:42:34 +08:00
										 |  |  |  |   LANE, | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |   MA_CDSBINFOType, | 
					
						
							|  |  |  |  |   MA_ITEMINFOType, | 
					
						
							|  |  |  |  |   MA_MAP_POINT_ITEMType, | 
					
						
							|  |  |  |  |   MA_MAP_POINTType, | 
					
						
							|  |  |  |  |   MA_SYSTEMPARMType, | 
					
						
							| 
									
										
										
										
											2025-06-20 16:42:34 +08:00
										 |  |  |  |   MAPITEMPOINTITEM, | 
					
						
							|  |  |  |  |   MAPPOINT, | 
					
						
							| 
									
										
										
										
											2025-04-15 14:24:27 +08:00
										 |  |  |  |   MarkRule, | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |   MarkRules, | 
					
						
							|  |  |  |  |   MASYSSETTableType, | 
					
						
							| 
									
										
										
										
											2025-06-20 16:42:34 +08:00
										 |  |  |  |   Project, | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |   ProjectInfo, | 
					
						
							|  |  |  |  |   ProjectInfos, | 
					
						
							|  |  |  |  |   ProjectRoads, | 
					
						
							|  |  |  |  |   RouteParamsType, | 
					
						
							|  |  |  |  |   SYSSET, | 
					
						
							|  |  |  |  |   SyssetConfig, | 
					
						
							| 
									
										
										
										
											2025-06-20 16:42:34 +08:00
										 |  |  |  |   SYSTEMPARMARR, | 
					
						
							| 
									
										
										
										
											2025-04-15 14:24:27 +08:00
										 |  |  |  |   User | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  | } from '../model'; | 
					
						
							|  |  |  |  | import { GetSyncData } from '../utils/table/Operation'; | 
					
						
							|  |  |  |  | import dayTs from '../utils/Date'; | 
					
						
							| 
									
										
										
										
											2025-06-19 16:53:49 +08:00
										 |  |  |  | import { CutArray, FormatTimeFlexible, GetCurrentTime } from '../utils/Common'; | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  | import FileUtils from '../utils/FileUtils'; | 
					
						
							| 
									
										
										
										
											2025-06-19 18:03:14 +08:00
										 |  |  |  | import SignalTrajectoryDialog from './Judge/SignalTrajectoryDialog'; | 
					
						
							| 
									
										
										
										
											2025-06-23 11:13:58 +08:00
										 |  |  |  | import { DefaultJudgeConfigData } from '../mock'; | 
					
						
							| 
									
										
										
										
											2025-06-23 17:24:47 +08:00
										 |  |  |  | import { dConsole } from '../utils/LogWorker'; | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | @Entry | 
					
						
							|  |  |  |  | @Component | 
					
						
							| 
									
										
										
										
											2025-06-23 13:50:43 +08:00
										 |  |  |  | struct JudgePage { | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |   scroller: Scroller = new Scroller() | 
					
						
							|  |  |  |  |   //页面通用字体大小 | 
					
						
							|  |  |  |  |   @State wayno: number = 0 | 
					
						
							|  |  |  |  |   @State FONTSIZE: number = 30 | 
					
						
							|  |  |  |  |   @State BIGFONTSIZE: number = 32 | 
					
						
							|  |  |  |  |   //结束考试弹窗 | 
					
						
							|  |  |  |  |   @State endPopupVisible: boolean = false | 
					
						
							|  |  |  |  |   //等待弹窗(考试及格,考试不及格使用) | 
					
						
							|  |  |  |  |   @State loadingPopupVisible: boolean = false | 
					
						
							|  |  |  |  |   @State isDdxk: boolean = false; | 
					
						
							|  |  |  |  |   @State time: string = '' | 
					
						
							|  |  |  |  |   //考试用时 | 
					
						
							|  |  |  |  |   @State examTime: number = 0 | 
					
						
							|  |  |  |  |   //开始时间 | 
					
						
							|  |  |  |  |   @State startTime: string = '00:00:00' | 
					
						
							|  |  |  |  |   @State startFullTime: string = '' | 
					
						
							|  |  |  |  |   @State startHourTime: string = '' | 
					
						
							|  |  |  |  |   @State startExamTime: string = '' | 
					
						
							|  |  |  |  |   //科目类型 | 
					
						
							|  |  |  |  |   @State examSubject: string = '3'; | 
					
						
							|  |  |  |  |   @State ddxkTime: number = 0; | 
					
						
							|  |  |  |  |   @State ddxkKsxmArr: string[] = [] | 
					
						
							|  |  |  |  |   @State ddxkKfArr: string[] = [] | 
					
						
							|  |  |  |  |   @State xmmcStr: string = '' | 
					
						
							|  |  |  |  |   @State carztStr: string = '' | 
					
						
							|  |  |  |  |   @State kfArr: MarkRule[] = [] | 
					
						
							|  |  |  |  |   @State name: string = '' | 
					
						
							|  |  |  |  |   @State idCard: string = '' | 
					
						
							|  |  |  |  |   @State singlePlay: boolean = false; | 
					
						
							|  |  |  |  |   @State totalScore: number = 100 | 
					
						
							|  |  |  |  |   //模拟考试项目 | 
					
						
							|  |  |  |  |   @State projects: ProjectInfo[] = [] | 
					
						
							|  |  |  |  |   @State projectsObj: ProjectInfos = {} | 
					
						
							|  |  |  |  |   @State projectsCenterObj: ProjectInfos = {} | 
					
						
							|  |  |  |  |   @State markRuleListObj: MarkRules = {} | 
					
						
							|  |  |  |  |   @State cdsbInfoObj?: CDSBInfos = {} | 
					
						
							|  |  |  |  |   @State itemInfoObj?: ItemInfos = {} | 
					
						
							|  |  |  |  |   @State timer: number = 0 | 
					
						
							|  |  |  |  |   @State judgeConfig: SyssetConfig[] = [] | 
					
						
							| 
									
										
										
										
											2025-06-23 11:13:58 +08:00
										 |  |  |  |   @State judgeConfigObj: DefaultJudgeConfigObj = DefaultJudgeConfigData | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |   //流水号 | 
					
						
							|  |  |  |  |   @State lsh: string = '' | 
					
						
							|  |  |  |  |   @State kszp: string = '' | 
					
						
							|  |  |  |  |   @State ksdd: string = '' | 
					
						
							|  |  |  |  |   @State kssycs: string = '' | 
					
						
							|  |  |  |  |   @State ksxl: string = '' | 
					
						
							|  |  |  |  |   @State kslx: string = '' | 
					
						
							|  |  |  |  |   //监管线路代码 | 
					
						
							|  |  |  |  |   @State xldm: string = '' | 
					
						
							|  |  |  |  |   //监管接口序列号 | 
					
						
							|  |  |  |  |   @State serialNumber: string = '' | 
					
						
							|  |  |  |  |   @State syssetParam623: boolean = false; | 
					
						
							|  |  |  |  |   @State syssetParam211: string = ''; | 
					
						
							|  |  |  |  |   @State carType: string = '' | 
					
						
							|  |  |  |  |   @State carName: string = '' | 
					
						
							|  |  |  |  |   @State isDeductedPopShow: boolean = false | 
					
						
							|  |  |  |  |   @State isAmplifyPopShow: boolean = false | 
					
						
							|  |  |  |  |   @State amplifiedImgIndex: number = 0 | 
					
						
							|  |  |  |  |   //行驶距离 | 
					
						
							|  |  |  |  |   @State jl: number = 0 | 
					
						
							|  |  |  |  |   //应考里程 | 
					
						
							|  |  |  |  |   @State examMileage: string = '0' | 
					
						
							|  |  |  |  |   @State artSubject3Projects: string[] = ['直线', '会车', '变道', '超车', '掉头', '停车'] | 
					
						
							|  |  |  |  |   @State artSubject3ProjectsCodesArr: string[] = ['3', '9', '4', '10', '12', '11'] | 
					
						
							|  |  |  |  |   @State manualMarkRules: MarkRule[] = [] | 
					
						
							|  |  |  |  |   //科目三评判初始化数据 | 
					
						
							|  |  |  |  |   @State systemparmArr: SYSTEMPARMARR[] = [] | 
					
						
							|  |  |  |  |   @State mapPointItemArr: MAPITEMPOINTITEM[] = [] | 
					
						
							|  |  |  |  |   @State carinfoArr: CARINFO[] = [] | 
					
						
							|  |  |  |  |   @State mapPointArr: MAPPOINT[] = [] | 
					
						
							|  |  |  |  |   //手动项目是否在进行中 | 
					
						
							|  |  |  |  |   @State isManualProjectIn: boolean = false; | 
					
						
							|  |  |  |  |   //项目是否进行中 | 
					
						
							|  |  |  |  |   @State isProjectIn: boolean = false; | 
					
						
							|  |  |  |  |   //正在进行的项目代码 | 
					
						
							|  |  |  |  |   @State currentXmdm?: number = 0 | 
					
						
							|  |  |  |  |   // 必考项目除靠边停车是否全部完成 | 
					
						
							|  |  |  |  |   @State isRequiredProjectsEnd: boolean = false; | 
					
						
							|  |  |  |  |   @State isAllProjectsEnd: boolean = false; | 
					
						
							|  |  |  |  |   @State draw: boolean = false; | 
					
						
							|  |  |  |  |   @State lane: LANE = { road: '', num: 0, count: 0 } | 
					
						
							|  |  |  |  |   //定位差分状态时候正常 | 
					
						
							|  |  |  |  |   @State isDwztRight: boolean = true; | 
					
						
							|  |  |  |  |   @State defaultTabIndex: number = 0; | 
					
						
							|  |  |  |  |   public kfArrScroller: Scroller = new Scroller() | 
					
						
							|  |  |  |  |   //档位 | 
					
						
							|  |  |  |  |   @State dw: string = '' | 
					
						
							|  |  |  |  |   //速度 | 
					
						
							|  |  |  |  |   @State sd: string = '' | 
					
						
							|  |  |  |  |   @State mileageTimer: number = 0; | 
					
						
							|  |  |  |  |   @State passingScore: number = 80 | 
					
						
							|  |  |  |  |   @State dwztErrorVisible: boolean = false; | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |   @State popTimer: number | null = 0; | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |   @State carlist: string = '' | 
					
						
							|  |  |  |  |   @State errorMsg: string = '' | 
					
						
							|  |  |  |  |   @State carInfo: CarInfoType = {} | 
					
						
							|  |  |  |  |   @State isErrorMsgEnd: boolean = false | 
					
						
							|  |  |  |  |   @State disConnectErrorOpen: boolean = false | 
					
						
							|  |  |  |  |   public context = getContext(this) as common.UIAbilityContext; | 
					
						
							| 
									
										
										
										
											2025-06-19 18:03:14 +08:00
										 |  |  |  |   // 信号查看弹窗 | 
					
						
							|  |  |  |  |   signalTrajectoryDialog: CustomDialogController = new CustomDialogController({ | 
					
						
							|  |  |  |  |     builder: SignalTrajectoryDialog(), | 
					
						
							|  |  |  |  |     customStyle: true, | 
					
						
							|  |  |  |  |     autoCancel: true | 
					
						
							|  |  |  |  |   }) | 
					
						
							| 
									
										
										
										
											2025-04-11 10:25:51 +08:00
										 |  |  |  |   private judge: Judge = new Judge(this) | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |   async aboutToDisappear() { | 
					
						
							|  |  |  |  |     clearInterval(this.mileageTimer) | 
					
						
							|  |  |  |  |   } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   async aboutToAppear() { | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |     this.carInfo = AppStorage.get<CarInfoType>('carInfo')! | 
					
						
							|  |  |  |  |     this.singlePlay = AppStorage.get<boolean>('singlePlay')! | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |     this.startFullTime = GetCurrentTime(1); | 
					
						
							|  |  |  |  |     // this.startHourTime = await getCurrentHourTime() | 
					
						
							| 
									
										
										
										
											2025-06-19 16:53:49 +08:00
										 |  |  |  |     this.startTime = dayTs().format("YYYY-MM-DD HH:mm:ss") | 
					
						
							|  |  |  |  |     this.startExamTime = dayTs().format("YYYY-MM-DD HH:mm:ss") | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |     setInterval(async () => { | 
					
						
							| 
									
										
										
										
											2025-06-19 16:53:49 +08:00
										 |  |  |  |       this.time = dayTs().format("YYYY-MM-DD HH:mm:ss"); | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |       this.examTime += 1; | 
					
						
							|  |  |  |  |     }, 1000); | 
					
						
							|  |  |  |  |     //初始化数据库表 | 
					
						
							|  |  |  |  |     await this.initDb() | 
					
						
							|  |  |  |  |     //断点续考 | 
					
						
							|  |  |  |  |     await this.goDdxkItems() | 
					
						
							|  |  |  |  |     //初始化评判 | 
					
						
							| 
									
										
										
										
											2025-04-11 10:25:51 +08:00
										 |  |  |  |     await this.initJudge(); | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |   } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   //初始化相关数据库表 | 
					
						
							|  |  |  |  |   async initDb() { | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |     this.examSubject = this.carInfo.examSubject!; | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |     // const { isTrajectoryOpen, trajectoryPath } = judgeConfig | 
					
						
							|  |  |  |  |     await this.initStudent(); | 
					
						
							|  |  |  |  |     await this.initCar(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     //是否开启轨迹回放模式 | 
					
						
							|  |  |  |  |     if (JudgeConfig.isTrajectoryOpen) { | 
					
						
							|  |  |  |  |       this.initTrajectoryParam(JudgeConfig.trajectoryPath) | 
					
						
							|  |  |  |  |     } else { | 
					
						
							|  |  |  |  |       await this.initSystemParam() | 
					
						
							|  |  |  |  |       await this.initMarkRules(); | 
					
						
							|  |  |  |  |       await this.initSysset(); | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  |     await this.initCDSBInfo() | 
					
						
							|  |  |  |  |     await this.initItemInfo() | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     // 科目三新增读取表数据 | 
					
						
							|  |  |  |  |     if (this.examSubject == '3') { | 
					
						
							|  |  |  |  |       await this.initMapPoint() | 
					
						
							|  |  |  |  |       await this.initMapPointItem() | 
					
						
							|  |  |  |  |       //定时上传考试里程 | 
					
						
							|  |  |  |  |       // let mileageTimer = setInterval(()=>{ | 
					
						
							|  |  |  |  |       //   this.uploadMileage() | 
					
						
							|  |  |  |  |       // },5000) | 
					
						
							|  |  |  |  |       // this.mileageTimer = mileageTimer | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  |   } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   // 查询考车信息 | 
					
						
							|  |  |  |  |   async initCar() { | 
					
						
							|  |  |  |  |     // const result = await getSyncData('ES_CARINFO') | 
					
						
							|  |  |  |  |     const result = await GetSyncData<ES_CARINFOType>("ES_CARINFO") | 
					
						
							|  |  |  |  |     const carInfo = result[0] || {}; | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |     this.carName = decodeURI(carInfo.carclass!) | 
					
						
							| 
									
										
										
										
											2025-06-23 17:24:47 +08:00
										 |  |  |  |     dConsole.log(JudgeTag, "查看carType", carInfo.cartype) | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |     this.carType = carInfo.kscx! | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |     this.carinfoArr.push({ | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |       CARID: carInfo.carid!, | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |       IPADDR: '', | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |       CARCLASS: decodeURI(carInfo.carclass!), | 
					
						
							|  |  |  |  |       KSCX: carInfo.kscx!, | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |       // CARNAME: decodeURI(carInfo.carname), | 
					
						
							|  |  |  |  |       CARNAME: "", | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |       FLAG: carInfo.flag!, | 
					
						
							|  |  |  |  |       BK1: carInfo.bk1!, | 
					
						
							|  |  |  |  |       BK2: carInfo.bk2!, | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |     }) | 
					
						
							| 
									
										
										
										
											2025-06-23 17:24:47 +08:00
										 |  |  |  |     dConsole.info(JudgeTag, 'surenjun =>carinfoArrr', JSON.stringify(this.carinfoArr)) | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |   } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   // 获取考生信息 | 
					
						
							|  |  |  |  |   async initStudent() { | 
					
						
							|  |  |  |  |     const students = await GetSyncData<User>('USER') | 
					
						
							|  |  |  |  |     const stuInfo = students[0]; | 
					
						
							|  |  |  |  |     this.name = stuInfo.xm || '测试考生'; | 
					
						
							|  |  |  |  |     this.idCard = stuInfo.sfzmhm || '01234567891010'; | 
					
						
							|  |  |  |  |     this.lsh = this.singlePlay ? '0000000000000' : stuInfo.lsh; | 
					
						
							|  |  |  |  |     this.kszp = stuInfo.kszp; | 
					
						
							|  |  |  |  |     this.ksdd = stuInfo.ksdd; | 
					
						
							|  |  |  |  |     this.kssycs = stuInfo.kssycs; | 
					
						
							|  |  |  |  |     this.ksxl = stuInfo.ksxl; | 
					
						
							|  |  |  |  |     this.wayno = Number(stuInfo.ksxl); | 
					
						
							|  |  |  |  |     this.xldm = stuInfo.xldm; | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |     this.kslx = stuInfo.kslx!; | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |   } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   // 获取扣分代码信息 | 
					
						
							|  |  |  |  |   async initMarkRules(markRules ?: MarkRule[]) { | 
					
						
							|  |  |  |  |     const markRuleParams = markRules || await GetSyncData<MarkRule>('MA_MARKRULE') | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     markRuleParams.forEach(mark => { | 
					
						
							|  |  |  |  |       const tempObj: MarkRule = { | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |         itemno: Number(mark.itemno), | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |         markcatalog: mark.markcatalog, | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |         markshow: decodeURI(mark.markshow!), | 
					
						
							|  |  |  |  |         markreal: Number(mark.markreal!), | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |         markserial: mark.markserial, | 
					
						
							|  |  |  |  |         kfxh: mark.kfxh, | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |         OnlyOneKind: Number(mark.onlyoneid!), | 
					
						
							|  |  |  |  |         NoCancelId: Number(mark.nocancelid!), | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |         GPS_SID: mark.gps_sid == 0 ? false : true | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       //筛选出人工评判的扣分 | 
					
						
							|  |  |  |  |       if (Number(tempObj.markserial) > 100 && Number(tempObj.markserial) < 200) { | 
					
						
							|  |  |  |  |         this.manualMarkRules.push(tempObj) | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       tempObj.markserial = mark.markserial | 
					
						
							|  |  |  |  |       Reflect.set(this.markRuleListObj, `${mark.itemno}_${mark.markserial}`, tempObj) | 
					
						
							|  |  |  |  |     }) | 
					
						
							|  |  |  |  |   } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   // 考试项目是否全部完成 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   // 获取sysset表信息 | 
					
						
							|  |  |  |  |   async initSysset(sysset?: SYSSET[]) { | 
					
						
							|  |  |  |  |     const syssetParams: SYSSET[] | MASYSSETTableType[] = sysset || await GetSyncData<MASYSSETTableType>('MA_SYSSET') | 
					
						
							|  |  |  |  |     const serialNumberArr = (syssetParams as SYSSET[]).filter(sys => sys.v_no === '901'); | 
					
						
							| 
									
										
										
										
											2025-06-23 17:24:47 +08:00
										 |  |  |  |     dConsole.info(JudgeTag, 'surenjun serialNumberArr' + JSON.stringify(serialNumberArr)) | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |     this.serialNumber = (serialNumberArr[0] && serialNumberArr[0].v_value) || ''; | 
					
						
							|  |  |  |  |     // const { isTrajectoryOpen } = judgeConfig | 
					
						
							|  |  |  |  |     const syssetJudgeConfigArr: SyssetConfig[] = [] | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |     syssetParams.forEach((sys: SYSSET | MASYSSETTableType) => { | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |       if (JudgeConfig.isTrajectoryOpen) { | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |         sys.v_no = String((sys as SYSSET).key!); | 
					
						
							|  |  |  |  |         sys.v_name = (sys as SYSSET).name!; | 
					
						
							|  |  |  |  |         sys.v_value = (sys as SYSSET).value! | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       // const { v_no, v_value } = sys; | 
					
						
							|  |  |  |  |       const v_no_num = Number(sys.v_no) | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |       const value = decodeURIComponent(sys.v_value!) | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |       if (v_no_num >= 10 && v_no_num <= 900) { | 
					
						
							|  |  |  |  |         const name = | 
					
						
							|  |  |  |  |           syssetJudgeConfigArr.push({ | 
					
						
							|  |  |  |  |             key: v_no_num, value: value, | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |             name: decodeURI(sys.v_name!) | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |           }) | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       //623 考试中是否可以查看轨迹画面(0-否+1-是) | 
					
						
							|  |  |  |  |       if (sys.v_no == '623') { | 
					
						
							|  |  |  |  |         this.syssetParam623 = value == '1' ? true : false | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       //科目三应行驶距离参数 | 
					
						
							|  |  |  |  |       if (sys.v_no == '303') { | 
					
						
							|  |  |  |  |         this.examMileage = this.examMileage == '0' ? (sys.v_value + '') : this.examMileage; | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       // //地点版本参数 | 
					
						
							|  |  |  |  |       // if (sys.v_no == '211') { | 
					
						
							|  |  |  |  |       //   this.syssetParam211 = decodeURIComponent(sys.v_value + '') | 
					
						
							|  |  |  |  |       // } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       //364	绕车一周评判时机(1-开始考试后判 2-开始考试前判) | 
					
						
							|  |  |  |  |       if (sys.v_no == '364' && sys.v_value == "2") { | 
					
						
							|  |  |  |  |         let currentParams: RouteParamsType = router.getParams() as RouteParamsType; | 
					
						
							|  |  |  |  |         const kfdm = currentParams.kfdm; | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |         currentParams.kfdm?.forEach(kf => { | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |           const currentKf: MarkRule = Reflect.get(this.markRuleListObj, `${kf.xmdm}_${kf.kfdm}`) | 
					
						
							|  |  |  |  |           const currentProject: ProjectInfo = Reflect.get(this.projectsObj, kf.xmdm) | 
					
						
							|  |  |  |  |           // 过滤考前绕车一周上车准备的扣分 | 
					
						
							|  |  |  |  |           if (currentParams.sczb == "1" && kf.xmdm == 1) { | 
					
						
							|  |  |  |  |             return | 
					
						
							|  |  |  |  |           } | 
					
						
							|  |  |  |  |           this.kfArr.push({ | 
					
						
							|  |  |  |  |             //扣分项目名称 | 
					
						
							|  |  |  |  |             xmmcStr: currentProject.name, | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |             xmdm: kf.xmdm + "", | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |             desc: currentKf.markshow, | 
					
						
							|  |  |  |  |             score: currentKf.markreal, | 
					
						
							|  |  |  |  |             markcatalog: currentKf.markcatalog, | 
					
						
							|  |  |  |  |             markserial: currentKf.markserial, | 
					
						
							|  |  |  |  |             kfxh: currentKf.kfxh | 
					
						
							|  |  |  |  |           }) | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |           this.totalScore += Number(currentKf!.markreal); | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |         }) | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |         const project_1: ProjectInfo = Reflect.get(this.projectsObj, 1) | 
					
						
							|  |  |  |  |         project_1.type = kfdm!.length ? '4' : '3'; | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |         Reflect.set(this.projectsObj, 1, project_1) | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       } | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |       Reflect.set(this.judgeConfigObj, sys.v_no!, value) | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |     }); | 
					
						
							|  |  |  |  |     this.judgeConfig = syssetJudgeConfigArr; | 
					
						
							|  |  |  |  |   } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   //初始化systemParam表 | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |   async initSystemParam(sysParam?: MA_SYSTEMPARMType  []) { | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |     let systemParms: MA_SYSTEMPARMType[] = sysParam || await GetSyncData<MA_SYSTEMPARMType>('MA_SYSTEMPARM') | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     let currentParams: RouteParamsType = router.getParams() as RouteParamsType; | 
					
						
							|  |  |  |  |     // const { carName, carType, examSubject } = this; | 
					
						
							|  |  |  |  |     //小车车型列表 | 
					
						
							|  |  |  |  |     const sCarTypes = ['C1', 'C2', 'C5'] | 
					
						
							|  |  |  |  |     if (this.singlePlay) { | 
					
						
							|  |  |  |  |       this.wayno = Number(currentParams.wayno) || 1; | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  |     //真实监管下发的项目 | 
					
						
							|  |  |  |  |     let kStringArr: string[] = (currentParams.kString?.split(',') || []).filter(item => item); | 
					
						
							| 
									
										
										
										
											2025-06-23 17:24:47 +08:00
										 |  |  |  |     dConsole.info(JudgeTag, 'surenjun kStringArr', JSON.stringify(kStringArr)) | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |     let isInExam = kStringArr.length > 0; | 
					
						
							|  |  |  |  |     // const { isTrajectoryOpen } = judgeConfig | 
					
						
							|  |  |  |  |     let carNo = '', allItems: string[] = []; | 
					
						
							|  |  |  |  |     systemParms.forEach((systemParm) => { | 
					
						
							|  |  |  |  |       if (JudgeConfig.isTrajectoryOpen) { | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |         systemParm.no1 = systemParm.NO1! + ''; | 
					
						
							|  |  |  |  |         systemParm.no2 = systemParm.NO2! + ''; | 
					
						
							|  |  |  |  |         systemParm.no3 = systemParm.NO3! + ''; | 
					
						
							|  |  |  |  |         systemParm.txt1 = systemParm.TXT1!; | 
					
						
							|  |  |  |  |         systemParm.txt2 = systemParm.TXT2!; | 
					
						
							|  |  |  |  |         systemParm.txt3 = systemParm.TXT3!; | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |       } | 
					
						
							|  |  |  |  |       // const { no1, no2, no3, } = systemParm; | 
					
						
							| 
									
										
										
										
											2025-04-15 14:24:27 +08:00
										 |  |  |  |       const txt1 = decodeURI(systemParm.txt1 || "") | 
					
						
							|  |  |  |  |       const txt2 = decodeURI(systemParm.txt2 || "") | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |       const no1 = systemParm.no1; | 
					
						
							|  |  |  |  |       const no2 = systemParm.no2; | 
					
						
							|  |  |  |  |       const no3 = systemParm.no3; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       //获取当前考车的no2 | 
					
						
							|  |  |  |  |       if (systemParm.no1 == "3" && systemParm.no3 == "1") { | 
					
						
							|  |  |  |  |         if (txt1 === this.carName) { | 
					
						
							| 
									
										
										
										
											2025-04-15 14:24:27 +08:00
										 |  |  |  |           carNo = systemParm?.no2 || "" | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |           this.carlist = carNo | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       //获取及格分数线 | 
					
						
							|  |  |  |  |       if (systemParm.no1 == "3" && systemParm.no3 == "3" && carNo === systemParm.no2) { | 
					
						
							|  |  |  |  |         this.passingScore = Number(txt1) || 0; | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       //根据车型获取应行驶里程数 | 
					
						
							|  |  |  |  |       if (systemParm.no1 == "3" && systemParm.no3 == "15" && carNo === systemParm.no2) { | 
					
						
							| 
									
										
										
										
											2025-04-15 14:24:27 +08:00
										 |  |  |  |         this.examMileage = ((decodeURI(systemParm.txt1 || "")) || '').split('^')[0]; | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |       } | 
					
						
							|  |  |  |  |       //获取当前考车的考试项目 | 
					
						
							|  |  |  |  |       if (carNo !== '' && systemParm.no1 == "3" && systemParm.no2 == carNo && systemParm.no3 == "10") { | 
					
						
							| 
									
										
										
										
											2025-04-15 14:24:27 +08:00
										 |  |  |  |         allItems = decodeURIComponent(systemParm.txt1 || "").split(',').filter(txt => txt !== '') | 
					
						
							| 
									
										
										
										
											2025-06-23 17:24:47 +08:00
										 |  |  |  |         dConsole.info(JudgeTag, 'surenjun', JSON.stringify(allItems)) | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |       } | 
					
						
							|  |  |  |  |       if ( | 
					
						
							|  |  |  |  |       //科目二获取项目 | 
					
						
							| 
									
										
										
										
											2025-04-15 14:24:27 +08:00
										 |  |  |  |         (this.examSubject == "2" && allItems.length && systemParm.no1 == '6' && allItems.includes(systemParm?.no2 || "")) | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |           || | 
					
						
							|  |  |  |  |           //科目三获取项目 | 
					
						
							|  |  |  |  |           (this.examSubject == "3" && systemParm.no1 == "6") | 
					
						
							|  |  |  |  |       ) { | 
					
						
							| 
									
										
										
										
											2025-04-15 14:24:27 +08:00
										 |  |  |  |         const name = decodeURI(systemParm.txt1 || "") | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |         //小车过滤掉 夜间模拟行驶 | 
					
						
							|  |  |  |  |         if (sCarTypes.includes(this.carType) && name === '夜间行驶') { | 
					
						
							|  |  |  |  |           return | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |         const currentProject: ProjectInfo = { | 
					
						
							|  |  |  |  |           name, | 
					
						
							| 
									
										
										
										
											2025-04-15 14:24:27 +08:00
										 |  |  |  |           abbreviation: decodeURI(systemParm.txt3 || ""), | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |           projectCode: no2, | 
					
						
							|  |  |  |  |           projectCodeCenter: txt2, | 
					
						
							|  |  |  |  |           //是否是必考  加减档设置成非必考 | 
					
						
							|  |  |  |  |           isRequired: no2 == '14' ? false : allItems.includes(no2 + ''), | 
					
						
							|  |  |  |  |           //是否考过了 | 
					
						
							|  |  |  |  |           isEnd: false, | 
					
						
							|  |  |  |  |           //项目开始数据是否上传过 | 
					
						
							|  |  |  |  |           isUpload: false, | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |         const no2Num = Number(systemParm.no2) | 
					
						
							|  |  |  |  |         //真实监管下发考试项目 | 
					
						
							|  |  |  |  |         if (isInExam && !(kStringArr.includes(txt2) || kStringArr.includes(no2 + ''))) { | 
					
						
							| 
									
										
										
										
											2025-06-23 17:24:47 +08:00
										 |  |  |  |           dConsole.info(JudgeTag, 'surenjun =>', txt2) | 
					
						
							|  |  |  |  |           dConsole.info(JudgeTag, 'surenjun => no2', systemParm.no2) | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |           currentProject.type = '3' | 
					
						
							|  |  |  |  |           currentProject.isUpload = true | 
					
						
							|  |  |  |  |           currentProject.isEnd = true | 
					
						
							|  |  |  |  |           this.ddxkKsxmArr.push(txt2) | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |         Reflect.set(this.projectsObj, no2Num, currentProject) | 
					
						
							|  |  |  |  |         Reflect.set(this.projectsCenterObj, txt2, currentProject) | 
					
						
							|  |  |  |  |         this.projects.push(currentProject); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       this.systemparmArr.push({ | 
					
						
							| 
									
										
										
										
											2025-06-20 16:42:34 +08:00
										 |  |  |  |         NO1: Number(systemParm.no1), | 
					
						
							|  |  |  |  |         NO2: Number(systemParm.no2), | 
					
						
							|  |  |  |  |         NO3: Number(systemParm.no3), | 
					
						
							|  |  |  |  |         TXT1: decodeURIComponent(systemParm.txt1 || ""), | 
					
						
							|  |  |  |  |         TXT2: decodeURIComponent(systemParm.txt2 || ""), | 
					
						
							|  |  |  |  |         TXT3: decodeURIComponent(systemParm.txt3 || ""), | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |       }) | 
					
						
							|  |  |  |  |     }) | 
					
						
							|  |  |  |  |     const projects = this.projects; | 
					
						
							| 
									
										
										
										
											2025-06-23 17:24:47 +08:00
										 |  |  |  |     dConsole.info(JudgeTag, 'surenjun', JSON.stringify(this.ddxkKsxmArr)) | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |     if (!projects.length) { | 
					
						
							|  |  |  |  |       Prompt.showToast({ | 
					
						
							|  |  |  |  |         message: '读取数据库信息失败,请重新联网更新!', | 
					
						
							|  |  |  |  |         duration: 8000 | 
					
						
							|  |  |  |  |       }); | 
					
						
							|  |  |  |  |       router.back(); | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  |   } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   // 获取场地设备信息 | 
					
						
							|  |  |  |  |   async initCDSBInfo() { | 
					
						
							|  |  |  |  |     const cdsbParams: MA_CDSBINFOType[] = await GetSyncData<MA_CDSBINFOType>('MA_CDSBINFO') | 
					
						
							|  |  |  |  |     //只记录考试项目的模型 | 
					
						
							|  |  |  |  |     const projectsObj = this.projectsObj | 
					
						
							|  |  |  |  |     cdsbParams.forEach((cdsb) => { | 
					
						
							| 
									
										
										
										
											2025-04-15 14:24:27 +08:00
										 |  |  |  |       const key = decodeURI(cdsb.itemsno || "") | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |       const newKey = key.split('~').join('_') | 
					
						
							|  |  |  |  |       const xmdm = Number(key.split('~')[0]) | 
					
						
							|  |  |  |  |       const currentProject: ProjectInfo = Reflect.get(projectsObj, xmdm) | 
					
						
							|  |  |  |  |       if (currentProject) { | 
					
						
							|  |  |  |  |         const cdsbInfo: CDSBInfo = { | 
					
						
							|  |  |  |  |           kdid: cdsb.kdid, | 
					
						
							|  |  |  |  |           sbbh: cdsb.sbbh, | 
					
						
							|  |  |  |  |           sbbm: cdsb.sbbm, | 
					
						
							|  |  |  |  |           itemsno: key, | 
					
						
							|  |  |  |  |           modelKey: newKey, | 
					
						
							|  |  |  |  |           xmdm, | 
					
						
							|  |  |  |  |           xmxh: key.split('~')[1], | 
					
						
							|  |  |  |  |         } | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |         Reflect.set(this.cdsbInfoObj!, newKey, cdsbInfo) | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |       } | 
					
						
							|  |  |  |  |     }) | 
					
						
							|  |  |  |  |   } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   // 获取itemInfo表信息 | 
					
						
							|  |  |  |  |   async initItemInfo() { | 
					
						
							|  |  |  |  |     const infoParams: MA_ITEMINFOType[] = await GetSyncData<MA_ITEMINFOType>('MA_ITEMINFO'); | 
					
						
							|  |  |  |  |     const carlist = this.carlist; | 
					
						
							|  |  |  |  |     const projectsObj = this.projectsObj | 
					
						
							|  |  |  |  |     infoParams.forEach((info) => { | 
					
						
							| 
									
										
										
										
											2025-04-15 14:24:27 +08:00
										 |  |  |  |       const key = decodeURI(info.itemsno || ""); | 
					
						
							|  |  |  |  |       const carlistArr = info.carlist === '' ? [] : (decodeURI(info.carlist || "").split(',') || []); | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |       const newKey = key.split('~').join('_') | 
					
						
							|  |  |  |  |       const xmdm = Number(key.split('~')[0]) | 
					
						
							|  |  |  |  |       const currentProject: ProjectInfo = Reflect.get(projectsObj, xmdm) | 
					
						
							|  |  |  |  |       if (currentProject && (carlistArr.length == 0 || carlistArr.includes(carlist))) { | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |         Reflect.set(this.itemInfoObj!, newKey, { | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |           modelKey: newKey, | 
					
						
							|  |  |  |  |           xmdm, | 
					
						
							|  |  |  |  |           xmxh: key.split('~')[1], | 
					
						
							|  |  |  |  |         }) | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |     }) | 
					
						
							|  |  |  |  |   } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   // 评判相关初始化 | 
					
						
							|  |  |  |  |   async initJudge() { | 
					
						
							| 
									
										
										
										
											2025-04-11 10:25:51 +08:00
										 |  |  |  |     await this.judge.onJudgeFn(async (judgeData: JudgeCallBacData) => { | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |       this.xmmcStr = judgeData.xmmcStr || ""; | 
					
						
							|  |  |  |  |       this.carztStr = judgeData.carztStr || ""; | 
					
						
							|  |  |  |  |       this.kfArr = judgeData.kfArr || []; | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |     }); | 
					
						
							|  |  |  |  |   } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   // 断点续考判断 | 
					
						
							|  |  |  |  |   async goDdxkItems() { | 
					
						
							|  |  |  |  |     const judgeConfigObj = this.judgeConfigObj | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     const config_432: string = Reflect.get(judgeConfigObj, '432') | 
					
						
							|  |  |  |  |     //科目二强制开始断点续考 | 
					
						
							|  |  |  |  |     if (config_432 != '0' || this.examSubject == "2") { | 
					
						
							|  |  |  |  |       //断点续考判断 | 
					
						
							|  |  |  |  |       let currentParams: RouteParamsType = router.getParams() as RouteParamsType; | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |       const examItems: string | undefined = currentParams?.examItems; | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |       // 2024-01-03 16:29:26;0;20300,;2,4^2,4;null; | 
					
						
							|  |  |  |  |       if (examItems !== '' && examItems !== undefined) { | 
					
						
							| 
									
										
										
										
											2025-06-23 17:24:47 +08:00
										 |  |  |  |         dConsole.info(JudgeTag, 'surenjun examItems=>', JSON.stringify(examItems)) | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |         const examItemsArrs = examItems.split(';'); | 
					
						
							|  |  |  |  |         const startTime = examItemsArrs[0] | 
					
						
							|  |  |  |  |         const ddxkKsxmArr = examItemsArrs[2]?.split(',').filter(item => item) || [] | 
					
						
							|  |  |  |  |         const ddxkKfArr = examItemsArrs[3]?.split('^').filter(item => item) || [] | 
					
						
							|  |  |  |  |         if (config_432 == '2' || this.examSubject == "2") { | 
					
						
							|  |  |  |  |           //TODO 带项目带里程 | 
					
						
							|  |  |  |  |           if (ddxkKsxmArr?.length) { | 
					
						
							|  |  |  |  |             //断点续考 | 
					
						
							|  |  |  |  |             ddxkKsxmArr.forEach(xmdm => { | 
					
						
							|  |  |  |  |               const currentProjectCenter: Project = Reflect.get(this.projectsCenterObj, xmdm) | 
					
						
							|  |  |  |  |               const projectCode = currentProjectCenter.projectCode | 
					
						
							|  |  |  |  |               const currentProject: Project = Reflect.get(this.projectsObj, projectCode) | 
					
						
							|  |  |  |  |               if (currentProject) { | 
					
						
							|  |  |  |  |                 currentProject.type = '3' | 
					
						
							|  |  |  |  |                 currentProject.isUpload = true | 
					
						
							|  |  |  |  |                 currentProject.isEnd = true | 
					
						
							|  |  |  |  |                 Reflect.set(this.projectsObj, projectCode, currentProject) | 
					
						
							|  |  |  |  |               } | 
					
						
							|  |  |  |  |             }) | 
					
						
							|  |  |  |  |             this.ddxkKsxmArr = ddxkKsxmArr | 
					
						
							|  |  |  |  |           } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |         //扣分续考 | 
					
						
							|  |  |  |  |         ddxkKfArr.forEach((kf) => { | 
					
						
							|  |  |  |  |           const xmdm = kf.split(',')[0] | 
					
						
							|  |  |  |  |           const kfdm = kf.split(',')[1] | 
					
						
							|  |  |  |  |           const currentKf: MarkRule = Reflect.get(this.markRuleListObj, `${xmdm}_${kfdm}`) | 
					
						
							|  |  |  |  |           const currentProject: ProjectInfo = Reflect.get(this.projectsObj, xmdm) || { name: '通用评判' } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |           if (currentProject) { | 
					
						
							|  |  |  |  |             currentProject.type = '4' | 
					
						
							|  |  |  |  |             Reflect.set(this.projectsObj, xmdm, currentProject) | 
					
						
							|  |  |  |  |           } | 
					
						
							|  |  |  |  |           this.kfArr.push({ | 
					
						
							|  |  |  |  |             //扣分项目名称 | 
					
						
							|  |  |  |  |             xmmcStr: currentProject.name, | 
					
						
							|  |  |  |  |             desc: currentKf.markshow, | 
					
						
							|  |  |  |  |             score: currentKf.markreal, | 
					
						
							|  |  |  |  |             markcatalog: currentKf.markcatalog, | 
					
						
							|  |  |  |  |             markserial: currentKf.markserial, | 
					
						
							|  |  |  |  |             kfxh: currentKf.kfxh | 
					
						
							|  |  |  |  |           }) | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |           this.totalScore += Number(currentKf.markreal!) | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |         }) | 
					
						
							|  |  |  |  |         this.ddxkKfArr = ddxkKfArr | 
					
						
							|  |  |  |  |         this.ddxkTime = Date.parse(startTime); | 
					
						
							|  |  |  |  |         this.isDdxk = true | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   // 初始化mapPoint表 | 
					
						
							|  |  |  |  |   async initMapPoint() { | 
					
						
							|  |  |  |  |     const pointParams: MA_MAP_POINTType[] = await GetSyncData<MA_MAP_POINTType>('MA_MAP_POINT') | 
					
						
							|  |  |  |  |     pointParams.forEach(item => { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       this.mapPointArr.push({ | 
					
						
							|  |  |  |  |         point_no: Number(item.point_no), | 
					
						
							|  |  |  |  |         gps_e: Number(item.gps_e), | 
					
						
							|  |  |  |  |         gps_n: Number(item.gps_n), | 
					
						
							|  |  |  |  |         point_no_f: Number(item.point_no_f), | 
					
						
							|  |  |  |  |         point_type: Number(item.point_type), | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |         road_code: item.road_code!, | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |         gps_e_Location: Number(item.gps_e_location), | 
					
						
							|  |  |  |  |         gps_n_Location: Number(item.gps_n_location), | 
					
						
							|  |  |  |  |         f_gps_e: Number(item.f_gps_e), | 
					
						
							|  |  |  |  |         f_gps_n: Number(item.f_gps_n), | 
					
						
							|  |  |  |  |         passed: Number(item.passed) | 
					
						
							|  |  |  |  |       }) | 
					
						
							|  |  |  |  |     }) | 
					
						
							|  |  |  |  |   } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   // 初始化mapPointItem表 | 
					
						
							|  |  |  |  |   async initMapPointItem() { | 
					
						
							|  |  |  |  |     const pointItemPoints: MA_MAP_POINT_ITEMType[] = await GetSyncData<MA_MAP_POINT_ITEMType>('MA_MAP_POINT_ITEM'); | 
					
						
							|  |  |  |  |     pointItemPoints.forEach(item => { | 
					
						
							|  |  |  |  |       // const { point_no, itemno, itemno1, subname } = itemPoint | 
					
						
							|  |  |  |  |       this.mapPointItemArr.push({ | 
					
						
							|  |  |  |  |         point_no: Number(item.point_no), | 
					
						
							|  |  |  |  |         itemno: Number(item.itemno), | 
					
						
							|  |  |  |  |         itemno1: Number(item.itemno1), | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |         subname: item.subname! | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |       }) | 
					
						
							|  |  |  |  |     }) | 
					
						
							|  |  |  |  |   } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   // 初始化本地systemparam表、markrule表 | 
					
						
							|  |  |  |  |   async initTrajectoryParam(trajectoryPath: string) { | 
					
						
							|  |  |  |  |     const isTrajectoryOpen = JudgeConfig.isTrajectoryOpen | 
					
						
							|  |  |  |  |     //轨迹回放读取 systemparam表、markrule表 | 
					
						
							|  |  |  |  |     const fileUtil = new FileUtils(this.context); | 
					
						
							|  |  |  |  |     const folderPath = await fileUtil.initFolder(trajectoryPath); | 
					
						
							|  |  |  |  |     const str = await fileUtil.readFile(folderPath); | 
					
						
							|  |  |  |  |     const strArr = str.split('\n'); | 
					
						
							|  |  |  |  |     const initData = strArr[0] | 
					
						
							|  |  |  |  |     const beginData = strArr[1] | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     const initDataObj: JudgeInitObj = JSON.parse(initData) | 
					
						
							|  |  |  |  |     const beginDataObj: JudgeBeginObj = JSON.parse(beginData) | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     const examSubject = this.carInfo.examSubject; | 
					
						
							|  |  |  |  |     this.examSubject = (isTrajectoryOpen ? (initDataObj.kskm) : examSubject) + ''; | 
					
						
							|  |  |  |  |     this.carInfo.examSubject = this.examSubject | 
					
						
							|  |  |  |  |     this.singlePlay = beginDataObj.exam == 0; | 
					
						
							|  |  |  |  |     this.carName = initDataObj.name; | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |     await this.initSystemParam(initDataObj.systemparm as MA_SYSTEMPARMType[]) | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |     await this.initMarkRules(initDataObj.mark); | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |     await this.initSysset(initDataObj.sysset as SYSSET[]); | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |   } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   // 上传考试里程 | 
					
						
							|  |  |  |  |   async uploadMileage() { | 
					
						
							|  |  |  |  |     if (!this.singlePlay) { | 
					
						
							|  |  |  |  |       const carInfo = this.carInfo | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       await uploadExamMileage({ | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |         carId: carInfo.carId!, | 
					
						
							|  |  |  |  |         examinationRoomId: carInfo.examinationRoomId!, | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |         lsh: this.lsh, | 
					
						
							|  |  |  |  |         kskssj: this.startExamTime, | 
					
						
							|  |  |  |  |         kslc: this.jl | 
					
						
							|  |  |  |  |       }) | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  |   } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   build() { | 
					
						
							|  |  |  |  |     Column() { | 
					
						
							|  |  |  |  |       Row() { | 
					
						
							|  |  |  |  |         Row() { | 
					
						
							|  |  |  |  |           Image($rawfile('judge/signal_logoS.png')).width(120) | 
					
						
							|  |  |  |  |           Text(this.time).fontColor('#CCB48F').fontSize(34).padding({ left: 10, right: 5 }) | 
					
						
							|  |  |  |  |           Image($rawfile(this.isDwztRight ? 'judge/xh_green.png' : 'judge/xh_red.png')).width(50) | 
					
						
							|  |  |  |  |         }.padding({ left: 20 }) | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         Row() { | 
					
						
							|  |  |  |  |           Text(`当前项目:${this.xmmcStr || '无'} `).fontColor('#E5CCA1').fontSize(34) | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       .width('100%') | 
					
						
							|  |  |  |  |       .height('96') | 
					
						
							|  |  |  |  |       .backgroundColor('#001A33') | 
					
						
							|  |  |  |  |       .padding({ left: 15, right: 15 }) | 
					
						
							|  |  |  |  |       .justifyContent(FlexAlign.SpaceBetween) | 
					
						
							|  |  |  |  |       .alignItems(VerticalAlign.Center) | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       Row() { | 
					
						
							|  |  |  |  |         Row() { | 
					
						
							|  |  |  |  |           Column() { | 
					
						
							|  |  |  |  |             Row() { | 
					
						
							|  |  |  |  |               Column() { | 
					
						
							|  |  |  |  |                 Row() { | 
					
						
							|  |  |  |  |                   Text('考生姓名:').fontColor('#E5CCA1').fontSize(this.FONTSIZE) | 
					
						
							|  |  |  |  |                   Text(this.name).fontColor('#FFF').fontSize(this.FONTSIZE) | 
					
						
							|  |  |  |  |                 }.margin({ bottom: 10 }) | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 Row() { | 
					
						
							|  |  |  |  |                   Text('开始时间:').fontColor('#E5CCA1').fontSize(this.FONTSIZE) | 
					
						
							|  |  |  |  |                   Text(this.startTime).fontColor('#FFF').fontSize(this.FONTSIZE) | 
					
						
							|  |  |  |  |                 }.margin({ bottom: 10 }) | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 if (this.examSubject == "3") { | 
					
						
							|  |  |  |  |                   Row() { | 
					
						
							|  |  |  |  |                     Text('考试路线:').fontColor('#E5CCA1').fontSize(this.FONTSIZE) | 
					
						
							|  |  |  |  |                     Text(`线路${this.wayno || 3}`).fontColor('#FFAD33').fontSize(this.FONTSIZE) | 
					
						
							|  |  |  |  |                   } | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |               }.width('45%').alignItems(HorizontalAlign.Start) | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |               Column() { | 
					
						
							|  |  |  |  |                 Row() { | 
					
						
							|  |  |  |  |                   Text('身份证号:').fontColor('#E5CCA1').fontSize(this.FONTSIZE) | 
					
						
							|  |  |  |  |                   Text(this.idCard).fontColor('#FFF').fontSize(this.FONTSIZE) | 
					
						
							|  |  |  |  |                 }.margin({ bottom: 10 }) | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 Row() { | 
					
						
							|  |  |  |  |                   Text('考试用时:').fontColor('#E5CCA1').fontSize(this.FONTSIZE) | 
					
						
							| 
									
										
										
										
											2025-06-19 16:53:49 +08:00
										 |  |  |  |                   Text(FormatTimeFlexible(this.examTime)).fontColor('#FFF').fontSize(this.FONTSIZE) | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |                 }.margin({ bottom: 10 }) | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 if (this.examSubject == "3") { | 
					
						
							|  |  |  |  |                   Row() { | 
					
						
							|  |  |  |  |                     if (Reflect.get(this.judgeConfigObj, '375') == '0') { | 
					
						
							|  |  |  |  |                       Text(`应行驶:${this.examMileage}m`) | 
					
						
							|  |  |  |  |                         .fontColor('#E5CCA1') | 
					
						
							|  |  |  |  |                         .fontSize(this.FONTSIZE) | 
					
						
							|  |  |  |  |                         .padding({ right: 20 }) | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  |                     Text(`已行驶:${this.jl}m`).fontColor('#FFAD33').fontSize(this.FONTSIZE) | 
					
						
							|  |  |  |  |                   } | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |               }.alignItems(HorizontalAlign.Start) | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             }.width('100%') | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             Column() { | 
					
						
							|  |  |  |  |               Row() { | 
					
						
							|  |  |  |  |                 Text(this.carztStr).fontColor('#FFA500').fontSize(this.FONTSIZE) | 
					
						
							|  |  |  |  |                 if (Reflect.get(this.judgeConfigObj, '342') == '0') { | 
					
						
							|  |  |  |  |                   Text(`${this.dw}挡`).fontColor('#FFA500').fontSize(this.FONTSIZE).padding({ left: 15, right: 15 }) | 
					
						
							|  |  |  |  |                   Text(`${this.sd}km/h`).fontColor('#FFA500').fontSize(this.FONTSIZE) | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |               }.height(40) | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |               Row() { | 
					
						
							|  |  |  |  |                 Flex({ direction: FlexDirection.Column }) { | 
					
						
							|  |  |  |  |                   if (this.kfArr.length) { | 
					
						
							|  |  |  |  |                     List({ scroller: this.kfArrScroller }) { | 
					
						
							|  |  |  |  |                       ForEach(this.kfArr, (item: MarkRule) => { | 
					
						
							|  |  |  |  |                         ListItem() { | 
					
						
							|  |  |  |  |                           Column() { | 
					
						
							|  |  |  |  |                             Row() { | 
					
						
							|  |  |  |  |                               Text(item.xmmcStr).fontSize(this.BIGFONTSIZE).fontColor('#FFF') | 
					
						
							|  |  |  |  |                               Text(`${item.score}分`).fontSize(this.BIGFONTSIZE).fontColor('#FFF') | 
					
						
							|  |  |  |  |                             } | 
					
						
							|  |  |  |  |                             .width('100%') | 
					
						
							|  |  |  |  |                             .backgroundColor('#38260B') | 
					
						
							|  |  |  |  |                             .justifyContent(FlexAlign.SpaceBetween) | 
					
						
							|  |  |  |  |                             .padding({ | 
					
						
							|  |  |  |  |                               top: 12, | 
					
						
							|  |  |  |  |                               bottom: 12, | 
					
						
							|  |  |  |  |                               left: 8, | 
					
						
							|  |  |  |  |                               right: 5 | 
					
						
							|  |  |  |  |                             }) | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                             Text(item.desc + `(${item.markcatalog})`) | 
					
						
							|  |  |  |  |                               .fontSize(this.BIGFONTSIZE) | 
					
						
							|  |  |  |  |                               .fontColor('#E5CBA1') | 
					
						
							|  |  |  |  |                               .margin({ | 
					
						
							|  |  |  |  |                                 top: 10, | 
					
						
							|  |  |  |  |                                 bottom: 8, | 
					
						
							|  |  |  |  |                                 left: 5, | 
					
						
							|  |  |  |  |                                 right: 5 | 
					
						
							|  |  |  |  |                               }) | 
					
						
							|  |  |  |  |                           }.margin({ top: 15 }).alignItems(HorizontalAlign.Start) | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                         }.margin({ bottom: 25 }) | 
					
						
							|  |  |  |  |                       }) | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  |                     .padding({ | 
					
						
							|  |  |  |  |                       left: 15, | 
					
						
							|  |  |  |  |                       right: 15, | 
					
						
							|  |  |  |  |                       top: 30, | 
					
						
							|  |  |  |  |                       bottom: 5 | 
					
						
							|  |  |  |  |                     }) | 
					
						
							|  |  |  |  |                   } else { | 
					
						
							|  |  |  |  |                     Column() { | 
					
						
							|  |  |  |  |                       Row() { | 
					
						
							|  |  |  |  |                         Text('暂无扣分项').fontSize(this.BIGFONTSIZE).fontColor('#FFF') | 
					
						
							|  |  |  |  |                       } | 
					
						
							|  |  |  |  |                       .width('100%') | 
					
						
							|  |  |  |  |                       .backgroundColor('#38260B') | 
					
						
							|  |  |  |  |                       .justifyContent(FlexAlign.SpaceBetween) | 
					
						
							|  |  |  |  |                       .padding({ | 
					
						
							|  |  |  |  |                         top: 12, | 
					
						
							|  |  |  |  |                         bottom: 12, | 
					
						
							|  |  |  |  |                         left: 8, | 
					
						
							|  |  |  |  |                         right: 3 | 
					
						
							|  |  |  |  |                       }) | 
					
						
							|  |  |  |  |                     }.margin({ top: 35 }).padding({ left: 20, right: 20 }).alignItems(HorizontalAlign.Start) | 
					
						
							|  |  |  |  |                   } | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 .backgroundImage($rawfile('judge/score_bg.png'), ImageRepeat.NoRepeat) | 
					
						
							|  |  |  |  |                 .backgroundImageSize({ width: '100%', height: '100%' }) | 
					
						
							|  |  |  |  |                 .width(514) | 
					
						
							|  |  |  |  |                 .height(618) | 
					
						
							|  |  |  |  |                 .padding({ | 
					
						
							|  |  |  |  |                   top: 18, | 
					
						
							|  |  |  |  |                   bottom: 15, | 
					
						
							|  |  |  |  |                   left: 13, | 
					
						
							|  |  |  |  |                   right: 14 | 
					
						
							|  |  |  |  |                 }) | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 //科目二 | 
					
						
							|  |  |  |  |                 if (this.examSubject == "2") { | 
					
						
							|  |  |  |  |                   Flex({ wrap: FlexWrap.Wrap, direction: FlexDirection.Row, justifyContent: FlexAlign.SpaceBetween }) { | 
					
						
							|  |  |  |  |                     List({}) { | 
					
						
							| 
									
										
										
										
											2025-06-18 15:24:10 +08:00
										 |  |  |  |                       ForEach(CutArray(this.projects, 2), (item: [ProjectInfo, ProjectInfo]) => { | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |                         ListItem() { | 
					
						
							|  |  |  |  |                           Row() { | 
					
						
							|  |  |  |  |                             Row() { | 
					
						
							|  |  |  |  |                               //#FF7566 #00FFD5 #E6DECF | 
					
						
							|  |  |  |  |                               // Text(this.projectsObj[item[0].projectCode]) | 
					
						
							|  |  |  |  |                               Text(item[0].abbreviation) | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |                                 .fontSize(item[0].abbreviation!.length > 5 ? 28 : 32) | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |                                 .fontColor(this.getProjectColor(item[0])) | 
					
						
							|  |  |  |  |                             } | 
					
						
							|  |  |  |  |                             .backgroundImage($rawfile('judge/project_item.png'), ImageRepeat.NoRepeat) | 
					
						
							|  |  |  |  |                             .backgroundImageSize({ width: '100%', height: '100%' }) | 
					
						
							|  |  |  |  |                             .width('48.5%') | 
					
						
							|  |  |  |  |                             .height(115) | 
					
						
							|  |  |  |  |                             .margin({ bottom: 5 }) | 
					
						
							|  |  |  |  |                             .justifyContent(FlexAlign.Center) | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                             if (item[1]) { | 
					
						
							|  |  |  |  |                               Row() { | 
					
						
							|  |  |  |  |                                 //#FF7566 #00FFD5 #E6DECF | 
					
						
							|  |  |  |  |                                 Text(item[1].abbreviation) | 
					
						
							|  |  |  |  |                                   .fontSize(item[1].abbreviation.length > 5 ? 28 : 32) | 
					
						
							|  |  |  |  |                                   .fontColor(this.getProjectColor(item[1])) | 
					
						
							|  |  |  |  |                               } | 
					
						
							|  |  |  |  |                               .backgroundImage($rawfile('judge/project_item.png'), ImageRepeat.NoRepeat) | 
					
						
							|  |  |  |  |                               .backgroundImageSize({ width: '100%', height: '100%' }) | 
					
						
							|  |  |  |  |                               .width('48.5%') | 
					
						
							|  |  |  |  |                               .height(115) | 
					
						
							|  |  |  |  |                               .margin({ left: 5, bottom: 5 }) | 
					
						
							|  |  |  |  |                               .justifyContent(FlexAlign.Center) | 
					
						
							|  |  |  |  |                             } | 
					
						
							|  |  |  |  |                           } | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  |                       }); | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  |                   } | 
					
						
							|  |  |  |  |                   .backgroundImage($rawfile('judge/project_bg.png'), ImageRepeat.NoRepeat) | 
					
						
							|  |  |  |  |                   .backgroundImageSize({ width: '100%', height: '100%' }) | 
					
						
							|  |  |  |  |                   .width('57%') | 
					
						
							|  |  |  |  |                   .height('100%') | 
					
						
							|  |  |  |  |                   .padding(30) | 
					
						
							|  |  |  |  |                   .margin({ right: 10 }) | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 //科目三 | 
					
						
							|  |  |  |  |                 if (this.examSubject == '3') { | 
					
						
							|  |  |  |  |                   Column() { | 
					
						
							|  |  |  |  |                     Flex({ | 
					
						
							|  |  |  |  |                       wrap: FlexWrap.Wrap, | 
					
						
							|  |  |  |  |                       direction: FlexDirection.Row, | 
					
						
							|  |  |  |  |                       justifyContent: FlexAlign.SpaceBetween | 
					
						
							|  |  |  |  |                     }) { | 
					
						
							|  |  |  |  |                       List({}) { | 
					
						
							|  |  |  |  |                         ForEach(this.projects, (project: ProjectInfo) => { | 
					
						
							|  |  |  |  |                           ListItem() { | 
					
						
							|  |  |  |  |                             Text(project.name) { | 
					
						
							|  |  |  |  |                             } | 
					
						
							|  |  |  |  |                             .fontColor(this.getProjectColor(project)) | 
					
						
							|  |  |  |  |                             .margin({ bottom: 2 }) | 
					
						
							|  |  |  |  |                             .fontSize(24) | 
					
						
							|  |  |  |  |                           }.margin({ bottom: 2 }) | 
					
						
							|  |  |  |  |                         }) | 
					
						
							|  |  |  |  |                       }.lanes(2).margin({ left: 25 }) | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  |                     .width('100%') | 
					
						
							|  |  |  |  |                     .height('57%') | 
					
						
							|  |  |  |  |                     .backgroundImage($rawfile('judge/project_km3_bg.png'), ImageRepeat.NoRepeat) | 
					
						
							|  |  |  |  |                     .backgroundImageSize({ width: '100%', height: '100%' }) | 
					
						
							|  |  |  |  |                     .padding(30) | 
					
						
							|  |  |  |  |                     .margin({ right: 5 }) | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                     if (this.projects.length) { | 
					
						
							|  |  |  |  |                       Flex({ | 
					
						
							|  |  |  |  |                         wrap: FlexWrap.Wrap, | 
					
						
							|  |  |  |  |                         direction: FlexDirection.Row, | 
					
						
							|  |  |  |  |                         justifyContent: FlexAlign.SpaceAround | 
					
						
							|  |  |  |  |                       }) { | 
					
						
							|  |  |  |  |                         List() { | 
					
						
							|  |  |  |  |                           ForEach(this.artSubject3Projects, (item: string, index) => { | 
					
						
							|  |  |  |  |                             ListItem() { | 
					
						
							|  |  |  |  |                             } | 
					
						
							|  |  |  |  |                             .backgroundImage( | 
					
						
							|  |  |  |  |                               $rawfile( | 
					
						
							|  |  |  |  |                                 `judge/km3/${this.getIsExitManualProject(index) ? (this.getIsEndManualProject(index)) : | 
					
						
							|  |  |  |  |                                   (item + '_gray')}.png` | 
					
						
							|  |  |  |  |                               ), ImageRepeat.NoRepeat) | 
					
						
							|  |  |  |  |                             .backgroundImageSize({ width: '100%', height: '100%' }) | 
					
						
							|  |  |  |  |                             .width(174) | 
					
						
							|  |  |  |  |                             .height(118 * 0.95) | 
					
						
							|  |  |  |  |                             .margin({ bottom: 8 }) | 
					
						
							|  |  |  |  |                             .onClick(() => { | 
					
						
							|  |  |  |  |                               // this.vocObj.playAudio({ | 
					
						
							|  |  |  |  |                               //   type: 1, | 
					
						
							|  |  |  |  |                               //   name: 'button_media.wav' | 
					
						
							|  |  |  |  |                               // }) | 
					
						
							|  |  |  |  |                               this.setManualProjectFn(index) | 
					
						
							|  |  |  |  |                             }) | 
					
						
							|  |  |  |  |                           }) | 
					
						
							|  |  |  |  |                         }.lanes(3).margin({ left: 5, top: 12 }) | 
					
						
							|  |  |  |  |                       } | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                   } | 
					
						
							|  |  |  |  |                   .backgroundImage($rawfile('judge/project_bg.png'), ImageRepeat.NoRepeat) | 
					
						
							|  |  |  |  |                   .backgroundImageSize({ width: '100%', height: '100%' }) | 
					
						
							|  |  |  |  |                   .width(660) | 
					
						
							|  |  |  |  |                   .height(640) | 
					
						
							|  |  |  |  |                   .padding(44) | 
					
						
							|  |  |  |  |                   .margin({ right: 10 }) | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |               }.margin({ top: 15 }).height('80%').justifyContent(FlexAlign.SpaceBetween) | 
					
						
							|  |  |  |  |             }.width('100%').height('100%').alignItems(HorizontalAlign.Start).margin({ top: 10 }) | 
					
						
							|  |  |  |  |           }.height('100%').alignItems(HorizontalAlign.Start) | 
					
						
							|  |  |  |  |         }.width('75%').height('100%') | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         Column() { | 
					
						
							|  |  |  |  |           Column() { | 
					
						
							|  |  |  |  |             Row() { | 
					
						
							|  |  |  |  |               Text(this.totalScore <= 0 ? '0' : this.totalScore + '').fontColor('#FFEECC').fontSize(55) | 
					
						
							|  |  |  |  |               Text('分').fontColor('#FFEECC').fontSize(30).padding({ top: 5 }) | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             .width(334) | 
					
						
							|  |  |  |  |             .height(120) | 
					
						
							|  |  |  |  |             .justifyContent(FlexAlign.Center) | 
					
						
							|  |  |  |  |             .alignItems(VerticalAlign.Center) | 
					
						
							|  |  |  |  |             .border({ width: 5, color: '#4D4136', radius: 30 }) | 
					
						
							|  |  |  |  |             .onClick(() => { | 
					
						
							|  |  |  |  |               // this.vocObj.playAudio({ | 
					
						
							|  |  |  |  |               //   type: 1, | 
					
						
							|  |  |  |  |               //   name: 'button_media.wav' | 
					
						
							|  |  |  |  |               // }) | 
					
						
							| 
									
										
										
										
											2025-06-19 18:03:14 +08:00
										 |  |  |  |               this.signalTrajectoryDialog.open() | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |             }) | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             Row() { | 
					
						
							|  |  |  |  |               Image(this.kszp).width('85%').height('85%') | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             .width(226) | 
					
						
							|  |  |  |  |             .height(312) | 
					
						
							|  |  |  |  |             .backgroundImage($rawfile('judge/photo_bg.png'), ImageRepeat.NoRepeat) | 
					
						
							|  |  |  |  |             .backgroundImageSize({ width: '100%', height: '100%' }) | 
					
						
							|  |  |  |  |             .justifyContent(FlexAlign.Center) | 
					
						
							|  |  |  |  |             .alignItems(VerticalAlign.Center) | 
					
						
							|  |  |  |  |             .margin({ top: 30, bottom: 15 }) | 
					
						
							|  |  |  |  |           } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |           Column() { | 
					
						
							|  |  |  |  |             if (this.getIsManualKf()) { | 
					
						
							|  |  |  |  |               Row() { | 
					
						
							|  |  |  |  |                 Row() { | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 .width(60) | 
					
						
							|  |  |  |  |                 .height(60) | 
					
						
							|  |  |  |  |                 .backgroundImage($rawfile('judge/manual_judge.png'), ImageRepeat.NoRepeat) | 
					
						
							|  |  |  |  |                 .backgroundImageSize({ width: '100%', height: '100%' }) | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 Text('人工评判').fontColor('#FFF').fontSize(32).padding({ right: 12 }) | 
					
						
							|  |  |  |  |               } | 
					
						
							|  |  |  |  |               .width(334) | 
					
						
							|  |  |  |  |               .height(110) | 
					
						
							|  |  |  |  |               .justifyContent(FlexAlign.Center) | 
					
						
							|  |  |  |  |               .alignItems(VerticalAlign.Center) | 
					
						
							|  |  |  |  |               .backgroundImage($rawfile('judge/button_nor.png'), ImageRepeat.NoRepeat) | 
					
						
							|  |  |  |  |               .backgroundImageSize({ width: '100%', height: '100%' }) | 
					
						
							|  |  |  |  |               .margin({ bottom: 10 }) | 
					
						
							|  |  |  |  |               .onClick(() => { | 
					
						
							|  |  |  |  |                 // this.vocObj.playAudio({ | 
					
						
							|  |  |  |  |                 //   type: 1, | 
					
						
							|  |  |  |  |                 //   name: 'button_media.wav' | 
					
						
							|  |  |  |  |                 // }) | 
					
						
							|  |  |  |  |                 this.isDeductedPopShow = true | 
					
						
							|  |  |  |  |               }) | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             Row() { | 
					
						
							|  |  |  |  |               Row() { | 
					
						
							|  |  |  |  |               } | 
					
						
							|  |  |  |  |               .width(60) | 
					
						
							|  |  |  |  |               .height(60) | 
					
						
							|  |  |  |  |               .backgroundImage($rawfile('judge/phone.png'), ImageRepeat.NoRepeat) | 
					
						
							|  |  |  |  |               .backgroundImageSize({ width: '100%', height: '100%' }) | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |               Text('呼叫请求').fontColor('#FFF').fontSize(32).padding({ right: 12 }) | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             .width(334) | 
					
						
							|  |  |  |  |             .height(110) | 
					
						
							|  |  |  |  |             .justifyContent(FlexAlign.Center) | 
					
						
							|  |  |  |  |             .alignItems(VerticalAlign.Center) | 
					
						
							|  |  |  |  |             .backgroundImage($rawfile('judge/button_nor.png'), ImageRepeat.NoRepeat) | 
					
						
							|  |  |  |  |             .backgroundImageSize({ width: '100%', height: '100%' }) | 
					
						
							|  |  |  |  |             .margin({ bottom: 10 }) | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             Row() { | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             .width(334) | 
					
						
							|  |  |  |  |             .height(100) | 
					
						
							|  |  |  |  |             .backgroundImage($rawfile('judge/anniu_nor.png'), ImageRepeat.NoRepeat) | 
					
						
							|  |  |  |  |             .backgroundImageSize({ width: '100%', height: '100%' }) | 
					
						
							|  |  |  |  |             .onClick(() => { | 
					
						
							|  |  |  |  |               // this.vocObj.playAudio({ | 
					
						
							|  |  |  |  |               //   type: 1, | 
					
						
							|  |  |  |  |               //   name: 'button_media.wav' | 
					
						
							|  |  |  |  |               // }) | 
					
						
							|  |  |  |  |               if (Reflect.get(this.judgeConfigObj, '353') == '0') { | 
					
						
							|  |  |  |  |                 this.endPopupVisible = true | 
					
						
							|  |  |  |  |               } else { | 
					
						
							|  |  |  |  |                 Prompt.showToast({ | 
					
						
							|  |  |  |  |                   message: '车上不允许手动结束考试!', | 
					
						
							|  |  |  |  |                   duration: 4000 | 
					
						
							|  |  |  |  |                 }); | 
					
						
							|  |  |  |  |               } | 
					
						
							|  |  |  |  |             }) | 
					
						
							|  |  |  |  |           }.margin({ bottom: 30 }) | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |         .width('25%') | 
					
						
							|  |  |  |  |         .height('100%') | 
					
						
							|  |  |  |  |         .justifyContent(FlexAlign.SpaceBetween) | 
					
						
							|  |  |  |  |         .alignItems(HorizontalAlign.Center) | 
					
						
							|  |  |  |  |         .margin({ bottom: 20 }) | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       .height('90%') | 
					
						
							|  |  |  |  |       .justifyContent(FlexAlign.Start) | 
					
						
							|  |  |  |  |       .padding({ | 
					
						
							|  |  |  |  |         top: 37, | 
					
						
							|  |  |  |  |         left: 60, | 
					
						
							|  |  |  |  |         bottom: 35, | 
					
						
							|  |  |  |  |         right: 60 | 
					
						
							|  |  |  |  |       }) | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       //科目三人工扣分弹窗 | 
					
						
							|  |  |  |  |       if (this.isDeductedPopShow && this.examSubject == '3' && Reflect.get(this.judgeConfigObj, '342') == '0') { | 
					
						
							|  |  |  |  |         DeductedPopup({ | 
					
						
							|  |  |  |  |           defaultTabIndex: this.defaultTabIndex, | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |           // currentItems: Reflect.ownKeys(this.projectsObj).map(projectKey => { | 
					
						
							|  |  |  |  |           //   const project: ProjectInfo = Reflect.get(this.projectsObj, projectKey) | 
					
						
							|  |  |  |  |           //   return project.type == '2' ? project.projectCode : undefined | 
					
						
							|  |  |  |  |           // }).filter(project => project !== undefined), | 
					
						
							|  |  |  |  |           currentItems: Object.entries(this.projectsObj).filter((item: [string, ProjectInfo]) => { | 
					
						
							|  |  |  |  |             return item[1].type === '2' | 
					
						
							|  |  |  |  |           }).map((item: [string, ProjectInfo]) => item[1].projectCode!), | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |           markRules: this.manualMarkRules, | 
					
						
							|  |  |  |  |           closePopup: () => { | 
					
						
							|  |  |  |  |             this.isDeductedPopShow = false; | 
					
						
							|  |  |  |  |             this.defaultTabIndex = 0; | 
					
						
							|  |  |  |  |           }, | 
					
						
							|  |  |  |  |           confirmMark: async (itemno: string, serial: string) => { | 
					
						
							|  |  |  |  |             clearTimeout(this.popTimer) | 
					
						
							|  |  |  |  |             this.popTimer = setTimeout(async () => { | 
					
						
							|  |  |  |  |               const judge = this.judge | 
					
						
							|  |  |  |  |               await judge.setJudgeMark(itemno, serial); | 
					
						
							|  |  |  |  |               this.isDeductedPopShow = false | 
					
						
							|  |  |  |  |               this.popTimer = null; | 
					
						
							|  |  |  |  |             }, 500) | 
					
						
							|  |  |  |  |           } | 
					
						
							|  |  |  |  |         }) | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       //科目三人工项目确认框 | 
					
						
							|  |  |  |  |       if (this.isAmplifyPopShow && this.examSubject == '3') { | 
					
						
							|  |  |  |  |         AmplifyPopup({ | 
					
						
							|  |  |  |  |           amplifyImgIndex: this.amplifiedImgIndex, | 
					
						
							|  |  |  |  |           confirmAmplify: async (amplify: AmplifyItem) => { | 
					
						
							|  |  |  |  |             clearTimeout(this.popTimer) | 
					
						
							|  |  |  |  |             this.popTimer = setTimeout(async () => { | 
					
						
							|  |  |  |  |               const judge = this.judge | 
					
						
							|  |  |  |  |               await judge.setJudgeItem(amplify.projectCode, 1); | 
					
						
							|  |  |  |  |               this.isAmplifyPopShow = false | 
					
						
							|  |  |  |  |               this.popTimer = null; | 
					
						
							|  |  |  |  |             }, 500) | 
					
						
							|  |  |  |  |           }, | 
					
						
							|  |  |  |  |           closeAmplifyPop: () => { | 
					
						
							|  |  |  |  |             this.isAmplifyPopShow = false | 
					
						
							|  |  |  |  |           } | 
					
						
							|  |  |  |  |         }) | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       //结束考试弹窗 | 
					
						
							|  |  |  |  |       if (this.endPopupVisible) { | 
					
						
							|  |  |  |  |         EndPoPup({ | 
					
						
							|  |  |  |  |           title: '确定结束考试吗?', | 
					
						
							|  |  |  |  |           cancelFn: () => { | 
					
						
							|  |  |  |  |             this.endPopupVisible = false; | 
					
						
							|  |  |  |  |           }, | 
					
						
							|  |  |  |  |           confirmFn: async () => { | 
					
						
							|  |  |  |  |             if (this.isErrorMsgEnd) { | 
					
						
							|  |  |  |  |               this.judge.closeAllFiles() | 
					
						
							|  |  |  |  |               router.back() | 
					
						
							|  |  |  |  |               return | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             if (Reflect.get(this.judgeConfigObj, '344') == 1) { | 
					
						
							|  |  |  |  |               Prompt.showToast({ | 
					
						
							|  |  |  |  |                 message: '考试未结束,不允许手动退出!', | 
					
						
							|  |  |  |  |                 duration: 4000 | 
					
						
							|  |  |  |  |               }); | 
					
						
							|  |  |  |  |               return | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             this.endPopupVisible = false; | 
					
						
							|  |  |  |  |             this.loadingPopupVisible = true | 
					
						
							|  |  |  |  |             clearInterval(this.timer); | 
					
						
							|  |  |  |  |             clearInterval(AppStorage.get('judgeTimer')) | 
					
						
							|  |  |  |  |             try { | 
					
						
							|  |  |  |  |               this.judge.checkExamIsEnd(true); | 
					
						
							|  |  |  |  |             } catch (e) { | 
					
						
							|  |  |  |  |               this.judge.closeAllFiles() | 
					
						
							|  |  |  |  |               router.back() | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |           } | 
					
						
							|  |  |  |  |         }) | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       //loading 弹窗 | 
					
						
							|  |  |  |  |       if (this.loadingPopupVisible) { | 
					
						
							|  |  |  |  |         LoadingPopup({ | 
					
						
							|  |  |  |  |           title: '正在生成考试记录,请稍后...', | 
					
						
							|  |  |  |  |         }) | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       if (this.errorMsg) { | 
					
						
							|  |  |  |  |         MsgPopup({ | 
					
						
							|  |  |  |  |           title: this.errorMsg, | 
					
						
							|  |  |  |  |           confirmFn: () => { | 
					
						
							|  |  |  |  |             this.errorMsg = '' | 
					
						
							|  |  |  |  |             this.isErrorMsgEnd = true; | 
					
						
							|  |  |  |  |             if (this.disConnectErrorOpen) { | 
					
						
							|  |  |  |  |               this.context.terminateSelf() | 
					
						
							|  |  |  |  |             } else { | 
					
						
							|  |  |  |  |               router.back() | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |           }, | 
					
						
							|  |  |  |  |         }) | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       if (this.dwztErrorVisible) { | 
					
						
							|  |  |  |  |         DwztErrorPopup({ | 
					
						
							|  |  |  |  |           title: '当前差分状态异常,学员将无法正常进行考试评判,请将车辆行驶到开阔地,等待程序自检,差分正常后会自动关闭该对话框', | 
					
						
							|  |  |  |  |           cancelFn: () => { | 
					
						
							|  |  |  |  |             this.dwztErrorVisible = false; | 
					
						
							|  |  |  |  |           }, | 
					
						
							|  |  |  |  |           confirmFn: () => { | 
					
						
							|  |  |  |  |             clearInterval(this.timer); | 
					
						
							|  |  |  |  |             clearInterval(AppStorage.get('judgeTimer')) | 
					
						
							|  |  |  |  |             this.judge.checkExamIsEnd(true); | 
					
						
							|  |  |  |  |           }, | 
					
						
							|  |  |  |  |         }) | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       if (this.disConnectErrorOpen) { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  |     .height('100%').backgroundColor('#000').justifyContent(FlexAlign.Start) | 
					
						
							|  |  |  |  |   } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   getProjectColor(project: ProjectInfo) { | 
					
						
							|  |  |  |  |     const type = project.type; | 
					
						
							|  |  |  |  |     switch (type) { | 
					
						
							|  |  |  |  |       case '1': | 
					
						
							|  |  |  |  |         return '#E6DECF'; | 
					
						
							|  |  |  |  |       case '2': | 
					
						
							|  |  |  |  |         return '#FFAD33'; | 
					
						
							|  |  |  |  |       case '3': | 
					
						
							|  |  |  |  |         return '#ff109d0a'; | 
					
						
							|  |  |  |  |       case '4': | 
					
						
							|  |  |  |  |         return '#FF7566'; | 
					
						
							|  |  |  |  |       default: | 
					
						
							|  |  |  |  |         return '#E6DECF'; | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  |   } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   //人工项目操作 | 
					
						
							|  |  |  |  |   async setManualProjectFn(index: number) { | 
					
						
							|  |  |  |  |     const isManualProjectIn = this.isManualProjectIn; | 
					
						
							|  |  |  |  |     const getIsExitManualProject = this.getIsExitManualProject; | 
					
						
							|  |  |  |  |     const artSubject3ProjectsCodesArr = this.artSubject3ProjectsCodesArr; | 
					
						
							|  |  |  |  |     const projectsObj = this.projectsObj; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |     const projectCode = artSubject3ProjectsCodesArr[index] | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |     if (index === 5) { | 
					
						
							| 
									
										
										
										
											2025-06-23 17:24:47 +08:00
										 |  |  |  |       dConsole.info(JudgeTag, 'surenjun 靠边停车状态=> ', getIsExitManualProject(index)) | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |     } | 
					
						
							|  |  |  |  |     const currentProject: ProjectInfo = Reflect.get(projectsObj, projectCode) | 
					
						
							|  |  |  |  |     if (getIsExitManualProject(index)) { | 
					
						
							|  |  |  |  |       // 正在进行的项目 取消项目 | 
					
						
							|  |  |  |  |       if (isManualProjectIn && currentProject.type == '2') { | 
					
						
							|  |  |  |  |         //判断人工是否能取消项目 && 当前项目有扣分的不能取消 | 
					
						
							|  |  |  |  |         if (Reflect.get(this.judgeConfigObj, '340') == 1) { | 
					
						
							|  |  |  |  |           await this.judge.setJudgeItem(projectCode, 2); | 
					
						
							|  |  |  |  |           Prompt.showToast({ | 
					
						
							|  |  |  |  |             message: '项目取消', | 
					
						
							|  |  |  |  |             duration: 2000 | 
					
						
							|  |  |  |  |           }) | 
					
						
							|  |  |  |  |           return | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       // 靠边停车时候可以触发 | 
					
						
							|  |  |  |  |       if (Reflect.get(this.judgeConfigObj, '343') === '0') { | 
					
						
							|  |  |  |  |         const xmmcStr = this.xmmcStr; | 
					
						
							|  |  |  |  |         if (xmmcStr == '无' || xmmcStr == '') { | 
					
						
							|  |  |  |  |           //512[6] 人工项目按钮放大确认 | 
					
						
							|  |  |  |  |           const param512: string[] = (Reflect.get(this.judgeConfigObj, '512') || '').split(','); | 
					
						
							| 
									
										
										
										
											2025-06-23 17:24:47 +08:00
										 |  |  |  |           dConsole.info(JudgeTag, 'surenjun', param512) | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |           if (param512[6] !== '0') { | 
					
						
							|  |  |  |  |             this.amplifiedImgIndex = index; | 
					
						
							|  |  |  |  |             this.isAmplifyPopShow = true | 
					
						
							|  |  |  |  |           } else { | 
					
						
							|  |  |  |  |             const judge = this.judge | 
					
						
							|  |  |  |  |             await judge.setJudgeItem(projectCode, 1); | 
					
						
							|  |  |  |  |           } | 
					
						
							|  |  |  |  |         } else { | 
					
						
							|  |  |  |  |           if (index === 5) { | 
					
						
							|  |  |  |  |             Prompt.showToast({ | 
					
						
							|  |  |  |  |               message: `${xmmcStr}未结束,不允许靠边停车`, | 
					
						
							|  |  |  |  |               duration: 8000 | 
					
						
							|  |  |  |  |             }); | 
					
						
							|  |  |  |  |           } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |       } else { | 
					
						
							|  |  |  |  |         this.amplifiedImgIndex = index; | 
					
						
							|  |  |  |  |         this.isAmplifyPopShow = true | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  |   } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   // 获取是否能人工进项目 | 
					
						
							|  |  |  |  |   getIsExitManualProject = (index: number) => { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     const judgeConfigObj = this.judgeConfigObj; | 
					
						
							|  |  |  |  |     const artSubject3ProjectsCodesArr = this.artSubject3ProjectsCodesArr; | 
					
						
							|  |  |  |  |     const projectsObj = this.projectsObj; | 
					
						
							|  |  |  |  |     const carztStr = this.carztStr; | 
					
						
							|  |  |  |  |     const isManualProjectIn = this.isManualProjectIn; | 
					
						
							|  |  |  |  |     const isProjectIn = this.isProjectIn; | 
					
						
							|  |  |  |  |     const getProjectIsInRoad = this.getProjectIsInRoad; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     const projectCode = artSubject3ProjectsCodesArr[index]; | 
					
						
							|  |  |  |  |     const currentProject: ProjectInfo = Reflect.get(projectsObj, projectCode) | 
					
						
							|  |  |  |  |     if (currentProject === undefined) { | 
					
						
							|  |  |  |  |       return false | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  |     const projectType = currentProject.type; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     //不允许人工触发的项目列表,以","分隔 | 
					
						
							|  |  |  |  |     const unExitManualProjects: string[] = Reflect.get(this.judgeConfigObj, '332').split(',') || []; | 
					
						
							|  |  |  |  |     //直线行驶中不进其他考试项目(0-否 1-是) | 
					
						
							|  |  |  |  |     const param348: string = Reflect.get(this.judgeConfigObj, '348') || '0', | 
					
						
							|  |  |  |  |       //里程不够允许手工点靠边停车(0-否 1-是) | 
					
						
							|  |  |  |  |       param387: string = Reflect.get(this.judgeConfigObj, '387') || '0', | 
					
						
							|  |  |  |  |       //里程不够不报靠边停车(0-否+1-是+2-必考项目未完成且里程不够不报项目) | 
					
						
							|  |  |  |  |       param319: string = Reflect.get(this.judgeConfigObj, '319') || '0', | 
					
						
							|  |  |  |  |       //人工项目是否能取消 1:可取消; | 
					
						
							|  |  |  |  |       param340: string = Reflect.get(this.judgeConfigObj, '340') || '0', | 
					
						
							|  |  |  |  |       //307参数里设置的项目,项目已经做过,后续不能人工触发; | 
					
						
							|  |  |  |  |       param307: string[] = (Reflect.get(this.judgeConfigObj, '307') || '').split(','); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     //非行驶状态(没有速度),人工项目不能触发(按钮灰色) | 
					
						
							|  |  |  |  |     if (carztStr === '停车') { | 
					
						
							|  |  |  |  |       return false | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     //车上是否能进行人工操作(0-能1-不能人工评判2-不能人工进项目3-都不能) | 
					
						
							|  |  |  |  |     if (Reflect.get(this.judgeConfigObj, '342') === '3' || Reflect.get(this.judgeConfigObj, '342') === '2') { | 
					
						
							|  |  |  |  |       return false | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     //不允许人工触发的项目列表 | 
					
						
							|  |  |  |  |     if (unExitManualProjects.includes(artSubject3ProjectsCodesArr[index])) { | 
					
						
							|  |  |  |  |       return false | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     //项目进行中不能人工触发 | 
					
						
							|  |  |  |  |     if (isProjectIn) { | 
					
						
							|  |  |  |  |       if (param340 == '1') { | 
					
						
							|  |  |  |  |         if (isManualProjectIn && (currentProject.type == '2')) { | 
					
						
							|  |  |  |  |           return true | 
					
						
							|  |  |  |  |         } else { | 
					
						
							|  |  |  |  |           return false | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       return false | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     //项目路段信息判断 | 
					
						
							|  |  |  |  |     if (!getProjectIsInRoad(projectCode + '')) { | 
					
						
							|  |  |  |  |       return false | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     const project_9: ProjectInfo = Reflect.get(projectsObj, '9') | 
					
						
							|  |  |  |  |     // 直线行驶中不进其他考试项目(0-否 1-是) | 
					
						
							|  |  |  |  |     if (param348 == '0' && project_9.type == '2') { | 
					
						
							|  |  |  |  |       return index === 0 ? true : false | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     //项目已经做过,后续不能人工触发 | 
					
						
							|  |  |  |  |     if (param307.includes(projectCode) && (projectType == '3' || projectType == '4')) { | 
					
						
							|  |  |  |  |       return false | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     //319不为0,或者387不为1,里程不够时,靠边停车项目不能触发 | 
					
						
							|  |  |  |  |     if ((param387 != '1' || param319 != '0') && index === 5) { | 
					
						
							|  |  |  |  |       const examMileage = this.examMileage | 
					
						
							|  |  |  |  |       const isRequiredProjectsEnd = this.isRequiredProjectsEnd | 
					
						
							|  |  |  |  |       const jl = this.jl | 
					
						
							|  |  |  |  |       //里程是否达标 && 必考项目是否全完成 | 
					
						
							|  |  |  |  |       return jl >= Number(examMileage) && isRequiredProjectsEnd | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  |     return true | 
					
						
							|  |  |  |  |   } | 
					
						
							|  |  |  |  |   // 判断项目是否在当前路段号 | 
					
						
							|  |  |  |  |   getProjectIsInRoad = (projectCode: string,) => { | 
					
						
							|  |  |  |  |     const judgeConfigObj = this.judgeConfigObj; | 
					
						
							|  |  |  |  |     const lane = this.lane; | 
					
						
							|  |  |  |  |     const road = lane.road; | 
					
						
							|  |  |  |  |     const num = lane.num; | 
					
						
							|  |  |  |  |     const count = lane.count; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     const param_3: string[] = (Reflect.get(this.judgeConfigObj, '514')?.split(',') || []); | 
					
						
							|  |  |  |  |     const param_4: string[] = (Reflect.get(this.judgeConfigObj, '515')?.split(',') || []); | 
					
						
							|  |  |  |  |     const param_10: string[] = (Reflect.get(this.judgeConfigObj, '516')?.split(',') || []); | 
					
						
							|  |  |  |  |     const param_11: string[] = (Reflect.get(this.judgeConfigObj, '517')?.split(',') || []); | 
					
						
							|  |  |  |  |     const param_9: string[] = (Reflect.get(this.judgeConfigObj, '518')?.split(',') || []); | 
					
						
							|  |  |  |  |     const param_12: string[] = (Reflect.get(this.judgeConfigObj, '519')?.split(',') || []); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     const projectRoads: ProjectRoads = { | 
					
						
							|  |  |  |  |       //直线行驶 | 
					
						
							|  |  |  |  |       param_3, | 
					
						
							|  |  |  |  |       //变更车道 | 
					
						
							|  |  |  |  |       param_4, | 
					
						
							|  |  |  |  |       //超车 | 
					
						
							|  |  |  |  |       param_10, | 
					
						
							|  |  |  |  |       //靠边停车 | 
					
						
							|  |  |  |  |       param_11, | 
					
						
							|  |  |  |  |       //会车 | 
					
						
							|  |  |  |  |       param_9, | 
					
						
							|  |  |  |  |       //掉头 | 
					
						
							|  |  |  |  |       param_12, | 
					
						
							|  |  |  |  |     }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     //未测绘得道路上或者不在差分状态 | 
					
						
							|  |  |  |  |     if (road === '') { | 
					
						
							|  |  |  |  |       return false | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  |     const currentProjectRoad: string[] = Reflect.get(projectRoads, `param_${projectCode}`) | 
					
						
							|  |  |  |  |     if (currentProjectRoad.length == 0) { | 
					
						
							|  |  |  |  |       return true | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     //设置了514-519参数,只能在设置的路段触发对应项目 | 
					
						
							|  |  |  |  |     if (currentProjectRoad.includes(road)) { | 
					
						
							|  |  |  |  |       //如果525为1,则514-519设置的路段不能触发对应项目 | 
					
						
							|  |  |  |  |       if (Reflect.get(this.judgeConfigObj, '525') == '1') { | 
					
						
							|  |  |  |  |         return false | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |     } else { | 
					
						
							|  |  |  |  |       return false | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     //405参数为2是,如果在最左侧车道,超车项目不能触发; | 
					
						
							|  |  |  |  |     if (projectCode == '10' && | 
					
						
							|  |  |  |  |       Reflect.get(this.judgeConfigObj, '405') == '2' && | 
					
						
							|  |  |  |  |       (num === count) && | 
					
						
							|  |  |  |  |       num > 0 | 
					
						
							|  |  |  |  |     ) { | 
					
						
							|  |  |  |  |       return false | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     // 车道总数少于2条,超车和变道不能触发 | 
					
						
							|  |  |  |  |     if (projectCode == '10' || projectCode == '4') { | 
					
						
							|  |  |  |  |       if (count < 2) { | 
					
						
							|  |  |  |  |         return false | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  |     return true | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   } | 
					
						
							|  |  |  |  |   // 获取人工项目是否已做 | 
					
						
							|  |  |  |  |   getIsEndManualProject = (index: number) => { | 
					
						
							|  |  |  |  |     const projectName = this.artSubject3Projects[index]; | 
					
						
							|  |  |  |  |     const projectCode = this.artSubject3ProjectsCodesArr[index]; | 
					
						
							|  |  |  |  |     const currentProject: ProjectInfo = Reflect.get(this.projectsObj, projectCode) | 
					
						
							|  |  |  |  |     const type = currentProject.type | 
					
						
							|  |  |  |  |     if (type == '2') { | 
					
						
							|  |  |  |  |       return projectName | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  |     return (type == '3' || type == '4') ? `${projectName}_red` : `${projectName}_green`; | 
					
						
							|  |  |  |  |   } | 
					
						
							|  |  |  |  |   // 获取是否能进行人工评判 | 
					
						
							|  |  |  |  |   getIsManualKf = () => { | 
					
						
							|  |  |  |  |     if (this.examSubject == '3') { | 
					
						
							|  |  |  |  |       //杭州训练模式不允许人工评判 | 
					
						
							|  |  |  |  |       if (this.singlePlay && Reflect.get(this.judgeConfigObj, '211') == 'zjhz') { | 
					
						
							|  |  |  |  |         return false | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       if (Reflect.get(this.judgeConfigObj, '342') == '0') { | 
					
						
							|  |  |  |  |         return true | 
					
						
							|  |  |  |  |       } | 
					
						
							| 
									
										
										
										
											2025-04-11 10:13:29 +08:00
										 |  |  |  |       return false | 
					
						
							| 
									
										
										
										
											2025-04-11 09:06:08 +08:00
										 |  |  |  |     } else { | 
					
						
							|  |  |  |  |       return false | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  |   } | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 |