import { HttpClient } from "@angular/common/http"; import { Component, Inject, OnInit } from "@angular/core"; import { MatDialog, MatDialogRef, MAT_DIALOG_DATA, } from "@angular/material/dialog"; import { MatSnackBar, MatSnackBarConfig } from "@angular/material/snack-bar"; import { ActivatedRoute } from "@angular/router"; import { EvaluateComponent } from "./evaluate/evaluate.component"; @Component({ selector: "app-review-files", templateUrl: "./review-files.component.html", styleUrls: [ "../../student/examination-details/examination-details.component.scss", "./review-files.component.scss", ], }) export class ReviewFilesComponent implements OnInit { constructor( public http: HttpClient, public dialog: MatDialog, public snackBar: MatSnackBar, public route: ActivatedRoute ) {} async ngOnInit(): Promise<void> { this.paperType = this.route.snapshot.queryParams.paperType || 1; await this.getTest(); this.getUnitPlans(); //将试卷的预案考题放进数据中 //监听 此HTML标签焦点事件 document.addEventListener("visibilitychange", () => { let isHidden = document.hidden; if (!isHidden) { this.getUnitPlans(false); } }); } paperType: any = 1; //阅卷/查看 examId: any = this.route.snapshot.queryParams.examId; //考卷id paperId: any; //试卷id paperData: any; //试卷信息 examScore: number = 0; //整个试卷的总分 paperCompanyData: any = []; //考生具体考卷 selectPaper: any = { id: null }; //选择当前考卷 selectPaperType: string = "1"; //选择当前考卷内容 基本信息/作战部署 //获取考生试卷 async getTest() { await new Promise((resolve, reject) => { this.http .get(`/api/Examinations/${this.examId}`) .subscribe((data: any) => { this.paperData = data; this.paperId = this.paperData.paperId; this.paperData.examinationDataInfo.forEach((element, index) => { element.adjoinData ? (element.adjoinData = JSON.parse(element.adjoinData)) : null; element.basicInfoData ? (element.basicInfoData = JSON.parse(element.basicInfoData)) : null; element.facilityData ? (element.facilityData = JSON.parse(element.facilityData)) : null; element.functionalDivisionData ? (element.functionalDivisionData = JSON.parse( element.functionalDivisionData )) : null; element.importLocationData ? (element.importLocationData = JSON.parse( element.importLocationData )) : null; element.adjoinItemScore = data.paperInfo.paperDataInfo[index].adjoinItemScore; //四周毗邻单项分 element.basicInfoItemScore = data.paperInfo.paperDataInfo[index].basicInfoItemScore; //基本信息单项分 element.facilityItemScore = data.paperInfo.paperDataInfo[index].facilityItemScore; //消防设施单项分 element.functionalDivisionItemSocre = data.paperInfo.paperDataInfo[index].functionalDivisionItemSocre; //功能分区单选分 element.importLocationItemScore = data.paperInfo.paperDataInfo[index].importLocationItemScore; //重点部位单项分 if (this.paperType == 1) { //阅卷 element.adjoinScore = data.paperInfo.paperDataInfo[index].adjoinScore; //四周毗邻 总分 element.basicInfoScore = data.paperInfo.paperDataInfo[index].basicInfoScore; //基本信息 总分 element.facilityScore = data.paperInfo.paperDataInfo[index].facilityScore; //消防设施 总分 element.functionalDivisionScore = data.paperInfo.paperDataInfo[index].functionalDivisionScore; //功能分区 总分 element.importLocationScore = data.paperInfo.paperDataInfo[index].importLocationScore; //重点部位 总分 } element.score = element.adjoinScore + element.basicInfoScore + element.facilityScore + element.functionalDivisionScore + element.importLocationScore; }); this.paperCompanyData = JSON.parse( JSON.stringify(data.examinationDataInfo) ); //具体考卷 this.selectPaper = this.paperCompanyData[0]; resolve(1); }); }); } //获得单位预案设定 async getUnitPlans(type: boolean = true) { for (let index = 0; index < this.paperCompanyData.length; index++) { const item = this.paperCompanyData[index]; item.planScore = 0; //预案总分 item.planList = []; //预案data let params = { examinationId: this.route.snapshot.queryParams.examId, companyId: item.companyInfo.id, }; await new Promise((resolve, reject) => { this.http .get(`/api/ExaminationPlans`, { params: params }) .subscribe((data) => { item.planList = data; item.planList.forEach((element) => { item.planScore = item.planScore + element.paperPlanInfo.score; }); if (type == false) { const config = new MatSnackBarConfig(); config.verticalPosition = "top"; config.duration = 5000; // this.snackBar.open('刷新成功','确定',config); } resolve(1); }); }); } type ? this.handleResults() : null; //计算答案正确错误 } //处理数据 计算答案正确错误 handleResults() { this.examScore = 0; this.paperCompanyData.forEach((element) => { this.examScore = this.examScore + element.score + element.planScore; //试卷总分 //forEach element.adjoinData.forEach((item) => { //四周毗邻 item.children.forEach((items) => { if (items.isRight === undefined) { items.result == items.userAnswer ? (items.isRight = true) : (items.isRight = false); } }); }); element.basicInfoData.forEach((item) => { //基本信息 if (item.tabledata && item.tabledata.length) { //表格 item.tabledata.forEach((itemss, index) => { if (index != 0) { itemss.data.forEach((items) => { if (items.isRight === undefined) { items.result == items.userAnswer ? (items.isRight = true) : (items.isRight = false); } }); } }); } else { //input item.children.forEach((items) => { if (items.isRight === undefined) { items.result == items.userAnswer ? (items.isRight = true) : (items.isRight = false); } }); } }); element.facilityData.forEach((item) => { //消防设施 item.children.forEach((items) => { if (items.isRight === undefined) { items.result == items.userAnswer ? (items.isRight = true) : (items.isRight = false); } }); }); element.functionalDivisionData.forEach((item) => { //功能分区 item.tabledata.forEach((itemss, index) => { if (index != 0) { itemss.data.forEach((items) => { if (items.isRight === undefined) { items.result == items.userAnswer ? (items.isRight = true) : (items.isRight = false); } }); } }); }); element.importLocationData.forEach((item) => { //重点部位 item.tabledata.forEach((itemss, index) => { if (index != 0) { itemss.data.forEach((items) => { if (items.isRight === undefined) { items.result == items.userAnswer ? (items.isRight = true) : (items.isRight = false); } }); } }); }); //forEach }); this.getPaperGrade(); } //循环 获取最新得分 getPaperGrade() { this.paperCompanyData.forEach((element) => { //forEach element.adjoinTotalPoints = 0; //四周毗邻 分数 element.adjoinData.forEach((item) => { //四周毗邻 item.children.forEach((items) => { items.isRight ? (element.adjoinTotalPoints = element.adjoinTotalPoints + element.adjoinItemScore) : null; }); }); element.basicInfoTotalPoints = 0; //基本信息总分 element.basicInfoData.forEach((item) => { //基本信息 if (item.tabledata && item.tabledata.length) { //表格 let indexList = []; item.tabledata[0].data.forEach((e, index) => { let everyRow = { isRight: true, index: index }; indexList.push(everyRow); }); //表格 行数 item.tabledata.forEach((itemss, index) => { indexList.forEach((ele) => { if ( itemss.data[ele.index].isRight != undefined && itemss.data[ele.index].isRight === false ) { ele.isRight = false; } }); }); indexList.forEach((item) => { item.isRight ? (element.basicInfoTotalPoints = element.basicInfoTotalPoints + element.basicInfoItemScore) : null; }); } else { //input item.children.forEach((items) => { items.isRight ? (element.basicInfoTotalPoints = element.basicInfoTotalPoints + element.basicInfoItemScore) : null; }); } }); element.facilityTotalPoints = 0; //消防设施总分 element.facilityData.forEach((item) => { //消防设施 item.children.forEach((items) => { items.isRight ? (element.facilityTotalPoints = element.facilityTotalPoints + element.facilityItemScore) : null; }); }); element.functionalDivisionTotalPoints = 0; //功能分区总分 element.functionalDivisionData.forEach((item) => { //功能分区 if (item.tabledata && item.tabledata.length) { let indexList = []; item.tabledata[0].data.forEach((e, index) => { let everyRow = { isRight: true, index: index }; indexList.push(everyRow); }); //表格 行数 item.tabledata.forEach((itemss, index) => { indexList.forEach((ele) => { if ( itemss.data[ele.index].isRight != undefined && itemss.data[ele.index].isRight === false ) { ele.isRight = false; } }); }); indexList.forEach((item) => { item.isRight ? (element.functionalDivisionTotalPoints = element.functionalDivisionTotalPoints + element.functionalDivisionItemSocre) : null; }); } }); element.importLocationTotalPoints = 0; //重点部位总分 element.importLocationData.forEach((item) => { //重点部位 if (item.tabledata && item.tabledata.length) { let indexList = []; item.tabledata[0].data.forEach((e, index) => { let everyRow = { isRight: true, index: index }; indexList.push(everyRow); }); //表格 行数 item.tabledata.forEach((itemss, index) => { indexList.forEach((ele) => { if ( itemss.data[ele.index].isRight != undefined && itemss.data[ele.index].isRight === false ) { ele.isRight = false; } }); }); indexList.forEach((item) => { item.isRight ? (element.importLocationTotalPoints = element.importLocationTotalPoints + element.importLocationItemScore) : null; }); } }); //forEach }); } //修改结果 editResults(e) { let data = e; const dialogRef = this.dialog.open(editRightWrongComponent, { data }); dialogRef.afterClosed().subscribe((data) => { if (data) { if (e.isRight != data.isChecked) { e.isRight = data.isChecked; this.getPaperGrade(); } } }); } //刷新预案设定表格 refreshTable() { this.getUnitPlans(false); } //基本信息表格 是否展示当前行 rowIsShow(children, tag) { let isShow: boolean = false; children.forEach((element) => { element.result == tag ? (isShow = true) : null; }); return isShow; } //切换 选择考卷 togglePaper(e) { if (this.selectPaper.id != e.id) { this.selectPaper = e; } } //切换 选择考卷内容 togglePaperType(e) { if (this.selectPaperType != e) { this.selectPaperType = e; } } //提交阅卷结果 submitResult() { const dialogRef = this.dialog.open(EvaluateComponent, { data: { Evaluate: "" }, }); dialogRef.afterClosed().subscribe((result) => { // console.log("The dialog was closed", result); if (result.type) { let bodyData = { id: this.paperData.id, isMarked: true, totalScore: 0, examinationDataInfo: [], comment: result.value, }; let paramsData = JSON.parse(JSON.stringify(this.paperCompanyData)); //考卷 paramsData.forEach((element) => { //计算总分 bodyData.totalScore = bodyData.totalScore + element.adjoinTotalPoints + element.basicInfoTotalPoints + element.facilityTotalPoints + element.functionalDivisionTotalPoints + element.importLocationTotalPoints; element.planList.forEach((item) => { bodyData.totalScore = bodyData.totalScore + item.score || 0; }); //计算总分 element.adjoinScore = element.adjoinTotalPoints; //四周毗邻 delete element.adjoinTotalPoints; delete element.adjoinItemScore; element.basicInfoScore = element.basicInfoTotalPoints; //基本信息 delete element.basicInfoTotalPoints; delete element.basicInfoItemScore; element.facilityScore = element.facilityTotalPoints; //消防设施 delete element.facilityTotalPoints; delete element.facilityItemScore; element.functionalDivisionScore = element.functionalDivisionTotalPoints; //功能分区 delete element.functionalDivisionTotalPoints; delete element.functionalDivisionItemSocre; element.importLocationScore = element.importLocationTotalPoints; //重点部位 delete element.importLocationTotalPoints; delete element.importLocationItemScore; delete element.planList; delete element.planScore; delete element.score; element.adjoinData = JSON.stringify(element.adjoinData); element.basicInfoData = JSON.stringify(element.basicInfoData); element.facilityData = JSON.stringify(element.facilityData); element.functionalDivisionData = JSON.stringify( element.functionalDivisionData ); element.importLocationData = JSON.stringify( element.importLocationData ); }); bodyData.examinationDataInfo = paramsData; this.http .put(`/api/Examinations/${this.paperData.id}`, bodyData) .subscribe((data) => { const config = new MatSnackBarConfig(); config.verticalPosition = "top"; config.duration = 5000; this.snackBar.open( "阅卷结果提交成功,页面将于一秒后关闭!", "确定", config ); setTimeout(() => { window.close(); }, 1000); }); } }); } //作战部署 阅卷 readExam(item, e) { sessionStorage.setItem("companyName", this.selectPaper.companyInfo.name); sessionStorage.setItem("planId", item.paperPlanInfo.planComponentId); sessionStorage.setItem( "buildingTypeId", this.selectPaper.companyInfo.buildingTypes[0].id ); sessionStorage.setItem("companyId", this.selectPaper.companyInfo.id); sessionStorage.setItem("remark", item.remark); let openType; item.paperPlanInfo.examPlanType == 0 ? (openType = 1) : (openType = 2); window.open( `/canvasToolRead?planName=${item.paperPlanInfo.title}&paperplanId=${item.paperPlanId}&openType=${openType}&paperId=${this.paperId}&examId=${this.route.snapshot.queryParams.examId}&planComponentId=${item.paperPlanInfo.planComponentId}&paperType=${e}` ); } } export interface radioType { isRight: boolean; name: string; } @Component({ selector: "app-edit-rightWrong", templateUrl: "./editRightWrong.html", styleUrls: ["./review-files.component.scss"], }) export class editRightWrongComponent implements OnInit { constructor( public http: HttpClient, public dialog: MatDialog, public snackBar: MatSnackBar, public route: ActivatedRoute, @Inject(MAT_DIALOG_DATA) public data: any, public dialogRef: MatDialogRef<any> ) {} ngOnInit(): void { this.isChecked = JSON.parse(JSON.stringify(this.data.isRight)); } isChecked: boolean; //是否正确 radioList: radioType[] = [ { isRight: true, name: "正确" }, { isRight: false, name: "错误" }, ]; submit() { let data = { isChecked: this.isChecked }; this.dialogRef.close(data); } }