逻辑优化

This commit is contained in:
lixiao 2025-05-13 17:58:00 +08:00
parent e35bf0f309
commit b446c9442a
8 changed files with 448 additions and 504 deletions

View File

@ -24,7 +24,7 @@ import { examJudgeVersion } from './judgeSDK/api';
@Component
struct Index {
@State carNum: string = ''
@State version: string = '2025.05.13.01'
@State version: string = judgeConfig.version
@State judgeVersion: string = ''
@State url: string = ''
@State hasAuth: boolean = false;
@ -63,282 +63,6 @@ struct Index {
.height(69 * this.ratio * this.dialogRatio)
.backgroundImage($r('app.media.button_nor'))
.backgroundImageSize({ width: '100%', height: '100%' })
// .margin({ bottom: 12 * this.ratio })
}
build() {
Column() {
Column() {
Row() {
Image($r('app.media.logo')).width('30%').height('5.5%').margin({ left: 24 })
Row() {
Image($r('app.media.btn_setting')).width('16.7%').height('12.2%')
.onClick(async () => {
if (this.loading) {
return
}
router.pushUrl({
url: 'pages/Settings',
}, router.RouterMode.Single);
})
Image($r('app.media.btn_back')).width('14.4%').height('12.2%')
.onClick(() => {
this.dialogVisiable = true
})
}
}
.width('100%')
.justifyContent(FlexAlign.SpaceBetween)
}
Column() {
Row() {
if (!this.isSingle) {
imageBtn({ btnWidth: '28%', btnHeight: '71%', imgSrc: $r('app.media.index_lw') })
.margin({ left: 80 * globalThis.ratio })
.onClick(async () => {
// this.vocObj.playAudio({
// type: 1,
// name: 'button_media.wav'
// })
// ||!this.initParamFlag
if (this.loading) {
// globalThis.title = '正在初始化请等待5s后重试'
// this.errorDialog.open()
return
}
setTimeout(() => {
this.angle = 360
}, 1000)
this.angle = 0
if (!globalThis.timeInfo) {
globalThis.type = '1'
globalThis.title = '时间同步接口连接失败'
this.errorDialog.open()
promptAction.showToast({
message: `时间同步接口连接失败`,
duration: 3000
});
this.loading = false
return
}
if (!globalThis.carInfo) {
promptAction.showToast({
message: `车辆信息接口获取失败`,
duration: 3000
});
globalThis.type = '1'
globalThis.title = '车辆信息接口获取失败'
this.errorDialog.open()
this.loading = false
return
}
this.testXMLToJSONInWorker()
})
}
if (this.isSingle) {
imageBtn({ btnWidth: '28%', btnHeight: '71%', imgSrc: $r('app.media.index_dj') })
.margin({ left: 80 * globalThis.ratio })
.onClick(() => {
if (this.loading) {
return
}
// this.vocObj.playAudio({
// type: 1,
// name: 'button_media.wav'
// })
if (judgeConfig.isTrajectoryOpen) {
router.pushUrl({
url: 'pages/UserInfo',
}, router.RouterMode.Single)
return
}
//判断数据库是否有表数据,有则直接跳转,没有则读取本地数据
getSyncData('MA_SYSSET').then(data => {
console.log('datadata', JSON.stringify(data))
if (data?.[0]) {
router.pushUrl({
url: 'pages/UserInfo',
}, router.RouterMode.Single)
} else {
this.testXMLToJSONInWorker()
}
});
})
}
imageBtn({ btnWidth: '28%', btnHeight: '71%', imgSrc: $r('app.media.index_zj') })
.margin({ right: 80 * globalThis.ratio })
.onClick(() => {
if (this.loading) {
return
}
// this.vocObj.playAudio({
// type: 1,
// name: 'button_media.wav'
// })
router.pushUrl({
url: 'pages/CarCheck'
}, router.RouterMode.Single);
})
}
.width('100%')
.justifyContent(FlexAlign.SpaceAround)
}
Column() {
Row() {
Column() {
Text('V外壳' + this.version)
.fontColor('#CCAE7A')
.fontSize(18 * globalThis.ratio)
.width('30%')
.margin({ bottom: 10 })
Text('V评判' + this.judgeVersion)
.fontColor('#CCAE7A')
.fontSize(18 * globalThis.ratio)
.width('30%')
.margin({ bottom: 10 })
// Text('V 1.0')
// .fontColor('#CCAE7A')
// .fontSize(22 * globalThis.ratio)
// .width('30%')
// .margin({ bottom: 10 })
Text('授权信息:' + (this.hasAuth ? '已授权' : '未授权'))
.fontColor('#CCAE7A')
.fontSize(18 * globalThis.ratio)
.width('30%')
}
.margin({ left: 24 })
.gesture(
GestureGroup(GestureMode.Exclusive,
TapGesture({ count: 2 })
.onAction(() => {
// takePhotoFn(this.context)
globalThis.singlePlay = !globalThis.singlePlay
this.isSingle = globalThis.singlePlay
})
)
)
Text('考车号:' + this.deviceId)
.fontColor('#CCAE7A')
.fontSize(22 * globalThis.ratio)
.margin({ right: 24 })
}
.width('100%')
.justifyContent(FlexAlign.SpaceBetween)
.margin({ bottom: 10 })
}
//
if (this.dialogVisiable) {
Flex({ justifyContent: FlexAlign.Center }) {
Text('确认是否退出应用')
.fontSize(28 * this.ratio * this.dialogRatio)
.margin({ top: 100 * this.ratio * this.dialogRatio })
Row() {
Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) {
Text(' 取 消 ')
.fontSize(24 * this.ratio * this.dialogRatio)
.fontColor('#fff')
.width(100 * this.ratio * this.dialogRatio)
}
.commStyle()
.onClick(() => {
this.dialogVisiable = false
// this.vocObj.playAudio({
// type: 1,
// name: 'button_media.wav'
// })
}).margin({ right: 10 * this.ratio })
Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) {
Text(' 确 定 ')
.fontSize(24 * this.ratio * this.dialogRatio)
.fontColor('#fff')
.width(100 * this.ratio * this.dialogRatio)
}
.commStyle()
.onClick(() => {
this.context.terminateSelf()
})
}.position({ y: 265 * this.ratio * this.dialogRatio, x: 115 * this.ratio * this.dialogRatio })
}
.width(660 * this.ratio * this.dialogRatio)
.height(360 * this.ratio * this.dialogRatio)
.position({ x: 220 * this.ratio, y: 98 * this.ratio - 265 / 2 * (1 - this.ratio * this.dialogRatio) })
.backgroundColor('#E6E3DF')
.borderRadius(19 * this.ratio * this.dialogRatio)
}
if (this.delLoading) {
Column() {
Image($r('app.media.open_loading'))
.width(200 * globalThis.ratio)
.rotate({ angle: this.angle })
.height(200 * globalThis.ratio)
.animation({
duration: 5000, // 动画时长
curve: Curve.EaseOut, // 动画曲线
delay: 500, // 动画延迟
iterations: -1, // 播放次数
playMode: PlayMode.Normal, // 动画模式
})
.margin({ top: 30 * globalThis.ratio })
Text('正在清理本地数据,请稍候……')
.fontSize(24 * globalThis.ratio)
.margin({ top: 20 * globalThis.ratio })
.fontWeight(400)
}
.visibility(this.delLoading ? Visibility.Visible : Visibility.Hidden)
.width(660 * globalThis.ratio)
.height(360 * globalThis.ratio)
.position({ x: 150 * globalThis.ratio, y: 98 * globalThis.ratio })
.backgroundColor('#E6E3DF')
.borderRadius(19 * globalThis.ratio)
}
if (this.loading) {
Column() {
Image($r('app.media.open_loading'))
.width(200 * globalThis.ratio)
.rotate({ angle: this.angle })
.height(200 * globalThis.ratio)
.animation({
duration: 5000, // 动画时长
curve: Curve.EaseOut, // 动画曲线
delay: 500, // 动画延迟
iterations: -1, // 播放次数
playMode: PlayMode.Normal, // 动画模式
})
.margin({ top: 30 * globalThis.ratio })
Image($r('app.media.car'))
.width(80 * globalThis.ratio)
.height(80 * globalThis.ratio)
.position({ x: 288 * globalThis.ratio, y: 89 * globalThis.ratio })
Text('获取考车信息,请稍候……')
.fontSize(24 * globalThis.ratio)
.margin({ top: 20 * globalThis.ratio })
.fontWeight(400)
}
.visibility(this.loading ? Visibility.Visible : Visibility.Hidden)
.width(660 * globalThis.ratio)
.height(360 * globalThis.ratio)
.position({ x: 150 * globalThis.ratio, y: 98 * globalThis.ratio })
.backgroundColor('#E6E3DF')
.borderRadius(19 * globalThis.ratio)
}
}
.width('100%')
.height('100%')
.justifyContent(FlexAlign.SpaceBetween)
.backgroundImagePosition({ x: 0, y: 0 })
.backgroundImage($r('app.media.index_bg'))
.backgroundImageSize({ width: '100%', height: '100%' })
}
async aboutToAppear() {
@ -352,36 +76,23 @@ struct Index {
globalThis.lsh = '1111111111111'
globalThis.errorDialog = this.errorDialog
globalThis.udpEvent = new UdpEvent();
getSyncData('MA_SYSSET').then(async data => {
console.log('datadata', JSON.stringify(data))
// @ts-ignore
// @ts-ignore
getSyncData('MA_SYSSET').then(async (data: any[]) => {
data.forEach(async sys => {
//判断是否能点开始考试
if (sys.v_no === '305') {
console.log('syssyssyssys')
// this.delLoading=true
// globalThis.param854Str=sys.v_value
delPic(Number(sys.v_value), 1)
delPic(Number(sys.v_value), 2)
// this.delLoading=false
}
})
});
}
aboutToDisappear() {
// this.vocObj && this.vocObj.releasePlayer()
}
async testXMLToJSONInWorker() {
async networkExam(isSingle: boolean = false) {
if (this.loading) {
return
}
const param = {
carId: globalThis.carInfo?.carId,
examinationRoomId: globalThis.carInfo?.examinationRoomId,
@ -396,26 +107,21 @@ struct Index {
singlePlay: globalThis.singlePlay
}
this.loading = true
console.log("sql 1111")
getSingleCenterTable(param).then(async (ret) => {
if (ret) {
const result = await getSyncData('ES_CARINFO')
const carInfo = result[0] || {};
// A2牵引车2号导航仪
if (carInfo.kscx == 'A2' && !globalThis.udpClientGps2) {
// A2牵引车2号导航仪
await getUDPGps2(this.context, false)
}
getSyncData('MA_SYSSET').then(data => {
console.log('datadata', JSON.stringify(data))
// @ts-ignore
getSyncData('MA_SYSSET').then((data: any[]) => {
data.forEach(sys => {
//判断是否能点开始考试
if (sys.v_no === '854') {
globalThis.param854Str = sys.v_value
}
if (sys.v_no === '824' && decodeURIComponent(sys.v_value) == '0') {
// this.Param612Str= decodeURIComponent(sys.v_value)
router.pushUrl({
url: 'pages/CarCheck',
params: {
@ -424,7 +130,7 @@ struct Index {
}, router.RouterMode.Single)
} else {
router.pushUrl({
url: 'pages/ExaminerLogin',
url: isSingle ? 'pages/UserInfo' : 'pages/ExaminerLogin',
}, router.RouterMode.Single)
}
})
@ -573,4 +279,256 @@ struct Index {
//下载模型
await getEsCarModel(context)
}
build() {
Column() {
Column() {
Row() {
Image($r('app.media.logo')).width('30%').height('5.5%').margin({ left: 24 })
Row() {
Image($r('app.media.btn_setting')).width('16.7%').height('12.2%')
.onClick(async () => {
if (this.loading) {
return
}
router.pushUrl({
url: 'pages/Settings',
}, router.RouterMode.Single);
})
Image($r('app.media.btn_back')).width('14.4%').height('12.2%')
.onClick(() => {
this.dialogVisiable = true
})
}
}
.width('100%')
.justifyContent(FlexAlign.SpaceBetween)
}
Column() {
Row() {
if (!this.isSingle) {
imageBtn({ btnWidth: '28%', btnHeight: '71%', imgSrc: $r('app.media.index_lw') })
.margin({ left: 80 * globalThis.ratio })
.onClick(async () => {
if (this.loading) {
return
}
setTimeout(() => {
this.angle = 360
}, 1000)
this.angle = 0
if (!globalThis.timeInfo) {
globalThis.type = '1'
globalThis.title = '时间同步接口连接失败'
this.errorDialog.open()
promptAction.showToast({
message: `时间同步接口连接失败`,
duration: 3000
});
this.loading = false
return
}
if (!globalThis.carInfo) {
promptAction.showToast({
message: `车辆信息接口获取失败`,
duration: 3000
});
globalThis.type = '1'
globalThis.title = '车辆信息接口获取失败'
this.errorDialog.open()
this.loading = false
return
}
this.networkExam()
})
}
if (this.isSingle) {
imageBtn({ btnWidth: '28%', btnHeight: '71%', imgSrc: $r('app.media.index_dj') })
.margin({ left: 80 * globalThis.ratio })
.onClick(() => {
if (this.loading) {
return
}
if (judgeConfig.isTrajectoryOpen) {
router.pushUrl({
url: 'pages/UserInfo',
}, router.RouterMode.Single)
return
}
//判断数据库是否有表数据,有则直接跳转,没有则读取本地数据
getSyncData('MA_SYSSET').then(async (data) => {
if (data?.[0]) {
const result = await getSyncData('ES_CARINFO')
const carInfo = result[0] || {};
if ((globalThis.isA1 && carInfo.kscx != "A1") || (globalThis.isA3 && carInfo.kscx != "A3")) {
this.networkExam(true)
return
}
router.pushUrl({
url: 'pages/UserInfo',
}, router.RouterMode.Single)
} else {
this.networkExam(true)
}
});
})
}
imageBtn({ btnWidth: '28%', btnHeight: '71%', imgSrc: $r('app.media.index_zj') })
.margin({ right: 80 * globalThis.ratio })
.onClick(() => {
if (this.loading) {
return
}
router.pushUrl({
url: 'pages/CarCheck'
}, router.RouterMode.Single);
})
}
.width('100%')
.justifyContent(FlexAlign.SpaceAround)
}
Column() {
Row() {
Column() {
Text('V外壳' + this.version)
.fontColor('#CCAE7A')
.fontSize(18 * globalThis.ratio)
.width('30%')
.margin({ bottom: 10 })
Text('V评判' + this.judgeVersion)
.fontColor('#CCAE7A')
.fontSize(18 * globalThis.ratio)
.width('30%')
.margin({ bottom: 10 })
Text('授权信息:' + (this.hasAuth ? '已授权' : '未授权'))
.fontColor('#CCAE7A')
.fontSize(18 * globalThis.ratio)
.width('30%')
}
.margin({ left: 24 })
.gesture(
GestureGroup(GestureMode.Exclusive,
TapGesture({ count: 2 })
.onAction(() => {
globalThis.singlePlay = !globalThis.singlePlay
this.isSingle = globalThis.singlePlay
})
)
)
Text('考车号:' + this.deviceId)
.fontColor('#CCAE7A')
.fontSize(22 * globalThis.ratio)
.margin({ right: 24 })
}
.width('100%')
.justifyContent(FlexAlign.SpaceBetween)
.margin({ bottom: 10 })
}
//
if (this.dialogVisiable) {
Flex({ justifyContent: FlexAlign.Center }) {
Text('确认是否退出应用')
.fontSize(28 * this.ratio * this.dialogRatio)
.margin({ top: 100 * this.ratio * this.dialogRatio })
Row() {
Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) {
Text(' 取 消 ')
.fontSize(24 * this.ratio * this.dialogRatio)
.fontColor('#fff')
.width(100 * this.ratio * this.dialogRatio)
}
.commStyle()
.onClick(() => {
this.dialogVisiable = false
}).margin({ right: 10 * this.ratio })
Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) {
Text(' 确 定 ')
.fontSize(24 * this.ratio * this.dialogRatio)
.fontColor('#fff')
.width(100 * this.ratio * this.dialogRatio)
}
.commStyle()
.onClick(() => {
this.context.terminateSelf()
})
}.position({ y: 265 * this.ratio * this.dialogRatio, x: 115 * this.ratio * this.dialogRatio })
}
.width(660 * this.ratio * this.dialogRatio)
.height(360 * this.ratio * this.dialogRatio)
.position({ x: 220 * this.ratio, y: 98 * this.ratio - 265 / 2 * (1 - this.ratio * this.dialogRatio) })
.backgroundColor('#E6E3DF')
.borderRadius(19 * this.ratio * this.dialogRatio)
}
if (this.delLoading) {
Column() {
Image($r('app.media.open_loading'))
.width(200 * globalThis.ratio)
.rotate({ angle: this.angle })
.height(200 * globalThis.ratio)
.animation({
duration: 5000, // 动画时长
curve: Curve.EaseOut, // 动画曲线
delay: 500, // 动画延迟
iterations: -1, // 播放次数
playMode: PlayMode.Normal, // 动画模式
})
.margin({ top: 30 * globalThis.ratio })
Text('正在清理本地数据,请稍候……')
.fontSize(24 * globalThis.ratio)
.margin({ top: 20 * globalThis.ratio })
.fontWeight(400)
}
.visibility(this.delLoading ? Visibility.Visible : Visibility.Hidden)
.width(660 * globalThis.ratio)
.height(360 * globalThis.ratio)
.position({ x: 150 * globalThis.ratio, y: 98 * globalThis.ratio })
.backgroundColor('#E6E3DF')
.borderRadius(19 * globalThis.ratio)
}
if (this.loading) {
Column() {
Image($r('app.media.open_loading'))
.width(200 * globalThis.ratio)
.rotate({ angle: this.angle })
.height(200 * globalThis.ratio)
.animation({
duration: 5000, // 动画时长
curve: Curve.EaseOut, // 动画曲线
delay: 500, // 动画延迟
iterations: -1, // 播放次数
playMode: PlayMode.Normal, // 动画模式
})
.margin({ top: 30 * globalThis.ratio })
Image($r('app.media.car'))
.width(80 * globalThis.ratio)
.height(80 * globalThis.ratio)
.position({ x: 288 * globalThis.ratio, y: 89 * globalThis.ratio })
Text('获取考车信息,请稍候……')
.fontSize(24 * globalThis.ratio)
.margin({ top: 20 * globalThis.ratio })
.fontWeight(400)
}
.visibility(this.loading ? Visibility.Visible : Visibility.Hidden)
.width(660 * globalThis.ratio)
.height(360 * globalThis.ratio)
.position({ x: 150 * globalThis.ratio, y: 98 * globalThis.ratio })
.backgroundColor('#E6E3DF')
.borderRadius(19 * globalThis.ratio)
}
}
.width('100%')
.height('100%')
.justifyContent(FlexAlign.SpaceBetween)
.backgroundImagePosition({ x: 0, y: 0 })
.backgroundImage($r('app.media.index_bg'))
.backgroundImageSize({ width: '100%', height: '100%' })
}
}

View File

@ -35,6 +35,114 @@ import promptAction from '@ohos.promptAction';
@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: 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;
@State syssetParam211: string = '';
@State carType: string = ''
@State carName: string = ''
@State isDeductedPopShow: boolean = false
@State isAmplifyPopShow: boolean = false
@State amplifiedImgIndex: number = 0
@State judge: any = {}
//行驶距离
@State jl: number = 0
//应考里程
@State examMileage: string = '0'
@State artSubject3Projects: string[] = ['直线', '会车', '变道', '超车', '掉头', '停车']
@State artSubject3ProjectsCodesArr: string[] = ['3', '9', '4', '10', '12', '11']
@State manualMarkRules: MarkRule[] = []
//科目三评判初始化数据
@State systemparmArr: SYSTEMPARMARR[] = []
@State mapPointItemArr: MAPITEMPOINTITEM[] = []
@State carinfoArr: CARINFO[] = []
@State mapPointArr: MAPPOINT[] = []
//手动项目是否在进行中
@State isManualProjectIn: boolean = false;
//项目是否进行中
@State isProjectIn: boolean = false;
//正在进行的项目代码
@State currentXmdm: string = ''
// 必考项目除靠边停车是否全部完成
@State isRequiredProjectsEnd: boolean = false;
// 考试项目是否全部完成
// @State isAllProjectsEnd: boolean = false;
@State lane: LANE = { road: '', num: 0, count: 0 }
@State roadData: Object = {};
//定位差分状态时候正常
@State isDwztRight: boolean = true;
@State defaultTabIndex: number = 0;
private context = getContext(this) as common.UIAbilityContext;
public kfArrScroller: Scroller = new Scroller()
private vocObj = null;
//档位
@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 isErrorMsgEnd: boolean = false
@State disConnectErrorOpen: boolean = false
// 考试模式 1:白考,2:夜考,3:增驾(模拟灯光未考),4:增驾(模拟灯光已考),5:满分学习
private mode: number = 1
private isYkkf: boolean = false
@ -259,7 +367,8 @@ struct Index {
}
//真实监管下发的项目
let kStringArr: string[] = (currentParams.kString?.split(',') || []).filter(item => item);
this.mockLight = kStringArr.includes("41700")
// 单机模式下增驾进模拟灯光
this.mockLight = kStringArr.includes("41700") || (globalThis.singlePlay && this.mode === 3)
console.log("lixiao mockLight", this.mockLight)
console.info('lixiao kStringArr', JSON.stringify(kStringArr))
@ -991,7 +1100,6 @@ struct Index {
this.judge.closeAllFiles()
router.back()
}
}
})
}
@ -1276,112 +1384,5 @@ struct Index {
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;
@State syssetParam211: string = '';
@State carType: string = ''
@State carName: string = ''
@State isDeductedPopShow: boolean = false
@State isAmplifyPopShow: boolean = false
@State amplifiedImgIndex: number = 0
@State judge: any = {}
//行驶距离
@State jl: number = 0
//应考里程
@State examMileage: string = '0'
@State artSubject3Projects: string[] = ['直线', '会车', '变道', '超车', '掉头', '停车']
@State artSubject3ProjectsCodesArr: string[] = ['3', '9', '4', '10', '12', '11']
@State manualMarkRules: MarkRule[] = []
//科目三评判初始化数据
@State systemparmArr: SYSTEMPARMARR[] = []
@State mapPointItemArr: MAPITEMPOINTITEM[] = []
@State carinfoArr: CARINFO[] = []
@State mapPointArr: MAPPOINT[] = []
//手动项目是否在进行中
@State isManualProjectIn: boolean = false;
//项目是否进行中
@State isProjectIn: boolean = false;
//正在进行的项目代码
@State currentXmdm: string = ''
// 必考项目除靠边停车是否全部完成
@State isRequiredProjectsEnd: boolean = false;
// 考试项目是否全部完成
// @State isAllProjectsEnd: boolean = false;
@State lane: LANE = { road: '', num: 0, count: 0 }
@State roadData: Object = {};
//定位差分状态时候正常
@State isDwztRight: boolean = true;
@State defaultTabIndex: number = 0;
private context = getContext(this) as common.UIAbilityContext;
public kfArrScroller: Scroller = new Scroller()
private vocObj = null;
//档位
@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 isErrorMsgEnd: boolean = false
@State disConnectErrorOpen: boolean = false
}

View File

@ -224,7 +224,6 @@ struct UserInfo {
this.currentUser = (this.list.length ? this.list[0] : EmptyCandidateObject)
}
} else if (user && (user.kssycs == '0' || user.kssycs == '')) {
console.log('datadatadatadata')
this.list = this.list.filter(res => {
return res.sfzmhm != user.sfzmhm
})

View File

@ -2,9 +2,8 @@ import apiJudgeSdk from 'libJudgeSdk.so';
import Judge from '../../judgeSDK/utils/judgeReal';
import { MarkRule, Project, ProjectObj } from '../../judgeSDK/api/judgeSDK.d';
import common from '@ohos.app.ability.common';
import {
examJudgeMapSetScaling
} from '../../judgeSDK/api'
import { examJudgeMapSetScaling, examJudgeVersion } from '../../judgeSDK/api'
import { judgeConfig } from '../../judgeSDK/utils/judgeConfig';
interface RoadDataType {
name: string,
@ -24,19 +23,18 @@ export default struct RealTime {
@State markRuleListObj: MarkRule = {}
@State scaleNum: number = 100
@State gpsActive: number = 1
@State ratio: number = 1
@State lane: Object = {}
@State timer: number = 0
@State version: string = ""
private widthNumber: string | number | Resource = 0
private heightNumber: string | number | Resource = 0
private context = getContext(this) as common.UIAbilityContext;
@State ratio: number = 1
@State lane: Object = {}
@State timer:number = 0
constructor() {
super()
}
// xcomponentController: XComponentController = new XComponentController()
build() {
Row() {
Column() {
@ -58,7 +56,7 @@ export default struct RealTime {
.fontColor('#fff')
}.height(30).justifyContent(FlexAlign.Start).width('100%')
})
}.margin({top:5})
}.margin({ top: 5 })
}.width(168 * 1.5)
.height(this.heightNumber)
@ -67,22 +65,29 @@ export default struct RealTime {
Column() {
if (this.draw) {
XComponent({
id: 'duolun_plugin_id_draw', //显示轨迹窗口id名称注意这个ID要和C++侧一致,不能变
type: 'surface',
libraryname: 'JudgeSdk'
// libraryname: 'judgesdk'
})
.width(this.widthNumber)
.height(this.heightNumber)
.onLoad(() => {
apiJudgeSdk.examJudgeMapSetDrawing(true); //停止绘制地图轨迹false:表示结束绘制
})
.onDestroy(() => {
apiJudgeSdk.examJudgeMapSetDrawing(false); //停止绘制地图轨迹false:表示结束绘制
this.draw = false;
clearInterval(globalThis.realTimer)
Stack({ alignContent: Alignment.TopEnd }) {
Row() {
Text(this.version).margin({ right: 10 }).fontSize(14).fontColor(0x333333)
}
XComponent({
id: 'duolun_plugin_id_draw', //显示轨迹窗口id名称注意这个ID要和C++侧一致,不能变
type: 'surface',
libraryname: 'JudgeSdk'
})
.width(this.widthNumber)
.height(this.heightNumber)
.onLoad(() => {
apiJudgeSdk.examJudgeMapSetDrawing(true); //停止绘制地图轨迹false:表示结束绘制
})
.onDestroy(() => {
apiJudgeSdk.examJudgeMapSetDrawing(false); //停止绘制地图轨迹false:表示结束绘制
this.draw = false;
clearInterval(globalThis.realTimer)
})
}.width(this.widthNumber)
.height(this.heightNumber)
} else {
Column() {
}
@ -93,14 +98,14 @@ export default struct RealTime {
.width('100%')
.backgroundColor('#fff')
Row(){
Image($rawfile('judge/big.png')).width(60).onClick(()=>{
this.scaleFn( -this.getScaleNum() )
Row() {
Image($rawfile('judge/big.png')).width(60).onClick(() => {
this.scaleFn(-this.getScaleNum())
})
Image($rawfile('judge/small.png')).width(60).onClick(()=>{
this.scaleFn( this.getScaleNum() )
}).margin({left:20})
}.position({x:'32%',y:60})
Image($rawfile('judge/small.png')).width(60).onClick(() => {
this.scaleFn(this.getScaleNum())
}).margin({ left: 20 })
}.position({ x: '32%', y: 60 })
}
.height('100%')
}
@ -108,39 +113,41 @@ export default struct RealTime {
async aboutToDisappear() {
clearInterval(this.timer)
}
async aboutToAppear() {
const judge = new Judge(this)
let timer = setInterval(()=>{
this.version = (await examJudgeVersion()) + "/" + judgeConfig.version
new Judge(this)
let timer = setInterval(() => {
this.lane = globalThis.laneData;
},1000)
}, 1000)
this.timer = timer
}
getScaleNum = ()=>{
getScaleNum = () => {
const scaleNum = this.scaleNum;
if(scaleNum < 200){
if (scaleNum < 200) {
return 10
}
if(scaleNum >= 200 && scaleNum < 400){
if (scaleNum >= 200 && scaleNum < 400) {
return 30
}
if(scaleNum >= 400 && scaleNum < 600){
if (scaleNum >= 400 && scaleNum < 600) {
return 50
}
if(scaleNum >= 600 && scaleNum < 800){
if (scaleNum >= 600 && scaleNum < 800) {
return 70
}
if(scaleNum >= 800 && scaleNum < 1000){
if (scaleNum >= 800 && scaleNum < 1000) {
return 100
}
if(scaleNum >= 1000 && scaleNum < 2000){
if (scaleNum >= 1000 && scaleNum < 2000) {
return 500
}
if(scaleNum >= 2000 && scaleNum <= 5000){
if (scaleNum >= 2000 && scaleNum <= 5000) {
return 1000
}
@ -168,32 +175,30 @@ export default struct RealTime {
{ name: '车身碰线', key: ['TouchLineTypeCS', 'TouchLineDirCS'] },
{ name: '基准车道', key: ['BasePointInLaneNo', 'BaseLaneCount'] },
{ name: '前点车道', key: ['FrontPointLaneNo', 'FrontPointLaneCount'] },
{ name: '后车点道', key: ['BackPointLaneNo','BackPointLaneCount'] },
{ name: '后车点道', key: ['BackPointLaneNo', 'BackPointLaneCount'] },
{ name: '左前/后车身距离', key: ['Body_LF_ToLeftEdge', 'Body_LB_ToLeftEdge'] },
{ name: '右前/后车身距离', key: ['Body_RF_ToRightEdge', 'Body_RB_ToRightEdge'] },
{ name: '右前/后车身边线', key: ['Body_RF_ToBaseLine','Body_RB_ToBaseLine'] },
{ name: '右前/后车身边线', key: ['Body_RF_ToBaseLine', 'Body_RB_ToBaseLine'] },
{ name: '右前/后轮距离', key: ['Wheel_RF_ToRightEdge', 'Wheel_RB_ToRightEdge'] },
{ name: '右前/后轮边线', key: ['Wheel_RF_ToBaseLine', 'Wheel_RB_ToBaseLine'] },
{ name: '左前/后轮距离', key: ['Wheel_LF_ToRightEdge', 'Wheel_LB_ToRightEdge'] },
{ name: '左前/后轮边线', key: ['Wheel_LF_ToBaseLine', 'Wheel_LB_ToBaseLine'] },
{ name: '车道属性', key: ['BasePointInLaneDir', 'CrossLineAttr','DirInverse'] },
{ name: '形状', key: ['InShapeAttr', 'ShapeNo','ShapeNoWheel'] },
{ name: '车道属性', key: ['BasePointInLaneDir', 'CrossLineAttr', 'DirInverse'] },
{ name: '形状', key: ['InShapeAttr', 'ShapeNo', 'ShapeNoWheel'] },
{ name: '路段点', key: ['CrossPointNo'] },
]
scaleFn = async (num)=>{
scaleFn = async (num) => {
const scaleNum = this.scaleNum
if(scaleNum >0 && scaleNum < 5000){
if (scaleNum > 0 && scaleNum < 5000) {
this.scaleNum += num;
}
if(scaleNum === 0 && num > 0){
if (scaleNum === 0 && num > 0) {
this.scaleNum += num;
}
if(scaleNum > 5000 && num < 0){
if (scaleNum > 5000 && num < 0) {
this.scaleNum += num;
}
await examJudgeMapSetScaling(this.scaleNum);
}
}

View File

@ -54,6 +54,7 @@ import {
examJudgeVersion
} from './api/index';
import { getSyncData, upDateTableByArray } from '../../common/service/initable';
import promptAction from '@ohos.promptAction';
const judgeTag = 'SURENJUN_JUDGE'
@ -339,7 +340,7 @@ export default class Judge {
//及格分
let passingGrade = passingScore
if (isManual) {
// 考试不合格
// 手动结束
await examJudgeEndExam()
this.isExamEnd = true
this.isManual = true
@ -717,7 +718,9 @@ export default class Judge {
const sdkver = await examJudgeVersion();
const initInfo = {
sdkver,
appver: globalThis.version,
// appver: globalThis.version,
// 外壳迭代版本号
appver: judgeConfig.version,
kskm: 3,
kchp: plateNo,
kchm: carId * 1,
@ -1797,7 +1800,15 @@ export default class Judge {
await fileLog.setExamJudgeData(initInfo)
//相关评判初始化只做一次
if (!isJudgeInitBool) {
const tempJudge = await examJudgeInit(initInfo);
try {
await examJudgeInit(initInfo);
} catch (err) {
promptAction.showToast({
message: "考试初始化失败,请重试或联系管理员"
})
router.back()
return
}
globalThis.isJudgeInitBool = true
console.info(judgeTag, '4.评判初始化完成')
}
@ -1838,18 +1849,6 @@ export default class Judge {
this.videoData = await saveStartRecordVideo(`${name}_${kssycs}`)
}
const {examSubject,projectsObj} = this.judgeUI
// if(examSubject == 3){
// //不做模拟灯光,需要做上车准备 =>(请上车准备)
// if(projectsObj[41]?.type == 3 && projectsObj[1]?.type != 3){
// avPlayer.playAudio(['voice/上车准备.mp3'])
// }
// //不做模拟灯光,不做上车准备 =>(请起步,完成考试)
// if(projectsObj[41]?.type == 3 && projectsObj[1]?.type == 3){
// avPlayer.playAudio(['voice/402001.mp3'])
// }
// }
this.judgeUI.draw = true
// 处理轨迹plc信息
if (isTrajectoryOpen) {

View File

@ -1,7 +1,9 @@
//考试回放开关
export const judgeConfig = {
// 外壳版本号
version: "2025.05.13.01",
// 是否A1A3共用一车
isUseSameCar: false,
isUseSameCar: true,
//本地目录开关
isTrajectoryOpen: false,
//是否开启拍照

View File

@ -1,48 +1,28 @@
import {
examJudgeMapSetParam,
examJudgeMapSetScaling
} from '../api/index'
import { examJudgeMapSetParam, examJudgeMapSetScaling } from '../api/index'
import systemTime from '@ohos.systemDateTime';
import FileUtil from '../../../common/utils/File'
import FileModel from './fileModel'
import {testRealExam} from '../dataTest/index'
import { testRealExam } from '../dataTest/index'
const judgeTag = 'SURENJUN_JUDGE'
export default class JudgeImg {
private judgeUI
private modelPath:string
private fileModel:FileModel
private fileUtil:FileUtil
private plcData:any
constructor(judgeUI) {
this.modelPath = 'models/model_enc'
this.judgeUI = judgeUI
this.fileUtil = new FileUtil(judgeUI.context)
this.fileModel = new FileModel(judgeUI.context)
this.init()
}
async init(){
const isJudgeInitBool = globalThis.isJudgeInitBool;
async init() {
const {judgeUI} = this;
//TODO 临时处理
setTimeout(async ()=>{
console.info(judgeTag,'1.进入评判入口')
setTimeout(async () => {
console.info(judgeTag, '1.进入评判入口')
await examJudgeMapSetParam(640, 480); //设置参数宽、高
await examJudgeMapSetScaling(100); //设置缩放比例一般默认填100就是100%的意思) 数字越大视野越大数字越小视野越小不能为0
})
judgeUI.draw = true
}
//获取评判初始化数据
getInitInfo = () =>{
}
}