Compare commits
No commits in common. "ef069121f18bed7b539aa661459ef5eed5ed85b6" and "ed45015c06fc9fea99563eef6ba2f7a3dc708b76" have entirely different histories.
ef069121f1
...
ed45015c06
|
|
@ -198,4 +198,3 @@ marking_app/lib/common/model/report/report_marking_detail_params.g.dart
|
||||||
marking_app/lib/common/model/report/report_marking_detail.g.dart
|
marking_app/lib/common/model/report/report_marking_detail.g.dart
|
||||||
marking_app/lib/common/model/job/job_report_knowledge_model.g.dart
|
marking_app/lib/common/model/job/job_report_knowledge_model.g.dart
|
||||||
marking_app/lib/common/model/job/job_report_question_deatil_model.g.dart
|
marking_app/lib/common/model/job/job_report_question_deatil_model.g.dart
|
||||||
marking_app/lib/common/model/job/job_do_marking_status_info.g.dart
|
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -1,4 +0,0 @@
|
||||||
storePassword= Woshiren.123
|
|
||||||
keyPassword= Woshiren.123
|
|
||||||
keyAlias=sign
|
|
||||||
storeFile=./key/key.jks
|
|
||||||
|
|
@ -12,13 +12,10 @@ class GestureRecording {
|
||||||
|
|
||||||
bool annotationSwitch;
|
bool annotationSwitch;
|
||||||
|
|
||||||
bool scopeBox;
|
|
||||||
|
|
||||||
GestureRecording({
|
GestureRecording({
|
||||||
required this.eraser,
|
required this.eraser,
|
||||||
required this.annotationSwitch,
|
required this.annotationSwitch,
|
||||||
this.data,
|
this.data,
|
||||||
this.usageTime,
|
this.usageTime,
|
||||||
this.scopeBox = false,
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,26 +0,0 @@
|
||||||
import 'package:json_annotation/json_annotation.dart';
|
|
||||||
|
|
||||||
part 'job_do_marking_status_info.g.dart';
|
|
||||||
|
|
||||||
@JsonSerializable()
|
|
||||||
class JobDoMarkingStatusInfo extends Object {
|
|
||||||
@JsonKey(name: 'pageIndex')
|
|
||||||
int pageIndex;
|
|
||||||
|
|
||||||
@JsonKey(name: 'total')
|
|
||||||
int total;
|
|
||||||
|
|
||||||
@JsonKey(name: 'finishCount')
|
|
||||||
int finishCount;
|
|
||||||
|
|
||||||
@JsonKey(name: 'surplusNo')
|
|
||||||
int surplusNo;
|
|
||||||
|
|
||||||
JobDoMarkingStatusInfo(this.pageIndex, this.total, this.finishCount, [this.surplusNo = 0]) {
|
|
||||||
this.surplusNo = total - finishCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
factory JobDoMarkingStatusInfo.fromJson(Map<String, dynamic> srcJson) => _$JobDoMarkingStatusInfoFromJson(srcJson);
|
|
||||||
|
|
||||||
Map<String, dynamic> toJson() => _$JobDoMarkingStatusInfoToJson(this);
|
|
||||||
}
|
|
||||||
|
|
@ -11,16 +11,13 @@ class JobNoteTakingTrajectory extends Object {
|
||||||
String paperPicture;
|
String paperPicture;
|
||||||
|
|
||||||
@JsonKey(name: 'resetTime')
|
@JsonKey(name: 'resetTime')
|
||||||
int? resetTime;
|
int resetTime;
|
||||||
|
|
||||||
@JsonKey(name: 'pictureQuestionTop')
|
|
||||||
double pictureQuestionTop;
|
|
||||||
|
|
||||||
@JsonKey(name: 'pictureQuestionHeight')
|
|
||||||
double pictureQuestionHeight;
|
|
||||||
|
|
||||||
JobNoteTakingTrajectory(
|
JobNoteTakingTrajectory(
|
||||||
this.lattices, this.paperPicture, this.resetTime, this.pictureQuestionHeight, this.pictureQuestionTop);
|
this.lattices,
|
||||||
|
this.paperPicture,
|
||||||
|
this.resetTime,
|
||||||
|
);
|
||||||
|
|
||||||
factory JobNoteTakingTrajectory.fromJson(Map<String, dynamic> srcJson) => _$JobNoteTakingTrajectoryFromJson(srcJson);
|
factory JobNoteTakingTrajectory.fromJson(Map<String, dynamic> srcJson) => _$JobNoteTakingTrajectoryFromJson(srcJson);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -58,13 +58,13 @@ class _SelectableKeyboardState extends ConsumerState<SelectableKeyboard>
|
||||||
late RemoveListener _markingSubtopicSwitchingListener;
|
late RemoveListener _markingSubtopicSwitchingListener;
|
||||||
late bool _openAuxiliary;
|
late bool _openAuxiliary;
|
||||||
num? _tensVal; // 当前选中十位分值
|
num? _tensVal; // 当前选中十位分值
|
||||||
late Duration easyThrottleTime;
|
final Duration easyThrottleTime = Duration(milliseconds: 800);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
// 初始化不执行
|
// 初始化不执行
|
||||||
easyThrottleTime = Duration(milliseconds: widget.hasSubtopic ? 400 : 800);
|
|
||||||
_scrollController = ScrollController()..addListener(scrollListener);
|
_scrollController = ScrollController()..addListener(scrollListener);
|
||||||
|
|
||||||
/// 小题切换监听,重置键盘
|
/// 小题切换监听,重置键盘
|
||||||
|
|
|
||||||
|
|
@ -55,13 +55,11 @@ class _SelectableKeyboardState extends ConsumerState<SelectableKeyboardBottom>
|
||||||
late RemoveListener _markingKeyboardListener;
|
late RemoveListener _markingKeyboardListener;
|
||||||
late RemoveListener _markingSubtopicSwitchingListener;
|
late RemoveListener _markingSubtopicSwitchingListener;
|
||||||
num? _tensVal; // 当前选中十位分值
|
num? _tensVal; // 当前选中十位分值
|
||||||
late Duration easyThrottleTime;
|
final Duration easyThrottleTime = Duration(seconds: 1);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
|
|
||||||
easyThrottleTime = Duration(milliseconds: widget.hasSubtopic ? 400 : 1000);
|
|
||||||
// 初始化不执行
|
// 初始化不执行
|
||||||
_scrollController = ScrollController()..addListener(scrollListener);
|
_scrollController = ScrollController()..addListener(scrollListener);
|
||||||
_markingSubtopicSwitchingListener = ref.read(markingSubtopicSwitchingProvider.notifier).addListener((state) {
|
_markingSubtopicSwitchingListener = ref.read(markingSubtopicSwitchingProvider.notifier).addListener((state) {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
|
import 'package:async/async.dart';
|
||||||
import 'package:cached_network_image/cached_network_image.dart';
|
import 'package:cached_network_image/cached_network_image.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||||
|
|
@ -42,8 +43,10 @@ class TrajectoryViewState extends ConsumerState<TrajectoryView> {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
|
print('初始化笔记回显页面.....................');
|
||||||
super.initState();
|
super.initState();
|
||||||
oldQuestionNumber = widget.questionNumber;
|
oldQuestionNumber = widget.questionNumber;
|
||||||
|
print('进入页面.......21211');
|
||||||
|
|
||||||
theImageStreamListener = ImageStreamListener((ImageInfo info, bool _) {
|
theImageStreamListener = ImageStreamListener((ImageInfo info, bool _) {
|
||||||
if (imagInfoModel != null && widget.questionNumber == oldQuestionNumber) return;
|
if (imagInfoModel != null && widget.questionNumber == oldQuestionNumber) return;
|
||||||
|
|
@ -143,43 +146,9 @@ class TrajectoryViewState extends ConsumerState<TrajectoryView> {
|
||||||
} else {
|
} else {
|
||||||
// 容器等于图片比例 图片会拉升或者缩小图片铺满整个容器 此时图片展示宽高就等于容器宽高
|
// 容器等于图片比例 图片会拉升或者缩小图片铺满整个容器 此时图片展示宽高就等于容器宽高
|
||||||
}
|
}
|
||||||
List<GestureRecording> trajectorys = [];
|
|
||||||
|
|
||||||
var trajectory = widget.trajectory;
|
var trajectory = widget.trajectory;
|
||||||
List<Lattices> lattices = trajectory.lattices;
|
List<Lattices> lattices = trajectory.lattices;
|
||||||
trajectory.pictureQuestionTop = trajectory.pictureQuestionTop * imagInfoModel!.scale! + spacingHeight;
|
|
||||||
trajectory.pictureQuestionHeight = trajectory.pictureQuestionHeight * imagInfoModel!.scale!;
|
|
||||||
|
|
||||||
/// 试题范围框左上角
|
|
||||||
trajectorys
|
|
||||||
..add(GestureRecording(
|
|
||||||
data: Offset(2.w, trajectory.pictureQuestionTop), scopeBox: true, annotationSwitch: false, eraser: false))
|
|
||||||
|
|
||||||
/// 右上角
|
|
||||||
..add(GestureRecording(
|
|
||||||
data: Offset(imagInfoModel!.scaleWidth! - 4.w, trajectory.pictureQuestionTop),
|
|
||||||
scopeBox: true,
|
|
||||||
annotationSwitch: false,
|
|
||||||
eraser: false))
|
|
||||||
|
|
||||||
/// 左下角
|
|
||||||
..add(GestureRecording(
|
|
||||||
data: Offset(2.w, trajectory.pictureQuestionTop + trajectory.pictureQuestionHeight),
|
|
||||||
scopeBox: true,
|
|
||||||
annotationSwitch: false,
|
|
||||||
eraser: false))
|
|
||||||
|
|
||||||
/// 右下角
|
|
||||||
..add(GestureRecording(
|
|
||||||
data: Offset(
|
|
||||||
imagInfoModel!.scaleWidth! - 4.w, trajectory.pictureQuestionTop + trajectory.pictureQuestionHeight),
|
|
||||||
scopeBox: true,
|
|
||||||
annotationSwitch: false,
|
|
||||||
eraser: false));
|
|
||||||
|
|
||||||
Future.delayed(Duration.zero, () {
|
|
||||||
ref.read(jobDrawingTrajectoryProvider.notifier).setVal(trajectorys);
|
|
||||||
});
|
|
||||||
if (lattices.isNotEmpty) {
|
if (lattices.isNotEmpty) {
|
||||||
Map<int, List<Lattices>> map = new Map.fromIterable(lattices,
|
Map<int, List<Lattices>> map = new Map.fromIterable(lattices,
|
||||||
key: (key) => key.stroke,
|
key: (key) => key.stroke,
|
||||||
|
|
@ -187,7 +156,7 @@ class TrajectoryViewState extends ConsumerState<TrajectoryView> {
|
||||||
return lattices.where((item) => item.stroke == value.stroke).toList()
|
return lattices.where((item) => item.stroke == value.stroke).toList()
|
||||||
..sort((a, b) => a.time.compareTo(b.time));
|
..sort((a, b) => a.time.compareTo(b.time));
|
||||||
});
|
});
|
||||||
|
List<GestureRecording> trajectorys = [];
|
||||||
List<int> keys = map.keys.toList();
|
List<int> keys = map.keys.toList();
|
||||||
for (var i = 0; i < keys.length; i++) {
|
for (var i = 0; i < keys.length; i++) {
|
||||||
int theKey = keys[i];
|
int theKey = keys[i];
|
||||||
|
|
@ -293,7 +262,7 @@ class TrajectoryViewState extends ConsumerState<TrajectoryView> {
|
||||||
}
|
}
|
||||||
|
|
||||||
class DrawingPainter extends CustomPainter {
|
class DrawingPainter extends CustomPainter {
|
||||||
List<GestureRecording> points;
|
final List<GestureRecording> points;
|
||||||
|
|
||||||
DrawingPainter({required this.points}) : super();
|
DrawingPainter({required this.points}) : super();
|
||||||
|
|
||||||
|
|
@ -302,30 +271,9 @@ class DrawingPainter extends CustomPainter {
|
||||||
..strokeCap = StrokeCap.round
|
..strokeCap = StrokeCap.round
|
||||||
..strokeWidth = 0.5.sp;
|
..strokeWidth = 0.5.sp;
|
||||||
|
|
||||||
/// 范围框
|
|
||||||
Paint scopeBox = Paint()
|
|
||||||
..color = Colors.red
|
|
||||||
..strokeCap = StrokeCap.round
|
|
||||||
..strokeWidth = 1.2.sp;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void paint(Canvas canvas, Size size) {
|
void paint(Canvas canvas, Size size) {
|
||||||
if (points.length > 1) {
|
if (points.length > 1) {
|
||||||
if (points.length >= 4) {
|
|
||||||
var sketchingFrame = points.take(4).where((e) => e.scopeBox && e.data != null).toList();
|
|
||||||
if (sketchingFrame.length == 4) {
|
|
||||||
var sketchingFramePoints = sketchingFrame.map((e) => e.data!).toList();
|
|
||||||
|
|
||||||
// 假设points按照顺时针或逆时针方向给出了正方形的四个顶点
|
|
||||||
canvas.drawLine(sketchingFramePoints[0], sketchingFramePoints[2], scopeBox);
|
|
||||||
canvas.drawLine(sketchingFramePoints[0], sketchingFramePoints[1], scopeBox);
|
|
||||||
canvas.drawLine(sketchingFramePoints[2], sketchingFramePoints[3], scopeBox);
|
|
||||||
canvas.drawLine(sketchingFramePoints[1], sketchingFramePoints[3], scopeBox);
|
|
||||||
}
|
|
||||||
if (sketchingFrame.length > 0) {
|
|
||||||
points = points.where((element) => !element.scopeBox).toList();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (int i = 0; i < points.length - 1; i++) {
|
for (int i = 0; i < points.length - 1; i++) {
|
||||||
GestureRecording item = points[i];
|
GestureRecording item = points[i];
|
||||||
GestureRecording nextItem = points[i + 1];
|
GestureRecording nextItem = points[i + 1];
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,6 @@ 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/common/base_structure_result.dart';
|
||||||
import 'package:marking_app/common/model/event_bus/jobs/job_do_papers_student_bus.dart';
|
import 'package:marking_app/common/model/event_bus/jobs/job_do_papers_student_bus.dart';
|
||||||
import 'package:marking_app/common/model/job/job_concerned_with_student.dart';
|
import 'package:marking_app/common/model/job/job_concerned_with_student.dart';
|
||||||
import 'package:marking_app/common/model/job/job_do_marking_status_info.dart';
|
|
||||||
import 'package:marking_app/common/model/job/job_page_tab.dart';
|
import 'package:marking_app/common/model/job/job_page_tab.dart';
|
||||||
import 'package:marking_app/common/model/job/job_review_submission.dart';
|
import 'package:marking_app/common/model/job/job_review_submission.dart';
|
||||||
import 'package:marking_app/common/model/job/marking_text_question_job.dart';
|
import 'package:marking_app/common/model/job/marking_text_question_job.dart';
|
||||||
|
|
@ -102,43 +101,6 @@ class DoPapersJob extends HookWidget with EventBusMixin<DoPapersJobRefreshBus> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 批阅情况(已阅55/54)
|
|
||||||
class ReviewStatusInfo extends HookWidget with CommonMixin {
|
|
||||||
final int taskId;
|
|
||||||
final int pageIndex;
|
|
||||||
const ReviewStatusInfo({required this.taskId, required this.pageIndex, super.key});
|
|
||||||
|
|
||||||
Future<JobDoMarkingStatusInfo?> getData() async {
|
|
||||||
var _client = await getClient();
|
|
||||||
var result = await _client.getJobPageIndexInfo(taskId, pageIndex);
|
|
||||||
return result.data;
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
var doMarkingInfo = useState<JobDoMarkingStatusInfo?>(null);
|
|
||||||
useEffect(() {
|
|
||||||
getData().then((value) => doMarkingInfo.value = value);
|
|
||||||
return () {};
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
if (doMarkingInfo.value == null) return Container();
|
|
||||||
return Container(
|
|
||||||
child: Row(
|
|
||||||
mainAxisSize: MainAxisSize.min,
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.end,
|
|
||||||
children: [
|
|
||||||
quickText('已阅', color: Color.fromRGBO(117, 117, 117, 1), size: 10.sp),
|
|
||||||
quickText(doMarkingInfo.value!.finishCount,
|
|
||||||
color: Color.fromRGBO(76, 199, 147, 1), size: 12.sp, fontWeight: FontWeight.bold),
|
|
||||||
quickText('/', color: Color.fromRGBO(117, 117, 117, 1), size: 12.sp),
|
|
||||||
quickText(doMarkingInfo.value!.surplusNo, color: Color.fromRGBO(117, 117, 117, 1), size: 10.sp),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 切换下拉框 (学生和试卷状态)
|
// 切换下拉框 (学生和试卷状态)
|
||||||
@hwidget
|
@hwidget
|
||||||
Widget $dropdownBoxSwitchStudentsOrTypeView(BuildContext context,
|
Widget $dropdownBoxSwitchStudentsOrTypeView(BuildContext context,
|
||||||
|
|
@ -475,10 +437,7 @@ class _EexamPaperAndScoringViewState extends ConsumerState<ExamPaperAndScoringVi
|
||||||
child: Row(children: [
|
child: Row(children: [
|
||||||
Expanded(
|
Expanded(
|
||||||
flex: 7,
|
flex: 7,
|
||||||
child: Stack(
|
child: LayoutBuilder(
|
||||||
alignment: const FractionalOffset(0.96, 0.98),
|
|
||||||
children: [
|
|
||||||
LayoutBuilder(
|
|
||||||
builder: (BuildContext context, BoxConstraints constraints) {
|
builder: (BuildContext context, BoxConstraints constraints) {
|
||||||
final double containerWidth = constraints.maxWidth; // 展示区域总宽度
|
final double containerWidth = constraints.maxWidth; // 展示区域总宽度
|
||||||
final double containerHeight = constraints.maxHeight; // 展示区域总宽度
|
final double containerHeight = constraints.maxHeight; // 展示区域总宽度
|
||||||
|
|
@ -528,11 +487,6 @@ class _EexamPaperAndScoringViewState extends ConsumerState<ExamPaperAndScoringVi
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
|
||||||
/// 批阅进度详情
|
|
||||||
ReviewStatusInfo(taskId: widget.taskId, pageIndex: jobData!.pageIndex)
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
Expanded(
|
Expanded(
|
||||||
flex: 2,
|
flex: 2,
|
||||||
|
|
@ -632,6 +586,88 @@ Widget $examPaperAndScoringKeyboardView(
|
||||||
|
|
||||||
return Column(
|
return Column(
|
||||||
children: [
|
children: [
|
||||||
|
Container(
|
||||||
|
child: Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
Padding(
|
||||||
|
padding: EdgeInsets.symmetric(horizontal: 10.r),
|
||||||
|
child: $MaterialBtn(
|
||||||
|
bgc: Colors.white,
|
||||||
|
borderRadius: BorderRadius.circular(2.r),
|
||||||
|
onTap: () => easyThrottle('homework_review_submission_callback', () {
|
||||||
|
_useDoScoring.goToScoringShortcut(enumMode: ToScoringShortcut.ALL_PAIRS);
|
||||||
|
// toSubmit();
|
||||||
|
}, duration: Duration(milliseconds: 500)),
|
||||||
|
child: Container(
|
||||||
|
width: double.infinity,
|
||||||
|
alignment: Alignment.center,
|
||||||
|
padding: EdgeInsets.symmetric(vertical: 8.r),
|
||||||
|
decoration: BoxDecoration(borderRadius: BorderRadius.circular(2.r)),
|
||||||
|
child: quickText(
|
||||||
|
'全对',
|
||||||
|
size: 12.sp,
|
||||||
|
color: Color.fromRGBO(81, 81, 81, 1),
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(height: 7.h),
|
||||||
|
Padding(
|
||||||
|
padding: EdgeInsets.symmetric(horizontal: 10.r),
|
||||||
|
child: $MaterialBtn(
|
||||||
|
bgc: Colors.white,
|
||||||
|
borderRadius: BorderRadius.circular(2.r),
|
||||||
|
onTap: () => easyThrottle('homework_review_submission_callback', () {
|
||||||
|
_useDoScoring.goToScoringShortcut(enumMode: ToScoringShortcut.ALL_WRONG);
|
||||||
|
// toSubmit();
|
||||||
|
}, duration: Duration(milliseconds: 500)),
|
||||||
|
child: Container(
|
||||||
|
width: double.infinity,
|
||||||
|
alignment: Alignment.center,
|
||||||
|
padding: EdgeInsets.symmetric(vertical: 8.r),
|
||||||
|
decoration: BoxDecoration(borderRadius: BorderRadius.circular(2.r)),
|
||||||
|
child: quickText(
|
||||||
|
'全错',
|
||||||
|
size: 12.sp,
|
||||||
|
color: Color.fromRGBO(81, 81, 81, 1),
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(height: 7.h),
|
||||||
|
Padding(
|
||||||
|
padding: EdgeInsets.symmetric(horizontal: 10.r),
|
||||||
|
child: $MaterialBtn(
|
||||||
|
bgc: Colors.transparent,
|
||||||
|
borderRadius: BorderRadius.circular(2.r),
|
||||||
|
onTap: () => _useDoScoring.goToScoringShortcut(enumMode: ToScoringShortcut.CANCELLATION),
|
||||||
|
child: Container(
|
||||||
|
width: double.infinity,
|
||||||
|
alignment: Alignment.center,
|
||||||
|
padding: EdgeInsets.symmetric(vertical: 8.r),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.circular(2.r),
|
||||||
|
border: Border.all(
|
||||||
|
width: 1.r,
|
||||||
|
color: Colors.white,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: quickText(
|
||||||
|
'取消',
|
||||||
|
size: 12.sp,
|
||||||
|
color: Colors.white,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(height: 10.h),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: ListView.builder(
|
child: ListView.builder(
|
||||||
padding: EdgeInsets.zero,
|
padding: EdgeInsets.zero,
|
||||||
|
|
@ -651,6 +687,7 @@ Widget $examPaperAndScoringKeyboardView(
|
||||||
title: Column(
|
title: Column(
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: [
|
children: [
|
||||||
|
SizedBox(height: 16.h),
|
||||||
$MaterialBtn(
|
$MaterialBtn(
|
||||||
onTap: () => easyThrottle('view_homework_notes', () => viewHomeworkNotes(subJobQuestion)),
|
onTap: () => easyThrottle('view_homework_notes', () => viewHomeworkNotes(subJobQuestion)),
|
||||||
bgc: Color.fromRGBO(88, 87, 87, 1),
|
bgc: Color.fromRGBO(88, 87, 87, 1),
|
||||||
|
|
@ -744,95 +781,12 @@ Widget $examPaperAndScoringKeyboardView(
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
SizedBox(height: 16.h),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
Container(
|
|
||||||
child: Column(
|
|
||||||
mainAxisSize: MainAxisSize.min,
|
|
||||||
children: [
|
|
||||||
Padding(
|
|
||||||
padding: EdgeInsets.symmetric(horizontal: 10.r),
|
|
||||||
child: $MaterialBtn(
|
|
||||||
bgc: Colors.white,
|
|
||||||
borderRadius: BorderRadius.circular(2.r),
|
|
||||||
onTap: () => easyThrottle('homework_review_submission_callback', () {
|
|
||||||
_useDoScoring.goToScoringShortcut(enumMode: ToScoringShortcut.ALL_PAIRS);
|
|
||||||
// toSubmit();
|
|
||||||
}, duration: Duration(milliseconds: 500)),
|
|
||||||
child: Container(
|
|
||||||
width: double.infinity,
|
|
||||||
alignment: Alignment.center,
|
|
||||||
padding: EdgeInsets.symmetric(vertical: 8.r),
|
|
||||||
decoration: BoxDecoration(borderRadius: BorderRadius.circular(2.r)),
|
|
||||||
child: quickText(
|
|
||||||
'全对',
|
|
||||||
size: 12.sp,
|
|
||||||
color: Color.fromRGBO(81, 81, 81, 1),
|
|
||||||
fontWeight: FontWeight.bold,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
SizedBox(height: 7.h),
|
|
||||||
Padding(
|
|
||||||
padding: EdgeInsets.symmetric(horizontal: 10.r),
|
|
||||||
child: $MaterialBtn(
|
|
||||||
bgc: Colors.white,
|
|
||||||
borderRadius: BorderRadius.circular(2.r),
|
|
||||||
onTap: () => easyThrottle('homework_review_submission_callback', () {
|
|
||||||
_useDoScoring.goToScoringShortcut(enumMode: ToScoringShortcut.ALL_WRONG);
|
|
||||||
// toSubmit();
|
|
||||||
}, duration: Duration(milliseconds: 500)),
|
|
||||||
child: Container(
|
|
||||||
width: double.infinity,
|
|
||||||
alignment: Alignment.center,
|
|
||||||
padding: EdgeInsets.symmetric(vertical: 8.r),
|
|
||||||
decoration: BoxDecoration(borderRadius: BorderRadius.circular(2.r)),
|
|
||||||
child: quickText(
|
|
||||||
'全错',
|
|
||||||
size: 12.sp,
|
|
||||||
color: Color.fromRGBO(81, 81, 81, 1),
|
|
||||||
fontWeight: FontWeight.bold,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
SizedBox(height: 7.h),
|
|
||||||
Padding(
|
|
||||||
padding: EdgeInsets.symmetric(horizontal: 10.r),
|
|
||||||
child: $MaterialBtn(
|
|
||||||
bgc: Colors.transparent,
|
|
||||||
borderRadius: BorderRadius.circular(2.r),
|
|
||||||
onTap: () => _useDoScoring.goToScoringShortcut(enumMode: ToScoringShortcut.CANCELLATION),
|
|
||||||
child: Container(
|
|
||||||
width: double.infinity,
|
|
||||||
alignment: Alignment.center,
|
|
||||||
padding: EdgeInsets.symmetric(vertical: 8.r),
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
borderRadius: BorderRadius.circular(2.r),
|
|
||||||
border: Border.all(
|
|
||||||
width: 1.r,
|
|
||||||
color: Colors.white,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
child: quickText(
|
|
||||||
'取消',
|
|
||||||
size: 12.sp,
|
|
||||||
color: Colors.white,
|
|
||||||
fontWeight: FontWeight.bold,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
SizedBox(height: 36.h),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
if (questions.isNotEmpty)
|
if (questions.isNotEmpty)
|
||||||
Padding(
|
Padding(
|
||||||
padding: EdgeInsets.symmetric(horizontal: 10.r),
|
padding: EdgeInsets.symmetric(horizontal: 10.r),
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,6 @@ import 'package:marking_app/common/model/common/upload_img_secret_key.dart';
|
||||||
import 'package:marking_app/common/model/job/job_collect_params.dart';
|
import 'package:marking_app/common/model/job/job_collect_params.dart';
|
||||||
import 'package:marking_app/common/model/job/job_concerned_with_student.dart';
|
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_concerned_with_student_params.dart';
|
||||||
import 'package:marking_app/common/model/job/job_do_marking_status_info.dart';
|
|
||||||
import 'package:marking_app/common/model/job/job_note_taking_trajectory.dart';
|
import 'package:marking_app/common/model/job/job_note_taking_trajectory.dart';
|
||||||
import 'package:marking_app/common/model/job/job_page_tab.dart';
|
import 'package:marking_app/common/model/job/job_page_tab.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';
|
||||||
|
|
@ -261,11 +260,6 @@ abstract class RestClient {
|
||||||
@the_retrofit.GET("/api/jobs/student-job-for-class")
|
@the_retrofit.GET("/api/jobs/student-job-for-class")
|
||||||
Future<BaseStructureResult<List<JobReportJoinClass>>> getJobReportJoinClasses(@the_retrofit.Query("jobId") int jobId);
|
Future<BaseStructureResult<List<JobReportJoinClass>>> getJobReportJoinClasses(@the_retrofit.Query("jobId") int jobId);
|
||||||
|
|
||||||
// 作业 => 或者作业在当前题型下批阅情况
|
|
||||||
@the_retrofit.GET("${RequestConfig.hwProxyKeywords}/api/Marking/tab")
|
|
||||||
Future<BaseStructureResult<JobDoMarkingStatusInfo>> getJobPageIndexInfo(
|
|
||||||
@the_retrofit.Query("taskId") int taskld, @the_retrofit.Query("pageIndex") int pagelndex);
|
|
||||||
|
|
||||||
// 作业 => 报告 ==> 获取知识点详情
|
// 作业 => 报告 ==> 获取知识点详情
|
||||||
@the_retrofit.GET("/api/jobs/job-report-knowledge-detail")
|
@the_retrofit.GET("/api/jobs/job-report-knowledge-detail")
|
||||||
Future<BaseStructureResult<List<JobReportKnowledgeModel>>> getDetailKnowledge(
|
Future<BaseStructureResult<List<JobReportKnowledgeModel>>> getDetailKnowledge(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue