import common from '@ohos.app.ability.common'; import router from '@ohos.router'; import { HomeTag, InitTableTag, JudgeConfig } from '../config'; import VoiceAnnounce from './judgeSDK/utils/voiceAnnouncements'; import { BaseInfoType } from '../model/Common'; import { CarInfoType, InitializeTheCentralTableType, MASYSSETTableType, TimeSynchronizationRspBody } from '../model'; import { CreateAlbum, GetCarInfo, GetDeviceInfo, SetCurrentTime } from './Index/utils'; import { GetSyncData, InitializeTheCentralTable } from '../utils/table/Operation'; import { BusinessError } from '@ohos.base'; import { delPic } from '../utils/Video'; import { FileHelper } from '../utils/FileHelp'; import { DrivingDataStorage } from '../utils/business/DrivingDataStorage'; import { JudgeEmitterInstance } from '../utils/business/UdpEvent'; import HeaderComponent from './compontents/Header'; import CardComponent from './Index/Card'; import BottomMessageComponent from './Index/BottomMessage'; import LoadingComponent from './Index/Loading'; import Prompt from '@system.prompt'; import { DifferentialAndSignal } from '../utils/business/DifferentialAndSignalWorker'; import { dConsole } from '../utils/LogWorker'; @Entry @Component struct Index { @State url: string = '' @State hasAuth: boolean = false; @State dialogVisible: boolean = false; @State singlePlay: boolean = false; @State baseInfo: BaseInfoType = {}; @State deviceId: string = ''; @State angle: number = 0 @State dialogRatio: number = 0.8 @State ratio: number = 1700 / 960 @State delLoading: boolean = false @State initParamFlag: boolean = false @State fd: number = -1; @State carInfo: CarInfoType = {}; @State num: number = 0; @State isPlay: boolean = false; @State initWork: boolean = false // 请求网络表等待弹窗 customDialogController: CustomDialogController = new CustomDialogController({ builder: LoadingComponent(), customStyle: true, alignment: DialogAlignment.Center, autoCancel: true }); private context = getContext(this) as common.UIAbilityContext; private fileHelper: FileHelper = new FileHelper(this.context) private avPlayer: VoiceAnnounce = new VoiceAnnounce(this.context) private timeInfo: TimeSynchronizationRspBody = {} @Styles commStyle(){ .width(220 * this.ratio * this.dialogRatio) .height(69 * this.ratio * this.dialogRatio) .backgroundImage($r('app.media.button_nor')) .backgroundImageSize({ width: '100%', height: '100%' }) } async aboutToAppear() { dConsole.log("权限首页 aboutToAppear") this.ratio = AppStorage.get('baseInfo')?.ratio || 1.4 this.angle = 0 AppStorage.set('lsh', '1111111111111') JudgeEmitterInstance.init() GetSyncData("MA_SYSSET").then((res: MASYSSETTableType[]) => { res.forEach((element) => { if (element.v_no === "305") { delPic(Number(element.v_value), 1, this.context) delPic(Number(element.v_value), 2, this.context) } }); }); } async onPageShow(): Promise { dConsole.log("权限首页 onPageShow2") if (!this.isPlay) { this.avPlayer.playAudio(['welcome.wav']) this.isPlay = true } this.baseInfo = AppStorage.get('baseInfo')! this.initParams() AppStorage.setOrCreate('singlePlay', false) this.num = 0 AppStorage.setOrCreate('lsh', '1111111111111') } // 联网考试逻辑处理 onlineExam() { this.customDialogController.open() if (!this.timeInfo) { Prompt.showToast({ message: `时间同步接口连接失败`, duration: 3000 }); this.customDialogController.close() return } if (!this.carInfo) { Prompt.showToast({ message: `车辆信息接口获取失败`, duration: 3000 }); this.customDialogController.close() return } this.initializationTableRelated() } // 单机训练逻辑处理 singlePlayerTraining() { AppStorage.setOrCreate('singlePlay', true) if (JudgeConfig.isTrajectoryOpen) { router.pushUrl({ url: 'pages/UserInfo', }, router.RouterMode.Single) return } //判断数据库是否有表数据,有则直接跳转,没有则读取本地数据 GetSyncData('MA_SYSSET').then((data: Array) => { if (data?.[0]) { router.pushUrl({ url: 'pages/UserInfo', }, router.RouterMode.Single) } else { this.initializationTableRelated() } }); } async initializationTableRelated() { const param: InitializeTheCentralTableType = { carId: this.carInfo?.carId, examinationRoomId: this.carInfo?.examinationRoomId, judgeVersion: this.baseInfo?.judgeVersion, shellVersion: this.baseInfo?.version || "", paraKdid: this.timeInfo?.paraKdid || this.timeInfo?.kdid, kdid: this.timeInfo?.kdid || this.timeInfo?.paraKdid, mode: this.timeInfo?.mode, context: this.context, host: AppStorage.get('host'), centerHost: this.timeInfo?.url, singlePlay: this.singlePlay } InitializeTheCentralTable(param).then((ret) => { dConsole.log(InitTableTag, "初始化表成功", ret) if (ret) { GetSyncData("MA_SYSSET").then(data => { data.forEach(sys => { //判断是否能点开始考试 if (sys.v_no === '854') { AppStorage.setOrCreate('param854Str', sys.v_value) } if (sys.v_no === '824' && decodeURIComponent(sys.v_value || '') == '0') { router.pushUrl({ url: 'pages/CarCheck', params: { 'fromIndex': true } }, router.RouterMode.Single) } else { if (this.singlePlay) { router.pushUrl({ url: 'pages/UserInfo', }, router.RouterMode.Single) } else { router.pushUrl({ url: 'pages/ExaminerLogin', }, router.RouterMode.Single) } } }) }); } else { this.customDialogController.close() } }).catch((err: BusinessError) => { dConsole.error("初始化表失败", err) }) } async initParams() { dConsole.log("test1111") await GetDeviceInfo(this.context) this.carInfo = await GetCarInfo() this.carInfo = AppStorage.get('carInfo')! this.deviceId = this.carInfo.carNo || "" await SetCurrentTime() this.timeInfo = AppStorage.get('timeInfo')! DrivingDataStorage.init(this.context) DrivingDataStorage.initializeTheDrivingDataFolder() // JudgeUdpBusinessInstance.init() // TODO 摄像头遮挡 // takePhotoFn(this.context) // TODO // CenterUDPBusinessInstance.startHeartBeat() CreateAlbum(this.fileHelper) // 启动worker通道 if (!this.initWork) { DifferentialAndSignal.init() this.initWork = true } DifferentialAndSignal.onMsg(() => { dConsole.log("外层接受") }) } build() { Flex({ justifyContent: FlexAlign.SpaceBetween, direction: FlexDirection.Column }) { HeaderComponent({ shortLogo: false }) CardComponent({ isSingle: this.singlePlay, singleClick: () => { dConsole.log(HomeTag, "单机模式点击") this.singlePlayerTraining() }, networkingClick: () => { dConsole.log(HomeTag, "联网考试点击") this.onlineExam() } }) BottomMessageComponent({ version: this.baseInfo.version, judgeVersion: this.baseInfo.judgeVersion, hasAuth: this.baseInfo.hasAuth, examCarNumber: this.deviceId, versionClick: () => { dConsole.log(HomeTag, "版本号点击事件") this.singlePlay = !this.singlePlay AppStorage.setOrCreate('singlePlay', this.singlePlay) } }) } .width("100%") .height("100%") .backgroundImage($r('app.media.index_bg')) .backgroundImageSize({ width: "100%", height: "100%" }) } }