Compare commits
2 Commits
c94005445d
...
1a6a87ebae
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1a6a87ebae | ||
|
|
181ca85f01 |
@ -6,7 +6,7 @@ import { GetSyncData } from '../utils/table/Operation';
|
||||
import { GetCurrentTime } from '../utils/Common';
|
||||
import FileUtils from '../utils/FileUtils';
|
||||
|
||||
let baseHost: string = AppStorage.get('host');
|
||||
let baseHost: string = AppStorage.get<string>('host');
|
||||
|
||||
|
||||
// 下载模型
|
||||
@ -27,11 +27,11 @@ interface WR {
|
||||
|
||||
// 通用监管接口
|
||||
export async function writeObjectOut(params: RegulatoryInterfaceParams, filePath?: string): Promise<WR> {
|
||||
const singlePlay: boolean = AppStorage.get('singlePlay')
|
||||
const singlePlay: boolean = AppStorage.get<boolean>('singlePlay')
|
||||
if (singlePlay) {
|
||||
return { code: 1 }
|
||||
}
|
||||
let JGHOST: string = AppStorage.get("JGHOST")
|
||||
let JGHOST: string = AppStorage.get<string>("JGHOST")
|
||||
//获取监管接口地址路径
|
||||
if (!JGHOST) {
|
||||
const syssetParams: MASYSSETTableType[] = await GetSyncData<MASYSSETTableType>("MA_SYSSET");
|
||||
@ -49,7 +49,7 @@ export async function writeObjectOut(params: RegulatoryInterfaceParams, filePath
|
||||
})
|
||||
}
|
||||
// const { xtlb, jkxlh, jkid, drvexam } = params;
|
||||
const isJGNew: boolean = AppStorage.get('isJGNew')
|
||||
const isJGNew: boolean = AppStorage.get<boolean>('isJGNew')
|
||||
//新监管调用
|
||||
if (isJGNew) {
|
||||
return await writeObjectOutNew(params, filePath)
|
||||
@ -73,7 +73,7 @@ export async function writeObjectOut(params: RegulatoryInterfaceParams, filePath
|
||||
}
|
||||
|
||||
//对象转换成xml
|
||||
JGHOST = AppStorage.get("JGHOST")
|
||||
JGHOST = AppStorage.get<string>("JGHOST")
|
||||
const temp = await request<object>({
|
||||
host: JGHOST,
|
||||
url: '/dems_ws/services/TmriOutAccess?wsdl',
|
||||
@ -132,7 +132,7 @@ interface UploadExamProgressDataParams {
|
||||
// 过程文件上传
|
||||
export async function uploadExamProgressData(params: UploadExamProgressDataParams) {
|
||||
// const singlePlay = globalThis.singlePlay
|
||||
const singlePlay: boolean = AppStorage.get('singlePlay')
|
||||
const singlePlay: boolean = AppStorage.get<boolean>('singlePlay')
|
||||
if (singlePlay) {
|
||||
return
|
||||
}
|
||||
@ -169,7 +169,7 @@ interface UploadExamProgressDataParams2 {
|
||||
|
||||
export async function uploadExamProgressData2(params: UploadExamProgressDataParams2) {
|
||||
// const singlePlay = globalThis.singlePlay
|
||||
const singlePlay: boolean = AppStorage.get('singlePlay')
|
||||
const singlePlay: boolean = AppStorage.get<boolean>('singlePlay')
|
||||
if (singlePlay) {
|
||||
return
|
||||
}
|
||||
@ -203,7 +203,7 @@ interface UploadExamMileage {
|
||||
// 上传考试里程
|
||||
export async function uploadExamMileage(params: UploadExamMileage) {
|
||||
// const singlePlay = globalThis.singlePlay
|
||||
const singlePlay: boolean = AppStorage.get('singlePlay')
|
||||
const singlePlay: boolean = AppStorage.get<boolean>('singlePlay')
|
||||
|
||||
if (singlePlay) {
|
||||
return
|
||||
@ -230,7 +230,7 @@ export async function uploadExamMileage(params: UploadExamMileage) {
|
||||
// 上传考试成绩
|
||||
export async function uploadExamGrade(params: ESObject) {
|
||||
// const singlePlay = globalThis.singlePlay
|
||||
const singlePlay: boolean = AppStorage.get('singlePlay')
|
||||
const singlePlay: boolean = AppStorage.get<boolean>('singlePlay')
|
||||
if (singlePlay) {
|
||||
return
|
||||
}
|
||||
|
||||
@ -30,6 +30,7 @@ import { GlobalConfig } from '../../config/index';
|
||||
import prompt from '@ohos.promptAction';
|
||||
import DB, { ColumnType } from '../database/DbSql';
|
||||
import FileUtils from '../../utils/FileUtils';
|
||||
import { TimeSynchronizationRspBody } from '../../model';
|
||||
|
||||
//读表
|
||||
//参数平台
|
||||
@ -291,7 +292,7 @@ export async function delSyncTable(tableName, context?) {
|
||||
//获取车模、场地模型
|
||||
export async function getEsCarModel(context) {
|
||||
const date = new Date()
|
||||
const timeInfo = AppStorage.get('timeInfo')
|
||||
const timeInfo = AppStorage.get<TimeSynchronizationRspBody>('timeInfo')
|
||||
if (!timeInfo?.paraKdid) {
|
||||
prompt.showToast({
|
||||
message: 'paraKdid获取失败',
|
||||
@ -308,7 +309,7 @@ export async function getEsCarModel(context) {
|
||||
"paraKdid": timeInfo.paraKdid, //参数平台kdid
|
||||
"examinationRoomId": timeInfo.kdid, //考试平台kdid
|
||||
// "carMac":"MAC-HCPAD-210",
|
||||
"carMac": AppStorage.get('deviceNo')
|
||||
"carMac": AppStorage.get<string>('deviceNo')
|
||||
}
|
||||
}
|
||||
const venueStr = {
|
||||
@ -320,7 +321,7 @@ export async function getEsCarModel(context) {
|
||||
"paraKdid": timeInfo.paraKdid, //参数平台kdid
|
||||
"examinationRoomId": timeInfo.kdid, //考试平台kdid
|
||||
// "carMac":"MAC-HCPAD-210",
|
||||
"carMac": AppStorage.get('deviceNo')
|
||||
"carMac": AppStorage.get<string>('deviceNo')
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -137,7 +137,7 @@ export async function getUDP2(context, errorFlag?) {
|
||||
globalThis.udpEvent.sendKfContent(val.body[0])
|
||||
} else if (val.id == '46') {
|
||||
let tmpList = []
|
||||
const str = AppStorage.get('lsh')
|
||||
const str = AppStorage.get<string>('lsh')
|
||||
for (let i = 0; i < str.length; i++) {
|
||||
tmpList.push(this.string2Bytes(str.charCodeAt(i), 1 * 8)[0])
|
||||
}
|
||||
@ -188,7 +188,7 @@ export async function setJudgeUdp() {
|
||||
const fileUtil = new FileUtil(context)
|
||||
const data = await fileUtil.readFile(GlobalConfig.comoonfileWriteAddress + '/config/ipConfig.txt');
|
||||
const config = JSON.parse(data)
|
||||
const carInfo = AppStorage.get('carInfo')
|
||||
const carInfo = AppStorage.get<CarInfoType>('carInfo')
|
||||
//
|
||||
// const config = await getSyncData('IpConfigTable');
|
||||
let udpIndex = 0;
|
||||
|
||||
@ -2,7 +2,7 @@ import systemTime from '@ohos.systemDateTime';
|
||||
import { testKm2Items, testKm3Items } from '../../pages/judgeSDK/dataTest/index';
|
||||
import { judgeConfig } from '../../pages/judgeSDK/utils/judgeConfig';
|
||||
import { setJudgeUdp, setTopLineUdp } from './GlobalUdp';
|
||||
import { examCalcGpsDistance } from '../../pages/judgeSDK/api'
|
||||
import { examCalcGpsDistance } from '../../pages/judgeSDK/api';
|
||||
|
||||
export const initJudgeUdp = async () => {
|
||||
AppStorage.setOrCreate('serialIndex', 0)
|
||||
@ -51,7 +51,7 @@ export const initJudgeUdp = async () => {
|
||||
}
|
||||
|
||||
export const getMessageHeartbeat = async (msg) => {
|
||||
const carInfo = AppStorage.get('carInfo');
|
||||
const carInfo = AppStorage.get<CarInfoType>('carInfo');
|
||||
const { examSubject, plateNo } = carInfo;
|
||||
const ksyh = '0000000000000'
|
||||
const { fourInOneScreen:{ gpsDigit } } = judgeConfig
|
||||
|
||||
@ -44,10 +44,10 @@ export default class EntryAbility extends UIAbility {
|
||||
|
||||
AppStorage.setOrCreate<CarInfoType>('carInfo', {})
|
||||
AppStorage.setOrCreate<ExaminerInfoType>('examinerInfo', {})
|
||||
AppStorage.setOrCreate('lsh', '0000000000000')
|
||||
AppStorage.setOrCreate('statue', 1) //考试状态
|
||||
AppStorage.setOrCreate('signNum', 0) //心跳指令编号
|
||||
AppStorage.setOrCreate('deviceNo', 0) //设备号
|
||||
AppStorage.setOrCreate<string>('lsh', '0000000000000')
|
||||
AppStorage.setOrCreate<string>('statue', "1") //考试状态
|
||||
AppStorage.setOrCreate<number>('signNum', 0) //心跳指令编号
|
||||
AppStorage.setOrCreate<string>('deviceNo', "") //设备号
|
||||
AppStorage.setOrCreate<BaseInfoType>('baseInfo', {
|
||||
hasAuth: false,
|
||||
version: GlobalConfig.version.jn.km3[0],
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import { ColumnInfo, ColumnType } from '../common/database/DbSql'
|
||||
import common from '@ohos.app.ability.common';
|
||||
import { ColumnInfo, ColumnType } from '../utils/DbSql';
|
||||
|
||||
export const MA_SYS_SET_COLUMN: ColumnInfo[] = [
|
||||
{
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import { DrvexamType } from ".";
|
||||
import { DrvexamType } from '.';
|
||||
|
||||
// -----new-----
|
||||
export interface ApiResponseType {
|
||||
@ -28,6 +28,8 @@ interface TimeSynchronizationRsp {
|
||||
export interface TimeSynchronizationRspBody {
|
||||
mode?: string;
|
||||
url?: string
|
||||
paraKdid?: string
|
||||
kdid?: string
|
||||
}
|
||||
|
||||
interface UploadExamCarCheckResultRsp {
|
||||
|
||||
@ -4,9 +4,8 @@ import TopLogo from './compontents/TopLogo';
|
||||
import testNapi from '@ohos.hiserialsdk';
|
||||
import { DwMapData, PassData, RealNumData, StackValueData, WarnFlagData, WarnFlagTipData } from '../mock';
|
||||
import { BaseInfoType, RouteParamsType } from '../model/Common';
|
||||
import { CarCheckDataType, CarConfigurationParams, CarInfoType } from '../model';
|
||||
import { CarCheckDataType, CarConfigurationParams, CarInfoType, SpzdType } from '../model';
|
||||
import { BusinessError } from '@ohos.base';
|
||||
import { SpzdType } from '../model';
|
||||
import { voiceService } from '../utils/Voice';
|
||||
import dayTs from '../utils/Date';
|
||||
|
||||
@ -46,7 +45,7 @@ struct Index {
|
||||
// private AccountTable = new AccountTable(()=>{},CommonConstants);
|
||||
aboutToAppear() {
|
||||
const that = this
|
||||
this.carInfo = AppStorage.get('carInfo')
|
||||
this.carInfo = AppStorage.get<CarInfoType>('carInfo')
|
||||
this.vocObj = new voiceService(async (status: string, val: string) => {
|
||||
if (!that.breakFlag) {
|
||||
return
|
||||
@ -121,7 +120,7 @@ struct Index {
|
||||
|
||||
//
|
||||
carConfigurationInfoFn() {
|
||||
if (AppStorage.get('singlePlay')) {
|
||||
if (AppStorage.get<boolean>('singlePlay')) {
|
||||
const str =
|
||||
"1:5;2:5;3:5;4:5;5:5;6:5;7:5;8:5;9:5;10:5;11:5;12:5;13:5;14:5;15:5;16:5;17:5;18:5;19:5;20:5;21:5;22:2;23:5;24:5"
|
||||
const data = str.split(';')
|
||||
@ -137,7 +136,7 @@ struct Index {
|
||||
this.checkListCopy = JSON.parse(JSON.stringify(this.checkList))
|
||||
return
|
||||
}
|
||||
const baseInfo = AppStorage.get('baseInfo') as BaseInfoType
|
||||
const baseInfo = AppStorage.get<BaseInfoType>("baseInfo")
|
||||
//模拟真实数据
|
||||
const param: CarConfigurationParams = {
|
||||
body: {
|
||||
@ -277,7 +276,7 @@ struct Index {
|
||||
type: 1,
|
||||
name: flag ? 'zjwtg.wav' : 'zjtg.wav'
|
||||
})
|
||||
if (AppStorage.get('singlePlay')) {
|
||||
if (AppStorage.get<boolean>('singlePlay')) {
|
||||
return
|
||||
}
|
||||
let date = new Date();
|
||||
|
||||
@ -94,7 +94,7 @@ struct Index {
|
||||
if (this.limit) {
|
||||
return
|
||||
}
|
||||
const carInfo: CarInfoType = AppStorage.get('carInfo')
|
||||
const carInfo: CarInfoType = AppStorage.get<CarInfoType>('carInfo')
|
||||
const param: UserLoginType = {
|
||||
carId: carInfo.carId as string,
|
||||
examinationRoomId: carInfo.examinationRoomId as string,
|
||||
@ -130,7 +130,7 @@ struct Index {
|
||||
console.log('res11', JSON.stringify(res))
|
||||
const examinerLoginInfo: ExaminerLoginInfo = res.examinerLoginRsp.body
|
||||
examinerLoginInfo.username = this.inputTextArr[0]
|
||||
AppStorage.setOrCreate('examinerLoginInfo', examinerLoginInfo)
|
||||
AppStorage.setOrCreate<ExaminerLoginInfo>('examinerLoginInfo', examinerLoginInfo)
|
||||
}).catch((err: BusinessError) => {
|
||||
console.log('jiangsong12', JSON.stringify(err))
|
||||
this.errorDialog.close()
|
||||
|
||||
@ -11,8 +11,12 @@ import errorMsgDialog from './compontents/errorMsgDialog';
|
||||
import imageBtn from './compontents/imageBtn';
|
||||
import VoiceAnnounce from './judgeSDK/utils/voiceAnnouncements';
|
||||
import { BaseInfoType } from '../model/Common';
|
||||
import { CarInfoType } from '../model';
|
||||
import { InitializeTheCentralTableType, MASYSSETTableType, TimeInfo } from '../model';
|
||||
import {
|
||||
CarInfoType,
|
||||
InitializeTheCentralTableType,
|
||||
MASYSSETTableType,
|
||||
TimeSynchronizationRspBody
|
||||
} from '../model';
|
||||
import { GetCarInfo, GetDeviceInfo, SetCurrentTime, SetSerialNumber, UseAuth } from './Index/utils';
|
||||
import { GetSyncData, InitializeTheCentralTable } from '../utils/table/Operation';
|
||||
import { BusinessError } from '@ohos.base';
|
||||
@ -56,7 +60,7 @@ struct Index {
|
||||
)
|
||||
private interval = -1;
|
||||
private avPlayer: VoiceAnnounce
|
||||
private timeInfo: TimeInfo
|
||||
private timeInfo: TimeSynchronizationRspBody
|
||||
private context = getContext(this) as common.UIAbilityContext;
|
||||
|
||||
@Styles
|
||||
@ -353,7 +357,7 @@ struct Index {
|
||||
|
||||
async aboutToAppear() {
|
||||
this.avPlayer = new VoiceAnnounce();
|
||||
this.ratio = AppStorage.get('ratio')
|
||||
this.ratio = AppStorage.get<number>('ratio')
|
||||
this.initParamFlag = false
|
||||
this.delLoading = false
|
||||
this.dialogVisiable = false
|
||||
@ -391,7 +395,7 @@ struct Index {
|
||||
kdid: this.timeInfo?.kdid || this.timeInfo?.paraKdid,
|
||||
mode: this.timeInfo?.mode,
|
||||
context: this.context,
|
||||
host: AppStorage.get('host'),
|
||||
host: AppStorage.get<string>('host'),
|
||||
centerHost: this.timeInfo?.url,
|
||||
singlePlay: this.singlePlay
|
||||
}
|
||||
@ -427,13 +431,13 @@ struct Index {
|
||||
}
|
||||
|
||||
async heartMsg() {
|
||||
const signNum = AppStorage.get('signNum') as number
|
||||
const statue = AppStorage.get('statue') as number
|
||||
const lsh = AppStorage.get('lsh') as String
|
||||
const signNum = AppStorage.get<number>('signNum')
|
||||
const statue = AppStorage.get<string>('statue')
|
||||
const lsh = AppStorage.get<string>('lsh')
|
||||
const arr = [signNum || 0, statue || 1]
|
||||
let tmpList: number[] = [];
|
||||
tmpList.push(NumberToByteArray(arr[0], 1 * 8)[0])
|
||||
tmpList.push(NumberToByteArray(arr[1], 1 * 8)[0])
|
||||
tmpList.push(NumberToByteArray(Number(arr[0]), 1 * 8)[0])
|
||||
tmpList.push(NumberToByteArray(Number(arr[1]), 1 * 8)[0])
|
||||
const str = lsh || '0000000000000'
|
||||
for (let i = 0; i < str.length; i++) {
|
||||
tmpList.push(NumberToByteArray(str.charCodeAt(i), 1 * 8)[0])
|
||||
@ -453,8 +457,8 @@ struct Index {
|
||||
|
||||
async onPageShow() {
|
||||
console.log('ttttt', 1111)
|
||||
this.singlePlay = AppStorage.get('singlePlay')
|
||||
this.baseInfo = AppStorage.get('baseInfo') as BaseInfoType
|
||||
this.singlePlay = AppStorage.get<boolean>('singlePlay')
|
||||
this.baseInfo = AppStorage.get<BaseInfoType>('baseInfo')
|
||||
// await this.userAuth();
|
||||
UseAuth(this.context).then(() => {
|
||||
this.initParams()
|
||||
@ -504,12 +508,12 @@ struct Index {
|
||||
await GetCarInfo()
|
||||
await getUDP2(this.context, false)
|
||||
getTCP()
|
||||
this.carInfo = AppStorage.get('carInfo')
|
||||
this.carInfo = AppStorage.get<CarInfoType>('carInfo')
|
||||
this.deviceId = this.carInfo.carNo
|
||||
// await setCurrentTime();
|
||||
await SetCurrentTime()
|
||||
this.timeInfo = AppStorage.get('timeInfo')
|
||||
const distanceClass = AppStorage.get('distanceClass') as boolean
|
||||
this.timeInfo = AppStorage.get<TimeSynchronizationRspBody>('timeInfo')
|
||||
const distanceClass = AppStorage.get<boolean>('distanceClass')
|
||||
if (!distanceClass) {
|
||||
const distanceClass = new GetDistance(this.context)
|
||||
await distanceClass.initFolder()
|
||||
|
||||
@ -16,7 +16,10 @@ import abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl';
|
||||
import { BusinessError } from '@ohos.base';
|
||||
import systemTime from '@ohos.systemTime';
|
||||
import { VideoConfigData } from '../../mock';
|
||||
ontext: common.UIAbilityContext): Promise<string> {
|
||||
import FileUtils from '../../utils/FileUtils';
|
||||
|
||||
//获取设备信息
|
||||
export async function GetDeviceInfo(context: common.UIAbilityContext): Promise<string> {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
const fileUtil = new FileUtils(context)
|
||||
const data = await fileUtil.readFile(GlobalConfig.comoonfileWriteAddress + '/config/deviceNo.txt');
|
||||
@ -40,7 +43,7 @@ export async function GetCarInfo() {
|
||||
let date = new Date();
|
||||
let params: ObtainCarExamInfoParams = {
|
||||
time: dayTs(date).format("YYYY-MM-DD HH:mm:ss"),
|
||||
deviceNo: AppStorage.get('deviceNo')
|
||||
deviceNo: AppStorage.get<string>('deviceNo')
|
||||
};
|
||||
let res: ApiResponseType = await obtainCarExamInfo(params)
|
||||
if (res.obtainCarExamInfoRsp.body) {
|
||||
@ -87,7 +90,7 @@ export async function SetCurrentTime(): Promise<void> {
|
||||
judgeVersion: baseInfo.judgeVersion
|
||||
}
|
||||
let res: ApiResponseType = await timeSynchronization(params);
|
||||
AppStorage.setOrCreate('timeInfo', res.timeSynchronizationRsp.body)
|
||||
AppStorage.setOrCreate<ApiResponseType.timeSynchronizationRsp.body>('timeInfo', res.timeSynchronizationRsp.body)
|
||||
let currentTime = res.timeSynchronizationRsp.head.time;
|
||||
let times = new Date(currentTime).getTime();
|
||||
try {
|
||||
|
||||
@ -159,8 +159,8 @@ struct Index {
|
||||
|
||||
async aboutToAppear() {
|
||||
const time = await GetCurrentTime()
|
||||
this.carInfo = AppStorage.get('carInfo')
|
||||
this.singlePlay = AppStorage.get('singlePlay')
|
||||
this.carInfo = AppStorage.get<CarInfoType>('carInfo')
|
||||
this.singlePlay = AppStorage.get<boolean>('singlePlay')
|
||||
this.startTime = time.split(' ')[1]
|
||||
this.startFullTime = await GetCurrentTime(1);
|
||||
// this.startHourTime = await getCurrentHourTime()
|
||||
|
||||
@ -220,9 +220,9 @@ struct UserInfo {
|
||||
this.ksksLimit = false
|
||||
this.currentUser = EmptyCandidateObject
|
||||
this.filePhoto = new FilePhoto(this.context);
|
||||
this.singlePlay = AppStorage.get('singlePlay')
|
||||
this.examinerLoginInfo = AppStorage.get('examinerLoginInfo')
|
||||
this.carInfo = AppStorage.get('carInfo')
|
||||
this.singlePlay = AppStorage.get<boolean>('singlePlay')
|
||||
this.examinerLoginInfo = AppStorage.get<ExaminerLoginInfo>('examinerLoginInfo')
|
||||
this.carInfo = AppStorage.get<CarInfoType>('carInfo')
|
||||
//语音功能on
|
||||
// new WebRTCVoice(this.context);
|
||||
//初始化数据
|
||||
@ -485,7 +485,7 @@ struct UserInfo {
|
||||
//考点端查询缺考指令内容消息请求
|
||||
getqkFn() {
|
||||
let tmpList: Array<number> = [];
|
||||
tmpList.push(NumberToByteArray(AppStorage.get('signNum'), 1 * 8)[0])
|
||||
tmpList.push(NumberToByteArray(AppStorage.get<number>('signNum'), 1 * 8)[0])
|
||||
const param: QKParamType = {
|
||||
id: 41,
|
||||
list: tmpList,
|
||||
@ -1275,7 +1275,7 @@ struct UserInfo {
|
||||
getqkFlag: $getqkFlag,
|
||||
faceCatchImg: $faceCatchImg,
|
||||
showFaceCompare: $showFaceCompare,
|
||||
lsh: AppStorage.get('lsh'),
|
||||
lsh: AppStorage.get<string>('lsh'),
|
||||
})
|
||||
}
|
||||
if (this.qkFlag) {
|
||||
|
||||
@ -174,7 +174,7 @@ export default struct FaceCompare {
|
||||
|
||||
async aboutToAppear() {
|
||||
const fileUtil = new FileUtils(this.context)
|
||||
this.carInfo = AppStorage.get('carInfo')
|
||||
this.carInfo = AppStorage.get<CarInfoType>('carInfo')
|
||||
this.fileUtil = fileUtil
|
||||
this.getVideoConfig()
|
||||
}
|
||||
@ -187,7 +187,7 @@ export default struct FaceCompare {
|
||||
|
||||
getqkFn() {
|
||||
let tmpList: number[] = [];
|
||||
tmpList.push(NumberToByteArray(AppStorage.get('signNum'), 1 * 8)[0])
|
||||
tmpList.push(NumberToByteArray(AppStorage.get <number>('signNum'), 1 * 8)[0])
|
||||
const param: ParamType = {
|
||||
id: 41,
|
||||
list: tmpList,
|
||||
|
||||
@ -81,8 +81,8 @@ export default struct DeductedPopup {
|
||||
private avPlayer: VoiceAnnounce
|
||||
|
||||
async aboutToAppear() {
|
||||
this.carInfo = AppStorage.get('carInfo')
|
||||
this.singlePlay = AppStorage.get('singlePlay')
|
||||
this.carInfo = AppStorage.get<CarInfoType>('carInfo')
|
||||
this.singlePlay = AppStorage.get<boolean>('singlePlay')
|
||||
this.avPlayer = new VoiceAnnounce();
|
||||
this.judgeTask = new JudgeTask();
|
||||
const mediaTest = new FilePhoto(this.context);
|
||||
|
||||
@ -48,6 +48,7 @@ import { Array2Byte, convertGpsCoord2, deepClone, fillZero, string2Bytes } from
|
||||
import { GetCurrentTime, StringToASCII } from '../../utils/Common';
|
||||
import UsbService from '../../utils/USB';
|
||||
import FileUtils from '../../utils/FileUtils';
|
||||
import { BaseInfoType, CarInfoType } from '../../model';
|
||||
|
||||
const judgeTag = 'SURENJUN_JUDGE'
|
||||
|
||||
@ -68,7 +69,7 @@ export default class Judge {
|
||||
}
|
||||
//上传无锡所过程数据
|
||||
uploadProgressData = async () => {
|
||||
const carInfo = AppStorage.get('carInfo')
|
||||
const carInfo = AppStorage.get<CarInfoType>('carInfo')
|
||||
const { judgeUI, fileUtil, fileLog } = this;
|
||||
const { idCard, startFullTime } = judgeUI
|
||||
const { carId, examinationRoomId } = carInfo
|
||||
@ -119,7 +120,7 @@ export default class Judge {
|
||||
}
|
||||
// 处理特殊参数配置
|
||||
handleSEP = async (code: number) => {
|
||||
const carInfo = AppStorage.get('carInfo')
|
||||
const carInfo = AppStorage.get<CarInfoType>('carInfo')
|
||||
const {
|
||||
judgeUI:{
|
||||
judgeConfigObj
|
||||
@ -239,7 +240,7 @@ export default class Judge {
|
||||
private filePhoto: FilePhoto
|
||||
// 过程照片拍照
|
||||
getPhoto = async (empty?: boolean) => {
|
||||
const singlePlay: boolean = AppStorage.get('singlePlay')
|
||||
const singlePlay: boolean = AppStorage.get<boolean>('singlePlay')
|
||||
//单机模式返回空照片
|
||||
if (singlePlay) {
|
||||
return ''
|
||||
@ -466,7 +467,7 @@ export default class Judge {
|
||||
if (!this.isExamEnd) {
|
||||
await examJudgeRealExam(plcData)
|
||||
}
|
||||
let udpIndex = AppStorage.get('udpIndex') as number;
|
||||
let udpIndex = AppStorage.get<number>('udpIndex');
|
||||
let [prevJd, preWd] = [0, 0]
|
||||
if (udpIndex % 5 === 0 && !this.isUdpEnd) {
|
||||
// TODO UPD缺失
|
||||
@ -521,7 +522,7 @@ export default class Judge {
|
||||
private isJudgeDisConnect: boolean;
|
||||
// 项目开始接口同步
|
||||
beginProject = async (ksxm) => {
|
||||
const carInfo = AppStorage.get('carInfo');
|
||||
const carInfo = AppStorage.get<CarInfoType>('carInfo');
|
||||
const { examSubject, plateNo } = carInfo;
|
||||
const { judgeUI, fileLog, getSbbm, xmxh, filePath } = this;
|
||||
const { lsh, idCard, serialNumber, projectsObj, ksdd, kslx, xldm } = judgeUI
|
||||
@ -557,7 +558,7 @@ export default class Judge {
|
||||
}
|
||||
// 项目结束接口同步
|
||||
endProject = async (ksxm) => {
|
||||
const carInfo = AppStorage.get('carInfo');
|
||||
const carInfo = AppStorage.get<CarInfoType>('carInfo');
|
||||
const { examSubject, plateNo, carNo } = carInfo;
|
||||
const { judgeUI, fileLog, getSbxh, xmxh, getSbbm, filePath } = this;
|
||||
const { lsh, idCard, serialNumber, projectsObj, cdsbInfoObj, ksdd, kslx, xldm, } = judgeUI
|
||||
@ -623,7 +624,7 @@ export default class Judge {
|
||||
const time = await GetCurrentTime();
|
||||
const { judgeUI, plcData, getPhoto, fileLog, filePath } = this;
|
||||
const photoBase64 = await getPhoto();
|
||||
const carInfo = AppStorage.get('carInfo');
|
||||
const carInfo = AppStorage.get<CarInfoType>('carInfo');
|
||||
const { examSubject, plateNo, carNo } = carInfo;
|
||||
const { lsh, idCard, serialNumber, projectsObj, ksdd, judgeConfigObj } = judgeUI;
|
||||
const { sensor, gps } = plcData
|
||||
@ -703,7 +704,7 @@ export default class Judge {
|
||||
// 获取评判初始化数据
|
||||
getJudgeInitData = async () => {
|
||||
const { getModelData, getKm3JudgeInitConfig } = this
|
||||
const carInfo = AppStorage.get('carInfo');
|
||||
const carInfo = AppStorage.get<CarInfoType>('carInfo');
|
||||
const { examSubject, plateNo, carId } = carInfo;
|
||||
const judgeUI = this.judgeUI
|
||||
const { projectsObj, itemInfoObj, markRuleListObj, carType, carName, systemparmArr, carinfoArr } = judgeUI
|
||||
@ -723,7 +724,7 @@ export default class Judge {
|
||||
const sdkver = await examJudgeVersion();
|
||||
const initInfo = {
|
||||
sdkver,
|
||||
appver: AppStorage.get('baseInfo').version,
|
||||
appver: AppStorage.get<BaseInfoType>('baseInfo').version,
|
||||
kskm: examSubject * 1,
|
||||
kchp: plateNo,
|
||||
kchm: carId * 1,
|
||||
@ -1104,7 +1105,7 @@ export default class Judge {
|
||||
case 5:
|
||||
console.info(judgeTag, '考试结束')
|
||||
//关闭录像
|
||||
const singlePlay = AppStorage.get('singlePlay') as boolean
|
||||
const singlePlay = AppStorage.get<boolean>('singlePlay')
|
||||
if (!singlePlay) {
|
||||
await endRecordVideo(this.videoData)
|
||||
}
|
||||
@ -1131,7 +1132,7 @@ export default class Judge {
|
||||
}
|
||||
// 考试扣分
|
||||
pointsDedute = async (ksxm, kf) => {
|
||||
const carInfo = AppStorage.get('carInfo');
|
||||
const carInfo = AppStorage.get<CarInfoType>('carInfo');
|
||||
const { examSubject, plateNo, carNo } = carInfo;
|
||||
const { judgeUI, getProjectInfo, fileLog, xmmcSingleCode, xmmcEndCode, filePath } = this;
|
||||
const { lsh, idCard, serialNumber, ksdd, projectsObj } = judgeUI
|
||||
@ -1212,7 +1213,7 @@ export default class Judge {
|
||||
const { judgeConfigObj, examSubject, isAllProjectsEnd, totalScore, passingScore } = judgeUI;
|
||||
//计算考试分数
|
||||
// this.judgeUI.totalScore = isAllProjectsEnd ? totalScore : 0;
|
||||
const singlePlay = AppStorage.get('singlePlay')
|
||||
const singlePlay = AppStorage.get<boolean>('singlePlay')
|
||||
const param302 = judgeConfigObj['302'];
|
||||
// globalThis.windowClass.setWindowSystemBarEnable(['navigation'])
|
||||
|
||||
@ -1261,8 +1262,8 @@ export default class Judge {
|
||||
}
|
||||
// 考试结束
|
||||
public endExam = async (isManual?: Boolean) => {
|
||||
const carInfo = AppStorage.get('carInfo');
|
||||
const singlePlay = AppStorage.get('singlePlay')
|
||||
const carInfo = AppStorage.get<CarInfoType>('carInfo');
|
||||
const singlePlay = AppStorage.get<boolean>('singlePlay')
|
||||
const { examSubject, plateNo } = carInfo;
|
||||
const {
|
||||
judgeUI,
|
||||
@ -1447,7 +1448,7 @@ export default class Judge {
|
||||
}
|
||||
// 消息心跳发送
|
||||
getMessageHeartbeat = async (isEnd?: Boolean) => {
|
||||
const carInfo = AppStorage.get('carInfo');
|
||||
const carInfo = AppStorage.get<CarInfoType>('carInfo');
|
||||
const { examSubject, plateNo, ksyh } = carInfo;
|
||||
const {
|
||||
judgeUI,
|
||||
@ -1464,7 +1465,7 @@ export default class Judge {
|
||||
getSbxh,
|
||||
fileLog,
|
||||
} = this;
|
||||
const singlePlay = AppStorage.get('singlePlay')
|
||||
const singlePlay = AppStorage.get<boolean>('singlePlay')
|
||||
const { lsh, startHourTime, totalScore, examTime, judgeConfigObj } = judgeUI;
|
||||
const {
|
||||
fourInOneScreen:{
|
||||
|
||||
@ -2,6 +2,7 @@ import { testMarkRules, testRealExam } from '../dataTest/index';
|
||||
|
||||
import systemTime from '@ohos.systemDateTime';
|
||||
import { Array2Byte } from './Common';
|
||||
import { CarInfoType } from '../../../model';
|
||||
|
||||
//获取本地扣分项
|
||||
export const getTestMarkRules = () => {
|
||||
@ -110,7 +111,7 @@ export function getKmProjectVoice(
|
||||
lane,
|
||||
xmxh
|
||||
) {
|
||||
const carInfo = AppStorage.get('carInfo');
|
||||
const carInfo = AppStorage.get<CarInfoType>('carInfo');
|
||||
const { examSubject } = carInfo;
|
||||
const param506Str = judgeConfig['506']?.split(',') || [];
|
||||
const param512Str = judgeConfig['512']?.split(',') || [];
|
||||
@ -206,7 +207,7 @@ export function promptWxCode(
|
||||
) {
|
||||
let toast = '';
|
||||
|
||||
const singlePlay = AppStorage.get('singlePlay')
|
||||
const singlePlay = AppStorage.get<boolean>('singlePlay')
|
||||
if (singlePlay) {
|
||||
return
|
||||
}
|
||||
|
||||
@ -21,7 +21,7 @@ export default class JudgeImg {
|
||||
}
|
||||
|
||||
async init() {
|
||||
const isJudgeInitBool = AppStorage.get('isJudgeInitBool');
|
||||
const isJudgeInitBool = AppStorage.get<boolean>('isJudgeInitBool');
|
||||
const { judgeUI } = this;
|
||||
|
||||
//TODO 临时处理
|
||||
|
||||
@ -1,14 +1,12 @@
|
||||
import media from '@ohos.multimedia.media';
|
||||
import webSocket from '@ohos.net.webSocket';
|
||||
import camera from '@ohos.multimedia.camera';
|
||||
import common from '@ohos.app.ability.common';
|
||||
import ethernet from '@ohos.net.ethernet';
|
||||
import prompt from '@ohos.prompt'
|
||||
import prompt from '@ohos.prompt';
|
||||
|
||||
const TAG_RTC: string = '[SURENJUN_RTC]';
|
||||
|
||||
const carNo = AppStorage.get('carInfo').carNo;
|
||||
const carNo = AppStorage.get<CarInfoType>('carInfo').carNo;
|
||||
const WS_SERVER = `ws://192.168.36.9:5000/ws/KM2-C${carNo}/2`;
|
||||
|
||||
// const WS_SERVER = 'wss://webrtc.nirbheek.in:8443';
|
||||
// const WS_SERVER = 'wss://webrtc.youzhi.life:8443';
|
||||
export enum WebRtcState {
|
||||
@ -25,18 +23,90 @@ export enum WebRtcState {
|
||||
}
|
||||
|
||||
export default class WebRtcModel {
|
||||
private ourId : string = '';
|
||||
public isConnected: boolean = false;
|
||||
sendIceCandidate = async (icecandidate: any) => {
|
||||
const { peerId, remoteUserId } = this
|
||||
this.sendMessage(JSON.stringify({
|
||||
eventName: '__ice_candidate',
|
||||
data: {
|
||||
userID: remoteUserId,
|
||||
id: 'audio',
|
||||
label: 0,
|
||||
fromId: peerId,
|
||||
candidate: icecandidate.candidate
|
||||
}
|
||||
}));
|
||||
}
|
||||
private ourId: string = '';
|
||||
//TODO 待替换
|
||||
private peerId: string = `KM2-C${carNo}`;
|
||||
public isConnected: boolean = false;
|
||||
private remoteUserId: string = '';
|
||||
private roomId: string = '';
|
||||
// private state: number = WebRtcState.UNKNOWN;
|
||||
|
||||
private roomId: string = '';
|
||||
private context: any = undefined;
|
||||
private ws : webSocket.WebSocket = undefined;
|
||||
private webrtc : media.WebRtc = undefined;
|
||||
private ws: webSocket.WebSocket = undefined;
|
||||
private webrtc: media.WebRtc = undefined;
|
||||
sendAnswer = async () => {
|
||||
const { peerId:fromID, remoteUserId:userID } = this;
|
||||
console.info(TAG_RTC, 'surenjun')
|
||||
try {
|
||||
let answer = await this.webrtc.createAnswer();
|
||||
console.info(TAG_RTC, 'createAnswer: ' + JSON.stringify(answer));
|
||||
|
||||
this.webrtc.setLocalDescription(answer);
|
||||
|
||||
this.sendMessage(JSON.stringify({
|
||||
eventName: '__answer',
|
||||
data: {
|
||||
userID,
|
||||
fromID,
|
||||
label: 0,
|
||||
id: 'audio',
|
||||
sdp: answer.sdp
|
||||
}
|
||||
}))
|
||||
this.isConnected = true;
|
||||
} catch (e) {
|
||||
console.error(TAG_RTC, 'createAnswer: ' + JSON.stringify(e));
|
||||
}
|
||||
}
|
||||
receiveSdp = async (sdp) => {
|
||||
let type = sdp.type as string;
|
||||
// let text = json.sdp.text as string;
|
||||
if (type === 'offer') {
|
||||
this.webrtc.setRemoteDescription(sdp);
|
||||
this.sendAnswer();
|
||||
prompt.showToast({
|
||||
message: '语音对讲连接完成',
|
||||
duration: 4000
|
||||
});
|
||||
} else if (type === 'answer') {
|
||||
this.webrtc.setRemoteDescription(sdp);
|
||||
}
|
||||
}
|
||||
private stateCallback: (state: number, message: string) => void = undefined;
|
||||
sendOffer = async () => {
|
||||
const { peerId:fromID, remoteUserId:userID } = this;
|
||||
try {
|
||||
let offer = await this.webrtc.createOffer();
|
||||
this.webrtc.setLocalDescription(offer);
|
||||
if (this.stateCallback) {
|
||||
this.stateCallback(WebRtcState.PEER_NEGOTIATING, '发送Offer');
|
||||
}
|
||||
this.sendMessage(JSON.stringify({
|
||||
eventName: '__answer',
|
||||
data: {
|
||||
userID,
|
||||
fromID,
|
||||
label: 0,
|
||||
id: 'audio',
|
||||
sdp: offer.sdp
|
||||
}
|
||||
}))
|
||||
} catch (e) {
|
||||
console.error(TAG_RTC, 'createOffer: ' + JSON.stringify(e));
|
||||
}
|
||||
}
|
||||
|
||||
initWebSocket(ourId: string, handleStateChange: (state, message) => void) {
|
||||
|
||||
@ -57,30 +127,49 @@ export default class WebRtcModel {
|
||||
console.info(TAG_RTC, '信令服务器连接失败');
|
||||
});
|
||||
|
||||
this.ws.on('message', (err, value:string) => {
|
||||
const {acceptInvited,receiveIce,sendAnswer,receiveSdp,disconnect} = this;
|
||||
this.ws.on('message', (err, value: string) => {
|
||||
const { acceptInvited, receiveIce, sendAnswer, receiveSdp, disconnect } = this;
|
||||
const socketMessage = JSON.parse(value);
|
||||
const {eventName,data:{candidate,sdp,room,userID,inviteID:fromId,toID}} = socketMessage;
|
||||
const {
|
||||
eventName, data:{
|
||||
candidate,
|
||||
sdp,
|
||||
room,
|
||||
userID,
|
||||
inviteID: fromId,
|
||||
toID
|
||||
}
|
||||
} = socketMessage;
|
||||
|
||||
console.info(TAG_RTC,'receive message =>' + eventName.split('__')[1])
|
||||
switch (eventName.split('__')[1]){
|
||||
console.info(TAG_RTC, 'receive message =>' + eventName.split('__')[1])
|
||||
switch (eventName.split('__')[1]) {
|
||||
|
||||
//离开
|
||||
case 'leave':disconnect();break
|
||||
//离开
|
||||
case 'leave':
|
||||
disconnect();
|
||||
break
|
||||
|
||||
//收到对方邀请通知
|
||||
case 'invite':acceptInvited(fromId , room);break;
|
||||
//收到对方邀请通知
|
||||
case 'invite':
|
||||
acceptInvited(fromId, room);
|
||||
break;
|
||||
|
||||
//对方接受通话邀请
|
||||
//对方接受通话邀请
|
||||
case 'new_peer':
|
||||
|
||||
//添加ice证书
|
||||
case 'ice_candidate':receiveIce(candidate);break;
|
||||
//添加ice证书
|
||||
case 'ice_candidate':
|
||||
receiveIce(candidate);
|
||||
break;
|
||||
|
||||
case 'answer':
|
||||
// sendAnswer()
|
||||
// sendAnswer()
|
||||
|
||||
case 'offer':receiveSdp({type:'offer',sdp});break;
|
||||
case 'offer':
|
||||
receiveSdp({
|
||||
type: 'offer', sdp
|
||||
});
|
||||
break;
|
||||
|
||||
default:
|
||||
}
|
||||
@ -149,7 +238,11 @@ export default class WebRtcModel {
|
||||
console.info(TAG_RTC, 'webrtc prepare');
|
||||
|
||||
// 参数暂时无效
|
||||
this.webrtc.prepare({ iceServers: [ { urls: "stun://stun.l.google.com:19302" } ] });
|
||||
this.webrtc.prepare({
|
||||
iceServers: [{
|
||||
urls: "stun://stun.l.google.com:19302"
|
||||
}]
|
||||
});
|
||||
}
|
||||
|
||||
async connect(peerId: string) {
|
||||
@ -163,7 +256,7 @@ export default class WebRtcModel {
|
||||
this.sendMessage('SESSION ' + this.peerId)
|
||||
}
|
||||
|
||||
public disconnect = async ()=> {
|
||||
public disconnect = async () => {
|
||||
console.info(TAG_RTC, 'disconnect');
|
||||
if (this.ws) {
|
||||
this.webrtc.close()
|
||||
@ -174,78 +267,17 @@ export default class WebRtcModel {
|
||||
});
|
||||
const webRtcModel = new WebRtcModel()
|
||||
webRtcModel.setContext(this.context);
|
||||
webRtcModel.initWebSocket('', ()=>{});
|
||||
webRtcModel.initWebSocket('', () => {
|
||||
});
|
||||
webRtcModel.initRtc();
|
||||
}
|
||||
}
|
||||
|
||||
sendOffer = async ()=> {
|
||||
const {peerId:fromID,remoteUserId:userID} = this;
|
||||
try {
|
||||
let offer = await this.webrtc.createOffer();
|
||||
this.webrtc.setLocalDescription(offer);
|
||||
if (this.stateCallback) {
|
||||
this.stateCallback(WebRtcState.PEER_NEGOTIATING, '发送Offer');
|
||||
}
|
||||
this.sendMessage(JSON.stringify({
|
||||
eventName:'__answer',
|
||||
data:{
|
||||
userID,
|
||||
fromID,
|
||||
label:0,
|
||||
id:'audio',
|
||||
sdp:offer.sdp
|
||||
}
|
||||
}))
|
||||
} catch (e) {
|
||||
console.error( TAG_RTC, 'createOffer: ' + JSON.stringify(e));
|
||||
}
|
||||
}
|
||||
|
||||
sendAnswer = async () => {
|
||||
const {peerId:fromID,remoteUserId:userID} = this;
|
||||
console.info(TAG_RTC,'surenjun')
|
||||
try {
|
||||
let answer = await this.webrtc.createAnswer();
|
||||
console.info(TAG_RTC, 'createAnswer: ' + JSON.stringify(answer));
|
||||
|
||||
this.webrtc.setLocalDescription(answer);
|
||||
|
||||
this.sendMessage(JSON.stringify({
|
||||
eventName:'__answer',
|
||||
data:{
|
||||
userID,
|
||||
fromID,
|
||||
label:0,
|
||||
id:'audio',
|
||||
sdp:answer.sdp
|
||||
}
|
||||
}))
|
||||
this.isConnected = true;
|
||||
} catch (e) {
|
||||
console.error( TAG_RTC, 'createAnswer: ' + JSON.stringify(e));
|
||||
}
|
||||
}
|
||||
|
||||
sendIceCandidate = async (icecandidate: any) => {
|
||||
const {peerId,remoteUserId} = this
|
||||
this.sendMessage(JSON.stringify({
|
||||
eventName:'__ice_candidate',
|
||||
data:{
|
||||
userID:remoteUserId,
|
||||
id:'audio',
|
||||
label:0,
|
||||
fromId:peerId,
|
||||
candidate:icecandidate.candidate
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
sendMessage = async (message:string) => {
|
||||
sendMessage = async (message: string) => {
|
||||
this.ws.send(message, (error, success) => {
|
||||
if (success){
|
||||
if (success) {
|
||||
console.info(TAG_RTC, 'ws send success' + message)
|
||||
}else{
|
||||
} else {
|
||||
console.error(TAG_RTC, 'ws send error: ' + error);
|
||||
}
|
||||
});
|
||||
@ -256,28 +288,13 @@ export default class WebRtcModel {
|
||||
return await this.ws.close();
|
||||
}
|
||||
|
||||
receiveSdp = async (sdp) => {
|
||||
let type = sdp.type as string;
|
||||
// let text = json.sdp.text as string;
|
||||
if (type === 'offer') {
|
||||
this.webrtc.setRemoteDescription(sdp);
|
||||
this.sendAnswer();
|
||||
prompt.showToast({
|
||||
message: '语音对讲连接完成',
|
||||
duration: 4000
|
||||
});
|
||||
} else if (type === 'answer') {
|
||||
this.webrtc.setRemoteDescription(sdp);
|
||||
}
|
||||
}
|
||||
|
||||
receiveIce = (ice) => {
|
||||
receiveIce = (ice) => {
|
||||
try {
|
||||
this.webrtc.addIceCandidate({
|
||||
candidate:ice,
|
||||
candidate: ice,
|
||||
});
|
||||
}catch (e){
|
||||
console.info(TAG_RTC,JSON.stringify(e))
|
||||
} catch (e) {
|
||||
console.info(TAG_RTC, JSON.stringify(e))
|
||||
}
|
||||
}
|
||||
|
||||
@ -294,16 +311,16 @@ export default class WebRtcModel {
|
||||
}
|
||||
|
||||
//接受对方的邀请
|
||||
acceptInvited = (fromId:string,roomId:string) =>{
|
||||
const {sendMessage,peerId} = this;
|
||||
acceptInvited = (fromId: string, roomId: string) => {
|
||||
const { sendMessage, peerId } = this;
|
||||
this.remoteUserId = fromId;
|
||||
this.roomId = roomId
|
||||
|
||||
sendMessage(JSON.stringify({
|
||||
eventName:'__join',
|
||||
data:{
|
||||
userID:peerId,
|
||||
room:roomId
|
||||
eventName: '__join',
|
||||
data: {
|
||||
userID: peerId,
|
||||
room: roomId
|
||||
}
|
||||
}))
|
||||
|
||||
|
||||
@ -108,7 +108,7 @@ class CenterUDPClient extends UdpClient {
|
||||
try {
|
||||
const fileUtil = new FileUtils(context)
|
||||
const data = await fileUtil.readFile("" + '/config/ipConfig.txt');
|
||||
const carInfo: CarInfoType = AppStorage.get('carInfo')
|
||||
const carInfo: CarInfoType = AppStorage.get<CarInfoType>('carInfo')
|
||||
if (data?.length > 0) {
|
||||
const result: IPConfig = JSON.parse(data)
|
||||
this.create(result.udplocalIp, '8800', carInfo?.udpAddress, carInfo?.messagePort)
|
||||
|
||||
@ -61,7 +61,7 @@ export default class GetDistance {
|
||||
//上传行驶里程数据
|
||||
uploadData = async () => {
|
||||
setInterval(() => {
|
||||
const { carId } = AppStorage.get('carInfo');
|
||||
const { carId } = AppStorage.get<CarInfoType>('carInfo');
|
||||
const { date, timeStr, totalDistance } = this;
|
||||
return
|
||||
//"carid":"1001","startTime":"2024-08-24 08:09:01","time":"111233", "mileage":"1222"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user