From cbb88acae255826cff76ca1250f0af26b881f93f Mon Sep 17 00:00:00 2001 From: surenjun Date: Mon, 30 Dec 2024 13:36:10 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E8=AF=84=E5=88=A4=E6=9B=B4?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entry/src/main/ets/common/utils/request.ts | 1 + entry/src/main/ets/pages/Judge.ets | 1521 +++++++++++++++++--- 2 files changed, 1327 insertions(+), 195 deletions(-) diff --git a/entry/src/main/ets/common/utils/request.ts b/entry/src/main/ets/common/utils/request.ts index 88f96c5a..9fcdd340 100644 --- a/entry/src/main/ets/common/utils/request.ts +++ b/entry/src/main/ets/common/utils/request.ts @@ -106,6 +106,7 @@ export default async function request(req: any) { switch (code){ //断网 case 2300007: return 2300007 + case 2300028: return 2300028 default: } return false diff --git a/entry/src/main/ets/pages/Judge.ets b/entry/src/main/ets/pages/Judge.ets index 605ef226..b4836645 100644 --- a/entry/src/main/ets/pages/Judge.ets +++ b/entry/src/main/ets/pages/Judge.ets @@ -1,215 +1,1346 @@ +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 { defaultJudgeConfigObj } from './judgeSDK/utils//judgeCommon'; +import {uploadExamMileage} from '../api/judge' +import DwztErrorPopup from './compontents/judge/DwztErrorPopup' +import {debounce} from '../common/utils/tools' + +import { + CARINFO, + CDSBInfo, + LANE, + MAPITEMPOINTITEM, + MAPPOINT, + MarkRule, + Project, + ProjectObj, + SYSSET, + SYSTEMPARMARR +} from './judgeSDK/api/judgeSDK.d'; + +import { chunkArr, formatTime, getCurrentHourTime, getCurrentTime } from '../common/utils/tools'; +import { examJudgeEndExam } from './judgeSDK/api/index'; import { getSyncData } from '../common/service/initable'; -import request from "../common/utils/request" -let baseHost = globalThis.host; +import { judgeConfig } from './judgeSDK/utils/judgeConfig'; import FileUtil from '../common/utils/File'; -import FileLog from '../pages/judgeSDK/utils/fileLog'; +import SignDisplayCom from './compontents/signDisplayCom'; +import promptAction from '@ohos.promptAction'; -//新监管接口 - - -//监管接口序列号映射 -const gjxlhObj = { - '17C51': '02-21-000009', - '17C52': '02-21-000010', - '17C53': '02-21-000011', - '17C54': '02-21-000012', - '17C55': '02-21-000013', - '17C56': '02-21-000014', -} - -interface WR{ - message?:string - code:number -} -export default async function writeObjectOutNew(data,filePath): Promise { - const fileUtil = new FileUtil(globalThis.context); - const {jkid , drvexam} = data; - const basic = await getBasicConfig(jkid); - const params = await getParams(jkid, drvexam); - const {wglb,jkxlh,glbm,jgbh,sjbs} = basic; - - console.info('surenjun filePath=>',filePath) - fileUtil.editFile(`${filePath}/wuxi_exam_data.txt`,JSON.stringify({ - wglb,jkxlh,glbm,jgbh,sjbs, - data:params.data, - file:{...params.file,param:[]}, - })); - - const temp = await request({ - host: globalThis.JGHOST, - method: 'post', - //是否是新中心 - isNewCenter: true, - xml: true, - url: '/dems_ws/services/TmriOutAccess?wsdl', - data: ` - - - - ${wglb} - ${jkxlh} - ${glbm} - ${jgbh} - ${sjbs} - ${JSON.stringify(params.data)} - ${JSON.stringify(params.file)} - - - `, - }) - if(filePath){ - const fileUtil = new FileUtil(globalThis.context); - await fileUtil.initFolder(filePath); - fileUtil.editFile(`${filePath}/wuxi_exam_data.txt`,JSON.stringify(temp) +`\n`); +@Entry +@Component +struct Index { + async aboutToDisappear(){ + clearInterval(this.mileageTimer) } - return temp -} -export async function getParams(jkid, drvexam) { - const examSubject = globalThis.carInfo.examSubject; - switch (jkid) { - //开始考试 - case '17C51': - return { - data: { - sjbs: gjxlhObj[jkid], - param: { - sfzmhm: drvexam.sfzmhm, - kchp: decodeURI(drvexam.kchp), - kskm: examSubject, - ksxl: examSubject == 3 ? drvexam.ksxl : undefined, - kssj: drvexam.kssj - } - }, - file: { - sjbs: gjxlhObj[jkid], - // param: [{ field: '', data: examSubject == 2 ? encodeURIComponent(drvexam.zp) : drvexam.zp }] - param: [{ field: '', data: drvexam.zp }] + async aboutToAppear() { + globalThis.windowClass.setWindowSystemBarEnable([]) + const time = await getCurrentTime() + + this.startTime = time.split(' ')[1] + this.startFullTime = await getCurrentTime(1); + this.startHourTime = await getCurrentHourTime() + + this.startExamTime = time + + 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; + this.examSubject = examSubject; + const {isTrajectoryOpen,trajectoryPath} = judgeConfig + await this.initStudent(); + await this.initCar(); + + //是否开启轨迹回放模式 + if (isTrajectoryOpen) { + this.initTrajectoryParam(trajectoryPath) + } else { + await this.initSystemParam() + await this.initMarkRules(); + await this.initSysset(); + this.singlePlay = globalThis.singlePlay + } + await this.initCDSBInfo() + await this.initItemInfo() + + // 科目三新增读取表数据 + if (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 carInfo = result[0] || {}; + this.carName = decodeURI(carInfo.carclass) + this.carType = carInfo.kscx + this.carinfoArr.push({ + CARID: carInfo.carid, + IPADDR: '', + CARCLASS: decodeURI(carInfo.carclass), + KSCX: carInfo.kscx, + CARNAME: decodeURI(carInfo.carname), + FLAG: carInfo.flag, + BK1: carInfo.bk1, + BK2: carInfo.bk2, + }) + console.info('surenjun =>carinfoArrr',JSON.stringify( this.carinfoArr)) + } + + // 获取考生信息 + async initStudent() { + const students = await getSyncData('USER') + const stuInfo = students[0] || {}; + const {xm,sfzmhm,lsh,kszp,ksdd,kssycs,kslx,ksxl,xldm} = stuInfo; + this.name = xm || '测试考生'; + this.idCard = sfzmhm || '01234567891010'; + this.lsh = globalThis.singlePlay?'0000000000000':lsh; + this.kszp = kszp; + this.ksdd = ksdd; + this.kssycs = kssycs; + this.ksxl = ksxl; + this.wayno = ksxl; + this.xldm = xldm; + 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 + } + + //筛选出人工评判的扣分 + if (Number(tempObj.markserial) > 100 && Number(tempObj.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'); + console.info('surenjun serialNumberArr' + JSON.stringify(serialNumberArr)) + this.serialNumber = (serialNumberArr[0] && serialNumberArr[0].v_value) || ''; + 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 = this.examMileage == '0'?(sys.v_value + ''): this.examMileage; + } + + //364 绕车一周评判时机(1-开始考试后判 2-开始考试前判) + if (sys.v_no == '364' && sys.v_value == 2) { + let currentParams: any = router.getParams(); + const {sczb,kfdm} = currentParams; + kfdm.forEach(kf => { + const {xmdm, kfdm} = kf + const currentKf = this.markRuleListObj[`${xmdm}_${kfdm}`]; + const currentProject = this.projectsObj[xmdm] + 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.projectsObj[1].type = kfdm.length ? '4' : '3'; + this.projectsObj = { + ...this.projectsObj } } - //项目开始 - case '17C52': - return { - data: { - sjbs: gjxlhObj[jkid], - param: { - sfzmhm: drvexam.sfzmhm, - kskm: drvexam.kskm, - ksxm: drvexam.ksxm, - ksxl: examSubject == 3 ? drvexam.ksxl : undefined, - kchp: decodeURI(drvexam.kchp), - //TODO 待验证 科目三无 - sbbh: examSubject == 3 ? undefined : drvexam.sbxh, - kssj: drvexam.kssj - } - }, - file: { - sjbs: gjxlhObj[jkid], - param: [{ field: '', data: '' }] + this.judgeConfigObj[sys.v_no] = value + + }); + this.judgeConfig = syssetJudgeConfigArr; + } + + //初始化systemParam表 + async initSystemParam(sysParam?: SYSTEMPARMARR[]) { + const systemParms: any = sysParam || await getSyncData('MA_SYSTEMPARM') + console.info('surenjun => systemParms',JSON.stringify(systemParms)); + + let currentParams: any = router.getParams(); + const {carName,carType,examSubject} = this; + //小车车型列表 + const sCarTypes = ['C1', 'C2', 'C5'] + if (globalThis.singlePlay) { + this.wayno = currentParams.wayno || 1; + } + //真实监管下发的项目 + let kStringArr: string[] = (currentParams.kString?.split(',') || []).filter(item => item); + console.info('surenjun kStringArr',JSON.stringify(kStringArr)) + let isInExam = kStringArr.length > 0; + const {isTrajectoryOpen} = judgeConfig + let carNo = '', allItems = []; + 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; + const txt1 = decodeURI(systemParm.txt1) + const txt2 = decodeURI(systemParm.txt2) + //获取当前考车的no2 + if (no1 == 3 && no3 == 1) { + if (txt1 === carName) { + carNo = no2 + this.carlist = carNo } } - //扣分 - case '17C53': - return { - data: { - sjbs: gjxlhObj[jkid], - param: { - kffs: drvexam.kffs, - kfsj: drvexam.kfsj, - kfxm: drvexam.kfxm, - kfxmmx: drvexam.kfxmmx, - kskm: examSubject, - ksxm: drvexam.ksxm, - sfzmhm: drvexam.sfzmhm - } - }, - file: { - sjbs: gjxlhObj[jkid], - param: [{ field: '', data: '' }] + + //获取及格分数线 + if(no1 == 3 && no3 == 3 && carNo === no2){ + this.passingScore = Number(txt1) || 0; + } + //根据车型获取应行驶里程数 + if(no1 == 3 && no3 ==15 && carNo === no2){ + this.examMileage = ((decodeURI(systemParm.txt1)) || '').split('^')[0]; + } + //获取当前考车的考试项目 + if (carNo !== '' && no1 == 3 && no2 == carNo && no3 == 10) { + allItems = decodeURIComponent(systemParm.txt1).split(',').filter(txt => txt !== '') + console.info('surenjun', JSON.stringify(allItems)) + } + if ( + //科目二获取项目 + (examSubject == 2 && allItems.length && no1 == 6 && allItems.includes(no2)) + || + //科目三获取项目 + (examSubject == 3 && no1 == 6) + ) { + + const name = decodeURI(systemParm.txt1) + //小车过滤掉 夜间模拟行驶 + if (sCarTypes.includes(carType) && name === '夜间行驶') { + return + } + + const currentProject = { + name, + abbreviation: decodeURI(systemParm.txt3), + projectCode: no2, + projectCodeCenter: txt2, + //是否是必考 加减档设置成非必考 + isRequired: no2== 14 ? false : allItems.includes(no2 + ''), + //是否考过了 + isEnd: false, + //项目开始数据是否上传过 + isUpload:false, + } + this.projectsObj[no2*1] = currentProject + this.projectsCenterObj[txt2] = currentProject + this.projects.push(currentProject); + + //真实监管下发考试项目 + if(isInExam && !(kStringArr.includes(txt2) || kStringArr.includes(no2+''))){ + console.info('surenjun =>',txt2) + console.info('surenjun => no2',no2) + this.projectsObj[no2*1].type = '3' + this.projectsObj[no2*1].isUpload = true + this.projectsObj[no2*1].isEnd = true + this.projectsCenterObj[txt2].type = '3' + this.projectsCenterObj[txt2].isUpload = true + this.projectsCenterObj[txt2].isEnd = true + // this.isDdxk = true + this.ddxkKsxmArr.push(txt2) } } - //过程照片 - case '17C54': - return { - data: { - sjbs: gjxlhObj[jkid], - param: { - cs: drvexam.cs, - kskm: drvexam.kskm, - ksxm: drvexam.ksxm, - sfzmhm: drvexam.sfzmhm, - zpsj: drvexam.zpsj - } - }, - file: { - sjbs: gjxlhObj[jkid], - param: [{ field: '', data: drvexam.zp }] + + 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 projects = this.projects; + console.info('surenjun',JSON.stringify(this.ddxkKsxmArr)) + + if (!projects.length) { + Prompt.showToast({ + message: '读取数据库信息失败,请重新联网更新!', + duration: 8000 + }); + router.back(); + } + } + + // 获取场地设备信息 + async initCDSBInfo() { + const cdsbParams = await getSyncData('MA_CDSBINFO') + //只记录考试项目的模型 + const projectsObj = this.projectsObj + //@ts-ignore + cdsbParams.forEach((cdsb) => { + const key = decodeURI(cdsb.itemsno); + const newKey = key.split('~').join('_') + //@ts-ignore + const xmdm = key.split('~')[0] * 1 + if(projectsObj[xmdm]){ + this.cdsbInfoObj[newKey] = { + kdid: cdsb.kdid, + sbbh: cdsb.sbbh, + sbbm: cdsb.sbbm, + itemsno: key, + modelKey: newKey, + xmdm, + xmxh: key.split('~')[1], } } - //项目结束 - case '17C55': - return { - data: { - param: { - czlx: drvexam.czlx, - jssj: drvexam.jssj, - kskm: examSubject, - ksxl: drvexam.ksxl, - sbbh: examSubject == 3 ? undefined : drvexam.sbxh, - ksxm: drvexam.ksxm, - sfzmhm: drvexam.sfzmhm + }) + } + + // 获取itemInfo表信息 + async initItemInfo(){ + const infoParams = await getSyncData('MA_ITEMINFO'); + const carlist = this.carlist; + const projectsObj = this.projectsObj + //@ts-ignore + infoParams.forEach((info)=>{ + const key = decodeURI(info.itemsno); + const carlistArr = info.carlist === '' ? [] : (decodeURI(info.carlist).split(',') || []); + const newKey = key.split('~').join('_') + //@ts-ignore + const xmdm = key.split('~')[0] * 1 + if(projectsObj[xmdm] && (carlistArr.length == 0 || carlistArr.includes(carlist))){ + this.itemInfoObj[newKey] = { + modelKey: newKey, + xmdm, + 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 + const examSubject = this.examSubject + + //科目二强制开始断点续考 + if (judgeConfigObj['432'] != 0 || examSubject == 2) { + //断点续考判断 + 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) { + console.info('surenjun examItems=>', JSON.stringify(examItems)) + 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 (judgeConfigObj['432'] == 2 || examSubject == 2) { + //TODO 带项目带里程 + if (ddxkKsxmArr?.length) { + //断点续考 + ddxkKsxmArr.forEach(xmdm => { + const projectCode = this.projectsCenterObj[xmdm].projectCode + if(this.projectsObj[projectCode]){ + this.projectsObj[projectCode].type = '3' + this.projectsObj[projectCode].isUpload = true + this.projectsObj[projectCode].isEnd = true + } + }) + this.ddxkKsxmArr = ddxkKsxmArr + } + } + //扣分续考 + ddxkKfArr.forEach((kf) => { + const [xmdm, kfdm] = kf.split(',') + const currentKf = this.markRuleListObj[`${xmdm}_${kfdm}`] + const currentProject = this.projectsObj[xmdm] || { name: '通用评判' } + if (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.ddxkKfArr = ddxkKfArr + this.ddxkTime = Date.parse(startTime); + this.isDdxk = true + } + } + + } + + // 初始化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 beginDataObj = JSON.parse(beginData) + const examSubject = globalThis.carInfo.examSubject; + this.examSubject = isTrajectoryOpen ? (initDataObj.kskm * 1) : examSubject; + globalThis.carInfo.examSubject = this.examSubject + this.singlePlay = beginDataObj.exam == 0; + this.carName = initDataObj.name; + globalThis.singlePlay = beginDataObj.exam == 0; + await this.initSystemParam(initDataObj.systemparm) + await this.initMarkRules(initDataObj.mark); + await this.initSysset(initDataObj.sysset); + } + + // 上传考试里程 + async uploadMileage(){ + if(!globalThis.singlePlay){ + const {lsh,startExamTime:kskssj,jl:kslc} = this + const { carId ,examinationRoomId} = globalThis.carInfo; + await uploadExamMileage({ + carId,examinationRoomId, + lsh,kskssj,kslc + }) + } + } + + 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) + 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) + if (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) => { + 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({}) { + 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: 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, 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.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.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.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.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(() => { + 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.isDeductedPopShow && this.examSubject == 3 && this.judgeConfigObj['342'] == '0') { + DeductedPopup({ + defaultTabIndex: this.defaultTabIndex, + currentItems: Reflect.ownKeys(this.projectsObj).map(projectKey => { + //@ts-ignore + const project = this.projectsObj[projectKey] + return project.type == '2' ? project.projectCode : undefined + }).filter(project => project !== undefined), + markRules: this.manualMarkRules, + closePopup: () => { + this.isDeductedPopShow = false; + this.defaultTabIndex = 0; }, - sjbs: gjxlhObj[jkid], - }, - file: { sjbs: gjxlhObj[jkid], param: [{ field: '', data: '' }] } + confirmMark: async (itemno, serial)=>{ + clearTimeout(this.popTimer) + this.popTimer = null + this.popTimer = setTimeout(async ()=>{ + const judge = this.judge + await judge.setJudgeMark(itemno, serial); + this.isDeductedPopShow = false + this.popTimer = null; + },500) + } + }) } - //考试结束 - case '17C56': - return { - data: { - sjbs: gjxlhObj[jkid], - param: { - dwlc: drvexam.dwlc, - ghks: "0", - jssj: drvexam.jssj, - kscj: drvexam.kscj, - kskm: examSubject, - kslc: drvexam.kslc, - sfzmhm: drvexam.sfzmhm + + if (this.signDisplayComVisible) { + Column() { + SignDisplayCom({ + showBack: false, + scaleNum: 1.8, + 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.isAmplifyPopShow && this.examSubject == 3) { + AmplifyPopup({ + amplifyImgIndex: this.amplifiedImgIndex, + confirmAmplify:async (amplify)=>{ + clearTimeout(this.popTimer) + this.popTimer = null + this.popTimer = setTimeout(async ()=>{ + const judge = this.judge + await judge.setJudgeItem(amplify.projectCode, 1); + this.isAmplifyPopShow = false + this.popTimer = null; + },500) }, - }, - file: { sjbs: gjxlhObj[jkid], param: [{ field: '', data: drvexam.zp }] } + closeAmplifyPop: () => { + this.isAmplifyPopShow = false + } + }) } - default: - return {} + //结束考试弹窗 + if (this.endPopupVisible) { + EndPoPup({ + title: '确定结束考试吗?', + cancelFn: () => { + this.endPopupVisible = false; + }, + confirmFn: async () => { + if (this.judgeConfigObj['344'] == 1) { + Prompt.showToast({ + message: '考试未结束,不允许手动退出!', + duration: 4000 + }); + return + } + this.endPopupVisible = false; + this.loadingPopupVisible = true + clearInterval(this.timer); + clearInterval(globalThis.judgeTimer) + try { + this.judge.checkExamIsEnd(true); + } catch (e) { + router.back() + } + + } + }) + } + + //loading 弹窗 + if (this.loadingPopupVisible) { + LoadingPopup({ + title: '正在生成考试记录,请稍后...', + }) + } + + if(this.dwztErrorVisible){ + DwztErrorPopup({ + title:'当前差分状态异常,学员将无法正常进行考试评判,请将车辆行驶到开阔地,等待程序自检,差分正常后会自动关闭该对话框', + cancelFn:()=>{ + this.dwztErrorVisible = false; + }, + confirmFn:()=>{ + clearInterval(this.timer); + clearInterval(globalThis.judgeTimer) + this.judge.checkExamIsEnd(true); + }, + }) + } + } + .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 '#ff109d0a'; + break; + case '4': + return '#FF7566'; + break; + default: + return '#E6DECF'; + break; + } + } + + //人工项目操作 + async setManualProjectFn(index: number) { + const { + judgeConfigObj, + isManualProjectIn, + getIsExitManualProject, + artSubject3ProjectsCodesArr, + projectsObj + } = this; + const projectCode = artSubject3ProjectsCodesArr[index]; + if(index === 5) { + console.info('surenjun 靠边停车状态=> ',getIsExitManualProject(index)) + } + if (getIsExitManualProject(index)) { + // 正在进行的项目 取消项目 + if (isManualProjectIn && projectsObj[projectCode].type == '2') { + //判断人工是否能取消项目 && 当前项目有扣分的不能取消 + if(judgeConfigObj['340'] == 1 && projectsObj[projectCode].type != '5'){ + await this.judge.setJudgeItem(projectCode, 2); + Prompt.showToast({ + message: '项目取消', + duration: 2000 + }) + return + } + } + + // 靠边停车时候可以触发 + if (judgeConfigObj['343'] === '0') { + const xmmcStr = this.xmmcStr; + if (xmmcStr == '无' || xmmcStr == '') { + //512[6] 人工项目按钮放大确认 + const param512 = (judgeConfigObj['512'] || '').split(','); + console.info('surenjun',param512) + 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, + artSubject3ProjectsCodesArr, + projectsObj, + carztStr, + isManualProjectIn, + isProjectIn, + getProjectIsInRoad + } = this; + const projectCode = artSubject3ProjectsCodesArr[index]; + if(projectsObj[projectCode] === undefined){ + return false + } + const projectType = projectsObj[projectCode].type; + + //不允许人工触发的项目列表,以","分隔 + const unExitManualProjects = judgeConfigObj['332'].split(',') || []; + //直线行驶中不进其他考试项目(0-否 1-是) + const param348 = judgeConfigObj['348'] || '0', + //里程不够允许手工点靠边停车(0-否 1-是) + param387 = judgeConfigObj['387'] || '0', + //里程不够不报靠边停车(0-否+1-是+2-必考项目未完成且里程不够不报项目) + param319 = judgeConfigObj['319'] || '0', + //人工项目是否能取消 1:可取消; + param340 = judgeConfigObj['340'] || '0', + //307参数里设置的项目,项目已经做过,后续不能人工触发; + param307 = (judgeConfigObj['307'] || '').split(','); + + //非行驶状态(没有速度),人工项目不能触发(按钮灰色) + if (carztStr === '停车') { + return false + } + + //车上是否能进行人工操作(0-能1-不能人工评判2-不能人工进项目3-都不能) + if (judgeConfigObj['342'] === '3' || judgeConfigObj['342'] === '2') { + return false + } + + //不允许人工触发的项目列表 + if (unExitManualProjects.includes(artSubject3ProjectsCodesArr[index])) { + return false + } + + //项目进行中不能人工触发 + if (isProjectIn) { + if (param340 == 1) { + if (isManualProjectIn && (projectsObj[projectCode].type == '2')) { + return true + } else { + return false + } + } + return false + } + + //项目路段信息判断 + if (!getProjectIsInRoad(projectCode + '')) { + return false + } + + //@ts-ignore 直线行驶中不进其他考试项目(0-否 1-是) + if (param348 == '0' && projectsObj['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,isRequiredProjectsEnd,jl} = this; + //里程是否达标 && 必考项目是否全完成 + return jl >= Number(examMileage) && isRequiredProjectsEnd + } + return true + } + + // 判断项目是否在当前路段号 + getProjectIsInRoad = (projectCode: string,) => { + const { + judgeConfigObj, + lane:{ road, num, count } + } = this; + + const projectRoads = { + //直线行驶 + '3': (judgeConfigObj['514']?.split(',') || []), + //变更车道 + '4': judgeConfigObj['515']?.split(',') || [], + //超车 + '10': judgeConfigObj['516']?.split(',') || [], + //靠边停车 + '11': judgeConfigObj['517']?.split(',') || [], + //会车 + '9': judgeConfigObj['518']?.split(',') || [], + //掉头 + '12': judgeConfigObj['519']?.split(',') || [], + }; + + //未测绘得道路上或者不在差分状态 + if (road === '') { + return false + } + + if(projectRoads[projectCode].length == 0){ + return true + } + + //设置了514-519参数,只能在设置的路段触发对应项目 + if (projectRoads[projectCode].includes(road)) { + //如果525为1,则514-519设置的路段不能触发对应项目 + if (judgeConfigObj['525'] == '1') { + return false + } + } else { + return false + } + + //405参数为2是,如果在最左侧车道,超车项目不能触发; + if (projectCode == '10' && + 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 type = this.projectsObj[projectCode].type + if (type == '2') { + return projectName + } + return (type == '3' || type == '4') ? `${projectName}_red` : `${projectName}_green`; + } + + // 获取是否能进行人工评判 + getIsManualKf = () =>{ + const {examSubject} = this; + if(examSubject == 3){ + //杭州训练模式不允许人工评判 + if(globalThis.singlePlay && this.judgeConfigObj['211'] == 'zjhz'){ + return false + } + if(this.judgeConfigObj['342'] == '0'){ + return true + } + }else{ + return false + } + } + + 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 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 startExamTime: 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 + markcatalog: string + }[] = [] + @State name: string = '' + @State idCard: string = '' + @State singlePlay: boolean = false; + @State totalScore: number = 100 + //模拟考试项目 + @State projects: Project[] = [] + @State projectsObj: ProjectObj = {} + @State projectsCenterObj: ProjectObj = {} + @State markRuleListObj: MarkRule = {} + @State cdsbInfoObj: CDSBInfo = {} + @State itemInfoObj: 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 ksxl: string = '' + @State kslx: string = '' + //监管线路代码 + @State xldm: 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' + @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: string = '' + // 必考项目除靠边停车是否全部完成 + @State isRequiredProjectsEnd: boolean = false; + // 考试项目是否全部完成 + // @State isAllProjectsEnd: boolean = false; + @State lane: LANE = { road: '', num: 0, count: 0 } + @State roadData: Object = {}; + //定位差分状态时候正常 + @State isDwztRight: boolean = false; + @State defaultTabIndex: number = 0; + private context = getContext(this) as common.UIAbilityContext; + public kfArrScroller: Scroller = new Scroller() + //档位 + @State dw: string = '' + //速度 + @State sd: string = '' + @State mileageTimer: number = 0; + @State passingScore: number = 80 + @State dwztErrorVisible: boolean = false; + @State popTimer:number =0; + @State carlist:string= '' } - -//获取基础信息 -async function getBasicConfig(jkid) { - const examSubject = globalThis.carInfo.examSubject; - const syssetParam = await getSyncData('MA_SYSSET'); - let syssetObj = {}; - //@ts-ignore - syssetParam.forEach(sys => { - syssetObj[sys.v_no] = decodeURIComponent(sys.v_value) - }); - - return { - //外挂类别 - wglb: examSubject == 2 ? "700203" : "700204", - //监管接口序列号 - jkxlh: syssetObj['901'], - //管理部门 - glbm: syssetObj['903'], - //考场序号 - jgbh: syssetObj['905'], - //接口id - sjbs: gjxlhObj[jkid], - } -} \ No newline at end of file