Compare commits

..

3 Commits

Author SHA1 Message Date
machuanyu 290d4efddf 入参优化 2024-03-14 13:46:27 +08:00
machuanyu e0814ba901 Merge branch 'main' into mcy_revision 2024-03-14 10:23:14 +08:00
1147192855@qq.com 52321c54d0 进入收藏页面 处理页面中文传值问题 2024-03-14 09:59:28 +08:00
6 changed files with 456 additions and 358 deletions

View File

@ -67,10 +67,10 @@ class Items extends Object {
String className; String className;
@JsonKey(name: 'questionPage') @JsonKey(name: 'questionPage')
int questionPage; int? questionPage;
@JsonKey(name: 'questionPicture') @JsonKey(name: 'questionPicture')
String questionPicture; String? questionPicture;
@JsonKey(name: 'createTime') @JsonKey(name: 'createTime')
String createTime; String createTime;

View File

@ -12,7 +12,10 @@ class FavoriteStudentDialog extends StatefulWidget {
final Function deleteFav; final Function deleteFav;
const FavoriteStudentDialog( const FavoriteStudentDialog(
{Key? key, required this.item, required this.group,required this.deleteFav}) {Key? key,
required this.item,
required this.group,
required this.deleteFav})
: super(key: key); : super(key: key);
@override @override
@ -26,7 +29,6 @@ class _FavoriteStudentDialogState extends State<FavoriteStudentDialog> {
late Items currentStudent; late Items currentStudent;
void initState() { void initState() {
pageController = PageController(initialPage: defaultIndex);
currentStudent = widget.item; currentStudent = widget.item;
List<Items> list = []; List<Items> list = [];
widget.group.forEach((element) { widget.group.forEach((element) {
@ -38,6 +40,7 @@ class _FavoriteStudentDialogState extends State<FavoriteStudentDialog> {
imageList = list; imageList = list;
defaultIndex = list.indexWhere((element) => element.id == widget.item.id); defaultIndex = list.indexWhere((element) => element.id == widget.item.id);
}); });
pageController = PageController(initialPage: defaultIndex);
} }
void dispose() { void dispose() {
@ -66,13 +69,25 @@ class _FavoriteStudentDialogState extends State<FavoriteStudentDialog> {
style: TextStyle(fontSize: 12.sp, color: Color(0xFF868686)), style: TextStyle(fontSize: 12.sp, color: Color(0xFF868686)),
), ),
InkWell( InkWell(
onTap: (){ onTap: () {
widget.deleteFav(currentStudent);
imageList.removeAt(defaultIndex);
setState(() {
});
widget.deleteFav(currentStudent);
imageList.removeAt(defaultIndex);
print('imageList.length=${imageList.length}');
print('defaultIndex=${defaultIndex}');
setState(() {
if (imageList.length > 0) {
if (defaultIndex < imageList.length) {
currentStudent = imageList[defaultIndex];
} else {
currentStudent = imageList[defaultIndex - 1];
defaultIndex = defaultIndex - 1;
}
} else {
currentStudent.className = '';
currentStudent.studentName = '';
}
});
}, },
child: Padding( child: Padding(
padding: EdgeInsets.symmetric(horizontal: 8.r), padding: EdgeInsets.symmetric(horizontal: 8.r),
@ -98,107 +113,108 @@ class _FavoriteStudentDialogState extends State<FavoriteStudentDialog> {
SizedBox( SizedBox(
height: 10.r, height: 10.r,
), ),
imageList.length>0? imageList.length > 0
Expanded( ? Expanded(
child: Container( child: Container(
color: Colors.white, color: Colors.white,
width: MediaQuery.of(context).size.width, width: MediaQuery.of(context).size.width,
child: PhotoViewGallery.builder( child: PhotoViewGallery.builder(
scrollPhysics: const BouncingScrollPhysics(), scrollPhysics: const BouncingScrollPhysics(),
builder: (BuildContext context, int index) { builder: (BuildContext context, int index) {
final Items item = imageList[index]; final Items item = imageList[index];
return PhotoViewGalleryPageOptions( return PhotoViewGalleryPageOptions(
imageProvider: NetworkImage(item.questionPicture), imageProvider: NetworkImage(item.questionPicture!),
heroAttributes: PhotoViewHeroAttributes(tag: item.id), heroAttributes: PhotoViewHeroAttributes(tag: item.id),
); );
}, },
itemCount: imageList.length, itemCount: imageList.length,
pageController: pageController, pageController: pageController,
onPageChanged: (index) { onPageChanged: (index) {
setState(() { setState(() {
defaultIndex = index; defaultIndex = index;
currentStudent = imageList[index]; currentStudent = imageList[index];
}); });
}, },
scrollDirection: Axis.horizontal, scrollDirection: Axis.horizontal,
),
),
)
: Padding(
padding: EdgeInsets.only(
top: MediaQuery.of(context).size.height / 2 - 200.r),
child: MyEmptyWidget(),
),
if (imageList.length > 0)
Padding(
padding: EdgeInsets.symmetric(vertical: 15.r),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
InkWell(
onTap: () {
if (defaultIndex > 0) {
setState(() {
defaultIndex = defaultIndex - 1;
pageController.jumpToPage(defaultIndex);
});
}
},
child: Container(
width:
(MediaQuery.of(context).size.width - 78.r) / 2 - 10.r,
height: 28.r,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(6.r)),
border: Border.all(
width: 1.r,
color: Color(0xFFCACACA),
style: BorderStyle.solid),
),
child: Center(
child: Text(
'上一页',
style: TextStyle(
fontSize: 10.r,
color: defaultIndex == 0
? Color(0xFFCACACA)
: Color(0xFF505E6E)),
)),
),
),
InkWell(
onTap: () {
if (defaultIndex < imageList.length - 1) {
setState(() {
defaultIndex = defaultIndex + 1;
pageController.jumpToPage(defaultIndex);
});
}
},
child: Container(
width:
(MediaQuery.of(context).size.width - 78.r) / 2 - 10.r,
height: 28.r,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(6.r)),
border: Border.all(
width: 1.r,
color: Color(0xFFCACACA),
style: BorderStyle.solid),
),
child: Center(
child: Text(
'下一页',
style: TextStyle(
fontSize: 10.r,
color: defaultIndex == imageList.length - 1
? Color(0xFFCACACA)
: Color(0xFF505E6E)),
)),
),
),
],
), ),
), )
):Padding(
padding: EdgeInsets.only(top: MediaQuery.of(context).size.height/2 - 200.r),
child: MyEmptyWidget(),
),
if(imageList.length>0)
Padding(
padding: EdgeInsets.symmetric(vertical: 15.r),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
InkWell(
onTap: () {
if (defaultIndex > 0) {
setState(() {
defaultIndex = defaultIndex - 1;
pageController.jumpToPage(defaultIndex);
});
}
},
child: Container(
width:
(MediaQuery.of(context).size.width - 78.r) / 2 - 10.r,
height: 28.r,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(6.r)),
border: Border.all(
width: 1.r,
color: Color(0xFFCACACA),
style: BorderStyle.solid),
),
child: Center(
child: Text(
'上一页',
style: TextStyle(
fontSize: 10.r,
color: defaultIndex == 0
? Color(0xFFCACACA)
: Color(0xFF505E6E)),
)),
),
),
InkWell(
onTap: () {
if (defaultIndex < imageList.length - 1) {
setState(() {
defaultIndex = defaultIndex + 1;
pageController.jumpToPage(defaultIndex);
});
}
},
child: Container(
width:
(MediaQuery.of(context).size.width - 78.r) / 2 - 10.r,
height: 28.r,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(6.r)),
border: Border.all(
width: 1.r,
color: Color(0xFFCACACA),
style: BorderStyle.solid),
),
child: Center(
child: Text(
'下一页',
style: TextStyle(
fontSize: 10.r,
color: defaultIndex == imageList.length - 1
? Color(0xFFCACACA)
: Color(0xFF505E6E)),
)),
),
),
],
),
)
], ],
), ),
); );

