Compare commits

..

No commits in common. "290d4efddf5a9c8749bfcb74c338b9ecceb3f863" and "1c159dbda342d5dcfa488a276591a537c7bd1288" have entirely different histories.

6 changed files with 365 additions and 463 deletions

View File

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

View File

@ -12,10 +12,7 @@ class FavoriteStudentDialog extends StatefulWidget {
final Function deleteFav;
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);
@override
@ -29,6 +26,7 @@ class _FavoriteStudentDialogState extends State<FavoriteStudentDialog> {
late Items currentStudent;
void initState() {
pageController = PageController(initialPage: defaultIndex);
currentStudent = widget.item;
List<Items> list = [];
widget.group.forEach((element) {
@ -40,7 +38,6 @@ class _FavoriteStudentDialogState extends State<FavoriteStudentDialog> {
imageList = list;
defaultIndex = list.indexWhere((element) => element.id == widget.item.id);
});
pageController = PageController(initialPage: defaultIndex);
}
void dispose() {
@ -70,24 +67,12 @@ class _FavoriteStudentDialogState extends State<FavoriteStudentDialog> {
),
InkWell(
onTap: (){
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(
padding: EdgeInsets.symmetric(horizontal: 8.r),
@ -113,8 +98,8 @@ class _FavoriteStudentDialogState extends State<FavoriteStudentDialog> {
SizedBox(
height: 10.r,
),
imageList.length > 0
? Expanded(
imageList.length>0?
Expanded(
child: Container(
color: Colors.white,
width: MediaQuery.of(context).size.width,
@ -123,7 +108,7 @@ class _FavoriteStudentDialogState extends State<FavoriteStudentDialog> {
builder: (BuildContext context, int index) {
final Items item = imageList[index];
return PhotoViewGalleryPageOptions(
imageProvider: NetworkImage(item.questionPicture!),
imageProvider: NetworkImage(item.questionPicture),
heroAttributes: PhotoViewHeroAttributes(tag: item.id),
);
},
@ -136,12 +121,11 @@ class _FavoriteStudentDialogState extends State<FavoriteStudentDialog> {
});
},
scrollDirection: Axis.horizontal,
),
),
)
: Padding(
padding: EdgeInsets.only(
top: MediaQuery.of(context).size.height / 2 - 200.r),
):Padding(
padding: EdgeInsets.only(top: MediaQuery.of(context).size.height/2 - 200.r),
child: MyEmptyWidget(),
),
if(imageList.length>0)

View File

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

View File

@ -7,6 +7,7 @@ import 'package:flutter_screenutil/flutter_screenutil.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/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/utils/easy_refresh/MyEmptyWidget.dart';
import 'package:marking_app/utils/index.dart';
@ -16,23 +17,14 @@ import 'package:percent_indicator/linear_percent_indicator.dart';
class QuickDataCheckPage extends StatefulWidget {
final int jobId;
final String className;
final int? schoolId;
final int? gradeId;
const QuickDataCheckPage(
{Key? key,
required this.jobId,
required this.className,
this.schoolId,
this.gradeId})
: super(key: key);
const QuickDataCheckPage({Key? key, required this.jobId,required this.className}) : super(key: key);
@override
State<QuickDataCheckPage> createState() => _QuickDataCheckPageState();
}
class _QuickDataCheckPageState extends State<QuickDataCheckPage>
with CommonMixin {
class _QuickDataCheckPageState extends State<QuickDataCheckPage> with CommonMixin {
JobDataReport? jobData;
void initState() {
@ -45,14 +37,7 @@ class _QuickDataCheckPageState extends State<QuickDataCheckPage>
RestClient _client = await getClient();
Map<String, dynamic> params = {};
params['jobid'] = widget.jobId;
params['className'] = widget.className;
if (widget.schoolId != null) {
params['schoolId'] = widget.schoolId;
}
if (widget.gradeId != null) {
params['gradeId'] = widget.gradeId;
}
print(widget.jobId);
BaseStructureResult<JobDataReport?> data =
await _client.getJobDataCenterReport(params);
EasyLoading.dismiss();
@ -61,6 +46,8 @@ class _QuickDataCheckPageState extends State<QuickDataCheckPage>
jobData = data.data;
});
}
}
@override
@ -104,9 +91,8 @@ class _QuickDataCheckPageState extends State<QuickDataCheckPage>
],
),
SizedBox(height:10.r),
jobData != null
? Expanded(
child: SingleChildScrollView(
jobData != null?
Expanded(child: SingleChildScrollView(
child: Column(
children: [
Padding(
@ -124,21 +110,17 @@ class _QuickDataCheckPageState extends State<QuickDataCheckPage>
),
Text(
widget.className,
style: TextStyle(
fontSize: 14.r, color: Colors.white),
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),
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))),
borderRadius: BorderRadius.all(Radius.circular(6.r))),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
@ -150,8 +132,8 @@ class _QuickDataCheckPageState extends State<QuickDataCheckPage>
height: 14.r,
decoration: BoxDecoration(
color: Color(0xFF4CC793),
borderRadius: BorderRadius.all(
Radius.circular(7.r))),
borderRadius:
BorderRadius.all(Radius.circular(7.r))),
),
SizedBox(
width: 6.r,
@ -159,8 +141,7 @@ class _QuickDataCheckPageState extends State<QuickDataCheckPage>
Text(
'已提交',
style: TextStyle(
fontSize: 12.sp,
color: Color(0xFF333333)),
fontSize: 12.sp, color: Color(0xFF333333)),
),
SizedBox(
width: 35.r,
@ -170,8 +151,8 @@ class _QuickDataCheckPageState extends State<QuickDataCheckPage>
height: 14.r,
decoration: BoxDecoration(
color: Color(0xFF6888FD),
borderRadius: BorderRadius.all(
Radius.circular(7.r))),
borderRadius:
BorderRadius.all(Radius.circular(7.r))),
),
SizedBox(
width: 6.r,
@ -179,8 +160,7 @@ class _QuickDataCheckPageState extends State<QuickDataCheckPage>
Text(
'未提交',
style: TextStyle(
fontSize: 12.sp,
color: Color(0xFF333333)),
fontSize: 12.sp, color: Color(0xFF333333)),
)
],
),
@ -191,19 +171,12 @@ class _QuickDataCheckPageState extends State<QuickDataCheckPage>
PieChartData(
borderData: FlBorderData(show: false),
sectionsSpace: 0,
centerSpaceRadius:
MediaQuery.of(context).size.width * 0.1,
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,
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,
@ -212,13 +185,8 @@ class _QuickDataCheckPageState extends State<QuickDataCheckPage>
),
PieChartSectionData(
color: Color(0xFF6888FD),
value: jobData!.noAnswerCount /
(jobData!.validCount +
jobData!.noAnswerCount) *
100,
radius:
MediaQuery.of(context).size.width *
0.1,
value: jobData!.noAnswerCount/(jobData!.validCount+jobData!.noAnswerCount) * 100,
radius: MediaQuery.of(context).size.width * 0.1,
title: '${jobData!.noAnswerCount}',
titleStyle: TextStyle(
fontSize: 14.sp,
@ -231,27 +199,22 @@ class _QuickDataCheckPageState extends State<QuickDataCheckPage>
),
//
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'客观题答题进度',
style: TextStyle(
fontSize: 10.sp,
color: Color(0xFF8B8B8B)),
fontSize: 10.sp, color: Color(0xFF8B8B8B)),
),
Text(
'${doubleToStringAsFixed(jobData!.kgValidRate)}%',
Text('${doubleToStringAsFixed(jobData!.kgValidRate)}%',
style: TextStyle(
fontSize: 10.sp,
color: Color(0xFF333333)),
fontSize: 10.sp, color: Color(0xFF333333)),
),
],
),
SizedBox(height: 6.r),
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
flex: 10,
@ -270,27 +233,23 @@ class _QuickDataCheckPageState extends State<QuickDataCheckPage>
SizedBox(height: 20.r),
//
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'主观题答题进度',
style: TextStyle(
fontSize: 10.sp,
color: Color(0xFF8B8B8B)),
fontSize: 10.sp, color: Color(0xFF8B8B8B)),
),
Text(
'${doubleToStringAsFixed(jobData!.zgValidRate)}%',
style: TextStyle(
fontSize: 10.sp,
color: Color(0xFF333333)),
fontSize: 10.sp, color: Color(0xFF333333)),
),
],
),
SizedBox(height: 6.r),
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
flex: 10,
@ -310,14 +269,11 @@ class _QuickDataCheckPageState extends State<QuickDataCheckPage>
),
),
Container(
padding: EdgeInsets.symmetric(
vertical: 10.r, horizontal: 10.r),
margin: EdgeInsets.symmetric(
vertical: 10.r, horizontal: 14.r),
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))),
borderRadius: BorderRadius.all(Radius.circular(6.r))),
child: Column(
children: [
InkWell(
@ -337,8 +293,7 @@ class _QuickDataCheckPageState extends State<QuickDataCheckPage>
Text(
'未提交排序',
style: TextStyle(
fontSize: 12.sp,
color: Color(0xFF6888FD)),
fontSize: 12.sp, color: Color(0xFF6888FD)),
),
SizedBox(
width: 10.r,
@ -351,22 +306,11 @@ class _QuickDataCheckPageState extends State<QuickDataCheckPage>
],
),
),
SizedBox(height: 10.r,),
SizedBox(
height: 10.r,
),
SizedBox(
height: jobData!.studentDetails.length > 5
? 350.r
: jobData!.studentDetails.length * 50.r +
40.r,
height: jobData!.studentDetails.length>5?350.r:jobData!.studentDetails.length * 50.r + 40.r,
child: QuickStudentDataTable(
headList: [
'学生姓名',
'客观题',
'主观题',
'客观题错题',
'主观题错题'
],
headList: ['学生姓名','客观题','主观题','客观题错题','主观题错题'],
bodyList: jobData!.studentDetails,
jobId: widget.jobId,
fixedRows: 1,
@ -378,10 +322,8 @@ class _QuickDataCheckPageState extends State<QuickDataCheckPage>
),
],
),
))
: Padding(
padding: EdgeInsets.only(
top: MediaQuery.of(context).size.height / 2 - 200.r),
)):Padding(
padding: EdgeInsets.only(top: MediaQuery.of(context).size.height/2 - 200.r),
child: MyEmptyWidget(),
)
],

View File

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

View File

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