Merge branch 'mcy_revision' into main

This commit is contained in:
machuanyu 2024-03-14 09:16:08 +08:00
commit 8e95d8791c
4 changed files with 273 additions and 132 deletions

View File

@ -46,7 +46,7 @@ class Items extends Object {
int teacherId; int teacherId;
@JsonKey(name: 'teacherAccount') @JsonKey(name: 'teacherAccount')
String teacherAccount; String? teacherAccount;
@JsonKey(name: 'folderName') @JsonKey(name: 'folderName')
String folderName; String folderName;

View File

@ -1,17 +1,49 @@
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; 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_fav_student.dart';
import 'package:marking_app/utils/easy_refresh/MyEmptyWidget.dart';
import 'package:photo_view/photo_view.dart';
import 'package:photo_view/photo_view_gallery.dart'; import 'package:photo_view/photo_view_gallery.dart';
class FavoriteStudentDialog extends StatefulWidget { class FavoriteStudentDialog extends StatefulWidget {
const FavoriteStudentDialog({Key? key}) : super(key: key); final Items item;
final List group;
final Function deleteFav;
const FavoriteStudentDialog(
{Key? key, required this.item, required this.group,required this.deleteFav})
: super(key: key);
@override @override
State<FavoriteStudentDialog> createState() => _FavoriteStudentDialogState(); State<FavoriteStudentDialog> createState() => _FavoriteStudentDialogState();
} }
class _FavoriteStudentDialogState extends State<FavoriteStudentDialog> { class _FavoriteStudentDialogState extends State<FavoriteStudentDialog> {
int defaultIndex = 1; int defaultIndex = 0;
List<Items> imageList = [];
late PageController pageController;
late Items currentStudent;
void initState() {
pageController = PageController(initialPage: defaultIndex);
currentStudent = widget.item;
List<Items> list = [];
widget.group.forEach((element) {
for (var item in element['list']) {
list.add(item);
}
});
setState(() {
imageList = list;
defaultIndex = list.indexWhere((element) => element.id == widget.item.id);
});
}
void dispose() {
super.dispose();
pageController.dispose();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -25,15 +57,24 @@ class _FavoriteStudentDialogState extends State<FavoriteStudentDialog> {
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
children: [ children: [
Text( Text(
'14班 张小凡', '${currentStudent.className} ${currentStudent.studentName}',
style: TextStyle(fontSize: 12.sp, color: Color(0xFF4E73FD)), style: TextStyle(fontSize: 12.sp, color: Color(0xFF4E73FD)),
), ),
Expanded(child: Container()), Expanded(child: Container()),
Text( Text(
'6题', '${currentStudent.questionPage}',
style: TextStyle(fontSize: 12.sp, color: Color(0xFF868686)), style: TextStyle(fontSize: 12.sp, color: Color(0xFF868686)),
), ),
Padding( InkWell(
onTap: (){
widget.deleteFav(currentStudent);
imageList.removeAt(defaultIndex);
setState(() {
});
},
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 8.r), padding: EdgeInsets.symmetric(horizontal: 8.r),
child: Image.asset( child: Image.asset(
'assets/images/favorite_delete_icon.png', 'assets/images/favorite_delete_icon.png',
@ -41,8 +82,9 @@ class _FavoriteStudentDialogState extends State<FavoriteStudentDialog> {
height: 22.r, height: 22.r,
), ),
), ),
),
InkWell( InkWell(
onTap: (){ onTap: () {
Navigator.pop(context); Navigator.pop(context);
}, },
child: Image.asset( child: Image.asset(
@ -53,47 +95,106 @@ class _FavoriteStudentDialogState extends State<FavoriteStudentDialog> {
), ),
], ],
), ),
SizedBox(height: 10.r,), SizedBox(
height: 10.r,
),
imageList.length>0?
Expanded( Expanded(
child: Container( child: Container(
color:Color(0xFF868686), 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];
return PhotoViewGalleryPageOptions( return PhotoViewGalleryPageOptions(
imageProvider: NetworkImage(widget.imageItems[index]), imageProvider: NetworkImage(item.questionPicture),
heroAttributes: PhotoViewHeroAttributes(tag: item.id),
); );
}, },
itemCount: 2, itemCount: imageList.length,
pageController:PageController(initialPage: defaultIndex), pageController: pageController,
// onPageChanged: (){}, onPageChanged: (index) {
setState(() {
defaultIndex = 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(
padding:EdgeInsets.symmetric(vertical: 15.r), padding: EdgeInsets.symmetric(vertical: 15.r),
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
Container( InkWell(
width: (MediaQuery.of(context).size.width - 78.r)/2 - 10.r, 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, height: 28.r,
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(6.r)), borderRadius: BorderRadius.all(Radius.circular(6.r)),
border: Border.all(width: 1.r,color: Color(0xFFCACACA),style: BorderStyle.solid), border: Border.all(
width: 1.r,
color: Color(0xFFCACACA),
style: BorderStyle.solid),
), ),
child: Center(child: Text('上一页',style: TextStyle(fontSize: 10.r,color: Color(0xFF505E6E)),)), child: Center(
child: Text(
'上一页',
style: TextStyle(
fontSize: 10.r,
color: defaultIndex == 0
? Color(0xFFCACACA)
: Color(0xFF505E6E)),
)),
), ),
Container( ),
width: (MediaQuery.of(context).size.width - 78.r)/2 - 10.r, 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, height: 28.r,
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(6.r)), borderRadius: BorderRadius.all(Radius.circular(6.r)),
border: Border.all(width: 1.r,color: Color(0xFFCACACA),style: BorderStyle.solid), 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)),
)),
), ),
child: Center(child: Text('下一页',style: TextStyle(fontSize: 10.r,color: Color(0xFF505E6E)),)),
), ),
], ],
), ),

