forked from harmony_car/subject-two
334 lines
12 KiB
Plaintext
334 lines
12 KiB
Plaintext
import router from '@ohos.router'
|
|
import util from '@ohos.util';
|
|
|
|
import EndPoPup from './compontents/judge/end-popup'
|
|
import LoadingPopup from './compontents/judge/loading-popup'
|
|
import {getCurrentTime,formatTime,chunkArr} from '../common/utils/tools'
|
|
import Judge from './judgeSDK/judge'
|
|
import {Project,ProjectObj,MarkRule} from './judgeSDK/api/judgeSDK.d'
|
|
import AccountTable from '../common/database/tables/AccountTable';
|
|
|
|
import USER from '../common/constants/USER';
|
|
import MA_MARKRULE from '../common/constants/MA_MARKRULE';
|
|
import MA_SYSTEMPARM from '../common/constants/MA_SYSTEMPARM';
|
|
import MA_SYSSET from '../common//constants/MA_SYSSET';
|
|
|
|
import fileAccess from '@ohos.file.fileAccess';
|
|
import {
|
|
examJudgeEndExam,
|
|
} from './judgeSDK/api/index'
|
|
|
|
interface JudgeData{
|
|
xmmcStr:string,
|
|
carztStr:string,
|
|
kfArr:{xmmcStr:string,desc}[]
|
|
}
|
|
|
|
@Entry
|
|
@Component
|
|
struct Index {
|
|
//页面通用字体大小
|
|
@State FONTSIZE:number = 23
|
|
@State BIGFONTSIZE:number = 25
|
|
|
|
//结束考试弹窗
|
|
@State endPopupVisible:boolean = false
|
|
//等待弹窗(考试及格,考试不及格使用)
|
|
@State loadingPopupVisible:boolean = false
|
|
|
|
@State time:string = ''
|
|
//考试用时
|
|
@State examTime:number= 0
|
|
//开始时间
|
|
@State startTime:string = '00:00:00'
|
|
@State xmmcStr:string = ''
|
|
@State carztStr:string = ''
|
|
@State kfArr:{xmmcStr?:string,desc?:string}[] = []
|
|
@State name:string = ''
|
|
@State idCard:string = ''
|
|
|
|
//模拟考试项目
|
|
@State projects:Project[] = []
|
|
@State projectsObj:ProjectObj = {}
|
|
@State markRuleListObj:MarkRule ={}
|
|
@State timer:number = 0
|
|
//流水号
|
|
@State lsh:string = ''
|
|
@State kszp:string = ''
|
|
//已考的考试项目
|
|
|
|
//监管接口序列号
|
|
@State serialNumber:number = 0
|
|
scroller: Scroller = new Scroller()
|
|
|
|
//初始化
|
|
async aboutToAppear(){
|
|
|
|
//@ts-ignore
|
|
// const wantInfos = await fileAccess.getFileAccessAbilityInfo();
|
|
// console.log('surenjun123' + JSON.stringify(wantInfos));
|
|
// let fileAccessHelper = null;
|
|
// // wantInfos 从getFileAccessAbilityInfo()获取
|
|
// // 创建只连接媒体库服务的helper对象
|
|
//
|
|
// try {
|
|
// // this.context 是EntryAbility 传过来的context
|
|
// console.log('globalThis.context' + JSON.stringify(globalThis.context));
|
|
// fileAccessHelper = fileAccess.createFileAccessHelper(globalThis.context);
|
|
// if (!fileAccessHelper)
|
|
// console.error("aaa createFileAccessHelper interface returns an undefined object");
|
|
// } catch (error) {
|
|
// console.error("aaa createFileAccessHelper failed, errCode:" + error.code + ", errMessage:" + error.message);
|
|
// }
|
|
|
|
|
|
|
|
// const workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ts");
|
|
//
|
|
// workerInstance.onmessage = function(e) {
|
|
// console.log("onmessage" + JSON.stringify(e.data));
|
|
// }
|
|
windowClass.setWindowSystemBarEnable([''])
|
|
const time = await getCurrentTime()
|
|
this.startTime = time.split(' ')[1]
|
|
setInterval(async()=>{
|
|
this.time = await getCurrentTime();
|
|
this.examTime += 1;
|
|
},1000);
|
|
//初始化考生
|
|
this.initStudent();
|
|
await this.initMarkRules();
|
|
//初始化项目
|
|
await this.initProjectInfo();
|
|
// 初始化sysset表
|
|
await this.initSysset()
|
|
//初始化评判
|
|
this.initJudge();
|
|
|
|
}
|
|
|
|
//获取考生信息
|
|
async initStudent(){
|
|
const that = this;
|
|
const db = new AccountTable(()=>{},USER);
|
|
// that.sfzmhm = 'surenjun';
|
|
db.getRdbStore(()=>{
|
|
db.query('0', (result) => {
|
|
const stuInfo = result[0] || {};
|
|
const {xm,sfzmhm,lsh,kszp} = stuInfo;
|
|
that.name = xm;
|
|
that.idCard = sfzmhm;
|
|
that.lsh = lsh;
|
|
that.kszp = kszp;
|
|
}, true);
|
|
});
|
|
}
|
|
|
|
//获取项目信息
|
|
async initProjectInfo(){
|
|
const that = this;
|
|
const db = new AccountTable(()=>{},MA_SYSTEMPARM);
|
|
db.getRdbStore(()=>{
|
|
db.query('0', (systemParamsArr) => {
|
|
//获取缓存的考试项目信息
|
|
const filterProjectsArr = systemParamsArr.filter(item => item.no1 == 6)
|
|
|
|
that.projects = filterProjectsArr.map(project => {
|
|
const currentProject = {
|
|
name:decodeURI(project.txt1),
|
|
abbreviation:decodeURI(project.txt3),
|
|
projectCode:decodeURI(project.no2),
|
|
projectCodeCenter:decodeURI(project.txt2),
|
|
type:'1'
|
|
}
|
|
that.projectsObj[project.no2] = currentProject
|
|
return currentProject
|
|
});
|
|
|
|
}, true);
|
|
});
|
|
}
|
|
|
|
//获取扣分代码信息
|
|
async initMarkRules(){
|
|
const that = this;
|
|
const db = new AccountTable(()=>{},MA_MARKRULE);
|
|
db.getRdbStore(()=>{
|
|
db.query('0', (markRuleParams) => {
|
|
markRuleParams.forEach(mark=>{
|
|
that.markRuleListObj[mark.markserial] = {
|
|
markcatalog:mark.markcatalog,
|
|
markshow:decodeURI(mark.markshow),
|
|
markstandard:mark.markstandard,
|
|
markserial:mark.markserial
|
|
};
|
|
})
|
|
})
|
|
})
|
|
}
|
|
|
|
//获取sysset表信息
|
|
async initSysset(){
|
|
const that = this;
|
|
const db = new AccountTable(()=>{},MA_SYSSET);
|
|
db.getRdbStore(()=>{
|
|
db.query('0', (syssetParams) => {
|
|
//TODO 监管接口序列号 目前环境没有
|
|
const serialNumberArr = syssetParams.filter(sys => sys.v_no === '901')
|
|
that.serialNumber = serialNumberArr || '1234567'
|
|
})
|
|
})
|
|
}
|
|
|
|
//评判相关初始化
|
|
async initJudge(){
|
|
const judge = new Judge(this);
|
|
await judge.onJudgeFn(async (judgeData)=>{
|
|
const {xmmcStr,carztStr,kfArr} = judgeData;
|
|
this.xmmcStr = xmmcStr;
|
|
this.carztStr = carztStr;
|
|
//TODO 单次项目扣分
|
|
this.kfArr = kfArr;
|
|
});
|
|
}
|
|
|
|
build() {
|
|
Column() {
|
|
Row() {
|
|
Row(){
|
|
Image($rawfile('judge/signal_logoS.png')).width(35).height(25)
|
|
Text(this.time).fontColor('#CCB48F').fontSize(this.FONTSIZE).padding({left:10,right:5})
|
|
Image($rawfile('judge/xh_green.png')).width(25).height(20)
|
|
}
|
|
Row(){
|
|
Text(`当前项目:${this.xmmcStr || '无'} `).fontColor('#E5CCA1').fontSize(this.FONTSIZE)
|
|
}
|
|
}
|
|
.width('100%').height('50').backgroundColor('#001A33').padding({left:15,right:15}).justifyContent(FlexAlign.SpaceBetween).alignItems(VerticalAlign.Center)
|
|
|
|
Row(){
|
|
Row(){
|
|
Column(){
|
|
Row(){
|
|
Column(){
|
|
Row(){
|
|
Text('考生姓名:').fontColor('#E5CCA1').fontSize(this.FONTSIZE)
|
|
Text(this.name).fontColor('#FFF').fontSize(this.FONTSIZE)
|
|
}.margin({bottom:10})
|
|
Row(){
|
|
Text('开始时间:').fontColor('#E5CCA1').fontSize(this.FONTSIZE)
|
|
Text(this.startTime).fontColor('#FFF').fontSize(this.FONTSIZE)
|
|
}
|
|
}.width('45%').alignItems(HorizontalAlign.Start)
|
|
Column(){
|
|
Row(){
|
|
Text('身份证号:').fontColor('#E5CCA1').fontSize(this.FONTSIZE)
|
|
Text(this.idCard).fontColor('#FFF').fontSize(this.FONTSIZE)
|
|
}.margin({bottom:10})
|
|
Row(){
|
|
Text('考试用时:').fontColor('#E5CCA1').fontSize(this.FONTSIZE)
|
|
Text(formatTime(this.examTime)).fontColor('#FFF').fontSize(this.FONTSIZE)
|
|
}
|
|
}.alignItems(HorizontalAlign.Start)
|
|
}.width('100%')
|
|
|
|
Column(){
|
|
Text(this.carztStr).fontColor('#FFA500').fontSize(this.FONTSIZE)
|
|
Row(){
|
|
Column(){
|
|
ForEach(this.kfArr,(item)=>{
|
|
Column(){
|
|
Row(){
|
|
Text(item.xmmcStr).fontSize(this.BIGFONTSIZE).fontColor('#FFF')
|
|
Text(`${item.score}分`).fontSize(this.BIGFONTSIZE).fontColor('#FFF')
|
|
}.width('100%').backgroundColor('#38260B').justifyContent(FlexAlign.SpaceBetween).padding({top:12,bottom:12,left:15,right:15})
|
|
Text(item.desc).fontSize(this.BIGFONTSIZE).fontColor('#E5CBA1').margin(10)
|
|
}.margin({top:15}).alignItems(HorizontalAlign.Start)
|
|
|
|
})
|
|
|
|
}.backgroundImage($rawfile('judge/score_bg.png'),ImageRepeat.NoRepeat).backgroundImageSize({width:'100%',height:'100%'}).width('40%').height('100%').padding(25)
|
|
|
|
Flex({wrap:FlexWrap.Wrap,direction:FlexDirection.Row,justifyContent:FlexAlign.SpaceBetween}){
|
|
List({}){
|
|
ForEach(chunkArr(this.projects,2),(item)=>{
|
|
ListItem(){
|
|
Row(){
|
|
Row(){
|
|
//#FF7566 #00FFD5 #E6DECF
|
|
// Text(this.projectsObj[item[0].projectCode])
|
|
Text(item[0].abbreviation).fontSize(item[0].abbreviation.length > 5?20:27).fontColor(this.getProjectColor(this.projectsObj[item[0].projectCode].type))
|
|
}.backgroundImage($rawfile('judge/project_item.png'),ImageRepeat.NoRepeat).backgroundImageSize({width:'100%',height:'100%'}).width('48%').height(90).margin({bottom:10}).justifyContent(FlexAlign.Center)
|
|
if(item[1]){
|
|
Row(){
|
|
//#FF7566 #00FFD5 #E6DECF
|
|
Text(item[1].abbreviation).fontSize(item[1].abbreviation.length > 5?20:27).fontColor(this.getProjectColor(this.projectsObj[item[1].projectCode].type))
|
|
}.backgroundImage($rawfile('judge/project_item.png'),ImageRepeat.NoRepeat).backgroundImageSize({width:'100%',height:'100%'}).width('48%').height(90).margin({left:5,bottom:10}).justifyContent(FlexAlign.Center)
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}.backgroundImage($rawfile('judge/project_bg.png'),ImageRepeat.NoRepeat).backgroundImageSize({width:'100%',height:'100%'}).width('57%').height('100%').padding(30).margin({right:10})
|
|
|
|
}.margin({top:15}).height('80%').justifyContent(FlexAlign.SpaceBetween)
|
|
}.width('100%').height('100%').alignItems(HorizontalAlign.Start).margin({top:10})
|
|
}.height('100%').alignItems(HorizontalAlign.Start)
|
|
}.width('75%').height('100%')
|
|
|
|
Column(){
|
|
Column(){
|
|
Row(){
|
|
Text('100').fontColor('#FFEECC').fontSize(35)
|
|
Text('分').fontColor('#FFEECC').fontSize(20).padding({top:5})
|
|
}.width('90%').height(95).justifyContent(FlexAlign.Center).alignItems(VerticalAlign.Center).border({width:3,color:'#4D4136',radius:15})
|
|
|
|
Row(){
|
|
Image(this.kszp).width('85%').height('85%')
|
|
}.width('60%').height(200).backgroundImage($rawfile('judge/photo_bg.png'),ImageRepeat.NoRepeat).backgroundImageSize({width:'100%',height:'100%'}).justifyContent(FlexAlign.Center).alignItems(VerticalAlign.Center).margin({top:20})
|
|
}
|
|
Row(){ }.width('90%').height(85).backgroundImage($rawfile('judge/anniu_nor.png'),ImageRepeat.NoRepeat).backgroundImageSize({width:'100%',height:'100%'}).onClick(()=>{this.endPopupVisible = true})
|
|
}.width('25%').height('100%').justifyContent(FlexAlign.SpaceBetween).alignItems(HorizontalAlign.Center).margin({bottom:20})
|
|
}.height('90%').justifyContent(FlexAlign.Start).padding({top:40,left:30,bottom:10,right:30})
|
|
|
|
//结束考试弹窗
|
|
if(this.endPopupVisible){
|
|
EndPoPup({
|
|
title:'确定结束考试吗?',
|
|
cancelFn:()=>{
|
|
this.endPopupVisible = false;
|
|
},
|
|
confirmFn:()=>{
|
|
this.endPopupVisible = false;
|
|
|
|
//调用考试结束,关闭定时器
|
|
examJudgeEndExam();
|
|
clearInterval(this.timer);
|
|
globalThis.windowClass.setWindowSystemBarEnable(['navigation'])
|
|
router.back();
|
|
}
|
|
})
|
|
}
|
|
|
|
if(this.loadingPopupVisible){
|
|
|
|
LoadingPopup({
|
|
title:'正在生成考试记录,请稍后......',
|
|
})
|
|
}
|
|
|
|
}
|
|
.height('100%').backgroundColor('#000').justifyContent(FlexAlign.Start)
|
|
}
|
|
|
|
getProjectColor(type:string){
|
|
switch (type){
|
|
case '1': return '#E6DECF';break;
|
|
case '2': return '#FFAD33';break;
|
|
case '3': return '#00FFD5';break;
|
|
case '4': return '#FF7566';break;
|
|
default : return '#E6DECF';break;
|
|
}
|
|
}
|
|
}
|