1382 lines
46 KiB
Plaintext
Raw Normal View History

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