轨迹页面
This commit is contained in:
parent
1fbb102370
commit
aa9dd3d83c
|
|
@ -224,3 +224,4 @@ marking_app/lib/common/model/job/job_knowledge_detail_student.g.dart
|
||||||
marking_app/lib/pages/homework_correction/job_home.g.dart
|
marking_app/lib/pages/homework_correction/job_home.g.dart
|
||||||
marking_app/lib/common/model/marking/keyboard_assist_event.g.dart
|
marking_app/lib/common/model/marking/keyboard_assist_event.g.dart
|
||||||
marking_app/lib/common/model/marking/marking_history_zoom_info.g.dart
|
marking_app/lib/common/model/marking/marking_history_zoom_info.g.dart
|
||||||
|
marking_app/lib/common/model/job/job_handwriting.g.dart
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,55 @@
|
||||||
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
|
|
||||||
|
part 'job_handwriting.g.dart';
|
||||||
|
|
||||||
|
@JsonSerializable()
|
||||||
|
class JobHandwriting extends Object {
|
||||||
|
@JsonKey(name: 'lattices')
|
||||||
|
List<Lattices> lattices;
|
||||||
|
|
||||||
|
@JsonKey(name: 'paperPicture')
|
||||||
|
String paperPicture;
|
||||||
|
|
||||||
|
@JsonKey(name: 'pageNum')
|
||||||
|
int pageNum;
|
||||||
|
|
||||||
|
@JsonKey(name: 'pageCount')
|
||||||
|
int pageCount;
|
||||||
|
|
||||||
|
JobHandwriting(
|
||||||
|
this.lattices,
|
||||||
|
this.paperPicture,
|
||||||
|
this.pageNum,
|
||||||
|
this.pageCount,
|
||||||
|
);
|
||||||
|
|
||||||
|
factory JobHandwriting.fromJson(Map<String, dynamic> srcJson) => _$JobHandwritingFromJson(srcJson);
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() => _$JobHandwritingToJson(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@JsonSerializable()
|
||||||
|
class Lattices extends Object {
|
||||||
|
@JsonKey(name: 'stroke')
|
||||||
|
int stroke;
|
||||||
|
|
||||||
|
@JsonKey(name: 'x')
|
||||||
|
int x;
|
||||||
|
|
||||||
|
@JsonKey(name: 'y')
|
||||||
|
int y;
|
||||||
|
|
||||||
|
@JsonKey(name: 'time')
|
||||||
|
int time;
|
||||||
|
|
||||||
|
Lattices(
|
||||||
|
this.stroke,
|
||||||
|
this.x,
|
||||||
|
this.y,
|
||||||
|
this.time,
|
||||||
|
);
|
||||||
|
|
||||||
|
factory Lattices.fromJson(Map<String, dynamic> srcJson) => _$LatticesFromJson(srcJson);
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() => _$LatticesToJson(this);
|
||||||
|
}
|
||||||
|
|
@ -12,20 +12,19 @@ import 'package:marking_app/utils/common_utils.dart';
|
||||||
import 'package:marking_app/utils/request/rest_client.dart';
|
import 'package:marking_app/utils/request/rest_client.dart';
|
||||||
import 'package:marking_app/utils/toast_utils.dart';
|
import 'package:marking_app/utils/toast_utils.dart';
|
||||||
|
|
||||||
|
import 'widget/answer_handwriting.dart';
|
||||||
|
|
||||||
class QuickCheckPersonal extends StatefulWidget {
|
class QuickCheckPersonal extends StatefulWidget {
|
||||||
final int jobId;
|
final int jobId;
|
||||||
final int studentId;
|
final int studentId;
|
||||||
|
|
||||||
const QuickCheckPersonal(
|
const QuickCheckPersonal({Key? key, required this.jobId, required this.studentId}) : super(key: key);
|
||||||
{Key? key, required this.jobId, required this.studentId})
|
|
||||||
: super(key: key);
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
State<QuickCheckPersonal> createState() => _QuickCheckPersonalState();
|
State<QuickCheckPersonal> createState() => _QuickCheckPersonalState();
|
||||||
}
|
}
|
||||||
|
|
||||||
class _QuickCheckPersonalState extends State<QuickCheckPersonal>
|
class _QuickCheckPersonalState extends State<QuickCheckPersonal> with CommonMixin {
|
||||||
with CommonMixin {
|
|
||||||
StudentDetails? studentInfo;
|
StudentDetails? studentInfo;
|
||||||
|
|
||||||
void initState() {
|
void initState() {
|
||||||
|
|
@ -40,18 +39,16 @@ class _QuickCheckPersonalState extends State<QuickCheckPersonal>
|
||||||
params['jobid'] = widget.jobId;
|
params['jobid'] = widget.jobId;
|
||||||
// params['jobid'] = '521646983660101';
|
// params['jobid'] = '521646983660101';
|
||||||
params['studentId'] = widget.studentId;
|
params['studentId'] = widget.studentId;
|
||||||
BaseStructureResult<StudentDetails?> data =
|
BaseStructureResult<StudentDetails?> data = await _client.getJobPersonalReport(params);
|
||||||
await _client.getJobPersonalReport(params);
|
if (data.data!.studentId != null) {
|
||||||
if(data.data!.studentId != null){
|
|
||||||
setState(() {
|
setState(() {
|
||||||
studentInfo = data.data;
|
studentInfo = data.data;
|
||||||
});
|
});
|
||||||
}else{
|
} else {
|
||||||
Navigator.pop(context);
|
Navigator.pop(context);
|
||||||
ToastUtils.showError('暂无数据');
|
ToastUtils.showError('暂无数据');
|
||||||
}
|
}
|
||||||
EasyLoading.dismiss();
|
EasyLoading.dismiss();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|
@ -74,7 +71,7 @@ class _QuickCheckPersonalState extends State<QuickCheckPersonal>
|
||||||
),
|
),
|
||||||
actions: [
|
actions: [
|
||||||
ReturnToHomepage(),
|
ReturnToHomepage(),
|
||||||
/* Title(
|
/* Title(
|
||||||
color: Color(0xFF6888FD),
|
color: Color(0xFF6888FD),
|
||||||
child: Container(
|
child: Container(
|
||||||
child: InkWell(
|
child: InkWell(
|
||||||
|
|
@ -89,20 +86,19 @@ class _QuickCheckPersonalState extends State<QuickCheckPersonal>
|
||||||
alignment: Alignment.center,
|
alignment: Alignment.center,
|
||||||
),
|
),
|
||||||
),*/
|
),*/
|
||||||
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|
||||||
body: SingleChildScrollView(
|
body: SingleChildScrollView(
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
Padding(
|
Padding(
|
||||||
padding: EdgeInsets.only(top: 14.r,left: 14.r),
|
padding: EdgeInsets.only(top: 14.r, left: 14.r),
|
||||||
child: Row(
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
InkWell(
|
InkWell(
|
||||||
onTap: (){
|
onTap: () {
|
||||||
RouterManager.router.navigateTo(context, '${RouterManager.jobPersonalDetailPath}?studentId=${widget.studentId}&studentName=${Uri.encodeComponent(studentInfo!.studentName!)}');
|
RouterManager.router.navigateTo(context,
|
||||||
|
'${RouterManager.jobPersonalDetailPath}?studentId=${widget.studentId}&studentName=${Uri.encodeComponent(studentInfo!.studentName!)}');
|
||||||
},
|
},
|
||||||
child: Container(
|
child: Container(
|
||||||
width: 93.r,
|
width: 93.r,
|
||||||
|
|
@ -112,20 +108,33 @@ class _QuickCheckPersonalState extends State<QuickCheckPersonal>
|
||||||
borderRadius: BorderRadius.circular(4.r),
|
borderRadius: BorderRadius.circular(4.r),
|
||||||
),
|
),
|
||||||
child: Center(
|
child: Center(
|
||||||
child: Text('历史查询',style: TextStyle(fontSize: 10.r,color: Color(0xFF2080F7)),),
|
child: Text(
|
||||||
|
'历史查询',
|
||||||
|
style: TextStyle(fontSize: 10.r, color: Color(0xFF2080F7)),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
SizedBox(width: 10.r,),
|
SizedBox(
|
||||||
Container(
|
width: 10.r,
|
||||||
width: 93.r,
|
),
|
||||||
height: 28.r,
|
InkWell(
|
||||||
decoration: BoxDecoration(
|
onTap: () {
|
||||||
color: Color(0xFFEDFFF7),
|
showAnswerHandwriting(context, jobId: widget.jobId, studentId: widget.studentId);
|
||||||
borderRadius: BorderRadius.circular(4.r),
|
},
|
||||||
),
|
child: Container(
|
||||||
child: Center(
|
width: 93.r,
|
||||||
child: Text('原稿笔迹',style: TextStyle(fontSize: 10.r,color: Color(0xFF4CC793)),),
|
height: 28.r,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Color(0xFFEDFFF7),
|
||||||
|
borderRadius: BorderRadius.circular(4.r),
|
||||||
|
),
|
||||||
|
child: Center(
|
||||||
|
child: Text(
|
||||||
|
'原稿笔迹',
|
||||||
|
style: TextStyle(fontSize: 10.r, color: Color(0xFF4CC793)),
|
||||||
|
),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
|
@ -147,22 +156,22 @@ class _QuickCheckPersonalState extends State<QuickCheckPersonal>
|
||||||
children: [
|
children: [
|
||||||
Text(
|
Text(
|
||||||
'客观题',
|
'客观题',
|
||||||
style: TextStyle(
|
style: TextStyle(fontSize: 14.sp, color: Color(0xFF5C5C5C), fontWeight: FontWeight.w600),
|
||||||
fontSize: 14.sp, color: Color(0xFF5C5C5C),fontWeight: FontWeight.w600),
|
|
||||||
),
|
),
|
||||||
SizedBox(
|
SizedBox(
|
||||||
width: 10.r,
|
width: 10.r,
|
||||||
),
|
),
|
||||||
Text(
|
Text(
|
||||||
'${studentInfo!.kgValidRate}%',
|
'${studentInfo!.kgValidRate}%',
|
||||||
style: TextStyle(
|
style: TextStyle(fontSize: 14.sp, color: Color(0xFF6888FD), fontWeight: FontWeight.w600),
|
||||||
fontSize: 14.sp, color: Color(0xFF6888FD),fontWeight: FontWeight.w600),
|
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
SizedBox(height: 10.r,),
|
|
||||||
SizedBox(
|
SizedBox(
|
||||||
height: studentInfo!.kgDetails.length>8?300.r:studentInfo!.kgDetails.length * 40.r + 40.r,
|
height: 10.r,
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: studentInfo!.kgDetails.length > 8 ? 300.r : studentInfo!.kgDetails.length * 40.r + 40.r,
|
||||||
child: StudentKgTable(
|
child: StudentKgTable(
|
||||||
headList: ['题号', '学生答案', '标准答案'],
|
headList: ['题号', '学生答案', '标准答案'],
|
||||||
bodyList: studentInfo!.kgDetails,
|
bodyList: studentInfo!.kgDetails,
|
||||||
|
|
@ -171,7 +180,9 @@ class _QuickCheckPersonalState extends State<QuickCheckPersonal>
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
SizedBox(height: 15.r,),
|
SizedBox(
|
||||||
|
height: 15.r,
|
||||||
|
),
|
||||||
//主观题
|
//主观题
|
||||||
Container(
|
Container(
|
||||||
padding: EdgeInsets.symmetric(vertical: 14.r, horizontal: 10.r),
|
padding: EdgeInsets.symmetric(vertical: 14.r, horizontal: 10.r),
|
||||||
|
|
@ -188,24 +199,24 @@ class _QuickCheckPersonalState extends State<QuickCheckPersonal>
|
||||||
children: [
|
children: [
|
||||||
Text(
|
Text(
|
||||||
'主观题',
|
'主观题',
|
||||||
style: TextStyle(
|
style: TextStyle(fontSize: 14.sp, color: Color(0xFF5C5C5C), fontWeight: FontWeight.w600),
|
||||||
fontSize: 14.sp, color: Color(0xFF5C5C5C),fontWeight: FontWeight.w600),
|
|
||||||
),
|
),
|
||||||
SizedBox(
|
SizedBox(
|
||||||
width: 10.r,
|
width: 10.r,
|
||||||
),
|
),
|
||||||
Text(
|
Text(
|
||||||
'${studentInfo!.zgValidRate}%',
|
'${studentInfo!.zgValidRate}%',
|
||||||
style: TextStyle(
|
style: TextStyle(fontSize: 14.sp, color: Color(0xFF6888FD), fontWeight: FontWeight.w600),
|
||||||
fontSize: 14.sp, color: Color(0xFF6888FD),fontWeight: FontWeight.w600),
|
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
SizedBox(height: 10.r,),
|
|
||||||
SizedBox(
|
SizedBox(
|
||||||
height: studentInfo!.zgDetails.length>8?300.r:studentInfo!.zgDetails.length * 40.r + 40.r,
|
height: 10.r,
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: studentInfo!.zgDetails.length > 8 ? 300.r : studentInfo!.zgDetails.length * 40.r + 40.r,
|
||||||
child: StudentZgTable(
|
child: StudentZgTable(
|
||||||
headList: ['题号', '用时', '学生答案','批注结果','批注'],
|
headList: ['题号', '用时', '学生答案', '批注结果', '批注'],
|
||||||
bodyList: studentInfo!.zgDetails,
|
bodyList: studentInfo!.zgDetails,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,255 @@
|
||||||
|
import 'package:cached_network_image/cached_network_image.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||||
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||||
|
import 'package:flutter_spinkit/flutter_spinkit.dart';
|
||||||
|
import 'package:marking_app/common/mixin/common.dart';
|
||||||
|
import 'package:marking_app/common/model/job/job_handwriting.dart';
|
||||||
|
import 'package:marking_app/utils/index.dart';
|
||||||
|
import 'package:marking_app/utils/my_text.dart';
|
||||||
|
|
||||||
|
/// 学生答题轨迹
|
||||||
|
class AnswerHandwriting extends Dialog {
|
||||||
|
final int jobId;
|
||||||
|
final int studentId;
|
||||||
|
final int? pageNum;
|
||||||
|
final int? questionNo;
|
||||||
|
final Function closeCall;
|
||||||
|
const AnswerHandwriting({required this.jobId, required this.studentId, required this.closeCall, this.pageNum, this.questionNo});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Center(
|
||||||
|
child: Container(
|
||||||
|
// color: Color.fromRGBO(0, 0, 0, 0.6),
|
||||||
|
width: ScreenUtil().screenWidth - 60.w,
|
||||||
|
height: ScreenUtil().screenHeight - 160.h,
|
||||||
|
child: AnswerHandwritingMainBox(jobId: jobId, studentId: studentId, pageNum: pageNum, questionNo: questionNo, closeCall: closeCall),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> showAnswerHandwriting(BuildContext context, {required int jobId, required int studentId, int? pageNum}) async {
|
||||||
|
return showDialog(
|
||||||
|
context: context,
|
||||||
|
builder: (BuildContext context) => AnswerHandwriting(
|
||||||
|
jobId: jobId,
|
||||||
|
studentId: studentId,
|
||||||
|
pageNum: pageNum,
|
||||||
|
closeCall: () => Navigator.of(context).pop(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 主图
|
||||||
|
class AnswerHandwritingMainBox extends HookWidget {
|
||||||
|
const AnswerHandwritingMainBox({
|
||||||
|
required this.jobId,
|
||||||
|
required this.studentId,
|
||||||
|
required this.closeCall,
|
||||||
|
this.pageNum,
|
||||||
|
this.questionNo,
|
||||||
|
Key? key,
|
||||||
|
}) : super(key: key);
|
||||||
|
|
||||||
|
final int jobId;
|
||||||
|
final int studentId;
|
||||||
|
final int? pageNum;
|
||||||
|
final int? questionNo;
|
||||||
|
final Function closeCall;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
var _useStateModel = UseMainBoxState.use(jobId, studentId, pageNum, questionNo);
|
||||||
|
|
||||||
|
useValueChanged<JobHandwriting?, void>(_useStateModel.handwritingData.value, (_, __) {
|
||||||
|
var theData = _useStateModel.handwritingData.value;
|
||||||
|
_useStateModel.pageNum.value = theData?.pageNum;
|
||||||
|
_useStateModel.pageCount.value = theData?.pageCount ?? 0;
|
||||||
|
});
|
||||||
|
|
||||||
|
useValueChanged<int?, void>(_useStateModel.pageNum.value, (oldVal, __) {
|
||||||
|
if (oldVal != null && oldVal != _useStateModel.pageNum.value) _useStateModel.getData().catchError((e) => closeCall());
|
||||||
|
});
|
||||||
|
|
||||||
|
useEffect(() {
|
||||||
|
_useStateModel.getData().catchError((e) => closeCall());
|
||||||
|
_useStateModel.imageKey.value = UniqueKey();
|
||||||
|
return () {};
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
JobHandwriting? _data = _useStateModel.handwritingData.value;
|
||||||
|
print('这里是build:${_useStateModel.pageNum.value}');
|
||||||
|
|
||||||
|
if (_data == null) return Container();
|
||||||
|
return Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Stack(
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
child: CachedNetworkImage(
|
||||||
|
key: _useStateModel.imageKey.value,
|
||||||
|
fit: BoxFit.contain,
|
||||||
|
imageUrl: _data?.paperPicture ?? '',
|
||||||
|
imageBuilder: (context, imageProvider) {
|
||||||
|
return Image(image: imageProvider, fit: BoxFit.fitWidth);
|
||||||
|
},
|
||||||
|
placeholder: (context, url) => Center(child: SpinKitWaveSpinner(color: Theme.of(context).primaryColor, size: 50.r)),
|
||||||
|
errorWidget: (context, url, error) {
|
||||||
|
return Center(
|
||||||
|
child: GestureDetector(
|
||||||
|
onTap: () => (_useStateModel.imageKey.value = UniqueKey()),
|
||||||
|
child: Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
Image.asset('assets/images/test_paper_loading_failed.png'),
|
||||||
|
quickText('加载失败,点击重试', color: Color.fromRGBO(148, 163, 182, 1), size: 12.sp),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
if (_useStateModel.handwritingData.value != null && _useStateModel.pageNum.value != null && _useStateModel.pageNum.value! > 1)
|
||||||
|
Positioned(
|
||||||
|
left: 3.w,
|
||||||
|
top: 280.h,
|
||||||
|
child: FloatingActionButton(
|
||||||
|
heroTag: '点击前往上一题',
|
||||||
|
tooltip: '点击前往上一题',
|
||||||
|
focusColor: Theme.of(context).primaryColor,
|
||||||
|
backgroundColor: const Color.fromRGBO(24, 32, 32, 0.1),
|
||||||
|
elevation: 6.r,
|
||||||
|
onPressed: () => easyThrottle('answer_handwriting_previous', () {
|
||||||
|
_useStateModel.pageNum.value = _useStateModel.pageNum.value! - 1;
|
||||||
|
}),
|
||||||
|
child: Icon(Icons.arrow_back_ios, color: Colors.white, size: 22.sp),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
// 下一题 按钮
|
||||||
|
if (_useStateModel.handwritingData.value != null &&
|
||||||
|
_useStateModel.pageNum.value != null &&
|
||||||
|
_useStateModel.pageNum.value! < _useStateModel.pageCount.value)
|
||||||
|
Positioned(
|
||||||
|
right: 3.w,
|
||||||
|
top: 280.h,
|
||||||
|
child: FloatingActionButton(
|
||||||
|
heroTag: '点击前往下一题',
|
||||||
|
tooltip: '点击前往下一题',
|
||||||
|
elevation: 6.r,
|
||||||
|
backgroundColor: const Color.fromRGBO(24, 32, 32, 0.1),
|
||||||
|
onPressed: () => easyThrottle('answer_handwriting_next', () {
|
||||||
|
_useStateModel.pageNum.value = _useStateModel.pageNum.value! + 1;
|
||||||
|
}),
|
||||||
|
child: Icon(Icons.arrow_forward_ios, color: Colors.white, size: 22.sp),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: Container(
|
||||||
|
padding: EdgeInsets.symmetric(horizontal: 10.w, vertical: 10.h),
|
||||||
|
alignment: Alignment.center,
|
||||||
|
color: Color.fromRGBO(0, 0, 0, 0.5),
|
||||||
|
child: Row(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
InkWell(
|
||||||
|
onTap: () {},
|
||||||
|
child: Icon(
|
||||||
|
// Icons.play_circle_outline
|
||||||
|
Icons.pause_circle_outline,
|
||||||
|
color: Colors.white,
|
||||||
|
size: 28.r,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(width: 6.w),
|
||||||
|
Expanded(
|
||||||
|
child: Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
height: 20.h,
|
||||||
|
color: Theme.of(context).primaryColor,
|
||||||
|
),
|
||||||
|
SizedBox(height: 4.h),
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
quickText('累计停顿:2次', color: Colors.white, size: 7.sp),
|
||||||
|
quickText('04:30', color: Colors.white, size: 7.sp),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(width: 16.w),
|
||||||
|
InkWell(
|
||||||
|
onTap: () {},
|
||||||
|
child: Container(
|
||||||
|
// alignment: Alignment.,
|
||||||
|
padding: EdgeInsets.symmetric(horizontal: 3.w, vertical: 1.5.h),
|
||||||
|
decoration: BoxDecoration(color: Color.fromRGBO(182, 197, 250, 1), borderRadius: BorderRadius.circular(4.r)),
|
||||||
|
child: quickText('原速播放', color: Color.fromRGBO(79, 114, 244, 1), size: 10.sp, align: TextAlign.center),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class UseMainBoxState with CommonMixin {
|
||||||
|
final int jobId;
|
||||||
|
final int studentId;
|
||||||
|
final int? questionNo;
|
||||||
|
final ValueNotifier<int?> pageNum;
|
||||||
|
final ValueNotifier<int> pageCount;
|
||||||
|
final ValueNotifier<JobHandwriting?> handwritingData;
|
||||||
|
final ValueNotifier<Key?> imageKey;
|
||||||
|
UseMainBoxState._({
|
||||||
|
required this.jobId,
|
||||||
|
required this.studentId,
|
||||||
|
required this.pageNum,
|
||||||
|
required this.handwritingData,
|
||||||
|
required this.questionNo,
|
||||||
|
required this.pageCount,
|
||||||
|
required this.imageKey,
|
||||||
|
});
|
||||||
|
|
||||||
|
// 工厂构造函数
|
||||||
|
factory UseMainBoxState.use(int jobId, int studentId, [int? pageNum, int? questionNo]) {
|
||||||
|
return UseMainBoxState._(
|
||||||
|
jobId: jobId,
|
||||||
|
studentId: studentId,
|
||||||
|
questionNo: questionNo,
|
||||||
|
pageNum: useState(pageNum),
|
||||||
|
handwritingData: useState(null),
|
||||||
|
pageCount: useState(0),
|
||||||
|
imageKey: useState(null),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future getData() async {
|
||||||
|
try {
|
||||||
|
ToastUtils.showLoading();
|
||||||
|
var _client = await getClient();
|
||||||
|
var res = await _client.getHandwriting(jobId, studentId, questionNo, pageNum.value);
|
||||||
|
if (res?.success ?? false) {
|
||||||
|
handwritingData.value = res!.data;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Future.delayed(Duration(seconds: 1), () => ToastUtils.showError(res?.message ?? '笔记数据请求失败'));
|
||||||
|
} catch (e) {
|
||||||
|
} finally {
|
||||||
|
ToastUtils.dismiss();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -19,6 +19,7 @@ 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_do_marking_status_info.dart';
|
||||||
import 'package:marking_app/common/model/job/job_fav_student.dart';
|
import 'package:marking_app/common/model/job/job_fav_student.dart';
|
||||||
import 'package:marking_app/common/model/job/job_favorite_model.dart';
|
import 'package:marking_app/common/model/job/job_favorite_model.dart';
|
||||||
|
import 'package:marking_app/common/model/job/job_handwriting.dart';
|
||||||
import 'package:marking_app/common/model/job/job_knowledge_detail_student.dart';
|
import 'package:marking_app/common/model/job/job_knowledge_detail_student.dart';
|
||||||
import 'package:marking_app/common/model/job/job_knowledge_points.dart';
|
import 'package:marking_app/common/model/job/job_knowledge_points.dart';
|
||||||
import 'package:marking_app/common/model/job/job_knowledge_points_detail.dart';
|
import 'package:marking_app/common/model/job/job_knowledge_points_detail.dart';
|
||||||
|
|
@ -74,8 +75,7 @@ abstract class RestClient {
|
||||||
|
|
||||||
// 最新版本
|
// 最新版本
|
||||||
@the_retrofit.GET("/api/version/latest?mobileTypeEnum={mobileTypeEnum}")
|
@the_retrofit.GET("/api/version/latest?mobileTypeEnum={mobileTypeEnum}")
|
||||||
Future<BaseStructureResult<SystemVersion>> getLatestVersion(
|
Future<BaseStructureResult<SystemVersion>> getLatestVersion(@the_retrofit.Path("mobileTypeEnum") int mobileTypeEnum); // 1 安卓 2 ios
|
||||||
@the_retrofit.Path("mobileTypeEnum") int mobileTypeEnum); // 1 安卓 2 ios
|
|
||||||
|
|
||||||
// 用户登录 /auth/login/exam-marking/user-mobile
|
// 用户登录 /auth/login/exam-marking/user-mobile
|
||||||
@the_retrofit.POST("/auth/login/exam-marking/user")
|
@the_retrofit.POST("/auth/login/exam-marking/user")
|
||||||
|
|
@ -91,8 +91,7 @@ abstract class RestClient {
|
||||||
|
|
||||||
// 阅卷列表 => 分页获取
|
// 阅卷列表 => 分页获取
|
||||||
@the_retrofit.GET("/api/marking/list")
|
@the_retrofit.GET("/api/marking/list")
|
||||||
Future<BaseStructureResult<BasePageData<MarkingItem>>> getMarkingsByPage(
|
Future<BaseStructureResult<BasePageData<MarkingItem>>> getMarkingsByPage(@the_retrofit.Queries() MarkingListParams params);
|
||||||
@the_retrofit.Queries() MarkingListParams params);
|
|
||||||
|
|
||||||
// /api/marking/list
|
// /api/marking/list
|
||||||
|
|
||||||
|
|
@ -117,13 +116,11 @@ abstract class RestClient {
|
||||||
|
|
||||||
// 阅卷 => 获取考试试题
|
// 阅卷 => 获取考试试题
|
||||||
@the_retrofit.GET("/api/marking/question")
|
@the_retrofit.GET("/api/marking/question")
|
||||||
Future<BaseStructureResult<MarkingTextQuestion>> getTestQuestionsOfExam(
|
Future<BaseStructureResult<MarkingTextQuestion>> getTestQuestionsOfExam(@the_retrofit.Queries() MarkingTextQuestionParams params);
|
||||||
@the_retrofit.Queries() MarkingTextQuestionParams params);
|
|
||||||
|
|
||||||
// 阅卷 => 获取考试tab(试题批次)
|
// 阅卷 => 获取考试tab(试题批次)
|
||||||
@the_retrofit.GET("/api/marking/{markingUserId}/tab")
|
@the_retrofit.GET("/api/marking/{markingUserId}/tab")
|
||||||
Future<BaseStructureResult<List<MarkingTextQuestionTab>>> getTestQuestionsOfTab(
|
Future<BaseStructureResult<List<MarkingTextQuestionTab>>> getTestQuestionsOfTab(@the_retrofit.Path("markingUserId") int markingUserId);
|
||||||
@the_retrofit.Path("markingUserId") int markingUserId);
|
|
||||||
|
|
||||||
// 阅卷 => 单个试题Tag阅卷详情
|
// 阅卷 => 单个试题Tag阅卷详情
|
||||||
@the_retrofit.GET("/api/marking/{markingUserId}/progress")
|
@the_retrofit.GET("/api/marking/{markingUserId}/progress")
|
||||||
|
|
@ -137,16 +134,15 @@ abstract class RestClient {
|
||||||
|
|
||||||
// 阅卷 => 获取考试tab下某次试题
|
// 阅卷 => 获取考试tab下某次试题
|
||||||
@the_retrofit.GET("/api/marking/{markingUserId}/detail")
|
@the_retrofit.GET("/api/marking/{markingUserId}/detail")
|
||||||
Future<BaseStructureResult<MarkingTextQuestion>> getTabOfExam(@the_retrofit.Path("markingUserId") int markingUserId,
|
Future<BaseStructureResult<MarkingTextQuestion>> getTabOfExam(
|
||||||
@the_retrofit.Queries() MarkingTextQuestionTabParams params);
|
@the_retrofit.Path("markingUserId") int markingUserId, @the_retrofit.Queries() MarkingTextQuestionTabParams params);
|
||||||
|
|
||||||
// 阅卷 => 提交考试试题
|
// 阅卷 => 提交考试试题
|
||||||
@the_retrofit.PUT("/api/marking")
|
@the_retrofit.PUT("/api/marking")
|
||||||
Future<BaseStructureResult<bool>> submitTestQuestionsOfExam(@the_retrofit.Body() SubmitExamParams params);
|
Future<BaseStructureResult<bool>> submitTestQuestionsOfExam(@the_retrofit.Body() SubmitExamParams params);
|
||||||
|
|
||||||
@the_retrofit.PUT("/api/marking/error")
|
@the_retrofit.PUT("/api/marking/error")
|
||||||
Future<BaseStructureResult<bool>> submitTestQuestionsOfExamAbnormal(
|
Future<BaseStructureResult<bool>> submitTestQuestionsOfExamAbnormal(@the_retrofit.Body() SubmitExamAbnormalParams params);
|
||||||
@the_retrofit.Body() SubmitExamAbnormalParams params);
|
|
||||||
|
|
||||||
// 阅卷 => 提交考试试题
|
// 阅卷 => 提交考试试题
|
||||||
@the_retrofit.PUT("/api/marking/review")
|
@the_retrofit.PUT("/api/marking/review")
|
||||||
|
|
@ -158,8 +154,7 @@ abstract class RestClient {
|
||||||
|
|
||||||
// 阅卷 => 结束阅卷
|
// 阅卷 => 结束阅卷
|
||||||
@the_retrofit.GET("/api/marking/original-paper")
|
@the_retrofit.GET("/api/marking/original-paper")
|
||||||
Future<BaseStructureResult<List<String>>> getViewOriginalVolume(
|
Future<BaseStructureResult<List<String>>> getViewOriginalVolume(@the_retrofit.Query("markingUserDetailId") String markingUserDetailId);
|
||||||
@the_retrofit.Query("markingUserDetailId") String markingUserDetailId);
|
|
||||||
|
|
||||||
// 阅卷 => 查看答案
|
// 阅卷 => 查看答案
|
||||||
@the_retrofit.GET("/api/marking/answer")
|
@the_retrofit.GET("/api/marking/answer")
|
||||||
|
|
@ -185,25 +180,21 @@ abstract class RestClient {
|
||||||
|
|
||||||
// 阅卷 => 获取异常详细信息
|
// 阅卷 => 获取异常详细信息
|
||||||
@the_retrofit.GET("/api/marking/error-info")
|
@the_retrofit.GET("/api/marking/error-info")
|
||||||
Future<BaseStructureResult<ExceptionInfo>> getMarkingQuestionsErrorInfo(
|
Future<BaseStructureResult<ExceptionInfo>> getMarkingQuestionsErrorInfo(@the_retrofit.Query("markingUserDetailId") int id);
|
||||||
@the_retrofit.Query("markingUserDetailId") int id);
|
|
||||||
|
|
||||||
// 阅卷 => 获取仲裁详细信息
|
// 阅卷 => 获取仲裁详细信息
|
||||||
@the_retrofit.GET("/api/marking/history-score")
|
@the_retrofit.GET("/api/marking/history-score")
|
||||||
Future<BaseStructureResult<List<HistoricalScoring>>> getArbitrateOfHistoryScore(
|
Future<BaseStructureResult<List<HistoricalScoring>>> getArbitrateOfHistoryScore(@the_retrofit.Query("markingUserDetailId") int id);
|
||||||
@the_retrofit.Query("markingUserDetailId") int id);
|
|
||||||
|
|
||||||
// 阅卷 => 获取仲裁详细信息
|
// 阅卷 => 获取仲裁详细信息
|
||||||
@the_retrofit.GET("/api/marking/rating-info")
|
@the_retrofit.GET("/api/marking/rating-info")
|
||||||
Future<BaseStructureResult<List<RatingProgressModel>>> getMarkingRatingInfo(
|
Future<BaseStructureResult<List<RatingProgressModel>>> getMarkingRatingInfo(@the_retrofit.Query("markingUserId") int id);
|
||||||
@the_retrofit.Query("markingUserId") int id);
|
|
||||||
|
|
||||||
// ------------------------------------------ 作业 ------------------------------------------
|
// ------------------------------------------ 作业 ------------------------------------------
|
||||||
|
|
||||||
// 作业 => 作业列表
|
// 作业 => 作业列表
|
||||||
@the_retrofit.GET("${RequestConfig.hwProxyKeywords}/api/Task")
|
@the_retrofit.GET("${RequestConfig.hwProxyKeywords}/api/Task")
|
||||||
Future<BaseStructureResult<BasePageData<JobTaskItem>>> getJobsByPage(
|
Future<BaseStructureResult<BasePageData<JobTaskItem>>> getJobsByPage(@the_retrofit.Queries() MarkingListParams params);
|
||||||
@the_retrofit.Queries() MarkingListParams params);
|
|
||||||
|
|
||||||
// 作业 => 批改获取tabs
|
// 作业 => 批改获取tabs
|
||||||
@the_retrofit.GET("${RequestConfig.hwProxyKeywords}/api/Task/tabs")
|
@the_retrofit.GET("${RequestConfig.hwProxyKeywords}/api/Task/tabs")
|
||||||
|
|
@ -211,13 +202,11 @@ abstract class RestClient {
|
||||||
|
|
||||||
// 作业 => 批改获取tabs
|
// 作业 => 批改获取tabs
|
||||||
@the_retrofit.GET("${RequestConfig.hwProxyKeywords}/api/Marking/students")
|
@the_retrofit.GET("${RequestConfig.hwProxyKeywords}/api/Marking/students")
|
||||||
Future<BaseStructureResult<List<JobConcernedWithStudent>>> getJobWithStudents(
|
Future<BaseStructureResult<List<JobConcernedWithStudent>>> getJobWithStudents(@the_retrofit.Queries() JobConcernedWithStudentParams params);
|
||||||
@the_retrofit.Queries() JobConcernedWithStudentParams params);
|
|
||||||
|
|
||||||
// 作业 => 获取考试tab下某次试题
|
// 作业 => 获取考试tab下某次试题
|
||||||
@the_retrofit.GET("${RequestConfig.hwProxyKeywords}/api/Task/detail")
|
@the_retrofit.GET("${RequestConfig.hwProxyKeywords}/api/Task/detail")
|
||||||
Future<BaseStructureResult<MarkingTextQuestionJob>> getJobTabOfExam(
|
Future<BaseStructureResult<MarkingTextQuestionJob>> getJobTabOfExam(@the_retrofit.Queries() MarkingTextQuestionJobTabParams params);
|
||||||
@the_retrofit.Queries() MarkingTextQuestionJobTabParams params);
|
|
||||||
|
|
||||||
// 作业 => 提交
|
// 作业 => 提交
|
||||||
@the_retrofit.POST("${RequestConfig.hwProxyKeywords}/api/Task")
|
@the_retrofit.POST("${RequestConfig.hwProxyKeywords}/api/Task")
|
||||||
|
|
@ -229,8 +218,7 @@ abstract class RestClient {
|
||||||
|
|
||||||
// 作业 => 获取考试tab下某次试题
|
// 作业 => 获取考试tab下某次试题
|
||||||
@the_retrofit.GET("${RequestConfig.hwProxyKeywords}/api/Task/questions")
|
@the_retrofit.GET("${RequestConfig.hwProxyKeywords}/api/Task/questions")
|
||||||
Future<BaseStructureResult<BasePageData<ReviewItem>>> toGoreviewAgainPage(
|
Future<BaseStructureResult<BasePageData<ReviewItem>>> toGoreviewAgainPage(@the_retrofit.Queries() ReviewAgainListParams params);
|
||||||
@the_retrofit.Queries() ReviewAgainListParams params);
|
|
||||||
|
|
||||||
// 作业 => 获取参考答案
|
// 作业 => 获取参考答案
|
||||||
@the_retrofit.GET("${RequestConfig.hwProxyKeywords}/api/Task/answer")
|
@the_retrofit.GET("${RequestConfig.hwProxyKeywords}/api/Task/answer")
|
||||||
|
|
@ -241,8 +229,7 @@ abstract class RestClient {
|
||||||
|
|
||||||
// 作业 => 上传图片请求参数
|
// 作业 => 上传图片请求参数
|
||||||
@the_retrofit.GET("${RequestConfig.hwProxyKeywords}/api/Upload")
|
@the_retrofit.GET("${RequestConfig.hwProxyKeywords}/api/Upload")
|
||||||
Future<BaseStructureResult<UploadFileInterfaceConfig>> getUploadFile(
|
Future<BaseStructureResult<UploadFileInterfaceConfig>> getUploadFile(@the_retrofit.Queries() UploadFileInterfaceConfigParams params);
|
||||||
@the_retrofit.Queries() UploadFileInterfaceConfigParams params);
|
|
||||||
|
|
||||||
// 作业 => 获取参考答案
|
// 作业 => 获取参考答案
|
||||||
@the_retrofit.GET("${RequestConfig.hwProxyKeywords}/api/Dpc/studentAnswerHandwriting")
|
@the_retrofit.GET("${RequestConfig.hwProxyKeywords}/api/Dpc/studentAnswerHandwriting")
|
||||||
|
|
@ -251,18 +238,16 @@ abstract class RestClient {
|
||||||
|
|
||||||
// 作业 => 查询作业是否收藏
|
// 作业 => 查询作业是否收藏
|
||||||
@the_retrofit.GET("${RequestConfig.hwProxyKeywords}/api/Dpc/collect")
|
@the_retrofit.GET("${RequestConfig.hwProxyKeywords}/api/Dpc/collect")
|
||||||
Future<BaseStructureResult<bool>> getJobCollect(@the_retrofit.Query("taskId") int taskId,
|
Future<BaseStructureResult<bool>> getJobCollect(
|
||||||
@the_retrofit.Query("studentId") int studentId, @the_retrofit.Query("paperId") int paperId);
|
@the_retrofit.Query("taskId") int taskId, @the_retrofit.Query("studentId") int studentId, @the_retrofit.Query("paperId") int paperId);
|
||||||
|
|
||||||
// 作业 => 作业优先批阅取消
|
// 作业 => 作业优先批阅取消
|
||||||
@the_retrofit.POST("/api/read/cancel-job-read-level")
|
@the_retrofit.POST("/api/read/cancel-job-read-level")
|
||||||
Future<BaseStructureResult<bool>> jobPriorityReviewCancel(
|
Future<BaseStructureResult<bool>> jobPriorityReviewCancel(@the_retrofit.Field("jobId") int jobId, @the_retrofit.Field("studentId") int studentId);
|
||||||
@the_retrofit.Field("jobId") int jobId, @the_retrofit.Field("studentId") int studentId);
|
|
||||||
|
|
||||||
// 作业 => 作业优先批阅加入
|
// 作业 => 作业优先批阅加入
|
||||||
@the_retrofit.POST("/api/read/join-read-level")
|
@the_retrofit.POST("/api/read/join-read-level")
|
||||||
Future<BaseStructureResult> jobPriorityReviewJoin(
|
Future<BaseStructureResult> jobPriorityReviewJoin(@the_retrofit.Field("jobId") int jobId, @the_retrofit.Field("studentId") int studentId);
|
||||||
@the_retrofit.Field("jobId") int jobId, @the_retrofit.Field("studentId") int studentId);
|
|
||||||
|
|
||||||
// 作业 => 查询作业是否收藏
|
// 作业 => 查询作业是否收藏
|
||||||
@the_retrofit.POST("${RequestConfig.hwProxyKeywords}/api/Dpc/collect")
|
@the_retrofit.POST("${RequestConfig.hwProxyKeywords}/api/Dpc/collect")
|
||||||
|
|
@ -297,13 +282,11 @@ abstract class RestClient {
|
||||||
|
|
||||||
// 作业 => 列表 ==> 参与班级列表
|
// 作业 => 列表 ==> 参与班级列表
|
||||||
@the_retrofit.GET("${RequestConfig.hwProxyKeywords}/api/Task/tasks")
|
@the_retrofit.GET("${RequestConfig.hwProxyKeywords}/api/Task/tasks")
|
||||||
Future<BaseStructureResult<List<MarkingTasks>>> getJobListParticipateInClass(
|
Future<BaseStructureResult<List<MarkingTasks>>> getJobListParticipateInClass(@the_retrofit.Query("markingId") int jobId);
|
||||||
@the_retrofit.Query("markingId") int jobId);
|
|
||||||
|
|
||||||
// 作业 => 作业收藏数量
|
// 作业 => 作业收藏数量
|
||||||
@the_retrofit.GET("/dpc-api/api/read/job-favorite-count-by-class")
|
@the_retrofit.GET("/dpc-api/api/read/job-favorite-count-by-class")
|
||||||
Future<BaseStructureResult<List<JobFavoriteModel>>> getListOfJobFavoriteNumber(
|
Future<BaseStructureResult<List<JobFavoriteModel>>> getListOfJobFavoriteNumber(@the_retrofit.Query("jobid") int jobId);
|
||||||
@the_retrofit.Query("jobid") int jobId);
|
|
||||||
|
|
||||||
// 作业 => 作业收藏列表
|
// 作业 => 作业收藏列表
|
||||||
@the_retrofit.GET("/api/jobs/fav-student-jobs")
|
@the_retrofit.GET("/api/jobs/fav-student-jobs")
|
||||||
|
|
@ -316,13 +299,11 @@ abstract class RestClient {
|
||||||
|
|
||||||
// 作业 => 作业收藏列表
|
// 作业 => 作业收藏列表
|
||||||
@the_retrofit.POST("${RequestConfig.hwProxyKeywords}/dpc-api/api/read/cancel-favorite")
|
@the_retrofit.POST("${RequestConfig.hwProxyKeywords}/dpc-api/api/read/cancel-favorite")
|
||||||
Future<BaseStructureResult<bool>> toJobCancelFavorite(
|
Future<BaseStructureResult<bool>> toJobCancelFavorite(@the_retrofit.Field() int jobId, @the_retrofit.Field() int studentId);
|
||||||
@the_retrofit.Field() int jobId, @the_retrofit.Field() int studentId);
|
|
||||||
|
|
||||||
// 作业 => 数据快查
|
// 作业 => 数据快查
|
||||||
@the_retrofit.GET("/api/read/job-data-center-report")
|
@the_retrofit.GET("/api/read/job-data-center-report")
|
||||||
Future<BaseStructureResult<JobDataReport>> getJobDataCenterReport(
|
Future<BaseStructureResult<JobDataReport>> getJobDataCenterReport(@the_retrofit.Queries() Map<String, dynamic> params);
|
||||||
@the_retrofit.Queries() Map<String, dynamic> params);
|
|
||||||
|
|
||||||
// 作业 => 数据快查--个人
|
// 作业 => 数据快查--个人
|
||||||
@the_retrofit.GET("/api/read/job-data-center-student-report")
|
@the_retrofit.GET("/api/read/job-data-center-student-report")
|
||||||
|
|
@ -330,8 +311,7 @@ abstract class RestClient {
|
||||||
|
|
||||||
// 作业 => 优先批阅,学生分组列表
|
// 作业 => 优先批阅,学生分组列表
|
||||||
@the_retrofit.GET("/api/read/job-read-level-student-groups")
|
@the_retrofit.GET("/api/read/job-read-level-student-groups")
|
||||||
Future<BaseStructureResult<List<JobStudentGroups>>> getJobLevelStudentGroups(
|
Future<BaseStructureResult<List<JobStudentGroups>>> getJobLevelStudentGroups(@the_retrofit.Query("account") String account);
|
||||||
@the_retrofit.Query("account") String account);
|
|
||||||
|
|
||||||
// 作业 => 优先批阅,优先批阅列表
|
// 作业 => 优先批阅,优先批阅列表
|
||||||
@the_retrofit.GET("/api/read/job-read-level")
|
@the_retrofit.GET("/api/read/job-read-level")
|
||||||
|
|
@ -344,44 +324,53 @@ abstract class RestClient {
|
||||||
|
|
||||||
// 作业 => 取消收藏
|
// 作业 => 取消收藏
|
||||||
@the_retrofit.POST("/api/jobs/de-fav-student-job")
|
@the_retrofit.POST("/api/jobs/de-fav-student-job")
|
||||||
Future<BaseStructureResult> getJobDeFavorites(@the_retrofit.Field("jobId") int jobId,
|
Future<BaseStructureResult> getJobDeFavorites(
|
||||||
@the_retrofit.Field("studentId") int studentId, @the_retrofit.Field("questionPage") int questionPage);
|
@the_retrofit.Field("jobId") int jobId, @the_retrofit.Field("studentId") int studentId, @the_retrofit.Field("questionPage") int questionPage);
|
||||||
|
|
||||||
// 作业 => 学生作业详情历史
|
// 作业 => 学生作业详情历史
|
||||||
@the_retrofit.GET("/api/read/student-job-history")
|
@the_retrofit.GET("/api/read/student-job-history")
|
||||||
Future<BaseStructureResult<JobStudentHistory>> getStudentJobHistory(
|
Future<BaseStructureResult<JobStudentHistory>> getStudentJobHistory(
|
||||||
@the_retrofit.Query("StudentId") int studentId,
|
@the_retrofit.Query("StudentId") int studentId,
|
||||||
@the_retrofit.Query("IsPaper") bool isPaper,
|
@the_retrofit.Query("IsPaper") bool isPaper,
|
||||||
@the_retrofit.Query("DateStart") String? dateStart,
|
@the_retrofit.Query("DateStart") String? dateStart,
|
||||||
@the_retrofit.Query("DateEnd") String? dateEnd,
|
@the_retrofit.Query("DateEnd") String? dateEnd,
|
||||||
@the_retrofit.Query("Page") int page,
|
@the_retrofit.Query("Page") int page,
|
||||||
@the_retrofit.Query("PageSize") int pageSize,
|
@the_retrofit.Query("PageSize") int pageSize,
|
||||||
);
|
);
|
||||||
|
|
||||||
// 作业 => 知识点掌握
|
// 作业 => 知识点掌握
|
||||||
@the_retrofit.GET("/api/jobs/knowledge-report")
|
@the_retrofit.GET("/api/jobs/knowledge-report")
|
||||||
Future<BaseStructureResult<List<KnowledgePoints>>> getKnowledgeReport(
|
Future<BaseStructureResult<List<KnowledgePoints>>> getKnowledgeReport(
|
||||||
@the_retrofit.Query("dateStart") String? dateStart,
|
@the_retrofit.Query("dateStart") String? dateStart,
|
||||||
@the_retrofit.Query("dateEnd") String? dateEnd,
|
@the_retrofit.Query("dateEnd") String? dateEnd,
|
||||||
@the_retrofit.Query("knowledgeName") String? knowledgeName,
|
@the_retrofit.Query("knowledgeName") String? knowledgeName,
|
||||||
);
|
);
|
||||||
|
|
||||||
// 作业 => 知识点掌握详情
|
// 作业 => 知识点掌握详情
|
||||||
@the_retrofit.GET("/api/jobs/knowledge-detail-report")
|
@the_retrofit.GET("/api/jobs/knowledge-detail-report")
|
||||||
Future<BaseStructureResult<List<KnowledgePointsDetail>>> getKnowledgeReportDetail(
|
Future<BaseStructureResult<List<KnowledgePointsDetail>>> getKnowledgeReportDetail(
|
||||||
@the_retrofit.Query("KnowledgeId") int knowledgeId,
|
@the_retrofit.Query("KnowledgeId") int knowledgeId,
|
||||||
);
|
);
|
||||||
|
|
||||||
// 作业 => 知识点掌握详情人员名单
|
// 作业 => 知识点掌握详情人员名单
|
||||||
@the_retrofit.GET("/api/jobs/knowledge-question-detail/{questionid}")
|
@the_retrofit.GET("/api/jobs/knowledge-question-detail/{questionid}")
|
||||||
Future<BaseStructureResult<List<JobKnowledgeDetailStudent>>> getKnowledgeStudent(
|
Future<BaseStructureResult<List<JobKnowledgeDetailStudent>>> getKnowledgeStudent(
|
||||||
@the_retrofit.Path("questionid") int questionid,
|
@the_retrofit.Path("questionid") int questionid,
|
||||||
);
|
);
|
||||||
|
|
||||||
// 作业 => 知识点掌握详情原卷图
|
// 作业 => 知识点掌握详情原卷图
|
||||||
@the_retrofit.GET("/api/jobs/question-paper-img/{sectionid}/{questionno}")
|
@the_retrofit.GET("/api/jobs/question-paper-img/{sectionid}/{questionno}")
|
||||||
Future<BaseStructureResult<String>> getKnowledgeImg(
|
Future<BaseStructureResult<String>> getKnowledgeImg(
|
||||||
@the_retrofit.Path("sectionid") int questionid,
|
@the_retrofit.Path("sectionid") int questionid,
|
||||||
@the_retrofit.Path("questionno") String questionno,
|
@the_retrofit.Path("questionno") String questionno,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// 作业 => 获取学生原稿笔记
|
||||||
|
@the_retrofit.GET("/api/jobs/student-paper-handwriting")
|
||||||
|
Future<BaseStructureResult<JobHandwriting>?> getHandwriting(
|
||||||
|
@the_retrofit.Query("jobId") int jobId,
|
||||||
|
@the_retrofit.Query("studentId") int studentId,
|
||||||
|
@the_retrofit.Query("questionNo") int? questionNo,
|
||||||
|
@the_retrofit.Query("pageNum") int? pageNum,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue