From 6285eeac5de4d8b968b314b148b8000b1657342e Mon Sep 17 00:00:00 2001 From: machuanyu <840649825@qq.com> Date: Thu, 16 May 2024 14:31:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BF=AB=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../annotate_class_binding.dart | 10 + .../annotate_class/annotate_class_logic.dart | 41 ++ .../annotate_class/annotate_class_state.dart | 13 + .../annotate_class/annotate_class_view.dart | 336 ++++++++++++++++ .../job_report/job_report_binding.dart | 10 + .../children/job_report/job_report_logic.dart | 7 + .../children/job_report/job_report_state.dart | 5 + .../children/job_report/job_report_view.dart | 27 ++ .../quick_data_check_binding.dart | 10 + .../quick_data_check_logic.dart | 34 ++ .../quick_data_check_state.dart | 40 ++ .../quick_data_check_view.dart | 360 ++++++++++++++++++ 12 files changed, 893 insertions(+) create mode 100644 lib/page/home_page/children/annotate_class/annotate_class_binding.dart create mode 100644 lib/page/home_page/children/annotate_class/annotate_class_logic.dart create mode 100644 lib/page/home_page/children/annotate_class/annotate_class_state.dart create mode 100644 lib/page/home_page/children/annotate_class/annotate_class_view.dart create mode 100644 lib/page/home_page/children/job_report/job_report_binding.dart create mode 100644 lib/page/home_page/children/job_report/job_report_logic.dart create mode 100644 lib/page/home_page/children/job_report/job_report_state.dart create mode 100644 lib/page/home_page/children/job_report/job_report_view.dart create mode 100644 lib/page/home_page/children/quick_data_check/quick_data_check_binding.dart create mode 100644 lib/page/home_page/children/quick_data_check/quick_data_check_logic.dart create mode 100644 lib/page/home_page/children/quick_data_check/quick_data_check_state.dart create mode 100644 lib/page/home_page/children/quick_data_check/quick_data_check_view.dart diff --git a/lib/page/home_page/children/annotate_class/annotate_class_binding.dart b/lib/page/home_page/children/annotate_class/annotate_class_binding.dart new file mode 100644 index 0000000..85a6bba --- /dev/null +++ b/lib/page/home_page/children/annotate_class/annotate_class_binding.dart @@ -0,0 +1,10 @@ +import 'package:get/get.dart'; + +import 'annotate_class_logic.dart'; + +class AnnotateClassBinding extends Bindings { + @override + void dependencies() { + Get.lazyPut(() => AnnotateClassLogic()); + } +} diff --git a/lib/page/home_page/children/annotate_class/annotate_class_logic.dart b/lib/page/home_page/children/annotate_class/annotate_class_logic.dart new file mode 100644 index 0000000..98ac37b --- /dev/null +++ b/lib/page/home_page/children/annotate_class/annotate_class_logic.dart @@ -0,0 +1,41 @@ +import 'package:get/get.dart'; +import 'package:school_asignment_app/common/job/annotated_class.dart'; +import 'package:school_asignment_app/common/mixins/request_tool_mixin.dart'; + +import 'annotate_class_state.dart'; + +class AnnotateClassLogic extends GetxController with RequestToolMixin{ + final AnnotateClassState state = AnnotateClassState(); + + @override + void onInit(){ + super.onInit(); + state.homeworkId.value = Get.arguments['id']??''; + state.name.value = Get.arguments['name']??''; + state.grade = Get.arguments['grade']; + + getList(); + } + + void getList() async{ + List data = await getClient(). getAnnotatedClassList(state.homeworkId.value); + state.classList.value = data; + + for (var element in state.classList.value) { + int commitStudentCount = 0; + int noCommitStudentCount = 0; + for (var student in element.students) { + if(student.state == 0){ + noCommitStudentCount ++; + }else{ + commitStudentCount ++; + } + } + element.commitStudentCount = commitStudentCount; + element.noCommitStudentCount = noCommitStudentCount; + } + + + } + +} diff --git a/lib/page/home_page/children/annotate_class/annotate_class_state.dart b/lib/page/home_page/children/annotate_class/annotate_class_state.dart new file mode 100644 index 0000000..fcd49b2 --- /dev/null +++ b/lib/page/home_page/children/annotate_class/annotate_class_state.dart @@ -0,0 +1,13 @@ +import 'package:get/get.dart'; +import 'package:school_asignment_app/common/job/annotated_class.dart'; + +class AnnotateClassState { + AnnotateClassState() { + ///Initialize variables + } + + late RxString name = ''.obs; + late RxList classList = RxList(); + late RxString homeworkId = ''.obs; + late int grade; +} diff --git a/lib/page/home_page/children/annotate_class/annotate_class_view.dart b/lib/page/home_page/children/annotate_class/annotate_class_view.dart new file mode 100644 index 0000000..bc34148 --- /dev/null +++ b/lib/page/home_page/children/annotate_class/annotate_class_view.dart @@ -0,0 +1,336 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; +import 'package:percent_indicator/percent_indicator.dart'; +import 'package:school_asignment_app/common/job/annotated_class.dart'; +import 'package:school_asignment_app/page/global_widget/ReturnToHomepage.dart'; +import 'package:school_asignment_app/page/global_widget/my_text.dart'; +import 'package:school_asignment_app/page/home_page/widget/progress_bar.dart'; +import 'package:school_asignment_app/routes/app_pages.dart'; +import 'annotate_class_logic.dart'; + +class AnnotateClassPage extends StatefulWidget { + const AnnotateClassPage({Key? key}) : super(key: key); + + @override + State createState() => _AnnotateClassPageState(); +} + +class _AnnotateClassPageState extends State { + final logic = Get.find(); + final state = Get.find().state; + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: const Color.fromRGBO(245, 245, 245, 1), + appBar: AppBar( + backgroundColor: Colors.white, + title: Obx(() { + return Text(state.name.value, + style: + TextStyle(fontSize: 14.sp, color: const Color(0xFF333333))); + }), + centerTitle: true, + leading: IconButton( + icon: const Icon(Icons.arrow_back_ios, color: Colors.black), + onPressed: () => Navigator.of(context).pop(), + ), + actions: const [ + ReturnToHomepage(), + ], + ), + body: Padding( + padding: EdgeInsets.symmetric(vertical: 14.r, horizontal: 14.r), + child: Obx(() { + return ListView.builder( + itemCount: state.classList.length, + itemBuilder: (context, index) { + AnnotatedClass item = state.classList[index]; + return Container( + padding: EdgeInsets.only(top: 10.r), + margin: EdgeInsets.only(bottom: 10.r), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadiusDirectional.circular(4.r), + boxShadow: const [BoxShadow(color: Color.fromRGBO(0, 0, 0, 0.15), blurRadius: 10)], + ), + child: Column( + children: [ + Padding( + padding: EdgeInsets.symmetric(horizontal: 10.r), + child: Row( + children: [ + Text( + item.className, + style: TextStyle( + fontSize: 14.sp, + color: const Color(0xFF000000)), + ), + const Spacer(), + Text( + '已交:${item.commitStudentCount}', + style: TextStyle( + fontSize: 12.sp, + color: const Color(0xFF6888FD)), + ), + SizedBox( + width: 20.r, + ), + Text( + '未交:${item.noCommitStudentCount}', + style: TextStyle( + fontSize: 12.sp, + color: const Color(0xFFFF5656)), + ), + ], + ), + ), + SizedBox( + height: 10.r, + ), + Padding( + padding: EdgeInsets.symmetric(horizontal: 10.r), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: + item.finishTime != null ? + [ + Expanded( + flex:4, + child: InkWell( + splashColor: Theme.of(context).primaryColor, + child: ElevatedButton( + style: ButtonStyle( + overlayColor:MaterialStateProperty.all( + const Color(0xFF6888FD)), + backgroundColor: + MaterialStateProperty.all( + const Color(0xFFF4F4F4)), + // foregroundColor: MaterialStateProperty.all(Colors.red.shade200),//文字颜色 + shape: MaterialStateProperty.all( + RoundedRectangleBorder( + borderRadius: + BorderRadius.circular(22), //设置圆角 + ))), + onPressed: () {}, + child: Text( + "收藏夹", + style: TextStyle( + fontSize: 10.sp, + color: const Color(0xFF666666)), + )), + ), + ), + const Expanded(flex: 1, child: SizedBox()), + const Expanded(flex: 4, child: SizedBox()), + const Expanded(flex: 1, child: SizedBox()), + const Expanded(flex: 4, child: SizedBox()), + + ]:[ + Expanded( + flex: 4, + child: ElevatedButton( + style: ButtonStyle( + overlayColor:MaterialStateProperty.all( + const Color(0xFF6888FD)), + backgroundColor: + MaterialStateProperty.all( + const Color(0xFFF4F4F4)), + // foregroundColor: MaterialStateProperty.all(Colors.red.shade200),//文字颜色 + shape: MaterialStateProperty.all( + RoundedRectangleBorder( + borderRadius: + BorderRadius.circular(22), //设置圆角 + ))), + onPressed: () {}, + child: Text( + "一键批阅", + style: TextStyle( + fontSize: 10.sp, color: const Color(0xFF666666)), + )), + ), + const Expanded(flex: 1,child: Text(''),), + Expanded( + flex:4, + child: ElevatedButton( + style: ButtonStyle( + overlayColor:MaterialStateProperty.all( + const Color(0xFF6888FD)), + backgroundColor: + MaterialStateProperty.all( + const Color(0xFFF4F4F4)), + // foregroundColor: MaterialStateProperty.all(Colors.red.shade200),//文字颜色 + shape: MaterialStateProperty.all( + RoundedRectangleBorder( + borderRadius: + BorderRadius.circular(22), //设置圆角 + ))), + onPressed: () { + Get.toNamed(Routes.quickDataCheckPage,arguments: {'homeworkId':state.homeworkId.value,'classId':item.classId,'grade':state.grade,'className':item.className + }); + }, + child: Text( + "数据快查", + style: TextStyle( + fontSize: 10.sp, + color: const Color(0xFF666666)), + )), + ), + const Expanded(flex: 1,child: Text(''),), + Expanded( + flex:4, + child: ElevatedButton( + style: ButtonStyle( + overlayColor:MaterialStateProperty.all( + const Color(0xFF6888FD)), + backgroundColor: + MaterialStateProperty.all( + const Color(0xFFF4F4F4)), + // foregroundColor: MaterialStateProperty.all(Colors.red.shade200),//文字颜色 + shape: MaterialStateProperty.all( + RoundedRectangleBorder( + borderRadius: + BorderRadius.circular(22), //设置圆角 + ))), + onPressed: () {}, + child: Text( + "收藏夹", + style: TextStyle( + fontSize: 10.sp, + color: const Color(0xFF666666)), + )), + ), + ], + ), + ), + Padding( + padding: EdgeInsets.symmetric(vertical: 10.r,horizontal: 14.r), + child: Row( + children: [ + Expanded( + child: LinearPercentIndicator( + padding: EdgeInsets.zero, + animation: true, + lineHeight: 8.h, + animationDuration: 2500, + + percent: item.annotateRate / 100, + linearGradient: LinearGradient( + tileMode: TileMode.mirror, + stops: const [0.0, 1.0], + colors: item.annotateRate / 100 != 1 + ? [Theme.of(context).primaryColor.withOpacity(0.1), Theme.of(context).primaryColor] + : [ + const Color.fromRGBO(144, 224, 190, 1).withOpacity(0.1), + const Color.fromRGBO(144, 224, 190, 1), + ], + ), + // linearStrokeCap: LinearStrokeCap.butt, + // progressColor: Theme.of(context).primaryColor, + backgroundColor: const Color.fromRGBO(232, 232, 232, 1), + barRadius: Radius.circular(10.r), + ), + ), + SizedBox(width: 7.w), + quickText('${item.annotateRate}%', + size: 10.sp, color: const Color.fromRGBO(70, 70, 70, 1)) + ], + ), + ), + ProgressBar( + title: '客观题正确率:', + color: const Color(0xFFB8C7FF), + percent: item.kgtCorrectRate / 100, + marginEdg: EdgeInsets.zero, + padingEdg: EdgeInsets.only(top: 8.h,left: 14.r,right: 14.r)), + ProgressBar( + title: '主观题正确率:', + color: const Color(0xFFB8C7FF), + percent: item.zgtCorrectRate / 100, + padingEdg: EdgeInsets.symmetric(horizontal: 10.r), + marginEdg: EdgeInsets.only(top: 8.h)), + ProgressBar( + title: '总正确率:', + color: const Color(0xFFB8C7FF), + percent: item.correctRate / 100, + padingEdg: EdgeInsets.symmetric(horizontal: 10.r), + marginEdg: EdgeInsets.only(top: 8.h)), + + Container( + margin: EdgeInsets.only(top: 10.r), + decoration: BoxDecoration( + borderRadius: BorderRadius.only(bottomLeft: Radius.circular(4.r), bottomRight: Radius.circular(4.r)), + color: Colors.white, + boxShadow: const [ + BoxShadow( + color: Color.fromRGBO(0, 0, 0, 0.15), + offset: Offset(0, -0.0001), //阴影y轴偏移量 + blurRadius: 4, //阴影模糊程度 + spreadRadius: 0, //阴影扩散程度 + ) + ], + ), + + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: + item.finishTime != null ? + [ + Expanded( + child: InkWell( + onTap: () {}, + child: Container( + alignment: Alignment.center, + child: quickText('数据快查', color: Color.fromRGBO(118, 118, 118, 1), size: 12.sp), + ), + ), + ), + Container(width: 1.w, height: 30.h, color: const Color.fromRGBO(221, 221, 221, 1)), + Expanded( + child: InkWell( + onTap: () {}, + child: Container( + alignment: Alignment.center, + child: quickText('查看报告', color: Color.fromRGBO(118, 118, 118, 1), size: 12.sp), + ), + )), + ] + : + [ + Expanded( + child: InkWell( + onTap: () {}, + child: Container( + alignment: Alignment.center, + child: quickText('批阅', color: const Color.fromRGBO(118, 118, 118, 1), size: 12.sp), + ), + ), + ), + Container(width: 1.w, height: 30.h, color: const Color.fromRGBO(221, 221, 221, 1)), + Expanded( + child: InkWell( + onTap: () {}, + child: Container( + alignment: Alignment.center, + child: quickText('结束批阅', color: const Color.fromRGBO(118, 118, 118, 1), size: 12.sp), + ), + )), + ], + ), + ) + ], + ), + ); + }); + }), + ), + ); + } + + @override + void dispose() { + Get.delete(); + super.dispose(); + } +} diff --git a/lib/page/home_page/children/job_report/job_report_binding.dart b/lib/page/home_page/children/job_report/job_report_binding.dart new file mode 100644 index 0000000..60e2cbe --- /dev/null +++ b/lib/page/home_page/children/job_report/job_report_binding.dart @@ -0,0 +1,10 @@ +import 'package:get/get.dart'; + +import 'job_report_logic.dart'; + +class JobReportBinding extends Bindings { + @override + void dependencies() { + Get.lazyPut(() => JobReportLogic()); + } +} diff --git a/lib/page/home_page/children/job_report/job_report_logic.dart b/lib/page/home_page/children/job_report/job_report_logic.dart new file mode 100644 index 0000000..4548d4e --- /dev/null +++ b/lib/page/home_page/children/job_report/job_report_logic.dart @@ -0,0 +1,7 @@ +import 'package:get/get.dart'; + +import 'job_report_state.dart'; + +class JobReportLogic extends GetxController { + final JobReportState state = JobReportState(); +} diff --git a/lib/page/home_page/children/job_report/job_report_state.dart b/lib/page/home_page/children/job_report/job_report_state.dart new file mode 100644 index 0000000..2e189ab --- /dev/null +++ b/lib/page/home_page/children/job_report/job_report_state.dart @@ -0,0 +1,5 @@ +class JobReportState { + JobReportState() { + ///Initialize variables + } +} diff --git a/lib/page/home_page/children/job_report/job_report_view.dart b/lib/page/home_page/children/job_report/job_report_view.dart new file mode 100644 index 0000000..7fdabe2 --- /dev/null +++ b/lib/page/home_page/children/job_report/job_report_view.dart @@ -0,0 +1,27 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; + +import 'job_report_logic.dart'; + +class JobReportPage extends StatefulWidget { + const JobReportPage({Key? key}) : super(key: key); + + @override + State createState() => _JobReportPageState(); +} + +class _JobReportPageState extends State { + final logic = Get.find(); + final state = Get.find().state; + + @override + Widget build(BuildContext context) { + return Container(); + } + + @override + void dispose() { + Get.delete(); + super.dispose(); + } +} \ No newline at end of file diff --git a/lib/page/home_page/children/quick_data_check/quick_data_check_binding.dart b/lib/page/home_page/children/quick_data_check/quick_data_check_binding.dart new file mode 100644 index 0000000..824590c --- /dev/null +++ b/lib/page/home_page/children/quick_data_check/quick_data_check_binding.dart @@ -0,0 +1,10 @@ +import 'package:get/get.dart'; + +import 'quick_data_check_logic.dart'; + +class QuickDataCheckBinding extends Bindings { + @override + void dependencies() { + Get.lazyPut(() => QuickDataCheckLogic()); + } +} diff --git a/lib/page/home_page/children/quick_data_check/quick_data_check_logic.dart b/lib/page/home_page/children/quick_data_check/quick_data_check_logic.dart new file mode 100644 index 0000000..3456847 --- /dev/null +++ b/lib/page/home_page/children/quick_data_check/quick_data_check_logic.dart @@ -0,0 +1,34 @@ +import 'package:flutter_easyloading/flutter_easyloading.dart'; +import 'package:get/get.dart'; +import 'package:school_asignment_app/common/job/homework_details.dart'; +import 'package:school_asignment_app/common/mixins/request_tool_mixin.dart'; +import 'package:school_asignment_app/common/utils/utils.dart'; + +import 'quick_data_check_state.dart'; + +class QuickDataCheckLogic extends GetxController with RequestToolMixin{ + final QuickDataCheckState state = QuickDataCheckState(); + + @override + void onInit(){ + super.onInit(); + state.homeworkId.value = Get.arguments['homeworkId']??''; + state.classId.value = Get.arguments['classId']??''; + state.className.value = Get.arguments['className']??''; + state.grade = Get.arguments['grade']; + EasyLoading.show(status: 'loading...'); + getWorkData(); + } + + void getWorkData() async{ + HomeworkDetails data = await getClient(). getHomeworkDetails(state.homeworkId.value,state.classId.value); + state.homeData = data; + state.dataCount = Utils.getHomeworkData(data); + state.kgReport.value = data.questions.where((w)=>w.questionType == 1).toList(); + state.zgReport.value = data.questions.where((w)=>w.questionType == 2).toList(); + state.studentList.value = data.students; + state.hasData.value = true; + EasyLoading.dismiss(); + } + +} diff --git a/lib/page/home_page/children/quick_data_check/quick_data_check_state.dart b/lib/page/home_page/children/quick_data_check/quick_data_check_state.dart new file mode 100644 index 0000000..21ee678 --- /dev/null +++ b/lib/page/home_page/children/quick_data_check/quick_data_check_state.dart @@ -0,0 +1,40 @@ +import 'package:get/get.dart'; +import 'package:school_asignment_app/common/job/homework_details.dart'; + +class QuickDataCheckState { + QuickDataCheckState() { + ///Initialize variables + } + + late RxString homeworkId = ''.obs; + late RxString classId = ''.obs; + late RxString className = ''.obs; + late int grade; + late CountData dataCount = CountData(); + late RxBool hasData = false.obs; + late RxList kgReport = RxList(); + late RxList zgReport = RxList(); + late RxList studentList = RxList(); + late final HomeworkDetails homeData; +} + +class CountData extends Object { + int? kgtOkCount = 0; + int? kgtDtlCount = 0; + double? kgtAnswerRate = 0; + double? kgtOkRate = 0; + int? kgtAnswerCount = 0; + int? kgtCount = 0; + int? zgtDtlCount = 0; + int? zgtOkCount = 0; + int? zgtAnswerCount = 0; + double? zgtAnswerRate = 0; + double? zgtOkRate = 0; + int? zgtCount = 0; + int? studentCount = 0; + List? priorityStudents = []; + int? studentSubmitCount = 0; + CountData({this.kgtOkCount, this.kgtDtlCount,this.kgtAnswerRate,this.kgtAnswerCount,this.kgtOkRate,this.studentCount, + this.kgtCount,this.zgtAnswerCount,this.zgtOkCount,this.zgtDtlCount,this.zgtAnswerRate,this.zgtOkRate,this.zgtCount,this.priorityStudents, + this.studentSubmitCount,}); +} diff --git a/lib/page/home_page/children/quick_data_check/quick_data_check_view.dart b/lib/page/home_page/children/quick_data_check/quick_data_check_view.dart new file mode 100644 index 0000000..e9df1f5 --- /dev/null +++ b/lib/page/home_page/children/quick_data_check/quick_data_check_view.dart @@ -0,0 +1,360 @@ +import 'package:fl_chart/fl_chart.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; +import 'package:get_storage/get_storage.dart'; +import 'package:percent_indicator/percent_indicator.dart'; +import 'package:school_asignment_app/common/utils/enum_untils.dart'; +import 'package:school_asignment_app/common/utils/utils.dart'; +import 'package:school_asignment_app/page/global_widget/MyEmptyWidget.dart'; +import 'package:school_asignment_app/page/global_widget/ReturnToHomepage.dart'; +import 'package:school_asignment_app/page/home_page/children/quick_data_check/widget/kgt_zgt_table.dart'; +import 'package:school_asignment_app/page/home_page/children/quick_data_check/widget/quick_data_check_bottom.dart'; +import 'package:school_asignment_app/page/home_page/children/quick_data_check/widget/report_table.dart'; + +import 'quick_data_check_logic.dart'; + +class QuickDataCheckPage extends StatefulWidget { + const QuickDataCheckPage({Key? key}) : super(key: key); + + @override + State createState() => _QuickDataCheckPageState(); +} + +class _QuickDataCheckPageState extends State { + final logic = Get.find(); + final state = Get + .find() + .state; + + @override + Widget build(BuildContext context) { + return AnnotatedRegion( + value: const SystemUiOverlayStyle( + statusBarColor: Colors.transparent, + systemNavigationBarIconBrightness: Brightness.light, + statusBarIconBrightness: Brightness.light, + statusBarBrightness: Brightness.dark, + ), + child: Container( + padding: EdgeInsets.only(top: MediaQuery + .of(context) + .padding + .top), + height: MediaQuery + .of(context) + .size + .height, + decoration: const BoxDecoration( + gradient: LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: [ + Color(0xFF6889FD), + Color(0xFFF5F5F5), + ], + stops: [ + 0.09, + 0.3 + ])), + child: + + Column( + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + IconButton( + icon: const Icon(Icons.arrow_back_ios, color: Colors.white), + onPressed: () => Navigator.of(context).pop(), + ), + Expanded( + child: Padding( + padding: EdgeInsets.only(right: 8.r), + child: Center( + child: Text( + '数据快查', + style: TextStyle( + fontSize: 14.sp, color: Colors.white), + )), + )), + const ReturnToHomepage(bgColor: Colors.white,), + ], + ), + SizedBox(height: 10.r), + Obx(() { + if (state.hasData.value) { + return Expanded( + child: SingleChildScrollView( + child: Column( + children: [ + Padding( + padding: EdgeInsets.only(left: 14.r, top: 2.r), + child: Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Image.asset( + 'assets/images/job_report_class_icon.png', + width: 22.r, + height: 22.r, + ), + SizedBox( + width: 6.r, + ), + Obx(() { + return Text( + '${EnumUtils.formatGrade( + state.grade)}${state.className.value}', + style: TextStyle( + fontSize: 14.r, color: Colors.white), + ); + }) + ], + ), + ), + Container( + padding: EdgeInsets.symmetric( + vertical: 15.r, horizontal: 15.r), + margin: EdgeInsets.symmetric( + vertical: 10.r, horizontal: 14.r), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: + BorderRadius.all(Radius.circular(6.r))), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + height: 2.r, + ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Container( + width: 12.r, + height: 12.r, + decoration: BoxDecoration( + color: const Color(0xFF4CC793), + borderRadius: BorderRadius.all( + Radius.circular(7.r))), + ), + SizedBox( + width: 6.r, + ), + Text( + '已提交', + style: TextStyle( + fontSize: 12.sp, + color: Color(0xFF333333)), + ), + SizedBox( + width: 35.r, + ), + Container( + width: 12.r, + height: 12.r, + decoration: BoxDecoration( + color: const Color(0xFF6888FD), + borderRadius: BorderRadius.all( + Radius.circular(7.r))), + ), + SizedBox( + width: 6.r, + ), + Text( + '未提交', + style: TextStyle( + fontSize: 12.sp, + color: const Color(0xFF333333)), + ) + ], + ), + SizedBox( + height: 2.r, + ), + //环形图 + SizedBox( + height: MediaQuery + .of(context) + .size + .width * 0.3, + child: PieChart( + PieChartData( + borderData: FlBorderData(show: false), + sectionsSpace: 0, + centerSpaceRadius: + MediaQuery + .of(context) + .size + .width * 0.06, + sections: [ + PieChartSectionData( + color: const Color(0xFF4CC793), + value: state.dataCount + .studentSubmitCount! / + state.dataCount.studentCount! * + 100, + radius: + MediaQuery + .of(context) + .size + .width * + 0.07 + + 5, + title: '${state.dataCount + .studentSubmitCount}人', + titleStyle: TextStyle( + fontSize: 14.sp, + color: Colors.white, + ), + ), + PieChartSectionData( + color: const Color(0xFF6888FD), + value: (state.dataCount + .studentCount! - state.dataCount + .studentSubmitCount!) / + state.dataCount.studentCount! * + 100, + radius: + MediaQuery + .of(context) + .size + .width * + 0.07, + title: '${state.dataCount + .studentCount! - state.dataCount + .studentSubmitCount!}人', + titleStyle: TextStyle( + fontSize: 14.sp, + color: Colors.white, + ), + ), + ], + ), + ), + ), + // 客观进度条 + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Text( + '客观题答题进度', + style: TextStyle( + fontSize: 10.sp, + color: const Color(0xFF8B8B8B)), + ), + Text( + '${state.dataCount.kgtAnswerRate! + .toStringAsFixed(0)}%', + style: TextStyle( + fontSize: 10.sp, + color: const Color(0xFF333333)), + ), + ], + ), + SizedBox(height: 6.r), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Expanded( + flex: 10, + child: LinearPercentIndicator( + padding: EdgeInsets.zero, + animation: true, + lineHeight: 9.h, + animationDuration: 2500, + percent: state.dataCount + .kgtAnswerRate! / 100, + progressColor: const Color( + 0xFFFF7F22), + backgroundColor: const Color( + 0xFFEAEAEA), + barRadius: Radius.circular(10.r), + )), + ], + ), + SizedBox(height: 20.r), + // 主观进度条 + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Text( + '主观题答题进度', + style: TextStyle( + fontSize: 10.sp, + color: const Color(0xFF8B8B8B)), + ), + Text( + '${state.dataCount.zgtAnswerRate! + .toStringAsFixed(0)}%', + style: TextStyle( + fontSize: 10.sp, + color: const Color(0xFF333333)), + ), + ], + ), + SizedBox(height: 6.r), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Expanded( + flex: 10, + child: LinearPercentIndicator( + padding: EdgeInsets.zero, + animation: true, + lineHeight: 9.h, + animationDuration: 2500, + percent: state.dataCount + .zgtAnswerRate! / 100, + progressColor: const Color( + 0xFFFF7F22), + backgroundColor: const Color( + 0xFFEAEAEA), + barRadius: Radius.circular(10.r), + )), + ], + ), + ], + ), + ), + QuickDataCheckBottom(jobData: state.studentList.value, + jobId: state.homeworkId.value, + kgCount: state.dataCount.kgtDtlCount!, + zgCount: state.dataCount.zgtDtlCount!,), + //客观题、主观题 + KgtZgtTable(studentCount:state.dataCount.studentCount!,homeworkId:state.homeworkId.value,kgReport: state.kgReport,zgReport: state.zgReport,kgtOkRate:state.dataCount.kgtOkRate! + .toStringAsFixed(0),zgtOkRate:state.dataCount.zgtOkRate! + .toStringAsFixed(0)), + ], + ), + )); + } else { + return Padding( + padding: EdgeInsets.only( + top: MediaQuery + .of(context) + .size + .height / 2 - 200.r), + child: const MyEmptyWidget() + ); + } + }) + + + ], + ), + ), + ); + } + + @override + void dispose() { + Get.delete(); + super.dispose(); + } +} \ No newline at end of file