数据快查样式修改
This commit is contained in:
parent
2ad03b6b20
commit
ee487e63bd
|
|
@ -101,6 +101,10 @@ class StudentDetails extends Object {
|
||||||
@JsonKey(name: 'unrated')
|
@JsonKey(name: 'unrated')
|
||||||
int unrated;
|
int unrated;
|
||||||
|
|
||||||
|
//全部未做
|
||||||
|
@JsonKey(name: 'allNotDone')
|
||||||
|
bool allNotDone;
|
||||||
|
|
||||||
StudentDetails(
|
StudentDetails(
|
||||||
this.studentId,
|
this.studentId,
|
||||||
this.studentName,
|
this.studentName,
|
||||||
|
|
@ -111,7 +115,7 @@ class StudentDetails extends Object {
|
||||||
this.kgDetails,
|
this.kgDetails,
|
||||||
this.zgDetails,
|
this.zgDetails,
|
||||||
this.readLevel,
|
this.readLevel,
|
||||||
[this.kgError = 0,this.kgCorrect = 0,this.zgCorrect = 0,this.zgError = 0,this.unrated = 0]
|
[this.kgError = 0,this.kgCorrect = 0,this.zgCorrect = 0,this.zgError = 0,this.unrated = 0,this.allNotDone = false]
|
||||||
);
|
);
|
||||||
|
|
||||||
factory StudentDetails.fromJson(Map<String, dynamic> srcJson) => _$StudentDetailsFromJson(srcJson);
|
factory StudentDetails.fromJson(Map<String, dynamic> srcJson) => _$StudentDetailsFromJson(srcJson);
|
||||||
|
|
|
||||||
|
|
@ -101,39 +101,39 @@ class _JobStudentGroupState extends State<JobStudentGroup> with CommonMixin {
|
||||||
children: List.generate(studentGroups.length, (index) {
|
children: List.generate(studentGroups.length, (index) {
|
||||||
JobStudentGroups item = studentGroups[index];
|
JobStudentGroups item = studentGroups[index];
|
||||||
String classNames = item.classNames.join(" ");
|
String classNames = item.classNames.join(" ");
|
||||||
return Container(
|
return InkWell(
|
||||||
padding: EdgeInsets.symmetric(horizontal: 10.r),
|
onTap: (){
|
||||||
decoration: BoxDecoration(
|
RouterManager.router.navigateTo(context, '${RouterManager.jobPriorityReviewSetPath}?&groupId=${item.groupId}',transition: getTransition());
|
||||||
borderRadius: BorderRadius.all(Radius.circular(10.r)),
|
},
|
||||||
color: Colors.white,
|
child: Container(
|
||||||
),
|
padding: EdgeInsets.symmetric(horizontal: 10.r),
|
||||||
child: Row(
|
decoration: BoxDecoration(
|
||||||
mainAxisAlignment: MainAxisAlignment.start,
|
borderRadius: BorderRadius.all(Radius.circular(10.r)),
|
||||||
children: [
|
color: Colors.white,
|
||||||
Padding(
|
),
|
||||||
padding: EdgeInsets.only(right: 8.r),
|
child: Row(
|
||||||
child: Text(
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
item.groupName,
|
children: [
|
||||||
style: TextStyle(
|
Padding(
|
||||||
fontSize: 10.sp, color: Color(0xFF6888FD)),
|
padding: EdgeInsets.only(right: 8.r),
|
||||||
),
|
child: Text(
|
||||||
),
|
item.groupName,
|
||||||
Expanded(
|
style: TextStyle(
|
||||||
child: Text(
|
fontSize: 10.sp, color: Color(0xFF6888FD)),
|
||||||
classNames,
|
|
||||||
style: TextStyle(
|
|
||||||
fontSize: 10.sp,
|
|
||||||
color: Color(0xFF999999),
|
|
||||||
overflow: TextOverflow.ellipsis,
|
|
||||||
),
|
),
|
||||||
textAlign: TextAlign.end,
|
|
||||||
),
|
),
|
||||||
),
|
Expanded(
|
||||||
InkWell(
|
child: Text(
|
||||||
onTap: (){
|
classNames,
|
||||||
RouterManager.router.navigateTo(context, '${RouterManager.jobPriorityReviewSetPath}?&groupId=${item.groupId}',transition: getTransition());
|
style: TextStyle(
|
||||||
},
|
fontSize: 10.sp,
|
||||||
child: Container(
|
color: Color(0xFF999999),
|
||||||
|
overflow: TextOverflow.ellipsis,
|
||||||
|
),
|
||||||
|
textAlign: TextAlign.end,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
margin: EdgeInsets.only(left: 5.r),
|
margin: EdgeInsets.only(left: 5.r),
|
||||||
height: 20.r,
|
height: 20.r,
|
||||||
width: 55.r,
|
width: 55.r,
|
||||||
|
|
@ -149,9 +149,9 @@ class _JobStudentGroupState extends State<JobStudentGroup> with CommonMixin {
|
||||||
fontSize: 10.sp, color: Colors.white),
|
fontSize: 10.sp, color: Colors.white),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
)
|
||||||
)
|
],
|
||||||
],
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}),
|
}),
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
import 'package:marking_app/common/mixin/common.dart';
|
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_data_report.dart';
|
import 'package:marking_app/common/model/job/job_data_report.dart';
|
||||||
|
import 'package:marking_app/pages/homework_correction/widget/quick_data_check_bottom.dart';
|
||||||
import 'package:marking_app/pages/homework_correction/widget/quick_student_data_table.dart';
|
import 'package:marking_app/pages/homework_correction/widget/quick_student_data_table.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';
|
||||||
|
|
@ -35,6 +36,8 @@ class _QuickDataCheckPageState extends State<QuickDataCheckPage>
|
||||||
with CommonMixin {
|
with CommonMixin {
|
||||||
JobDataReport? jobData;
|
JobDataReport? jobData;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
EasyLoading.show(status: 'loading...');
|
EasyLoading.show(status: 'loading...');
|
||||||
|
|
@ -58,36 +61,43 @@ class _QuickDataCheckPageState extends State<QuickDataCheckPage>
|
||||||
EasyLoading.dismiss();
|
EasyLoading.dismiss();
|
||||||
if (data.code == 200) {
|
if (data.code == 200) {
|
||||||
int totalUnrated = 0;
|
int totalUnrated = 0;
|
||||||
|
|
||||||
data.data!.studentDetails.forEach((element) {
|
data.data!.studentDetails.forEach((element) {
|
||||||
element.kgError = 0;
|
element.kgError = 0;
|
||||||
element.kgCorrect = 0;
|
element.kgCorrect = 0;
|
||||||
element.zgError = 0;
|
element.zgError = 0;
|
||||||
element.zgCorrect = 0;
|
element.zgCorrect = 0;
|
||||||
|
int num = 0;
|
||||||
element.kgDetails.forEach((item) {
|
element.kgDetails.forEach((item) {
|
||||||
if (item.state == 1) {
|
if (item.state == 0) {
|
||||||
|
num = num + 1;
|
||||||
|
}else if (item.state == 1) {
|
||||||
element.kgError = element.kgError + 1;
|
element.kgError = element.kgError + 1;
|
||||||
}
|
}else if (item.state == 2) {
|
||||||
if (item.state == 2) {
|
|
||||||
element.kgCorrect = element.kgCorrect + 1;
|
element.kgCorrect = element.kgCorrect + 1;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
element.zgDetails.forEach((item) {
|
element.zgDetails.forEach((item) {
|
||||||
if (item.state == 1) {
|
if (item.state == 0) {
|
||||||
|
num = num + 1;
|
||||||
|
}else if (item.state == 1) {
|
||||||
element.zgError = element.zgError + 1;
|
element.zgError = element.zgError + 1;
|
||||||
}
|
}else if (item.state == 2) {
|
||||||
if (item.state == 2) {
|
|
||||||
element.zgCorrect = element.zgCorrect + 1;
|
element.zgCorrect = element.zgCorrect + 1;
|
||||||
}
|
}else if (item.state == 3) {
|
||||||
if (item.state == 3) {
|
|
||||||
element.unrated = element.unrated + 1;
|
element.unrated = element.unrated + 1;
|
||||||
totalUnrated = element.unrated;
|
totalUnrated = element.unrated;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if(num == (element.kgDetails.length+ element.zgDetails.length)){
|
||||||
|
element.allNotDone = true;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
if (totalUnrated > 0) {
|
if (totalUnrated > 0) {
|
||||||
data.data!.hasUnrated = true;
|
data.data!.hasUnrated = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
setState(() {
|
setState(() {
|
||||||
jobData = data.data;
|
jobData = data.data;
|
||||||
});
|
});
|
||||||
|
|
@ -181,7 +191,7 @@ class _QuickDataCheckPageState extends State<QuickDataCheckPage>
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
SizedBox(
|
SizedBox(
|
||||||
height: 10.r,
|
height: 2.r,
|
||||||
),
|
),
|
||||||
Row(
|
Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
|
@ -225,15 +235,18 @@ class _QuickDataCheckPageState extends State<QuickDataCheckPage>
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 2.r,
|
||||||
|
),
|
||||||
//环形图
|
//环形图
|
||||||
SizedBox(
|
SizedBox(
|
||||||
height: MediaQuery.of(context).size.width * 0.5,
|
height: MediaQuery.of(context).size.width * 0.3,
|
||||||
child: PieChart(
|
child: PieChart(
|
||||||
PieChartData(
|
PieChartData(
|
||||||
borderData: FlBorderData(show: false),
|
borderData: FlBorderData(show: false),
|
||||||
sectionsSpace: 0,
|
sectionsSpace: 0,
|
||||||
centerSpaceRadius:
|
centerSpaceRadius:
|
||||||
MediaQuery.of(context).size.width * 0.1,
|
MediaQuery.of(context).size.width * 0.06,
|
||||||
sections: [
|
sections: [
|
||||||
PieChartSectionData(
|
PieChartSectionData(
|
||||||
color: Color(0xFF4CC793),
|
color: Color(0xFF4CC793),
|
||||||
|
|
@ -243,7 +256,7 @@ class _QuickDataCheckPageState extends State<QuickDataCheckPage>
|
||||||
100,
|
100,
|
||||||
radius:
|
radius:
|
||||||
MediaQuery.of(context).size.width *
|
MediaQuery.of(context).size.width *
|
||||||
0.1 +
|
0.07 +
|
||||||
5,
|
5,
|
||||||
title: '${jobData!.validCount}人',
|
title: '${jobData!.validCount}人',
|
||||||
titleStyle: TextStyle(
|
titleStyle: TextStyle(
|
||||||
|
|
@ -259,7 +272,7 @@ class _QuickDataCheckPageState extends State<QuickDataCheckPage>
|
||||||
100,
|
100,
|
||||||
radius:
|
radius:
|
||||||
MediaQuery.of(context).size.width *
|
MediaQuery.of(context).size.width *
|
||||||
0.1,
|
0.07,
|
||||||
title: '${jobData!.noAnswerCount}人',
|
title: '${jobData!.noAnswerCount}人',
|
||||||
titleStyle: TextStyle(
|
titleStyle: TextStyle(
|
||||||
fontSize: 14.sp,
|
fontSize: 14.sp,
|
||||||
|
|
@ -350,164 +363,7 @@ class _QuickDataCheckPageState extends State<QuickDataCheckPage>
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
Container(
|
QuickDataCheckBottom(jobData:jobData,jobId: widget.jobId,),
|
||||||
padding: EdgeInsets.symmetric(
|
|
||||||
vertical: 10.r, horizontal: 10.r),
|
|
||||||
margin: EdgeInsets.symmetric(
|
|
||||||
vertical: 10.r, horizontal: 14.r),
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
color: Colors.white,
|
|
||||||
borderRadius:
|
|
||||||
BorderRadius.all(Radius.circular(6.r))),
|
|
||||||
child: Column(
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
|
||||||
children: [
|
|
||||||
Row(
|
|
||||||
mainAxisAlignment: MainAxisAlignment.start,
|
|
||||||
children: [
|
|
||||||
InkWell(
|
|
||||||
onTap: (){
|
|
||||||
if (jobData == null) return;
|
|
||||||
if (!jobData!.sortType) {
|
|
||||||
jobData!.studentDetails.sort((a, b) {
|
|
||||||
int num1 =
|
|
||||||
a.kgValidRate + a.zgValidRate;
|
|
||||||
int num2 =
|
|
||||||
b.kgValidRate + b.zgValidRate;
|
|
||||||
return num2.compareTo(num1);
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
jobData!.studentDetails.sort((a, b) {
|
|
||||||
int num1 =
|
|
||||||
a.kgValidRate + a.zgValidRate;
|
|
||||||
int num2 =
|
|
||||||
b.kgValidRate + b.zgValidRate;
|
|
||||||
return num1.compareTo(num2);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
jobData!.sortType = !jobData!.sortType;
|
|
||||||
|
|
||||||
setState(() {
|
|
||||||
jobData!.sortLevel = false;
|
|
||||||
jobData!.studentDetails;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
child: Row(
|
|
||||||
children: [
|
|
||||||
if(!jobData!.sortType)
|
|
||||||
Image.asset(
|
|
||||||
'assets/images/no_check_icon.png',
|
|
||||||
width: 16.r,
|
|
||||||
height: 16.r,
|
|
||||||
),
|
|
||||||
if(jobData!.sortType)
|
|
||||||
Image.asset(
|
|
||||||
'assets/images/check_icon.png',
|
|
||||||
width: 16.r,
|
|
||||||
height: 16.r,
|
|
||||||
),
|
|
||||||
SizedBox(width: 5.r,),
|
|
||||||
Text(
|
|
||||||
'未提交排序',
|
|
||||||
style: TextStyle(
|
|
||||||
fontSize: 12.sp,
|
|
||||||
color: Color(0xFF707070)),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
SizedBox(
|
|
||||||
width: 20.r,
|
|
||||||
),
|
|
||||||
|
|
||||||
InkWell(
|
|
||||||
onTap: (){
|
|
||||||
if (jobData == null) return;
|
|
||||||
if (!jobData!.sortLevel) {
|
|
||||||
jobData!.studentDetails.sort((a, b) {
|
|
||||||
return a.readLevel!
|
|
||||||
.compareTo(b.readLevel!);
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
jobData!.studentDetails.sort((a, b) {
|
|
||||||
return b.readLevel!
|
|
||||||
.compareTo(a.readLevel!);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
jobData!.sortLevel =
|
|
||||||
!jobData!.sortLevel;
|
|
||||||
setState(() {
|
|
||||||
jobData!.sortType = false;
|
|
||||||
jobData!.studentDetails;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
child: Row(
|
|
||||||
children: [
|
|
||||||
if(!jobData!.sortLevel)
|
|
||||||
Image.asset(
|
|
||||||
'assets/images/no_check_icon.png',
|
|
||||||
width: 16.r,
|
|
||||||
height: 16.r,
|
|
||||||
),
|
|
||||||
if(jobData!.sortLevel)
|
|
||||||
Image.asset(
|
|
||||||
'assets/images/check_icon.png',
|
|
||||||
width: 16.r,
|
|
||||||
height: 16.r,
|
|
||||||
),
|
|
||||||
SizedBox(width: 5.r,),
|
|
||||||
Text(
|
|
||||||
'未批阅排序',
|
|
||||||
style: TextStyle(
|
|
||||||
fontSize: 12.sp,
|
|
||||||
color: Color(0xFF707070)),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
|
|
||||||
],
|
|
||||||
),
|
|
||||||
SizedBox(
|
|
||||||
height: 10.r,
|
|
||||||
),
|
|
||||||
Text(
|
|
||||||
'注:绿色代表正确,红色代表错误,白色代表已作答未批阅,灰色代表未做',
|
|
||||||
style: TextStyle(
|
|
||||||
fontSize: 8.sp, color: Color(0xFF717171)),
|
|
||||||
),
|
|
||||||
SizedBox(
|
|
||||||
height: 5.r,
|
|
||||||
),
|
|
||||||
SizedBox(
|
|
||||||
height: jobData!.studentDetails.length > 5
|
|
||||||
? 350.r
|
|
||||||
: jobData!.studentDetails.length * 50.r +
|
|
||||||
40.r,
|
|
||||||
child: QuickStudentDataTable(
|
|
||||||
headList: [
|
|
||||||
'学生姓名',
|
|
||||||
'客观题',
|
|
||||||
'主观题',
|
|
||||||
'客观题详情',
|
|
||||||
'主观题详情',
|
|
||||||
'未批阅'
|
|
||||||
],
|
|
||||||
bodyList: jobData!.studentDetails,
|
|
||||||
jobId: widget.jobId,
|
|
||||||
fixedRows: 1,
|
|
||||||
fixedCols: 0,
|
|
||||||
hasUnrated: jobData!.hasUnrated,
|
|
||||||
kgCount: jobData!.kgQuestionCount,
|
|
||||||
zgCount: jobData!.zgQuestionCount,
|
|
||||||
),
|
|
||||||
)
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
))
|
))
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,266 @@
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
|
import 'package:marking_app/common/model/job/job_data_report.dart';
|
||||||
|
import 'package:marking_app/pages/homework_correction/widget/quick_student_data_table.dart';
|
||||||
|
|
||||||
|
class QuickDataCheckBottom extends StatefulWidget {
|
||||||
|
final int jobId;
|
||||||
|
final JobDataReport? jobData;
|
||||||
|
const QuickDataCheckBottom({Key? key,required this.jobId,required this.jobData}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<QuickDataCheckBottom> createState() => _QuickDataCheckBottomState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _QuickDataCheckBottomState extends State<QuickDataCheckBottom> {
|
||||||
|
List<StudentDetails> showList = [];
|
||||||
|
List<StudentDetails> followList = [];
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
showList =widget.jobData!.studentDetails;
|
||||||
|
widget.jobData!.studentDetails.forEach((e) {
|
||||||
|
if(e.readLevel == 1){
|
||||||
|
followList.add(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Container(
|
||||||
|
padding: EdgeInsets.symmetric(
|
||||||
|
vertical: 10.r, horizontal: 10.r),
|
||||||
|
margin: EdgeInsets.symmetric(
|
||||||
|
vertical: 10.r, horizontal: 14.r),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.white,
|
||||||
|
borderRadius:
|
||||||
|
BorderRadius.all(Radius.circular(6.r))),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
InkWell(
|
||||||
|
onTap: (){
|
||||||
|
if (widget.jobData == null) return;
|
||||||
|
if (!widget.jobData!.sortType) {
|
||||||
|
widget.jobData!.studentDetails.sort((a, b) {
|
||||||
|
int num1 =
|
||||||
|
a.kgValidRate + a.zgValidRate;
|
||||||
|
int num2 =
|
||||||
|
b.kgValidRate + b.zgValidRate;
|
||||||
|
return num2.compareTo(num1);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
widget.jobData!.studentDetails.sort((a, b) {
|
||||||
|
int num1 =
|
||||||
|
a.kgValidRate + a.zgValidRate;
|
||||||
|
int num2 =
|
||||||
|
b.kgValidRate + b.zgValidRate;
|
||||||
|
return num1.compareTo(num2);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
widget.jobData!.sortType = !widget.jobData!.sortType;
|
||||||
|
|
||||||
|
setState(() {
|
||||||
|
widget.jobData!.sortLevel = false;
|
||||||
|
showList = widget.jobData!.studentDetails;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
if(!widget.jobData!.sortType)
|
||||||
|
Image.asset(
|
||||||
|
'assets/images/no_check_icon.png',
|
||||||
|
width: 16.r,
|
||||||
|
height: 16.r,
|
||||||
|
),
|
||||||
|
if(widget.jobData!.sortType)
|
||||||
|
Image.asset(
|
||||||
|
'assets/images/check_icon.png',
|
||||||
|
width: 16.r,
|
||||||
|
height: 16.r,
|
||||||
|
),
|
||||||
|
SizedBox(width: 5.r,),
|
||||||
|
Text(
|
||||||
|
widget.jobData!.sortType?'已提交排序':'未提交排序',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 12.sp,
|
||||||
|
color: Color(0xFF707070)),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
|
||||||
|
SizedBox(
|
||||||
|
width: 20.r,
|
||||||
|
),
|
||||||
|
|
||||||
|
InkWell(
|
||||||
|
onTap: (){
|
||||||
|
if (widget.jobData == null) return;
|
||||||
|
if (!widget.jobData!.sortLevel) {
|
||||||
|
showList = followList;
|
||||||
|
setState(() {
|
||||||
|
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
widget.jobData!.studentDetails.sort((a, b) {
|
||||||
|
int num1 =
|
||||||
|
a.kgValidRate + a.zgValidRate;
|
||||||
|
int num2 =
|
||||||
|
b.kgValidRate + b.zgValidRate;
|
||||||
|
return num1.compareTo(num2);
|
||||||
|
});
|
||||||
|
showList = widget.jobData!.studentDetails;
|
||||||
|
setState(() {
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
widget.jobData!.sortLevel =
|
||||||
|
!widget.jobData!.sortLevel;
|
||||||
|
setState(() {
|
||||||
|
widget.jobData!.sortType = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
child: Row(
|
||||||
|
children: [
|
||||||
|
if(!widget.jobData!.sortLevel)
|
||||||
|
Image.asset(
|
||||||
|
'assets/images/no_check_icon.png',
|
||||||
|
width: 16.r,
|
||||||
|
height: 16.r,
|
||||||
|
),
|
||||||
|
if(widget.jobData!.sortLevel)
|
||||||
|
Image.asset(
|
||||||
|
'assets/images/check_icon.png',
|
||||||
|
width: 16.r,
|
||||||
|
height: 16.r,
|
||||||
|
),
|
||||||
|
SizedBox(width: 5.r,),
|
||||||
|
Text(
|
||||||
|
'看关注学生',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 12.sp,
|
||||||
|
color: Color(0xFF707070)),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 10.r,
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
'注:',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 8.sp, color: Color(0xFF717171)),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
width:10.r,
|
||||||
|
height: 10.r,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.all(Radius.circular(5.r)),
|
||||||
|
color: Color(0xFF4CC793),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(width: 2.r,),
|
||||||
|
Text(
|
||||||
|
'正确',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 8.sp, color: Color(0xFF717171)),
|
||||||
|
),
|
||||||
|
SizedBox(width: 15.r,),
|
||||||
|
Container(
|
||||||
|
width:10.r,
|
||||||
|
height: 10.r,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.all(Radius.circular(5.r)),
|
||||||
|
color: Color(0xFFFF7474),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(width: 2.r,),
|
||||||
|
Text(
|
||||||
|
'错误',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 8.sp, color: Color(0xFF717171)),
|
||||||
|
),
|
||||||
|
SizedBox(width: 15.r,),
|
||||||
|
Container(
|
||||||
|
width:10.r,
|
||||||
|
height: 10.r,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.all(Radius.circular(5.r)),
|
||||||
|
color: Colors.white,
|
||||||
|
// 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(0xFF717171)),
|
||||||
|
),
|
||||||
|
SizedBox(width: 15.r,),
|
||||||
|
Container(
|
||||||
|
width:10.r,
|
||||||
|
height: 10.r,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.all(Radius.circular(5.r)),
|
||||||
|
color: Color(0xFFD3D3D3),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(width: 2.r,),
|
||||||
|
Text(
|
||||||
|
'未做',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 8.sp, color: Color(0xFF717171)),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 5.r,
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: showList.length > 5
|
||||||
|
? 350.r
|
||||||
|
: showList.length * 50.r +
|
||||||
|
40.r,
|
||||||
|
child: QuickStudentDataTable(
|
||||||
|
headList: [
|
||||||
|
'学生姓名',
|
||||||
|
'客观题',
|
||||||
|
'主观题',
|
||||||
|
'客观题状态',
|
||||||
|
'主观题状态',
|
||||||
|
'未批阅'
|
||||||
|
],
|
||||||
|
bodyList: showList,
|
||||||
|
jobId: widget.jobId,
|
||||||
|
fixedRows: 1,
|
||||||
|
fixedCols: 0,
|
||||||
|
// hasUnrated: widget.jobData!.hasUnrated,
|
||||||
|
hasUnrated: false,
|
||||||
|
kgCount: widget.jobData!.kgQuestionCount,
|
||||||
|
zgCount: widget.jobData!.zgQuestionCount,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -38,8 +38,8 @@ class _QuickStudentDataTableState extends State<QuickStudentDataTable> {
|
||||||
|
|
||||||
DataRow _getRow(int index, [Color? color]) {
|
DataRow _getRow(int index, [Color? color]) {
|
||||||
assert(index >= 0);
|
assert(index >= 0);
|
||||||
StudentDetails item = widget.bodyList[index];
|
StudentDetails item = widget.bodyList[index];
|
||||||
int num = 0;
|
/* int num = 0;
|
||||||
int total = 0;
|
int total = 0;
|
||||||
item.kgDetails.forEach((element) {
|
item.kgDetails.forEach((element) {
|
||||||
if (element.state == 0) {
|
if (element.state == 0) {
|
||||||
|
|
@ -52,11 +52,11 @@ class _QuickStudentDataTableState extends State<QuickStudentDataTable> {
|
||||||
num = num + 1;
|
num = num + 1;
|
||||||
}
|
}
|
||||||
total = total + 1;
|
total = total + 1;
|
||||||
});
|
});*/
|
||||||
return DataRow2.byIndex(
|
return DataRow2.byIndex(
|
||||||
index: index,
|
index: index,
|
||||||
color: color != null
|
color: color != null
|
||||||
? num == total
|
? item.allNotDone
|
||||||
? MaterialStateProperty.all(Color(0xFFFFD79C))
|
? MaterialStateProperty.all(Color(0xFFFFD79C))
|
||||||
: MaterialStateProperty.all(color)
|
: MaterialStateProperty.all(color)
|
||||||
: null,
|
: null,
|
||||||
|
|
@ -137,7 +137,7 @@ class _QuickStudentDataTableState extends State<QuickStudentDataTable> {
|
||||||
child: SingleChildScrollView(
|
child: SingleChildScrollView(
|
||||||
child: Wrap(
|
child: Wrap(
|
||||||
direction: Axis.horizontal,
|
direction: Axis.horizontal,
|
||||||
alignment: WrapAlignment.center,
|
alignment: WrapAlignment.start,
|
||||||
spacing: 2,
|
spacing: 2,
|
||||||
runSpacing: 2,
|
runSpacing: 2,
|
||||||
children: List.generate(item.kgDetails.length, (index) {
|
children: List.generate(item.kgDetails.length, (index) {
|
||||||
|
|
@ -157,7 +157,7 @@ class _QuickStudentDataTableState extends State<QuickStudentDataTable> {
|
||||||
kgInfo.questionNo,
|
kgInfo.questionNo,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 10.sp,
|
fontSize: 10.sp,
|
||||||
color: kgInfo.state == 0
|
color: kgInfo.state == 3
|
||||||
? Color(0xFF525252)
|
? Color(0xFF525252)
|
||||||
: Colors.white),
|
: Colors.white),
|
||||||
)),
|
)),
|
||||||
|
|
@ -172,7 +172,7 @@ class _QuickStudentDataTableState extends State<QuickStudentDataTable> {
|
||||||
child: SingleChildScrollView(
|
child: SingleChildScrollView(
|
||||||
child: Wrap(
|
child: Wrap(
|
||||||
direction: Axis.horizontal,
|
direction: Axis.horizontal,
|
||||||
alignment: WrapAlignment.center,
|
alignment: WrapAlignment.start,
|
||||||
spacing: 2,
|
spacing: 2,
|
||||||
runSpacing: 2,
|
runSpacing: 2,
|
||||||
children: List.generate(item.zgDetails.length, (index) {
|
children: List.generate(item.zgDetails.length, (index) {
|
||||||
|
|
@ -192,7 +192,7 @@ class _QuickStudentDataTableState extends State<QuickStudentDataTable> {
|
||||||
kgInfo.questionNo,
|
kgInfo.questionNo,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 10.sp,
|
fontSize: 10.sp,
|
||||||
color: kgInfo.state == 0
|
color: kgInfo.state == 3
|
||||||
? Color(0xFF525252)
|
? Color(0xFF525252)
|
||||||
: Colors.white),
|
: Colors.white),
|
||||||
)),
|
)),
|
||||||
|
|
@ -234,17 +234,7 @@ class _QuickStudentDataTableState extends State<QuickStudentDataTable> {
|
||||||
verticalInside: BorderSide(
|
verticalInside: BorderSide(
|
||||||
width: 1, color: Colors.white, style: BorderStyle.solid)),
|
width: 1, color: Colors.white, style: BorderStyle.solid)),
|
||||||
headingRowColor: MaterialStateProperty.resolveWith((states) =>
|
headingRowColor: MaterialStateProperty.resolveWith((states) =>
|
||||||
widget.fixedCols! > 0 ? Colors.white : Colors.transparent),
|
widget.fixedCols! > 0 ? Colors.white : Colors.transparent),
|
||||||
/* headingRowDecoration: BoxDecoration(
|
|
||||||
gradient: LinearGradient(
|
|
||||||
colors: [
|
|
||||||
Colors.grey[400]!,
|
|
||||||
Colors.grey[200]!,
|
|
||||||
],
|
|
||||||
begin: Alignment.topCenter,
|
|
||||||
end: Alignment.bottomCenter,
|
|
||||||
),
|
|
||||||
),*/
|
|
||||||
headingRowDecoration: BoxDecoration(color: Color(0xFFE6E6E6)),
|
headingRowDecoration: BoxDecoration(color: Color(0xFFE6E6E6)),
|
||||||
fixedColumnsColor: Color(0xFFE6E6E6),
|
fixedColumnsColor: Color(0xFFE6E6E6),
|
||||||
fixedCornerColor: Colors.grey[400],
|
fixedCornerColor: Colors.grey[400],
|
||||||
|
|
@ -258,20 +248,20 @@ class _QuickStudentDataTableState extends State<QuickStudentDataTable> {
|
||||||
var item = widget.headList[index];
|
var item = widget.headList[index];
|
||||||
return index == 1?DataColumn2(
|
return index == 1?DataColumn2(
|
||||||
label: Row(
|
label: Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
crossAxisAlignment: CrossAxisAlignment.center,
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
Text(item,
|
Text(item,
|
||||||
style: TextStyle(fontSize: 12.sp, color: Color(0xFF505767))),
|
style: TextStyle(fontSize: 12.sp, color: Color(0xFF505767))),
|
||||||
Text('(${widget.kgCount})',
|
Text('(${widget.kgCount})',
|
||||||
style: TextStyle(fontSize: 10.sp, color: Color(0xFF505767))),
|
style: TextStyle(fontSize: 10.sp, color: Color(0xFF505767))),
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
// size: ColumnSize.S,
|
// size: ColumnSize.S,
|
||||||
fixedWidth: (MediaQuery.of(context).size.width - 20.r - 28.r) / widget.headList.length,
|
fixedWidth: (MediaQuery.of(context).size.width - 20.r - 28.r) / widget.headList.length,
|
||||||
):index == 2?DataColumn2(
|
):index == 2?DataColumn2(
|
||||||
label: Row(
|
label: Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
crossAxisAlignment: CrossAxisAlignment.center,
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
Text(item,
|
Text(item,
|
||||||
|
|
@ -292,6 +282,6 @@ class _QuickStudentDataTableState extends State<QuickStudentDataTable> {
|
||||||
);
|
);
|
||||||
}),
|
}),
|
||||||
rows: List<DataRow>.generate(widget.bodyList.length,
|
rows: List<DataRow>.generate(widget.bodyList.length,
|
||||||
(index) => _getRow(index, Color(0xFFF5F5F5))));
|
(index) => _getRow(index, Color(0xFFF5F5F5))));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -157,9 +157,6 @@ class _ReportTableState extends State<ReportTable> {
|
||||||
var obj = {'noAnswerStudentNames':'-','answerNgStudentNames':answerNgStudentNames[i]};
|
var obj = {'noAnswerStudentNames':'-','answerNgStudentNames':answerNgStudentNames[i]};
|
||||||
list.add(obj);
|
list.add(obj);
|
||||||
}
|
}
|
||||||
print('list.length=${list.length}');
|
|
||||||
print('noAnswerStudentNames.length=${noAnswerStudentNames.length}');
|
|
||||||
print('answerNgStudentNames.length=${answerNgStudentNames.length}');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
showPeopleListDialog(context:context, title:title, questionNo:questionNo,arr:list,dcList:[]);
|
showPeopleListDialog(context:context, title:title, questionNo:questionNo,arr:list,dcList:[]);
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,9 @@ class _StudentKgTableState extends State<StudentKgTable> {
|
||||||
int? _sortColumnIndex;
|
int? _sortColumnIndex;
|
||||||
bool _sortAscending = true;
|
bool _sortAscending = true;
|
||||||
|
|
||||||
|
String sortString(String str) {
|
||||||
|
return String.fromCharCodes(str.codeUnits.toList()..sort());
|
||||||
|
}
|
||||||
DataRow _getRow(int index, [Color? color]) {
|
DataRow _getRow(int index, [Color? color]) {
|
||||||
assert(index >= 0);
|
assert(index >= 0);
|
||||||
KgDetails item = widget.bodyList[index];
|
KgDetails item = widget.bodyList[index];
|
||||||
|
|
@ -44,9 +47,11 @@ class _StudentKgTableState extends State<StudentKgTable> {
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: EdgeInsets.symmetric(horizontal: 5.r),
|
padding: EdgeInsets.symmetric(horizontal: 5.r),
|
||||||
child: Text(item.studentAnswer == null?'未作答':item.studentAnswer!,
|
child: Text(item.studentAnswer == null?'未作答':item.studentAnswer!,
|
||||||
style: TextStyle(fontSize: 12.sp, color: Color(0xFF525252))),
|
style: TextStyle(fontSize: 12.sp, color: item.studentAnswer == null?Color(0xFF525252):
|
||||||
|
item.state == 2?Color(0xFF4CC793):
|
||||||
|
item.state == 1?Color(0xFFFF7474):item.state == 0?Color(0xFFD3D3D3):Colors.white),
|
||||||
),
|
),
|
||||||
)),
|
))),
|
||||||
DataCell(Center(
|
DataCell(Center(
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: EdgeInsets.symmetric(horizontal: 5.r),
|
padding: EdgeInsets.symmetric(horizontal: 5.r),
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
import 'package:marking_app/common/model/job/job_data_report.dart';
|
import 'package:marking_app/common/model/job/job_data_report.dart';
|
||||||
import 'package:marking_app/utils/easy_refresh/MyEmptyWidget.dart';
|
import 'package:marking_app/utils/easy_refresh/MyEmptyWidget.dart';
|
||||||
|
import 'package:photo_view/photo_view.dart';
|
||||||
|
|
||||||
class StudentZgTable extends StatefulWidget {
|
class StudentZgTable extends StatefulWidget {
|
||||||
final List headList;
|
final List headList;
|
||||||
|
|
@ -28,31 +29,38 @@ class _StudentZgTableState extends State<StudentZgTable> {
|
||||||
bool _sortAscending = true;
|
bool _sortAscending = true;
|
||||||
|
|
||||||
void showImgDialog(BuildContext context,String imgUrl){
|
void showImgDialog(BuildContext context,String imgUrl){
|
||||||
showDialog(context: context, builder: (BuildContext context){
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(builder: (_) {
|
||||||
|
return Scaffold(
|
||||||
|
appBar: AppBar(),
|
||||||
|
body: SizedBox(
|
||||||
|
/* width: MediaQuery.of(context).size.width * 0.6,
|
||||||
|
height: MediaQuery.of(context).size.height * 0.6,*/
|
||||||
|
child: PhotoView(
|
||||||
|
imageProvider:
|
||||||
|
NetworkImage(imgUrl)),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
/* showDialog(context: context, builder: (BuildContext context){
|
||||||
return AlertDialog(
|
return AlertDialog(
|
||||||
// insetPadding: EdgeInsets.symmetric(vertical: 20.r,horizontal: 20.r),
|
// insetPadding: EdgeInsets.symmetric(vertical: 20.r,horizontal: 20.r),
|
||||||
|
backgroundColor:Colors.transparent,
|
||||||
contentPadding: EdgeInsets.all(20.r),
|
contentPadding: EdgeInsets.all(20.r),
|
||||||
shape: RoundedRectangleBorder(
|
shape: RoundedRectangleBorder(
|
||||||
borderRadius: BorderRadius.all(Radius.circular(15.r))),
|
borderRadius: BorderRadius.all(Radius.circular(15.r))),
|
||||||
content: SizedBox(
|
content: Container(
|
||||||
|
color: Colors.transparent,
|
||||||
width: MediaQuery.of(context).size.width * 0.6,
|
width: MediaQuery.of(context).size.width * 0.6,
|
||||||
height: MediaQuery.of(context).size.height * 0.6,
|
height: MediaQuery.of(context).size.height * 0.6,
|
||||||
child: Column(
|
child: PhotoView(
|
||||||
children: [
|
imageProvider:
|
||||||
Center(
|
NetworkImage(imgUrl)),
|
||||||
child: Text('批注答案',style: TextStyle(fontSize: 15.sp,color: Color(0xFF3C3C3C),fontWeight: FontWeight.w500),),
|
|
||||||
),
|
|
||||||
SizedBox(height: 10.r,),
|
|
||||||
Image.network(imgUrl,fit: BoxFit.cover, errorBuilder: (context, error, stackTrace) {
|
|
||||||
return Padding(
|
|
||||||
padding: EdgeInsets.only(top: 20.r),
|
|
||||||
child: const MyEmptyWidget());
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
});
|
});*/
|
||||||
}
|
}
|
||||||
|
|
||||||
DataRow _getRow(int index, [Color? color]) {
|
DataRow _getRow(int index, [Color? color]) {
|
||||||
|
|
@ -80,8 +88,8 @@ class _StudentZgTableState extends State<StudentZgTable> {
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: EdgeInsets.symmetric(horizontal: 5.r),
|
padding: EdgeInsets.symmetric(horizontal: 5.r),
|
||||||
child: item.state == 2?
|
child: item.state == 2?
|
||||||
Image.asset('assets/images/job_personal_correct_icon.png',width: 18.r,height: 18.r,):
|
Image.asset('assets/images/job_personal_correct_icon.png',width: 18.r,height: 18.r,):item.state == 1?
|
||||||
Image.asset('assets/images/job_personal_error_icon.png',width: 10.r,height: 10.r,),
|
Image.asset('assets/images/job_personal_error_icon.png',width: 10.r,height: 10.r,):Text('', style: TextStyle(fontSize: 12.sp, color: Color(0xFF525252))),
|
||||||
),
|
),
|
||||||
)),
|
)),
|
||||||
DataCell(InkWell(
|
DataCell(InkWell(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue