Compare commits

..

2 Commits

Author SHA1 Message Date
Surenjun
fab5f64df5 Merge remote-tracking branch 'origin/api10' into api10 2025-03-27 15:52:31 +08:00
Surenjun
d697c69cee feat: pages/Judge.ets文件修改 2025-03-27 15:52:20 +08:00
8 changed files with 379 additions and 167 deletions

View File

@ -197,7 +197,8 @@ interface UploadExamMileage {
carId: string
examinationRoomId: string
lsh: string
kslc: string
kslc: number
kskssj:string
}
// 上传考试里程
@ -208,7 +209,7 @@ export async function uploadExamMileage(params: UploadExamMileage) {
if (singlePlay) {
return
}
const time = await GetCurrentTime()
const time = GetCurrentTime()
return request<object>({
url: '/der2/services/exam/uploadExamMileage.ws',
data: `<?xml version="1.0" encoding="UTF-8"?>

View File

@ -90,10 +90,14 @@ export interface BaseInfoType {
deviceNo?: string
}
interface kfdmObj{
xmdm:string
kfdm:string
}
// 路由参数
export interface RouteParamsType {
sczb?: string;
kfdm?: string;
kfdm?: kfdmObj[];
type?: string;
wayno?: string;
kString?: string;

View File

@ -1,7 +1,7 @@
// ------------------------------
// 基础共用类型
// ------------------------------
import {MA_SYSTEMPARMType} from './Table'
/** 基础考试字段 */
interface BaseExamFields {
kchp?: string;
@ -41,11 +41,16 @@ export interface UDPParamType {
/** 扣分代码项 */
export interface KfdmType {
xmdm: number;
kfdm: string;
markreal: number;
xmmcStr: string
xmdm: number
desc: string
score: number
markcatalog: string;
score: number;
markserial: string
kfdm: string;
markreal?: number;
kfxh?: string
}
// ------------------------------
@ -213,13 +218,15 @@ interface Qfsj {
jl: number
sd: number
}
interface Show{
interface Show {
bh: number
zb:Zb[]
zb: Zb[]
}
interface Zb{
x:number,
y:number
interface Zb {
x: number,
y: number
}
/** 考试过程数据 */
@ -238,19 +245,174 @@ export interface DrvexamType extends BaseExamFields {
}
export interface DefaultJudgeConfigObj{
param_302:string
param_332:string
param_342:string
param_343:string
param_344:string
param_348:string
param_353:string
param_369:string
param_375:string
param_387:string
param_432:string
export interface DefaultJudgeConfigObj {
param_302: string
param_332: string
param_342: string
param_343: string
param_344: string
param_348: string
param_353: string
param_369: string
param_375: string
param_387: string
param_432: string
}
export interface SyssetConfig {
key?: number
value?: string
name?: string
}
export interface JudgeCallBacData {
xmmcStr?: string
carztStr?: string
kfArr?: MarkRule[]
}
/** 考试过程中项目信息**/
export interface ProjectInfo {
//项目名称
name?: string
//项目代码
projectCode?: string
//无锡所项目代码
projectCodeCenter?: string
//项目简写
abbreviation?: string
///项目是否考过了
isEnd?: boolean,
//项目开始数据是否上传过
isUpload?: boolean
//是否是必考
isRequired?: boolean
//项目状态:未做 正在做 及格 不及格 有扣分
type?: '1' | '2' | '3' | '4' | '5'
}
/** 科目二项目代码 **/
export type Km2XmdmEnum = 0 | 2 | 3 | 5 | 6
/** 科目三项目代码 **/
export type Km3XmdmEnum = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 14 | 15 | 16 | 41
/** 科目二无锡所项目代码 **/
export type Km2WxXmdmEnum = 20100 | 20300 | 20400 | 20600 | 20700
/** 科目三无锡所项目代码 **/
export type Km3WxXmdmEnum = 40100 | 40200 | 40300 | 40500 | 40700 | 41000
| 41100 | 41200 | 41300 | 41400 | 40600 | 41500 | 41700 | 40400 | 40800 | 40900
/** 考试过程中所有项目信息**/
export interface ProjectInfos {
0?: ProjectInfo
2?: ProjectInfo
3?: ProjectInfo
5?: ProjectInfo
6?: ProjectInfo
1?: ProjectInfo
4?: ProjectInfo
7?: ProjectInfo
8?: ProjectInfo
9?: ProjectInfo
10?: ProjectInfo
11?: ProjectInfo
12?: ProjectInfo
14?: ProjectInfo
15?: ProjectInfo
16?: ProjectInfo
41?: ProjectInfo
}
export interface ProjectCenterInfos {
20100?: ProjectInfo
20300?: ProjectInfo
20400?: ProjectInfo
20600?: ProjectInfo
20700?: ProjectInfo
40100?: ProjectInfo
40200?: ProjectInfo
40300?: ProjectInfo
40500?: ProjectInfo
40700?: ProjectInfo
41000?: ProjectInfo
41100?: ProjectInfo
41200?: ProjectInfo
41300?: ProjectInfo
41400?: ProjectInfo
40600?: ProjectInfo
41500?: ProjectInfo
41700?: ProjectInfo
40400?: ProjectInfo
40800?: ProjectInfo
40900?: ProjectInfo
}
export interface MarkRule {
itemno?: number
markcatalog?: string
markshow?: string
markserial?: string
markstandard?: number,
markreal?: number
kfxh?: string
onlyoneid?: number
OnlyOneKind?: number
nocancelid?: number
NoCancelId?: number
gps_sid?: number,
GPS_SID?:boolean
score?:number
xmmcStr?: string
desc?: string
}
export interface UploadExamMileage {
carId: string
examinationRoomId: string
lsh: string
kslc: number
kskssj:string
}
export interface SYSSET {
v_no: string,
v_name: string,
v_value: string
/** 轨迹文件 **/
key?:string;
name?:string;
value?:string;
}
/****** 评判初始化数据*****/
export interface JudgeInitObj{
name:string
kskm:string
systemparm:MA_SYSTEMPARMType[]
mark:MarkRule[]
sysset:SYSSET[]
}
export interface ProjectRoads{
param_3?:string[]
param_4?:string[]
param_10?:string[]
param_11?:string[]
param_9?:string[]
param_12?:string[]
}
/****** 评判开始考试数据*****/
export interface JudgeBeginObj{
exam:0|1
}

View File

@ -212,4 +212,7 @@ export interface MA_MARKRULEType {
markshow?: string
txt1?: string
kfxh?: string
}

View File

@ -20,7 +20,6 @@ import {
MarkRule,
Project,
ProjectObj,
SYSSET,
SYSTEMPARMARR
} from './judgeSDK/api/judgeSDK.d';
@ -40,7 +39,18 @@ import {
MA_SYSTEMPARMType,
MASYSSETTableType,
RouteParamsType,
User
User,
SYSSET,
SyssetConfig,
ProjectInfo,
ProjectInfos,
ProjectCenterInfos,
JudgeInitObj,
JudgeBeginObj,
UploadExamMileage,
AmplifyItem,
ProjectRoads,
JudgeCallBacData
} from '../model';
import { GetSyncData } from '../utils/table/Operation';
import dayTs from '../utils/Date';
@ -48,6 +58,7 @@ import { GetCurrentTime } from '../utils/Common';
import { chunkArr } from './judgeSDK/utils/Common';
import FileUtils from '../utils/FileUtils';
@Entry
@Component
struct Index {
@ -78,20 +89,20 @@ struct Index {
@State ddxkKfArr: string[] = []
@State xmmcStr: string = ''
@State carztStr: string = ''
@State kfArr: KfdmType[] = []
@State kfArr: MarkRule[] = []
@State name: string = ''
@State idCard: string = ''
@State singlePlay: boolean = false;
@State totalScore: number = 100
//模拟考试项目
@State projects: Project[] = []
@State projectsObj: ProjectObj = {}
@State projectsCenterObj: ProjectObj = {}
@State projects: ProjectInfo[] = []
@State projectsObj: ProjectInfos = {}
@State projectsCenterObj: ProjectInfo = {}
@State markRuleListObj: MarkRule = {}
@State cdsbInfoObj: CDSBInfo = {}
@State itemInfoObj: CDSBInfo = {}
@State timer: number = 0
@State judgeConfig: CommonType[] = []
@State judgeConfig: SyssetConfig[] = []
@State judgeConfigObj: object = defaultJudgeConfigObj
//流水号
@State lsh: string = ''
@ -103,7 +114,7 @@ struct Index {
//监管线路代码
@State xldm: string = ''
//监管接口序列号
@State serialNumber: number = 0
@State serialNumber: number|string = 0
@State syssetParam623: boolean = false;
@State syssetParam211: string = '';
@State carType: string = ''
@ -111,7 +122,7 @@ struct Index {
@State isDeductedPopShow: boolean = false
@State isAmplifyPopShow: boolean = false
@State amplifiedImgIndex: number = 0
@State judge: any = {}
judge: Judge
//行驶距离
@State jl: number = 0
//应考里程
@ -158,17 +169,17 @@ struct Index {
}
async aboutToAppear() {
const time = await GetCurrentTime()
const time = GetCurrentTime()
this.carInfo = AppStorage.get<CarInfoType>('carInfo')
this.singlePlay = AppStorage.get<boolean>('singlePlay')
this.startTime = time.split(' ')[1]
this.startFullTime = await GetCurrentTime(1);
this.startFullTime = GetCurrentTime(1);
// this.startHourTime = await getCurrentHourTime()
this.startTime = dayTs().format("HHmmssSSS")
this.startExamTime = time
setInterval(async () => {
this.time = await GetCurrentTime();
this.time = GetCurrentTime();
this.examTime += 1;
}, 1000);
//初始化数据库表
@ -250,10 +261,10 @@ struct Index {
// 获取扣分代码信息
async initMarkRules(markRules ?: MarkRule[]) {
const markRuleParams = markRules || (await GetSyncData<MA_MARKRULEType>('MA_MARKRULE'))
const markRuleParams = markRules || await GetSyncData<MarkRule>('MA_MARKRULE')
markRuleParams.forEach(mark => {
const tempObj = {
const tempObj:MarkRule = {
itemno: mark.itemno * 1,
markcatalog: mark.markcatalog,
markshow: decodeURI(mark.markshow),
@ -269,10 +280,8 @@ struct Index {
if (Number(tempObj.markserial) > 100 && Number(tempObj.markserial) < 200) {
this.manualMarkRules.push(tempObj)
}
this.markRuleListObj[`${mark.itemno}_${mark.markserial}`] = {
...tempObj,
markserial: mark.markserial,
};
this.markRuleListObj[`${mark.itemno}_${mark.markserial}`] = tempObj
this.markRuleListObj[`${mark.itemno}_${mark.markserial}`].markserial = mark.markserial
})
}
@ -280,14 +289,14 @@ struct Index {
// 获取sysset表信息
async initSysset(sysset?: SYSSET[]) {
const syssetParams: MASYSSETTableType[] = sysset || await GetSyncData<MASYSSETTableType>('MA_SYSSET')
const serialNumberArr = syssetParams.filter(sys => sys.v_no === '901');
const syssetParams: SYSSET[] | MASYSSETTableType[] = sysset || await GetSyncData<MASYSSETTableType>('MA_SYSSET')
const serialNumberArr = (syssetParams as SYSSET[]).filter(sys => sys.v_no === '901');
console.info('surenjun serialNumberArr' + JSON.stringify(serialNumberArr))
this.serialNumber = (serialNumberArr[0] && serialNumberArr[0].v_value) || '';
// const { isTrajectoryOpen } = judgeConfig
const syssetJudgeConfigArr = []
const syssetJudgeConfigArr:SyssetConfig[] = []
syssetParams.forEach((sys) => {
syssetParams.forEach((sys:SYSSET) => {
if (judgeConfig.isTrajectoryOpen) {
sys.v_no = sys.key;
sys.v_name = sys.name;
@ -295,9 +304,10 @@ struct Index {
}
// const { v_no, v_value } = sys;
const v_no_num = sys.v_no * 1;
const v_no_num = Number(sys.v_no)
const value = decodeURIComponent(sys.v_value)
if (v_no_num >= 10 && v_no_num <= 900) {
const name =
syssetJudgeConfigArr.push({
key: v_no_num, value: value,
name: decodeURI(sys.v_name)
@ -323,20 +333,22 @@ struct Index {
if (sys.v_no == '364' && sys.v_value == "2") {
let currentParams: RouteParamsType = router.getParams() as RouteParamsType;
// const { sczb, kfdm } = currentParams;
const kfdm = currentParams.kfdm;
currentParams.kfdm.forEach(kf => {
// const { xmdm, kfdm } = kf
const currentKf = this.markRuleListObj[`${kf.xmdm}_${kf.kfdm}`];
const currentProject = this.projectsObj[xmdm]
const currentKf: MarkRule = Reflect.get(this.markRuleListObj,`${kf.xmdm}_${kf.kfdm}`)
const currentProject:ProjectInfo = Reflect.get(this.projectsObj,kf.xmdm)
// 过滤考前绕车一周上车准备的扣分
if (currentParams.sczb == "1" && xmdm == '1') {
if (currentParams.sczb == "1" && kf.xmdm == '1') {
return
}
this.kfArr.push({
//扣分项目名称
xmmcStr: currentProject.name,
xmdm,
xmdm:kf.xmdm,
desc: currentKf.markshow,
score: currentKf.markreal,
markcatalog: currentKf.markcatalog,
@ -345,10 +357,10 @@ struct Index {
})
this.totalScore += currentKf.markreal * 1;
})
this.projectsObj[1].type = kfdm.length ? '4' : '3';
this.projectsObj = {
...this.projectsObj
}
const project_1 = Reflect.get(this.projectsObj,1)
project_1.type = kfdm.length ? '4' : '3';
Reflect.set(this.projectsObj,1,project_1)
}
this.judgeConfigObj[sys.v_no] = value
@ -372,7 +384,7 @@ struct Index {
console.info('surenjun kStringArr', JSON.stringify(kStringArr))
let isInExam = kStringArr.length > 0;
// const { isTrajectoryOpen } = judgeConfig
let carNo = '', allItems = [];
let carNo = '', allItems:string[] = [];
systemParms.forEach((systemParm) => {
if (judgeConfig.isTrajectoryOpen) {
systemParm.no1 = systemParm.NO1 + '';
@ -385,6 +397,11 @@ struct Index {
// const { no1, no2, no3, } = systemParm;
const txt1 = decodeURI(systemParm.txt1)
const txt2 = decodeURI(systemParm.txt2)
const no1 = systemParm.no1;
const no2 = systemParm.no2;
const no3 = systemParm.no3;
//获取当前考车的no2
if (systemParm.no1 == "3" && systemParm.no3 == "1") {
if (txt1 === this.carName) {
@ -413,42 +430,36 @@ struct Index {
//科目三获取项目
(this.examSubject == "3" && systemParm.no1 == "6")
) {
const name = decodeURI(systemParm.txt1)
//小车过滤掉 夜间模拟行驶
if (sCarTypes.includes(this.carType) && name === '夜间行驶') {
return
}
const currentProject = {
const currentProject:ProjectInfo = {
name,
abbreviation: decodeURI(systemParm.txt3),
projectCode: no2,
projectCodeCenter: txt2,
//是否是必考 加减档设置成非必考
isRequired: no2 == 14 ? false : allItems.includes(no2 + ''),
isRequired: no2 == '14' ? false : allItems.includes(no2 + ''),
//是否考过了
isEnd: false,
//项目开始数据是否上传过
isUpload: false,
}
this.projectsObj[systemParm.no2*1] = currentProject
this.projectsCenterObj[txt2] = currentProject
this.projects.push(currentProject);
const no2Num = Number(systemParm.no2)
//真实监管下发考试项目
if (isInExam && !(kStringArr.includes(txt2) || kStringArr.includes(no2 + ''))) {
console.info('surenjun =>', txt2)
console.info('surenjun => no2', systemParm.no2)
this.projectsObj[systemParm.no2*1].type = '3'
this.projectsObj[systemParm.no2*1].isUpload = true
this.projectsObj[systemParm.no2*1].isEnd = true
this.projectsCenterObj[txt2].type = '3'
this.projectsCenterObj[txt2].isUpload = true
this.projectsCenterObj[txt2].isEnd = true
// this.isDdxk = true
currentProject.type = '3'
currentProject.isUpload = true
currentProject.isEnd = true
this.ddxkKsxmArr.push(txt2)
}
Reflect.set(this.projectsObj, no2Num, currentProject)
Reflect.set(this.projectsCenterObj, txt2, currentProject)
this.projects.push(currentProject);
}
this.systemparmArr.push({
@ -478,10 +489,11 @@ struct Index {
//只记录考试项目的模型
const projectsObj = this.projectsObj
cdsbParams.forEach((cdsb) => {
const key = decodeURI(cdsb.itemsno);
const key = decodeURI(cdsb.itemsno)
const newKey = key.split('~').join('_')
const xmdm = key.split('~')[0] * 1
if (projectsObj[xmdm]) {
const xmdm = Number( key.split('~')[0] )
const currentProject:ProjectInfo = Reflect.get(projectsObj, xmdm)
if (currentProject) {
this.cdsbInfoObj[newKey] = {
kdid: cdsb.kdid,
sbbh: cdsb.sbbh,
@ -505,7 +517,8 @@ struct Index {
const carlistArr = info.carlist === '' ? [] : (decodeURI(info.carlist).split(',') || []);
const newKey = key.split('~').join('_')
const xmdm = Number(key.split('~')[0])
if (projectsObj[xmdm] && (carlistArr.length == 0 || carlistArr.includes(carlist))) {
const currentProject:ProjectInfo = Reflect.get(projectsObj,xmdm)
if (currentProject && (carlistArr.length == 0 || carlistArr.includes(carlist))) {
this.itemInfoObj[newKey] = {
modelKey: newKey,
xmdm,
@ -518,7 +531,7 @@ struct Index {
// 评判相关初始化
async initJudge() {
const judge = new Judge(this);
await judge.onJudgeFn(async (judgeData) => {
await judge.onJudgeFn(async (judgeData:JudgeCallBacData) => {
// const { xmmcStr, carztStr, kfArr } = judgeData;
this.xmmcStr = judgeData.xmmcStr;
this.carztStr = judgeData.carztStr;
@ -548,11 +561,14 @@ struct Index {
if (ddxkKsxmArr?.length) {
//断点续考
ddxkKsxmArr.forEach(xmdm => {
const projectCode = this.projectsCenterObj[xmdm].projectCode
if (this.projectsObj[projectCode]) {
this.projectsObj[projectCode].type = '3'
this.projectsObj[projectCode].isUpload = true
this.projectsObj[projectCode].isEnd = true
const currentProjectCenter:Project = Reflect.get(this.projectsCenterObj, xmdm)
const projectCode = currentProjectCenter.projectCode
const currentProject:Project = Reflect.get(this.projectsObj,projectCode)
if (currentProject) {
currentProject.type = '3'
currentProject.isUpload = true
currentProject.isEnd = true
Reflect.set(this.projectsObj, projectCode, currentProject)
}
})
this.ddxkKsxmArr = ddxkKsxmArr
@ -560,16 +576,18 @@ struct Index {
}
//扣分续考
ddxkKfArr.forEach((kf) => {
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'
const xmdm = kf.split(',')[0]
const kfdm = kf.split(',')[1]
const currentKf:MarkRule = Reflect.get(this.markRuleListObj, `${xmdm}_${kfdm}`)
const currentProject:ProjectInfo = Reflect.get(this.projectsObj,xmdm) || { name: '通用评判' }
if (currentProject) {
currentProject.type = '4'
Reflect.set(this.projectsObj, xmdm, currentProject)
}
this.kfArr.push({
//扣分项目名称
xmmcStr: currentProject.name,
xmdm,
desc: currentKf.markshow,
score: currentKf.markreal,
markcatalog: currentKf.markcatalog,
@ -623,17 +641,20 @@ struct Index {
// 初始化本地systemparam表、markrule表
async initTrajectoryParam(trajectoryPath: string) {
const { isTrajectoryOpen } = judgeConfig
const isTrajectoryOpen = judgeConfig.isTrajectoryOpen
//轨迹回放读取 systemparam表、markrule表
const fileUtil = new FileUtils(this.context);
const folderPath = await fileUtil.initFolder(trajectoryPath);
const str = await fileUtil.readFile(folderPath);
const strArr = str.split('\n');
const [initData, beginData] = [strArr[0], strArr[1]];
const initDataObj = JSON.parse(initData)
const beginDataObj = JSON.parse(beginData)
const initData = strArr[0]
const beginData = strArr[1]
const initDataObj:JudgeInitObj = JSON.parse(initData)
const beginDataObj:JudgeBeginObj = JSON.parse(beginData)
const examSubject = this.carInfo.examSubject;
this.examSubject = isTrajectoryOpen ? (initDataObj.kskm * 1) : examSubject;
this.examSubject = isTrajectoryOpen ? (initDataObj.kskm) : examSubject;
this.carInfo.examSubject = this.examSubject
this.singlePlay = beginDataObj.exam == 0;
this.carName = initDataObj.name;
@ -645,14 +666,14 @@ struct Index {
// 上传考试里程
async uploadMileage() {
if (!this.singlePlay) {
const { lsh, startExamTime:kskssj, jl:kslc } = this
const { carId, examinationRoomId } = this.carInfo;
const carInfo = this.carInfo
await uploadExamMileage({
carId,
examinationRoomId,
lsh,
kskssj,
kslc
carId:carInfo.carId,
examinationRoomId:carInfo.examinationRoomId,
lsh:this.lsh,
kskssj:this.startExamTime,
kslc:this.jl
})
}
}
@ -742,7 +763,7 @@ struct Index {
Flex({ direction: FlexDirection.Column }) {
if (this.kfArr.length) {
List({ scroller: this.kfArrScroller }) {
ForEach(this.kfArr, (item) => {
ForEach(this.kfArr, (item:MarkRule) => {
ListItem() {
Column() {
Row() {
@ -811,7 +832,7 @@ struct Index {
if (this.examSubject == "2") {
Flex({ wrap: FlexWrap.Wrap, direction: FlexDirection.Row, justifyContent: FlexAlign.SpaceBetween }) {
List({}) {
ForEach(chunkArr(this.projects, 2), (item) => {
ForEach(chunkArr(this.projects, 2), (item:[ProjectInfo,ProjectInfo]) => {
ListItem() {
Row() {
Row() {
@ -819,7 +840,7 @@ struct Index {
// Text(this.projectsObj[item[0].projectCode])
Text(item[0].abbreviation)
.fontSize(item[0].abbreviation.length > 5 ? 28 : 32)
.fontColor(this.getProjectColor(this.projectsObj[item[0].projectCode].type))
.fontColor(this.getProjectColor(item[0]))
}
.backgroundImage($rawfile('judge/project_item.png'), ImageRepeat.NoRepeat)
.backgroundImageSize({ width: '100%', height: '100%' })
@ -833,7 +854,7 @@ struct Index {
//#FF7566 #00FFD5 #E6DECF
Text(item[1].abbreviation)
.fontSize(item[1].abbreviation.length > 5 ? 28 : 32)
.fontColor(this.getProjectColor(this.projectsObj[item[1].projectCode].type))
.fontColor(this.getProjectColor(item[1]))
}
.backgroundImage($rawfile('judge/project_item.png'), ImageRepeat.NoRepeat)
.backgroundImageSize({ width: '100%', height: '100%' })
@ -855,7 +876,7 @@ struct Index {
.margin({ right: 10 })
}
//科目三
if (this.examSubject == 3) {
if (this.examSubject == '3') {
Column() {
Flex({
wrap: FlexWrap.Wrap,
@ -863,11 +884,11 @@ struct Index {
justifyContent: FlexAlign.SpaceBetween
}) {
List({}) {
ForEach(this.projects, (project) => {
ForEach(this.projects, (project:ProjectInfo) => {
ListItem() {
Text(project.name) {
}
.fontColor(this.getProjectColor(this.projectsObj[project.projectCode].type))
.fontColor(this.getProjectColor(project))
.margin({ bottom: 2 })
.fontSize(24)
}.margin({ bottom: 2 })
@ -888,7 +909,7 @@ struct Index {
justifyContent: FlexAlign.SpaceAround
}) {
List() {
ForEach(this.artSubject3Projects, (item, index) => {
ForEach(this.artSubject3Projects, (item:string, index) => {
ListItem() {
}
.backgroundImage(
@ -1042,11 +1063,11 @@ struct Index {
//科目三人工扣分弹窗
if (this.isDeductedPopShow && this.examSubject == 3 && this.judgeConfigObj['342'] == '0') {
if (this.isDeductedPopShow && this.examSubject == '3' && this.judgeConfigObj['342'] == '0') {
DeductedPopup({
defaultTabIndex: this.defaultTabIndex,
currentItems: Reflect.ownKeys(this.projectsObj).map(projectKey => {
const project = this.projectsObj[projectKey]
const project:ProjectInfo = Reflect.get(this.projectsObj,projectKey)
return project.type == '2' ? project.projectCode : undefined
}).filter(project => project !== undefined),
markRules: this.manualMarkRules,
@ -1054,7 +1075,7 @@ struct Index {
this.isDeductedPopShow = false;
this.defaultTabIndex = 0;
},
confirmMark: async (itemno, serial) => {
confirmMark: async (itemno:string, serial:string) => {
clearTimeout(this.popTimer)
this.popTimer = null
this.popTimer = setTimeout(async () => {
@ -1094,10 +1115,10 @@ struct Index {
}
//科目三人工项目确认框
if (this.isAmplifyPopShow && this.examSubject == 3) {
if (this.isAmplifyPopShow && this.examSubject == '3') {
AmplifyPopup({
amplifyImgIndex: this.amplifiedImgIndex,
confirmAmplify: async (amplify) => {
confirmAmplify: async (amplify:AmplifyItem) => {
clearTimeout(this.popTimer)
this.popTimer = null
this.popTimer = setTimeout(async () => {
@ -1191,7 +1212,8 @@ struct Index {
.height('100%').backgroundColor('#000').justifyContent(FlexAlign.Start)
}
getProjectColor(type: string) {
getProjectColor(project: ProjectInfo) {
const type = project.type;
switch (type) {
case '1':
return '#E6DECF';
@ -1213,22 +1235,23 @@ struct Index {
//人工项目操作
async setManualProjectFn(index: number) {
const {
judgeConfigObj,
isManualProjectIn,
getIsExitManualProject,
artSubject3ProjectsCodesArr,
projectsObj
} = this;
const projectCode = artSubject3ProjectsCodesArr[index];
const judgeConfigObj = this.judgeConfigObj;
const isManualProjectIn = this.isManualProjectIn;
const getIsExitManualProject = this.getIsExitManualProject;
const artSubject3ProjectsCodesArr = this.artSubject3ProjectsCodesArr;
const projectsObj = this.projectsObj;
const projectCode = Reflect.get(artSubject3ProjectsCodesArr,index)
if (index === 5) {
console.info('surenjun 靠边停车状态=> ', getIsExitManualProject(index))
}
const currentProject:ProjectInfo = Reflect.get(projectsObj,projectCode)
if (getIsExitManualProject(index)) {
// 正在进行的项目 取消项目
if (isManualProjectIn && projectsObj[projectCode].type == '2') {
if (isManualProjectIn && currentProject.type == '2') {
//判断人工是否能取消项目 && 当前项目有扣分的不能取消
if (judgeConfigObj['340'] == 1 && projectsObj[projectCode].type != '5') {
if (judgeConfigObj['340'] == 1) {
await this.judge.setJudgeItem(projectCode, 2);
Prompt.showToast({
message: '项目取消',
@ -1243,7 +1266,7 @@ struct Index {
const xmmcStr = this.xmmcStr;
if (xmmcStr == '无' || xmmcStr == '') {
//512[6] 人工项目按钮放大确认
const param512 = (judgeConfigObj['512'] || '').split(',');
const param512:string[] = (judgeConfigObj['512'] || '').split(',');
console.info('surenjun', param512)
if (param512[6] !== '0') {
this.amplifiedImgIndex = index;
@ -1269,33 +1292,34 @@ struct Index {
// 获取是否能人工进项目
getIsExitManualProject = (index: number) => {
const {
judgeConfigObj,
artSubject3ProjectsCodesArr,
projectsObj,
carztStr,
isManualProjectIn,
isProjectIn,
getProjectIsInRoad
} = this;
const judgeConfigObj = this.judgeConfigObj;
const artSubject3ProjectsCodesArr = this.artSubject3ProjectsCodesArr;
const projectsObj = this.projectsObj;
const carztStr = this.carztStr;
const isManualProjectIn = this.isManualProjectIn;
const isProjectIn = this.isProjectIn;
const getProjectIsInRoad = this.getProjectIsInRoad;
const projectCode = artSubject3ProjectsCodesArr[index];
if (projectsObj[projectCode] === undefined) {
const currentProject:ProjectInfo = Reflect.get(projectsObj,projectCode)
if (currentProject === undefined) {
return false
}
const projectType = projectsObj[projectCode].type;
const projectType = currentProject.type;
//不允许人工触发的项目列表,以","分隔
const unExitManualProjects = judgeConfigObj['332'].split(',') || [];
const unExitManualProjects:string[] = judgeConfigObj['332'].split(',') || [];
//直线行驶中不进其他考试项目(0-否 1-是)
const param348 = judgeConfigObj['348'] || '0',
const param348:string = judgeConfigObj['348'] || '0',
//里程不够允许手工点靠边停车0-否 1-是)
param387 = judgeConfigObj['387'] || '0',
param387:string = judgeConfigObj['387'] || '0',
//里程不够不报靠边停车0-否+1-是+2-必考项目未完成且里程不够不报项目)
param319 = judgeConfigObj['319'] || '0',
param319:string = judgeConfigObj['319'] || '0',
//人工项目是否能取消 1:可取消;
param340 = judgeConfigObj['340'] || '0',
param340:string = judgeConfigObj['340'] || '0',
//307参数里设置的项目项目已经做过后续不能人工触发
param307 = (judgeConfigObj['307'] || '').split(',');
param307:string[] = (judgeConfigObj['307'] || '').split(',');
//非行驶状态(没有速度),人工项目不能触发(按钮灰色)
if (carztStr === '停车') {
@ -1314,8 +1338,8 @@ struct Index {
//项目进行中不能人工触发
if (isProjectIn) {
if (param340 == 1) {
if (isManualProjectIn && (projectsObj[projectCode].type == '2')) {
if (param340 == '1') {
if (isManualProjectIn && (currentProject.type == '2')) {
return true
} else {
return false
@ -1329,8 +1353,9 @@ struct Index {
return false
}
const project_9:ProjectInfo = Reflect.get(projectsObj,'9')
// 直线行驶中不进其他考试项目(0-否 1-是)
if (param348 == '0' && projectsObj['9']?.type == 2) {
if (param348 == '0' && project_9.type == '2') {
return index === 0 ? true : false
}
@ -1341,7 +1366,9 @@ struct Index {
//319不为0或者387不为1里程不够时靠边停车项目不能触发
if ((param387 != '1' || param319 != '0') && index === 5) {
const { examMileage, isRequiredProjectsEnd, jl } = this;
const examMileage = this.examMileage
const isRequiredProjectsEnd = this.isRequiredProjectsEnd
const jl = this.jl
//里程是否达标 && 必考项目是否全完成
return jl >= Number(examMileage) && isRequiredProjectsEnd
}
@ -1349,37 +1376,46 @@ struct Index {
}
// 判断项目是否在当前路段号
getProjectIsInRoad = (projectCode: string,) => {
const {
judgeConfigObj,
lane:{ road, num, count }
} = this;
const judgeConfigObj = this.judgeConfigObj;
const lane = this.lane;
const road = lane.road;
const num = lane.num;
const count = lane.count;
const projectRoads = {
const param_3:string[] = (judgeConfigObj['514']?.split(',') || []);
const param_4:string[] = (judgeConfigObj['515']?.split(',') || []);
const param_10:string[] = (judgeConfigObj['516']?.split(',') || []);
const param_11:string[] = (judgeConfigObj['517']?.split(',') || []);
const param_9:string[] = (judgeConfigObj['518']?.split(',') || []);
const param_12:string[] = (judgeConfigObj['519']?.split(',') || []);
const projectRoads:ProjectRoads = {
//直线行驶
'3': (judgeConfigObj['514']?.split(',') || []),
param_3,
//变更车道
'4': judgeConfigObj['515']?.split(',') || [],
param_4,
//超车
'10': judgeConfigObj['516']?.split(',') || [],
param_10,
//靠边停车
'11': judgeConfigObj['517']?.split(',') || [],
param_11,
//会车
'9': judgeConfigObj['518']?.split(',') || [],
param_9,
//掉头
'12': judgeConfigObj['519']?.split(',') || [],
param_12,
};
//未测绘得道路上或者不在差分状态
if (road === '') {
return false
}
if (projectRoads[projectCode].length == 0) {
const currentProjectRoad:string[] = Reflect.get(projectRoads,`param_${projectCode}`)
if (currentProjectRoad.length == 0) {
return true
}
//设置了514-519参数只能在设置的路段触发对应项目
if (projectRoads[projectCode].includes(road)) {
if (currentProjectRoad.includes(road)) {
//如果525为1则514-519设置的路段不能触发对应项目
if (judgeConfigObj['525'] == '1') {
return false
@ -1410,7 +1446,8 @@ struct Index {
getIsEndManualProject = (index: number) => {
const projectName = this.artSubject3Projects[index];
const projectCode = this.artSubject3ProjectsCodesArr[index];
const type = this.projectsObj[projectCode].type
const currentProject:ProjectInfo = Reflect.get(this.projectsObj,projectCode)
const type = currentProject.type
if (type == '2') {
return projectName
}
@ -1418,8 +1455,7 @@ struct Index {
}
// 获取是否能进行人工评判
getIsManualKf = () => {
const { examSubject } = this;
if (examSubject == 3) {
if (this.examSubject == '3') {
//杭州训练模式不允许人工评判
if (this.singlePlay && this.judgeConfigObj['211'] == 'zjhz') {
return false

View File

@ -23,9 +23,15 @@ export interface MarkRule {
markreal?: number
kfxh?: string
onlyoneid?: number
OnlyOneKind?: number
nocancelid?: number
NoCancelId?: number
gps_sid?: number,
GPS_SID?:boolean
score?:number
xmmcStr?: string
desc?: string
xmdm?: string
}
export interface KF{

View File

@ -522,7 +522,7 @@ export const testRealExam = {
"zcsj": [{"bh": 1,"lx": 1,"jl": 2.35,"sd": 3.68}, {"bh":2,"lx": 2 , "jl": 4.82,"sd": 5.24}],
"yqsj": [{"bh": 1,"lx": 1,"jl": 2.35,"sd": 3.68}, {"bh":2,"lx": 2 , "jl": 4.82,"sd": 5.24}],
"yhsj": [{"bh": 1,"lx": 1,"jl": 2.35,"sd": 3.68}, {"bh":2,"lx": 2 , "jl": 4.82,"sd": 5.24}],
"ycsj": [{"bh": 1,"lx": 1,"jl": 2.35,"sd": 3.68}, {"bh": 2,"lx": 2 , "jl": 4.82,"sd": 5.24}],
"ycsj": [{"bh": 1,"lx": 1,"jl": 2.35,"sd": 3.68}, {"bh":2,"lx": 2 , "jl": 4.82,"sd": 5.24}],
"fqsj": [{"bh": 1,"lx": 1,"jl": 2.35,"sd": 3.68}, {"bh":2,"lx": 2 , "jl": 4.82,"sd": 5.24}],
"qfwt": {"xrjl": 2.357,"zawjl": 3.608},
"rcyz": 1,

View File

@ -205,12 +205,12 @@ export default class Judge {
console.info(judgeTag, `人工扣分-${itemno}-${serial}`)
}
//人工操作项目
public setJudgeItem = async (itemno: number, type: 1 | 2) => {
public setJudgeItem = async (itemno: string, type: 1 | 2) => {
// const { fileLog } = this;
await examJudgeArtificialItem(itemno * 1, type);
await examJudgeArtificialItem(Number(itemno), type);
await this.fileLog.setExamJudgeData({
method: 'examJudgeArtificialItem',
itemno: itemno * 1,
itemno: Number(itemno),
type
})
console.info(judgeTag, `人工评判${type == 1 ? '进入' : '取消'}项目-${itemno}`)