From b2f50b10a6e11b228c2dcab0d870a4937b064331 Mon Sep 17 00:00:00 2001 From: machuanyu <840649825@qq.com> Date: Wed, 20 Mar 2024 17:02:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=A5=E5=91=8A=E9=A5=BC=E5=9B=BE=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pages/homework_correction/job_report.dart | 388 ++++++++++-------- .../widget/report_table.dart | 8 +- marking_app/pubspec.yaml | 3 + 3 files changed, 215 insertions(+), 184 deletions(-) diff --git a/marking_app/lib/pages/homework_correction/job_report.dart b/marking_app/lib/pages/homework_correction/job_report.dart index 2b56117..22e077b 100644 --- a/marking_app/lib/pages/homework_correction/job_report.dart +++ b/marking_app/lib/pages/homework_correction/job_report.dart @@ -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 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 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 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) { 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) { 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) { ); }).toList(), ), - ), + ),*/ ) ], ), @@ -1309,10 +1340,9 @@ Widget $unitTimeAnsweringSituation(BuildContext context, int jobid, List 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 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(), + ], ), ), ), diff --git a/marking_app/lib/pages/homework_correction/widget/report_table.dart b/marking_app/lib/pages/homework_correction/widget/report_table.dart index aae7a2c..d8bc0b6 100644 --- a/marking_app/lib/pages/homework_correction/widget/report_table.dart +++ b/marking_app/lib/pages/homework_correction/widget/report_table.dart @@ -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 { @override Widget build(BuildContext context) { + bool isPadFlag = isPad(); return DataTable2( dividerThickness: 0, scrollController: _controller, @@ -314,7 +316,7 @@ class _ReportTableState extends State { 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 { ? 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.generate(widget.bodyList.length, diff --git a/marking_app/pubspec.yaml b/marking_app/pubspec.yaml index 417fb67..7ce9aeb 100644 --- a/marking_app/pubspec.yaml +++ b/marking_app/pubspec.yaml @@ -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: