import router from '@ohos.router' import prompt from '@ohos.prompt' import common from '@ohos.app.ability.common'; import EndPoPup from './compontents/judge/end-popup' import LoadingPopup from './compontents/judge/loading-popup' import DeductedPopup from './compontents/judge/deduction-popup' import AmplifyPopup from './compontents/judge/amplify-popup' import Judge from './judgeSDK/judge' import {defaultJudgeConfigObj} from './judgeSDK/utils//judge-common' import { Project, ProjectObj, MarkRule, CDSBInfo, SYSTEMPARMARR,CARINFO ,MAPPOINT ,MAPITEMPOINTITEM,SYSSET } from './judgeSDK/api/judgeSDK.d' import { getCurrentTime, formatTime, getCurrentHourTime,chunkArr } from '../common/utils/tools' import { examJudgeEndExam } from './judgeSDK/api/index' import { getSyncData } from '../common/service/initable' import { judgeConfig } from './judgeSDK/utils/judge-config' import FileUtil from '../common/utils/File'; import SignDisplayCom from './compontents/signDisplayCom' import {testMarkRules} from './judgeSDK/dataTest/index' @Entry @Component struct Index { scroller: Scroller = new Scroller() private context = getContext(this) as common.UIAbilityContext; private img: ImageBitmap = new ImageBitmap("/resources/base/media/1.png") async aboutToAppear() { globalThis.windowClass.setWindowSystemBarEnable(['']) const time = await getCurrentTime() this.startTime = time.split(' ')[1] this.startFullTime = await getCurrentTime(1); this.startHourTime = await getCurrentHourTime() setInterval(async () => { this.time = await getCurrentTime(); this.examTime += 1; }, 1000); //初始化数据库表 await this.initDb() //断点续考 await this.goDdxkItems() //初始化评判 const judge = await this.initJudge(); this.judge = judge } //初始化相关数据库表 async initDb(){ const examSubject = globalThis.carInfo.examSubject; const {isTrajectoryOpen,trajectoryPath} = judgeConfig await this.initStudent(); await this.initCar(); //是否开启轨迹回放模式 if(isTrajectoryOpen){ this.initTrajectoryParam(trajectoryPath) }else{ examSubject == 2 ? await this.initSystemKm2Param() : await this.initSystemKm3Param() await this.initMarkRules(); await this.initSysset(); } await this.initCDSBInfo() // 科目三新增读取表数据 if(examSubject == 3){ await this.initMapPoint() await this.initMapPointItem() } } // 查询考车信息 async initCar() { const result = await getSyncData('ES_CARINFO') const carInfo = result[0] || {}; this.carName = decodeURI(carInfo.carclass) this.carType = carInfo.kscx this.carinfoArrr.push({ CARID:carInfo.carid, IPADDR:'', CARCLASS:decodeURI(carInfo.carclass), KSCX:carInfo.kscx, CARNAME:decodeURI(carInfo.carclass), FLAG:carInfo.flag, BK1:carInfo.bk1, BK2:carInfo.bk2, }) } // 获取考生信息 async initStudent() { const students = await getSyncData('USER') const stuInfo = students[0] || {}; const {xm,sfzmhm,lsh,kszp,ksdd,kssycs,kslx} = stuInfo; this.name = xm; this.idCard = sfzmhm; this.lsh = lsh; this.kszp = kszp; this.ksdd = ksdd; this.kssycs = kssycs; this.kslx = kslx; } // 获取扣分代码信息 async initMarkRules(markRules ?: MarkRule[]) { const markRuleParams = markRules ||( await getSyncData('MA_MARKRULE') as MarkRule[]) markRuleParams .forEach(mark => { const tempObj = { itemno:mark.itemno * 1, markcatalog:mark.markcatalog, markshow:decodeURI(mark.markshow), markreal:mark.markreal * 1, markserial:mark.markserial, kfxh:mark.kfxh, OnlyOneKind:mark.onlyoneid * 1, NoCancelId:mark.nocancelid * 1, GPS_SID:mark.gps_sid == 0 ? false : true } const markserial = mark.markserial * 1; //筛选出人工评判的扣分 if(markserial > 100 && markserial < 200){ this.manualMarkRules.push(tempObj) } this.markRuleListObj[`${mark.itemno}_${mark.markserial}`] = { ...tempObj, markserial: mark.markserial, }; }) } // 获取sysset表信息 async initSysset(sysset?:SYSSET[]) { const syssetParams = sysset || await getSyncData('MA_SYSSET') //@ts-ignore const serialNumberArr = syssetParams.filter(sys => sys.v_no === '901'); this.serialNumber = (serialNumberArr[0] && serialNumberArr[0].v_value) || '123456' const {isTrajectoryOpen} = judgeConfig const syssetJudgeConfigArr = [] //@ts-ignore syssetParams.forEach((sys) => { if(isTrajectoryOpen){ sys.v_no = sys.key; sys.v_name = sys.name; sys.v_value = sys.value } const {v_no,v_value} = sys; const v_no_num = v_no * 1; const value = decodeURIComponent(v_value) if(v_no_num >= 10 &&v_no_num <= 900){ syssetJudgeConfigArr.push({ key: v_no_num,value: value, name: decodeURI(sys.v_name) }) } //科目三应行驶距离参数 if(sys.v_no == '303'){ this.examMileage = sys.v_value + ''; } this.judgeConfigObj[sys.v_no] = value }); this.judgeConfig = syssetJudgeConfigArr; } // 初始化systemParam表 async initSystemKm2Param(sysParam?:SYSTEMPARMARR[]){ const systemParms:any = sysParam || await getSyncData('MA_SYSTEMPARM') const carName = this.carName; let carNo2 = '',allItems = []; systemParms.forEach((systemParm)=>{ const {no1,no2,no3} = systemParm; //获取当前考车的no2 if(no1 == 3 && no3 == 1){ const txt1 = decodeURI(systemParm.txt1) if(txt1 === carName){ carNo2 = no2; } } //获取当前考车的考试项目 if(carNo2 !== '' && no2 == carNo2 && no3 == 10){ allItems = decodeURIComponent(systemParm.txt1).split(',') } // 存储当前考车考试项目 if(allItems.length && no1 == 6 && allItems.includes(no2)){ const txt2 = decodeURIComponent(systemParm.txt2) const currentProject = { name:decodeURI(systemParm.txt1), abbreviation:decodeURI(systemParm.txt3), projectCode:no2, projectCodeCenter:txt2 // sbxh:project.type } this.projectsObj[no2] = currentProject this.projectsCenterObj[txt2] = currentProject this.projects.push(currentProject) } }) const projects = this.projects; if(!projects.length){ prompt.showToast({ message: '读取数据库信息失败,请重新考试!', duration: 8000 }); router.back(); } } //初始化systemParam表 async initSystemKm3Param(sysParam?:SYSTEMPARMARR[]) { const systemParms: any = sysParam || await getSyncData('MA_SYSTEMPARM') const {isTrajectoryOpen} = judgeConfig systemParms.forEach((systemParm) => { if(isTrajectoryOpen){ systemParm.no1 = systemParm.NO1; systemParm.no2 = systemParm.NO2; systemParm.no3 = systemParm.NO3; systemParm.txt1 = systemParm.TXT1; systemParm.txt2 = systemParm.TXT2; systemParm.txt3 = systemParm.TXT3; } const {no1,no2,no3,} = systemParm; this.systemparmArr.push({ 'NO1':no1*1,'NO2':no2*1,'NO3':no3*1, 'TXT1':decodeURIComponent(systemParm.txt1), 'TXT2':decodeURIComponent(systemParm.txt2), 'TXT3':decodeURIComponent(systemParm.txt3), }) const txt2 = decodeURIComponent(systemParm.txt2) if (no1 == 6) { const currentProject = { name: decodeURI(systemParm.txt1), abbreviation: decodeURI(systemParm.txt3), projectCode: no2, projectCodeCenter: txt2 } this.projectsObj[no2] = currentProject this.projectsCenterObj[txt2] = currentProject this.projects.push(currentProject) } // if(no1 == 3 && no2 == 1 && no3 == 15){ // this.examMileage = decodeURI(systemParm.txt1) // } }) const projects = this.projects; if (!projects.length) { prompt.showToast({ message: '读取数据库信息失败,请重新考试!', duration: 8000 }); router.back(); } } // 获取场地设备信息 async initCDSBInfo() { const cdsbParams = await getSyncData('MA_CDSBINFO') //@ts-ignore cdsbParams.forEach((cdsb) => { const key = decodeURI(cdsb.itemsno); const newKey = key.split('~').join('_') this.cdsbInfoObj[newKey] = { kdid: cdsb.kdid, sbbh: cdsb.sbbh, sbbm: cdsb.sbbm, itemsno: key, modelKey: newKey, //@ts-ignore xmdm: key.split('~')[0] * 1, xmxh: key.split('~')[1], } }) } // 评判相关初始化 async initJudge() { const judge = new Judge(this); await judge.onJudgeFn(async (judgeData) => { const {xmmcStr,carztStr,kfArr} = judgeData; this.xmmcStr = xmmcStr; this.carztStr = carztStr; this.kfArr = kfArr; }); return judge } // 断点续考判断 async goDdxkItems() { const judgeConfigObj = this.judgeConfigObj if(judgeConfigObj['369'] != 1 || judgeConfigObj['432'] != 1){ return } //断点续考判断 let currentParams: any = router.getParams(); const examItems: string = currentParams?.examItems; // 2024-01-03 16:29:26;0;20300,;2,4^2,4;null; if (examItems !== '' && examItems !== undefined) { 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 (ddxkKsxmArr?.length) { this.isDdxk = true ddxkKsxmArr.forEach(xmdm => { const projectCode = this.projectsCenterObj[xmdm].projectCode this.projectsObj[projectCode].type = '3' }) ddxkKfArr.forEach((kf) => { const [xmdm, kfdm] = kf.split(',') const currentKf = this.markRuleListObj[`${xmdm}_${kfdm}`] const currentProject = this.projectsObj[xmdm] this.projectsObj[xmdm].type = '4' this.kfArr.push({ //扣分项目名称 xmmcStr: currentProject.name, //@ts-ignore xmdm, desc: currentKf.markshow, score: currentKf.markreal, markcatalog: currentKf.markcatalog, markserial: currentKf.markserial, kfxh: currentKf.kfxh }) this.totalScore += currentKf.markreal * 1; }) this.ddxkKsxmArr = ddxkKsxmArr this.ddxkKfArr = ddxkKfArr this.ddxkTime = Date.parse(startTime); } } } // 初始化mapPoint表 async initMapPoint(){ const pointParams = await getSyncData('MA_MAP_POINT') //@ts-ignore pointParams.forEach(point=>{ const {point_no,gps_e,gps_n,point_no_f,point_type,road_code,gps_e_Location,gps_n_Location,f_gps_e,f_gps_n,passed} = point; this.mapPointArr.push({ point_no:point_no * 1, gps_e:gps_e * 1, gps_n:gps_n * 1, point_no_f:point_no_f * 1, point_type:point_type * 1, road_code, gps_e_Location:(gps_e_Location || 0 ) * 1, gps_n_Location:(gps_n_Location || 0 ) * 1, f_gps_e:f_gps_e * 1, f_gps_n:f_gps_n * 1, passed:passed * 1 }) }) } // 初始化mapPointItem表 async initMapPointItem(){ const pointItemPoints = await getSyncData('MA_MAP_POINT_ITEM'); //@ts-ignore pointItemPoints.forEach(itemPoint => { const {point_no,itemno,itemno1,subname} = itemPoint this.mapPointItemArr.push({ point_no:point_no * 1, itemno:itemno * 1, itemno1:itemno1 * 1, subname }) }) } // 初始化本地systemparam表、markrule表 async initTrajectoryParam(trajectoryPath:string){ const {isTrajectoryOpen} = judgeConfig //轨迹回放读取 systemparam表、markrule表 const fileUtil = new FileUtil(this.context); const folderPath = await fileUtil.initFolder(trajectoryPath); const str = await fileUtil.readFile(folderPath); const strArr = str.split('\n'); const [initData,beginData] = [strArr[0],strArr[1]]; const initDataObj = JSON.parse(initData) const systemparm = initDataObj.systemparm; const examSubject = globalThis.carInfo.examSubject; this.examSubject = isTrajectoryOpen ? (initDataObj.kskm*1):examSubject; globalThis.carInfo.examSubject = this.examSubject examSubject == 2 ? await this.initSystemKm2Param(systemparm) : await this.initSystemKm3Param(systemparm) //@ts-ignore await this.initMarkRules(testMarkRules); await this.initSysset(initDataObj.sysset); } build() { Column() { Row() { Row() { Image($rawfile('judge/signal_logoS.png')).width(120) Text(this.time).fontColor('#CCB48F').fontSize(32).padding({ left: 10, right: 5 }) Image($rawfile('judge/xh_green.png')).width(50) }.padding({left:20}) Row() { Text(`当前项目:${this.xmmcStr || '无'} `).fontColor('#E5CCA1').fontSize(32) } } .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('线路6').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) Text(formatTime(this.examTime)).fontColor('#FFF').fontSize(this.FONTSIZE) }.margin({ bottom: 10 }) if(this.examSubject == 3){ Row() { if(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) }.height(40) Row() { Flex({ direction: FlexDirection.Column }) { List({}) { ForEach(this.kfArr, (item) => { 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) .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}) } .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({}){ ForEach(chunkArr(this.projects,2),(item)=>{ ListItem(){ Row(){ Row(){ //#FF7566 #00FFD5 #E6DECF // Text(this.projectsObj[item[0].projectCode]) Text(item[0].abbreviation).fontSize(item[0].abbreviation.length > 5?28:32).fontColor(this.getProjectColor(this.projectsObj[item[0].projectCode].type)) }.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(this.projectsObj[item[1].projectCode].type)) }.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)=>{ ListItem(){ Text(project.name){ }.fontColor(this.getProjectColor(this.projectsObj[project.projectCode].type)).margin({bottom:5}).fontSize(26) }.margin({bottom:8}) }) }.lanes(2).margin({left:25}) }.width('100%').height('50%').backgroundImage($rawfile('judge/project_km3_bg.png'),ImageRepeat.NoRepeat).backgroundImageSize({width:'100%',height:'100%'}).padding(30).margin({right:5}) Flex({wrap:FlexWrap.Wrap,direction:FlexDirection.Row,justifyContent:FlexAlign.SpaceAround}){ List(){ ForEach(this.artSubject3Projects,(item,index)=>{ ListItem(){}.backgroundImage( $rawfile( `judge/km3/${this.getIsExitManualProject(index) ? item : (item+'_gray')}.png` ),ImageRepeat.NoRepeat) .backgroundImageSize({width:'100%',height:'100%'}).width(174).height(118).margin({bottom:15}) .onClick(()=>{ if(this.getIsExitManualProject(index)){ // 靠边停车时候可以触发 if(this.judgeConfigObj['343'] == 0 ){ const xmmcStr = this.xmmcStr; if(xmmcStr == '无' || xmmcStr == ''){ this.amplifiedImgIndex = index;this.isAmplifyPopShow = true } else{ if(index === 5){ prompt.showToast({ message: `${xmmcStr}未结束,不允许靠边停车`, duration: 8000 }); } } }else{ this.amplifiedImgIndex = index;this.isAmplifyPopShow = true } } }) }) }.lanes(3).margin({left:5,top:18}) } }.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 + '').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.signDisplayComVisible = true }) 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.examSubject == 3){ 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(()=>{ if(this.judgeConfigObj['342'] == 0){ this.isDeductedPopShow = true }else{ prompt.showToast({ message: '平台配置不允许人工评判!', duration: 4000 }); } }) } 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(() => { if(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.endPopupVisible) { EndPoPup({ title: '确定结束考试吗?', cancelFn: () => { this.endPopupVisible = false; }, confirmFn: async () => { this.endPopupVisible = false; this.loadingPopupVisible = true globalThis.isJudge = false examJudgeEndExam(); clearInterval(this.timer); clearInterval(globalThis.judgeTimer) globalThis.windowClass.setWindowSystemBarEnable(['navigation']) const judge = this.judge await judge.handEndExam(true); } }) } //loading 弹窗 if (this.loadingPopupVisible) { LoadingPopup({ title: '正在生成考试记录,请稍后...', }) } if (this.signDisplayComVisible) { Column() { SignDisplayCom({ showBack: false, scaleNum: 1.5, msgStr: this.judge.plcStr || '' }).margin({ top: 100 }) Row() {} .width(240) .height(240) .position({ x: '81%', y: 80 }) .backgroundImage($rawfile('judge/close.png'), ImageRepeat.NoRepeat) .backgroundImageSize({ width: '33.33%', height: '33.33%' }) .onClick(() => { this.signDisplayComVisible = false }) }.width('100%').height('100%').position({ y: 0 }).backgroundColor('rgba(0,0,0,0.6)') } //科目三人工扣分弹窗 if (this.isDeductedPopShow) { DeductedPopup({ currentItems:Reflect.ownKeys(this.projectsObj).map(projectKey => { const project = this.projectsObj[projectKey] return project.type == '2'?project.projectCode:'' }).filter(project => project !== ''), markRules:this.manualMarkRules, closePopup:()=>{this.isDeductedPopShow = false}, confirmMark:async (itemno,serial) => { const judge = this.judge await judge.setJudgeMark(itemno,serial); this.isDeductedPopShow = false } }) } //科目三人工项目确认框 if(this.isAmplifyPopShow){ AmplifyPopup({ amplifyImgIndex:this.amplifiedImgIndex, confirmAmplify:async (amplify)=>{ const judge = this.judge await judge.setJudgeItem(amplify.projectCode); this.isAmplifyPopShow = false }, closeAmplifyPop:()=>{ this.isAmplifyPopShow = false } }) } } .height('100%').backgroundColor('#000').justifyContent(FlexAlign.Start) } getProjectColor(type: string) { switch (type) { case '1': return '#E6DECF'; break; case '2': return '#FFAD33'; break; case '3': return '#00FFD5'; break; case '4': return '#FF7566'; break; default: return '#E6DECF';break; } } // 获取是否能人工进项目 getIsExitManualProject = (index:number)=>{ const {judgeConfigObj,artSubject3ProjectsCodesArr,projectsObj} = this; const unExitManualProjects = judgeConfigObj['332'].split(',') || []; const param348 = judgeConfigObj['348'] || '0'; const param387 = judgeConfigObj['387'] || '0'; if(judgeConfigObj['342'] === '3' || judgeConfigObj['342'] === '2'){ return false } if(unExitManualProjects.includes(artSubject3ProjectsCodesArr[index])){ return false } if(param348 == '0' && projectsObj['9']?.type == 2){ return index === 0 ? true : false } if(param387 === '0' && index === 5){ const {examMileage,jl} = this return jl >= Number(examMileage) } return true } //页面通用字体大小 @State FONTSIZE: number = 28 @State BIGFONTSIZE: number = 28 //结束考试弹窗 @State endPopupVisible: boolean = false //等待弹窗(考试及格,考试不及格使用) @State loadingPopupVisible: boolean = false //实时轨迹弹窗 @State signDisplayComVisible: 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 examSubject: 2 | 3 = 3; @State ddxkTime: number = 0; @State ddxkKsxmArr: string[] = [''] @State ddxkKfArr: string[] = [''] @State xmmcStr: string = '' @State carztStr: string = '' @State kfArr: { xmmcStr?: string, score: string, desc: string }[] = [] @State name: string = '' @State idCard: string = '' @State totalScore: number = 100 //模拟考试项目 @State projects: Project[] = [] @State projectsObj: ProjectObj = {} @State projectsCenterObj: ProjectObj = {} @State markRuleListObj: MarkRule = {} @State cdsbInfoObj: CDSBInfo = {} @State timer: number = 0 @State judgeConfig: {[k:string]:string}[] = [] @State judgeConfigObj: {[k:string]:any} = defaultJudgeConfigObj //流水号 @State lsh: string = '' @State kszp: string = '' @State ksdd: string = '' @State kssycs: string = '' @State kslx: string = '' //监管接口序列号 @State serialNumber: number = 0 @State carType: string = '' @State carName: string = '' @State isDeductedPopShow: boolean = false @State isAmplifyPopShow: boolean = false @State amplifiedImgIndex: number = 0 @State judge:any = {} //行驶距离 @State jl:number =0 //应考里程 @State examMileage:string = '0' //已考的考试项目 private wantInfos = [] @State artSubject3Projects: string[] = ['直线', '会车', '变道','超车', '掉头', '停车'] @State artSubject3ProjectsCodesArr: string[] = ['3', '9', '4','10', '12', '11'] @State manualMarkRules:MarkRule[] = [] //科目三评判初始化数据 @State systemparmArr:SYSTEMPARMARR[] = [] @State mapPointItemArr:MAPITEMPOINTITEM[] = [] @State carinfoArrr:CARINFO[] = [] @State mapPointArr:MAPPOINT[] = [] }