View File

@ -9,6 +9,7 @@ import 'package:marking_app/common/model/job/job_fav_student.dart';
import 'package:marking_app/common/model/job/job_favorite_item_model.dart'; import 'package:marking_app/common/model/job/job_favorite_item_model.dart';
import 'package:marking_app/common/model/job/job_report_join_class.dart'; import 'package:marking_app/common/model/job/job_report_join_class.dart';
import 'package:marking_app/pages/homework_correction/pages/favorite_student_dialog.dart'; import 'package:marking_app/pages/homework_correction/pages/favorite_student_dialog.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';
import 'package:marking_app/utils/request/rest_client.dart'; import 'package:marking_app/utils/request/rest_client.dart';
@ -61,7 +62,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, loginName, pageSize); await _client.getListOfJobFavorites(widget.jobId, widget.jobName, widget.className, pageSize);
return result.data!.items; return result.data!.items;
} }
@ -89,20 +90,30 @@ class _JobFavoriteState extends State<JobFavorite> with CommonMixin {
}); });
}, mounted); }, mounted);
} }
print('involveClasses=${involveClasses!.length}');
_future = getData(); _future = getData();
} catch (e) { } catch (e) {
print(e); print(e);
} }
} }
void showStudentDialog(BuildContext context) { deleteFav(Items student) async{
RestClient _client = await getClient();
BaseStructureResult res = await _client.getJobDeFavorites(widget.jobId,student.studentId,student.questionPage);
if(res.success){
_future = getData();
setState(() {
});
}
}
void showStudentDialog(BuildContext context,Items item,List groups) {
showDialog( showDialog(
context: context, context: context,
builder: (BuildContext context) { builder: (BuildContext context) {
return AlertDialog( return AlertDialog(
insetPadding: EdgeInsets.all(25.r), insetPadding: EdgeInsets.all(25.r),
content: FavoriteStudentDialog(), content: FavoriteStudentDialog(item: item,group: groups, deleteFav: deleteFav,),
contentPadding: EdgeInsets.all(0), contentPadding: EdgeInsets.all(0),
shape: RoundedRectangleBorder(borderRadius: BorderRadius.all(Radius.circular(15.r)))); shape: RoundedRectangleBorder(borderRadius: BorderRadius.all(Radius.circular(15.r))));
}, },
@ -127,17 +138,17 @@ class _JobFavoriteState extends State<JobFavorite> with CommonMixin {
context, context,
_future, _future,
(List<Items>? datas) { (List<Items>? datas) {
/* if (datas == null) if (datas == null)
return Container( return Container(
child: Center( child: Center(
child: quickText('请求错误'), child: quickText('请求错误'),
), ),
);*/ );
print('datas${datas}');
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);
} }
@ -147,8 +158,8 @@ class _JobFavoriteState extends State<JobFavorite> with CommonMixin {
var printList = datas.where((element) => element.questionPage == page).toList(); var printList = datas.where((element) => element.questionPage == page).toList();
groupList.add({"questionPage": page, "list": printList}); groupList.add({"questionPage": page, "list": printList});
} }
groupList.sort((a, b) => a['questionPage'].compareTo(b['questionPage']));
} }
return Container( return Container(
child: Column( child: Column(
children: [ children: [
@ -158,7 +169,7 @@ class _JobFavoriteState extends State<JobFavorite> with CommonMixin {
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
Text( Text(
'函数A的对称性研究', name,
style: TextStyle(fontSize: 14.sp, color: Color(0xFF3C3C3C)), style: TextStyle(fontSize: 14.sp, color: Color(0xFF3C3C3C)),
), ),
// //
@ -186,17 +197,22 @@ class _JobFavoriteState extends State<JobFavorite> with CommonMixin {
color: Color(0xFFCCCCCC), color: Color(0xFFCCCCCC),
), ),
), ),
groupList.length>0?
Expanded( Expanded(
child: isPadFlag child: isPadFlag
? Padding( ? Padding(
padding: EdgeInsets.only(top: 10.r, bottom: 8.r, left: 14.r, right: 14.r), padding: EdgeInsets.only(top: 10.r, bottom: 8.r, left: 14.r, right: 14.r),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: List.generate(groupList.length, (index) {
var item = groupList[index];
return Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Padding( Padding(
padding: EdgeInsets.only(bottom: 5.r), padding: EdgeInsets.only(bottom: 5.r),
child: Text( child: Text(
'第六题', '${item['questionPage']}',
style: TextStyle(fontSize: 14.sp, color: Color(0xFF2E5BFF)), style: TextStyle(fontSize: 14.sp, color: Color(0xFF2E5BFF)),
), ),
), ),
@ -208,8 +224,9 @@ class _JobFavoriteState extends State<JobFavorite> with CommonMixin {
childAspectRatio: 556 / 112, childAspectRatio: 556 / 112,
), ),
shrinkWrap: true, shrinkWrap: true,
children: [ children: List.generate(item['list'].length, (i){
Container( Items student = item['list'][i];
return Container(
padding: EdgeInsets.symmetric(vertical: 5.r, horizontal: 10.r), padding: EdgeInsets.symmetric(vertical: 5.r, horizontal: 10.r),
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: Colors.white,
@ -217,23 +234,23 @@ class _JobFavoriteState extends State<JobFavorite> with CommonMixin {
), ),
child: InkWell( child: InkWell(
onTap: () { onTap: () {
showStudentDialog(context); showStudentDialog(context,student,groupList);
}, },
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
quickText('张小凡', color: Color(0xFF333333), size: 12.sp), quickText(student.studentName, color: Color(0xFF333333), size: 12.sp),
Expanded(child: Container()), Expanded(child: Container()),
Padding( Padding(
padding: EdgeInsets.only(right: 8.r), padding: EdgeInsets.only(right: 8.r),
child: Text( child: Text(
'12班', student.className,
style: TextStyle(fontSize: 12.sp, color: Color(0xFF666666)), style: TextStyle(fontSize: 12.sp, color: Color(0xFF666666)),
), ),
), ),
InkWell( InkWell(
onTap: () async { onTap: () async {
print('删除'); deleteFav(student);
}, },
child: Image.asset( child: Image.asset(
'assets/images/favorite_delete_icon.png', 'assets/images/favorite_delete_icon.png',
@ -244,16 +261,20 @@ class _JobFavoriteState extends State<JobFavorite> with CommonMixin {
], ],
), ),
), ),
);
})
), ),
], ],
), );
], })
), ),
) )
: ListView.builder( : ListView.builder(
shrinkWrap: true, shrinkWrap: true,
itemBuilder: (context, index) { itemBuilder: (context, index) {
// Items item = datas[index]; var item = groupList[index];
return Padding( return Padding(
padding: EdgeInsets.only(top: 10.r, bottom: 8.r, left: 14.r, right: 14.r), padding: EdgeInsets.only(top: 10.r, bottom: 8.r, left: 14.r, right: 14.r),
child: Column( child: Column(
@ -262,11 +283,18 @@ class _JobFavoriteState extends State<JobFavorite> with CommonMixin {
Padding( Padding(
padding: EdgeInsets.only(bottom: 5.r), padding: EdgeInsets.only(bottom: 5.r),
child: Text( child: Text(
'六题', '${item['questionPage']}',
style: TextStyle(fontSize: 14.sp, color: Color(0xFF2E5BFF)), style: TextStyle(fontSize: 14.sp, color: Color(0xFF2E5BFF)),
), ),
), ),
Container( ListView.builder(
itemBuilder: (context,i){
Items student = item['list'][i];
return InkWell(
onTap: (){
showStudentDialog(context,student,groupList);
},
child: Container(
padding: EdgeInsets.symmetric(vertical: 5.r, horizontal: 10.r), padding: EdgeInsets.symmetric(vertical: 5.r, horizontal: 10.r),
margin: EdgeInsets.only(top: 5.r), margin: EdgeInsets.only(top: 5.r),
decoration: BoxDecoration( decoration: BoxDecoration(
@ -276,17 +304,19 @@ class _JobFavoriteState extends State<JobFavorite> with CommonMixin {
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
quickText('张小凡', color: Color(0xFF333333), size: 14.sp), quickText(student.studentName, color: Color(0xFF333333), size: 14.sp),
Expanded(child: Container()), Expanded(child: Container()),
Padding( Padding(
padding: EdgeInsets.only(right: 8.r), padding: EdgeInsets.only(right: 8.r),
child: Text( child: Text(
'12班', student.className,
style: TextStyle(fontSize: 14.sp, color: Color(0xFF666666)), style: TextStyle(fontSize: 14.sp, color: Color(0xFF666666)),
), ),
), ),
InkWell( InkWell(
onTap: () async {}, onTap: () async {
deleteFav(student);
},
child: Image.asset( child: Image.asset(
'assets/images/favorite_delete_icon.png', 'assets/images/favorite_delete_icon.png',
width: 32.r, width: 32.r,
@ -296,13 +326,18 @@ class _JobFavoriteState extends State<JobFavorite> with CommonMixin {
], ],
), ),
), ),
);
},itemCount: item['list'].length,shrinkWrap: true,),
], ],
), ),
); );
}, },
// itemCount: datas.length, itemCount: groupList.length,
itemCount: 10,
), ),
):Padding(
padding: EdgeInsets.only(top: MediaQuery.of(context).size.height/2 - 200.r),
child: MyEmptyWidget(),
), ),
], ],
)); ));

View File

@ -309,7 +309,6 @@ abstract class RestClient {
@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("Account") String loginName,
@the_retrofit.Query("PageSize") int pageSize, @the_retrofit.Query("PageSize") int pageSize,
); );
@ -340,4 +339,10 @@ abstract class RestClient {
// => / // => /
@the_retrofit.POST("/api/read/jc-job-read-level") @the_retrofit.POST("/api/read/jc-job-read-level")
Future<BaseStructureResult> getSetJobReadLevel(@the_retrofit.Body() JobLevelSetParams params); Future<BaseStructureResult> getSetJobReadLevel(@the_retrofit.Body() JobLevelSetParams params);
// =>
@the_retrofit.POST("/api/jobs/de-fav-student-job")
Future<BaseStructureResult> getJobDeFavorites(
@the_retrofit.Field("jobId") int jobId, @the_retrofit.Field("studentId") int studentId,@the_retrofit.Field("questionPage") int questionPage);
} }