From c653b10515f5dbf74349638232fd0694eb31fc0c Mon Sep 17 00:00:00 2001 From: machuanyu <840649825@qq.com> Date: Wed, 13 Mar 2024 15:00:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B6=E8=97=8F=E5=A4=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../assets/images/favorite_delete_icon.png | Bin 0 -> 1768 bytes .../assets/images/favorite_dialog_close.png | Bin 0 -> 1715 bytes .../lib/common/model/job/job_data_report.dart | 4 +- .../lib/common/model/job/job_fav_student.dart | 95 ++++++ .../pages/homework_correction/job_report.dart | 11 +- .../pages/favorite_student_dialog.dart | 105 +++++++ .../pages/job_favorite.dart | 283 ++++++++++++++++-- .../pages/job_list_participate_in_class.dart | 2 +- .../quick_check_personal.dart | 19 +- .../homework_correction/quick_data_check.dart | 4 +- .../widget/quick_student_data_table.dart | 5 +- marking_app/lib/routes/RouterManager.dart | 3 +- .../lib/utils/request/rest_client.dart | 12 +- 13 files changed, 496 insertions(+), 47 deletions(-) create mode 100644 marking_app/assets/images/favorite_delete_icon.png create mode 100644 marking_app/assets/images/favorite_dialog_close.png create mode 100644 marking_app/lib/common/model/job/job_fav_student.dart create mode 100644 marking_app/lib/pages/homework_correction/pages/favorite_student_dialog.dart diff --git a/marking_app/assets/images/favorite_delete_icon.png b/marking_app/assets/images/favorite_delete_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5704f916371c1a365bddddef7f2da2fd7f600c06 GIT binary patch literal 1768 zcmVP)Mqae5eZ9W;01$iX>a@4dHL+46^MOWKwEvA-E18Cj0~_w(D`w{M>e7$DfISF?~x z&Eg?#(_k31PkS~mw%9CSjP`rDFGH*;g)Do+ICG`| zF`!gnA?z&__BO<4t^Gn)y{cMhWdgJ9?b|5qG7O%uttb^*y1?AWrcxwq4u%U0DwTQT z!UYQ?B28f74wi*G7+x4#L2F(GNk|bG#m(Rwdya=07!9OZvk4JlZ{94RxVtbq;u0B{ zoZRK@NJJtDjBj8W`?LiZ{Dv$HX>@mM{4+)%w2Qz${5!sZJd6X3t)pLFgb;)hc&x;A zVXS~6{{{gGEbv&0>k>lbKt347T^n0*3H>z}(pndmmQ@j>vsCe0{kHG3;Ff zO#=*G8E4NHdp)hEz+wci{WmxBNIN zlUJ|8(VI8Hn3@8GSoq7%8riJv_k^xKSooR@#K4ya58zw5EJa+R^7JX}-@6Bj$?*6~ z7kn*PxQ6!-6MxOm^F3Ky>eMNSLiOD{{zcJi9e?r!lvAzF8|TiII-Q#Ey~qjP#LfhY zdu)9jqVUh+B7B$lYv_p+o-K7c)zL+uYskZB1#eW7^9u}h_QB3fgeC~68IOs#(B>kN zw%+Q;kMOlnfGE^He1HU?2?w&`74LtxHF9xv%UW^$rc4ga%tZF*0kP4NPkOs;O#*Z4 zHH<)GZ9l#gi|}7WON0Ff4p6_8jr{kCXdR zr!Fu$Xg4QJ6OA07Sr;@cm@%o5vL6-}U|2YE?HWjhQo{swAFR4@b4O~ESFXU1OG}Uh z-iGw&=Ss&>wlOz%oDR4J3-^!#jV#ixn{Zr2t(F6gTud{^cl<$1%cqfmVO*x2+sF+> z?}36d6lUx;5+fga@ZyE~R(5ND3iVD~1HNL8A(r z1pWjXRd9j-28}BIB!TxpqYAWOr&@?c1&ozVoZ1+e@+%_;7nllEXw;BOS*DTAlEB(c z$j2sa-GPR-V)^jSgCj6wTcD8(W1F;d^CC*1k&9`T_>TS&3pf(@!-sJun4t8kj^{63 z0`tTPzIB>W=Fbt=`kjvnOSEmC40pzgGSgSXKsmbI@^op{Q2NoMZZ82x^Lf4{3e{*6 zG@@y>+9qh^V455CL-# zmT>OwVV|LRD5x}Um$EWlOUm%ol(vqxFGnO$o*EM-k z7exwBUqz96X7*sO!lDJvplPOuYjEi+b&9u;y6e`!DM{W}orFNOE7{IY0e8c*2w4Tr z9Sr(j*B!h#=y;1<#6~S2$7@`}J1jQEhcM1>zeVd2Q49;yH2pWv=A>$~x3~F1bqN=1j!bq`TFGFn2TPW-b z8cPWzB3)n?QG+eE^0*POgN)3AqD)|y0T$Ysf5a)WZUvU3qFi7XAv6s!XCPU&cw!#T zpsN(tB{qRwM1>U+nrhl)ARcU<8fKcCvVCkXVi(v87n>?x83q+{Bg>X~)6_klBW9YV zxJC7nsKBk%>$lZvvz}Z2X27Wk(CN0npP+FET3f6)X-Zv6n*RX+oS?T{CL?VC0000< KMNUMnLSTYpGC95g literal 0 HcmV?d00001 diff --git a/marking_app/assets/images/favorite_dialog_close.png b/marking_app/assets/images/favorite_dialog_close.png new file mode 100644 index 0000000000000000000000000000000000000000..c25cd269bce7f3659ece28b6f9e2fcea4f442bcc GIT binary patch literal 1715 zcmV;k22A;hP)8@L-J63}&?;KGts(k$@)v-he(q(-lj?mJO*OAhBt> zK_Yzh{LM_{IC0{Sneim?Pcn8wLhz5nnNN>%WDz$vH!Hkzw_GkaC-(Eamz$TC*c#Zs zy}ez$yu8%&`Fvw(X{k<@kfRj2zP_%okdG{}LhoYdNevJW$=_dJUu$U!H!c`bS?K>P zc7xOj9Y%vAyvEz1Y1u{uUtL|z&&?<;To+D*$6WYrQbZyP zovLt zu-6S0EE*B0=Z;-fED7wS)o!;}hc!lqrU=nO%jEh%J(;@(exQqB(CY>Y7P-cuj36A* z{}M=GiV&&ciZX`6V}YNRmzQh(z84t5A~j@$Ky=UcrLSPFHB>1}4N<5Bbqw`Q5!|3a zYH%ncG@@3)m5Or9`+QFXXVDuE)GD}(vnPssA~=iQ`1Fh7t_aSeHyMcHsi~=|_qi^? z+#LQ)n&CeprNP6)16^KTl5W`Hde>ul;F%Yu4V>Wa?k*i2Me2}B4CLEhQZEcOXK|s2})G&GM75tGjGdnv=+uPg5B>UxV zZblxEhy}ackjJiIkscf}fGNpo$pt9vWSVdVb7HQLL3B$_Q?5ihl__GK45Lf34RV1@ zxl*v!+CvbkCEFqwaHGR@nnV8Oa6YFLQ6a`Axe^{$TFrAPJCrg>BiTl|f)%8QRMLZ= zxRNcF3+xdLqDr=0E(*H2ytrJ-8p2ApT`pj^ZUmRfGKNVW1-XKG2(~JMB|(x$NG_^s z^EvKde5p!W->t(jF zBm>I}xfTTfAqxc$sx8Q4+a+^7*cJSnw|~hZ!c@gZMDni>SjYk`4zh$O^<3K}yD0)+ zSTNZ@oJNFKGU~`^oS>0n3H5xTP_Sb8l_V`RycX}ld+{^yvn-*W$2vEZGAf$CHcIB~ z&~S4Dx8_jLrBahn-M1jCaHub*nJ$oeOQq63vZ0Ym6zk}?u_cnZT)V*D70kAOl3{fA zirFBU$Ky`1&x;2&GKh&TM++p^@TF5fGnI!;_vfaRlN-fi(H+R>boOu*pO67ecb2CS z$ylRJ9_Kwzo|0zL>MZw4HZXk^E)V5#R}+rY1TNjGkVbHVCZ>?4_}O(%53BNlzd!gp zX(lbXraqff?Vo$%vs5OLH z{x;OqDJ;K@TtgWyaKTOv!n`)pczv_kJoa8DI*Fj*XSt!T>yA7jVv;3u_g6@j;VRM~*8O#GW6FJTwUfAI>qZT#$HD+6di{Br53i`jYepCQ4@g zWw&_8cT=q_8+ASCOV#So;}tnR$@%B~2ZORQ<*kQtB$P6~y>sp=d%4C8{mK=$+VbA=DFkQ*Xf items; + + @JsonKey(name: 'hasPrevPage') + bool hasPrevPage; + + @JsonKey(name: 'hasNextPage') + bool hasNextPage; + + JobFavStudent(this.page,this.pageSize,this.total,this.totalPages,this.items,this.hasPrevPage,this.hasNextPage,); + + factory JobFavStudent.fromJson(Map srcJson) => _$JobFavStudentFromJson(srcJson); + + Map toJson() => _$JobFavStudentToJson(this); + +} + + +@JsonSerializable() +class Items extends Object { + + @JsonKey(name: 'id') + String id; + + @JsonKey(name: 'teacherId') + int teacherId; + + @JsonKey(name: 'teacherAccount') + String teacherAccount; + + @JsonKey(name: 'folderName') + String folderName; + + @JsonKey(name: 'jobId') + int jobId; + + @JsonKey(name: 'jobName') + String jobName; + + @JsonKey(name: 'studentId') + int studentId; + + @JsonKey(name: 'studentName') + String studentName; + + @JsonKey(name: 'className') + String className; + + @JsonKey(name: 'questionPage') + int questionPage; + + @JsonKey(name: 'questionPicture') + String questionPicture; + + @JsonKey(name: 'createTime') + String createTime; + + @JsonKey(name: 'schoolName') + String schoolName; + + @JsonKey(name: 'gradeName') + String gradeName; + + @JsonKey(name: 'studentClassName') + String studentClassName; + + Items(this.id,this.teacherId,this.teacherAccount,this.folderName,this.jobId,this.jobName,this.studentId,this.studentName,this.className,this.questionPage,this.questionPicture,this.createTime,this.schoolName,this.gradeName,this.studentClassName,); + + factory Items.fromJson(Map srcJson) => _$ItemsFromJson(srcJson); + + Map toJson() => _$ItemsToJson(this); + +} + + diff --git a/marking_app/lib/pages/homework_correction/job_report.dart b/marking_app/lib/pages/homework_correction/job_report.dart index 100c2cb..d9cb865 100644 --- a/marking_app/lib/pages/homework_correction/job_report.dart +++ b/marking_app/lib/pages/homework_correction/job_report.dart @@ -59,8 +59,14 @@ class _JobReportState extends State with CommonMixin { JobReportJoinClass(-1, '全部', -1, '全部', '全部', '全部', -1, -1, '-1'), ...(result.data ?? []) ]; + involveClasses?.forEach((element) { + if(element.className == widget.className && element.gradeId == widget.gradeId && element.schoolId == widget.schoolId){ + classData = element; + } + }); }, mounted); } + _future = getReport(); } catch (e) { print(e); } @@ -71,7 +77,6 @@ class _JobReportState extends State with CommonMixin { RestClient _client = await getClient(); Map param = classData?.toJson() ?? {}; param['jobid'] = widget.id; - print('widget.id=${widget.id}'); BaseStructureResult data = await _client.getJobReport(param); if (!data.success) { @@ -352,7 +357,7 @@ class _JobReportState extends State with CommonMixin { ), //完成率、正确率 TopCount(data), - InkWell( + /* InkWell( onTap: (){ RouterManager.router.navigateTo( context, @@ -362,7 +367,7 @@ class _JobReportState extends State with CommonMixin { ); }, child: Text('数据快查'), - ), + ),*/ //客观题 Container( padding: EdgeInsets.symmetric(vertical: 10.r, horizontal: 10.r), diff --git a/marking_app/lib/pages/homework_correction/pages/favorite_student_dialog.dart b/marking_app/lib/pages/homework_correction/pages/favorite_student_dialog.dart new file mode 100644 index 0000000..8894ada --- /dev/null +++ b/marking_app/lib/pages/homework_correction/pages/favorite_student_dialog.dart @@ -0,0 +1,105 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:photo_view/photo_view_gallery.dart'; + +class FavoriteStudentDialog extends StatefulWidget { + const FavoriteStudentDialog({Key? key}) : super(key: key); + + @override + State createState() => _FavoriteStudentDialogState(); +} + +class _FavoriteStudentDialogState extends State { + int defaultIndex = 1; + + @override + Widget build(BuildContext context) { + return Container( + width: MediaQuery.of(context).size.width, + height: MediaQuery.of(context).size.height, + padding: EdgeInsets.symmetric(vertical: 10.r, horizontal: 14.r), + child: Column( + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Text( + '14班 张小凡', + style: TextStyle(fontSize: 12.sp, color: Color(0xFF4E73FD)), + ), + Expanded(child: Container()), + Text( + '6题', + style: TextStyle(fontSize: 12.sp, color: Color(0xFF868686)), + ), + Padding( + padding: EdgeInsets.symmetric(horizontal: 8.r), + child: Image.asset( + 'assets/images/favorite_delete_icon.png', + width: 22.r, + height: 22.r, + ), + ), + InkWell( + onTap: (){ + Navigator.pop(context); + }, + child: Image.asset( + 'assets/images/favorite_dialog_close.png', + width: 22.r, + height: 22.r, + ), + ), + ], + ), + SizedBox(height: 10.r,), + Expanded( + child: Container( + color:Color(0xFF868686), + width: MediaQuery.of(context).size.width, + /* child: PhotoViewGallery.builder( + scrollPhysics: const BouncingScrollPhysics(), + builder: (BuildContext context, int index) { + return PhotoViewGalleryPageOptions( + imageProvider: NetworkImage(widget.imageItems[index]), + ); + }, + itemCount: 2, + pageController:PageController(initialPage: defaultIndex), + // onPageChanged: (){}, + scrollDirection: Axis.horizontal, + ),*/ + ), + ), + Padding( + padding:EdgeInsets.symmetric(vertical: 15.r), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + 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: Color(0xFF505E6E)),)), + ), + 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: Color(0xFF505E6E)),)), + ), + ], + ), + ) + ], + ), + ); + } +} diff --git a/marking_app/lib/pages/homework_correction/pages/job_favorite.dart b/marking_app/lib/pages/homework_correction/pages/job_favorite.dart index 62c6346..f0c21fc 100644 --- a/marking_app/lib/pages/homework_correction/pages/job_favorite.dart +++ b/marking_app/lib/pages/homework_correction/pages/job_favorite.dart @@ -1,9 +1,17 @@ +import 'dart:convert'; + import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:functional_widget_annotation/functional_widget_annotation.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_fav_student.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/pages/homework_correction/pages/favorite_student_dialog.dart'; import 'package:marking_app/utils/index.dart'; import 'package:marking_app/utils/my_text.dart'; +import 'package:marking_app/utils/request/rest_client.dart'; /// 作业收藏学生名单列表 class JobFavorite extends StatefulWidget { @@ -11,12 +19,14 @@ class JobFavorite extends StatefulWidget { final int schoolId; final int gradeId; final String className; + final String jobName; const JobFavorite({ required this.jobId, required this.schoolId, required this.gradeId, required this.className, + required this.jobName, super.key, }); @@ -25,18 +35,32 @@ class JobFavorite extends StatefulWidget { } class _JobFavoriteState extends State with CommonMixin { - late Future?> _future; + late Future?> _future; + List? involveClasses = []; + JobReportJoinClass? classData; + late String loginName; + final int pageSize = 100; @override void initState() { super.initState(); + FastData fastData = FastData.getInstance(); + fastData.getUser().then((value) { + if (value == null || value == '') return; + Map userInfo = json.decode(value); + setState(() { + loginName = userInfo['loginName']; + }); + }); + getInvolveClasses(); _future = getData(); } - Future?> getData() async { + Future> getData() async { var _client = await getClient(); - var result = await _client.getListOfJobFavorites(widget.jobId, widget.gradeId, widget.schoolId, widget.className); - return result.data; + var result = await _client.getListOfJobFavorites( + widget.jobId, widget.jobName, widget.className,loginName,pageSize); + return result.data!.items; } Future toGoCancelFavorite(int jobId, int studentId) async { @@ -47,53 +71,226 @@ class _JobFavoriteState extends State with CommonMixin { } } + Future getInvolveClasses() async { + try { + RestClient _client = await getClient(); + BaseStructureResult> result = + await _client.getJobReportJoinClasses(widget.jobId); + if (result.success) { + toUpState(setState, () { + involveClasses = [ + JobReportJoinClass(-1, '全部', -1, '全部', '全部', '全部', -1, -1, '-1'), + ...(result.data ?? []) + ]; + involveClasses?.forEach((element) { + if(element.className == widget.className && element.gradeId == widget.gradeId && element.schoolId == widget.schoolId){ + classData = element; + } + }); + }, mounted); + } + print('involveClasses=${involveClasses!.length}'); + _future = getData(); + } catch (e) { + print(e); + } + } + + void showStudentDialog(BuildContext context) { + showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + insetPadding: EdgeInsets.all(25.r), + content: FavoriteStudentDialog(), + contentPadding: EdgeInsets.all(0), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.all(Radius.circular(15.r)))); + }, + ); + } + @override Widget build(BuildContext context) { + bool isPadFlag = isPad(); return Scaffold( + backgroundColor: Color.fromRGBO(245, 245, 245, 1), appBar: AppBar( // titleSpacing: 0, - leading: IconButton(icon: Icon(Icons.arrow_back_ios), onPressed: () => Navigator.of(context).pop()), + elevation: 0.0, + leading: IconButton( + icon: Icon(Icons.arrow_back_ios), + onPressed: () => Navigator.of(context).pop()), iconTheme: IconThemeData(color: Colors.black), title: quickText('收藏夹'), + centerTitle: true, backgroundColor: Colors.white, ), - body: MyFutureBuilder.buildFutureBuilderOfSingleInstance>( + body: MyFutureBuilder.buildFutureBuilderOfSingleInstance< + List>( context, _future, - (List? datas) { - if (datas == null) + (List? datas) { + /* if (datas == null) return Container( child: Center( child: quickText('请求错误'), ), - ); + );*/ + print('datas${datas}'); + + List pageList = []; + List groupList = []; + if(datas!.length>0){ + for (var item in datas) { + pageList.add(item.questionPage); + } + pageList = pageList.toSet().toList(); + + for (var page in pageList) { + var printList = datas.where((element) => element.questionPage == page).toList(); + groupList.add({"questionPage": page, "list": printList}); + } + } + return Container( child: Column( children: [ - Container(child: quickText(widget.className)), - Expanded( - child: ListView.builder( - itemBuilder: (context, index) { - JobFavoriteItemModel item = datas[index]; - return Container( + Padding( + padding: EdgeInsets.symmetric(vertical: 0.r, horizontal: 14.r), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + '函数A的对称性研究', + style: + TextStyle(fontSize: 14.sp, color: Color(0xFF3C3C3C)), + ), + // 下拉框 + Container( + padding: EdgeInsets.symmetric(vertical: 10.h, horizontal: 10.w), + child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - quickText(item.studentName, color: Color.fromRGBO(102, 102, 102, 1), size: 14.sp), - quickText('收藏时间:${item.createTime}', color: Color.fromRGBO(137, 137, 137, 1), size: 10.sp), - InkWell( - onTap: () async {}, - child: Icon( - Icons.favorite, - size: 28.sp, - color: Color.fromRGBO(252, 108, 108, 1), + $classSelection(involveClasses, classData, + call: (JobReportJoinClass _classData) { + classData = _classData; + if (_classData.gradeId == -1) classData = null; + _future = getData(); + toUpState(setState, () {}, mounted); + }), + // Expanded(child: Text('')), + ], + ), + ), + + ], + ), + ), + Container( + width: MediaQuery.of(context).size.width, + height: 1.r, + decoration: BoxDecoration( + color: Color(0xFFCCCCCC), + ), + ), + Expanded( + child: isPadFlag? Padding( + padding: EdgeInsets.only(top: 10.r,bottom:8.r,left: 14.r,right: 14.r), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: EdgeInsets.only(bottom: 5.r), + child: Text('第六题',style: TextStyle(fontSize: 14.sp,color: Color(0xFF2E5BFF)),), + ), +GridView(gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 2, + mainAxisSpacing: 8.r, + crossAxisSpacing: 10.r, + childAspectRatio: 556 / 112, +), + shrinkWrap: true, + children: [ + Container( + padding: EdgeInsets.symmetric(vertical: 5.r,horizontal: 10.r), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.all(Radius.circular(6.r)), + ), + child: InkWell( + onTap: (){ + showStudentDialog(context); + }, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + quickText('张小凡', + color: Color(0xFF333333), + size: 12.sp), + Expanded(child: Container()), + Padding( + padding:EdgeInsets.only(right: 8.r), + child: Text('12班',style: TextStyle(fontSize: 12.sp,color: Color(0xFF666666)),), + ), + InkWell( + onTap: () async { + print('删除'); + }, + child: Image.asset('assets/images/favorite_delete_icon.png',width: 26.r,height: 26.r,), + ), + ], + ), + ), + ), +],), + + ], + ), + ):ListView.builder( + shrinkWrap: true, + itemBuilder: (context, index) { + // Items item = datas[index]; + return Padding( + padding: EdgeInsets.only(top: 10.r,bottom:8.r,left: 14.r,right: 14.r), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: EdgeInsets.only(bottom: 5.r), + child: Text('第六题',style: TextStyle(fontSize: 14.sp,color: Color(0xFF2E5BFF)),), + ), + Container( + padding: EdgeInsets.symmetric(vertical: 5.r,horizontal: 10.r), + margin: EdgeInsets.only(top: 5.r), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.all(Radius.circular(6.r)), + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + quickText('张小凡', + color: Color(0xFF333333), + size: 14.sp), + Expanded(child: Container()), + Padding( + padding:EdgeInsets.only(right: 8.r), + child: Text('12班',style: TextStyle(fontSize: 14.sp,color: Color(0xFF666666)),), + ), + InkWell( + onTap: () async {}, + child: Image.asset('assets/images/favorite_delete_icon.png',width: 32.r,height: 32.r,), + ), + ], ), ), ], ), ); }, - itemCount: datas.length, + // itemCount: datas.length, + itemCount: 10, ), ), ], @@ -102,4 +299,40 @@ class _JobFavoriteState extends State with CommonMixin { ), ); } + } +/// 下拉选择框 +@swidget +Widget $classSelection( + List? involveClasses, JobReportJoinClass? classData, + {required Function(JobReportJoinClass) call}) { + if (involveClasses == null) + return Container(child: quickText('点击重试')); // 点击重试 + return Container( + // width: 200.r, + padding: EdgeInsets.symmetric(horizontal: 10.r), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.vertical( + top: Radius.elliptical(10, 10), + bottom: Radius.elliptical(10, 10), + )), + child: DropdownButton( + value: classData?.uniqueId ?? '-1', + style: TextStyle(color: Color.fromRGBO(89, 89, 89, 1), fontSize: 12.sp), + underline: Container(), + // isExpanded:true, + items: involveClasses.map((e) { + return DropdownMenuItem( + value: e.uniqueId!, + child: quickText(e.uniqueId == '-1'?e.graduationYear:e.graduationYear + e.className, + size: 12.sp, color: Colors.black), + ); + }).toList(), + onChanged: (String? value) { + if (value == null) return; + call(involveClasses.firstWhere((element) => element.uniqueId == value)); + }, + ), + ); +} \ No newline at end of file diff --git a/marking_app/lib/pages/homework_correction/pages/job_list_participate_in_class.dart b/marking_app/lib/pages/homework_correction/pages/job_list_participate_in_class.dart index 682db5a..688909d 100644 --- a/marking_app/lib/pages/homework_correction/pages/job_list_participate_in_class.dart +++ b/marking_app/lib/pages/homework_correction/pages/job_list_participate_in_class.dart @@ -270,7 +270,7 @@ class _JobListParticipateInClassState extends State w RouterManager.router.navigateTo( context, RouterManager.jobFavoritePagePath + - '?className=${Uri.encodeComponent(task.className)}&jobId=${widget.jobId}&schoolId=${task.dpcSchoolId}&gradeId=${task.dpcGradeId}', + '?className=${Uri.encodeComponent(task.className)}&jobId=${widget.jobId}&schoolId=${task.dpcSchoolId}&gradeId=${task.dpcGradeId}&jobName=${widget.jobName}', transition: getTransition(), ); } diff --git a/marking_app/lib/pages/homework_correction/quick_check_personal.dart b/marking_app/lib/pages/homework_correction/quick_check_personal.dart index e020182..ed513f8 100644 --- a/marking_app/lib/pages/homework_correction/quick_check_personal.dart +++ b/marking_app/lib/pages/homework_correction/quick_check_personal.dart @@ -7,6 +7,7 @@ import 'package:marking_app/common/model/job/job_data_report.dart'; import 'package:marking_app/pages/homework_correction/widget/student_kg_table.dart'; import 'package:marking_app/pages/homework_correction/widget/student_zg_table.dart'; import 'package:marking_app/utils/request/rest_client.dart'; +import 'package:marking_app/utils/toast_utils.dart'; class QuickCheckPersonal extends StatefulWidget { final int jobId; @@ -33,15 +34,21 @@ class _QuickCheckPersonalState extends State void getJobPersonal() async { RestClient _client = await getClient(); Map params = {}; - // params['jobid'] = widget.jobId; - params['jobid'] = '521646983660101'; + params['jobid'] = widget.jobId; + // params['jobid'] = '521646983660101'; params['studentId'] = widget.studentId; BaseStructureResult data = await _client.getJobPersonalReport(params); + if(data.data!.studentId != null){ + setState(() { + studentInfo = data.data; + }); + }else{ + Navigator.pop(context); + ToastUtils.showError('暂无数据'); + } EasyLoading.dismiss(); - setState(() { - studentInfo = data.data; - }); + } @override @@ -54,7 +61,7 @@ class _QuickCheckPersonalState extends State appBar: AppBar( backgroundColor: Colors.white, title: Text( - studentInfo!.studentName, + studentInfo!.studentName!, style: TextStyle(fontSize: 16.sp, color: Color(0xFF000000)), ), centerTitle: true, diff --git a/marking_app/lib/pages/homework_correction/quick_data_check.dart b/marking_app/lib/pages/homework_correction/quick_data_check.dart index d9eb4fe..6526331 100644 --- a/marking_app/lib/pages/homework_correction/quick_data_check.dart +++ b/marking_app/lib/pages/homework_correction/quick_data_check.dart @@ -36,8 +36,8 @@ class _QuickDataCheckPageState extends State with CommonMixi void getJobDataReport() async { RestClient _client = await getClient(); Map params = {}; - // params['jobid'] = widget.jobId; - params['jobid'] = '521646983660101'; + params['jobid'] = widget.jobId; + print(widget.jobId); BaseStructureResult data = await _client.getJobDataCenterReport(params); EasyLoading.dismiss(); diff --git a/marking_app/lib/pages/homework_correction/widget/quick_student_data_table.dart b/marking_app/lib/pages/homework_correction/widget/quick_student_data_table.dart index 4631bc6..d243f10 100644 --- a/marking_app/lib/pages/homework_correction/widget/quick_student_data_table.dart +++ b/marking_app/lib/pages/homework_correction/widget/quick_student_data_table.dart @@ -54,10 +54,11 @@ class _QuickStudentDataTableState extends State { cells: [ DataCell(InkWell( onTap: () { + RouterManager.router.navigateTo( context, RouterManager.quickCheckPersonalPath + - '?jobId=${521646983660101}&studentId=${item.studentId}', + '?jobId=${widget.jobId}&studentId=${item.studentId}', transition: getTransition(), ); }, @@ -68,7 +69,7 @@ class _QuickStudentDataTableState extends State { mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ - Text(item.studentName, + Text(item.studentName!, style: TextStyle(fontSize: 12.sp, color: Color(0xFF6888FD))), SizedBox( diff --git a/marking_app/lib/routes/RouterManager.dart b/marking_app/lib/routes/RouterManager.dart index 31d5cc0..81b30a0 100644 --- a/marking_app/lib/routes/RouterManager.dart +++ b/marking_app/lib/routes/RouterManager.dart @@ -312,7 +312,8 @@ class RouterManager { int gradeId = int.parse(params['gradeId']![0]); int schoolId = int.parse(params['schoolId']![0]); String className = params['className']![0]; - return JobFavorite(jobId: jobId, gradeId: gradeId, schoolId: schoolId, className: className); + String jobName = params['jobName']![0]; + return JobFavorite(jobId: jobId, gradeId: gradeId, schoolId: schoolId, className: className,jobName:jobName); }, ); diff --git a/marking_app/lib/utils/request/rest_client.dart b/marking_app/lib/utils/request/rest_client.dart index e220520..026cc2f 100644 --- a/marking_app/lib/utils/request/rest_client.dart +++ b/marking_app/lib/utils/request/rest_client.dart @@ -17,6 +17,7 @@ import 'package:marking_app/common/model/job/job_concerned_with_student.dart'; import 'package:marking_app/common/model/job/job_concerned_with_student_params.dart'; import 'package:marking_app/common/model/job/job_data_report.dart'; import 'package:marking_app/common/model/job/job_do_marking_status_info.dart'; +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_model.dart'; import 'package:marking_app/common/model/job/job_level_set_params.dart'; @@ -303,12 +304,13 @@ abstract class RestClient { @the_retrofit.Query("jobid") int jobId); // 作业 => 作业收藏列表 - @the_retrofit.GET("${RequestConfig.hwProxyKeywords}/dpc-api/api/read/job-favorites") - Future>> getListOfJobFavorites( - @the_retrofit.Query("jobid") int jobId, - @the_retrofit.Query("gradeId") int gradeId, - @the_retrofit.Query("schoolId") int schoolId, + @the_retrofit.GET("/api/jobs/fav-student-jobs") + Future> getListOfJobFavorites( + @the_retrofit.Query("JobId") int jobId, + @the_retrofit.Query("JobName") String jobName, @the_retrofit.Query("className") String className, + @the_retrofit.Query("Account") String loginName, + @the_retrofit.Query("PageSize") int pageSize, ); // 作业 => 作业收藏列表