Compare commits

..

4 Commits

Author SHA1 Message Date
machuanyu 001ac3a21b Merge branch 'mcy_revision' into job_report_revision 2024-03-12 14:09:31 +08:00
1147192855@qq.com 57642af805 no message 2024-03-12 14:08:07 +08:00
1147192855@qq.com 8130e8250a no message 2024-03-12 13:51:46 +08:00
1147192855@qq.com e4c889fc6d no message 2024-03-12 13:48:45 +08:00
6 changed files with 186 additions and 20 deletions

1
.gitignore vendored
View File

@ -205,3 +205,4 @@ marking_app/lib/common/model/job/job_favorite_model.g.dart
marking_app/lib/common/model/job/job_level_set_params.g.dart
marking_app/lib/common/model/job/job_student_goups.g.dart
marking_app/lib/common/model/job/job_student_level.g.dart
marking_app/lib/common/model/job/job_favorite_item_model.g.dart

View File

@ -0,0 +1,25 @@
import 'package:json_annotation/json_annotation.dart';
part 'job_favorite_item_model.g.dart';
@JsonSerializable()
class JobFavoriteItemModel extends Object {
@JsonKey(name: 'studentId')
int studentId;
@JsonKey(name: 'studentName')
String studentName;
@JsonKey(name: 'createTime')
String createTime;
JobFavoriteItemModel(
this.studentId,
this.studentName,
this.createTime,
);
factory JobFavoriteItemModel.fromJson(Map<String, dynamic> srcJson) => _$JobFavoriteItemModelFromJson(srcJson);
Map<String, dynamic> toJson() => _$JobFavoriteItemModelToJson(this);
}

View File

@ -0,0 +1,105 @@
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:marking_app/common/mixin/common.dart';
import 'package:marking_app/common/model/job/job_favorite_item_model.dart';
import 'package:marking_app/utils/index.dart';
import 'package:marking_app/utils/my_text.dart';
///
class JobFavorite extends StatefulWidget {
final int jobId;
final int schoolId;
final int gradeId;
final String className;
const JobFavorite({
required this.jobId,
required this.schoolId,
required this.gradeId,
required this.className,
super.key,
});
@override
State<JobFavorite> createState() => _JobFavoriteState();
}
class _JobFavoriteState extends State<JobFavorite> with CommonMixin {
late Future<List<JobFavoriteItemModel>?> _future;
@override
void initState() {
super.initState();
_future = getData();
}
Future<List<JobFavoriteItemModel>?> getData() async {
var _client = await getClient();
var result = await _client.getListOfJobFavorites(widget.jobId, widget.gradeId, widget.schoolId, widget.className);
return result.data;
}
Future<void> toGoCancelFavorite(int jobId, int studentId) async {
var _client = await getClient();
var result = await _client.toJobCancelFavorite(jobId, studentId);
if (result.success && (result.data ?? false)) {
_future = getData();
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
// titleSpacing: 0,
leading: IconButton(icon: Icon(Icons.arrow_back_ios), onPressed: () => Navigator.of(context).pop()),
iconTheme: IconThemeData(color: Colors.black),
title: quickText('收藏夹'),
backgroundColor: Colors.white,
),
body: MyFutureBuilder.buildFutureBuilderOfSingleInstance<List<JobFavoriteItemModel>>(
context,
_future,
(List<JobFavoriteItemModel>? datas) {
if (datas == null)
return Container(
child: Center(
child: quickText('请求错误'),
),
);
return Container(
child: Column(
children: [
Container(child: quickText(widget.className)),
Expanded(
child: ListView.builder(
itemBuilder: (context, index) {
JobFavoriteItemModel item = datas[index];
return Container(
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),
),
),
],
),
);
},
itemCount: datas.length,
),
),
],
));
},
),
);
}
}

View File

