Compare commits
3 Commits
ee487e63bd
...
b2f50b10a6
| Author | SHA1 | Date |
|---|---|---|
|
|
b2f50b10a6 | |
|
|
047965aede | |
|
|
6a963c20e2 |
|
|
@ -11,7 +11,8 @@ import 'package:marking_app/utils/request/rest_client.dart';
|
|||
/// isFavorite 默认是否收藏
|
||||
/// favoriteNum 默认收藏次数
|
||||
class FavoriteWidget extends StatefulWidget {
|
||||
FavoriteWidget({Key? key}) : super(key: key);
|
||||
final Function call;
|
||||
FavoriteWidget(this.call, {Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
_FavoriteState createState() => _FavoriteState();
|
||||
|
|
@ -56,6 +57,7 @@ class _FavoriteState extends State<FavoriteWidget> with EventBusMixin<JobQuestio
|
|||
BaseStructureResult<bool> res = await _client.toJobFavoriteCancel(favoriteVal);
|
||||
if (res.success) {
|
||||
_future = getData(favoriteVal.taskId, favoriteVal.studentId, _eventModel!.paperId);
|
||||
widget.call();
|
||||
toUpState(setState, () {}, mounted);
|
||||
} else {
|
||||
ToastUtils.showError(res.message ?? '操作失败,请重试');
|
||||
|
|
|
|||
|
|
@ -170,6 +170,7 @@ Widget $completedHomeworkView(BuildContext context,
|
|||
Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 10.w),
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
width: isPad() ? 32.w : 36.w,
|
||||
|
|
@ -188,11 +189,14 @@ Widget $completedHomeworkView(BuildContext context,
|
|||
margin: EdgeInsets.only(right: 4.w),
|
||||
child: quickText('作业', color: Colors.white, size: 10.sp),
|
||||
),
|
||||
quickText(
|
||||
jobTaskItem.title,
|
||||
size: 16.sp,
|
||||
color: Color.fromRGBO(70, 70, 70, 1),
|
||||
fontWeight: FontWeight.bold,
|
||||
Expanded(
|
||||
child: quickText(
|
||||
jobTaskItem.title,
|
||||
maxLines: 2,
|
||||
size: 16.sp,
|
||||
color: Color.fromRGBO(70, 70, 70, 1),
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
|
|
@ -566,6 +570,7 @@ Widget $unfinishedHomework(BuildContext context, {required JobTaskItem jobTaskIt
|
|||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
width: isPad() ? 32.w : 38.w,
|
||||
|
|
@ -586,11 +591,14 @@ Widget $unfinishedHomework(BuildContext context, {required JobTaskItem jobTaskIt
|
|||
margin: EdgeInsets.only(right: 4.w),
|
||||
child: quickText(jobTaskItem.markingTypeEnum.name, color: Colors.white, size: 10.sp),
|
||||
),
|
||||
quickText(
|
||||
jobTaskItem.title,
|
||||
size: isPad() ? 14.sp : 16.sp,
|
||||
color: Color.fromRGBO(70, 70, 70, 1),
|
||||
fontWeight: FontWeight.bold,
|
||||
Expanded(
|
||||
child: quickText(
|
||||
jobTaskItem.title,
|
||||
maxLines: 2,
|
||||
size: isPad() ? 14.sp : 16.sp,
|
||||
color: Color.fromRGBO(70, 70, 70, 1),
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
|
|
|
|||
|
|
@ -73,7 +73,7 @@ class DoPapersJob extends HookWidget with EventBusMixin<DoPapersJobRefreshBus> {
|
|||
backgroundColor: Colors.white,
|
||||
elevation: 0,
|
||||
actions: [
|
||||
FavoriteWidget(),
|
||||
FavoriteWidget(() => refresh = true),
|
||||
// Container(
|
||||
// padding: EdgeInsets.only(right: 4.w),
|
||||
// alignment: Alignment.center,
|
||||
|
|
@ -156,6 +156,7 @@ class ReviewStatusInfo extends HookWidget with CommonMixin {
|
|||
print('点击了...');
|
||||
List<JobConcernedWithStudent>? students = await getStudents();
|
||||
if (students == null) return;
|
||||
students = students..sort((e, e1) => e.studentName.compareTo(e1.studentName));
|
||||
showModalBottomSheet(
|
||||
context: context,
|
||||
elevation: 10,
|
||||
|
|
@ -189,14 +190,15 @@ class ReviewStatusInfo extends HookWidget with CommonMixin {
|
|||
spacing: 6.0, // 主轴(水平)方向间距
|
||||
runSpacing: 4.0, // 纵轴(垂直)方向间距
|
||||
alignment: WrapAlignment.spaceAround, //沿主轴方向居中
|
||||
children: students.map((e) {
|
||||
children: students!.map((e) {
|
||||
return Chip(
|
||||
labelPadding: EdgeInsets.symmetric(vertical: 1.5.h, horizontal: 5.w),
|
||||
backgroundColor: Color.fromRGBO(239, 242, 255, 1),
|
||||
avatar: CircleAvatar(
|
||||
backgroundColor: Colors.white,
|
||||
child: quickText(e.studentName.substring(0, 1),
|
||||
size: 12.sp, color: Theme.of(context).primaryColor),
|
||||
),
|
||||
// avatar: CircleAvatar(
|
||||
// backgroundColor: Colors.white,
|
||||
// child: quickText(e.studentName.substring(0, 1),
|
||||
// size: 12.sp, color: Theme.of(context).primaryColor),
|
||||
// ),
|
||||
label: quickText(e.studentName, color: Color.fromRGBO(80, 94, 110, 1), size: 12.sp),
|
||||
);
|
||||
}).toList(),
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
import 'package:fl_chart/fl_chart.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_echart/flutter_echart.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';
|
||||
|
|
@ -235,6 +236,7 @@ class _JobReportState extends State<JobReport> with CommonMixin {
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
bool isPadFlag = isPad();
|
||||
return Scaffold(
|
||||
backgroundColor: Color.fromRGBO(245, 245, 245, 1),
|
||||
appBar: AppBar(
|
||||
|
|
@ -337,7 +339,7 @@ class _JobReportState extends State<JobReport> with CommonMixin {
|
|||
height: 6.r,
|
||||
),
|
||||
SizedBox(
|
||||
height: data.kgReport.details.length > 10 ? 300.r : data.kgReport.details.length * 50.r + 20.r,
|
||||
height: data.kgReport.details.length > 10 ? 300.r : data.kgReport.details.length * 50.r + (isPadFlag == true ?40.r:65.r),
|
||||
child: ReportTable(
|
||||
headList: ['题', '作答率', '作答人数', '正确率', '标准答案', '优先批阅概况'],
|
||||
bodyList: data.kgReport.details,
|
||||
|
|
@ -379,7 +381,7 @@ class _JobReportState extends State<JobReport> with CommonMixin {
|
|||
height: 10.r,
|
||||
),
|
||||
SizedBox(
|
||||
height: data.zgReport.details.length > 10 ? 300.r : data.zgReport.details.length * 50.r + 20.r,
|
||||
height: data.zgReport.details.length > 10 ? 300.r : data.zgReport.details.length * 50.r + 50.r,
|
||||
child: ReportTable(
|
||||
headList: ['题', '作答率', '作答人数', '正确率', '查看原题', '优先批阅概况'],
|
||||
bodyList: data.zgReport.details,
|
||||
|
|
@ -1196,7 +1198,7 @@ Widget $overallPerformance(int totalNumber, List<OverallTitles> overallTitles) {
|
|||
Color.fromRGBO(104, 136, 253, 1),
|
||||
Color.fromRGBO(255, 186, 33, 1),
|
||||
Color.fromRGBO(243, 163, 44, 1),
|
||||
Color.fromRGBO(211, 211, 211, 1).withOpacity(0.5),
|
||||
Color.fromRGBO(201, 201, 201, 1),
|
||||
Color.fromRGBO(211, 211, 211, 1),
|
||||
];
|
||||
return Container(
|
||||
|
|
@ -1216,7 +1218,36 @@ Widget $overallPerformance(int totalNumber, List<OverallTitles> overallTitles) {
|
|||
margin: EdgeInsets.only(bottom: 20.h),
|
||||
),
|
||||
Expanded(
|
||||
child: PieChart(
|
||||
child: PieChatWidget(
|
||||
dataList: overallTitles.asMap().keys.map((index) {
|
||||
var e = overallTitles[index];
|
||||
return EChartPieBean(
|
||||
title: e.title,
|
||||
|
||||
number: e.count,
|
||||
color: colorMap[index]);
|
||||
}).toList(),
|
||||
//是否需要背景
|
||||
isBackground: true,
|
||||
//是否画直线
|
||||
isLineText: true,
|
||||
//背景
|
||||
bgColor: Colors.white,
|
||||
//是否显示最前面的内容
|
||||
isFrontgText: false,
|
||||
//默认选择放大的块
|
||||
initSelect: 1,
|
||||
//初次显示以动画方式展开
|
||||
openType: OpenType.ANI,
|
||||
//旋转类型
|
||||
loopType: LoopType.DOWN_LOOP,
|
||||
//点击回调
|
||||
clickCallBack: (int value) {
|
||||
print("当前点击显示 $value");
|
||||
},
|
||||
),
|
||||
|
||||
/* PieChart(
|
||||
PieChartData(
|
||||
borderData: FlBorderData(show: false),
|
||||
sectionsSpace: 0,
|
||||
|
|
@ -1232,7 +1263,7 @@ Widget $overallPerformance(int totalNumber, List<OverallTitles> overallTitles) {
|
|||
);
|
||||
}).toList(),
|
||||
),
|
||||
),
|
||||
),*/
|
||||
)
|
||||
],
|
||||
),
|
||||
|
|
@ -1309,10 +1340,9 @@ Widget $unitTimeAnsweringSituation(BuildContext context, int jobid, List<Questio
|
|||
|
||||
return false; // 没有找到中文字符
|
||||
}
|
||||
|
||||
return Container(
|
||||
width: double.infinity,
|
||||
height: isPad() ? 520.h : 460.h,
|
||||
// height: isPad() ? 520.h : 460.h,
|
||||
margin: EdgeInsets.only(top: 20.h),
|
||||
padding: EdgeInsets.symmetric(vertical: 16.h, horizontal: 12.w),
|
||||
decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(10.r)),
|
||||
|
|
@ -1323,137 +1353,135 @@ Widget $unitTimeAnsweringSituation(BuildContext context, int jobid, List<Questio
|
|||
child: quickText('整体表现', color: Color.fromRGBO(92, 92, 92, 1), size: 14.sp, fontWeight: FontWeight.bold),
|
||||
margin: EdgeInsets.only(bottom: 20.h),
|
||||
),
|
||||
Expanded(
|
||||
child: Scrollbar(
|
||||
thickness: 8.w,
|
||||
thumbVisibility: true,
|
||||
trackVisibility: true,
|
||||
radius: Radius.circular(10.r),
|
||||
child: SingleChildScrollView(
|
||||
scrollDirection: Axis.horizontal,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
...mapData.entries.map((entrie) {
|
||||
bool isViewButton = ['查看原题', '操作'].contains(entrie.key); // 查看按钮
|
||||
bool isRatio = ['正确率', '错误率', '未做'].contains(entrie.key);
|
||||
bool isQuestionNo = entrie.key == '题号';
|
||||
return Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
width: 94.r,
|
||||
Scrollbar(
|
||||
thickness: 8.w,
|
||||
thumbVisibility: true,
|
||||
trackVisibility: true,
|
||||
radius: Radius.circular(10.r),
|
||||
child: SingleChildScrollView(
|
||||
scrollDirection: Axis.horizontal,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
...mapData.entries.map((entrie) {
|
||||
bool isViewButton = ['查看原题', '操作'].contains(entrie.key); // 查看按钮
|
||||
bool isRatio = ['正确率', '错误率', '未做'].contains(entrie.key);
|
||||
bool isQuestionNo = entrie.key == '题号';
|
||||
return Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
width: 94.r,
|
||||
alignment: Alignment.center,
|
||||
margin: EdgeInsets.only(bottom: 1.h, right: 1.w),
|
||||
padding: EdgeInsets.symmetric(vertical: 10.h, horizontal: 8.w),
|
||||
color: Color.fromRGBO(230, 230, 230, 1),
|
||||
child: quickText(entrie.key, color: Color.fromRGBO(24, 35, 77, 1), size: 12.sp, maxLines: 2),
|
||||
),
|
||||
...entrie.value.map((e) {
|
||||
bool noHasChineseCharacter = isQuestionNo && !containsChinese(e);
|
||||
return Container(
|
||||
width: 96.r,
|
||||
alignment: Alignment.center,
|
||||
margin: EdgeInsets.only(bottom: 1.h, right: 1.w),
|
||||
padding: EdgeInsets.symmetric(vertical: 10.h, horizontal: 8.w),
|
||||
color: Color.fromRGBO(230, 230, 230, 1),
|
||||
child: quickText(entrie.key, color: Color.fromRGBO(24, 35, 77, 1), size: 12.sp, maxLines: 2),
|
||||
),
|
||||
...entrie.value.map((e) {
|
||||
bool noHasChineseCharacter = isQuestionNo && !containsChinese(e);
|
||||
return Container(
|
||||
width: 96.r,
|
||||
alignment: Alignment.center,
|
||||
margin: EdgeInsets.only(bottom: 1.h, right: 1.w),
|
||||
padding: EdgeInsets.symmetric(vertical: 10.h, horizontal: 8.w),
|
||||
color: Color.fromRGBO(245, 245, 245, 1),
|
||||
child: isViewButton
|
||||
? InkWell(
|
||||
onTap: () {
|
||||
// e
|
||||
var _qpm = e as QuestionPictureModel;
|
||||
// if (entrie.key == '操作') {
|
||||
// showDialog(
|
||||
// context: context,
|
||||
// builder: (BuildContext context1) {
|
||||
// return Container(
|
||||
// margin: EdgeInsets.symmetric(vertical: 150.h, horizontal: 24.w),
|
||||
// padding: EdgeInsets.symmetric(vertical: 15.h),
|
||||
// decoration: BoxDecoration(
|
||||
// color: Colors.white,
|
||||
// borderRadius: BorderRadius.circular(18.sp),
|
||||
// ),
|
||||
// child: Column(
|
||||
// children: [
|
||||
// Container(
|
||||
// child: quickText('${_qpm.questionNo}题',
|
||||
// color: Color.fromRGBO(60, 60, 60, 1), size: 15.sp)),
|
||||
// Expanded(
|
||||
// child: ListView(
|
||||
// padding: EdgeInsets.symmetric(horizontal: 12.w),
|
||||
// children: [
|
||||
// DataTable(
|
||||
// sortAscending: false,
|
||||
// columns: [
|
||||
// DataColumn(
|
||||
// label: quickText('姓名',
|
||||
// color: Color.fromRGBO(114, 114, 114, 1),
|
||||
// size: 14.sp,
|
||||
// fontWeight: FontWeight.bold),
|
||||
// ),
|
||||
// ],
|
||||
// rows: [],
|
||||
// ),
|
||||
// ]),
|
||||
// )
|
||||
// ],
|
||||
// ),
|
||||
// );
|
||||
// },
|
||||
// );
|
||||
// return;
|
||||
// }
|
||||
if (_qpm.questionPicture == null) return ToastUtils.showInfo('当前试题没有原题');
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(builder: (_) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(),
|
||||
body: PhotoView(imageProvider: NetworkImage(_qpm.questionPicture!)),
|
||||
);
|
||||
}),
|
||||
);
|
||||
},
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
quickText('查看', color: Color.fromRGBO(239, 135, 20, 1), size: 12.sp),
|
||||
Container(
|
||||
padding: EdgeInsets.only(top: 1.h),
|
||||
child: Icon(
|
||||
Icons.arrow_forward_ios,
|
||||
size: 10.sp,
|
||||
color: Color.fromRGBO(239, 135, 20, 1),
|
||||
),
|
||||
color: Color.fromRGBO(245, 245, 245, 1),
|
||||
child: isViewButton
|
||||
? InkWell(
|
||||
onTap: () {
|
||||
// e
|
||||
var _qpm = e as QuestionPictureModel;
|
||||
// if (entrie.key == '操作') {
|
||||
// showDialog(
|
||||
// context: context,
|
||||
// builder: (BuildContext context1) {
|
||||
// return Container(
|
||||
// margin: EdgeInsets.symmetric(vertical: 150.h, horizontal: 24.w),
|
||||
// padding: EdgeInsets.symmetric(vertical: 15.h),
|
||||
// decoration: BoxDecoration(
|
||||
// color: Colors.white,
|
||||
// borderRadius: BorderRadius.circular(18.sp),
|
||||
// ),
|
||||
// child: Column(
|
||||
// children: [
|
||||
// Container(
|
||||
// child: quickText('${_qpm.questionNo}题',
|
||||
// color: Color.fromRGBO(60, 60, 60, 1), size: 15.sp)),
|
||||
// Expanded(
|
||||
// child: ListView(
|
||||
// padding: EdgeInsets.symmetric(horizontal: 12.w),
|
||||
// children: [
|
||||
// DataTable(
|
||||
// sortAscending: false,
|
||||
// columns: [
|
||||
// DataColumn(
|
||||
// label: quickText('姓名',
|
||||
// color: Color.fromRGBO(114, 114, 114, 1),
|
||||
// size: 14.sp,
|
||||
// fontWeight: FontWeight.bold),
|
||||
// ),
|
||||
// ],
|
||||
// rows: [],
|
||||
// ),
|
||||
// ]),
|
||||
// )
|
||||
// ],
|
||||
// ),
|
||||
// );
|
||||
// },
|
||||
// );
|
||||
// return;
|
||||
// }
|
||||
if (_qpm.questionPicture == null) return ToastUtils.showInfo('当前试题没有原题');
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(builder: (_) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(),
|
||||
body: PhotoView(imageProvider: NetworkImage(_qpm.questionPicture!)),
|
||||
);
|
||||
}),
|
||||
);
|
||||
},
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
quickText('查看', color: Color.fromRGBO(239, 135, 20, 1), size: 12.sp),
|
||||
Container(
|
||||
padding: EdgeInsets.only(top: 1.h),
|
||||
child: Icon(
|
||||
Icons.arrow_forward_ios,
|
||||
size: 10.sp,
|
||||
color: Color.fromRGBO(239, 135, 20, 1),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
||||
: RegExp(r'^\d+$').hasMatch(e) || (e.contains('%') && e.length < 4)
|
||||
? Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
quickText(e,
|
||||
color: isRatio
|
||||
? Theme.of(context).primaryColor
|
||||
: Color.fromRGBO(82, 82, 82, 1),
|
||||
size: isRatio || noHasChineseCharacter ? 12.sp : 12.sp,
|
||||
maxLines: 2),
|
||||
quickText('透', color: Colors.transparent, size: 12.sp),
|
||||
],
|
||||
),
|
||||
)
|
||||
: RegExp(r'^\d+$').hasMatch(e) || (e.contains('%') && e.length < 4)
|
||||
? Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
quickText(e,
|
||||
color: isRatio
|
||||
? Theme.of(context).primaryColor
|
||||
: Color.fromRGBO(82, 82, 82, 1),
|
||||
size: isRatio || noHasChineseCharacter ? 12.sp : 12.sp,
|
||||
maxLines: 2),
|
||||
quickText('透', color: Colors.transparent, size: 12.sp),
|
||||
],
|
||||
)
|
||||
: quickText(e,
|
||||
color: isRatio ? Theme.of(context).primaryColor : Color.fromRGBO(82, 82, 82, 1),
|
||||
size: isRatio || noHasChineseCharacter ? 12.sp : 12.sp,
|
||||
maxLines: 2),
|
||||
);
|
||||
}).toList(),
|
||||
],
|
||||
);
|
||||
}).toList(),
|
||||
],
|
||||
),
|
||||
)
|
||||
: quickText(e,
|
||||
color: isRatio ? Theme.of(context).primaryColor : Color.fromRGBO(82, 82, 82, 1),
|
||||
size: isRatio || noHasChineseCharacter ? 12.sp : 12.sp,
|
||||
maxLines: 2),
|
||||
);
|
||||
}).toList(),
|
||||
],
|
||||
);
|
||||
}).toList(),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
|
|
@ -1494,7 +1522,7 @@ Widget $personnelDataOverview(BuildContext context, List<StudentAnswerInfos> stu
|
|||
|
||||
return Container(
|
||||
width: double.infinity,
|
||||
height: isPad() ? 290.h : 264.h,
|
||||
// height: isPad() ? 290.h : 264.h,
|
||||
margin: EdgeInsets.only(top: 20.h),
|
||||
padding: EdgeInsets.symmetric(vertical: 16.h, horizontal: 12.w),
|
||||
decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(10.r)),
|
||||
|
|
@ -1505,57 +1533,55 @@ Widget $personnelDataOverview(BuildContext context, List<StudentAnswerInfos> stu
|
|||
child: quickText('人员数据概况', color: Color.fromRGBO(92, 92, 92, 1), size: 14.sp, fontWeight: FontWeight.bold),
|
||||
margin: EdgeInsets.only(bottom: 20.h),
|
||||
),
|
||||
Expanded(
|
||||
child: Scrollbar(
|
||||
thickness: 8.w,
|
||||
thumbVisibility: true,
|
||||
trackVisibility: true,
|
||||
radius: Radius.circular(10.r),
|
||||
child: SingleChildScrollView(
|
||||
scrollDirection: Axis.horizontal,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
...mapData.entries.map((entrie) {
|
||||
bool isTransparentChinese = ['答题时长', '正确率', '未答题数'].contains(entrie.key); // 透明中文
|
||||
Scrollbar(
|
||||
thickness: 8.w,
|
||||
thumbVisibility: true,
|
||||
trackVisibility: true,
|
||||
radius: Radius.circular(10.r),
|
||||
child: SingleChildScrollView(
|
||||
scrollDirection: Axis.horizontal,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
...mapData.entries.map((entrie) {
|
||||
bool isTransparentChinese = ['答题时长', '正确率', '未答题数'].contains(entrie.key); // 透明中文
|
||||
|
||||
return Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
width: 94.r,
|
||||
return Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
width: 94.r,
|
||||
alignment: Alignment.center,
|
||||
color: Color.fromRGBO(230, 230, 230, 1),
|
||||
margin: EdgeInsets.only(bottom: 1.h, right: 1.w),
|
||||
padding: EdgeInsets.symmetric(vertical: 10.h, horizontal: 8.w),
|
||||
child: quickText(entrie.key, color: Color.fromRGBO(24, 35, 77, 1), size: 12.sp, maxLines: 2),
|
||||
),
|
||||
...entrie.value.map((e) {
|
||||
bool isTransparentChineseNew = isTransparentChinese && (e?.length ?? 0) == 0;
|
||||
return Container(
|
||||
width: 100.r,
|
||||
alignment: Alignment.center,
|
||||
color: Color.fromRGBO(230, 230, 230, 1),
|
||||
margin: EdgeInsets.only(bottom: 1.h, right: 1.w),
|
||||
padding: EdgeInsets.symmetric(vertical: 10.h, horizontal: 8.w),
|
||||
child: quickText(entrie.key, color: Color.fromRGBO(24, 35, 77, 1), size: 12.sp, maxLines: 2),
|
||||
),
|
||||
...entrie.value.map((e) {
|
||||
bool isTransparentChineseNew = isTransparentChinese && (e?.length ?? 0) == 0;
|
||||
return Container(
|
||||
width: 100.r,
|
||||
alignment: Alignment.center,
|
||||
margin: EdgeInsets.only(bottom: 1.h, right: 1.w),
|
||||
padding: EdgeInsets.symmetric(vertical: 10.h, horizontal: 8.w),
|
||||
color: Color.fromRGBO(245, 245, 245, 1),
|
||||
child: isTransparentChineseNew
|
||||
? quickText('透明', color: Colors.transparent, size: 12.sp)
|
||||
: RegExp(r'^\d+$').hasMatch(e) || e.contains('%')
|
||||
? Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
quickText(e, color: Color.fromRGBO(82, 82, 82, 1), size: 12.sp, maxLines: 2),
|
||||
quickText('透', color: Colors.transparent, size: 12.sp),
|
||||
],
|
||||
)
|
||||
: quickText(e, color: Color.fromRGBO(82, 82, 82, 1), size: 12.sp, maxLines: 2),
|
||||
);
|
||||
}).toList(),
|
||||
],
|
||||
);
|
||||
}).toList(),
|
||||
],
|
||||
),
|
||||
color: Color.fromRGBO(245, 245, 245, 1),
|
||||
child: isTransparentChineseNew
|
||||
? quickText('透明', color: Colors.transparent, size: 12.sp)
|
||||
: RegExp(r'^\d+$').hasMatch(e) || e.contains('%')
|
||||
? Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
quickText(e, color: Color.fromRGBO(82, 82, 82, 1), size: 12.sp, maxLines: 2),
|
||||
quickText('透', color: Colors.transparent, size: 12.sp),
|
||||
],
|
||||
)
|
||||
: quickText(e, color: Color.fromRGBO(82, 82, 82, 1), size: 12.sp, maxLines: 2),
|
||||
);
|
||||
}).toList(),
|
||||
],
|
||||
);
|
||||
}).toList(),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
|
|
|
|||
|
|
@ -159,7 +159,7 @@ class _JobListParticipateInClassState extends State<JobListParticipateInClass> w
|
|||
color: Theme.of(context).primaryColor,
|
||||
).show(context);
|
||||
}
|
||||
|
||||
print('进入页面................');
|
||||
if (task.isFinish) {
|
||||
return AchievementView(
|
||||
elevation: 0.5,
|
||||
|
|
@ -175,8 +175,10 @@ class _JobListParticipateInClassState extends State<JobListParticipateInClass> w
|
|||
RouterManager.router.navigateTo(context, url, transition: getTransition()).then((value) {
|
||||
if (value == true) {
|
||||
isRefresh = true;
|
||||
_future = getData();
|
||||
toUpState(setState, () {}, mounted);
|
||||
getListOfJobFavoritesData().then((value) {
|
||||
_future = getData();
|
||||
toUpState(setState, () {}, mounted);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -279,8 +281,11 @@ class _JobListParticipateInClassState extends State<JobListParticipateInClass> w
|
|||
transition: getTransition(),
|
||||
)
|
||||
.then((value) async {
|
||||
_future = getData()
|
||||
..then((value) => getListOfJobFavoritesData().then((value) => toUpState(setState, () {}, mounted)));
|
||||
isRefresh = true;
|
||||
getListOfJobFavoritesData().then((value) {
|
||||
_future = getData();
|
||||
toUpState(setState, () {}, mounted);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -321,7 +326,7 @@ class _JobListParticipateInClassState extends State<JobListParticipateInClass> w
|
|||
if (_result.data?.isEmpty ?? true) {
|
||||
return ToastUtils.showError('获取到的学生列表为空');
|
||||
}
|
||||
students = _result.data!;
|
||||
students = _result.data!..sort((e, e1) => e.studentName.compareTo(e1.studentName));
|
||||
} catch (e) {
|
||||
return ToastUtils.showError('获取学生列表失败');
|
||||
} finally {
|
||||
|
|
@ -363,11 +368,12 @@ class _JobListParticipateInClassState extends State<JobListParticipateInClass> w
|
|||
children: students.map((e) {
|
||||
return Chip(
|
||||
backgroundColor: Color.fromRGBO(239, 242, 255, 1),
|
||||
avatar: CircleAvatar(
|
||||
backgroundColor: Colors.white,
|
||||
child: quickText(e.studentName.substring(0, 1),
|
||||
size: 12.sp, color: Theme.of(context).primaryColor),
|
||||
),
|
||||
labelPadding: EdgeInsets.symmetric(vertical: 1.5.h, horizontal: 5.w),
|
||||
// avatar: CircleAvatar(
|
||||
// backgroundColor: Colors.white,
|
||||
// child: quickText(e.studentName.substring(0, 1),
|
||||
// size: 12.sp, color: Theme.of(context).primaryColor),
|
||||
// ),
|
||||
label: quickText(e.studentName, color: Color.fromRGBO(80, 94, 110, 1), size: 12.sp),
|
||||
);
|
||||
}).toList(),
|
||||
|
|
@ -624,19 +630,21 @@ class TabletEndCompleted extends StatelessWidget {
|
|||
Expanded(
|
||||
flex: 4,
|
||||
child: Material(
|
||||
color: Color.fromRGBO(104, 136, 253, 1),
|
||||
color: Color.fromRGBO(244, 244, 244, 1),
|
||||
borderRadius: BorderRadius.circular(16.r),
|
||||
child: InkWell(
|
||||
onTap: () => easyThrottle(
|
||||
'OneClickReview', () => showStudentList([taskItem.id], taskItem.className, true)),
|
||||
borderRadius: BorderRadius.circular(8.r),
|
||||
splashColor: Theme.of(context).primaryColor,
|
||||
child: Container(
|
||||
alignment: Alignment.center,
|
||||
padding: EdgeInsets.symmetric(vertical: 4.h),
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(20.r),
|
||||
),
|
||||
child: quickText('已提交:${taskItem.commitStudentCount}', size: 8.sp, color: Colors.white),
|
||||
child: quickText('已提交:${taskItem.commitStudentCount}',
|
||||
size: 8.sp, color: Color.fromRGBO(102, 102, 102, 1)),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
|
@ -650,6 +658,7 @@ class TabletEndCompleted extends StatelessWidget {
|
|||
child: InkWell(
|
||||
onTap: () => easyThrottle(
|
||||
'OneClickReview', () => showStudentList([taskItem.id], taskItem.className)),
|
||||
splashColor: Theme.of(context).primaryColor,
|
||||
borderRadius: BorderRadius.circular(8.r),
|
||||
child: Container(
|
||||
alignment: Alignment.center,
|
||||
|
|
@ -669,6 +678,7 @@ class TabletEndCompleted extends StatelessWidget {
|
|||
borderRadius: BorderRadius.circular(20.r),
|
||||
child: InkWell(
|
||||
onTap: () => bookmarks(taskItem),
|
||||
splashColor: Theme.of(context).primaryColor,
|
||||
borderRadius: BorderRadius.circular(8.r),
|
||||
child: Container(
|
||||
alignment: Alignment.center,
|
||||
|
|
@ -811,11 +821,12 @@ class MobileEndCompleted extends StatelessWidget {
|
|||
Expanded(
|
||||
flex: 4,
|
||||
child: Material(
|
||||
color: Color.fromRGBO(104, 136, 253, 1),
|
||||
color: Color.fromRGBO(244, 244, 244, 1),
|
||||
borderRadius: BorderRadius.circular(16.r),
|
||||
child: InkWell(
|
||||
onTap: () =>
|
||||
easyThrottle('OneClickReview', () => showStudentList([task.id], task.className, true)),
|
||||
splashColor: Theme.of(context).primaryColor,
|
||||
borderRadius: BorderRadius.circular(8.r),
|
||||
child: Container(
|
||||
alignment: Alignment.center,
|
||||
|
|
@ -823,7 +834,8 @@ class MobileEndCompleted extends StatelessWidget {
|
|||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(20.r),
|
||||
),
|
||||
child: quickText('已提交:${task.commitStudentCount}', size: 10.sp, color: Colors.white),
|
||||
child: quickText('已提交:${task.commitStudentCount}',
|
||||
size: 10.sp, color: Color.fromRGBO(102, 102, 102, 1)),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
|
@ -886,49 +898,26 @@ class MobileEndCompleted extends StatelessWidget {
|
|||
)
|
||||
],
|
||||
),
|
||||
child: Row(
|
||||
children: task.isFinish
|
||||
? [
|
||||
Expanded(
|
||||
child: InkWell(
|
||||
onTap: () => easyThrottle('go_to_review_homework', () => quickDataCheck(task)),
|
||||
child: Container(
|
||||
alignment: Alignment.center,
|
||||
child: quickText('数据快查', color: Color.fromRGBO(79, 79, 79, 1), size: 13.sp),
|
||||
),
|
||||
),
|
||||
),
|
||||
Container(width: 1.w, height: 36.h, color: Color.fromRGBO(221, 221, 221, 1)),
|
||||
Expanded(
|
||||
child: InkWell(
|
||||
onTap: () => easyThrottle('go_to_end_review_homework', () => jobViewReport(task)),
|
||||
child: Container(
|
||||
alignment: Alignment.center,
|
||||
child: quickText('查看报告', color: Color.fromRGBO(118, 118, 118, 1), size: 12.sp),
|
||||
),
|
||||
)),
|
||||
]
|
||||
: [
|
||||
Expanded(
|
||||
child: InkWell(
|
||||
onTap: () => easyThrottle('go_to_review_homework', () {}),
|
||||
child: Container(
|
||||
alignment: Alignment.center,
|
||||
child: quickText('批阅', color: Color.fromRGBO(79, 79, 79, 1), size: 13.sp),
|
||||
),
|
||||
),
|
||||
),
|
||||
Container(width: 1.w, height: 36.h, color: Color.fromRGBO(221, 221, 221, 1)),
|
||||
Expanded(
|
||||
child: InkWell(
|
||||
onTap: () => easyThrottle('go_to_end_review_homework', () => {}),
|
||||
child: Container(
|
||||
alignment: Alignment.center,
|
||||
child: quickText('结束批阅', color: Color.fromRGBO(118, 118, 118, 1), size: 12.sp),
|
||||
),
|
||||
)),
|
||||
],
|
||||
),
|
||||
child: Row(children: [
|
||||
Expanded(
|
||||
child: InkWell(
|
||||
onTap: () => easyThrottle('go_to_review_homework', () => quickDataCheck(task)),
|
||||
child: Container(
|
||||
alignment: Alignment.center,
|
||||
child: quickText('数据快查', color: Color.fromRGBO(79, 79, 79, 1), size: 13.sp),
|
||||
),
|
||||
),
|
||||
),
|
||||
Container(width: 1.w, height: 36.h, color: Color.fromRGBO(221, 221, 221, 1)),
|
||||
Expanded(
|
||||
child: InkWell(
|
||||
onTap: () => easyThrottle('go_to_end_review_homework', () => jobViewReport(task)),
|
||||
child: Container(
|
||||
alignment: Alignment.center,
|
||||
child: quickText('查看报告', color: Color.fromRGBO(118, 118, 118, 1), size: 12.sp),
|
||||
),
|
||||
)),
|
||||
]),
|
||||
),
|
||||
],
|
||||
));
|
||||
|
|
@ -1066,9 +1055,10 @@ Widget $itemDataViewOfPad(
|
|||
Expanded(
|
||||
flex: 4,
|
||||
child: Material(
|
||||
color: Color.fromRGBO(104, 136, 253, 1),
|
||||
color: Color.fromRGBO(244, 244, 244, 1),
|
||||
borderRadius: BorderRadius.circular(16.r),
|
||||
child: InkWell(
|
||||
splashColor: Theme.of(context).primaryColor,
|
||||
onTap: () => easyThrottle('OneClickReview', () {
|
||||
if (!task.canMarking) {
|
||||
return AchievementView(
|
||||
|
|
@ -1085,10 +1075,8 @@ Widget $itemDataViewOfPad(
|
|||
child: Container(
|
||||
alignment: Alignment.center,
|
||||
padding: EdgeInsets.symmetric(vertical: 3.h),
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(20.r),
|
||||
),
|
||||
child: quickText('一键批阅', size: 8.sp, color: Colors.white),
|
||||
decoration: BoxDecoration(borderRadius: BorderRadius.circular(20.r)),
|
||||
child: quickText('一键批阅', size: 8.sp, color: Color.fromRGBO(102, 102, 102, 1)),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
|
@ -1101,6 +1089,7 @@ Widget $itemDataViewOfPad(
|
|||
borderRadius: BorderRadius.circular(20.r),
|
||||
child: InkWell(
|
||||
onTap: () => quickDataCheck(task),
|
||||
splashColor: Theme.of(context).primaryColor,
|
||||
borderRadius: BorderRadius.circular(8.r),
|
||||
child: Container(
|
||||
alignment: Alignment.center,
|
||||
|
|
@ -1118,6 +1107,7 @@ Widget $itemDataViewOfPad(
|
|||
color: Color.fromRGBO(244, 244, 244, 1),
|
||||
borderRadius: BorderRadius.circular(20.r),
|
||||
child: InkWell(
|
||||
splashColor: Theme.of(context).primaryColor,
|
||||
onTap: () => bookmarks(task),
|
||||
borderRadius: BorderRadius.circular(8.r),
|
||||
child: Container(
|
||||
|
|
@ -1338,9 +1328,10 @@ Widget $itemDataView(
|
|||
Expanded(
|
||||
flex: 4,
|
||||
child: Material(
|
||||
color: Color.fromRGBO(104, 136, 253, 1),
|
||||
color: Color.fromRGBO(244, 244, 244, 1),
|
||||
borderRadius: BorderRadius.circular(16.r),
|
||||
child: InkWell(
|
||||
splashColor: Theme.of(context).primaryColor,
|
||||
onTap: () => easyThrottle('OneClickReview', () {
|
||||
if (!task.canMarking) {
|
||||
return AchievementView(
|
||||
|
|
@ -1360,7 +1351,7 @@ Widget $itemDataView(
|
|||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(20.r),
|
||||
),
|
||||
child: quickText('一键批阅', size: 10.sp, color: Colors.white),
|
||||
child: quickText('一键批阅', size: 10.sp, color: Color.fromRGBO(102, 102, 102, 1)),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
|
@ -1372,6 +1363,7 @@ Widget $itemDataView(
|
|||
color: Color.fromRGBO(244, 244, 244, 1),
|
||||
borderRadius: BorderRadius.circular(20.r),
|
||||
child: InkWell(
|
||||
splashColor: Theme.of(context).primaryColor,
|
||||
onTap: () => quickDataCheck(task),
|
||||
borderRadius: BorderRadius.circular(8.r),
|
||||
child: Container(
|
||||
|
|
@ -1391,6 +1383,7 @@ Widget $itemDataView(
|
|||
borderRadius: BorderRadius.circular(20.r),
|
||||
child: InkWell(
|
||||
onTap: () => bookmarks(task),
|
||||
splashColor: Theme.of(context).primaryColor,
|
||||
borderRadius: BorderRadius.circular(8.r),
|
||||
child: Container(
|
||||
alignment: Alignment.center,
|
||||
|
|
@ -1582,7 +1575,7 @@ Widget $completedHomeworkProgressBar(
|
|||
percent: percent,
|
||||
center: Text(
|
||||
percentStr,
|
||||
style: TextStyle(color: Colors.white, fontSize: 6.sp),
|
||||
style: TextStyle(color: Colors.white, fontSize: 4.5.sp),
|
||||
),
|
||||
// linearStrokeCap: LinearStrokeCap.butt,
|
||||
progressColor: color,
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
|
|||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:flutter_widget_from_html_core/flutter_widget_from_html_core.dart';
|
||||
import 'package:marking_app/utils/easy_refresh/MyEmptyWidget.dart';
|
||||
import 'package:marking_app/utils/index.dart';
|
||||
import 'package:marking_app/utils/toast_utils.dart';
|
||||
import 'package:photo_view/photo_view.dart';
|
||||
|
||||
|
|
@ -283,6 +284,7 @@ class _ReportTableState extends State<ReportTable> {
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
bool isPadFlag = isPad();
|
||||
return DataTable2(
|
||||
dividerThickness: 0,
|
||||
scrollController: _controller,
|
||||
|
|
@ -314,7 +316,7 @@ class _ReportTableState extends State<ReportTable> {
|
|||
fixedCornerColor: Colors.grey[400],
|
||||
minWidth: widget.headList.length > 6
|
||||
? 80.r * widget.headList.length
|
||||
: MediaQuery.of(context).size.width,
|
||||
: isPadFlag?MediaQuery.of(context).size.width:85.r * widget.headList.length,
|
||||
fixedTopRows: widget.fixedRows!,
|
||||
fixedLeftColumns: widget.fixedCols!,
|
||||
sortColumnIndex: _sortColumnIndex,
|
||||
|
|
@ -332,8 +334,8 @@ class _ReportTableState extends State<ReportTable> {
|
|||
? 40.r
|
||||
: widget.headList.length > 6
|
||||
? 80.r
|
||||
: (MediaQuery.of(context).size.width - 8.r) /
|
||||
widget.headList.length,
|
||||
: isPadFlag?(MediaQuery.of(context).size.width - 8.r) /
|
||||
widget.headList.length:85.r,
|
||||
);
|
||||
}),
|
||||
rows: List<DataRow>.generate(widget.bodyList.length,
|
||||
|
|
|
|||
|
|
@ -112,6 +112,9 @@ dependencies:
|
|||
data_table_2: ^2.5.10
|
||||
syncfusion_flutter_datepicker: ^21.2.10
|
||||
flutter_staggered_grid_view: ^0.6.2
|
||||
# 饼图
|
||||
flutter_echart: ^2.0.0
|
||||
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
|
|
|
|||
Loading…
Reference in New Issue