View File

@ -19,16 +19,16 @@ part 'job_favorite.g.dart';
/// ///
class JobFavorite extends StatefulWidget { class JobFavorite extends StatefulWidget {
final int jobId; final int jobId;
final int schoolId; final int? schoolId;
final int gradeId; final int? gradeId;
final String className; final String? className;
final String jobName; final String jobName;
const JobFavorite({ const JobFavorite({
required this.jobId, required this.jobId,
required this.schoolId, this.schoolId,
required this.gradeId, this.gradeId,
required this.className, this.className,
required this.jobName, required this.jobName,
super.key, super.key,
}); });
@ -43,6 +43,7 @@ class _JobFavoriteState extends State<JobFavorite> with CommonMixin {
JobReportJoinClass? classData; JobReportJoinClass? classData;
late String loginName; late String loginName;
final int pageSize = 100; final int pageSize = 100;
String className = '-1';
@override @override
void initState() { void initState() {
@ -55,6 +56,10 @@ class _JobFavoriteState extends State<JobFavorite> with CommonMixin {
loginName = userInfo['loginName']; loginName = userInfo['loginName'];
}); });
});*/ });*/
if(widget.className != null){
className = widget.className!;
}
getInvolveClasses(); getInvolveClasses();
_future = getData(); _future = getData();
} }
@ -62,7 +67,7 @@ class _JobFavoriteState extends State<JobFavorite> with CommonMixin {
Future<List<Items>> getData() async { Future<List<Items>> getData() async {
var _client = await getClient(); var _client = await getClient();
var result = var result =
await _client.getListOfJobFavorites(widget.jobId, widget.jobName, widget.className, pageSize); await _client.getListOfJobFavorites(widget.jobId, widget.jobName, className == '全部'?'':className, pageSize);
return result.data!.items; return result.data!.items;
} }
@ -98,7 +103,7 @@ class _JobFavoriteState extends State<JobFavorite> with CommonMixin {
deleteFav(Items student) async{ deleteFav(Items student) async{
RestClient _client = await getClient(); RestClient _client = await getClient();
BaseStructureResult res = await _client.getJobDeFavorites(widget.jobId,student.studentId,student.questionPage); BaseStructureResult res = await _client.getJobDeFavorites(widget.jobId,student.studentId,student.questionPage!);
if(res.success){ if(res.success){
_future = getData(); _future = getData();
setState(() { setState(() {
@ -140,15 +145,18 @@ class _JobFavoriteState extends State<JobFavorite> with CommonMixin {
(List<Items>? datas) { (List<Items>? datas) {
if (datas == null) if (datas == null)
return Container( return Container(
child: Center( child: InkWell(
child: quickText('请求错误'), onTap: (){
toUpState(setState, () => _future = getData(), mounted);
},
child: Center(
child: quickText('请求错误,点击再次发起请求'),
),
), ),
); );
List pageList = []; List pageList = [];
List groupList = []; List groupList = [];
String name = '';
if (datas!.length > 0) { if (datas!.length > 0) {
name = datas[0].jobName;
for (var item in datas) { for (var item in datas) {
pageList.add(item.questionPage); pageList.add(item.questionPage);
} }
@ -169,7 +177,7 @@ class _JobFavoriteState extends State<JobFavorite> with CommonMixin {
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
Text( Text(
name, widget.jobName,
style: TextStyle(fontSize: 14.sp, color: Color(0xFF3C3C3C)), style: TextStyle(fontSize: 14.sp, color: Color(0xFF3C3C3C)),
), ),
// //
@ -180,6 +188,7 @@ class _JobFavoriteState extends State<JobFavorite> with CommonMixin {
$classSelection(involveClasses, classData, call: (JobReportJoinClass _classData) { $classSelection(involveClasses, classData, call: (JobReportJoinClass _classData) {
classData = _classData; classData = _classData;
if (_classData.gradeId == -1) classData = null; if (_classData.gradeId == -1) classData = null;
className = _classData.className;
_future = getData(); _future = getData();
toUpState(setState, () {}, mounted); toUpState(setState, () {}, mounted);
}), }),
@ -376,6 +385,7 @@ Widget $classSelection(List<JobReportJoinClass>? involveClasses, JobReportJoinCl
onChanged: (String? value) { onChanged: (String? value) {
if (value == null) return; if (value == null) return;
call(involveClasses.firstWhere((element) => element.uniqueId == value)); call(involveClasses.firstWhere((element) => element.uniqueId == value));
}, },
), ),
); );

View File

@ -7,7 +7,6 @@ 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/common/model/job/job_report_join_class.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';
@ -17,19 +16,28 @@ import 'package:percent_indicator/linear_percent_indicator.dart';
class QuickDataCheckPage extends StatefulWidget { class QuickDataCheckPage extends StatefulWidget {
final int jobId; final int jobId;
final String className; final String className;
final int? schoolId;
final int? gradeId;
const QuickDataCheckPage({Key? key, required this.jobId,required this.className}) : super(key: key); const QuickDataCheckPage(
{Key? key,
required this.jobId,
required this.className,
this.schoolId,
this.gradeId})
: super(key: key);
@override @override
State<QuickDataCheckPage> createState() => _QuickDataCheckPageState(); State<QuickDataCheckPage> createState() => _QuickDataCheckPageState();
} }
class _QuickDataCheckPageState extends State<QuickDataCheckPage> with CommonMixin { class _QuickDataCheckPageState extends State<QuickDataCheckPage>
with CommonMixin {
JobDataReport? jobData; JobDataReport? jobData;
void initState() { void initState() {
super.initState(); super.initState();
EasyLoading.show(status:'loading...'); EasyLoading.show(status: 'loading...');
getJobDataReport(); getJobDataReport();
} }
@ -37,17 +45,22 @@ class _QuickDataCheckPageState extends State<QuickDataCheckPage> with CommonMixi
RestClient _client = await getClient(); RestClient _client = await getClient();
Map<String, dynamic> params = {}; Map<String, dynamic> params = {};
params['jobid'] = widget.jobId; params['jobid'] = widget.jobId;
print(widget.jobId); params['className'] = widget.className;
if (widget.schoolId != null) {
params['schoolId'] = widget.schoolId;
}
if (widget.gradeId != null) {
params['gradeId'] = widget.gradeId;
}
BaseStructureResult<JobDataReport?> data = BaseStructureResult<JobDataReport?> data =
await _client.getJobDataCenterReport(params); await _client.getJobDataCenterReport(params);
EasyLoading.dismiss(); EasyLoading.dismiss();
if(data.code == 200){ if (data.code == 200) {
setState(() { setState(() {
jobData = data.data; jobData = data.data;
}); });
} }
} }
@override @override
@ -90,242 +103,287 @@ class _QuickDataCheckPageState extends State<QuickDataCheckPage> with CommonMixi
))), ))),
], ],
), ),
SizedBox(height:10.r), SizedBox(height: 10.r),
jobData != null? jobData != null
Expanded(child: SingleChildScrollView( ? Expanded(
child: Column( child: SingleChildScrollView(
children: [
Padding(
padding: EdgeInsets.only(left: 14.r, top: 2.r),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Image.asset(
'assets/images/job_report_class_icon.png',
width: 22.r,
height: 22.r,
),
SizedBox(
width: 6.r,
),
Text(
widget.className,
style: TextStyle(fontSize: 14.r, color: Colors.white),
)
],
),
),
Container(
padding: EdgeInsets.symmetric(vertical: 10.r, horizontal: 15.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.center,
children: [
Container(
width: 14.r,
height: 14.r,
decoration: BoxDecoration(
color: Color(0xFF4CC793),
borderRadius:
BorderRadius.all(Radius.circular(7.r))),
),
SizedBox(
width: 6.r,
),
Text(
'已提交',
style: TextStyle(
fontSize: 12.sp, color: Color(0xFF333333)),
),
SizedBox(
width: 35.r,
),
Container(
width: 14.r,
height: 14.r,
decoration: BoxDecoration(
color: Color(0xFF6888FD),
borderRadius:
BorderRadius.all(Radius.circular(7.r))),
),
SizedBox(
width: 6.r,
),
Text(
'未提交',
style: TextStyle(
fontSize: 12.sp, color: Color(0xFF333333)),
)
],
),
//
SizedBox(
height: MediaQuery.of(context).size.width * 0.5,
child: PieChart(
PieChartData(
borderData: FlBorderData(show: false),
sectionsSpace: 0,
centerSpaceRadius: MediaQuery.of(context).size.width * 0.1,
sections: [
PieChartSectionData(
color: Color(0xFF4CC793),
value: jobData!.validCount/(jobData!.validCount+jobData!.noAnswerCount) * 100,
radius: MediaQuery.of(context).size.width * 0.1 + 5,
title: '${jobData!.validCount}',
titleStyle: TextStyle(
fontSize: 14.sp,
color: Colors.white,
),
),
PieChartSectionData(
color: Color(0xFF6888FD),
value: jobData!.noAnswerCount/(jobData!.validCount+jobData!.noAnswerCount) * 100,
radius: MediaQuery.of(context).size.width * 0.1,
title: '${jobData!.noAnswerCount}',
titleStyle: TextStyle(
fontSize: 14.sp,
color: Colors.white,
),
),
],
),
),
),
//
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'客观题答题进度',
style: TextStyle(
fontSize: 10.sp, color: Color(0xFF8B8B8B)),
),
Text('${doubleToStringAsFixed(jobData!.kgValidRate)}%',
style: TextStyle(
fontSize: 10.sp, color: Color(0xFF333333)),
),
],
),
SizedBox(height: 6.r),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
flex: 10,
child: LinearPercentIndicator(
padding: EdgeInsets.zero,
animation: true,
lineHeight: 9.h,
animationDuration: 2500,
percent: jobData!.kgValidRate/100,
progressColor: Color(0xFFFF7F22),
backgroundColor: Color(0xFFEAEAEA),
barRadius: Radius.circular(10.r),
)),
],
),
SizedBox(height: 20.r),
//
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'主观题答题进度',
style: TextStyle(
fontSize: 10.sp, color: Color(0xFF8B8B8B)),
),
Text(
'${doubleToStringAsFixed(jobData!.zgValidRate)}%',
style: TextStyle(
fontSize: 10.sp, color: Color(0xFF333333)),
),
],
),
SizedBox(height: 6.r),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
flex: 10,
child: LinearPercentIndicator(
padding: EdgeInsets.zero,
animation: true,
lineHeight: 9.h,
animationDuration: 2500,
percent: jobData!.zgValidRate/100,
progressColor: Color(0xFFFF7F22),
backgroundColor: Color(0xFFEAEAEA),
barRadius: Radius.circular(10.r),
)),
],
),
],
),
),
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( child: Column(
children: [ children: [
InkWell( Padding(
onTap: (){ padding: EdgeInsets.only(left: 14.r, top: 2.r),
jobData!.studentDetails.sort((a, b) {
int num1 = a.kgValidRate + a.zgValidRate;
int num2 = b.kgValidRate + b.zgValidRate;
return num2.compareTo(num1);
});
setState(() {
jobData!.studentDetails;
});
},
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
Text( Image.asset(
'未提交排序', 'assets/images/job_report_class_icon.png',
style: TextStyle( width: 22.r,
fontSize: 12.sp, color: Color(0xFF6888FD)), height: 22.r,
), ),
SizedBox( SizedBox(
width: 10.r, width: 6.r,
), ),
Image.asset( Text(
'assets/images/sort_icon.png', widget.className,
width: 14.r, style: TextStyle(
height: 14.r, fontSize: 14.r, color: Colors.white),
)
],
),
),
Container(
padding: EdgeInsets.symmetric(
vertical: 10.r, horizontal: 15.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.center,
children: [
Container(
width: 14.r,
height: 14.r,
decoration: BoxDecoration(
color: Color(0xFF4CC793),
borderRadius: BorderRadius.all(
Radius.circular(7.r))),
),
SizedBox(
width: 6.r,
),
Text(
'已提交',
style: TextStyle(
fontSize: 12.sp,
color: Color(0xFF333333)),
),
SizedBox(
width: 35.r,
),
Container(
width: 14.r,
height: 14.r,
decoration: BoxDecoration(
color: Color(0xFF6888FD),
borderRadius: BorderRadius.all(
Radius.circular(7.r))),
),
SizedBox(
width: 6.r,
),
Text(
'未提交',
style: TextStyle(
fontSize: 12.sp,
color: Color(0xFF333333)),
)
],
),
//
SizedBox(
height: MediaQuery.of(context).size.width * 0.5,
child: PieChart(
PieChartData(
borderData: FlBorderData(show: false),
sectionsSpace: 0,
centerSpaceRadius:
MediaQuery.of(context).size.width * 0.1,
sections: [
PieChartSectionData(
color: Color(0xFF4CC793),
value: jobData!.validCount /
(jobData!.validCount +
jobData!.noAnswerCount) *
100,
radius:
MediaQuery.of(context).size.width *
0.1 +
5,
title: '${jobData!.validCount}',
titleStyle: TextStyle(
fontSize: 14.sp,
color: Colors.white,
),
),
PieChartSectionData(
color: Color(0xFF6888FD),
value: jobData!.noAnswerCount /
(jobData!.validCount +
jobData!.noAnswerCount) *
100,
radius:
MediaQuery.of(context).size.width *
0.1,
title: '${jobData!.noAnswerCount}',
titleStyle: TextStyle(
fontSize: 14.sp,
color: Colors.white,
),
),
],
),
),
),
//
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Text(
'客观题答题进度',
style: TextStyle(
fontSize: 10.sp,
color: Color(0xFF8B8B8B)),
),
Text(
'${doubleToStringAsFixed(jobData!.kgValidRate)}%',
style: TextStyle(
fontSize: 10.sp,
color: Color(0xFF333333)),
),
],
),
SizedBox(height: 6.r),
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Expanded(
flex: 10,
child: LinearPercentIndicator(
padding: EdgeInsets.zero,
animation: true,
lineHeight: 9.h,
animationDuration: 2500,
percent: jobData!.kgValidRate / 100,
progressColor: Color(0xFFFF7F22),
backgroundColor: Color(0xFFEAEAEA),
barRadius: Radius.circular(10.r),
)),
],
),
SizedBox(height: 20.r),
//
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Text(
'主观题答题进度',
style: TextStyle(
fontSize: 10.sp,
color: Color(0xFF8B8B8B)),
),
Text(
'${doubleToStringAsFixed(jobData!.zgValidRate)}%',
style: TextStyle(
fontSize: 10.sp,
color: Color(0xFF333333)),
),
],
),
SizedBox(height: 6.r),
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Expanded(
flex: 10,
child: LinearPercentIndicator(
padding: EdgeInsets.zero,
animation: true,
lineHeight: 9.h,
animationDuration: 2500,
percent: jobData!.zgValidRate / 100,
progressColor: Color(0xFFFF7F22),
backgroundColor: Color(0xFFEAEAEA),
barRadius: Radius.circular(10.r),
)),
],
), ),
], ],
), ),
), ),
SizedBox(height: 10.r,), Container(
SizedBox( padding: EdgeInsets.symmetric(
height: jobData!.studentDetails.length>5?350.r:jobData!.studentDetails.length * 50.r + 40.r, vertical: 10.r, horizontal: 10.r),
child: QuickStudentDataTable( margin: EdgeInsets.symmetric(
headList: ['学生姓名','客观题','主观题','客观题错题','主观题错题'], vertical: 10.r, horizontal: 14.r),
bodyList: jobData!.studentDetails, decoration: BoxDecoration(
jobId: widget.jobId, color: Colors.white,
fixedRows: 1, borderRadius:
fixedCols: 0, BorderRadius.all(Radius.circular(6.r))),
child: Column(
children: [
InkWell(
onTap: () {
jobData!.studentDetails.sort((a, b) {
int num1 = a.kgValidRate + a.zgValidRate;
int num2 = b.kgValidRate + b.zgValidRate;
return num2.compareTo(num1);
});
setState(() {
jobData!.studentDetails;
});
},
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Text(
'未提交排序',
style: TextStyle(
fontSize: 12.sp,
color: Color(0xFF6888FD)),
),
SizedBox(
width: 10.r,
),
Image.asset(
'assets/images/sort_icon.png',
width: 14.r,
height: 14.r,
),
],
),
),
SizedBox(
height: 10.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,
),
)
],
), ),
) ),
], ],
), ),
), ))
], : Padding(
), padding: EdgeInsets.only(
)):Padding( top: MediaQuery.of(context).size.height / 2 - 200.r),
padding: EdgeInsets.only(top: MediaQuery.of(context).size.height/2 - 200.r), child: MyEmptyWidget(),
child: MyEmptyWidget(), )
)
], ],
), ),
), ),

