diff --git a/marking_app/lib/common/model/job/job_report_model.dart b/marking_app/lib/common/model/job/job_report_model.dart index 59e1224..9167527 100644 --- a/marking_app/lib/common/model/job/job_report_model.dart +++ b/marking_app/lib/common/model/job/job_report_model.dart @@ -57,6 +57,16 @@ class JobReportModel extends Object { @JsonKey(name: 'zgReport') ZgReport zgReport; + @JsonKey(name: 'noAnswerStudentNames') + List noAnswerStudentNames; + + @JsonKey(name: 'allCorrectStudentNames') + List allCorrectStudentNames; + + @JsonKey(name: 'validStudentNames') + List validStudentNames; + + // 前端自定义 -- 全对学生 @JsonKey(name: 'allpairsStudents') List? allpairsStudents; @@ -91,6 +101,9 @@ class JobReportModel extends Object { this.overallTitles, this.kgReport, this.zgReport, + this.noAnswerStudentNames, + this.allCorrectStudentNames, + this.validStudentNames, [ this.allpairsStudents, this.passStudents, @@ -274,9 +287,14 @@ class OverallTitles extends Object { @JsonKey(name: 'count') int count; + @JsonKey(name: 'studentNames') + List studentNames; + + OverallTitles( this.title, this.count, + this.studentNames, ); factory OverallTitles.fromJson(Map srcJson) => _$OverallTitlesFromJson(srcJson); @@ -363,7 +381,12 @@ class Details extends Object { @JsonKey(name: 'noAnswerStudentNames') List noAnswerStudentNames; - Details(this.questionNo,this.questionId,this.partName,this.questionType,this.validRate,this.validCount,this.correctRate,this.questionAnswer,this.questionPicture,this.priorityGeneral,this.priorityStudentNames,this.answerNgStudentNames,this.noAnswerStudentNames); + @JsonKey(name: 'answerOkStudentNames') + List answerOkStudentNames; + + Details(this.questionNo,this.questionId,this.partName,this.questionType,this.validRate, + this.validCount,this.correctRate,this.questionAnswer,this.questionPicture,this.priorityGeneral, + this.priorityStudentNames,this.answerNgStudentNames,this.noAnswerStudentNames,this.answerOkStudentNames); factory Details.fromJson(Map srcJson) => _$DetailsFromJson(srcJson); diff --git a/marking_app/lib/pages/homework_correction/job_report.dart b/marking_app/lib/pages/homework_correction/job_report.dart index 22e077b..f505c33 100644 --- a/marking_app/lib/pages/homework_correction/job_report.dart +++ b/marking_app/lib/pages/homework_correction/job_report.dart @@ -296,7 +296,7 @@ class _JobReportState extends State with CommonMixin { ), ), //完成率、正确率 - TopCount(data), + TopCount(data,classData == null?'':classData!.className), /* InkWell( onTap: (){ RouterManager.router.navigateTo( @@ -439,7 +439,11 @@ Widget $dropdownSelection(List? involveClasses, JobReportJoi items: involveClasses.map((e) { return DropdownMenuItem( value: e.uniqueId!, - child: quickText(e.graduationYear + e.className, size: 12.sp, color: Colors.black), + child: quickText( + e.uniqueId == '-1' + ? e.graduationYear + : + e.gradeName + e.className, size: 12.sp, color: Colors.black), ); }).toList(), onChanged: (String? value) { diff --git a/marking_app/lib/pages/homework_correction/quick_check_personal.dart b/marking_app/lib/pages/homework_correction/quick_check_personal.dart index 1eaa7b1..7bd6324 100644 --- a/marking_app/lib/pages/homework_correction/quick_check_personal.dart +++ b/marking_app/lib/pages/homework_correction/quick_check_personal.dart @@ -148,7 +148,7 @@ class _QuickCheckPersonalState extends State SizedBox( height: studentInfo!.zgDetails.length>8?300.r:studentInfo!.zgDetails.length * 40.r + 40.r, child: StudentZgTable( - headList: ['题号', '用时', '批注结果','答案','批注'], + headList: ['题号', '用时', '学生答案','批注结果','批注'], bodyList: studentInfo!.zgDetails, ), ) diff --git a/marking_app/lib/pages/homework_correction/quick_data_check.dart b/marking_app/lib/pages/homework_correction/quick_data_check.dart index f8bd7d3..356a5a6 100644 --- a/marking_app/lib/pages/homework_correction/quick_data_check.dart +++ b/marking_app/lib/pages/homework_correction/quick_data_check.dart @@ -17,6 +17,7 @@ import 'package:percent_indicator/linear_percent_indicator.dart'; class QuickDataCheckPage extends StatefulWidget { final int jobId; final String className; + final String gradeName; final int? schoolId; final int? gradeId; @@ -24,6 +25,7 @@ class QuickDataCheckPage extends StatefulWidget { {Key? key, required this.jobId, required this.className, + required this.gradeName, this.schoolId, this.gradeId}) : super(key: key); @@ -171,7 +173,7 @@ class _QuickDataCheckPageState extends State width: 6.r, ), Text( - widget.className, + widget.gradeName + widget.className, style: TextStyle( fontSize: 14.r, color: Colors.white), ) diff --git a/marking_app/lib/pages/homework_correction/widget/report_table.dart b/marking_app/lib/pages/homework_correction/widget/report_table.dart index d8bc0b6..6c76fdf 100644 --- a/marking_app/lib/pages/homework_correction/widget/report_table.dart +++ b/marking_app/lib/pages/homework_correction/widget/report_table.dart @@ -86,7 +86,9 @@ class _ReportTableState extends State { Expanded( flex: 1, child: Center(child: Text('未作答人',style: TextStyle(fontSize: 12.sp,color: Color(0xFF6A6A6A)),))), - + Expanded( + flex: 1, + child: Center(child: Text('答对人数',style: TextStyle(fontSize: 12.sp,color: Color(0xFF6A6A6A)),))), Expanded( flex: 1, child: Center(child: Text('答错人',style: TextStyle(fontSize: 12.sp,color: Color(0xFF6A6A6A)),))), @@ -107,6 +109,9 @@ class _ReportTableState extends State { Expanded( flex:1, child: Center(child: Text(item['noAnswerStudentNames'],style: TextStyle(fontSize: 12.sp,color: Color(0xFF323232)),))), + Expanded( + flex:1, + child: Center(child: Text(item['answerOkStudentNames'],style: TextStyle(fontSize: 12.sp,color: Color(0xFF323232)),))), Expanded( flex:1, child: Center(child: Text(item['answerNgStudentNames'],style: TextStyle(fontSize: 12.sp,color: Color(0xFF323232)),))), @@ -138,27 +143,28 @@ class _ReportTableState extends State { }); } - void zdHandle( BuildContext context, String title, String questionNo,List noAnswerStudentNames,List answerNgStudentNames){ + void zdHandle( BuildContext context, String title, String questionNo,List noAnswerStudentNames,List answerNgStudentNames, List answerOkStudentNames){ List list = []; - if(noAnswerStudentNames.length>answerNgStudentNames.length){ - for(int i = 0;ianswerNgStudentNames.length && noAnswerStudentNames.length>answerOkStudentNames.length){ + for(int i = 0;ii?answerNgStudentNames[i]:'-', + 'answerOkStudentNames':answerOkStudentNames.length>i?answerOkStudentNames[i]:'-'}; + list.add(obj); + } + }else if(answerNgStudentNames.length>noAnswerStudentNames.length && answerNgStudentNames.length>answerOkStudentNames.length){ + for(int i = 0;ii?noAnswerStudentNames[i]:'-','answerNgStudentNames':answerNgStudentNames[i], + 'answerOkStudentNames':answerOkStudentNames.length>i?answerOkStudentNames[i]:'-'}; + list.add(obj); + } + }else if(answerOkStudentNames.length>noAnswerStudentNames.length && answerOkStudentNames.length>answerNgStudentNames.length){ + for(int i = 0;ii?noAnswerStudentNames[i]:'-','answerNgStudentNames':answerNgStudentNames.length>i?answerNgStudentNames[i]:'-', + 'answerOkStudentNames':answerOkStudentNames[i]}; + list.add(obj); + } + } showPeopleListDialog(context:context, title:title, questionNo:questionNo,arr:list,dcList:[]); } @@ -190,7 +196,7 @@ class _ReportTableState extends State { )), DataCell(InkWell( onTap: () { - zdHandle(context, '作答人数', item.questionNo,item.noAnswerStudentNames,item.answerNgStudentNames); + zdHandle(context, '作答人数', item.questionNo,item.noAnswerStudentNames,item.answerNgStudentNames,item.answerOkStudentNames); }, child: Center( diff --git a/marking_app/lib/pages/homework_correction/widget/student_zg_table.dart b/marking_app/lib/pages/homework_correction/widget/student_zg_table.dart index 5b26645..39b9edb 100644 --- a/marking_app/lib/pages/homework_correction/widget/student_zg_table.dart +++ b/marking_app/lib/pages/homework_correction/widget/student_zg_table.dart @@ -84,6 +84,21 @@ class _StudentZgTableState extends State { style: TextStyle(fontSize: 12.sp, color: Color(0xFF525252))), ), )), + DataCell(InkWell( + onTap: (){ + if(item.state != 0){ + showImgDialog(context,item.studentAnswer!); + } + + }, + child: Center( + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 5.r), + child: Text(item.state!=0 ?'查看':'--', + style: TextStyle(fontSize: 12.sp, color: Color(0xFF3661FE))), + ), + ), + )), DataCell(Center( child: Padding( padding: EdgeInsets.symmetric(horizontal: 5.r), @@ -94,24 +109,15 @@ class _StudentZgTableState extends State { )), DataCell(InkWell( onTap: (){ - showImgDialog(context,item.studentAnswer!); + if(item.state==1 || item.state==2){ + showImgDialog(context,item.annotateAnswers!); + } + }, child: Center( child: Padding( padding: EdgeInsets.symmetric(horizontal: 5.r), - child: Text('查看', - style: TextStyle(fontSize: 12.sp, color: Color(0xFF3661FE))), - ), - ), - )), - DataCell(InkWell( - onTap: (){ - showImgDialog(context,item.annotateAnswers!); - }, - child: Center( - child: Padding( - padding: EdgeInsets.symmetric(horizontal: 5.r), - child: Text('查看', + child: Text(item.state==1 || item.state==2?'查看':'--', style: TextStyle(fontSize: 12.sp, color: Color(0xFF3661FE))), ), ), diff --git a/marking_app/lib/pages/homework_correction/widget/top_count.dart b/marking_app/lib/pages/homework_correction/widget/top_count.dart index 422c4d8..4d0be82 100644 --- a/marking_app/lib/pages/homework_correction/widget/top_count.dart +++ b/marking_app/lib/pages/homework_correction/widget/top_count.dart @@ -1,11 +1,63 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:marking_app/common/model/job/job_report_model.dart'; +import 'package:marking_app/utils/easy_refresh/MyEmptyWidget.dart'; import 'package:marking_app/utils/index.dart'; class TopCount extends StatelessWidget { final JobReportModel data; - const TopCount(this.data,{Key? key}) : super(key: key); + final String className; + const TopCount(this.data,this.className,{Key? key}) : super(key: key); + + void showStudentListDialog( + {required BuildContext context, required String title,required List arr}) { + showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + // insetPadding: EdgeInsets.symmetric(vertical: 20.r,horizontal: 20.r), + contentPadding: EdgeInsets.all(20.r), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.all(Radius.circular(15.r))), + content: SizedBox( + width: MediaQuery.of(context).size.width * 0.7, + height: MediaQuery.of(context).size.height * 0.7, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Center( + child: Text( + className + title, + style: TextStyle( + fontSize: 15.sp, + color: Color(0xFF3C3C3C), + fontWeight: FontWeight.w500), + ), + ), + SizedBox( + height: 5.r, + ), + SizedBox(height: 15.r,), + arr.length>0?Expanded( + child: ListView.builder( + shrinkWrap: true, + itemBuilder: (context,index){ + var item = arr[index]; + return Container( + padding: EdgeInsets.symmetric(vertical: 5.r,horizontal: 15.r), + color: index.isOdd?Colors.white:Color(0xFFF0F0F0), + child: Text(item,style: TextStyle(fontSize: 12.sp,color: Color(0xFF323232)),), + ); + },itemCount: arr.length,), + ):MyEmptyWidget() + + ], + ), + ), + ); + }); + } + @override Widget build(BuildContext context) { @@ -21,161 +73,154 @@ class TopCount extends StatelessWidget { Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ - Container( - width: 81.r, - padding: EdgeInsets.symmetric( - vertical: 10.r, horizontal: 6.r), - decoration: BoxDecoration( - border: Border.all( - width: 1.r, - color: Color(0xFF4CC793), - style: BorderStyle.solid), - borderRadius: BorderRadius.all(Radius.circular(6.r)), + InkWell( + onTap: (){ + showStudentListDialog(context:context,title: '未提交作业学生',arr: data.noAnswerStudentNames); + }, + child: Container( + width: 81.r, + padding: EdgeInsets.symmetric( + vertical: 10.r, horizontal: 6.r), + decoration: BoxDecoration( + border: Border.all( + width: 1.r, + color: Color(0xFF4CC793), + style: BorderStyle.solid), + borderRadius: BorderRadius.all(Radius.circular(6.r)), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox(height: 5.r,), + Row( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Text( + data.noAnswerCount.toString(), + style: TextStyle( + fontSize: 24.sp, + color: Color(0xFF4CC793), + fontWeight: FontWeight.w600), + ), + Text( + '人', + style: TextStyle( + fontSize: 16.sp, + color: Color(0xFF4CC793), + fontWeight: FontWeight.w600), + ), + ], + ), + SizedBox( + height: 20.r, + ), + Text( + '未提交', + style: TextStyle( + fontSize: 12.sp, color: Color(0xFF818181)), + ) + ], + ), ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SizedBox(height: 5.r,), - Row( - crossAxisAlignment: CrossAxisAlignment.end, - children: [ - Text( - doubleToStringAsFixed(data.finishRate), - style: TextStyle( - fontSize: 24.sp, - color: Color(0xFF4CC793), - fontWeight: FontWeight.w600), - ), - Text( - '%', - style: TextStyle( - fontSize: 16.sp, - color: Color(0xFF4CC793), - fontWeight: FontWeight.w600), - ), - ], - ), - SizedBox( - height: 20.r, - child: Row( + ), + InkWell( + onTap: (){ + showStudentListDialog(context:context,title: '已提交作业学生',arr: data.validStudentNames); + }, + child: Container( + width: 81.r, + padding: EdgeInsets.symmetric( + vertical: 10.r, horizontal: 6.r), + decoration: BoxDecoration( + border: Border.all( + width: 1.r, + color: Color(0xFF4CC793), + style: BorderStyle.solid), + borderRadius: BorderRadius.all(Radius.circular(6.r)), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox(height: 5.r,), + Row( + crossAxisAlignment: CrossAxisAlignment.end, children: [ Text( data.validCount.toString(), style: TextStyle( - fontSize: 10.sp, - color: Color(0xFFB0B0B0)), + fontSize: 24.sp, + color: Color(0xFF4CC793), + fontWeight: FontWeight.w600), ), Text( - '/', + '人', style: TextStyle( - fontSize: 10.sp, - color: Color(0xFFB0B0B0)), - ), - Text( - data.studentCount.toString(), - style: TextStyle( - fontSize: 10.sp, - color: Color(0xFFB0B0B0)), + fontSize: 16.sp, + color: Color(0xFF4CC793), + fontWeight: FontWeight.w600), ), ], ), - ), - Text( - '完成率', - style: TextStyle( - fontSize: 12.sp, color: Color(0xFF818181)), - ) - ], + SizedBox( + height: 20.r, + ), + Text( + '已提交', + style: TextStyle( + fontSize: 12.sp, color: Color(0xFF818181)), + ) + ], + ), ), ), - Container( - width: 81.r, - padding: EdgeInsets.symmetric( - vertical: 10.r, horizontal: 6.r), - decoration: BoxDecoration( - border: Border.all( - width: 1.r, - color: Color(0xFF4CC793), - style: BorderStyle.solid), - borderRadius: BorderRadius.all(Radius.circular(6.r)), - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SizedBox(height: 5.r,), - Row( - crossAxisAlignment: CrossAxisAlignment.end, - children: [ - Text( - doubleToStringAsFixed(data.correctRate), - style: TextStyle( - fontSize: 24.sp, - color: Color(0xFF4CC793), - fontWeight: FontWeight.w600), - ), - Text( - '%', - style: TextStyle( - fontSize: 16.sp, - color: Color(0xFF4CC793), - fontWeight: FontWeight.w600), - ), - ], - ), - SizedBox( - height: 20.r, - ), - Text( - '正确率', - style: TextStyle( - fontSize: 12.sp, color: Color(0xFF818181)), - ) - ], - ), - ), - Container( - width: 81.r, - padding: EdgeInsets.symmetric( - vertical: 10.r, horizontal: 6.r), - decoration: BoxDecoration( - border: Border.all( - width: 1.r, - color: Color(0xFF4CC793), - style: BorderStyle.solid), - borderRadius: BorderRadius.all(Radius.circular(6.r)), - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SizedBox(height: 5.r,), - Row( - crossAxisAlignment: CrossAxisAlignment.end, - children: [ - Text( - data.allCorrect.toString(), - style: TextStyle( - fontSize: 24.sp, - color: Color(0xFF4CC793), - fontWeight: FontWeight.w600), - ), - Text( - '人', - style: TextStyle( - fontSize: 16.sp, - color: Color(0xFF4CC793), - fontWeight: FontWeight.w600), - ), - ], - ), - SizedBox( - height: 20.r, - ), - Text( - '全对', - style: TextStyle( - fontSize: 12.sp, color: Color(0xFF818181)), - ) - ], + InkWell( + onTap: (){ + showStudentListDialog(context:context,title: '全对作业学生',arr: data.allCorrectStudentNames); + }, + child: Container( + width: 81.r, + padding: EdgeInsets.symmetric( + vertical: 10.r, horizontal: 6.r), + decoration: BoxDecoration( + border: Border.all( + width: 1.r, + color: Color(0xFF4CC793), + style: BorderStyle.solid), + borderRadius: BorderRadius.all(Radius.circular(6.r)), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox(height: 5.r,), + Row( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Text( + data.allCorrect.toString(), + style: TextStyle( + fontSize: 24.sp, + color: Color(0xFF4CC793), + fontWeight: FontWeight.w600), + ), + Text( + '人', + style: TextStyle( + fontSize: 16.sp, + color: Color(0xFF4CC793), + fontWeight: FontWeight.w600), + ), + ], + ), + SizedBox( + height: 20.r, + ), + Text( + '全对', + style: TextStyle( + fontSize: 12.sp, color: Color(0xFF818181)), + ) + ], + ), ), ), ], @@ -206,55 +251,60 @@ class TopCount extends StatelessWidget { }else if(item.title == '差'){ bgColor = Color(0xFFFF6F6F); } - return Container( - padding: EdgeInsets.symmetric(vertical: 10.r), - width: (MediaQuery.of(context).size.width - 55.r) / 2, - color: Color(0xFFF5F5F5), - child: Row( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - SizedBox( - width: (MediaQuery.of(context).size.width - 55.r)/4 , - child: Row( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - Container( - width: 28.r, - height: 28.r, - decoration: BoxDecoration( - color: Colors.white, - border: Border.all( - color: bgColor, - width: 1.r, - style: BorderStyle.solid), - borderRadius: BorderRadius.circular(14.r)), - child: Center( - child: Text( - item.title, - style: TextStyle( - color: bgColor, fontSize: 12.r), - )), - ), - ], + return InkWell( + onTap: (){ + showStudentListDialog(context:context,title:item.title+'等作业学生',arr: item.studentNames); + }, + child: Container( + padding: EdgeInsets.symmetric(vertical: 10.r), + width: (MediaQuery.of(context).size.width - 55.r) / 2, + color: Color(0xFFF5F5F5), + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + SizedBox( + width: (MediaQuery.of(context).size.width - 55.r)/4 , + child: Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Container( + width: 28.r, + height: 28.r, + decoration: BoxDecoration( + color: Colors.white, + border: Border.all( + color: bgColor, + width: 1.r, + style: BorderStyle.solid), + borderRadius: BorderRadius.circular(14.r)), + child: Center( + child: Text( + item.title, + style: TextStyle( + color: bgColor, fontSize: 12.r), + )), + ), + ], + ), ), - ), - SizedBox( - width: 10.r, - ), - Text( - item.count.toString(), - style: TextStyle( - fontSize: 20.sp, - color: Color(0xFF595959)), - ), - Text( - '人', - style: TextStyle( - fontSize: 14.sp, - color: Color(0xFF595959)), - ), - ], + SizedBox( + width: 10.r, + ), + Text( + item.count.toString(), + style: TextStyle( + fontSize: 20.sp, + color: Color(0xFF595959)), + ), + Text( + '人', + style: TextStyle( + fontSize: 14.sp, + color: Color(0xFF595959)), + ), + ], + ), ), ); }, diff --git a/marking_app/lib/routes/RouterManager.dart b/marking_app/lib/routes/RouterManager.dart index e836a15..cd32be6 100644 --- a/marking_app/lib/routes/RouterManager.dart +++ b/marking_app/lib/routes/RouterManager.dart @@ -278,6 +278,7 @@ class RouterManager { handlerFunc: (BuildContext? context, Map> params) { int jobId = int.parse(params['jobId']![0]); String className = params['className']![0]; + String gradeName = params['gradeName']![0]; int? schoolId; if (params['schoolId'] != null && params['schoolId']?[0] != null && params['schoolId']![0] != 'null') { schoolId = int.parse(params['schoolId']![0]); @@ -286,7 +287,7 @@ class RouterManager { if (params['gradeId'] != null && params['gradeId']?[0] != null && params['gradeId']![0] != 'null') { gradeId = int.parse(params['gradeId']![0]); } - return QuickDataCheckPage(jobId: jobId, className: className,schoolId:schoolId,gradeId:gradeId); + return QuickDataCheckPage(jobId: jobId, className: className,gradeName:gradeName,schoolId:schoolId,gradeId:gradeId); }, );