历史作业

This commit is contained in:
machuanyu 2024-03-29 11:37:35 +08:00
parent 85a80c364a
commit 9c66503154
2 changed files with 375 additions and 251 deletions

View File

@ -99,11 +99,17 @@ class Items extends Object {
@JsonKey(name: 'subjectiveDtls') @JsonKey(name: 'subjectiveDtls')
List<SubjectiveDtls> subjectiveDtls; List<SubjectiveDtls> subjectiveDtls;
@JsonKey(name: 'gradeName')
String gradeName;
@JsonKey(name: 'className')
String className;
// //
@JsonKey(name: 'allNotDone') @JsonKey(name: 'allNotDone')
bool allNotDone; bool allNotDone;
Items(this.id,this.name,this.subject,this.subjectName,this.publishTime,this.isPaper,this.studentJobId,this.correctRate,this.objectiveCorrectRate,this.objectiveDtls,this.subjectiveCorrectRate,this.subjectiveDtls,[this.allNotDone = false,]); Items(this.id,this.name,this.subject,this.subjectName,this.publishTime,this.gradeName,this.className,this.isPaper,this.studentJobId,this.correctRate,this.objectiveCorrectRate,this.objectiveDtls,this.subjectiveCorrectRate,this.subjectiveDtls,[this.allNotDone = false,]);
factory Items.fromJson(Map<String, dynamic> srcJson) => _$ItemsFromJson(srcJson); factory Items.fromJson(Map<String, dynamic> srcJson) => _$ItemsFromJson(srcJson);

View File

@ -7,6 +7,7 @@ import 'package:marking_app/common/mixin/common.dart';
import 'package:marking_app/common/model/common/base_structure_result.dart'; import 'package:marking_app/common/model/common/base_structure_result.dart';
import 'package:marking_app/common/model/job/job_student_history.dart'; import 'package:marking_app/common/model/job/job_student_history.dart';
import 'package:marking_app/pages/homework_correction/widget/personal_detail_topbar.dart'; import 'package:marking_app/pages/homework_correction/widget/personal_detail_topbar.dart';
import 'package:marking_app/routes/RouterManager.dart';
import 'package:marking_app/utils/easy_refresh/MyEmptyWidget.dart'; import 'package:marking_app/utils/easy_refresh/MyEmptyWidget.dart';
import 'package:marking_app/utils/index.dart'; import 'package:marking_app/utils/index.dart';
import 'package:marking_app/utils/my_text.dart'; import 'package:marking_app/utils/my_text.dart';
@ -179,27 +180,43 @@ class _JobPersonalDetailState extends State<JobPersonalDetail>
], ],
), ),
), ),
progressBar(context, Container(
title: '客观题正确率:', margin: EdgeInsets.symmetric(
color: Color(0xFFB8C7FF), vertical: 10.r, horizontal: 14.r),
percent: studentData!.objectiveCorrectRate / 100, padding: EdgeInsets.only(top: 10.r,left: 10.r,right: 10.r,bottom: 10.r),
padingEdg: EdgeInsets.symmetric(horizontal: 14.r), decoration: BoxDecoration(
marginEdg: EdgeInsets.only(top: 8.h)), borderRadius:
progressBar(context, BorderRadius.all(Radius.circular(10.r)),
title: '主观题正确率:', color: Colors.white),
color: Color(0xFFB8C7FF), child: Column(
percent: studentData!.subjectiveCorrectRate / 100, crossAxisAlignment: CrossAxisAlignment.start,
padingEdg: EdgeInsets.symmetric(horizontal: 14.r), children: [
marginEdg: EdgeInsets.only(top: 8.h)), Text('总览:',style: TextStyle(fontSize: 12.sp,color: Color(0xFF7491FD),fontWeight: FontWeight.w600),),
progressBar(context, progressBar(context,
title: '总正确率:', title: '客观题正确率:',
color: Color(0xFFB8C7FF), color: Color(0xFFB8C7FF),
percent: studentData!.correctRate / 100, percent: studentData!.objectiveCorrectRate / 100,
padingEdg: EdgeInsets.symmetric(horizontal: 14.r), padingEdg: EdgeInsets.zero,
marginEdg: EdgeInsets.only(top: 8.h)), marginEdg: EdgeInsets.only(top: 8.h)),
SizedBox( progressBar(context,
height: 10.r, title: '主观题正确率:',
color: Color(0xFFB8C7FF),
percent: studentData!.subjectiveCorrectRate / 100,
padingEdg: EdgeInsets.zero,
marginEdg: EdgeInsets.only(top: 8.h)),
progressBar(context,
title: '总正确率:',
color: Color(0xFFB8C7FF),
percent: studentData!.correctRate / 100,
padingEdg: EdgeInsets.zero,
marginEdg: EdgeInsets.only(top: 8.h)),
],
),
), ),
/* SizedBox(
height: 5.r,
),*/
jobConditionFilter(context, jobConditionFilter(context,
controller: tabController, controller: tabController,
jobType: isJob ? 1 : 2, jobType: isJob ? 1 : 2,
@ -252,6 +269,91 @@ class _JobPersonalDetailState extends State<JobPersonalDetail>
} }
} }
}), }),
Padding(
padding: EdgeInsets.only(top: 14.r,right: 14.r),
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Text(
'注:',
style: TextStyle(
fontSize: 8.sp, color: Color(0xFF8B8B8B)),
),
Container(
width:10.r,
height: 10.r,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(5.r)),
// color: Color(0xFF4CC793),
border: Border.all(width: 1.r,color: Color(0xFF4CC793)),
),
),
SizedBox(width: 2.r,),
Text(
'正确',
style: TextStyle(
fontSize: 8.sp, color: Color(0xFF8B8B8B)),
),
SizedBox(width: 15.r,),
Container(
width:10.r,
height: 10.r,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(5.r)),
// color: Color(0xFFFF7474),
border: Border.all(width: 1.r,color: Color(0xFFFF7474)),
),
),
SizedBox(width: 2.r,),
Text(
'错误',
style: TextStyle(
fontSize: 8.sp, color: Color(0xFF8B8B8B)),
),
SizedBox(width: 15.r,),
Container(
width:10.r,
height: 10.r,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(5.r)),
// color: Color(0xFF666666),
border: Border.all(width: 1.r,color: Color(0xFF666666)),
// border: Border.all(width: 1.r,color: Colors.grey),
/* boxShadow: [
BoxShadow(
color: Colors.grey,
offset: Offset(1.w, 1.h), //y轴偏移量
blurRadius: 4, //
spreadRadius: 0.1, //
)
],*/
),
),
SizedBox(width: 2.r,),
Text(
'已作答未批阅',
style: TextStyle(
fontSize: 8.sp, color: Color(0xFF8B8B8B)),
),
SizedBox(width: 15.r,),
Container(
width:10.r,
height: 10.r,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(5.r)),
border: Border.all(width: 1.r,color: Color(0xFFDDDDDD)),
// color: Color(0xFFDDDDDD),
),
),
SizedBox(width: 2.r,),
Text(
'未做',
style: TextStyle(
fontSize: 8.sp, color: Color(0xFF8B8B8B)),
),
],
),
),
Expanded( Expanded(
child: Padding( child: Padding(
padding: EdgeInsets.symmetric(vertical: 10.r), padding: EdgeInsets.symmetric(vertical: 10.r),
@ -280,119 +382,157 @@ class _JobPersonalDetailState extends State<JobPersonalDetail>
itemCount: dataList.length, itemCount: dataList.length,
itemBuilder: (context, index) { itemBuilder: (context, index) {
Items item = dataList[index]; Items item = dataList[index];
return Container( return InkWell(
margin: EdgeInsets.symmetric( onTap: (){
vertical: 5.r, horizontal: 14.r), /* RouterManager.router.navigateTo(
padding: EdgeInsets.symmetric( context,
vertical: 14.r, horizontal: 10.r), RouterManager.quickDataCheckPath +
decoration: BoxDecoration( '?gradeName=${Uri.encodeComponent(item.gradeName)}&className=${Uri.encodeComponent(item.className)}&jobId=${item.id}',
borderRadius: transition: getTransition(),
BorderRadius.all(Radius.circular(10.r)), );*/
color: item.allNotDone RouterManager.router.navigateTo(
? Color(0xFFFFEDD3) context,
: Colors.white), RouterManager.quickCheckPersonalPath +
child: Column( '?jobId=${item.id}&studentId=${widget.studentId}',
mainAxisAlignment: MainAxisAlignment.start, transition: getTransition(),
crossAxisAlignment: CrossAxisAlignment.start, );
children: [ },
Row( child: Container(
mainAxisAlignment: MainAxisAlignment.start, margin: EdgeInsets.symmetric(
crossAxisAlignment: CrossAxisAlignment.end, vertical: 5.r, horizontal: 14.r),
children: [ padding: EdgeInsets.symmetric(
Container( vertical: 14.r, horizontal: 10.r),
width: 32.w, decoration: BoxDecoration(
height: 18.h, borderRadius:
alignment: Alignment.center, BorderRadius.all(Radius.circular(10.r)),
padding: EdgeInsets.only(left: 2.w), color: item.allNotDone
decoration: BoxDecoration( ? Color(0xFFFFEDD3)
color: isJob : Colors.white),
? const Color.fromRGBO( child: Column(
104, 136, 253, 1) mainAxisAlignment: MainAxisAlignment.start,
: Color(0xFFFFA116), crossAxisAlignment: CrossAxisAlignment.start,
borderRadius: BorderRadius.only( children: [
topLeft: Radius.circular(14.r), Row(
topRight: Radius.circular(3.r), mainAxisAlignment: MainAxisAlignment.start,
bottomLeft: Radius.circular(4.r), crossAxisAlignment: CrossAxisAlignment.end,
bottomRight: Radius.circular(4.r), children: [
Container(
width: 32.w,
height: 18.h,
alignment: Alignment.center,
padding: EdgeInsets.only(left: 2.w),
decoration: BoxDecoration(
color: isJob
? const Color.fromRGBO(
104, 136, 253, 1)
: Color(0xFFFFA116),
borderRadius: BorderRadius.only(
topLeft: Radius.circular(14.r),
topRight: Radius.circular(3.r),
bottomLeft: Radius.circular(4.r),
bottomRight: Radius.circular(4.r),
),
),
margin: EdgeInsets.only(right: 4.w),
child: Text(
isJob ? '作业' : '考试',
style: TextStyle(
fontSize: 10.sp,
color: Colors.white),
), ),
), ),
margin: EdgeInsets.only(right: 4.w), Expanded(
child: Text(
isJob ? '作业' : '考试',
style: TextStyle(
fontSize: 10.sp,
color: Colors.white),
),
),
Expanded(
child: Text(
item.name,
style: TextStyle(
fontSize: 12.sp,
color: Color(0xFF464646)),
)),
// SizedBox(width: 5.r,),
// Text('2024.1',style: TextStyle(fontSize: 12.sp,color: Color(0xFF5B5B5B)),),
Container(
width: 40.r,
height: 20.r,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(
Radius.circular(4.r)),
border: Border.all(
width: 1.r,
color: Color(0xFF4CC793)),
),
child: Center(
child: Text( child: Text(
item.subjectName, item.name,
style: TextStyle( style: TextStyle(
fontSize: 10.sp, fontSize: 12.sp,
color: Color(0xFF4CC793)), color: Color(0xFF464646)),
)), )),
), // SizedBox(width: 5.r,),
], // Text('2024.1',style: TextStyle(fontSize: 12.sp,color: Color(0xFF5B5B5B)),),
),
SizedBox( Container(
height: 10.r, width: 40.r,
), height: 20.r,
Row( decoration: BoxDecoration(
crossAxisAlignment: CrossAxisAlignment.start, borderRadius: BorderRadius.all(
children: [ Radius.circular(4.r)),
Text( border: Border.all(
'客:', width: 1.r,
style: TextStyle( color: Color(0xFF4CC793)),
fontSize: 12.sp, ),
color: Color(0xFF5B5B5B)), child: Center(
), child: Text(
SizedBox( item.subjectName,
width: 5.r, style: TextStyle(
), fontSize: 10.sp,
item.objectiveDtls.length > 0 color: Color(0xFF4CC793)),
? Expanded( )),
child: Wrap( ),
direction: Axis.horizontal, ],
alignment: WrapAlignment.start, ),
spacing: 8, SizedBox(
runSpacing: 5, height: 10.r,
children: List.generate( ),
item.objectiveDtls.length, Row(
(i) { crossAxisAlignment: CrossAxisAlignment.start,
SubjectiveDtls subjective = children: [
item.objectiveDtls[i]; Text(
return Container( '客:',
width: 20.r, style: TextStyle(
height: 20.r, fontSize: 12.sp,
decoration: BoxDecoration( color: Color(0xFF5B5B5B)),
color: Colors.transparent, ),
border: Border.all( SizedBox(
width: 1.r, width: 5.r,
),
item.objectiveDtls.length > 0
? Expanded(
child: Wrap(
direction: Axis.horizontal,
alignment: WrapAlignment.start,
spacing: 8,
runSpacing: 5,
children: List.generate(
item.objectiveDtls.length,
(i) {
SubjectiveDtls subjective =
item.objectiveDtls[i];
return Container(
width: 20.r,
height: 20.r,
decoration: BoxDecoration(
color: Colors.transparent,
border: Border.all(
width: 1.r,
color: subjective
.state ==
0
? Color(
0xFFDDDDDD)
: subjective.state ==
3
? Color(
0xFF666666)
: subjective.state ==
1
? Color(
0xFFFF7474)
: Color(
0xFF4CC793)),
borderRadius:
BorderRadius.all(
Radius.circular(
10.r))),
child: Center(
child: Text(
subjective.questionNo,
style: TextStyle(
fontSize: 10.r,
color: subjective color: subjective
.state == .state ==
0 0
? Color( ? Color(0xFFDDDDDD)
0xFFDDDDDD)
: subjective.state == : subjective.state ==
3 3
? Color( ? Color(
@ -403,81 +543,81 @@ class _JobPersonalDetailState extends State<JobPersonalDetail>
0xFFFF7474) 0xFFFF7474)
: Color( : Color(
0xFF4CC793)), 0xFF4CC793)),
borderRadius: )),
BorderRadius.all( );
Radius.circular( }),
10.r))), ),
child: Center( )
child: Text( : Text(
subjective.questionNo, '',
style: TextStyle( style: TextStyle(
fontSize: 10.r, fontSize: 12.sp,
color: subjective color: Color(0xFF5B5B5B)),
.state ==
0
? Color(0xFFDDDDDD)
: subjective.state ==
3
? Color(
0xFF666666)
: subjective.state ==
1
? Color(
0xFFFF7474)
: Color(
0xFF4CC793)),
)),
);
}),
), ),
) ],
: Text( ),
'', SizedBox(
style: TextStyle( height: 10.r,
fontSize: 12.sp, ),
color: Color(0xFF5B5B5B)), Row(
), crossAxisAlignment: CrossAxisAlignment.start,
], children: [
), Text(
SizedBox( '主:',
height: 10.r, style: TextStyle(
), fontSize: 12.sp,
Row( color: Color(0xFF5B5B5B)),
crossAxisAlignment: CrossAxisAlignment.start, ),
children: [ SizedBox(
Text( width: 5.r,
'主:', ),
style: TextStyle( item.subjectiveDtls.length > 0
fontSize: 12.sp, ? Expanded(
color: Color(0xFF5B5B5B)), child: Wrap(
), direction: Axis.horizontal,
SizedBox( alignment: WrapAlignment.start,
width: 5.r, spacing: 8,
), runSpacing: 5,
item.subjectiveDtls.length > 0 children: List.generate(
? Expanded( item.subjectiveDtls.length,
child: Wrap( (i) {
direction: Axis.horizontal, SubjectiveDtls subjective =
alignment: WrapAlignment.start, item.subjectiveDtls[i];
spacing: 8, return Container(
runSpacing: 5, width: 20.r,
children: List.generate( height: 20.r,
item.subjectiveDtls.length, decoration: BoxDecoration(
(i) { color: Colors.transparent,
SubjectiveDtls subjective = border: Border.all(
item.subjectiveDtls[i]; width: 1.r,
return Container( color: subjective
width: 20.r, .state ==
height: 20.r, 0
decoration: BoxDecoration( ? Color(
color: Colors.transparent, 0xFFDDDDDD)
border: Border.all( : subjective.state ==
width: 1.r, 3
? Color(
0xFF666666)
: subjective.state ==
1
? Color(
0xFFFF7474)
: Color(
0xFF4CC793)),
borderRadius:
BorderRadius.all(
Radius.circular(
10.r))),
child: Center(
child: Text(
subjective.questionNo,
style: TextStyle(
fontSize: 10.r,
color: subjective color: subjective
.state == .state ==
0 0
? Color( ? Color(0xFFDDDDDD)
0xFFDDDDDD)
: subjective.state == : subjective.state ==
3 3
? Color( ? Color(
@ -488,61 +628,39 @@ class _JobPersonalDetailState extends State<JobPersonalDetail>
0xFFFF7474) 0xFFFF7474)
: Color( : Color(
0xFF4CC793)), 0xFF4CC793)),
borderRadius: )),
BorderRadius.all( );
Radius.circular( }),
10.r))), ),
child: Center( )
child: Text( : Text(
subjective.questionNo, '',
style: TextStyle( style: TextStyle(
fontSize: 10.r, fontSize: 12.sp,
color: subjective color: Color(0xFF5B5B5B)),
.state ==
0
? Color(0xFFDDDDDD)
: subjective.state ==
3
? Color(
0xFF666666)
: subjective.state ==
1
? Color(
0xFFFF7474)
: Color(
0xFF4CC793)),
)),
);
}),
), ),
) ],
: Text( ),
'', progressBar(context,
style: TextStyle( title: '客观题正确率:',
fontSize: 12.sp, color: Color(0xFF90E0BE),
color: Color(0xFF5B5B5B)), percent: item.objectiveCorrectRate / 100,
), padingEdg: EdgeInsets.zero,
], marginEdg: EdgeInsets.only(top: 8.h)),
), progressBar(context,
progressBar(context, title: '主观题正确率:',
title: '客观题正确率:', color: Color(0xFF90E0BE),
color: Color(0xFF90E0BE), percent: item.subjectiveCorrectRate / 100,
percent: item.objectiveCorrectRate / 100, padingEdg: EdgeInsets.zero,
padingEdg: EdgeInsets.zero, marginEdg: EdgeInsets.only(top: 8.h)),
marginEdg: EdgeInsets.only(top: 8.h)), progressBar(context,
progressBar(context, title: '总正确率:',
title: '主观题正确率:', color: Color(0xFF90E0BE),
color: Color(0xFF90E0BE), percent: item.correctRate / 100,
percent: item.subjectiveCorrectRate / 100, padingEdg: EdgeInsets.zero,
padingEdg: EdgeInsets.zero, marginEdg: EdgeInsets.only(top: 8.h)),
marginEdg: EdgeInsets.only(top: 8.h)), ],
progressBar(context, ),
title: '总正确率:',
color: Color(0xFF90E0BE),
percent: item.correctRate / 100,
padingEdg: EdgeInsets.zero,
marginEdg: EdgeInsets.only(top: 8.h)),
],
), ),
); );
}) })