View File

@ -278,7 +278,15 @@ class RouterManager {
handlerFunc: (BuildContext? context, Map<String, List<String>> params) { handlerFunc: (BuildContext? context, Map<String, List<String>> params) {
int jobId = int.parse(params['jobId']![0]); int jobId = int.parse(params['jobId']![0]);
String className = params['className']![0]; String className = params['className']![0];
return QuickDataCheckPage(jobId: jobId, className: className); int? schoolId;
if (params['schoolId'] != null && params['schoolId']![0] != null && params['schoolId']![0] != 'null') {
schoolId = int.parse(params['schoolId']![0]);
}
int? gradeId;
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);
}, },
); );
@ -309,10 +317,16 @@ class RouterManager {
static final _jobFavoritePagePathHandler = Handler( static final _jobFavoritePagePathHandler = Handler(
handlerFunc: (BuildContext? context, Map<String, List<String>> params) { handlerFunc: (BuildContext? context, Map<String, List<String>> params) {
int jobId = int.parse(params['jobId']![0]); int jobId = int.parse(params['jobId']![0]);
int gradeId = int.parse(params['gradeId']![0]);
int schoolId = int.parse(params['schoolId']![0]);
String className = params['className']![0];
String jobName = params['jobName']![0]; String jobName = params['jobName']![0];
String? className = params['className']![0];
int? schoolId;
if (params['schoolId'] != null && params['schoolId']![0] != null && params['schoolId']![0] != 'null') {
schoolId = int.parse(params['schoolId']![0]);
}
int? gradeId;
if (params['gradeId'] != null && params['gradeId']![0] != null && params['gradeId']![0] != 'null') {
gradeId = int.parse(params['gradeId']![0]);
}
return JobFavorite(jobId: jobId, gradeId: gradeId, schoolId: schoolId, className: className,jobName:jobName); return JobFavorite(jobId: jobId, gradeId: gradeId, schoolId: schoolId, className: className,jobName:jobName);
}, },
); );

View File

@ -308,7 +308,7 @@ abstract class RestClient {
Future<BaseStructureResult<JobFavStudent>> getListOfJobFavorites( Future<BaseStructureResult<JobFavStudent>> getListOfJobFavorites(
@the_retrofit.Query("JobId") int jobId, @the_retrofit.Query("JobId") int jobId,
@the_retrofit.Query("JobName") String jobName, @the_retrofit.Query("JobName") String jobName,
@the_retrofit.Query("className") String className, @the_retrofit.Query("className") String? className,
@the_retrofit.Query("PageSize") int pageSize, @the_retrofit.Query("PageSize") int pageSize,
); );