diff --git a/entry/src/main/ets/api/index.ets b/entry/src/main/ets/api/index.ets index 39b7b9a8..9cf0c5d7 100644 --- a/entry/src/main/ets/api/index.ets +++ b/entry/src/main/ets/api/index.ets @@ -87,7 +87,8 @@ export async function initCarInfoCache(params: initCarInfoCacheParams) { //参数下发读表接口 export async function initCenterCache(params: object, url: string) { - const timeInfo: TimeSynchronizationRspBody = AppStorage.get('timeInfo') + const timeInfo: TimeSynchronizationRspBody = + AppStorage.get('timeInfo') ?? { /* default values */ }; return await request({ url: '/para/initCenterCache.ws', data: params, @@ -112,7 +113,8 @@ export async function initCenterCacheByKSPT(params: object, url: string) { //从参数平台获取模型 // TODO 类型需要补全 export async function initEsModel(params: InitModelParams) { - const timeInfo: TimeSynchronizationRspBody = AppStorage.get('timeInfo') + const timeInfo: TimeSynchronizationRspBody = + AppStorage.get('timeInfo') ?? { /* default values */ }; return await request({ url: '/para/initEsModel.ws', data: params, diff --git a/entry/src/main/ets/entryability/EntryAbility.ets b/entry/src/main/ets/entryability/EntryAbility.ets index e22a7b88..eee134d3 100644 --- a/entry/src/main/ets/entryability/EntryAbility.ets +++ b/entry/src/main/ets/entryability/EntryAbility.ets @@ -50,8 +50,8 @@ export default class EntryAbility extends UIAbility { AppStorage.setOrCreate('deviceNo', "") //设备号 AppStorage.setOrCreate('baseInfo', { hasAuth: false, - version: GlobalConfig.version.jn.km3[0], - judgeVersion: GlobalConfig.version.jn.km3[1], + version: GlobalConfig.version.jn.km3[0] || "", + judgeVersion: GlobalConfig.version.jn.km3[1] || "", tcpSendNum: 0, videoVersion: '1.0', ratio: 1700 / 960, //适配比例 diff --git a/entry/src/main/ets/model/Common.ets b/entry/src/main/ets/model/Common.ets index 51542ed8..15363dea 100644 --- a/entry/src/main/ets/model/Common.ets +++ b/entry/src/main/ets/model/Common.ets @@ -90,10 +90,11 @@ export interface BaseInfoType { deviceNo?: string } -interface kfdmObj{ - xmdm:number - kfdm:string +interface kfdmObj { + xmdm: number + kfdm: string } + // 路由参数 export interface RouteParamsType { sczb?: string; @@ -150,7 +151,7 @@ export interface GlobalConfigType { picSavePath?: string videoSavePath?: string host?: string - version?: VersionType + version: VersionType // 几代机 modelNo?: string } @@ -172,6 +173,6 @@ interface VersionInfo { export interface centerCallBackMsgType { id: number; length: number; - body:number[]; - sendId:number; + body: number[]; + sendId: number; } \ No newline at end of file diff --git a/entry/src/main/ets/pages/Judge.ets b/entry/src/main/ets/pages/Judge.ets index 9dc627c7..c9e44b1e 100644 --- a/entry/src/main/ets/pages/Judge.ets +++ b/entry/src/main/ets/pages/Judge.ets @@ -1,1466 +1,1466 @@ -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 MsgPopup from './compontents/judge/MsgPopup'; -import { - CARINFO, - CDSBInfo, - LANE, - MAPITEMPOINTITEM, - MAPPOINT, - MarkRule, - Project, SYSTEMPARMARR -} from './judgeSDK/api/judgeSDK.d'; - -import { JudgeConfig } from './judgeSDK/utils/judgeConfig'; - -import SignDisplayCom from './compontents/signDisplayCom'; -import { - AmplifyItem, - CarInfoType, - CDSBInfos, DefaultJudgeConfigObj, - ES_CARINFOType, - ItemInfos, - JudgeBeginObj, - JudgeCallBacData, - JudgeInitObj, - JudgeUI, MA_CDSBINFOType, - MA_ITEMINFOType, - MA_MAP_POINT_ITEMType, - MA_MAP_POINTType, MA_SYSTEMPARMType, - MarkRules, - MASYSSETTableType, ProjectInfo, - ProjectInfos, - ProjectRoads, - RouteParamsType, - SYSSET, - SyssetConfig, User -} from '../model'; -import { GetSyncData } from '../utils/table/Operation'; -import dayTs from '../utils/Date'; -import { GetCurrentTime } from '../utils/Common'; -import { chunkArr } from './judgeSDK/utils/Common'; -import FileUtils from '../utils/FileUtils'; - - -@Entry -@Component -struct Index { - 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: 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[] = [] - @State judgeConfigObj: DefaultJudgeConfigObj = defaultJudgeConfigObj - //流水号 - @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 - judge: Judge - //行驶距离 - @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; - @State popTimer: number = 0; - @State carlist: string = '' - @State errorMsg: string = '' - @State carInfo: CarInfoType = {} - @State isErrorMsgEnd: boolean = false - @State disConnectErrorOpen: boolean = false - public context = getContext(this) as common.UIAbilityContext; - - async aboutToDisappear() { - clearInterval(this.mileageTimer) - } - - async aboutToAppear() { - const time = GetCurrentTime() - this.carInfo = AppStorage.get('carInfo') - this.singlePlay = AppStorage.get('singlePlay') - this.startTime = time.split(' ')[1] - this.startFullTime = GetCurrentTime(1); - // this.startHourTime = await getCurrentHourTime() - this.startTime = dayTs().format("HHmmssSSS") - this.startExamTime = time - setInterval(async () => { - this.time = GetCurrentTime(); - this.examTime += 1; - }, 1000); - //初始化数据库表 - await this.initDb() - //断点续考 - await this.goDdxkItems() - //初始化评判 - const judge = await this.initJudge(); - this.judge = judge - } - - //初始化相关数据库表 - async initDb() { - this.examSubject = this.carInfo.examSubject; - // 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_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), - 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]; - 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; - this.kslx = stuInfo.kslx; - } - - // 获取扣分代码信息 - async initMarkRules(markRules ?: MarkRule[]) { - const markRuleParams = markRules || await GetSyncData('MA_MARKRULE') - - markRuleParams.forEach(mark => { - const tempObj: MarkRule = { - 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) - } - 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('MA_SYSSET') - const serialNumberArr = (syssetParams as SYSSET[]).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: SyssetConfig[] = [] - - syssetParams.forEach((sys: SYSSET) => { - if (JudgeConfig.isTrajectoryOpen) { - sys.v_no = String(sys.key); - sys.v_name = sys.name; - sys.v_value = sys.value - } - - // const { v_no, v_value } = sys; - const v_no_num = Number(sys.v_no) - const value = decodeURIComponent(sys.v_value) - if (v_no_num >= 10 && v_no_num <= 900) { - const name = - syssetJudgeConfigArr.push({ - key: v_no_num, value: value, - name: decodeURI(sys.v_name) - }) - } - - //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 { sczb, kfdm } = currentParams; - const kfdm = currentParams.kfdm; - currentParams.kfdm.forEach(kf => { - // const { xmdm, kfdm } = kf - - 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, - xmdm: kf.xmdm, - desc: currentKf.markshow, - score: currentKf.markreal, - markcatalog: currentKf.markcatalog, - markserial: currentKf.markserial, - kfxh: currentKf.kfxh - }) - this.totalScore += currentKf.markreal * 1; - }) - const project_1 = Reflect.get(this.projectsObj, 1) - project_1.type = kfdm.length ? '4' : '3'; - Reflect.set(this.projectsObj, 1, project_1) - - } - Reflect.set(this.judgeConfigObj, sys.v_no, value) - }); - this.judgeConfig = syssetJudgeConfigArr; - } - - //初始化systemParam表 - async initSystemParam(sysParam?: MA_SYSTEMPARMType[]) { - let systemParms: MA_SYSTEMPARMType[] = sysParam || await GetSyncData('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); - console.info('surenjun kStringArr', JSON.stringify(kStringArr)) - let isInExam = kStringArr.length > 0; - // const { isTrajectoryOpen } = judgeConfig - let carNo = '', allItems: string[] = []; - systemParms.forEach((systemParm) => { - if (JudgeConfig.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) - - const no1 = systemParm.no1; - const no2 = systemParm.no2; - const no3 = systemParm.no3; - - //获取当前考车的no2 - if (systemParm.no1 == "3" && systemParm.no3 == "1") { - if (txt1 === this.carName) { - carNo = systemParm.no2 - 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) { - this.examMileage = ((decodeURI(systemParm.txt1)) || '').split('^')[0]; - } - //获取当前考车的考试项目 - if (carNo !== '' && systemParm.no1 == "3" && systemParm.no2 == carNo && systemParm.no3 == "10") { - allItems = decodeURIComponent(systemParm.txt1).split(',').filter(txt => txt !== '') - console.info('surenjun', JSON.stringify(allItems)) - } - if ( - //科目二获取项目 - (this.examSubject == "2" && allItems.length && systemParm.no1 == '6' && allItems.includes(systemParm.no2)) - || - //科目三获取项目 - (this.examSubject == "3" && systemParm.no1 == "6") - ) { - const name = decodeURI(systemParm.txt1) - //小车过滤掉 夜间模拟行驶 - if (sCarTypes.includes(this.carType) && name === '夜间行驶') { - return - } - const currentProject: ProjectInfo = { - name, - abbreviation: decodeURI(systemParm.txt3), - 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 + ''))) { - console.info('surenjun =>', txt2) - console.info('surenjun => no2', systemParm.no2) - 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({ - 'NO1': Number(systemParm.no1), - 'NO2': Number(systemParm.no2), - 'NO3': Number(systemParm.no3), - '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: MA_CDSBINFOType[] = await GetSyncData('MA_CDSBINFO') - //只记录考试项目的模型 - const projectsObj = this.projectsObj - cdsbParams.forEach((cdsb) => { - const key = decodeURI(cdsb.itemsno) - 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], - } - Reflect.set(this.cdsbInfoObj, newKey, cdsbInfo) - } - }) - } - - // 获取itemInfo表信息 - async initItemInfo() { - const infoParams: MA_ITEMINFOType[] = await GetSyncData('MA_ITEMINFO'); - const carlist = this.carlist; - const projectsObj = this.projectsObj - infoParams.forEach((info) => { - const key = decodeURI(info.itemsno); - const carlistArr = info.carlist === '' ? [] : (decodeURI(info.carlist).split(',') || []); - 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))) { - Reflect.set(this.itemInfoObj, newKey, { - modelKey: newKey, - xmdm, - xmxh: key.split('~')[1], - }) - } - }) - } - - // 评判相关初始化 - async initJudge() { - const JUDGEUI: JudgeUI = this; - const judge = new Judge(JUDGEUI); - // await judge.init() - await judge.onJudgeFn(async (judgeData: JudgeCallBacData) => { - // const { xmmcStr, carztStr, kfArr } = judgeData; - this.xmmcStr = judgeData.xmmcStr; - this.carztStr = judgeData.carztStr; - this.kfArr = judgeData.kfArr; - }); - return judge - } - - // 断点续考判断 - 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; - 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 (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 - }) - this.totalScore += currentKf.markreal * 1; - }) - this.ddxkKfArr = ddxkKfArr - this.ddxkTime = Date.parse(startTime); - this.isDdxk = true - } - } - - } - - // 初始化mapPoint表 - async initMapPoint() { - const pointParams: MA_MAP_POINTType[] = await GetSyncData('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), - road_code: item.road_code, - 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_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), - subname: item.subname - }) - }) - } - - // 初始化本地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; - await this.initSystemParam(initDataObj.systemparm) - await this.initMarkRules(initDataObj.mark); - await this.initSysset(initDataObj.sysset); - } - - // 上传考试里程 - async uploadMileage() { - if (!this.singlePlay) { - const carInfo = this.carInfo - - await uploadExamMileage({ - carId: carInfo.carId, - examinationRoomId: carInfo.examinationRoomId, - 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) - // Text(formatTime(this.examTime)).fontColor('#FFF').fontSize(this.FONTSIZE) - Text(dayTs(this.examTime).format("YYYY-MM-DD HH:mm:ss")).fontColor('#FFF').fontSize(this.FONTSIZE) - }.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({}) { - ForEach(chunkArr(this.projects, 2), (item: [ProjectInfo, ProjectInfo]) => { - 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(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' - // }) - 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.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, - 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), - markRules: this.manualMarkRules, - closePopup: () => { - this.isDeductedPopShow = false; - this.defaultTabIndex = 0; - }, - confirmMark: async (itemno: string, serial: string) => { - 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) - } - }) - } - - if (this.signDisplayComVisible) { - Column() { - SignDisplayCom({ - showBack: false, - scaleNum: 1.8, - msgStr: this.judge.plcStr || '', - showTrajectory: this.singlePlay ? true : (this.syssetParam623), - }).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.vocObj.playAudio({ - // type: 1, - // name: 'button_media.wav' - // }) - 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: AmplifyItem) => { - 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) - }, - 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'; - 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 = this.judgeConfigObj; - const isManualProjectIn = this.isManualProjectIn; - const getIsExitManualProject = this.getIsExitManualProject; - const artSubject3ProjectsCodesArr = this.artSubject3ProjectsCodesArr; - const projectsObj = this.projectsObj; - - const projectCode = Reflect.get(artSubject3ProjectsCodesArr, index) - if (index === 5) { - console.info('surenjun 靠边停车状态=> ', getIsExitManualProject(index)) - } - 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(','); - 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 = 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 - } - } else { - return false - } - } -} - -export const JudgePage = Index +// 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 MsgPopup from './compontents/judge/MsgPopup'; +// import { +// CARINFO, +// CDSBInfo, +// LANE, +// MAPITEMPOINTITEM, +// MAPPOINT, +// MarkRule, +// Project, SYSTEMPARMARR +// } from './judgeSDK/api/judgeSDK.d'; +// +// import { JudgeConfig } from './judgeSDK/utils/judgeConfig'; +// +// import SignDisplayCom from './compontents/signDisplayCom'; +// import { +// AmplifyItem, +// CarInfoType, +// CDSBInfos, DefaultJudgeConfigObj, +// ES_CARINFOType, +// ItemInfos, +// JudgeBeginObj, +// JudgeCallBacData, +// JudgeInitObj, +// JudgeUI, MA_CDSBINFOType, +// MA_ITEMINFOType, +// MA_MAP_POINT_ITEMType, +// MA_MAP_POINTType, MA_SYSTEMPARMType, +// MarkRules, +// MASYSSETTableType, ProjectInfo, +// ProjectInfos, +// ProjectRoads, +// RouteParamsType, +// SYSSET, +// SyssetConfig, User +// } from '../model'; +// import { GetSyncData } from '../utils/table/Operation'; +// import dayTs from '../utils/Date'; +// import { GetCurrentTime } from '../utils/Common'; +// import { chunkArr } from './judgeSDK/utils/Common'; +// import FileUtils from '../utils/FileUtils'; +// +// +// @Entry +// @Component +// struct Index { +// 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: 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[] = [] +// @State judgeConfigObj: DefaultJudgeConfigObj = defaultJudgeConfigObj +// //流水号 +// @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 +// judge: Judge +// //行驶距离 +// @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; +// @State popTimer: number = 0; +// @State carlist: string = '' +// @State errorMsg: string = '' +// @State carInfo: CarInfoType = {} +// @State isErrorMsgEnd: boolean = false +// @State disConnectErrorOpen: boolean = false +// public context = getContext(this) as common.UIAbilityContext; +// +// async aboutToDisappear() { +// clearInterval(this.mileageTimer) +// } +// +// async aboutToAppear() { +// const time = GetCurrentTime() +// this.carInfo = AppStorage.get('carInfo') +// this.singlePlay = AppStorage.get('singlePlay') +// this.startTime = time.split(' ')[1] +// this.startFullTime = GetCurrentTime(1); +// // this.startHourTime = await getCurrentHourTime() +// this.startTime = dayTs().format("HHmmssSSS") +// this.startExamTime = time +// setInterval(async () => { +// this.time = GetCurrentTime(); +// this.examTime += 1; +// }, 1000); +// //初始化数据库表 +// await this.initDb() +// //断点续考 +// await this.goDdxkItems() +// //初始化评判 +// const judge = await this.initJudge(); +// this.judge = judge +// } +// +// //初始化相关数据库表 +// async initDb() { +// this.examSubject = this.carInfo.examSubject; +// // 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_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), +// 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]; +// 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; +// this.kslx = stuInfo.kslx; +// } +// +// // 获取扣分代码信息 +// async initMarkRules(markRules ?: MarkRule[]) { +// const markRuleParams = markRules || await GetSyncData('MA_MARKRULE') +// +// markRuleParams.forEach(mark => { +// const tempObj: MarkRule = { +// 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) +// } +// 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('MA_SYSSET') +// const serialNumberArr = (syssetParams as SYSSET[]).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: SyssetConfig[] = [] +// +// syssetParams.forEach((sys: SYSSET) => { +// if (JudgeConfig.isTrajectoryOpen) { +// sys.v_no = String(sys.key); +// sys.v_name = sys.name; +// sys.v_value = sys.value +// } +// +// // const { v_no, v_value } = sys; +// const v_no_num = Number(sys.v_no) +// const value = decodeURIComponent(sys.v_value) +// if (v_no_num >= 10 && v_no_num <= 900) { +// const name = +// syssetJudgeConfigArr.push({ +// key: v_no_num, value: value, +// name: decodeURI(sys.v_name) +// }) +// } +// +// //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 { sczb, kfdm } = currentParams; +// const kfdm = currentParams.kfdm; +// currentParams.kfdm.forEach(kf => { +// // const { xmdm, kfdm } = kf +// +// 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, +// xmdm: kf.xmdm, +// desc: currentKf.markshow, +// score: currentKf.markreal, +// markcatalog: currentKf.markcatalog, +// markserial: currentKf.markserial, +// kfxh: currentKf.kfxh +// }) +// this.totalScore += currentKf.markreal * 1; +// }) +// const project_1 = Reflect.get(this.projectsObj, 1) +// project_1.type = kfdm.length ? '4' : '3'; +// Reflect.set(this.projectsObj, 1, project_1) +// +// } +// Reflect.set(this.judgeConfigObj, sys.v_no, value) +// }); +// this.judgeConfig = syssetJudgeConfigArr; +// } +// +// //初始化systemParam表 +// async initSystemParam(sysParam?: MA_SYSTEMPARMType[]) { +// let systemParms: MA_SYSTEMPARMType[] = sysParam || await GetSyncData('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); +// console.info('surenjun kStringArr', JSON.stringify(kStringArr)) +// let isInExam = kStringArr.length > 0; +// // const { isTrajectoryOpen } = judgeConfig +// let carNo = '', allItems: string[] = []; +// systemParms.forEach((systemParm) => { +// if (JudgeConfig.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) +// +// const no1 = systemParm.no1; +// const no2 = systemParm.no2; +// const no3 = systemParm.no3; +// +// //获取当前考车的no2 +// if (systemParm.no1 == "3" && systemParm.no3 == "1") { +// if (txt1 === this.carName) { +// carNo = systemParm.no2 +// 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) { +// this.examMileage = ((decodeURI(systemParm.txt1)) || '').split('^')[0]; +// } +// //获取当前考车的考试项目 +// if (carNo !== '' && systemParm.no1 == "3" && systemParm.no2 == carNo && systemParm.no3 == "10") { +// allItems = decodeURIComponent(systemParm.txt1).split(',').filter(txt => txt !== '') +// console.info('surenjun', JSON.stringify(allItems)) +// } +// if ( +// //科目二获取项目 +// (this.examSubject == "2" && allItems.length && systemParm.no1 == '6' && allItems.includes(systemParm.no2)) +// || +// //科目三获取项目 +// (this.examSubject == "3" && systemParm.no1 == "6") +// ) { +// const name = decodeURI(systemParm.txt1) +// //小车过滤掉 夜间模拟行驶 +// if (sCarTypes.includes(this.carType) && name === '夜间行驶') { +// return +// } +// const currentProject: ProjectInfo = { +// name, +// abbreviation: decodeURI(systemParm.txt3), +// 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 + ''))) { +// console.info('surenjun =>', txt2) +// console.info('surenjun => no2', systemParm.no2) +// 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({ +// 'NO1': Number(systemParm.no1), +// 'NO2': Number(systemParm.no2), +// 'NO3': Number(systemParm.no3), +// '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: MA_CDSBINFOType[] = await GetSyncData('MA_CDSBINFO') +// //只记录考试项目的模型 +// const projectsObj = this.projectsObj +// cdsbParams.forEach((cdsb) => { +// const key = decodeURI(cdsb.itemsno) +// 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], +// } +// Reflect.set(this.cdsbInfoObj, newKey, cdsbInfo) +// } +// }) +// } +// +// // 获取itemInfo表信息 +// async initItemInfo() { +// const infoParams: MA_ITEMINFOType[] = await GetSyncData('MA_ITEMINFO'); +// const carlist = this.carlist; +// const projectsObj = this.projectsObj +// infoParams.forEach((info) => { +// const key = decodeURI(info.itemsno); +// const carlistArr = info.carlist === '' ? [] : (decodeURI(info.carlist).split(',') || []); +// 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))) { +// Reflect.set(this.itemInfoObj, newKey, { +// modelKey: newKey, +// xmdm, +// xmxh: key.split('~')[1], +// }) +// } +// }) +// } +// +// // 评判相关初始化 +// async initJudge() { +// const JUDGEUI: JudgeUI = this; +// const judge = new Judge(JUDGEUI); +// // await judge.init() +// await judge.onJudgeFn(async (judgeData: JudgeCallBacData) => { +// // const { xmmcStr, carztStr, kfArr } = judgeData; +// this.xmmcStr = judgeData.xmmcStr; +// this.carztStr = judgeData.carztStr; +// this.kfArr = judgeData.kfArr; +// }); +// return judge +// } +// +// // 断点续考判断 +// 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; +// 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 (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 +// }) +// this.totalScore += currentKf.markreal * 1; +// }) +// this.ddxkKfArr = ddxkKfArr +// this.ddxkTime = Date.parse(startTime); +// this.isDdxk = true +// } +// } +// +// } +// +// // 初始化mapPoint表 +// async initMapPoint() { +// const pointParams: MA_MAP_POINTType[] = await GetSyncData('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), +// road_code: item.road_code, +// 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_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), +// subname: item.subname +// }) +// }) +// } +// +// // 初始化本地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; +// await this.initSystemParam(initDataObj.systemparm) +// await this.initMarkRules(initDataObj.mark); +// await this.initSysset(initDataObj.sysset); +// } +// +// // 上传考试里程 +// async uploadMileage() { +// if (!this.singlePlay) { +// const carInfo = this.carInfo +// +// await uploadExamMileage({ +// carId: carInfo.carId, +// examinationRoomId: carInfo.examinationRoomId, +// 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) +// // Text(formatTime(this.examTime)).fontColor('#FFF').fontSize(this.FONTSIZE) +// Text(dayTs(this.examTime).format("YYYY-MM-DD HH:mm:ss")).fontColor('#FFF').fontSize(this.FONTSIZE) +// }.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({}) { +// ForEach(chunkArr(this.projects, 2), (item: [ProjectInfo, ProjectInfo]) => { +// 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(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' +// // }) +// 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.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, +// 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), +// markRules: this.manualMarkRules, +// closePopup: () => { +// this.isDeductedPopShow = false; +// this.defaultTabIndex = 0; +// }, +// confirmMark: async (itemno: string, serial: string) => { +// 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) +// } +// }) +// } +// +// if (this.signDisplayComVisible) { +// Column() { +// SignDisplayCom({ +// showBack: false, +// scaleNum: 1.8, +// msgStr: this.judge.plcStr || '', +// showTrajectory: this.singlePlay ? true : (this.syssetParam623), +// }).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.vocObj.playAudio({ +// // type: 1, +// // name: 'button_media.wav' +// // }) +// 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: AmplifyItem) => { +// 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) +// }, +// 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'; +// 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 = this.judgeConfigObj; +// const isManualProjectIn = this.isManualProjectIn; +// const getIsExitManualProject = this.getIsExitManualProject; +// const artSubject3ProjectsCodesArr = this.artSubject3ProjectsCodesArr; +// const projectsObj = this.projectsObj; +// +// const projectCode = Reflect.get(artSubject3ProjectsCodesArr, index) +// if (index === 5) { +// console.info('surenjun 靠边停车状态=> ', getIsExitManualProject(index)) +// } +// 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(','); +// 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 = 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 +// } +// } else { +// return false +// } +// } +// } +// +// export const JudgePage = Index diff --git a/entry/src/main/ets/pages/compontents/imageBtn.ets b/entry/src/main/ets/pages/compontents/imageBtn.ets index 883a11cb..a30f5f27 100644 --- a/entry/src/main/ets/pages/compontents/imageBtn.ets +++ b/entry/src/main/ets/pages/compontents/imageBtn.ets @@ -2,11 +2,13 @@ export default struct imageBtn { //状态变量unPressed,用于控制按钮的状态 @State unPressed: boolean = true - btnWidth: string | number - btnHeight: string | number - imgSrc:Resource - opacityNum:number=1 - @Styles customStyle(){ + btnWidth?: string | number + btnHeight?: string | number + imgSrc?: Resource + opacityNum: number = 1 + + @Styles + customStyle(){ .width('100%') .height('100%') } @@ -20,8 +22,7 @@ export default struct imageBtn { // 判断当前组件为放开状态 if (this.unPressed) { // 插入Row组件,配置过渡效果 - Image(this.imgSrc) - // 水波纹扩散动画:Row组件backgroundColor属性变更(#fff -> #ccc),系统插入动画过渡效果,从组建的中心点开始放大,scale{0,0}变更scale{1,1} + Image(this.imgSrc)// 水波纹扩散动画:Row组件backgroundColor属性变更(#fff -> #ccc),系统插入动画过渡效果,从组建的中心点开始放大,scale{0,0}变更scale{1,1} .transition({ type: TransitionType.Insert, opacity: 0, @@ -38,10 +39,11 @@ export default struct imageBtn { duration: 500, // 聚拢动画播放完成后,需要衔接扩散动画,此时Row组件backgroundColor属性变更(#fff -> #ccc),插入动画过渡效果,scale{0,0}变化为scale{1,1} onFinish: () => { - this.opacityNum=1 - } }, + this.opacityNum = 1 + } + }, () => { - this.opacityNum=0.2 + this.opacityNum = 0.2 }) }) } diff --git a/entry/src/main/ets/utils/Voice.ets b/entry/src/main/ets/utils/Voice.ets index c2eedb6c..6326145e 100644 --- a/entry/src/main/ets/utils/Voice.ets +++ b/entry/src/main/ets/utils/Voice.ets @@ -6,14 +6,14 @@ import { VoiceTag } from '../config'; type AVPlayerCallback = (status: string, val?: string) => void; export class voiceService { - private avPlayer: media.AVPlayer = null; + private avPlayer: media.AVPlayer | null = null; private fileSize: number = -1; private fd: number = 0; private playerName: string = ''; private type: number = 1; private endFlag: Boolean = false; private mediaArray: Array = []; - private callBack: AVPlayerCallback = null; + private callBack: AVPlayerCallback | null = null; constructor(callBack: AVPlayerCallback) { // 创建avPlayer实例对象 @@ -30,14 +30,14 @@ export class voiceService { console.log(VoiceTag, ' avPlayerFdSrc setAVPlayerCallback begin') // error回调监听函数,当avPlayer在操作过程中出现错误时调用reset接口触发重置流程 - this.avPlayer.on('error', (err: BusinessError) => { + this.avPlayer!.on('error', (err: BusinessError) => { console.error(VoiceTag, `Invoke avPlayer failed, code is ${err.code}, message is ${err.message}`); - this.avPlayer.reset(); // 调用reset重置资源,触发idle状态 + this.avPlayer!.reset(); // 调用reset重置资源,触发idle状态 }) // 状态机变化回调函数 - this.avPlayer.on('stateChange', async (state, reason) => { + this.avPlayer!.on('stateChange', async (state, reason) => { switch (state) { case 'idle': // 成功调用reset接口后触发该状态机上报 // callBack('idle'); @@ -55,7 +55,7 @@ export class voiceService { break; case 'initialized': // avplayer 设置播放源后触发该状态上报 console.info(VoiceTag, ' AVPlayerstate initialized called.'); - this.avPlayer.prepare().then(() => { + this.avPlayer!.prepare().then(() => { console.info(VoiceTag, ' AVPlayer prepare succeeded.'); }, (err: BusinessError) => { console.error(VoiceTag, ` Invoke prepare failed, code is ${err.code}, message is ${err.message}`); @@ -63,7 +63,7 @@ export class voiceService { callBack('initialized'); break; case 'prepared': // prepare调用成功后上报该状态机 - this.avPlayer.play(); + this.avPlayer!.play(); callBack('prepared'); break; case 'playing': // play成功调用后触发该状态机上报 @@ -74,12 +74,12 @@ export class voiceService { break; case 'completed': // 播放结束后触发该状态机上报 console.info(VoiceTag, ' AVPlayer state completed called.'); - this.avPlayer.stop(); //调用播放结束接口 + this.avPlayer!.stop(); //调用播放结束接口 break; case 'stopped': // stop接口成功调用后触发该状态机上报 console.info(VoiceTag, ' AVPlayer state stopped called.'); - this.avPlayer.reset(); // 调用reset接口初始化avplayer状态 + this.avPlayer!.reset(); // 调用reset接口初始化avplayer状态 // callBack('stopped'); break; case 'released': @@ -97,14 +97,18 @@ export class voiceService { // 以下为使用资源管理接口获取打包在HAP内的媒体资源文件并通过fdSrc属性进行播放示例 avPlayerFdSrc(name: string) { const context: common.UIAbilityContext = AppStorage.get('context') + if (!context) { + console.log(VoiceTag, ' context is null'); + return + } context.resourceManager.getRawFd(name, async (error, value) => { if (error != null) { console.log(VoiceTag, ` callback getRawFd failed error code: ${error.code}, message: ${error.message}.`); } else { console.log(VoiceTag, this.avPlayer) if (this.avPlayer) { - await this.avPlayer.reset() - this.avPlayer.fdSrc = value; + await this.avPlayer!.reset() + this.avPlayer!.fdSrc = value; } // 为fdSrc赋值触发initialized状态机上报 @@ -116,15 +120,15 @@ export class voiceService { // 以下为通过url设置网络地址来实现播放直播码流的 avPlayerLive(url: string) { - this.avPlayer.url = url + this.avPlayer!.url = url } releasePlayer() { - this.avPlayer && this.avPlayer.release(); + this.avPlayer && this.avPlayer!.release(); } avPlayerStop() { - this.avPlayer && this.avPlayer.stop((err: BusinessError) => { + this.avPlayer && this.avPlayer!.stop((err: BusinessError) => { if (err == null) { this.endFlag = true console.info(VoiceTag, 'stop success'); diff --git a/entry/src/main/ets/utils/business/DrivingDataStorage.ets b/entry/src/main/ets/utils/business/DrivingDataStorage.ets index 6b218f44..2375cfb0 100644 --- a/entry/src/main/ets/utils/business/DrivingDataStorage.ets +++ b/entry/src/main/ets/utils/business/DrivingDataStorage.ets @@ -33,10 +33,10 @@ class drivingDataStorage { const content = await this.fileUtil!.readFile(`${this.folderPath}/${this.date}.txt`) || ''; const contentArr = content.split('\n').filter(item => item) this.totalDistance = (this.totalDistance || 0) + (str * 1 > 200 ? 200 : str * 1); - this.totalTime += 1; + this.totalTime = (this.totalTime || 0) + 1; contentArr[contentArr.length - 1] = `程序启动时间:${this.time} 累计行驶距离:${(this.totalDistance || - 0).toFixed(2)}m 累计运行时常:${Math.ceil(this.totalTime / + 0).toFixed(2)}m 累计运行时常:${Math.ceil((this.totalTime || 0) / 60)}min` + '\n' } @@ -47,7 +47,7 @@ class drivingDataStorage { // 关闭文件读写 public close() { - this.fileUtil.closeFile(`${this.folderPath}/${this.date}.txt`) + this.fileUtil!.closeFile(`${this.folderPath}/${this.date}.txt`) } } diff --git a/entry/src/main/ets/utils/table/Operation.ets b/entry/src/main/ets/utils/table/Operation.ets index 50bfaa72..e39ac5c6 100644 --- a/entry/src/main/ets/utils/table/Operation.ets +++ b/entry/src/main/ets/utils/table/Operation.ets @@ -11,7 +11,10 @@ import FileUtils from '../FileUtils'; // 建表操作 export async function InitTable() { Object.keys(ParameterPlatform).forEach(async (item) => { - await DB.executeSql(ParameterPlatform.get(item).sqlCreate); + const platformItem = ParameterPlatform.get(item); + if (platformItem) { + await DB.executeSql(platformItem.sqlCreate); + } }); } @@ -56,12 +59,16 @@ export function UpdateTableByArray(tableName: string, arr: Array): Promise //依据表名同步获取数据 export async function GetSyncData(tableName: string): Promise { return new Promise((resolve, reject) => { - const columns: ColumnInfo[] = ParameterPlatform.get(tableName).columns.map((res: string) => { + const platform = ParameterPlatform.get(tableName); + if (!platform || !platform.columns) { + throw new Error(`Invalid tableName or columns not found for table: ${tableName}`); + } + const columns: ColumnInfo[] = platform.columns.map((res: string) => { return { name: res, columnName: res, type: ColumnType.STRING - } as ColumnInfo + } as ColumnInfo; }); DB.queryListBySql(`select * from ${tableName}`, columns).then((res: T[]) => { resolve(res); @@ -87,7 +94,7 @@ export async function DeleteSyncTable(tableName: string): Promise { // 初始化中心表 export async function InitializeTheCentralTable(params: InitializeTheCentralTableType): Promise { return new Promise(async (resolve, reject) => { - const fileUtil = new FileUtils(params.context) + const fileUtil = new FileUtils(params.context!); let flag = false // 单机模式 if (params.singlePlay) { @@ -119,32 +126,34 @@ export async function InitializeTheCentralTable(params: InitializeTheCentralTabl host: params.host } const res: ResponseDataType = await initialization(str) - if (!res || res.initializationRsp.head.resultCode == "1") { - resolve(false) + if (!res || !res.initializationRsp || res.initializationRsp.head.resultCode === "1") { + resolve(false); } - for (const key of Object.keys(res.initializationRsp.body)) { - if (CenterMap[key]) { - continue - } - // TODO 后续替换类型 - let arrList: ESObject[] = [] - if (res.initializationRsp.body[key] instanceof Array) { - arrList = res.initializationRsp.body[key] - } else { - arrList.push(res.initializationRsp.body[key]) - } - const folderPath = await fileUtil.initFolder(`/config/tableList`); - fileUtil.addFile(`${folderPath}/${RemappingTableName.get(key)}.txt`, JSON.stringify(arrList)) - try { - const result = await SqlInsertTable(RemappingTableName.get(key), arrList) - if (!result) { - Prompt.showToast({ - message: '初始化数据库失败' - }) + if (res.initializationRsp && res.initializationRsp.body) { + for (const key of Object.keys(res.initializationRsp.body)) { + if (CenterMap[key]) { + continue + } + // TODO 后续替换类型 + let arrList: ESObject[] = [] + if (res.initializationRsp.body[key] instanceof Array) { + arrList = res.initializationRsp.body[key] + } else { + arrList.push(res.initializationRsp.body[key]) + } + const folderPath = await fileUtil.initFolder(`/config/tableList`); + fileUtil.addFile(`${folderPath}/${RemappingTableName.get(key)}.txt`, JSON.stringify(arrList)) + try { + const result = await SqlInsertTable(RemappingTableName.get(key)!, arrList); + if (!result) { + Prompt.showToast({ + message: '初始化数据库失败' + }) + } + resolve(result) + } catch (e) { + reject(e) } - resolve(result) - } catch (e) { - reject(e) } } })