@ -54,7 +54,7 @@ class _JobListParticipateInClassState extends State<JobListParticipateInClass> w
Future<void> getListOfJobFavoritesData() async {
RestClient _client = await getClient();
BaseStructureResult<List<JobFavoriteModel>> result = await _client.getListOfJobFavorites(widget.jobId);
BaseStructureResult<List<JobFavoriteModel>> result = await _client.getListOfJobFavoriteNumber(widget.jobId);
if (result.success) {
result.data?.forEach((e) {
favoriteMap['${e.schoolId}+${e.gradeId}+${e.className}'] = e.count;
@ -266,7 +266,14 @@ class _JobListParticipateInClassState extends State<JobListParticipateInClass> w
}
//
void bookmarks(MarkingTasks task) {}
void bookmarks(MarkingTasks task) {
RouterManager.router.navigateTo(
context,
RouterManager.jobFavoritePagePath +
'?className=${Uri.encodeComponent(task.className)}&jobId=${widget.jobId}&schoolId=${task.dpcSchoolId}&gradeId=${task.dpcGradeId}',
transition: getTransition(),
);
}
//
void quickDataCheck(MarkingTasks task) {
@ -282,7 +289,7 @@ class _JobListParticipateInClassState extends State<JobListParticipateInClass> w
RouterManager.router.navigateTo(
context,
RouterManager.jobReportPagePath +
'?uniqueId=${task.id}&title=${Uri.encodeComponent(widget.jobName)}&id=${widget.jobId}&schoolId=${task.dpcSchoolId}&gradeId=${task.dpcGradeId}&className=${task.className}',
'?title=${Uri.encodeComponent(widget.jobName)}&id=${widget.jobId}&schoolId=${task.dpcSchoolId}&gradeId=${task.dpcGradeId}&className=${Uri.encodeComponent(task.className)}',
transition: getTransition(),
);
}
@ -621,7 +628,7 @@ class TabletEndCompleted extends StatelessWidget {
color: Color.fromRGBO(244, 244, 244, 1),
borderRadius: BorderRadius.circular(20.r),
child: InkWell(
onTap: () async {},
onTap: () => bookmarks(taskItem),
borderRadius: BorderRadius.circular(8.r),
child: Container(
alignment: Alignment.center,
@ -808,13 +815,13 @@ class MobileEndCompleted extends StatelessWidget {
color: Color.fromRGBO(244, 244, 244, 1),
borderRadius: BorderRadius.circular(20.r),
child: InkWell(
onTap: () async {},
onTap: () => bookmarks(task),
borderRadius: BorderRadius.circular(8.r),
child: Container(
alignment: Alignment.center,
padding: EdgeInsets.symmetric(vertical: 5.h),
decoration: BoxDecoration(borderRadius: BorderRadius.circular(20.r)),
child: quickText('收藏夹(${task.collectNumber}',
child: quickText(task.collectNumber > 0 ? '收藏夹(${task.collectNumber})' : '收藏夹',
size: 10.sp, color: Color.fromRGBO(102, 102, 102, 1)),
),
),
@ -989,7 +996,7 @@ Widget $itemDataViewOfPad(
color: Color.fromRGBO(244, 244, 244, 1),
borderRadius: BorderRadius.circular(20.r),
child: InkWell(
onTap: () async {},
onTap: () => bookmarks(task),
borderRadius: BorderRadius.circular(8.r),
child: Container(
alignment: Alignment.center,
@ -1050,7 +1057,7 @@ Widget $itemDataViewOfPad(
color: Color.fromRGBO(244, 244, 244, 1),
borderRadius: BorderRadius.circular(20.r),
child: InkWell(
onTap: () async {},
onTap: () => bookmarks(task),
borderRadius: BorderRadius.circular(8.r),
child: Container(
alignment: Alignment.center,
@ -1241,7 +1248,7 @@ Widget $itemDataView(
color: Color.fromRGBO(244, 244, 244, 1),
borderRadius: BorderRadius.circular(20.r),
child: InkWell(
onTap: () async {},
onTap: () => bookmarks(task),
borderRadius: BorderRadius.circular(8.r),
child: Container(
alignment: Alignment.center,
@ -1302,7 +1309,7 @@ Widget $itemDataView(
color: Color.fromRGBO(244, 244, 244, 1),
borderRadius: BorderRadius.circular(20.r),
child: InkWell(
onTap: () async {},
onTap: () => bookmarks(task),
borderRadius: BorderRadius.circular(8.r),
child: Container(
alignment: Alignment.center,

View File

@ -17,6 +17,7 @@ import 'package:marking_app/pages/homework_correction/do_papers_job_exam.dart';
import 'package:marking_app/pages/homework_correction/job_priority_review_set.dart';
import 'package:marking_app/pages/homework_correction/job_report.dart';
import 'package:marking_app/pages/homework_correction/job_student_group.dart';
import 'package:marking_app/pages/homework_correction/pages/job_favorite.dart';
import 'package:marking_app/pages/homework_correction/pages/job_list_participate_in_class.dart';
import 'package:marking_app/pages/homework_correction/review_job.dart';
import 'package:marking_app/pages/homework_correction/quick_check_personal.dart';
@ -59,6 +60,8 @@ class RouterManager {
static const String jobExamPagePath = '/job/exam/index';
// ==> ==>
static const String jobListParticipateInClassPath = '/job/list/participateInClass';
// ==>
static const String jobFavoritePagePath = '/job/favorite/index';
static const String reportClassTeacherPath = 'report/details/reportClassTeacher';
static const String reportSubjectTeacherPath = 'report/details/reportSubjectTeacher';
@ -193,7 +196,7 @@ class RouterManager {
gradeId = int.parse(params['gradeId']![0]);
}
String? className = params['className']?[0];
return JobReport(id: id, title: title,schoolId:schoolId,gradeId:gradeId,className:className);
return JobReport(id: id, title: title, schoolId: schoolId, gradeId: gradeId, className: className);
});
//
@ -290,19 +293,28 @@ class RouterManager {
//
static final _jobPriorityReviewSetPageHandler = Handler(
handlerFunc: (BuildContext? context, Map<String, List<String>> params){
handlerFunc: (BuildContext? context, Map<String, List<String>> params) {
String groupId = params['groupId']![0];
return JobPriorityReviewSet(groupId:groupId);
return JobPriorityReviewSet(groupId: groupId);
},
);
//
static final _jobStudentGroupPageHandler = Handler(
handlerFunc: (BuildContext? context, Map<String, List<String>> params){
handlerFunc: (BuildContext? context, Map<String, List<String>> params) {
return JobStudentGroup();
},
);
//
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];
return JobFavorite(jobId: jobId, gradeId: gradeId, schoolId: schoolId, className: className);
},
);
//
// static final _doMarkingPapers = Handler(handlerFunc: (BuildContext? context, Map<String, List<String>> params) => MarkingPapers());
@ -343,8 +355,10 @@ class RouterManager {
router.define(quickDataCheckPath, handler: _quickDataCheckPageHandler, transitionType: TransitionType.material);
router.define(quickCheckPersonalPath,
handler: _quickCheckPersonalPageHandler, transitionType: TransitionType.material);
router.define(jobPriorityReviewSetPath, handler: _jobPriorityReviewSetPageHandler, transitionType: TransitionType.material);
router.define(jobPriorityReviewSetPath,
handler: _jobPriorityReviewSetPageHandler, transitionType: TransitionType.material);
router.define(jobStudentGroupPath, handler: _jobStudentGroupPageHandler, transitionType: TransitionType.material);
router.define(jobFavoritePagePath, handler: _jobFavoritePagePathHandler, transitionType: TransitionType.material);
// getTransition()

View File

@ -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_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';
import 'package:marking_app/common/model/job/job_note_taking_trajectory.dart';
@ -296,9 +297,24 @@ abstract class RestClient {
Future<BaseStructureResult<List<MarkingTasks>>> getJobListParticipateInClass(
@the_retrofit.Query("markingId") int jobId);
// =>
// =>
@the_retrofit.GET("${RequestConfig.hwProxyKeywords}/dpc-api/api/read/job-favorite-count-by-class")
Future<BaseStructureResult<List<JobFavoriteModel>>> getListOfJobFavorites(@the_retrofit.Query("jobid") int jobId);
Future<BaseStructureResult<List<JobFavoriteModel>>> getListOfJobFavoriteNumber(
@the_retrofit.Query("jobid") int jobId);
// =>
@the_retrofit.GET("${RequestConfig.hwProxyKeywords}/dpc-api/api/read/job-favorites")
Future<BaseStructureResult<List<JobFavoriteItemModel>>> getListOfJobFavorites(
@the_retrofit.Query("jobid") int jobId,
@the_retrofit.Query("gradeId") int gradeId,
@the_retrofit.Query("schoolId") int schoolId,
@the_retrofit.Query("className") String className,
);
// =>
@the_retrofit.POST("${RequestConfig.hwProxyKeywords}/dpc-api/api/read/cancel-favorite")
Future<BaseStructureResult<bool>> toJobCancelFavorite(
@the_retrofit.Field() int jobId, @the_retrofit.Field() int studentId);
// =>
@the_retrofit.GET("/api/read/job-data-center-report")
@ -322,6 +338,4 @@ abstract class RestClient {
// => /
@the_retrofit.POST("/api/read/jc-job-read-level")
Future<BaseStructureResult> getSetJobReadLevel(@the_retrofit.Body() JobLevelSetParams params);
}