commit 940b8d9429ec06eda3d8398050569d4728024815
Author: 1147192855@qq.com <1147192855@qq.com>
Date: Mon Feb 19 13:55:05 2024 +0800
first commit
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..abbafd6
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,186 @@
+# Miscellaneous
+./marking_app/*.class
+./marking_app/*.log
+./marking_app/*.pyc
+./marking_app/*.swp
+./marking_app/.DS_Store
+./marking_app/.atom/
+./marking_app/.buildlog/
+./marking_app/.history
+./marking_app/.svn/
+./marking_app/migrate_working_dir/
+./marking_app/**/*.g.dart
+./marking_app/*.g.dart
+./marking_app/*/*.g.dart
+./marking_app/.dart_tool/*
+./marking_app/.fvm/*
+./marking_app/.fvm/fvm_config.json
+./marking_app/.fvm/flutter_sdk/*
+
+# IntelliJ related
+./marking_app/*.iml
+./marking_app/*.ipr
+./marking_app/*.iws
+./marking_app/.idea/
+
+# The .vscode folder contains launch configuration and tasks you configure in
+# VS Code which you may wish to be included in version control, so this line
+# is commented out by default.
+#.vscode/
+
+# Flutter/Dart/Pub related
+./marking_app/**/doc/api/
+./marking_app/**/ios/Flutter/.last_build_id
+./marking_app/.dart_tool/
+./marking_app/.flutter-plugins
+./marking_app/.flutter-plugins-dependencies
+./marking_app/.packages
+./marking_app/.pub-cache/
+./marking_app/.pub/
+./marking_app/build/
+./marking_app/pubspec.lock
+
+# Web related
+./marking_app/lib/generated_plugin_registrant.dart
+
+# Symbolication related
+./marking_app/app.*.symbols
+
+# Obfuscation related
+./marking_app/app.*.map.json
+
+# Android Studio will place build artifacts here
+./marking_app/android/app/debug
+./marking_app/android/app/profile
+./marking_app/android/app/release
+
+
+
+*/*.g.dart
+marking_app/lib/common/model/marking/marking_submit_result.g.dart
+marking_app/lib/common/model/marking/progress_of_marking.g.dart
+marking_app/lib/utils/image/gallery_example_item_model.g.dart
+marking_app/macos/Flutter/GeneratedPluginRegistrant.swift
+marking_app/pubspec.lock
+marking_app/lib/common/model/common/base_page.g.dart
+marking_app/lib/common/model/common/base_page_data.g.dart
+marking_app/lib/common/model/common/base_structure_result.g.dart
+marking_app/lib/common/model/marking/current_review_task.g.dart
+marking_app/lib/common/model/marking/marking_item.g.dart
+marking_app/lib/common/model/marking/marking_list_params.g.dart
+marking_app/lib/common/model/marking/marking_text_question.g.dart
+marking_app/lib/common/model/marking/marking_text_question_params.g.dart
+marking_app/lib/common/model/marking/submit_exam_params.g.dart
+marking_app/lib/common/model/marking/submit_exam_small_params.g.dart
+marking_app/lib/common/model/progress/progress_item.g.dart
+marking_app/lib/common/model/progress/progress_page_params.g.dart
+marking_app/lib/common/model/progress/progress_statistics.g.dart
+marking_app/lib/common/model/review/additional_conditions_for_review.g.dart
+marking_app/lib/common/model/review/review_item.g.dart
+marking_app/lib/common/model/review/review_page_params.g.dart
+marking_app/lib/common/model/review/review_tab.g.dart
+marking_app/lib/common/model/sys/system_version.g.dart
+marking_app/lib/common/model/user/user_info.g.dart
+marking_app/lib/common/model/user/user_login.g.dart
+marking_app/lib/common/model/user/user_login_params.g.dart
+marking_app/lib/utils/request/rest_client.g.dart
+marking_app/windows/flutter/generated_plugin_registrant.cc
+marking_app/linux/flutter/generated_plugin_registrant.cc
+marking_app/linux/flutter/generated_plugin_registrant.h
+marking_app/linux/flutter/generated_plugins.cmake
+marking_app/windows/flutter/generated_plugin_registrant.h
+marking_app/windows/flutter/generated_plugins.cmake
+marking_app/lib/common/model/marking/do_marking_keyboard_model.g.dart
+marking_app/lib/common/model/common/upload_img_secret_key.g.dart
+marking_app/lib/common/model/event_bus/bottom_annotation_switch_cleanall.g.dart
+marking_app/lib/common/model/marking/marking_text_question_tab_params.g.dart
+marking_app/lib/common/model/marking/marking_tag_single_params.g.dart
+marking_app/lib/common/model/marking/marking_text_question_tab.g.dart
+marking_app/lib/common/model/marking/marking_text_question_tab_step_size.g.dart
+marking_app/lib/utils/request/rest_client_report.g.dart
+marking_app/lib/pages/reports/services/report_home_services.g.dart
+marking_app/lib/pages/reports/index.g.dart
+marking_app/lib/common/model/user/user_info_report.g.dart
+marking_app/lib/common/model/report/marked_item_params.g.dart
+marking_app/lib/common/model/report/marked_item.g.dart
+marking_app/lib/common/model/common/base_structure_result_report.g.dart
+marking_app/lib/common/model/common/base_page_data_report.g.dart
+marking_app/lib/common/model/common/base_page_report.g.dart
+marking_app/lib/pages/reports/report_personal_subject.g.dart
+marking_app/lib/common/model/report/report_for_class_teacher_params.g.dart
+marking_app/lib/common/model/report/report_for_marking_pagerdetail_model.g.dart
+marking_app/lib/common/model/report/report_for_marking_pagerdetail_params.g.dart
+marking_app/lib/common/model/report/report_for_subject_student_model.g.dart
+marking_app/lib/common/model/report/report_for_subject_student_params.g.dart
+marking_app/lib/common/model/report/report_for_subject_teacher_model.g.dart
+marking_app/lib/common/model/report/report_for_subject_teacher_params.g.dart
+marking_app/lib/common/model/report/report_home_model.g.dart
+marking_app/lib/common/model/report/report_for_class_teacher_model.g.dart
+marking_app/lib/pages/reports/report_class_teacher.g.dart
+marking_app/lib/pages/reports/report_subject_teacher.g.dart
+marking_app/lib/common/model/report/radar_chart_model.g.dart
+marking_app/lib/common/model/report/report_histogram_model.g.dart
+marking_app/lib/common/model/marking/annotation_graffiti_switch.g.dart
+marking_app/lib/common/model/marking/review_records_item.g.dart
+marking_app/lib/common/model/marking/review_records_params.g.dart
+marking_app/lib/components/marking/review_records_view.g.dart
+
+
+
+
+marking_app/lib/common/model/event_bus/job_submit_bus.g.dart
+marking_app/lib/common/model/event_bus/large_question_scoring_bus.g.dart
+marking_app/lib/common/model/event_bus/question_switch_bus.g.dart
+marking_app/lib/common/model/job/marking_text_question_job.g.dart
+marking_app/lib/common/model/job/marking_text_question_job_params.g.dart
+marking_app/lib/common/model/job/marking_text_question_job_tab_params.g.dart
+marking_app/lib/pages/home/index.g.dart
+marking_app/lib/pages/homework_correction/components/setPreference.g.dart
+marking_app/lib/pages/homework_correction/do_papers.g.dart
+
+marking_app/lib/common/model/event_bus/job_currenttab_finish_addtion.g.dart
+marking_app/lib/common/model/event_bus/job_large_question_scoring_bus.g.dart
+marking_app/lib/common/model/event_bus/job_question_switch_bus.g.dart
+marking_app/lib/common/model/job/review_again_list_params.g.dart
+marking_app/lib/pages/homework_correction/components/keyboardBox.g.dart
+marking_app/lib/components/PictureOverview.g.dart
+marking_app/lib/common/model/marking/marking_abnormal_res.g.dart
+marking_app/lib/common/model/marking/marking_statistics.g.dart
+marking_app/lib/common/model/marking/submit_exam_abnormal_params.g.dart
+marking_app/lib/pages/marking/do_papers.g.dart
+marking_app/lib/common/model/job/test_questions_image_info.g.dart
+marking_app/.fvm/fvm_config.json
+marking_app/.fvm/flutter_sdk
+marking_app/lib/common/model/job/upload_file_interface_config_params.g.dart
+marking_app/lib/common/model/job/upload_file_interface_config.g.dart
+marking_app/lib/common/model/marking/marking_zoom.g.dart
+marking_app/lib/pages/homework_correction/components/jobPictureOverview.g.dart
+marking_app/lib/pages/homework_correction/components/theExamPaperDrawing.g.dart
+marking_app/lib/common/model/job/job_note_taking_trajectory.g.dart
+marking_app/lib/pages/homework_correction/components/trajectoryView.g.dart
+marking_app/lib/common/model/marking/marking_keyboard_sliding_position.g.dart
+marking_app/lib/common/model/marking/rating_progress_model.g.dart
+marking_app/lib/common/model/marking/marking_common_score_items.g.dart
+marking_app/lib/components/marking/marking_seting.g.dart
+marking_app/lib/common/model/marking/switch_keyboard_to_reload_images.g.dart
+marking_app/lib/pages/homework_correction/components/homework_tasks_view_item.g.dart
+marking_app/lib/pages/homework_correction/components/new_version_of_homework/homework_tasks_view_item.g.dart
+marking_app/lib/common/model/event_bus/jobs/job_do_papers_switch_operation_bus.g.dart
+marking_app/lib/pages/homework_correction/do_papers_job.g.dart
+marking_app/lib/common/model/event_bus/jobs/job_do_papers_student_bus.g.dart
+marking_app/lib/common/model/job/job_concerned_with_student_params.g.dart
+marking_app/lib/common/model/job/job_concerned_with_student.g.dart
+marking_app/lib/common/model/job/job_page_tab.g.dart
+marking_app/lib/common/model/job/job_review_submission.g.dart
+marking_app/lib/common/model/job/job_task_item.g.dart
+marking_app/lib/pages/homework_correction/index.g.dart
+marking_app/lib/pages/homework_correction/eventBus/marking_text_question_job_tab_params_bus.g.dart
+marking_app/lib/pages/homework_correction/index.g.dart
+marking_app/lib/pages/homework_correction/index.g.dart
+marking_app/lib/pages/homework_correction/eventBus/job_check_switching_question_tab_bus.g.dart
+marking_app/lib/common/model/job/job_collect_params.g.dart
+marking_app/lib/pages/homework_correction/eventBus/do_papers_job_custom_paint_size_bus.g.dart
+marking_app/lib/pages/homework_correction/eventBus/do_papers_job_refresh_bus.g.dart
+marking_app/lib/pages/homework_correction/eventBus/job_do_papers_switch_operation_sub_bus.g.dart
+marking_app/lib/pages/homework_correction/eventBus/job_notes_view_bus.g.dart
+marking_app/lib/pages/homework_correction/eventBus/job_notes_view_bus.g.dart
diff --git a/marking_app/.gitignore b/marking_app/.gitignore
new file mode 100644
index 0000000..a8e938c
--- /dev/null
+++ b/marking_app/.gitignore
@@ -0,0 +1,47 @@
+# Miscellaneous
+*.class
+*.log
+*.pyc
+*.swp
+.DS_Store
+.atom/
+.buildlog/
+.history
+.svn/
+migrate_working_dir/
+
+# IntelliJ related
+*.iml
+*.ipr
+*.iws
+.idea/
+
+# The .vscode folder contains launch configuration and tasks you configure in
+# VS Code which you may wish to be included in version control, so this line
+# is commented out by default.
+#.vscode/
+
+# Flutter/Dart/Pub related
+**/doc/api/
+**/ios/Flutter/.last_build_id
+.dart_tool/
+.flutter-plugins
+.flutter-plugins-dependencies
+.packages
+.pub-cache/
+.pub/
+/build/
+
+# Web related
+lib/generated_plugin_registrant.dart
+
+# Symbolication related
+app.*.symbols
+
+# Obfuscation related
+app.*.map.json
+
+# Android Studio will place build artifacts here
+/android/app/debug
+/android/app/profile
+/android/app/release
diff --git a/marking_app/.metadata b/marking_app/.metadata
new file mode 100644
index 0000000..95f73f5
--- /dev/null
+++ b/marking_app/.metadata
@@ -0,0 +1,45 @@
+# This file tracks properties of this Flutter project.
+# Used by Flutter tool to assess capabilities and perform upgrades etc.
+#
+# This file should be version controlled.
+
+version:
+ revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268
+ channel: stable
+
+project_type: app
+
+# Tracks metadata for the flutter migrate command
+migration:
+ platforms:
+ - platform: root
+ create_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268
+ base_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268
+ - platform: android
+ create_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268
+ base_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268
+ - platform: ios
+ create_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268
+ base_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268
+ - platform: linux
+ create_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268
+ base_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268
+ - platform: macos
+ create_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268
+ base_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268
+ - platform: web
+ create_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268
+ base_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268
+ - platform: windows
+ create_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268
+ base_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268
+
+ # User provided section
+
+ # List of Local paths (relative to this file) that should be
+ # ignored by the migrate tool.
+ #
+ # Files that are not part of the templates will be ignored by default.
+ unmanaged_files:
+ - 'lib/main.dart'
+ - 'ios/Runner.xcodeproj/project.pbxproj'
diff --git a/marking_app/.prettierrc b/marking_app/.prettierrc
new file mode 100644
index 0000000..c415223
--- /dev/null
+++ b/marking_app/.prettierrc
@@ -0,0 +1 @@
+{ "semi": false, "singleQuote": true, "printWidth": 800 }
diff --git a/marking_app/README.md b/marking_app/README.md
new file mode 100644
index 0000000..0b70d96
--- /dev/null
+++ b/marking_app/README.md
@@ -0,0 +1,16 @@
+# marking_app
+
+A new Flutter project.
+
+## Getting Started
+
+This project is a starting point for a Flutter application.
+
+A few resources to get you started if this is your first Flutter project:
+
+- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab)
+- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook)
+
+For help getting started with Flutter development, view the
+[online documentation](https://docs.flutter.dev/), which offers tutorials,
+samples, guidance on mobile development, and a full API reference.
diff --git a/marking_app/android/.gitignore b/marking_app/android/.gitignore
new file mode 100644
index 0000000..6f56801
--- /dev/null
+++ b/marking_app/android/.gitignore
@@ -0,0 +1,13 @@
+gradle-wrapper.jar
+/.gradle
+/captures/
+/gradlew
+/gradlew.bat
+/local.properties
+GeneratedPluginRegistrant.java
+
+# Remember to never publicly share your keystore.
+# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
+key.properties
+**/*.keystore
+**/*.jks
diff --git a/marking_app/android/app/build.gradle b/marking_app/android/app/build.gradle
new file mode 100644
index 0000000..6a8595d
--- /dev/null
+++ b/marking_app/android/app/build.gradle
@@ -0,0 +1,97 @@
+def localProperties = new Properties()
+def localPropertiesFile = rootProject.file('local.properties')
+if (localPropertiesFile.exists()) {
+ localPropertiesFile.withReader('UTF-8') { reader ->
+ localProperties.load(reader)
+ }
+}
+
+def flutterRoot = localProperties.getProperty('flutter.sdk')
+if (flutterRoot == null) {
+ throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
+}
+
+def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
+if (flutterVersionCode == null) {
+ flutterVersionCode = '1'
+}
+
+def flutterVersionName = localProperties.getProperty('flutter.versionName')
+if (flutterVersionName == null) {
+ flutterVersionName = '1.0'
+}
+
+apply plugin: 'com.android.application'
+apply plugin: 'kotlin-android'
+apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
+
+def keystorePropertiesFile = rootProject.file("key.properties")
+def keystoreProperties = new Properties()
+keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
+
+android {
+ compileSdkVersion 33
+ ndkVersion flutter.ndkVersion
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+
+ kotlinOptions {
+ jvmTarget = '1.8'
+ }
+
+ sourceSets {
+ main.java.srcDirs += 'src/main/kotlin'
+ }
+
+ signingConfigs {
+
+ release {
+ keyAlias keystoreProperties['keyAlias']
+ keyPassword keystoreProperties['keyPassword']
+ storeFile file(keystoreProperties['storeFile'])
+ storePassword keystoreProperties['storePassword']
+ }
+ debug {
+ keyAlias keystoreProperties['keyAlias']
+ keyPassword keystoreProperties['keyPassword']
+ storeFile file(keystoreProperties['storeFile'])
+ storePassword keystoreProperties['storePassword']
+ }
+ }
+
+ defaultConfig {
+ // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
+ applicationId "com.example.marking_app"
+ // You can update the following values to match your application needs.
+ // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration.
+ // minSdkVersion flutter.minSdkVersion
+ minSdkVersion 21
+ targetSdkVersion flutter.targetSdkVersion
+ versionCode flutterVersionCode.toInteger()
+ versionName flutterVersionName
+ }
+
+ buildTypes {
+ release {
+ signingConfig signingConfigs.release
+ minifyEnabled false //删除无用代码
+ shrinkResources false //删除无用资源
+ }
+ debug {
+ signingConfig signingConfigs.debug
+ minifyEnabled false //删除无用代码
+ shrinkResources false //删除无用资源
+ }
+ }
+}
+
+flutter {
+ source '../..'
+}
+
+dependencies {
+ implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
+}
diff --git a/marking_app/android/app/src/debug/AndroidManifest.xml b/marking_app/android/app/src/debug/AndroidManifest.xml
new file mode 100644
index 0000000..ffb04b7
--- /dev/null
+++ b/marking_app/android/app/src/debug/AndroidManifest.xml
@@ -0,0 +1,8 @@
+
+
+
+
diff --git a/marking_app/android/app/src/main/AndroidManifest.xml b/marking_app/android/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..5dc79c3
--- /dev/null
+++ b/marking_app/android/app/src/main/AndroidManifest.xml
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/marking_app/android/app/src/main/kotlin/com/example/marking_app/MainActivity.kt b/marking_app/android/app/src/main/kotlin/com/example/marking_app/MainActivity.kt
new file mode 100644
index 0000000..d3518dc
--- /dev/null
+++ b/marking_app/android/app/src/main/kotlin/com/example/marking_app/MainActivity.kt
@@ -0,0 +1,6 @@
+package com.example.marking_app
+
+import io.flutter.embedding.android.FlutterActivity
+
+class MainActivity: FlutterActivity() {
+}
diff --git a/marking_app/android/app/src/main/res/drawable-v21/launch_background.xml b/marking_app/android/app/src/main/res/drawable-v21/launch_background.xml
new file mode 100644
index 0000000..0206865
--- /dev/null
+++ b/marking_app/android/app/src/main/res/drawable-v21/launch_background.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ -
+
+
+
diff --git a/marking_app/android/app/src/main/res/drawable/launch_background.xml b/marking_app/android/app/src/main/res/drawable/launch_background.xml
new file mode 100644
index 0000000..e2440a0
--- /dev/null
+++ b/marking_app/android/app/src/main/res/drawable/launch_background.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+ -
+
+
+
+
diff --git a/marking_app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/marking_app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000..07a3b1b
Binary files /dev/null and b/marking_app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/marking_app/android/app/src/main/res/mipmap-hdpi/launch_image.png b/marking_app/android/app/src/main/res/mipmap-hdpi/launch_image.png
new file mode 100644
index 0000000..34d1cb9
Binary files /dev/null and b/marking_app/android/app/src/main/res/mipmap-hdpi/launch_image.png differ
diff --git a/marking_app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/marking_app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000..a3dfd04
Binary files /dev/null and b/marking_app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/marking_app/android/app/src/main/res/mipmap-mdpi/launch_image.png b/marking_app/android/app/src/main/res/mipmap-mdpi/launch_image.png
new file mode 100644
index 0000000..5d037ff
Binary files /dev/null and b/marking_app/android/app/src/main/res/mipmap-mdpi/launch_image.png differ
diff --git a/marking_app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/marking_app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..982c945
Binary files /dev/null and b/marking_app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/marking_app/android/app/src/main/res/mipmap-xhdpi/launch_image.png b/marking_app/android/app/src/main/res/mipmap-xhdpi/launch_image.png
new file mode 100644
index 0000000..d3780f4
Binary files /dev/null and b/marking_app/android/app/src/main/res/mipmap-xhdpi/launch_image.png differ
diff --git a/marking_app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/marking_app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..7a169ff
Binary files /dev/null and b/marking_app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/marking_app/android/app/src/main/res/mipmap-xxhdpi/launch_image.png b/marking_app/android/app/src/main/res/mipmap-xxhdpi/launch_image.png
new file mode 100644
index 0000000..1ae01f1
Binary files /dev/null and b/marking_app/android/app/src/main/res/mipmap-xxhdpi/launch_image.png differ
diff --git a/marking_app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/marking_app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..559ec6a
Binary files /dev/null and b/marking_app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/marking_app/android/app/src/main/res/mipmap-xxxhdpi/launch_image.png b/marking_app/android/app/src/main/res/mipmap-xxxhdpi/launch_image.png
new file mode 100644
index 0000000..6684cdc
Binary files /dev/null and b/marking_app/android/app/src/main/res/mipmap-xxxhdpi/launch_image.png differ
diff --git a/marking_app/android/app/src/main/res/values-night/styles.xml b/marking_app/android/app/src/main/res/values-night/styles.xml
new file mode 100644
index 0000000..06952be
--- /dev/null
+++ b/marking_app/android/app/src/main/res/values-night/styles.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/marking_app/android/app/src/main/res/values/styles.xml b/marking_app/android/app/src/main/res/values/styles.xml
new file mode 100644
index 0000000..fdcd67e
--- /dev/null
+++ b/marking_app/android/app/src/main/res/values/styles.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/marking_app/android/app/src/profile/AndroidManifest.xml b/marking_app/android/app/src/profile/AndroidManifest.xml
new file mode 100644
index 0000000..6281e88
--- /dev/null
+++ b/marking_app/android/app/src/profile/AndroidManifest.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/marking_app/android/build.gradle b/marking_app/android/build.gradle
new file mode 100644
index 0000000..d55b317
--- /dev/null
+++ b/marking_app/android/build.gradle
@@ -0,0 +1,40 @@
+buildscript {
+ ext.kotlin_version = '1.7.0'
+ repositories {
+ // google()
+ // mavenCentral()
+ maven { url 'https://maven.aliyun.com/repository/google' }
+ maven { url 'https://maven.aliyun.com/repository/jcenter' }
+ maven { url 'https://maven.aliyun.com/nexus/content/groups/public'}
+ maven { url 'https://maven.aliyun.com/repository/gradle-plugin'}
+ }
+
+ dependencies {
+ classpath 'com.android.tools.build:gradle:7.1.2'
+ classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
+ }
+}
+
+allprojects {
+ repositories {
+ // google()
+ // mavenCentral()
+
+ maven { url 'https://maven.aliyun.com/repository/google' }
+ maven { url 'https://maven.aliyun.com/repository/jcenter' }
+ maven { url 'https://maven.aliyun.com/nexus/content/groups/public'}
+ maven { url 'https://maven.aliyun.com/repository/gradle-plugin'}
+ }
+}
+
+rootProject.buildDir = '../build'
+subprojects {
+ project.buildDir = "${rootProject.buildDir}/${project.name}"
+}
+subprojects {
+ project.evaluationDependsOn(':app')
+}
+
+tasks.register("clean", Delete) {
+ delete rootProject.buildDir
+}
diff --git a/marking_app/android/gradle.properties b/marking_app/android/gradle.properties
new file mode 100644
index 0000000..94adc3a
--- /dev/null
+++ b/marking_app/android/gradle.properties
@@ -0,0 +1,3 @@
+org.gradle.jvmargs=-Xmx1536M
+android.useAndroidX=true
+android.enableJetifier=true
diff --git a/marking_app/android/gradle/wrapper/gradle-wrapper.properties b/marking_app/android/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..cc5527d
--- /dev/null
+++ b/marking_app/android/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Fri Jun 23 08:50:38 CEST 2017
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip
diff --git a/marking_app/android/settings.gradle b/marking_app/android/settings.gradle
new file mode 100644
index 0000000..44e62bc
--- /dev/null
+++ b/marking_app/android/settings.gradle
@@ -0,0 +1,11 @@
+include ':app'
+
+def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
+def properties = new Properties()
+
+assert localPropertiesFile.exists()
+localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
+
+def flutterSdkPath = properties.getProperty("flutter.sdk")
+assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
+apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"
diff --git a/marking_app/assets/icons/demo.css b/marking_app/assets/icons/demo.css
new file mode 100644
index 0000000..a67054a
--- /dev/null
+++ b/marking_app/assets/icons/demo.css
@@ -0,0 +1,539 @@
+/* Logo 字体 */
+@font-face {
+ font-family: "iconfont logo";
+ src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
+ src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
+ url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
+ url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
+ url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
+}
+
+.logo {
+ font-family: "iconfont logo";
+ font-size: 160px;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+/* tabs */
+.nav-tabs {
+ position: relative;
+}
+
+.nav-tabs .nav-more {
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ height: 42px;
+ line-height: 42px;
+ color: #666;
+}
+
+#tabs {
+ border-bottom: 1px solid #eee;
+}
+
+#tabs li {
+ cursor: pointer;
+ width: 100px;
+ height: 40px;
+ line-height: 40px;
+ text-align: center;
+ font-size: 16px;
+ border-bottom: 2px solid transparent;
+ position: relative;
+ z-index: 1;
+ margin-bottom: -1px;
+ color: #666;
+}
+
+
+#tabs .active {
+ border-bottom-color: #f00;
+ color: #222;
+}
+
+.tab-container .content {
+ display: none;
+}
+
+/* 页面布局 */
+.main {
+ padding: 30px 100px;
+ width: 960px;
+ margin: 0 auto;
+}
+
+.main .logo {
+ color: #333;
+ text-align: left;
+ margin-bottom: 30px;
+ line-height: 1;
+ height: 110px;
+ margin-top: -50px;
+ overflow: hidden;
+ *zoom: 1;
+}
+
+.main .logo a {
+ font-size: 160px;
+ color: #333;
+}
+
+.helps {
+ margin-top: 40px;
+}
+
+.helps pre {
+ padding: 20px;
+ margin: 10px 0;
+ border: solid 1px #e7e1cd;
+ background-color: #fffdef;
+ overflow: auto;
+}
+
+.icon_lists {
+ width: 100% !important;
+ overflow: hidden;
+ *zoom: 1;
+}
+
+.icon_lists li {
+ width: 100px;
+ margin-bottom: 10px;
+ margin-right: 20px;
+ text-align: center;
+ list-style: none !important;
+ cursor: default;
+}
+
+.icon_lists li .code-name {
+ line-height: 1.2;
+}
+
+.icon_lists .icon {
+ display: block;
+ height: 100px;
+ line-height: 100px;
+ font-size: 42px;
+ margin: 10px auto;
+ color: #333;
+ -webkit-transition: font-size 0.25s linear, width 0.25s linear;
+ -moz-transition: font-size 0.25s linear, width 0.25s linear;
+ transition: font-size 0.25s linear, width 0.25s linear;
+}
+
+.icon_lists .icon:hover {
+ font-size: 100px;
+}
+
+.icon_lists .svg-icon {
+ /* 通过设置 font-size 来改变图标大小 */
+ width: 1em;
+ /* 图标和文字相邻时,垂直对齐 */
+ vertical-align: -0.15em;
+ /* 通过设置 color 来改变 SVG 的颜色/fill */
+ fill: currentColor;
+ /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
+ normalize.css 中也包含这行 */
+ overflow: hidden;
+}
+
+.icon_lists li .name,
+.icon_lists li .code-name {
+ color: #666;
+}
+
+/* markdown 样式 */
+.markdown {
+ color: #666;
+ font-size: 14px;
+ line-height: 1.8;
+}
+
+.highlight {
+ line-height: 1.5;
+}
+
+.markdown img {
+ vertical-align: middle;
+ max-width: 100%;
+}
+
+.markdown h1 {
+ color: #404040;
+ font-weight: 500;
+ line-height: 40px;
+ margin-bottom: 24px;
+}
+
+.markdown h2,
+.markdown h3,
+.markdown h4,
+.markdown h5,
+.markdown h6 {
+ color: #404040;
+ margin: 1.6em 0 0.6em 0;
+ font-weight: 500;
+ clear: both;
+}
+
+.markdown h1 {
+ font-size: 28px;
+}
+
+.markdown h2 {
+ font-size: 22px;
+}
+
+.markdown h3 {
+ font-size: 16px;
+}
+
+.markdown h4 {
+ font-size: 14px;
+}
+
+.markdown h5 {
+ font-size: 12px;
+}
+
+.markdown h6 {
+ font-size: 12px;
+}
+
+.markdown hr {
+ height: 1px;
+ border: 0;
+ background: #e9e9e9;
+ margin: 16px 0;
+ clear: both;
+}
+
+.markdown p {
+ margin: 1em 0;
+}
+
+.markdown>p,
+.markdown>blockquote,
+.markdown>.highlight,
+.markdown>ol,
+.markdown>ul {
+ width: 80%;
+}
+
+.markdown ul>li {
+ list-style: circle;
+}
+
+.markdown>ul li,
+.markdown blockquote ul>li {
+ margin-left: 20px;
+ padding-left: 4px;
+}
+
+.markdown>ul li p,
+.markdown>ol li p {
+ margin: 0.6em 0;
+}
+
+.markdown ol>li {
+ list-style: decimal;
+}
+
+.markdown>ol li,
+.markdown blockquote ol>li {
+ margin-left: 20px;
+ padding-left: 4px;
+}
+
+.markdown code {
+ margin: 0 3px;
+ padding: 0 5px;
+ background: #eee;
+ border-radius: 3px;
+}
+
+.markdown strong,
+.markdown b {
+ font-weight: 600;
+}
+
+.markdown>table {
+ border-collapse: collapse;
+ border-spacing: 0px;
+ empty-cells: show;
+ border: 1px solid #e9e9e9;
+ width: 95%;
+ margin-bottom: 24px;
+}
+
+.markdown>table th {
+ white-space: nowrap;
+ color: #333;
+ font-weight: 600;
+}
+
+.markdown>table th,
+.markdown>table td {
+ border: 1px solid #e9e9e9;
+ padding: 8px 16px;
+ text-align: left;
+}
+
+.markdown>table th {
+ background: #F7F7F7;
+}
+
+.markdown blockquote {
+ font-size: 90%;
+ color: #999;
+ border-left: 4px solid #e9e9e9;
+ padding-left: 0.8em;
+ margin: 1em 0;
+}
+
+.markdown blockquote p {
+ margin: 0;
+}
+
+.markdown .anchor {
+ opacity: 0;
+ transition: opacity 0.3s ease;
+ margin-left: 8px;
+}
+
+.markdown .waiting {
+ color: #ccc;
+}
+
+.markdown h1:hover .anchor,
+.markdown h2:hover .anchor,
+.markdown h3:hover .anchor,
+.markdown h4:hover .anchor,
+.markdown h5:hover .anchor,
+.markdown h6:hover .anchor {
+ opacity: 1;
+ display: inline-block;
+}
+
+.markdown>br,
+.markdown>p>br {
+ clear: both;
+}
+
+
+.hljs {
+ display: block;
+ background: white;
+ padding: 0.5em;
+ color: #333333;
+ overflow-x: auto;
+}
+
+.hljs-comment,
+.hljs-meta {
+ color: #969896;
+}
+
+.hljs-string,
+.hljs-variable,
+.hljs-template-variable,
+.hljs-strong,
+.hljs-emphasis,
+.hljs-quote {
+ color: #df5000;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-type {
+ color: #a71d5d;
+}
+
+.hljs-literal,
+.hljs-symbol,
+.hljs-bullet,
+.hljs-attribute {
+ color: #0086b3;
+}
+
+.hljs-section,
+.hljs-name {
+ color: #63a35c;
+}
+
+.hljs-tag {
+ color: #333333;
+}
+
+.hljs-title,
+.hljs-attr,
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-selector-attr,
+.hljs-selector-pseudo {
+ color: #795da3;
+}
+
+.hljs-addition {
+ color: #55a532;
+ background-color: #eaffea;
+}
+
+.hljs-deletion {
+ color: #bd2c00;
+ background-color: #ffecec;
+}
+
+.hljs-link {
+ text-decoration: underline;
+}
+
+/* 代码高亮 */
+/* PrismJS 1.15.0
+https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
+/**
+ * prism.js default theme for JavaScript, CSS and HTML
+ * Based on dabblet (http://dabblet.com)
+ * @author Lea Verou
+ */
+code[class*="language-"],
+pre[class*="language-"] {
+ color: black;
+ background: none;
+ text-shadow: 0 1px white;
+ font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
+ text-align: left;
+ white-space: pre;
+ word-spacing: normal;
+ word-break: normal;
+ word-wrap: normal;
+ line-height: 1.5;
+
+ -moz-tab-size: 4;
+ -o-tab-size: 4;
+ tab-size: 4;
+
+ -webkit-hyphens: none;
+ -moz-hyphens: none;
+ -ms-hyphens: none;
+ hyphens: none;
+}
+
+pre[class*="language-"]::-moz-selection,
+pre[class*="language-"] ::-moz-selection,
+code[class*="language-"]::-moz-selection,
+code[class*="language-"] ::-moz-selection {
+ text-shadow: none;
+ background: #b3d4fc;
+}
+
+pre[class*="language-"]::selection,
+pre[class*="language-"] ::selection,
+code[class*="language-"]::selection,
+code[class*="language-"] ::selection {
+ text-shadow: none;
+ background: #b3d4fc;
+}
+
+@media print {
+
+ code[class*="language-"],
+ pre[class*="language-"] {
+ text-shadow: none;
+ }
+}
+
+/* Code blocks */
+pre[class*="language-"] {
+ padding: 1em;
+ margin: .5em 0;
+ overflow: auto;
+}
+
+:not(pre)>code[class*="language-"],
+pre[class*="language-"] {
+ background: #f5f2f0;
+}
+
+/* Inline code */
+:not(pre)>code[class*="language-"] {
+ padding: .1em;
+ border-radius: .3em;
+ white-space: normal;
+}
+
+.token.comment,
+.token.prolog,
+.token.doctype,
+.token.cdata {
+ color: slategray;
+}
+
+.token.punctuation {
+ color: #999;
+}
+
+.namespace {
+ opacity: .7;
+}
+
+.token.property,
+.token.tag,
+.token.boolean,
+.token.number,
+.token.constant,
+.token.symbol,
+.token.deleted {
+ color: #905;
+}
+
+.token.selector,
+.token.attr-name,
+.token.string,
+.token.char,
+.token.builtin,
+.token.inserted {
+ color: #690;
+}
+
+.token.operator,
+.token.entity,
+.token.url,
+.language-css .token.string,
+.style .token.string {
+ color: #9a6e3a;
+ background: hsla(0, 0%, 100%, .5);
+}
+
+.token.atrule,
+.token.attr-value,
+.token.keyword {
+ color: #07a;
+}
+
+.token.function,
+.token.class-name {
+ color: #DD4A68;
+}
+
+.token.regex,
+.token.important,
+.token.variable {
+ color: #e90;
+}
+
+.token.important,
+.token.bold {
+ font-weight: bold;
+}
+
+.token.italic {
+ font-style: italic;
+}
+
+.token.entity {
+ cursor: help;
+}
diff --git a/marking_app/assets/icons/demo_index.html b/marking_app/assets/icons/demo_index.html
new file mode 100644
index 0000000..ae14068
--- /dev/null
+++ b/marking_app/assets/icons/demo_index.html
@@ -0,0 +1,1476 @@
+
+
+
+
+ iconfont Demo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ - Unicode
+ - Font class
+ - Symbol
+
+
+
查看项目
+
+
+
+
+
+
+ -
+
+
Frame
+ 
+
+
+ -
+
+
Frame-1
+ 
+
+
+ -
+
+
Frame
+ 
+
+
+ -
+
+
Frame-2
+ 
+
+
+ -
+
+
Frame
+ 
+
+
+ -
+
+
Frame
+ 
+
+
+ -
+
+
Frame-1
+ 
+
+
+ -
+
+
Frame-3
+ 
+
+
+ -
+
+
Frame-2
+ 
+
+
+ -
+
+
Frame
+ 
+
+
+ -
+
+
继续阅卷
+ 
+
+
+ -
+
+
Frame
+ 
+
+
+ -
+
+
阅卷记录
+ 
+
+
+ -
+
+
Frame
+ 
+
+
+ -
+
+
Frame1
+ 
+
+
+ -
+
+
1
+ 
+
+
+ -
+
+
Frame
+ 
+
+
+ -
+
+
Frame-1
+ 
+
+
+ -
+
+
Frame
+ 
+
+
+ -
+
+
Frame-1
+ 
+
+
+ -
+
+
Frame
+ 
+
+
+ -
+
+
Frame-1
+ 
+
+
+ -
+
+
Frame-2
+ 
+
+
+ -
+
+
Frame-3
+ 
+
+
+ -
+
+
Frame-4
+ 
+
+
+ -
+
+
Frame-5
+ 
+
+
+ -
+
+
Frame-6
+ 
+
+
+ -
+
+
Frame-7
+ 
+
+
+ -
+
+
Frame-8
+ 
+
+
+ -
+
+
Frame-9
+ 
+
+
+ -
+
+
equal
+ 
+
+
+ -
+
+
warning
+ 
+
+
+ -
+
+
error
+ 
+
+
+ -
+
+
Frame-1
+ 
+
+
+ -
+
+
Frame
+ 
+
+
+ -
+
+
Frame-2
+ 
+
+
+ -
+
+
Frame-3
+ 
+
+
+ -
+
+
Frame-4
+ 
+
+
+ -
+
+
Frame-9
+ 
+
+
+ -
+
+
Frame-8
+ 
+
+
+ -
+
+
Frame-13
+ 
+
+
+ -
+
+
Frame-12
+ 
+
+
+ -
+
+
Frame-15
+ 
+
+
+ -
+
+
Frame-17
+ 
+
+
+ -
+
+
Frame-11
+ 
+
+
+ -
+
+
Frame-16
+ 
+
+
+ -
+
+
Frame-7
+ 
+
+
+ -
+
+
Frame-14
+ 
+
+
+ -
+
+
Frame-10
+ 
+
+
+ -
+
+
Frame-5
+ 
+
+
+ -
+
+
Frame-6
+ 
+
+
+ -
+
+
Frame-2
+ 
+
+
+ -
+
+
Frame-3
+ 
+
+
+ -
+
+
Frame-1
+ 
+
+
+ -
+
+
Frame
+ 
+
+
+ -
+
+
Frame-4
+ 
+
+
+
+
+
Unicode 引用
+
+
+
Unicode 是字体在网页端最原始的应用方式,特点是:
+
+ - 支持按字体的方式去动态调整图标大小,颜色等等。
+ - 默认情况下不支持多色,直接添加多色图标会自动去色。
+
+
+ 注意:新版 iconfont 支持两种方式引用多色图标:SVG symbol 引用方式和彩色字体图标模式。(使用彩色字体图标需要在「编辑项目」中开启「彩色」选项后并重新生成。)
+
+
Unicode 使用步骤如下:
+
第一步:拷贝项目下面生成的 @font-face
+
@font-face {
+ font-family: 'iconfont';
+ src: url('iconfont.woff2?t=1706671294868') format('woff2'),
+ url('iconfont.woff?t=1706671294868') format('woff'),
+ url('iconfont.ttf?t=1706671294868') format('truetype');
+}
+
+
第二步:定义使用 iconfont 的样式
+
.iconfont {
+ font-family: "iconfont" !important;
+ font-size: 16px;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+
第三步:挑选相应图标并获取字体编码,应用于页面
+
+<span class="iconfont">3</span>
+
+
+ "iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。
+
+
+
+
+
+
+ -
+
+
+ Frame
+
+ .icon-Frame13
+
+
+
+ -
+
+
+ Frame-1
+
+ .icon-Frame-113
+
+
+
+ -
+
+
+ Frame
+
+ .icon-Frame12
+
+
+
+ -
+
+
+ Frame-2
+
+ .icon-Frame-24
+
+
+
+ -
+
+
+ Frame
+
+ .icon-Frame10
+
+
+
+ -
+
+
+ Frame
+
+ .icon-Frame9
+
+
+
+ -
+
+
+ Frame-1
+
+ .icon-Frame-112
+
+
+
+ -
+
+
+ Frame-3
+
+ .icon-Frame-33
+
+
+
+ -
+
+
+ Frame-2
+
+ .icon-Frame-23
+
+
+
+ -
+
+
+ Frame
+
+ .icon-Frame8
+
+
+
+ -
+
+
+ 继续阅卷
+
+ .icon-Frame7
+
+
+
+ -
+
+
+ Frame
+
+ .icon-Frame6
+
+
+
+ -
+
+
+ 阅卷记录
+
+ .icon-yuejuanjilu
+
+
+
+ -
+
+
+ Frame
+
+ .icon-Frame5
+
+
+
+ -
+
+
+ Frame1
+
+ .icon-Frame11
+
+
+
+ -
+
+
+ 1
+
+ .icon-a-1
+
+
+
+ -
+
+
+ Frame
+
+ .icon-Frame4
+
+
+
+ -
+
+
+ Frame-1
+
+ .icon-Frame-110
+
+
+
+ -
+
+
+ Frame
+
+ .icon-Frame3
+
+
+
+ -
+
+
+ Frame-1
+
+ .icon-Frame-19
+
+
+
+ -
+
+
+ Frame
+
+ .icon-Frame2
+
+
+
+ -
+
+
+ Frame-1
+
+ .icon-Frame-18
+
+
+
+ -
+
+
+ Frame-2
+
+ .icon-Frame-22
+
+
+
+ -
+
+
+ Frame-3
+
+ .icon-Frame-32
+
+
+
+ -
+
+
+ Frame-4
+
+ .icon-Frame-42
+
+
+
+ -
+
+
+ Frame-5
+
+ .icon-Frame-51
+
+
+
+ -
+
+
+ Frame-6
+
+ .icon-Frame-61
+
+
+
+ -
+
+
+ Frame-7
+
+ .icon-Frame-71
+
+
+
+ -
+
+
+ Frame-8
+
+ .icon-Frame-81
+
+
+
+ -
+
+
+ Frame-9
+
+ .icon-Frame-91
+
+
+
+ -
+
+
+ equal
+
+ .icon-equal
+
+
+
+ -
+
+
+ warning
+
+ .icon-warning
+
+
+
+ -
+
+
+ error
+
+ .icon-error
+
+
+
+ -
+
+
+ Frame-1
+
+ .icon-Frame-11
+
+
+
+ -
+
+
+ Frame
+
+ .icon-Frame1
+
+
+
+ -
+
+
+ Frame-2
+
+ .icon-Frame-21
+
+
+
+ -
+
+
+ Frame-3
+
+ .icon-Frame-31
+
+
+
+ -
+
+
+ Frame-4
+
+ .icon-Frame-41
+
+
+
+ -
+
+
+ Frame-9
+
+ .icon-Frame-9
+
+
+
+ -
+
+
+ Frame-8
+
+ .icon-Frame-8
+
+
+
+ -
+
+
+ Frame-13
+
+ .icon-Frame-13
+
+
+
+ -
+
+
+ Frame-12
+
+ .icon-Frame-12
+
+
+
+ -
+
+
+ Frame-15
+
+ .icon-Frame-15
+
+
+
+ -
+
+
+ Frame-17
+
+ .icon-Frame-17
+
+
+
+ -
+
+
+ Frame-11
+
+ .icon-Frame-111
+
+
+
+ -
+
+
+ Frame-16
+
+ .icon-Frame-16
+
+
+
+ -
+
+
+ Frame-7
+
+ .icon-Frame-7
+
+
+
+ -
+
+
+ Frame-14
+
+ .icon-Frame-14
+
+
+
+ -
+
+
+ Frame-10
+
+ .icon-Frame-10
+
+
+
+ -
+
+
+ Frame-5
+
+ .icon-Frame-5
+
+
+
+ -
+
+
+ Frame-6
+
+ .icon-Frame-6
+
+
+
+ -
+
+
+ Frame-2
+
+ .icon-Frame-2
+
+
+
+ -
+
+
+ Frame-3
+
+ .icon-Frame-3
+
+
+
+ -
+
+
+ Frame-1
+
+ .icon-Frame-1
+
+
+
+ -
+
+
+ Frame
+
+ .icon-Frame
+
+
+
+ -
+
+
+ Frame-4
+
+ .icon-Frame-4
+
+
+
+
+
+
font-class 引用
+
+
+
font-class 是 Unicode 使用方式的一种变种,主要是解决 Unicode 书写不直观,语意不明确的问题。
+
与 Unicode 使用方式相比,具有如下特点:
+
+ - 相比于 Unicode 语意明确,书写更直观。可以很容易分辨这个 icon 是什么。
+ - 因为使用 class 来定义图标,所以当要替换图标时,只需要修改 class 里面的 Unicode 引用。
+
+
使用步骤如下:
+
第一步:引入项目下面生成的 fontclass 代码:
+
<link rel="stylesheet" href="./iconfont.css">
+
+
第二步:挑选相应图标并获取类名,应用于页面:
+
<span class="iconfont icon-xxx"></span>
+
+
+ "
+ iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。
+
+
+
+
+
+
+ -
+
+
Frame
+ #icon-Frame13
+
+
+ -
+
+
Frame-1
+ #icon-Frame-113
+
+
+ -
+
+
Frame
+ #icon-Frame12
+
+
+ -
+
+
Frame-2
+ #icon-Frame-24
+
+
+ -
+
+
Frame
+ #icon-Frame10
+
+
+ -
+
+
Frame
+ #icon-Frame9
+
+
+ -
+
+
Frame-1
+ #icon-Frame-112
+
+
+ -
+
+
Frame-3
+ #icon-Frame-33
+
+
+ -
+
+
Frame-2
+ #icon-Frame-23
+
+
+ -
+
+
Frame
+ #icon-Frame8
+
+
+ -
+
+
继续阅卷
+ #icon-Frame7
+
+
+ -
+
+
Frame
+ #icon-Frame6
+
+
+ -
+
+
阅卷记录
+ #icon-yuejuanjilu
+
+
+ -
+
+
Frame
+ #icon-Frame5
+
+
+ -
+
+
Frame1
+ #icon-Frame11
+
+
+ -
+
+
1
+ #icon-a-1
+
+
+ -
+
+
Frame
+ #icon-Frame4
+
+
+ -
+
+
Frame-1
+ #icon-Frame-110
+
+
+ -
+
+
Frame
+ #icon-Frame3
+
+
+ -
+
+
Frame-1
+ #icon-Frame-19
+
+
+ -
+
+
Frame
+ #icon-Frame2
+
+
+ -
+
+
Frame-1
+ #icon-Frame-18
+
+
+ -
+
+
Frame-2
+ #icon-Frame-22
+
+
+ -
+
+
Frame-3
+ #icon-Frame-32
+
+
+ -
+
+
Frame-4
+ #icon-Frame-42
+
+
+ -
+
+
Frame-5
+ #icon-Frame-51
+
+
+ -
+
+
Frame-6
+ #icon-Frame-61
+
+
+ -
+
+
Frame-7
+ #icon-Frame-71
+
+
+ -
+
+
Frame-8
+ #icon-Frame-81
+
+
+ -
+
+
Frame-9
+ #icon-Frame-91
+
+
+ -
+
+
equal
+ #icon-equal
+
+
+ -
+
+
warning
+ #icon-warning
+
+
+ -
+
+
error
+ #icon-error
+
+
+ -
+
+
Frame-1
+ #icon-Frame-11
+
+
+ -
+
+
Frame
+ #icon-Frame1
+
+
+ -
+
+
Frame-2
+ #icon-Frame-21
+
+
+ -
+
+
Frame-3
+ #icon-Frame-31
+
+
+ -
+
+
Frame-4
+ #icon-Frame-41
+
+
+ -
+
+
Frame-9
+ #icon-Frame-9
+
+
+ -
+
+
Frame-8
+ #icon-Frame-8
+
+
+ -
+
+
Frame-13
+ #icon-Frame-13
+
+
+ -
+
+
Frame-12
+ #icon-Frame-12
+
+
+ -
+
+
Frame-15
+ #icon-Frame-15
+
+
+ -
+
+
Frame-17
+ #icon-Frame-17
+
+
+ -
+
+
Frame-11
+ #icon-Frame-111
+
+
+ -
+
+
Frame-16
+ #icon-Frame-16
+
+
+ -
+
+
Frame-7
+ #icon-Frame-7
+
+
+ -
+
+
Frame-14
+ #icon-Frame-14
+
+
+ -
+
+
Frame-10
+ #icon-Frame-10
+
+
+ -
+
+
Frame-5
+ #icon-Frame-5
+
+
+ -
+
+
Frame-6
+ #icon-Frame-6
+
+
+ -
+
+
Frame-2
+ #icon-Frame-2
+
+
+ -
+
+
Frame-3
+ #icon-Frame-3
+
+
+ -
+
+
Frame-1
+ #icon-Frame-1
+
+
+ -
+
+
Frame
+ #icon-Frame
+
+
+ -
+
+
Frame-4
+ #icon-Frame-4
+
+
+
+
+
Symbol 引用
+
+
+
这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇文章
+ 这种用法其实是做了一个 SVG 的集合,与另外两种相比具有如下特点:
+
+ - 支持多色图标了,不再受单色限制。
+ - 通过一些技巧,支持像字体那样,通过
font-size, color 来调整样式。
+ - 兼容性较差,支持 IE9+,及现代浏览器。
+ - 浏览器渲染 SVG 的性能一般,还不如 png。
+
+
使用步骤如下:
+
第一步:引入项目下面生成的 symbol 代码:
+
<script src="./iconfont.js"></script>
+
+
第二步:加入通用 CSS 代码(引入一次就行):
+
<style>
+.icon {
+ width: 1em;
+ height: 1em;
+ vertical-align: -0.15em;
+ fill: currentColor;
+ overflow: hidden;
+}
+</style>
+
+
第三步:挑选相应图标并获取类名,应用于页面:
+
<svg class="icon" aria-hidden="true">
+ <use xlink:href="#icon-xxx"></use>
+</svg>
+
+
+
+
+
+
+
+
+
diff --git a/marking_app/assets/icons/iconfont.css b/marking_app/assets/icons/iconfont.css
new file mode 100644
index 0000000..239d1a0
--- /dev/null
+++ b/marking_app/assets/icons/iconfont.css
@@ -0,0 +1,239 @@
+@font-face {
+ font-family: "iconfont"; /* Project id 3423846 */
+ src: url('iconfont.woff2?t=1706671294868') format('woff2'),
+ url('iconfont.woff?t=1706671294868') format('woff'),
+ url('iconfont.ttf?t=1706671294868') format('truetype');
+}
+
+.iconfont {
+ font-family: "iconfont" !important;
+ font-size: 16px;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-Frame13:before {
+ content: "\e63d";
+}
+
+.icon-Frame-113:before {
+ content: "\e63a";
+}
+
+.icon-Frame12:before {
+ content: "\e63b";
+}
+
+.icon-Frame-24:before {
+ content: "\e63c";
+}
+
+.icon-Frame10:before {
+ content: "\e639";
+}
+
+.icon-Frame9:before {
+ content: "\e635";
+}
+
+.icon-Frame-112:before {
+ content: "\e636";
+}
+
+.icon-Frame-33:before {
+ content: "\e637";
+}
+
+.icon-Frame-23:before {
+ content: "\e638";
+}
+
+.icon-Frame8:before {
+ content: "\e634";
+}
+
+.icon-Frame7:before {
+ content: "\e632";
+}
+
+.icon-Frame6:before {
+ content: "\e631";
+}
+
+.icon-yuejuanjilu:before {
+ content: "\e630";
+}
+
+.icon-Frame5:before {
+ content: "\e62e";
+}
+
+.icon-Frame11:before {
+ content: "\e62f";
+}
+
+.icon-a-1:before {
+ content: "\e629";
+}
+
+.icon-Frame4:before {
+ content: "\e627";
+}
+
+.icon-Frame-110:before {
+ content: "\e628";
+}
+
+.icon-Frame3:before {
+ content: "\e625";
+}
+
+.icon-Frame-19:before {
+ content: "\e626";
+}
+
+.icon-Frame2:before {
+ content: "\e61b";
+}
+
+.icon-Frame-18:before {
+ content: "\e61c";
+}
+
+.icon-Frame-22:before {
+ content: "\e61d";
+}
+
+.icon-Frame-32:before {
+ content: "\e61e";
+}
+
+.icon-Frame-42:before {
+ content: "\e61f";
+}
+
+.icon-Frame-51:before {
+ content: "\e620";
+}
+
+.icon-Frame-61:before {
+ content: "\e621";
+}
+
+.icon-Frame-71:before {
+ content: "\e622";
+}
+
+.icon-Frame-81:before {
+ content: "\e623";
+}
+
+.icon-Frame-91:before {
+ content: "\e624";
+}
+
+.icon-equal:before {
+ content: "\e61a";
+}
+
+.icon-warning:before {
+ content: "\e601";
+}
+
+.icon-error:before {
+ content: "\e602";
+}
+
+.icon-Frame-11:before {
+ content: "\e608";
+}
+
+.icon-Frame1:before {
+ content: "\e609";
+}
+
+.icon-Frame-21:before {
+ content: "\e60a";
+}
+
+.icon-Frame-31:before {
+ content: "\e60b";
+}
+
+.icon-Frame-41:before {
+ content: "\e60c";
+}
+
+.icon-Frame-9:before {
+ content: "\e60d";
+}
+
+.icon-Frame-8:before {
+ content: "\e60e";
+}
+
+.icon-Frame-13:before {
+ content: "\e60f";
+}
+
+.icon-Frame-12:before {
+ content: "\e610";
+}
+
+.icon-Frame-15:before {
+ content: "\e611";
+}
+
+.icon-Frame-17:before {
+ content: "\e612";
+}
+
+.icon-Frame-111:before {
+ content: "\e613";
+}
+
+.icon-Frame-16:before {
+ content: "\e614";
+}
+
+.icon-Frame-7:before {
+ content: "\e615";
+}
+
+.icon-Frame-14:before {
+ content: "\e616";
+}
+
+.icon-Frame-10:before {
+ content: "\e617";
+}
+
+.icon-Frame-5:before {
+ content: "\e618";
+}
+
+.icon-Frame-6:before {
+ content: "\e619";
+}
+
+.icon-Frame-2:before {
+ content: "\e603";
+}
+
+.icon-Frame-3:before {
+ content: "\e604";
+}
+
+.icon-Frame-1:before {
+ content: "\e605";
+}
+
+.icon-Frame:before {
+ content: "\e606";
+}
+
+.icon-Frame-4:before {
+ content: "\e607";
+}
+
diff --git a/marking_app/assets/icons/iconfont.js b/marking_app/assets/icons/iconfont.js
new file mode 100644
index 0000000..915b38b
--- /dev/null
+++ b/marking_app/assets/icons/iconfont.js
@@ -0,0 +1 @@
+window._iconfont_svg_string_3423846='',function(c){var a=(a=document.getElementsByTagName("script"))[a.length-1],l=a.getAttribute("data-injectcss"),a=a.getAttribute("data-disable-injectsvg");if(!a){var h,i,t,o,m,v=function(a,l){l.parentNode.insertBefore(a,l)};if(l&&!c.__iconfont__svg__cssinject__){c.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(a){console&&console.log(a)}}h=function(){var a,l=document.createElement("div");l.innerHTML=c._iconfont_svg_string_3423846,(l=l.getElementsByTagName("svg")[0])&&(l.setAttribute("aria-hidden","true"),l.style.position="absolute",l.style.width=0,l.style.height=0,l.style.overflow="hidden",l=l,(a=document.body).firstChild?v(l,a.firstChild):a.appendChild(l))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(h,0):(i=function(){document.removeEventListener("DOMContentLoaded",i,!1),h()},document.addEventListener("DOMContentLoaded",i,!1)):document.attachEvent&&(t=h,o=c.document,m=!1,F(),o.onreadystatechange=function(){"complete"==o.readyState&&(o.onreadystatechange=null,e())})}function e(){m||(m=!0,t())}function F(){try{o.documentElement.doScroll("left")}catch(a){return void setTimeout(F,50)}e()}}(window);
\ No newline at end of file
diff --git a/marking_app/assets/icons/iconfont.json b/marking_app/assets/icons/iconfont.json
new file mode 100644
index 0000000..d6dcfc0
--- /dev/null
+++ b/marking_app/assets/icons/iconfont.json
@@ -0,0 +1,401 @@
+{
+ "id": "3423846",
+ "name": "阅卷平台",
+ "font_family": "iconfont",
+ "css_prefix_text": "icon-",
+ "description": "",
+ "glyphs": [
+ {
+ "icon_id": "39175701",
+ "name": "Frame",
+ "font_class": "Frame13",
+ "unicode": "e63d",
+ "unicode_decimal": 58941
+ },
+ {
+ "icon_id": "39173378",
+ "name": "Frame-1",
+ "font_class": "Frame-113",
+ "unicode": "e63a",
+ "unicode_decimal": 58938
+ },
+ {
+ "icon_id": "39173379",
+ "name": "Frame",
+ "font_class": "Frame12",
+ "unicode": "e63b",
+ "unicode_decimal": 58939
+ },
+ {
+ "icon_id": "39173377",
+ "name": "Frame-2",
+ "font_class": "Frame-24",
+ "unicode": "e63c",
+ "unicode_decimal": 58940
+ },
+ {
+ "icon_id": "39036939",
+ "name": "Frame",
+ "font_class": "Frame10",
+ "unicode": "e639",
+ "unicode_decimal": 58937
+ },
+ {
+ "icon_id": "38951584",
+ "name": "Frame",
+ "font_class": "Frame9",
+ "unicode": "e635",
+ "unicode_decimal": 58933
+ },
+ {
+ "icon_id": "38951583",
+ "name": "Frame-1",
+ "font_class": "Frame-112",
+ "unicode": "e636",
+ "unicode_decimal": 58934
+ },
+ {
+ "icon_id": "38951582",
+ "name": "Frame-3",
+ "font_class": "Frame-33",
+ "unicode": "e637",
+ "unicode_decimal": 58935
+ },
+ {
+ "icon_id": "38951581",
+ "name": "Frame-2",
+ "font_class": "Frame-23",
+ "unicode": "e638",
+ "unicode_decimal": 58936
+ },
+ {
+ "icon_id": "38561727",
+ "name": "Frame",
+ "font_class": "Frame8",
+ "unicode": "e634",
+ "unicode_decimal": 58932
+ },
+ {
+ "icon_id": "38318831",
+ "name": "继续阅卷",
+ "font_class": "Frame7",
+ "unicode": "e632",
+ "unicode_decimal": 58930
+ },
+ {
+ "icon_id": "38307813",
+ "name": "Frame",
+ "font_class": "Frame6",
+ "unicode": "e631",
+ "unicode_decimal": 58929
+ },
+ {
+ "icon_id": "38304788",
+ "name": "阅卷记录",
+ "font_class": "yuejuanjilu",
+ "unicode": "e630",
+ "unicode_decimal": 58928
+ },
+ {
+ "icon_id": "38108247",
+ "name": "Frame",
+ "font_class": "Frame5",
+ "unicode": "e62e",
+ "unicode_decimal": 58926
+ },
+ {
+ "icon_id": "38108264",
+ "name": "Frame1",
+ "font_class": "Frame11",
+ "unicode": "e62f",
+ "unicode_decimal": 58927
+ },
+ {
+ "icon_id": "36030549",
+ "name": "1",
+ "font_class": "a-1",
+ "unicode": "e629",
+ "unicode_decimal": 58921
+ },
+ {
+ "icon_id": "36025847",
+ "name": "Frame",
+ "font_class": "Frame4",
+ "unicode": "e627",
+ "unicode_decimal": 58919
+ },
+ {
+ "icon_id": "36025848",
+ "name": "Frame-1",
+ "font_class": "Frame-110",
+ "unicode": "e628",
+ "unicode_decimal": 58920
+ },
+ {
+ "icon_id": "35726114",
+ "name": "Frame",
+ "font_class": "Frame3",
+ "unicode": "e625",
+ "unicode_decimal": 58917
+ },
+ {
+ "icon_id": "35726115",
+ "name": "Frame-1",
+ "font_class": "Frame-19",
+ "unicode": "e626",
+ "unicode_decimal": 58918
+ },
+ {
+ "icon_id": "35408271",
+ "name": "Frame",
+ "font_class": "Frame2",
+ "unicode": "e61b",
+ "unicode_decimal": 58907
+ },
+ {
+ "icon_id": "35408272",
+ "name": "Frame-1",
+ "font_class": "Frame-18",
+ "unicode": "e61c",
+ "unicode_decimal": 58908
+ },
+ {
+ "icon_id": "35408273",
+ "name": "Frame-2",
+ "font_class": "Frame-22",
+ "unicode": "e61d",
+ "unicode_decimal": 58909
+ },
+ {
+ "icon_id": "35408283",
+ "name": "Frame-3",
+ "font_class": "Frame-32",
+ "unicode": "e61e",
+ "unicode_decimal": 58910
+ },
+ {
+ "icon_id": "35408284",
+ "name": "Frame-4",
+ "font_class": "Frame-42",
+ "unicode": "e61f",
+ "unicode_decimal": 58911
+ },
+ {
+ "icon_id": "35408288",
+ "name": "Frame-5",
+ "font_class": "Frame-51",
+ "unicode": "e620",
+ "unicode_decimal": 58912
+ },
+ {
+ "icon_id": "35408289",
+ "name": "Frame-6",
+ "font_class": "Frame-61",
+ "unicode": "e621",
+ "unicode_decimal": 58913
+ },
+ {
+ "icon_id": "35408298",
+ "name": "Frame-7",
+ "font_class": "Frame-71",
+ "unicode": "e622",
+ "unicode_decimal": 58914
+ },
+ {
+ "icon_id": "35408300",
+ "name": "Frame-8",
+ "font_class": "Frame-81",
+ "unicode": "e623",
+ "unicode_decimal": 58915
+ },
+ {
+ "icon_id": "35408317",
+ "name": "Frame-9",
+ "font_class": "Frame-91",
+ "unicode": "e624",
+ "unicode_decimal": 58916
+ },
+ {
+ "icon_id": "30190804",
+ "name": "equal",
+ "font_class": "equal",
+ "unicode": "e61a",
+ "unicode_decimal": 58906
+ },
+ {
+ "icon_id": "30183282",
+ "name": "warning",
+ "font_class": "warning",
+ "unicode": "e601",
+ "unicode_decimal": 58881
+ },
+ {
+ "icon_id": "30183283",
+ "name": "error",
+ "font_class": "error",
+ "unicode": "e602",
+ "unicode_decimal": 58882
+ },
+ {
+ "icon_id": "29930405",
+ "name": "Frame-1",
+ "font_class": "Frame-11",
+ "unicode": "e608",
+ "unicode_decimal": 58888
+ },
+ {
+ "icon_id": "29930406",
+ "name": "Frame",
+ "font_class": "Frame1",
+ "unicode": "e609",
+ "unicode_decimal": 58889
+ },
+ {
+ "icon_id": "29930407",
+ "name": "Frame-2",
+ "font_class": "Frame-21",
+ "unicode": "e60a",
+ "unicode_decimal": 58890
+ },
+ {
+ "icon_id": "29930408",
+ "name": "Frame-3",
+ "font_class": "Frame-31",
+ "unicode": "e60b",
+ "unicode_decimal": 58891
+ },
+ {
+ "icon_id": "29930409",
+ "name": "Frame-4",
+ "font_class": "Frame-41",
+ "unicode": "e60c",
+ "unicode_decimal": 58892
+ },
+ {
+ "icon_id": "29930410",
+ "name": "Frame-9",
+ "font_class": "Frame-9",
+ "unicode": "e60d",
+ "unicode_decimal": 58893
+ },
+ {
+ "icon_id": "29930411",
+ "name": "Frame-8",
+ "font_class": "Frame-8",
+ "unicode": "e60e",
+ "unicode_decimal": 58894
+ },
+ {
+ "icon_id": "29930412",
+ "name": "Frame-13",
+ "font_class": "Frame-13",
+ "unicode": "e60f",
+ "unicode_decimal": 58895
+ },
+ {
+ "icon_id": "29930413",
+ "name": "Frame-12",
+ "font_class": "Frame-12",
+ "unicode": "e610",
+ "unicode_decimal": 58896
+ },
+ {
+ "icon_id": "29930414",
+ "name": "Frame-15",
+ "font_class": "Frame-15",
+ "unicode": "e611",
+ "unicode_decimal": 58897
+ },
+ {
+ "icon_id": "29930415",
+ "name": "Frame-17",
+ "font_class": "Frame-17",
+ "unicode": "e612",
+ "unicode_decimal": 58898
+ },
+ {
+ "icon_id": "29930416",
+ "name": "Frame-11",
+ "font_class": "Frame-111",
+ "unicode": "e613",
+ "unicode_decimal": 58899
+ },
+ {
+ "icon_id": "29930417",
+ "name": "Frame-16",
+ "font_class": "Frame-16",
+ "unicode": "e614",
+ "unicode_decimal": 58900
+ },
+ {
+ "icon_id": "29930418",
+ "name": "Frame-7",
+ "font_class": "Frame-7",
+ "unicode": "e615",
+ "unicode_decimal": 58901
+ },
+ {
+ "icon_id": "29930419",
+ "name": "Frame-14",
+ "font_class": "Frame-14",
+ "unicode": "e616",
+ "unicode_decimal": 58902
+ },
+ {
+ "icon_id": "29930420",
+ "name": "Frame-10",
+ "font_class": "Frame-10",
+ "unicode": "e617",
+ "unicode_decimal": 58903
+ },
+ {
+ "icon_id": "29930421",
+ "name": "Frame-5",
+ "font_class": "Frame-5",
+ "unicode": "e618",
+ "unicode_decimal": 58904
+ },
+ {
+ "icon_id": "29930422",
+ "name": "Frame-6",
+ "font_class": "Frame-6",
+ "unicode": "e619",
+ "unicode_decimal": 58905
+ },
+ {
+ "icon_id": "29929656",
+ "name": "Frame-2",
+ "font_class": "Frame-2",
+ "unicode": "e603",
+ "unicode_decimal": 58883
+ },
+ {
+ "icon_id": "29929657",
+ "name": "Frame-3",
+ "font_class": "Frame-3",
+ "unicode": "e604",
+ "unicode_decimal": 58884
+ },
+ {
+ "icon_id": "29929658",
+ "name": "Frame-1",
+ "font_class": "Frame-1",
+ "unicode": "e605",
+ "unicode_decimal": 58885
+ },
+ {
+ "icon_id": "29929659",
+ "name": "Frame",
+ "font_class": "Frame",
+ "unicode": "e606",
+ "unicode_decimal": 58886
+ },
+ {
+ "icon_id": "29929660",
+ "name": "Frame-4",
+ "font_class": "Frame-4",
+ "unicode": "e607",
+ "unicode_decimal": 58887
+ }
+ ]
+}
diff --git a/marking_app/assets/icons/iconfont.ttf b/marking_app/assets/icons/iconfont.ttf
new file mode 100644
index 0000000..ed7cf67
Binary files /dev/null and b/marking_app/assets/icons/iconfont.ttf differ
diff --git a/marking_app/assets/icons/iconfont.woff b/marking_app/assets/icons/iconfont.woff
new file mode 100644
index 0000000..3cb60a1
Binary files /dev/null and b/marking_app/assets/icons/iconfont.woff differ
diff --git a/marking_app/assets/icons/iconfont.woff2 b/marking_app/assets/icons/iconfont.woff2
new file mode 100644
index 0000000..7a32915
Binary files /dev/null and b/marking_app/assets/icons/iconfont.woff2 differ
diff --git a/marking_app/assets/images/1.png b/marking_app/assets/images/1.png
new file mode 100644
index 0000000..7c3d1ff
Binary files /dev/null and b/marking_app/assets/images/1.png differ
diff --git a/marking_app/assets/images/2.0x/2 (2).png b/marking_app/assets/images/2.0x/2 (2).png
new file mode 100644
index 0000000..2881c42
Binary files /dev/null and b/marking_app/assets/images/2.0x/2 (2).png differ
diff --git a/marking_app/assets/images/2.0x/abnormal_img.png b/marking_app/assets/images/2.0x/abnormal_img.png
new file mode 100644
index 0000000..b79c142
Binary files /dev/null and b/marking_app/assets/images/2.0x/abnormal_img.png differ
diff --git a/marking_app/assets/images/2.0x/default_user_dead.png b/marking_app/assets/images/2.0x/default_user_dead.png
new file mode 100644
index 0000000..06d463c
Binary files /dev/null and b/marking_app/assets/images/2.0x/default_user_dead.png differ
diff --git a/marking_app/assets/images/2.0x/detailed_report_entry_bgm.png b/marking_app/assets/images/2.0x/detailed_report_entry_bgm.png
new file mode 100644
index 0000000..8df8cf7
Binary files /dev/null and b/marking_app/assets/images/2.0x/detailed_report_entry_bgm.png differ
diff --git a/marking_app/assets/images/2.0x/do_exit_marking.png b/marking_app/assets/images/2.0x/do_exit_marking.png
new file mode 100644
index 0000000..d8787ee
Binary files /dev/null and b/marking_app/assets/images/2.0x/do_exit_marking.png differ
diff --git a/marking_app/assets/images/2.0x/do_marking_answer.png b/marking_app/assets/images/2.0x/do_marking_answer.png
new file mode 100644
index 0000000..1a8797d
Binary files /dev/null and b/marking_app/assets/images/2.0x/do_marking_answer.png differ
diff --git a/marking_app/assets/images/2.0x/do_marking_test_paper.png b/marking_app/assets/images/2.0x/do_marking_test_paper.png
new file mode 100644
index 0000000..7d2898a
Binary files /dev/null and b/marking_app/assets/images/2.0x/do_marking_test_paper.png differ
diff --git a/marking_app/assets/images/2.0x/equal.png b/marking_app/assets/images/2.0x/equal.png
new file mode 100644
index 0000000..ab3517e
Binary files /dev/null and b/marking_app/assets/images/2.0x/equal.png differ
diff --git a/marking_app/assets/images/2.0x/exam_selection.png b/marking_app/assets/images/2.0x/exam_selection.png
new file mode 100644
index 0000000..c53a0fa
Binary files /dev/null and b/marking_app/assets/images/2.0x/exam_selection.png differ
diff --git a/marking_app/assets/images/2.0x/fall.png b/marking_app/assets/images/2.0x/fall.png
new file mode 100644
index 0000000..5039cda
Binary files /dev/null and b/marking_app/assets/images/2.0x/fall.png differ
diff --git a/marking_app/assets/images/2.0x/guide_page_gesture.png b/marking_app/assets/images/2.0x/guide_page_gesture.png
new file mode 100644
index 0000000..2c36734
Binary files /dev/null and b/marking_app/assets/images/2.0x/guide_page_gesture.png differ
diff --git a/marking_app/assets/images/2.0x/hide_question_id.png b/marking_app/assets/images/2.0x/hide_question_id.png
new file mode 100644
index 0000000..95efc3b
Binary files /dev/null and b/marking_app/assets/images/2.0x/hide_question_id.png differ
diff --git a/marking_app/assets/images/2.0x/home_image.png b/marking_app/assets/images/2.0x/home_image.png
new file mode 100644
index 0000000..abc67d1
Binary files /dev/null and b/marking_app/assets/images/2.0x/home_image.png differ
diff --git a/marking_app/assets/images/2.0x/ic_home_normal.png b/marking_app/assets/images/2.0x/ic_home_normal.png
new file mode 100644
index 0000000..64354dc
Binary files /dev/null and b/marking_app/assets/images/2.0x/ic_home_normal.png differ
diff --git a/marking_app/assets/images/2.0x/ic_home_press.png b/marking_app/assets/images/2.0x/ic_home_press.png
new file mode 100644
index 0000000..4d1cefb
Binary files /dev/null and b/marking_app/assets/images/2.0x/ic_home_press.png differ
diff --git a/marking_app/assets/images/2.0x/ic_marking_normal.png b/marking_app/assets/images/2.0x/ic_marking_normal.png
new file mode 100644
index 0000000..b9c0e6a
Binary files /dev/null and b/marking_app/assets/images/2.0x/ic_marking_normal.png differ
diff --git a/marking_app/assets/images/2.0x/ic_marking_press.png b/marking_app/assets/images/2.0x/ic_marking_press.png
new file mode 100644
index 0000000..d289d31
Binary files /dev/null and b/marking_app/assets/images/2.0x/ic_marking_press.png differ
diff --git a/marking_app/assets/images/2.0x/ic_mine_normal.png b/marking_app/assets/images/2.0x/ic_mine_normal.png
new file mode 100644
index 0000000..719e115
Binary files /dev/null and b/marking_app/assets/images/2.0x/ic_mine_normal.png differ
diff --git a/marking_app/assets/images/2.0x/ic_mine_press.png b/marking_app/assets/images/2.0x/ic_mine_press.png
new file mode 100644
index 0000000..5ada58e
Binary files /dev/null and b/marking_app/assets/images/2.0x/ic_mine_press.png differ
diff --git a/marking_app/assets/images/2.0x/ic_report_normal.png b/marking_app/assets/images/2.0x/ic_report_normal.png
new file mode 100644
index 0000000..2bbb924
Binary files /dev/null and b/marking_app/assets/images/2.0x/ic_report_normal.png differ
diff --git a/marking_app/assets/images/2.0x/ic_report_press.png b/marking_app/assets/images/2.0x/ic_report_press.png
new file mode 100644
index 0000000..9bce2db
Binary files /dev/null and b/marking_app/assets/images/2.0x/ic_report_press.png differ
diff --git a/marking_app/assets/images/2.0x/ic_work_normal.png b/marking_app/assets/images/2.0x/ic_work_normal.png
new file mode 100644
index 0000000..cd54b72
Binary files /dev/null and b/marking_app/assets/images/2.0x/ic_work_normal.png differ
diff --git a/marking_app/assets/images/2.0x/ic_work_press.png b/marking_app/assets/images/2.0x/ic_work_press.png
new file mode 100644
index 0000000..23d22f2
Binary files /dev/null and b/marking_app/assets/images/2.0x/ic_work_press.png differ
diff --git a/marking_app/assets/images/2.0x/login_bgi.png b/marking_app/assets/images/2.0x/login_bgi.png
new file mode 100644
index 0000000..87f7580
Binary files /dev/null and b/marking_app/assets/images/2.0x/login_bgi.png differ
diff --git a/marking_app/assets/images/2.0x/logo.png b/marking_app/assets/images/2.0x/logo.png
new file mode 100644
index 0000000..ad38e5a
Binary files /dev/null and b/marking_app/assets/images/2.0x/logo.png differ
diff --git a/marking_app/assets/images/2.0x/marking_settings.png b/marking_app/assets/images/2.0x/marking_settings.png
new file mode 100644
index 0000000..0150b30
Binary files /dev/null and b/marking_app/assets/images/2.0x/marking_settings.png differ
diff --git a/marking_app/assets/images/2.0x/not_data_bgm.png b/marking_app/assets/images/2.0x/not_data_bgm.png
new file mode 100644
index 0000000..9e12212
Binary files /dev/null and b/marking_app/assets/images/2.0x/not_data_bgm.png differ
diff --git a/marking_app/assets/images/2.0x/personal_bgi.png b/marking_app/assets/images/2.0x/personal_bgi.png
new file mode 100644
index 0000000..f633bd6
Binary files /dev/null and b/marking_app/assets/images/2.0x/personal_bgi.png differ
diff --git a/marking_app/assets/images/2.0x/report_home_icon_burst.png b/marking_app/assets/images/2.0x/report_home_icon_burst.png
new file mode 100644
index 0000000..613e82c
Binary files /dev/null and b/marking_app/assets/images/2.0x/report_home_icon_burst.png differ
diff --git a/marking_app/assets/images/2.0x/report_home_icon_subject.png b/marking_app/assets/images/2.0x/report_home_icon_subject.png
new file mode 100644
index 0000000..19f142a
Binary files /dev/null and b/marking_app/assets/images/2.0x/report_home_icon_subject.png differ
diff --git a/marking_app/assets/images/2.0x/report_home_top_img.png b/marking_app/assets/images/2.0x/report_home_top_img.png
new file mode 100644
index 0000000..10ec946
Binary files /dev/null and b/marking_app/assets/images/2.0x/report_home_top_img.png differ
diff --git a/marking_app/assets/images/2.0x/report_level_bgm.png b/marking_app/assets/images/2.0x/report_level_bgm.png
new file mode 100644
index 0000000..3a1caf6
Binary files /dev/null and b/marking_app/assets/images/2.0x/report_level_bgm.png differ
diff --git a/marking_app/assets/images/2.0x/review_error.png b/marking_app/assets/images/2.0x/review_error.png
new file mode 100644
index 0000000..34f1c12
Binary files /dev/null and b/marking_app/assets/images/2.0x/review_error.png differ
diff --git a/marking_app/assets/images/2.0x/review_loding.png b/marking_app/assets/images/2.0x/review_loding.png
new file mode 100644
index 0000000..2e5cd4e
Binary files /dev/null and b/marking_app/assets/images/2.0x/review_loding.png differ
diff --git a/marking_app/assets/images/2.0x/rise.png b/marking_app/assets/images/2.0x/rise.png
new file mode 100644
index 0000000..65e2696
Binary files /dev/null and b/marking_app/assets/images/2.0x/rise.png differ
diff --git a/marking_app/assets/images/2.0x/role_selection.png b/marking_app/assets/images/2.0x/role_selection.png
new file mode 100644
index 0000000..806c04a
Binary files /dev/null and b/marking_app/assets/images/2.0x/role_selection.png differ
diff --git a/marking_app/assets/images/2.0x/test_paper_loading_failed.png b/marking_app/assets/images/2.0x/test_paper_loading_failed.png
new file mode 100644
index 0000000..d86cfb1
Binary files /dev/null and b/marking_app/assets/images/2.0x/test_paper_loading_failed.png differ
diff --git a/marking_app/assets/images/2.0x/upgrade_dialog_bgc.png b/marking_app/assets/images/2.0x/upgrade_dialog_bgc.png
new file mode 100644
index 0000000..96ff3dd
Binary files /dev/null and b/marking_app/assets/images/2.0x/upgrade_dialog_bgc.png differ
diff --git a/marking_app/assets/images/2.0x/vertical_screen_btn.png b/marking_app/assets/images/2.0x/vertical_screen_btn.png
new file mode 100644
index 0000000..f4cc7e9
Binary files /dev/null and b/marking_app/assets/images/2.0x/vertical_screen_btn.png differ
diff --git a/marking_app/assets/images/3.0x/30 (1).png b/marking_app/assets/images/3.0x/30 (1).png
new file mode 100644
index 0000000..df1fa35
Binary files /dev/null and b/marking_app/assets/images/3.0x/30 (1).png differ
diff --git a/marking_app/assets/images/3.0x/abnormal_img.png b/marking_app/assets/images/3.0x/abnormal_img.png
new file mode 100644
index 0000000..2c599b5
Binary files /dev/null and b/marking_app/assets/images/3.0x/abnormal_img.png differ
diff --git a/marking_app/assets/images/3.0x/default_user_dead.png b/marking_app/assets/images/3.0x/default_user_dead.png
new file mode 100644
index 0000000..92578fc
Binary files /dev/null and b/marking_app/assets/images/3.0x/default_user_dead.png differ
diff --git a/marking_app/assets/images/3.0x/detailed_report_entry_bgm.png b/marking_app/assets/images/3.0x/detailed_report_entry_bgm.png
new file mode 100644
index 0000000..a2293be
Binary files /dev/null and b/marking_app/assets/images/3.0x/detailed_report_entry_bgm.png differ
diff --git a/marking_app/assets/images/3.0x/do_exit_marking.png b/marking_app/assets/images/3.0x/do_exit_marking.png
new file mode 100644
index 0000000..02dd2ad
Binary files /dev/null and b/marking_app/assets/images/3.0x/do_exit_marking.png differ
diff --git a/marking_app/assets/images/3.0x/do_marking_answer.png b/marking_app/assets/images/3.0x/do_marking_answer.png
new file mode 100644
index 0000000..6bea8f8
Binary files /dev/null and b/marking_app/assets/images/3.0x/do_marking_answer.png differ
diff --git a/marking_app/assets/images/3.0x/do_marking_test_paper.png b/marking_app/assets/images/3.0x/do_marking_test_paper.png
new file mode 100644
index 0000000..f5da23c
Binary files /dev/null and b/marking_app/assets/images/3.0x/do_marking_test_paper.png differ
diff --git a/marking_app/assets/images/3.0x/equal.png b/marking_app/assets/images/3.0x/equal.png
new file mode 100644
index 0000000..84f147b
Binary files /dev/null and b/marking_app/assets/images/3.0x/equal.png differ
diff --git a/marking_app/assets/images/3.0x/exam_selection.png b/marking_app/assets/images/3.0x/exam_selection.png
new file mode 100644
index 0000000..3dbcb28
Binary files /dev/null and b/marking_app/assets/images/3.0x/exam_selection.png differ
diff --git a/marking_app/assets/images/3.0x/fall.png b/marking_app/assets/images/3.0x/fall.png
new file mode 100644
index 0000000..539bef5
Binary files /dev/null and b/marking_app/assets/images/3.0x/fall.png differ
diff --git a/marking_app/assets/images/3.0x/guide_page_gesture.png b/marking_app/assets/images/3.0x/guide_page_gesture.png
new file mode 100644
index 0000000..01f2ad2
Binary files /dev/null and b/marking_app/assets/images/3.0x/guide_page_gesture.png differ
diff --git a/marking_app/assets/images/3.0x/hide_question_id.png b/marking_app/assets/images/3.0x/hide_question_id.png
new file mode 100644
index 0000000..1c56b4d
Binary files /dev/null and b/marking_app/assets/images/3.0x/hide_question_id.png differ
diff --git a/marking_app/assets/images/3.0x/home_image.png b/marking_app/assets/images/3.0x/home_image.png
new file mode 100644
index 0000000..46b8647
Binary files /dev/null and b/marking_app/assets/images/3.0x/home_image.png differ
diff --git a/marking_app/assets/images/3.0x/ic_home_normal.png b/marking_app/assets/images/3.0x/ic_home_normal.png
new file mode 100644
index 0000000..44b7e1c
Binary files /dev/null and b/marking_app/assets/images/3.0x/ic_home_normal.png differ
diff --git a/marking_app/assets/images/3.0x/ic_home_press.png b/marking_app/assets/images/3.0x/ic_home_press.png
new file mode 100644
index 0000000..19ab970
Binary files /dev/null and b/marking_app/assets/images/3.0x/ic_home_press.png differ
diff --git a/marking_app/assets/images/3.0x/ic_marking_normal.png b/marking_app/assets/images/3.0x/ic_marking_normal.png
new file mode 100644
index 0000000..e5534c1
Binary files /dev/null and b/marking_app/assets/images/3.0x/ic_marking_normal.png differ
diff --git a/marking_app/assets/images/3.0x/ic_marking_press.png b/marking_app/assets/images/3.0x/ic_marking_press.png
new file mode 100644
index 0000000..6bbc332
Binary files /dev/null and b/marking_app/assets/images/3.0x/ic_marking_press.png differ
diff --git a/marking_app/assets/images/3.0x/ic_mine_normal.png b/marking_app/assets/images/3.0x/ic_mine_normal.png
new file mode 100644
index 0000000..e410817
Binary files /dev/null and b/marking_app/assets/images/3.0x/ic_mine_normal.png differ
diff --git a/marking_app/assets/images/3.0x/ic_mine_press.png b/marking_app/assets/images/3.0x/ic_mine_press.png
new file mode 100644
index 0000000..512e001
Binary files /dev/null and b/marking_app/assets/images/3.0x/ic_mine_press.png differ
diff --git a/marking_app/assets/images/3.0x/ic_report_normal.png b/marking_app/assets/images/3.0x/ic_report_normal.png
new file mode 100644
index 0000000..99ea9a7
Binary files /dev/null and b/marking_app/assets/images/3.0x/ic_report_normal.png differ
diff --git a/marking_app/assets/images/3.0x/ic_report_press.png b/marking_app/assets/images/3.0x/ic_report_press.png
new file mode 100644
index 0000000..36d1056
Binary files /dev/null and b/marking_app/assets/images/3.0x/ic_report_press.png differ
diff --git a/marking_app/assets/images/3.0x/ic_work_normal.png b/marking_app/assets/images/3.0x/ic_work_normal.png
new file mode 100644
index 0000000..deb6e0d
Binary files /dev/null and b/marking_app/assets/images/3.0x/ic_work_normal.png differ
diff --git a/marking_app/assets/images/3.0x/ic_work_press.png b/marking_app/assets/images/3.0x/ic_work_press.png
new file mode 100644
index 0000000..ca13777
Binary files /dev/null and b/marking_app/assets/images/3.0x/ic_work_press.png differ
diff --git a/marking_app/assets/images/3.0x/login_bgi.png b/marking_app/assets/images/3.0x/login_bgi.png
new file mode 100644
index 0000000..d91ff82
Binary files /dev/null and b/marking_app/assets/images/3.0x/login_bgi.png differ
diff --git a/marking_app/assets/images/3.0x/logo.png b/marking_app/assets/images/3.0x/logo.png
new file mode 100644
index 0000000..620ccc7
Binary files /dev/null and b/marking_app/assets/images/3.0x/logo.png differ
diff --git a/marking_app/assets/images/3.0x/marking_settings.png b/marking_app/assets/images/3.0x/marking_settings.png
new file mode 100644
index 0000000..296e601
Binary files /dev/null and b/marking_app/assets/images/3.0x/marking_settings.png differ
diff --git a/marking_app/assets/images/3.0x/not_data_bgm.png b/marking_app/assets/images/3.0x/not_data_bgm.png
new file mode 100644
index 0000000..4f5bd3e
Binary files /dev/null and b/marking_app/assets/images/3.0x/not_data_bgm.png differ
diff --git a/marking_app/assets/images/3.0x/personal_bgi.png b/marking_app/assets/images/3.0x/personal_bgi.png
new file mode 100644
index 0000000..83e7ee9
Binary files /dev/null and b/marking_app/assets/images/3.0x/personal_bgi.png differ
diff --git a/marking_app/assets/images/3.0x/report_home_icon_burst.png b/marking_app/assets/images/3.0x/report_home_icon_burst.png
new file mode 100644
index 0000000..d3bb3fa
Binary files /dev/null and b/marking_app/assets/images/3.0x/report_home_icon_burst.png differ
diff --git a/marking_app/assets/images/3.0x/report_home_icon_subject.png b/marking_app/assets/images/3.0x/report_home_icon_subject.png
new file mode 100644
index 0000000..91337c3
Binary files /dev/null and b/marking_app/assets/images/3.0x/report_home_icon_subject.png differ
diff --git a/marking_app/assets/images/3.0x/report_home_top_img.png b/marking_app/assets/images/3.0x/report_home_top_img.png
new file mode 100644
index 0000000..0034a35
Binary files /dev/null and b/marking_app/assets/images/3.0x/report_home_top_img.png differ
diff --git a/marking_app/assets/images/3.0x/report_level_bgm.png b/marking_app/assets/images/3.0x/report_level_bgm.png
new file mode 100644
index 0000000..d588eec
Binary files /dev/null and b/marking_app/assets/images/3.0x/report_level_bgm.png differ
diff --git a/marking_app/assets/images/3.0x/review_error.png b/marking_app/assets/images/3.0x/review_error.png
new file mode 100644
index 0000000..c89ba12
Binary files /dev/null and b/marking_app/assets/images/3.0x/review_error.png differ
diff --git a/marking_app/assets/images/3.0x/review_loding.png b/marking_app/assets/images/3.0x/review_loding.png
new file mode 100644
index 0000000..5c5232a
Binary files /dev/null and b/marking_app/assets/images/3.0x/review_loding.png differ
diff --git a/marking_app/assets/images/3.0x/rise.png b/marking_app/assets/images/3.0x/rise.png
new file mode 100644
index 0000000..6cb2839
Binary files /dev/null and b/marking_app/assets/images/3.0x/rise.png differ
diff --git a/marking_app/assets/images/3.0x/role_selection.png b/marking_app/assets/images/3.0x/role_selection.png
new file mode 100644
index 0000000..0b885b3
Binary files /dev/null and b/marking_app/assets/images/3.0x/role_selection.png differ
diff --git a/marking_app/assets/images/3.0x/test_paper_loading_failed.png b/marking_app/assets/images/3.0x/test_paper_loading_failed.png
new file mode 100644
index 0000000..7b15c69
Binary files /dev/null and b/marking_app/assets/images/3.0x/test_paper_loading_failed.png differ
diff --git a/marking_app/assets/images/3.0x/upgrade_dialog_bgc.png b/marking_app/assets/images/3.0x/upgrade_dialog_bgc.png
new file mode 100644
index 0000000..832f72b
Binary files /dev/null and b/marking_app/assets/images/3.0x/upgrade_dialog_bgc.png differ
diff --git a/marking_app/assets/images/3.0x/vertical_screen_btn.png b/marking_app/assets/images/3.0x/vertical_screen_btn.png
new file mode 100644
index 0000000..ca4f1f9
Binary files /dev/null and b/marking_app/assets/images/3.0x/vertical_screen_btn.png differ
diff --git a/marking_app/assets/images/4.0x/4 (2).png b/marking_app/assets/images/4.0x/4 (2).png
new file mode 100644
index 0000000..9af04b7
Binary files /dev/null and b/marking_app/assets/images/4.0x/4 (2).png differ
diff --git a/marking_app/assets/images/4.0x/abnormal_img.png b/marking_app/assets/images/4.0x/abnormal_img.png
new file mode 100644
index 0000000..6c92c79
Binary files /dev/null and b/marking_app/assets/images/4.0x/abnormal_img.png differ
diff --git a/marking_app/assets/images/4.0x/default_user_dead.png b/marking_app/assets/images/4.0x/default_user_dead.png
new file mode 100644
index 0000000..1f98182
Binary files /dev/null and b/marking_app/assets/images/4.0x/default_user_dead.png differ
diff --git a/marking_app/assets/images/4.0x/detailed_report_entry_bgm.png b/marking_app/assets/images/4.0x/detailed_report_entry_bgm.png
new file mode 100644
index 0000000..5672008
Binary files /dev/null and b/marking_app/assets/images/4.0x/detailed_report_entry_bgm.png differ
diff --git a/marking_app/assets/images/4.0x/do_exit_marking.png b/marking_app/assets/images/4.0x/do_exit_marking.png
new file mode 100644
index 0000000..0efe020
Binary files /dev/null and b/marking_app/assets/images/4.0x/do_exit_marking.png differ
diff --git a/marking_app/assets/images/4.0x/do_marking_answer.png b/marking_app/assets/images/4.0x/do_marking_answer.png
new file mode 100644
index 0000000..08277cc
Binary files /dev/null and b/marking_app/assets/images/4.0x/do_marking_answer.png differ
diff --git a/marking_app/assets/images/4.0x/do_marking_test_paper.png b/marking_app/assets/images/4.0x/do_marking_test_paper.png
new file mode 100644
index 0000000..59d326b
Binary files /dev/null and b/marking_app/assets/images/4.0x/do_marking_test_paper.png differ
diff --git a/marking_app/assets/images/4.0x/equal.png b/marking_app/assets/images/4.0x/equal.png
new file mode 100644
index 0000000..157b9e1
Binary files /dev/null and b/marking_app/assets/images/4.0x/equal.png differ
diff --git a/marking_app/assets/images/4.0x/exam_selection.png b/marking_app/assets/images/4.0x/exam_selection.png
new file mode 100644
index 0000000..e7706c8
Binary files /dev/null and b/marking_app/assets/images/4.0x/exam_selection.png differ
diff --git a/marking_app/assets/images/4.0x/fall.png b/marking_app/assets/images/4.0x/fall.png
new file mode 100644
index 0000000..333372a
Binary files /dev/null and b/marking_app/assets/images/4.0x/fall.png differ
diff --git a/marking_app/assets/images/4.0x/guide_page_gesture.png b/marking_app/assets/images/4.0x/guide_page_gesture.png
new file mode 100644
index 0000000..7a2a2f7
Binary files /dev/null and b/marking_app/assets/images/4.0x/guide_page_gesture.png differ
diff --git a/marking_app/assets/images/4.0x/hide_question_id.png b/marking_app/assets/images/4.0x/hide_question_id.png
new file mode 100644
index 0000000..d768eda
Binary files /dev/null and b/marking_app/assets/images/4.0x/hide_question_id.png differ
diff --git a/marking_app/assets/images/4.0x/home_image.png b/marking_app/assets/images/4.0x/home_image.png
new file mode 100644
index 0000000..f5bfd22
Binary files /dev/null and b/marking_app/assets/images/4.0x/home_image.png differ
diff --git a/marking_app/assets/images/4.0x/ic_home_normal.png b/marking_app/assets/images/4.0x/ic_home_normal.png
new file mode 100644
index 0000000..d12ff70
Binary files /dev/null and b/marking_app/assets/images/4.0x/ic_home_normal.png differ
diff --git a/marking_app/assets/images/4.0x/ic_home_press.png b/marking_app/assets/images/4.0x/ic_home_press.png
new file mode 100644
index 0000000..fd6267a
Binary files /dev/null and b/marking_app/assets/images/4.0x/ic_home_press.png differ
diff --git a/marking_app/assets/images/4.0x/ic_marking_normal.png b/marking_app/assets/images/4.0x/ic_marking_normal.png
new file mode 100644
index 0000000..92eed63
Binary files /dev/null and b/marking_app/assets/images/4.0x/ic_marking_normal.png differ
diff --git a/marking_app/assets/images/4.0x/ic_marking_press.png b/marking_app/assets/images/4.0x/ic_marking_press.png
new file mode 100644
index 0000000..cc7b8e3
Binary files /dev/null and b/marking_app/assets/images/4.0x/ic_marking_press.png differ
diff --git a/marking_app/assets/images/4.0x/ic_mine_normal.png b/marking_app/assets/images/4.0x/ic_mine_normal.png
new file mode 100644
index 0000000..eeed1a9
Binary files /dev/null and b/marking_app/assets/images/4.0x/ic_mine_normal.png differ
diff --git a/marking_app/assets/images/4.0x/ic_mine_press.png b/marking_app/assets/images/4.0x/ic_mine_press.png
new file mode 100644
index 0000000..b994e8e
Binary files /dev/null and b/marking_app/assets/images/4.0x/ic_mine_press.png differ
diff --git a/marking_app/assets/images/4.0x/ic_report_normal.png b/marking_app/assets/images/4.0x/ic_report_normal.png
new file mode 100644
index 0000000..fad62fe
Binary files /dev/null and b/marking_app/assets/images/4.0x/ic_report_normal.png differ
diff --git a/marking_app/assets/images/4.0x/ic_report_press.png b/marking_app/assets/images/4.0x/ic_report_press.png
new file mode 100644
index 0000000..7ea1e8d
Binary files /dev/null and b/marking_app/assets/images/4.0x/ic_report_press.png differ
diff --git a/marking_app/assets/images/4.0x/ic_work_normal.png b/marking_app/assets/images/4.0x/ic_work_normal.png
new file mode 100644
index 0000000..29bd81d
Binary files /dev/null and b/marking_app/assets/images/4.0x/ic_work_normal.png differ
diff --git a/marking_app/assets/images/4.0x/ic_work_press.png b/marking_app/assets/images/4.0x/ic_work_press.png
new file mode 100644
index 0000000..431435f
Binary files /dev/null and b/marking_app/assets/images/4.0x/ic_work_press.png differ
diff --git a/marking_app/assets/images/4.0x/login_bgi.png b/marking_app/assets/images/4.0x/login_bgi.png
new file mode 100644
index 0000000..64bf904
Binary files /dev/null and b/marking_app/assets/images/4.0x/login_bgi.png differ
diff --git a/marking_app/assets/images/4.0x/logo.png b/marking_app/assets/images/4.0x/logo.png
new file mode 100644
index 0000000..a1a62e0
Binary files /dev/null and b/marking_app/assets/images/4.0x/logo.png differ
diff --git a/marking_app/assets/images/4.0x/marking_settings.png b/marking_app/assets/images/4.0x/marking_settings.png
new file mode 100644
index 0000000..dfb9409
Binary files /dev/null and b/marking_app/assets/images/4.0x/marking_settings.png differ
diff --git a/marking_app/assets/images/4.0x/not_data_bgm.png b/marking_app/assets/images/4.0x/not_data_bgm.png
new file mode 100644
index 0000000..400c065
Binary files /dev/null and b/marking_app/assets/images/4.0x/not_data_bgm.png differ
diff --git a/marking_app/assets/images/4.0x/personal_bgi.png b/marking_app/assets/images/4.0x/personal_bgi.png
new file mode 100644
index 0000000..a15351f
Binary files /dev/null and b/marking_app/assets/images/4.0x/personal_bgi.png differ
diff --git a/marking_app/assets/images/4.0x/report_home_icon_burst.png b/marking_app/assets/images/4.0x/report_home_icon_burst.png
new file mode 100644
index 0000000..f1b8009
Binary files /dev/null and b/marking_app/assets/images/4.0x/report_home_icon_burst.png differ
diff --git a/marking_app/assets/images/4.0x/report_home_icon_subject.png b/marking_app/assets/images/4.0x/report_home_icon_subject.png
new file mode 100644
index 0000000..f4c941a
Binary files /dev/null and b/marking_app/assets/images/4.0x/report_home_icon_subject.png differ
diff --git a/marking_app/assets/images/4.0x/report_home_top_img.png b/marking_app/assets/images/4.0x/report_home_top_img.png
new file mode 100644
index 0000000..786fa3d
Binary files /dev/null and b/marking_app/assets/images/4.0x/report_home_top_img.png differ
diff --git a/marking_app/assets/images/4.0x/report_level_bgm.png b/marking_app/assets/images/4.0x/report_level_bgm.png
new file mode 100644
index 0000000..e337828
Binary files /dev/null and b/marking_app/assets/images/4.0x/report_level_bgm.png differ
diff --git a/marking_app/assets/images/4.0x/review_error.png b/marking_app/assets/images/4.0x/review_error.png
new file mode 100644
index 0000000..6fdaf54
Binary files /dev/null and b/marking_app/assets/images/4.0x/review_error.png differ
diff --git a/marking_app/assets/images/4.0x/review_loding.png b/marking_app/assets/images/4.0x/review_loding.png
new file mode 100644
index 0000000..bb339fb
Binary files /dev/null and b/marking_app/assets/images/4.0x/review_loding.png differ
diff --git a/marking_app/assets/images/4.0x/rise.png b/marking_app/assets/images/4.0x/rise.png
new file mode 100644
index 0000000..afda948
Binary files /dev/null and b/marking_app/assets/images/4.0x/rise.png differ
diff --git a/marking_app/assets/images/4.0x/role_selection.png b/marking_app/assets/images/4.0x/role_selection.png
new file mode 100644
index 0000000..d456fce
Binary files /dev/null and b/marking_app/assets/images/4.0x/role_selection.png differ
diff --git a/marking_app/assets/images/4.0x/test_paper_loading_failed.png b/marking_app/assets/images/4.0x/test_paper_loading_failed.png
new file mode 100644
index 0000000..02adf68
Binary files /dev/null and b/marking_app/assets/images/4.0x/test_paper_loading_failed.png differ
diff --git a/marking_app/assets/images/4.0x/upgrade_dialog_bgc.png b/marking_app/assets/images/4.0x/upgrade_dialog_bgc.png
new file mode 100644
index 0000000..442b964
Binary files /dev/null and b/marking_app/assets/images/4.0x/upgrade_dialog_bgc.png differ
diff --git a/marking_app/assets/images/4.0x/vertical_screen_btn.png b/marking_app/assets/images/4.0x/vertical_screen_btn.png
new file mode 100644
index 0000000..43b456f
Binary files /dev/null and b/marking_app/assets/images/4.0x/vertical_screen_btn.png differ
diff --git a/marking_app/assets/images/abnormal_img.png b/marking_app/assets/images/abnormal_img.png
new file mode 100644
index 0000000..f3b3f74
Binary files /dev/null and b/marking_app/assets/images/abnormal_img.png differ
diff --git a/marking_app/assets/images/default_user_dead.png b/marking_app/assets/images/default_user_dead.png
new file mode 100644
index 0000000..2c68da1
Binary files /dev/null and b/marking_app/assets/images/default_user_dead.png differ
diff --git a/marking_app/assets/images/detailed_report_entry_bgm.png b/marking_app/assets/images/detailed_report_entry_bgm.png
new file mode 100644
index 0000000..05b372d
Binary files /dev/null and b/marking_app/assets/images/detailed_report_entry_bgm.png differ
diff --git a/marking_app/assets/images/do_exit_marking.png b/marking_app/assets/images/do_exit_marking.png
new file mode 100644
index 0000000..448102e
Binary files /dev/null and b/marking_app/assets/images/do_exit_marking.png differ
diff --git a/marking_app/assets/images/do_marking_answer.png b/marking_app/assets/images/do_marking_answer.png
new file mode 100644
index 0000000..1a219de
Binary files /dev/null and b/marking_app/assets/images/do_marking_answer.png differ
diff --git a/marking_app/assets/images/do_marking_test_paper.png b/marking_app/assets/images/do_marking_test_paper.png
new file mode 100644
index 0000000..4f7fdc3
Binary files /dev/null and b/marking_app/assets/images/do_marking_test_paper.png differ
diff --git a/marking_app/assets/images/equal.png b/marking_app/assets/images/equal.png
new file mode 100644
index 0000000..3043017
Binary files /dev/null and b/marking_app/assets/images/equal.png differ
diff --git a/marking_app/assets/images/exam_selection.png b/marking_app/assets/images/exam_selection.png
new file mode 100644
index 0000000..703ed52
Binary files /dev/null and b/marking_app/assets/images/exam_selection.png differ
diff --git a/marking_app/assets/images/fall.png b/marking_app/assets/images/fall.png
new file mode 100644
index 0000000..06ee370
Binary files /dev/null and b/marking_app/assets/images/fall.png differ
diff --git a/marking_app/assets/images/guide_page_gesture.png b/marking_app/assets/images/guide_page_gesture.png
new file mode 100644
index 0000000..11ff5db
Binary files /dev/null and b/marking_app/assets/images/guide_page_gesture.png differ
diff --git a/marking_app/assets/images/hide_question_id.png b/marking_app/assets/images/hide_question_id.png
new file mode 100644
index 0000000..77d72e0
Binary files /dev/null and b/marking_app/assets/images/hide_question_id.png differ
diff --git a/marking_app/assets/images/home_image.png b/marking_app/assets/images/home_image.png
new file mode 100644
index 0000000..a741eb7
Binary files /dev/null and b/marking_app/assets/images/home_image.png differ
diff --git a/marking_app/assets/images/ic_home_normal.png b/marking_app/assets/images/ic_home_normal.png
new file mode 100644
index 0000000..30eefd2
Binary files /dev/null and b/marking_app/assets/images/ic_home_normal.png differ
diff --git a/marking_app/assets/images/ic_home_press.png b/marking_app/assets/images/ic_home_press.png
new file mode 100644
index 0000000..efff317
Binary files /dev/null and b/marking_app/assets/images/ic_home_press.png differ
diff --git a/marking_app/assets/images/ic_marking_normal.png b/marking_app/assets/images/ic_marking_normal.png
new file mode 100644
index 0000000..19d22ca
Binary files /dev/null and b/marking_app/assets/images/ic_marking_normal.png differ
diff --git a/marking_app/assets/images/ic_marking_press.png b/marking_app/assets/images/ic_marking_press.png
new file mode 100644
index 0000000..383778c
Binary files /dev/null and b/marking_app/assets/images/ic_marking_press.png differ
diff --git a/marking_app/assets/images/ic_mine_normal.png b/marking_app/assets/images/ic_mine_normal.png
new file mode 100644
index 0000000..607d01d
Binary files /dev/null and b/marking_app/assets/images/ic_mine_normal.png differ
diff --git a/marking_app/assets/images/ic_mine_press.png b/marking_app/assets/images/ic_mine_press.png
new file mode 100644
index 0000000..9ffeb2d
Binary files /dev/null and b/marking_app/assets/images/ic_mine_press.png differ
diff --git a/marking_app/assets/images/ic_report_normal.png b/marking_app/assets/images/ic_report_normal.png
new file mode 100644
index 0000000..3e784da
Binary files /dev/null and b/marking_app/assets/images/ic_report_normal.png differ
diff --git a/marking_app/assets/images/ic_report_press.png b/marking_app/assets/images/ic_report_press.png
new file mode 100644
index 0000000..d00dd6f
Binary files /dev/null and b/marking_app/assets/images/ic_report_press.png differ
diff --git a/marking_app/assets/images/ic_work_normal.png b/marking_app/assets/images/ic_work_normal.png
new file mode 100644
index 0000000..a8cba73
Binary files /dev/null and b/marking_app/assets/images/ic_work_normal.png differ
diff --git a/marking_app/assets/images/ic_work_press.png b/marking_app/assets/images/ic_work_press.png
new file mode 100644
index 0000000..827705e
Binary files /dev/null and b/marking_app/assets/images/ic_work_press.png differ
diff --git a/marking_app/assets/images/login_bgi.png b/marking_app/assets/images/login_bgi.png
new file mode 100644
index 0000000..d102c3c
Binary files /dev/null and b/marking_app/assets/images/login_bgi.png differ
diff --git a/marking_app/assets/images/logo.png b/marking_app/assets/images/logo.png
new file mode 100644
index 0000000..c50a5e2
Binary files /dev/null and b/marking_app/assets/images/logo.png differ
diff --git a/marking_app/assets/images/marking_settings.png b/marking_app/assets/images/marking_settings.png
new file mode 100644
index 0000000..093774a
Binary files /dev/null and b/marking_app/assets/images/marking_settings.png differ
diff --git a/marking_app/assets/images/not_data_bgm.png b/marking_app/assets/images/not_data_bgm.png
new file mode 100644
index 0000000..7b15e94
Binary files /dev/null and b/marking_app/assets/images/not_data_bgm.png differ
diff --git a/marking_app/assets/images/personal_bgi.png b/marking_app/assets/images/personal_bgi.png
new file mode 100644
index 0000000..a83ea12
Binary files /dev/null and b/marking_app/assets/images/personal_bgi.png differ
diff --git a/marking_app/assets/images/report_home_icon_burst.png b/marking_app/assets/images/report_home_icon_burst.png
new file mode 100644
index 0000000..7715f37
Binary files /dev/null and b/marking_app/assets/images/report_home_icon_burst.png differ
diff --git a/marking_app/assets/images/report_home_icon_subject.png b/marking_app/assets/images/report_home_icon_subject.png
new file mode 100644
index 0000000..e5eef92
Binary files /dev/null and b/marking_app/assets/images/report_home_icon_subject.png differ
diff --git a/marking_app/assets/images/report_home_top_img.png b/marking_app/assets/images/report_home_top_img.png
new file mode 100644
index 0000000..ae19474
Binary files /dev/null and b/marking_app/assets/images/report_home_top_img.png differ
diff --git a/marking_app/assets/images/report_level_bgm.png b/marking_app/assets/images/report_level_bgm.png
new file mode 100644
index 0000000..e9c7338
Binary files /dev/null and b/marking_app/assets/images/report_level_bgm.png differ
diff --git a/marking_app/assets/images/review_error.png b/marking_app/assets/images/review_error.png
new file mode 100644
index 0000000..160fc8d
Binary files /dev/null and b/marking_app/assets/images/review_error.png differ
diff --git a/marking_app/assets/images/review_loding.png b/marking_app/assets/images/review_loding.png
new file mode 100644
index 0000000..bdaf49e
Binary files /dev/null and b/marking_app/assets/images/review_loding.png differ
diff --git a/marking_app/assets/images/rise.png b/marking_app/assets/images/rise.png
new file mode 100644
index 0000000..6538890
Binary files /dev/null and b/marking_app/assets/images/rise.png differ
diff --git a/marking_app/assets/images/role_selection.png b/marking_app/assets/images/role_selection.png
new file mode 100644
index 0000000..4fbdb17
Binary files /dev/null and b/marking_app/assets/images/role_selection.png differ
diff --git a/marking_app/assets/images/test_paper_loading_failed.png b/marking_app/assets/images/test_paper_loading_failed.png
new file mode 100644
index 0000000..65d323f
Binary files /dev/null and b/marking_app/assets/images/test_paper_loading_failed.png differ
diff --git a/marking_app/assets/images/upgrade_dialog_bgc.png b/marking_app/assets/images/upgrade_dialog_bgc.png
new file mode 100644
index 0000000..497d624
Binary files /dev/null and b/marking_app/assets/images/upgrade_dialog_bgc.png differ
diff --git a/marking_app/assets/images/vertical_screen_btn.png b/marking_app/assets/images/vertical_screen_btn.png
new file mode 100644
index 0000000..bb3c388
Binary files /dev/null and b/marking_app/assets/images/vertical_screen_btn.png differ
diff --git a/marking_app/ios/.gitignore b/marking_app/ios/.gitignore
new file mode 100644
index 0000000..7a7f987
--- /dev/null
+++ b/marking_app/ios/.gitignore
@@ -0,0 +1,34 @@
+**/dgph
+*.mode1v3
+*.mode2v3
+*.moved-aside
+*.pbxuser
+*.perspectivev3
+**/*sync/
+.sconsign.dblite
+.tags*
+**/.vagrant/
+**/DerivedData/
+Icon?
+**/Pods/
+**/.symlinks/
+profile
+xcuserdata
+**/.generated/
+Flutter/App.framework
+Flutter/Flutter.framework
+Flutter/Flutter.podspec
+Flutter/Generated.xcconfig
+Flutter/ephemeral/
+Flutter/app.flx
+Flutter/app.zip
+Flutter/flutter_assets/
+Flutter/flutter_export_environment.sh
+ServiceDefinitions.json
+Runner/GeneratedPluginRegistrant.*
+
+# Exceptions to above rules.
+!default.mode1v3
+!default.mode2v3
+!default.pbxuser
+!default.perspectivev3
diff --git a/marking_app/ios/Flutter/AppFrameworkInfo.plist b/marking_app/ios/Flutter/AppFrameworkInfo.plist
new file mode 100644
index 0000000..9625e10
--- /dev/null
+++ b/marking_app/ios/Flutter/AppFrameworkInfo.plist
@@ -0,0 +1,26 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleExecutable
+ App
+ CFBundleIdentifier
+ io.flutter.flutter.app
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ App
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1.0
+ MinimumOSVersion
+ 11.0
+
+
diff --git a/marking_app/ios/Flutter/Debug.xcconfig b/marking_app/ios/Flutter/Debug.xcconfig
new file mode 100644
index 0000000..ec97fc6
--- /dev/null
+++ b/marking_app/ios/Flutter/Debug.xcconfig
@@ -0,0 +1,2 @@
+#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
+#include "Generated.xcconfig"
diff --git a/marking_app/ios/Flutter/Release.xcconfig b/marking_app/ios/Flutter/Release.xcconfig
new file mode 100644
index 0000000..c4855bf
--- /dev/null
+++ b/marking_app/ios/Flutter/Release.xcconfig
@@ -0,0 +1,2 @@
+#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
+#include "Generated.xcconfig"
diff --git a/marking_app/ios/Podfile b/marking_app/ios/Podfile
new file mode 100644
index 0000000..256af1a
--- /dev/null
+++ b/marking_app/ios/Podfile
@@ -0,0 +1,42 @@
+# Uncomment this line to define a global platform for your project
+# source 'https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git'
+platform :ios, '11.0'
+
+# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
+ENV['COCOAPODS_DISABLE_STATS'] = 'true'
+
+project 'Runner', {
+ 'Debug' => :debug,
+ 'Profile' => :release,
+ 'Release' => :release,
+}
+
+def flutter_root
+ generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
+ unless File.exist?(generated_xcode_build_settings_path)
+ raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
+ end
+
+ File.foreach(generated_xcode_build_settings_path) do |line|
+ matches = line.match(/FLUTTER_ROOT\=(.*)/)
+ return matches[1].strip if matches
+ end
+ raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
+end
+
+require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
+
+flutter_ios_podfile_setup
+
+target 'Runner' do
+ use_frameworks!
+ use_modular_headers!
+
+ flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
+end
+
+post_install do |installer|
+ installer.pods_project.targets.each do |target|
+ flutter_additional_ios_build_settings(target)
+ end
+end
diff --git a/marking_app/ios/Runner.xcodeproj/project.pbxproj b/marking_app/ios/Runner.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..353ac32
--- /dev/null
+++ b/marking_app/ios/Runner.xcodeproj/project.pbxproj
@@ -0,0 +1,567 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 54;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 0BD030502994F44800EB7527 /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0BD0304F2994F44800EB7527 /* Launch Screen.storyboard */; };
+ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
+ 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
+ 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
+ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
+ 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
+ EE3BAAE20F3BEC99D310EC6B /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9AE64B664D96A59005B338D3 /* Pods_Runner.framework */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 9705A1C41CF9048500538489 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 0BD0304F2994F44800EB7527 /* Launch Screen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = "Launch Screen.storyboard"; sourceTree = ""; };
+ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; };
+ 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; };
+ 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; };
+ 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; };
+ 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
+ 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; };
+ 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; };
+ 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; };
+ 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
+ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
+ 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ 9AE64B664D96A59005B338D3 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ C10C2C5ACC7897B6B2214829 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; };
+ C6B2A9330D892EC648722E1F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; };
+ ED6D5F149381C3F07E8271D9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 97C146EB1CF9000F007C117D /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ EE3BAAE20F3BEC99D310EC6B /* Pods_Runner.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 050DAC6E1AD50AF47A1F4114 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 9AE64B664D96A59005B338D3 /* Pods_Runner.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+ 9740EEB11CF90186004384FC /* Flutter */ = {
+ isa = PBXGroup;
+ children = (
+ 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
+ 9740EEB21CF90195004384FC /* Debug.xcconfig */,
+ 7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
+ 9740EEB31CF90195004384FC /* Generated.xcconfig */,
+ );
+ name = Flutter;
+ sourceTree = "";
+ };
+ 97C146E51CF9000F007C117D = {
+ isa = PBXGroup;
+ children = (
+ 9740EEB11CF90186004384FC /* Flutter */,
+ 97C146F01CF9000F007C117D /* Runner */,
+ 97C146EF1CF9000F007C117D /* Products */,
+ C207720910912611749C3350 /* Pods */,
+ 050DAC6E1AD50AF47A1F4114 /* Frameworks */,
+ );
+ sourceTree = "";
+ };
+ 97C146EF1CF9000F007C117D /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 97C146EE1CF9000F007C117D /* Runner.app */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 97C146F01CF9000F007C117D /* Runner */ = {
+ isa = PBXGroup;
+ children = (
+ 97C146FA1CF9000F007C117D /* Main.storyboard */,
+ 97C146FD1CF9000F007C117D /* Assets.xcassets */,
+ 97C147021CF9000F007C117D /* Info.plist */,
+ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
+ 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
+ 74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
+ 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
+ 0BD0304F2994F44800EB7527 /* Launch Screen.storyboard */,
+ );
+ path = Runner;
+ sourceTree = "";
+ };
+ C207720910912611749C3350 /* Pods */ = {
+ isa = PBXGroup;
+ children = (
+ C10C2C5ACC7897B6B2214829 /* Pods-Runner.debug.xcconfig */,
+ C6B2A9330D892EC648722E1F /* Pods-Runner.release.xcconfig */,
+ ED6D5F149381C3F07E8271D9 /* Pods-Runner.profile.xcconfig */,
+ );
+ path = Pods;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 97C146ED1CF9000F007C117D /* Runner */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
+ buildPhases = (
+ 1C9AEEDAA5EE4DF0C315D220 /* [CP] Check Pods Manifest.lock */,
+ 9740EEB61CF901F6004384FC /* Run Script */,
+ 97C146EA1CF9000F007C117D /* Sources */,
+ 97C146EB1CF9000F007C117D /* Frameworks */,
+ 97C146EC1CF9000F007C117D /* Resources */,
+ 9705A1C41CF9048500538489 /* Embed Frameworks */,
+ 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
+ 3BB2ED9F63943D7AA67A4542 /* [CP] Embed Pods Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = Runner;
+ productName = Runner;
+ productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 97C146E61CF9000F007C117D /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 1300;
+ ORGANIZATIONNAME = "";
+ TargetAttributes = {
+ 97C146ED1CF9000F007C117D = {
+ CreatedOnToolsVersion = 7.3.1;
+ LastSwiftMigration = 1100;
+ };
+ };
+ };
+ buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
+ compatibilityVersion = "Xcode 9.3";
+ developmentRegion = en;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ );
+ mainGroup = 97C146E51CF9000F007C117D;
+ productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 97C146ED1CF9000F007C117D /* Runner */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 97C146EC1CF9000F007C117D /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
+ 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
+ 0BD030502994F44800EB7527 /* Launch Screen.storyboard in Resources */,
+ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 1C9AEEDAA5EE4DF0C315D220 /* [CP] Check Pods Manifest.lock */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+ "${PODS_ROOT}/Manifest.lock",
+ );
+ name = "[CP] Check Pods Manifest.lock";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+ showEnvVarsInLog = 0;
+ };
+ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
+ isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
+ );
+ name = "Thin Binary";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
+ };
+ 3BB2ED9F63943D7AA67A4542 /* [CP] Embed Pods Frameworks */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
+ );
+ name = "[CP] Embed Pods Frameworks";
+ outputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ 9740EEB61CF901F6004384FC /* Run Script */ = {
+ isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Run Script";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build\n";
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 97C146EA1CF9000F007C117D /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
+ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ 97C146FA1CF9000F007C117D /* Main.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 97C146FB1CF9000F007C117D /* Base */,
+ );
+ name = Main.storyboard;
+ sourceTree = "";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ 249021D3217E4FDB00AE95B9 /* Profile */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ SDKROOT = iphoneos;
+ SUPPORTED_PLATFORMS = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Profile;
+ };
+ 249021D4217E4FDB00AE95B9 /* Profile */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES;
+ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = "";
+ CLANG_ENABLE_MODULES = YES;
+ CURRENT_PROJECT_VERSION = 14;
+ DEVELOPMENT_TEAM = CYDU583KN6;
+ ENABLE_BITCODE = NO;
+ INFOPLIST_FILE = Runner/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ MARKETING_VERSION = 1.0.92;
+ PRODUCT_BUNDLE_IDENTIFIER = com.example.markingApp;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Profile;
+ };
+ 97C147031CF9000F007C117D /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ 97C147041CF9000F007C117D /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 11.0;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ SDKROOT = iphoneos;
+ SUPPORTED_PLATFORMS = iphoneos;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ 97C147061CF9000F007C117D /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES;
+ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = "";
+ CLANG_ENABLE_MODULES = YES;
+ CURRENT_PROJECT_VERSION = 14;
+ DEVELOPMENT_TEAM = CYDU583KN6;
+ ENABLE_BITCODE = NO;
+ INFOPLIST_FILE = Runner/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ MARKETING_VERSION = 1.0.92;
+ PRODUCT_BUNDLE_IDENTIFIER = com.example.markingApp;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Debug;
+ };
+ 97C147071CF9000F007C117D /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES;
+ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = "";
+ CLANG_ENABLE_MODULES = YES;
+ CURRENT_PROJECT_VERSION = 14;
+ DEVELOPMENT_TEAM = CYDU583KN6;
+ ENABLE_BITCODE = NO;
+ INFOPLIST_FILE = Runner/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ MARKETING_VERSION = 1.0.92;
+ PRODUCT_BUNDLE_IDENTIFIER = com.example.markingApp;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 97C147031CF9000F007C117D /* Debug */,
+ 97C147041CF9000F007C117D /* Release */,
+ 249021D3217E4FDB00AE95B9 /* Profile */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 97C147061CF9000F007C117D /* Debug */,
+ 97C147071CF9000F007C117D /* Release */,
+ 249021D4217E4FDB00AE95B9 /* Profile */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 97C146E61CF9000F007C117D /* Project object */;
+}
diff --git a/marking_app/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/marking_app/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..919434a
--- /dev/null
+++ b/marking_app/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/marking_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/marking_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000..18d9810
--- /dev/null
+++ b/marking_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/marking_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/marking_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
new file mode 100644
index 0000000..f9b0d7c
--- /dev/null
+++ b/marking_app/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
@@ -0,0 +1,8 @@
+
+
+
+
+ PreviewsEnabled
+
+
+
diff --git a/marking_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/marking_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
new file mode 100644
index 0000000..c87d15a
--- /dev/null
+++ b/marking_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/marking_app/ios/Runner.xcworkspace/contents.xcworkspacedata b/marking_app/ios/Runner.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..21a3cc1
--- /dev/null
+++ b/marking_app/ios/Runner.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
diff --git a/marking_app/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/marking_app/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000..18d9810
--- /dev/null
+++ b/marking_app/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/marking_app/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/marking_app/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
new file mode 100644
index 0000000..f9b0d7c
--- /dev/null
+++ b/marking_app/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
@@ -0,0 +1,8 @@
+
+
+
+
+ PreviewsEnabled
+
+
+
diff --git a/marking_app/ios/Runner/AppDelegate.swift b/marking_app/ios/Runner/AppDelegate.swift
new file mode 100644
index 0000000..1ae4b2e
--- /dev/null
+++ b/marking_app/ios/Runner/AppDelegate.swift
@@ -0,0 +1,14 @@
+import UIKit
+import Flutter
+
+@UIApplicationMain
+@objc class AppDelegate: FlutterAppDelegate {
+ override func application(
+ _ application: UIApplication,
+ didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
+ ) -> Bool {
+ Thread.sleep(forTimeInterval: 2)
+ GeneratedPluginRegistrant.register(with: self)
+ return super.application(application, didFinishLaunchingWithOptions: launchOptions)
+ }
+}
diff --git a/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 0000000..728e6c3
--- /dev/null
+++ b/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,122 @@
+{
+ "images": [
+ {
+ "size": "20x20",
+ "idiom": "iphone",
+ "filename": "icon-20@2x.png",
+ "scale": "2x"
+ },
+ {
+ "size": "20x20",
+ "idiom": "iphone",
+ "filename": "icon-20@3x.png",
+ "scale": "3x"
+ },
+ {
+ "size": "29x29",
+ "idiom": "iphone",
+ "filename": "icon-29.png",
+ "scale": "1x"
+ },
+ {
+ "size": "29x29",
+ "idiom": "iphone",
+ "filename": "icon-29@2x.png",
+ "scale": "2x"
+ },
+ {
+ "size": "29x29",
+ "idiom": "iphone",
+ "filename": "icon-29@3x.png",
+ "scale": "3x"
+ },
+ {
+ "size": "40x40",
+ "idiom": "iphone",
+ "filename": "icon-40@2x.png",
+ "scale": "2x"
+ },
+ {
+ "size": "40x40",
+ "idiom": "iphone",
+ "filename": "icon-40@3x.png",
+ "scale": "3x"
+ },
+ {
+ "size": "60x60",
+ "idiom": "iphone",
+ "filename": "icon-60@2x.png",
+ "scale": "2x"
+ },
+ {
+ "size": "60x60",
+ "idiom": "iphone",
+ "filename": "icon-60@3x.png",
+ "scale": "3x"
+ },
+ {
+ "size": "20x20",
+ "idiom": "ipad",
+ "filename": "icon-20-ipad.png",
+ "scale": "1x"
+ },
+ {
+ "size": "20x20",
+ "idiom": "ipad",
+ "filename": "icon-20@2x-ipad.png",
+ "scale": "2x"
+ },
+ {
+ "size": "29x29",
+ "idiom": "ipad",
+ "filename": "icon-29-ipad.png",
+ "scale": "1x"
+ },
+ {
+ "size": "29x29",
+ "idiom": "ipad",
+ "filename": "icon-29@2x-ipad.png",
+ "scale": "2x"
+ },
+ {
+ "size": "40x40",
+ "idiom": "ipad",
+ "filename": "icon-40.png",
+ "scale": "1x"
+ },
+ {
+ "size": "40x40",
+ "idiom": "ipad",
+ "filename": "icon-40@2x.png",
+ "scale": "2x"
+ },
+ {
+ "size": "76x76",
+ "idiom": "ipad",
+ "filename": "icon-76.png",
+ "scale": "1x"
+ },
+ {
+ "size": "76x76",
+ "idiom": "ipad",
+ "filename": "icon-76@2x.png",
+ "scale": "2x"
+ },
+ {
+ "size": "83.5x83.5",
+ "idiom": "ipad",
+ "filename": "icon-83.5@2x.png",
+ "scale": "2x"
+ },
+ {
+ "size": "1024x1024",
+ "idiom": "ios-marketing",
+ "filename": "icon-1024.png",
+ "scale": "1x"
+ }
+ ],
+ "info": {
+ "version": 1,
+ "author": "icon.wuruihong.com"
+ }
+}
\ No newline at end of file
diff --git a/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-1024.png b/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-1024.png
new file mode 100644
index 0000000..2d30d56
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-1024.png differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-20-ipad.png b/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-20-ipad.png
new file mode 100644
index 0000000..6752d55
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-20-ipad.png differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-20@2x-ipad.png b/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-20@2x-ipad.png
new file mode 100644
index 0000000..2ac12a6
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-20@2x-ipad.png differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png b/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png
new file mode 100644
index 0000000..2ac12a6
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png b/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png
new file mode 100644
index 0000000..6e173e4
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29-ipad.png b/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29-ipad.png
new file mode 100644
index 0000000..8b589c6
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29-ipad.png differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29.png b/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29.png
new file mode 100644
index 0000000..8b589c6
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29.png differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29@2x-ipad.png b/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29@2x-ipad.png
new file mode 100644
index 0000000..25de1d7
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29@2x-ipad.png differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png b/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png
new file mode 100644
index 0000000..25de1d7
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png b/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png
new file mode 100644
index 0000000..559e028
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-40.png b/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-40.png
new file mode 100644
index 0000000..2ac12a6
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-40.png differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png b/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png
new file mode 100644
index 0000000..7acf82a
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png b/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png
new file mode 100644
index 0000000..34fc19b
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png b/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png
new file mode 100644
index 0000000..34fc19b
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png b/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png
new file mode 100644
index 0000000..1d955a6
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-76.png b/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-76.png
new file mode 100644
index 0000000..00bbb44
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-76.png differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png b/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png
new file mode 100644
index 0000000..91d0196
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png b/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png
new file mode 100644
index 0000000..112f8a6
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/Contents.json b/marking_app/ios/Runner/Assets.xcassets/Contents.json
new file mode 100644
index 0000000..73c0059
--- /dev/null
+++ b/marking_app/ios/Runner/Assets.xcassets/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/1125x2436.png b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/1125x2436.png
new file mode 100644
index 0000000..60cd0f6
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/1125x2436.png differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/1242x2208.png b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/1242x2208.png
new file mode 100644
index 0000000..119c566
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/1242x2208.png differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/1242x2688.png b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/1242x2688.png
new file mode 100644
index 0000000..4f56032
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/1242x2688.png differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/1792X828.png b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/1792X828.png
new file mode 100644
index 0000000..8ed7873
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/1792X828.png differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/2208x1242.png b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/2208x1242.png
new file mode 100644
index 0000000..8042333
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/2208x1242.png differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/2436x1125.png b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/2436x1125.png
new file mode 100644
index 0000000..38c55f1
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/2436x1125.png differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/2688x1242.png b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/2688x1242.png
new file mode 100644
index 0000000..20677db
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/2688x1242.png differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/301697019082_.pic.jpg b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/301697019082_.pic.jpg
new file mode 100644
index 0000000..a0b0f00
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/301697019082_.pic.jpg differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/311697019082_.pic.jpg b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/311697019082_.pic.jpg
new file mode 100644
index 0000000..b509312
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/311697019082_.pic.jpg differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/320x480.png b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/320x480.png
new file mode 100644
index 0000000..a1e808b
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/320x480.png differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/321697019083_.pic.jpg b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/321697019083_.pic.jpg
new file mode 100644
index 0000000..c6d6508
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/321697019083_.pic.jpg differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/331697019083_.pic.jpg b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/331697019083_.pic.jpg
new file mode 100644
index 0000000..4bb4795
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/331697019083_.pic.jpg differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/341697019083_.pic.jpg b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/341697019083_.pic.jpg
new file mode 100644
index 0000000..a8447f3
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/341697019083_.pic.jpg differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/351697019083_.pic.jpg b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/351697019083_.pic.jpg
new file mode 100644
index 0000000..fd64385
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/351697019083_.pic.jpg differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/640x1136 1.png b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/640x1136 1.png
new file mode 100644
index 0000000..6842710
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/640x1136 1.png differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/640x1136.png b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/640x1136.png
new file mode 100644
index 0000000..7ff8715
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/640x1136.png differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/640x960 1.png b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/640x960 1.png
new file mode 100644
index 0000000..c9062e8
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/640x960 1.png differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/640x960.png b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/640x960.png
new file mode 100644
index 0000000..de84333
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/640x960.png differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/750x1334.png b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/750x1334.png
new file mode 100644
index 0000000..a4d47a8
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/750x1334.png differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/828x1792.png b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/828x1792.png
new file mode 100644
index 0000000..94ad6ab
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/828x1792.png differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/Contents.json b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/Contents.json
new file mode 100644
index 0000000..a148e93
--- /dev/null
+++ b/marking_app/ios/Runner/Assets.xcassets/LaunchImage.launchimage/Contents.json
@@ -0,0 +1,182 @@
+{
+ "images" : [
+ {
+ "extent" : "full-screen",
+ "filename" : "1242x2688.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "12.0",
+ "orientation" : "portrait",
+ "scale" : "3x",
+ "subtype" : "2688h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "2688x1242.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "12.0",
+ "orientation" : "landscape",
+ "scale" : "3x",
+ "subtype" : "2688h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "828x1792.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "12.0",
+ "orientation" : "portrait",
+ "scale" : "2x",
+ "subtype" : "1792h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "1792X828.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "12.0",
+ "orientation" : "landscape",
+ "scale" : "2x",
+ "subtype" : "1792h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "321697019083_.pic.jpg",
+ "idiom" : "ipad",
+ "minimum-system-version" : "12.0",
+ "orientation" : "portrait",
+ "scale" : "2x",
+ "subtype" : "2388h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "351697019083_.pic.jpg",
+ "idiom" : "ipad",
+ "minimum-system-version" : "12.0",
+ "orientation" : "landscape",
+ "scale" : "2x",
+ "subtype" : "2388h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "1125x2436.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "11.0",
+ "orientation" : "portrait",
+ "scale" : "3x",
+ "subtype" : "2436h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "2436x1125.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "11.0",
+ "orientation" : "landscape",
+ "scale" : "3x",
+ "subtype" : "2436h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "311697019082_.pic.jpg",
+ "idiom" : "ipad",
+ "minimum-system-version" : "10.0",
+ "orientation" : "portrait",
+ "scale" : "2x",
+ "subtype" : "2224h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "341697019083_.pic.jpg",
+ "idiom" : "ipad",
+ "minimum-system-version" : "10.0",
+ "orientation" : "landscape",
+ "scale" : "2x",
+ "subtype" : "2224h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "331697019083_.pic.jpg",
+ "idiom" : "ipad",
+ "minimum-system-version" : "9.0",
+ "orientation" : "portrait",
+ "scale" : "2x",
+ "subtype" : "1366h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "301697019082_.pic.jpg",
+ "idiom" : "ipad",
+ "minimum-system-version" : "9.0",
+ "orientation" : "landscape",
+ "scale" : "2x",
+ "subtype" : "1366h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "1242x2208.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "8.0",
+ "orientation" : "portrait",
+ "scale" : "3x",
+ "subtype" : "736h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "2208x1242.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "8.0",
+ "orientation" : "landscape",
+ "scale" : "3x",
+ "subtype" : "736h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "750x1334.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "8.0",
+ "orientation" : "portrait",
+ "scale" : "2x",
+ "subtype" : "667h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "640x960.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "7.0",
+ "orientation" : "portrait",
+ "scale" : "2x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "640x1136.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "7.0",
+ "orientation" : "portrait",
+ "scale" : "2x",
+ "subtype" : "retina4"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "320x480.png",
+ "idiom" : "iphone",
+ "orientation" : "portrait",
+ "scale" : "1x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "640x960 1.png",
+ "idiom" : "iphone",
+ "orientation" : "portrait",
+ "scale" : "2x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "640x1136 1.png",
+ "idiom" : "iphone",
+ "orientation" : "portrait",
+ "scale" : "2x",
+ "subtype" : "retina4"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/marking_app/ios/Runner/Assets.xcassets/laubimage.imageset/1242x2208.png b/marking_app/ios/Runner/Assets.xcassets/laubimage.imageset/1242x2208.png
new file mode 100644
index 0000000..119c566
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/laubimage.imageset/1242x2208.png differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/laubimage.imageset/640x1136 1.png b/marking_app/ios/Runner/Assets.xcassets/laubimage.imageset/640x1136 1.png
new file mode 100644
index 0000000..6842710
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/laubimage.imageset/640x1136 1.png differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/laubimage.imageset/750x1334.png b/marking_app/ios/Runner/Assets.xcassets/laubimage.imageset/750x1334.png
new file mode 100644
index 0000000..3a9befa
Binary files /dev/null and b/marking_app/ios/Runner/Assets.xcassets/laubimage.imageset/750x1334.png differ
diff --git a/marking_app/ios/Runner/Assets.xcassets/laubimage.imageset/Contents.json b/marking_app/ios/Runner/Assets.xcassets/laubimage.imageset/Contents.json
new file mode 100644
index 0000000..f9d8994
--- /dev/null
+++ b/marking_app/ios/Runner/Assets.xcassets/laubimage.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "640x1136 1.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "750x1334.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "1242x2208.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/marking_app/ios/Runner/Base.lproj/LaunchScreen.storyboard b/marking_app/ios/Runner/Base.lproj/LaunchScreen.storyboard
new file mode 100644
index 0000000..f2e259c
--- /dev/null
+++ b/marking_app/ios/Runner/Base.lproj/LaunchScreen.storyboard
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/marking_app/ios/Runner/Base.lproj/Main.storyboard b/marking_app/ios/Runner/Base.lproj/Main.storyboard
new file mode 100644
index 0000000..4188780
--- /dev/null
+++ b/marking_app/ios/Runner/Base.lproj/Main.storyboard
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/marking_app/ios/Runner/Info.plist b/marking_app/ios/Runner/Info.plist
new file mode 100644
index 0000000..747360c
--- /dev/null
+++ b/marking_app/ios/Runner/Info.plist
@@ -0,0 +1,71 @@
+
+
+
+
+ CADisableMinimumFrameDurationOnPhone
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleDisplayName
+ 学而有道
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ marking_app
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ $(FLUTTER_BUILD_NAME)
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ $(FLUTTER_BUILD_NUMBER)
+ LSApplicationQueriesSchemes
+
+ sms
+ tel
+
+ LSRequiresIPhoneOS
+
+ NSCameraUsageDescription
+ Used to demonstrate image picker plugin
+ NSMicrophoneUsageDescription
+ Used to capture audio for image picker plugin
+ NSPhotoLibraryUsageDescription
+ Used to demonstrate image picker plugin
+ UIApplicationSceneManifest
+
+ UIApplicationSupportsMultipleScenes
+
+ UISceneConfigurations
+
+
+ UIApplicationSupportsIndirectInputEvents
+
+ UILaunchStoryboardName
+ Launch Screen.storyboard
+ UIMainStoryboardFile
+ Main
+ UIRequiresFullScreen
+
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UIViewControllerBasedStatusBarAppearance
+
+
+
diff --git a/marking_app/ios/Runner/Launch Screen.storyboard b/marking_app/ios/Runner/Launch Screen.storyboard
new file mode 100644
index 0000000..9bc26f7
--- /dev/null
+++ b/marking_app/ios/Runner/Launch Screen.storyboard
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/marking_app/ios/Runner/Runner-Bridging-Header.h b/marking_app/ios/Runner/Runner-Bridging-Header.h
new file mode 100644
index 0000000..308a2a5
--- /dev/null
+++ b/marking_app/ios/Runner/Runner-Bridging-Header.h
@@ -0,0 +1 @@
+#import "GeneratedPluginRegistrant.h"
diff --git a/marking_app/lib/common/config/request_config.dart b/marking_app/lib/common/config/request_config.dart
new file mode 100644
index 0000000..cb14e94
--- /dev/null
+++ b/marking_app/lib/common/config/request_config.dart
@@ -0,0 +1,74 @@
+/*
+ * @Author: wangyang 1147192855@qq.com
+ * @Date: 2022-07-13 11:28:23
+ * @LastEditors: wangyang 1147192855@qq.com
+ * @LastEditTime: 2022-09-14 11:17:20
+ * @FilePath: \marking_app\lib\config\RequestConfig.dart
+ * @Description: 请求工具类
+ */
+import 'package:marking_app/common/model/common/base_page.dart';
+
+class RequestConfig {
+ /* 测试地址
+ static const devBaseUrl = "http://192.168.2.9:6600"; // 测试环境 ==> 基本请求接口
+ // static const devBaseUrl = "http://192.168.2.8:6700"; // 测试环境 ==> 基本请求接口
+ static const devLoginBaseUrl = "http://192.168.2.9:6400"; // 基本请求接口
+ static const devBaseUrlOfReport = "http://192.168.2.9:4000"; // 获取报告接口*/
+
+ static const devBaseUrl = "https://mk-api.23544.com/mb-cli"; // 基本请求
+ static const devLoginBaseUrl = "https://mk-api.23544.com"; // 登录接口
+ static const devBaseUrlOfReport = "https://dc-api.23544.com"; // 获取报告接口
+
+ /* 正式地址 */
+ static const proBaseUrl = "https://mk-api.23544.com/mb-cli"; // 基本请求
+ static const proLoginBaseUrl = "https://mk-api.23544.com"; // 登录接口
+ static const proBaseUrlOfReport = "https://dc-api.23544.com"; // 获取报告接口
+ static const proBaseUrlOfHomework = "https://mk-hw.23544.com/hw"; // 获取作业接口
+
+ static const hwProxyKeywords = "/hw"; // 作业代理条件关键字
+
+ // https://mk-api.23544.com/hw/hw/api/Task/answer
+ // http://192.168.2.9:6400/hw/api/Task/answer
+
+ static RequestConfig? _instance;
+ String baseUrl;
+ String loginBaseUrl;
+ String baseUrlOfReport;
+
+ static const connectTimeout = 8000; // 连接超时
+ static const receiveTimeout = 8000; // 接收超时
+
+ static const bool requestDataPrinting = true; // 打印返回数据
+ static const bool printSwitch = true; // 打印返回数据
+
+ static const successCode = 200; // 返回成功code
+ static final BasePage basePage = BasePage(1, 10); // 分页参数
+
+ // 私有化构造函数,防止外部直接实例化
+// 私有化构造函数,防止外部直接实例化
+ RequestConfig._({required this.baseUrl, required this.baseUrlOfReport, required this.loginBaseUrl});
+
+ factory RequestConfig() {
+ if (_instance == null) {
+ late String newBaseUrl;
+ late String newBaseUrlOfReport;
+ late String newLoginBaseUrl;
+
+ if (bool.fromEnvironment('dart.vm.product')) {
+ // 正式环境下的代码
+
+ newLoginBaseUrl = proLoginBaseUrl;
+ newBaseUrl = proBaseUrl;
+ newBaseUrlOfReport = proBaseUrlOfReport;
+ } else {
+ // 在生产环境下执行的代码
+ newBaseUrl = devBaseUrl;
+ newBaseUrlOfReport = devBaseUrlOfReport;
+ newLoginBaseUrl = devLoginBaseUrl;
+ }
+ _instance =
+ RequestConfig._(baseUrl: newBaseUrl, baseUrlOfReport: newBaseUrlOfReport, loginBaseUrl: newLoginBaseUrl);
+ }
+ return _instance!;
+ }
+}
diff --git a/marking_app/lib/common/mixin/common.dart b/marking_app/lib/common/mixin/common.dart
new file mode 100644
index 0000000..def6f47
--- /dev/null
+++ b/marking_app/lib/common/mixin/common.dart
@@ -0,0 +1,56 @@
+/*
+ * @Author: wangyang 1147192855@qq.com
+ * @Date: 2022-07-19 15:34:22
+ * @LastEditors: wangyang 1147192855@qq.com
+ * @LastEditTime: 2022-09-27 11:13:01
+ * @FilePath: \marking_app\lib\utils\easy_refresh\ss.dart
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+import 'package:dio/dio.dart';
+import 'package:flutter/material.dart';
+import 'package:marking_app/common/config/request_config.dart';
+import 'package:marking_app/routes/RouterManager.dart';
+import 'package:marking_app/utils/index.dart';
+import 'package:marking_app/utils/request/rest_client.dart';
+import 'package:marking_app/utils/request/rest_client_report.dart';
+import 'package:marking_app/utils/request/rest_dio.dart';
+import 'package:marking_app/utils/the_global.dart';
+
+mixin CommonMixin {
+ // 获取DIO
+ Future getDio() async => await RestDio().getDio();
+
+ // 获取 CLIENT
+ Future getClient() async {
+ Dio dio = await getDio();
+ return RestClient(dio, baseUrl: RequestConfig().baseUrl);
+ }
+
+ // 获取 CLIENT
+ Future getClientReport() async {
+ Dio dio = await getDio();
+ return RestClientReport(dio, baseUrl: RequestConfig().baseUrlOfReport);
+ }
+
+ void setTimeOut(int seconds, call) => Future.delayed(Duration(seconds: seconds), call);
+
+ // 执行 context
+ void getGlobalKey(Function(BuildContext context) call) {
+ Future.delayed(const Duration(seconds: 0)).then((onValue) {
+ BuildContext context = TheGlobal.navigatorKey.currentState!.overlay!.context;
+ call(context);
+ });
+ }
+
+ // 异常处理信息
+ void returnExceptionPrompt(context, err) {
+ if (err is DioError) {
+ ExceptionHandle.exceptionPrompt(context, err.error);
+ }
+ }
+
+ void toLoginPage(BuildContext context) {
+ RouterManager.router.navigateTo(context, RouterManager.loginPath, clearStack: true, transition: getTransition());
+ }
+}
diff --git a/marking_app/lib/common/model/common/base_page.dart b/marking_app/lib/common/model/common/base_page.dart
new file mode 100644
index 0000000..375cd1a
--- /dev/null
+++ b/marking_app/lib/common/model/common/base_page.dart
@@ -0,0 +1,31 @@
+/*
+ * @Author: wangyang 1147192855@qq.com
+ * @Date: 2022-07-19 16:17:38
+ * @LastEditors: wangyang 1147192855@qq.com
+ * @LastEditTime: 2022-07-19 16:22:41
+ * @FilePath: \marking_app\lib\common\model\common\base_page.dart
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+import 'package:json_annotation/json_annotation.dart';
+
+part 'base_page.g.dart';
+
+
+@JsonSerializable()
+ class BasePage extends Object {
+
+ @JsonKey(name: 'Page')
+ int page;
+
+ @JsonKey(name: 'Limit')
+ int limit;
+
+ BasePage(this.page,this.limit,);
+
+ factory BasePage.fromJson(Map srcJson) => _$BasePageFromJson(srcJson);
+
+ Map toJson() => _$BasePageToJson(this);
+
+}
+
+
diff --git a/marking_app/lib/common/model/common/base_page_data.dart b/marking_app/lib/common/model/common/base_page_data.dart
new file mode 100644
index 0000000..3fde8be
--- /dev/null
+++ b/marking_app/lib/common/model/common/base_page_data.dart
@@ -0,0 +1,29 @@
+/*
+ * @Author: wangyang 1147192855@qq.com
+ * @Date: 2022-07-18 17:44:15
+ * @LastEditors: wangyang 1147192855@qq.com
+ * @LastEditTime: 2022-07-19 16:19:15
+ * @FilePath: \marking_app\lib\common\model\common\base_page.dart
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+import 'package:json_annotation/json_annotation.dart';
+
+part 'base_page_data.g.dart';
+
+@JsonSerializable(genericArgumentFactories: true, fieldRename: FieldRename.snake)
+ class BasePageData extends Object {
+
+ @JsonKey(name: 'items')
+ List items;
+
+ @JsonKey(name: 'total')
+ int total;
+
+ BasePageData(this.items,this.total,);
+
+
+ factory BasePageData.fromJson( Map json, T Function(dynamic json) fromJsonT) => _$BasePageDataFromJson(json, fromJsonT);
+ Map toJson(Object Function(T value) toJsonT) => _$BasePageDataToJson(this, toJsonT);
+}
+
+
diff --git a/marking_app/lib/common/model/common/base_page_data_report.dart b/marking_app/lib/common/model/common/base_page_data_report.dart
new file mode 100644
index 0000000..69177b6
--- /dev/null
+++ b/marking_app/lib/common/model/common/base_page_data_report.dart
@@ -0,0 +1,19 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'base_page_data_report.g.dart';
+
+
+@JsonSerializable(genericArgumentFactories: true, fieldRename: FieldRename.snake)
+ class BasePageDataReport extends Object {
+
+ @JsonKey(name: 'Data')
+ List items;
+
+ @JsonKey(name: 'Total')
+ int total;
+
+ BasePageDataReport(this.items,this.total,);
+
+ factory BasePageDataReport.fromJson( Map json, T Function(dynamic json) fromJsonT) => _$BasePageDataReportFromJson(json, fromJsonT);
+ Map toJson(Object Function(T value) toJsonT) => _$BasePageDataReportToJson(this, toJsonT);
+}
\ No newline at end of file
diff --git a/marking_app/lib/common/model/common/base_page_report.dart b/marking_app/lib/common/model/common/base_page_report.dart
new file mode 100644
index 0000000..ca139cf
--- /dev/null
+++ b/marking_app/lib/common/model/common/base_page_report.dart
@@ -0,0 +1,31 @@
+/*
+ * @Author: wangyang 1147192855@qq.com
+ * @Date: 2022-07-19 16:17:38
+ * @LastEditors: wangyang 1147192855@qq.com
+ * @LastEditTime: 2022-07-19 16:22:41
+ * @FilePath: \marking_app\lib\common\model\common\base_page.dart
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+import 'package:json_annotation/json_annotation.dart';
+
+part 'base_page_report.g.dart';
+
+
+@JsonSerializable()
+ class BasePageReport extends Object {
+
+ @JsonKey(name: 'PageIndex')
+ int page;
+
+ @JsonKey(name: 'PageSize')
+ int limit;
+
+ BasePageReport(this.page,this.limit,);
+
+ factory BasePageReport.fromJson(Map srcJson) => _$BasePageReportFromJson(srcJson);
+
+ Map toJson() => _$BasePageReportToJson(this);
+
+}
+
+
diff --git a/marking_app/lib/common/model/common/base_structure_result.dart b/marking_app/lib/common/model/common/base_structure_result.dart
new file mode 100644
index 0000000..bccaded
--- /dev/null
+++ b/marking_app/lib/common/model/common/base_structure_result.dart
@@ -0,0 +1,38 @@
+/*
+ * @Author: wangyang 1147192855@qq.com
+ * @Date: 2022-07-13 18:30:11
+ * @LastEditors: wangyang 1147192855@qq.com
+ * @LastEditTime: 2022-07-14 10:20:21
+ * @FilePath: \marking_app\lib\common\model\common\base_structure_result.dart
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+import 'package:json_annotation/json_annotation.dart';
+import 'package:marking_app/common/config/request_config.dart';
+
+part 'base_structure_result.g.dart';
+
+@JsonSerializable(genericArgumentFactories: true, fieldRename: FieldRename.snake)
+class BaseStructureResult extends Object {
+ @JsonKey(name: 'success')
+ bool success;
+
+ @JsonKey(name: 'code')
+ int code;
+
+ @JsonKey(name: 'message')
+ String? message;
+
+ @JsonKey(name: 'data')
+ T? data;
+
+ BaseStructureResult(
+ this.code,
+ this.message,
+ this.data, {
+ this.success = false,
+ }) {
+ success = (code == RequestConfig.successCode);
+ }
+ factory BaseStructureResult.fromJson(Map json, T Function(dynamic json) fromJsonT) => _$BaseStructureResultFromJson(json, fromJsonT);
+ Map toJson(Object Function(T value) toJsonT) => _$BaseStructureResultToJson(this, toJsonT);
+}
diff --git a/marking_app/lib/common/model/common/base_structure_result_report.dart b/marking_app/lib/common/model/common/base_structure_result_report.dart
new file mode 100644
index 0000000..b6ca314
--- /dev/null
+++ b/marking_app/lib/common/model/common/base_structure_result_report.dart
@@ -0,0 +1,38 @@
+/*
+ * @Author: wangyang 1147192855@qq.com
+ * @Date: 2022-07-13 18:30:11
+ * @LastEditors: wangyang 1147192855@qq.com
+ * @LastEditTime: 2022-07-14 10:20:21
+ * @FilePath: \marking_app\lib\common\model\common\base_structure_result.dart
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+import 'package:json_annotation/json_annotation.dart';
+import 'package:marking_app/common/config/request_config.dart';
+
+part 'base_structure_result_report.g.dart';
+
+@JsonSerializable(genericArgumentFactories: true, fieldRename: FieldRename.snake)
+class BaseStructureResultReport extends Object {
+ @JsonKey(name: 'success')
+ bool success;
+
+ @JsonKey(name: 'Code')
+ int code;
+
+ @JsonKey(name: 'Message')
+ String? message;
+
+ @JsonKey(name: 'Data')
+ T? data;
+
+ BaseStructureResultReport(
+ this.code,
+ this.message,
+ this.data, {
+ this.success = false,
+ }) {
+ success = (code == RequestConfig.successCode);
+ }
+ factory BaseStructureResultReport.fromJson(Map json, T Function(dynamic json) fromJsonT) => _$BaseStructureResultReportFromJson(json, fromJsonT);
+ Map toJson(Object Function(T value) toJsonT) => _$BaseStructureResultReportToJson(this, toJsonT);
+}
diff --git a/marking_app/lib/common/model/common/upload_img_secret_key.dart b/marking_app/lib/common/model/common/upload_img_secret_key.dart
new file mode 100644
index 0000000..19465ec
--- /dev/null
+++ b/marking_app/lib/common/model/common/upload_img_secret_key.dart
@@ -0,0 +1,57 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'upload_img_secret_key.g.dart';
+
+
+@JsonSerializable()
+ class UploadImgSecretKey extends Object {
+
+ @JsonKey(name: 'account')
+ String? account;
+
+ @JsonKey(name: 'bucketName')
+ String? bucketName;
+
+ @JsonKey(name: 'endPoint')
+ int? endPoint;
+
+ @JsonKey(name: 'ip')
+ String? ip;
+
+ @JsonKey(name: 'password')
+ String? password;
+
+ @JsonKey(name: 'imgSecretKey')
+ bool? imgSecretKey;
+
+ // 是否打开工具
+ bool annotationSwitch;
+
+ UploadImgSecretKey({this.account,this.bucketName,this.endPoint,this.ip,this.password,this.imgSecretKey,this.annotationSwitch = false});
+
+ factory UploadImgSecretKey.fromJson(Map srcJson) => _$UploadImgSecretKeyFromJson(srcJson);
+
+ Map toJson() => _$UploadImgSecretKeyToJson(this);
+
+}
+
+
+/// 返回结果文件实体类
+@JsonSerializable()
+class FileResult extends Object{
+ String? path; // 本地相对地址
+ String? url; // 图片上传返回url地址
+ dynamic? otherParam;
+ String myObject; // 我的项目名称
+ bool success; // 是否成功
+
+
+ FileResult({required this.myObject, this.url, this.success = false,this.otherParam});
+
+
+
+ factory FileResult.fromJson(Map srcJson) => _$FileResultFromJson(srcJson);
+
+ Map toJson() => _$FileResultToJson(this);
+}
+
diff --git a/marking_app/lib/common/model/enum/KeyboardType.dart b/marking_app/lib/common/model/enum/KeyboardType.dart
new file mode 100644
index 0000000..440a658
--- /dev/null
+++ b/marking_app/lib/common/model/enum/KeyboardType.dart
@@ -0,0 +1,19 @@
+// 键盘类型
+enum KeyboardType {
+ INPUT_TYPE, // 输入型
+ RIGHT_SELECTION, // 右侧选择型
+ BOTTOM_SELECTION // 底部选择型
+}
+
+// 键盘排序规则
+enum SortKeyboard {
+ INVERTED_ORDER, // 倒序排列
+ FULL_AND_AERO_TOP, // 顺序排列
+ FULL_AND_AERO_TOP_INVERTED_ORDER, // 满分零分置顶倒序排列
+}
+
+// 屏幕方向
+enum ScreenDirection {
+ HORIZONTAL_SCREEN, // 横屏
+ VERTICAL_SCREEN // 竖屏
+}
diff --git a/marking_app/lib/common/model/enum/job_enums.dart b/marking_app/lib/common/model/enum/job_enums.dart
new file mode 100644
index 0000000..aea8cd1
--- /dev/null
+++ b/marking_app/lib/common/model/enum/job_enums.dart
@@ -0,0 +1,6 @@
+// 平台类型
+enum ReviewSwitching {
+ TO_PREVIOUS_QUESTION, // 上一题
+ TO_NEXT_QUESTION, // 下一题
+ CURRENT_QUESTION, // 当前题
+}
diff --git a/marking_app/lib/common/model/enum/marking_list_type.dart b/marking_app/lib/common/model/enum/marking_list_type.dart
new file mode 100644
index 0000000..9a5fa0b
--- /dev/null
+++ b/marking_app/lib/common/model/enum/marking_list_type.dart
@@ -0,0 +1,6 @@
+/// 阅卷集合类型
+enum MarkingListType {
+ NORMAL, // 正常
+ ARBITRATE, // 仲裁
+ EXCEPTIONAL, // 异常
+}
diff --git a/marking_app/lib/common/model/enum/platform.dart b/marking_app/lib/common/model/enum/platform.dart
new file mode 100644
index 0000000..d3fb735
--- /dev/null
+++ b/marking_app/lib/common/model/enum/platform.dart
@@ -0,0 +1,5 @@
+// 平台类型
+enum Platform {
+ MARKING, // 阅卷
+ REPORT, // 报告
+}
\ No newline at end of file
diff --git a/marking_app/lib/common/model/enum/reportUserIdentity.dart b/marking_app/lib/common/model/enum/reportUserIdentity.dart
new file mode 100644
index 0000000..23cda20
--- /dev/null
+++ b/marking_app/lib/common/model/enum/reportUserIdentity.dart
@@ -0,0 +1,16 @@
+// 屏幕方向
+enum ReportUserIdentity{
+ // {
+ // 教委 = 1,
+ // 校级 = 2,
+ // 年级 = 3,
+ // 班级 = 4,
+ // 教师 = 5,
+ // }
+ OCCUPY_POSITION, // 占位
+ STATE_EDUCATION_COMMISSION, // 国家教育委员会
+ SCHOOL_LEVEL, // 校级
+ GRADE, // 年级
+ CLASS, // 班级
+ TEACHER, // 单科
+}
\ No newline at end of file
diff --git a/marking_app/lib/common/model/enum/subject.dart b/marking_app/lib/common/model/enum/subject.dart
new file mode 100644
index 0000000..6bc847d
--- /dev/null
+++ b/marking_app/lib/common/model/enum/subject.dart
@@ -0,0 +1,44 @@
+/*
+ * @Author: wangyang 1147192855@qq.com
+ * @Date: 2022-07-18 17:12:53
+ * @LastEditors: wangyang 1147192855@qq.com
+ * @LastEditTime: 2022-07-19 21:29:49
+ * @FilePath: \marking_app\lib\common\model\enum\subject.dart
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+enum Subject {
+ other, // 其他未定义
+ chineseLanguage, // 语文
+ mathematics, // 数学
+ english, // 英语
+ physical, // 物理
+ chemical, // 化学
+ biological, // 生物
+ political, // 政治
+ history, // 历史
+ geographic // 地理
+}
+
+const Map subjectMap = {
+ Subject.chineseLanguage: '语文',
+ Subject.mathematics: '数学',
+ Subject.english: '英语',
+ Subject.physical: '物理',
+ Subject.chemical: '化学',
+ Subject.biological: '生物',
+ Subject.political: '政治',
+ Subject.history: '历史',
+ Subject.geographic: '地理'
+};
+
+String getSubjectEnumName(int index) {
+ String res = '';
+ try {
+ Subject theCurnt = Subject.values[index];
+ res = subjectMap[theCurnt] ?? res;
+ return res;
+ } catch (e) {
+ return '';
+ }
+
+}
diff --git a/marking_app/lib/common/model/event_bus/bottom_annotation_switch_cleanall.dart b/marking_app/lib/common/model/event_bus/bottom_annotation_switch_cleanall.dart
new file mode 100644
index 0000000..89e53ca
--- /dev/null
+++ b/marking_app/lib/common/model/event_bus/bottom_annotation_switch_cleanall.dart
@@ -0,0 +1,22 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'bottom_annotation_switch_cleanall.g.dart';
+
+@JsonSerializable()
+class BottomAnnotationSwitchCleanall extends Object {
+ @JsonKey(name: 'cleanAll')
+ bool cleanAll;
+
+ @JsonKey(name: 'previousStep')
+ bool previousStep;
+
+ @JsonKey(name: 'uploadImage')
+ bool uploadImage;
+
+ BottomAnnotationSwitchCleanall({this.cleanAll = false, this.previousStep = false, this.uploadImage = false});
+
+ factory BottomAnnotationSwitchCleanall.fromJson(Map srcJson) =>
+ _$BottomAnnotationSwitchCleanallFromJson(srcJson);
+
+ Map toJson() => _$BottomAnnotationSwitchCleanallToJson(this);
+}
diff --git a/marking_app/lib/common/model/event_bus/home_marking_statistics.dart b/marking_app/lib/common/model/event_bus/home_marking_statistics.dart
new file mode 100644
index 0000000..9f59e29
--- /dev/null
+++ b/marking_app/lib/common/model/event_bus/home_marking_statistics.dart
@@ -0,0 +1 @@
+class HomeMarkingStatistics {}
diff --git a/marking_app/lib/common/model/event_bus/job_currenttab_finish_addtion.dart b/marking_app/lib/common/model/event_bus/job_currenttab_finish_addtion.dart
new file mode 100644
index 0000000..dd03fff
--- /dev/null
+++ b/marking_app/lib/common/model/event_bus/job_currenttab_finish_addtion.dart
@@ -0,0 +1,13 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'job_currenttab_finish_addtion.g.dart';
+
+@JsonSerializable()
+class JobCurrenttabFinishAddtion extends Object {
+ JobCurrenttabFinishAddtion();
+
+ factory JobCurrenttabFinishAddtion.fromJson(Map srcJson) =>
+ _$JobCurrenttabFinishAddtionFromJson(srcJson);
+
+ Map toJson() => _$JobCurrenttabFinishAddtionToJson(this);
+}
diff --git a/marking_app/lib/common/model/event_bus/job_large_question_scoring_bus.dart b/marking_app/lib/common/model/event_bus/job_large_question_scoring_bus.dart
new file mode 100644
index 0000000..815ed0a
--- /dev/null
+++ b/marking_app/lib/common/model/event_bus/job_large_question_scoring_bus.dart
@@ -0,0 +1,16 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'job_large_question_scoring_bus.g.dart';
+
+@JsonSerializable()
+class JobLargeQuestionScoringBus extends Object {
+ @JsonKey(name: 'ratingScore')
+ double? ratingScore;
+
+ JobLargeQuestionScoringBus({this.ratingScore});
+
+ factory JobLargeQuestionScoringBus.fromJson(Map srcJson) =>
+ _$JobLargeQuestionScoringBusFromJson(srcJson);
+
+ Map toJson() => _$JobLargeQuestionScoringBusToJson(this);
+}
diff --git a/marking_app/lib/common/model/event_bus/job_question_switch_bus.dart b/marking_app/lib/common/model/event_bus/job_question_switch_bus.dart
new file mode 100644
index 0000000..1b2cce0
--- /dev/null
+++ b/marking_app/lib/common/model/event_bus/job_question_switch_bus.dart
@@ -0,0 +1,16 @@
+import 'package:json_annotation/json_annotation.dart';
+import 'package:marking_app/common/model/enum/job_enums.dart';
+
+part 'job_question_switch_bus.g.dart';
+
+@JsonSerializable()
+class JobQuestionSwitchBus extends Object {
+ @JsonKey(name: 'switchAction')
+ ReviewSwitching switchAction;
+
+ JobQuestionSwitchBus({this.switchAction = ReviewSwitching.TO_NEXT_QUESTION});
+
+ factory JobQuestionSwitchBus.fromJson(Map srcJson) => _$JobQuestionSwitchBusFromJson(srcJson);
+
+ Map toJson() => _$JobQuestionSwitchBusToJson(this);
+}
diff --git a/marking_app/lib/common/model/event_bus/job_submit_bus.dart b/marking_app/lib/common/model/event_bus/job_submit_bus.dart
new file mode 100644
index 0000000..b102021
--- /dev/null
+++ b/marking_app/lib/common/model/event_bus/job_submit_bus.dart
@@ -0,0 +1,21 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'job_submit_bus.g.dart';
+
+@JsonSerializable()
+class JobSubmitBus extends Object {
+ @JsonKey(name: 'taskSubjectiveDetailId')
+ int taskSubjectiveDetailId;
+
+ @JsonKey(name: 'score')
+ double score;
+
+ @JsonKey(name: 'commentImageUrl', includeIfNull: true)
+ String? commentImageUrl;
+
+ JobSubmitBus({this.commentImageUrl, required this.taskSubjectiveDetailId, required this.score});
+
+ factory JobSubmitBus.fromJson(Map srcJson) => _$JobSubmitBusFromJson(srcJson);
+
+ Map toJson() => _$JobSubmitBusToJson(this);
+}
diff --git a/marking_app/lib/common/model/event_bus/jobs/job_do_papers_student_bus.dart b/marking_app/lib/common/model/event_bus/jobs/job_do_papers_student_bus.dart
new file mode 100644
index 0000000..b181e37
--- /dev/null
+++ b/marking_app/lib/common/model/event_bus/jobs/job_do_papers_student_bus.dart
@@ -0,0 +1,27 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'job_do_papers_student_bus.g.dart';
+
+@JsonSerializable()
+class JobDoPapersStudentBus extends Object {
+ @JsonKey(name: 'studentId')
+ int studentId;
+
+ @JsonKey(name: 'studentName')
+ String studentName;
+
+ int pageIndex;
+
+ bool isFirst;
+
+ JobDoPapersStudentBus(
+ this.studentId,
+ this.studentName,
+ this.pageIndex,
+ this.isFirst,
+ );
+
+ factory JobDoPapersStudentBus.fromJson(Map srcJson) => _$JobDoPapersStudentBusFromJson(srcJson);
+
+ Map toJson() => _$JobDoPapersStudentBusToJson(this);
+}
diff --git a/marking_app/lib/common/model/event_bus/jobs/job_do_papers_switch_operation_bus.dart b/marking_app/lib/common/model/event_bus/jobs/job_do_papers_switch_operation_bus.dart
new file mode 100644
index 0000000..48e40c1
--- /dev/null
+++ b/marking_app/lib/common/model/event_bus/jobs/job_do_papers_switch_operation_bus.dart
@@ -0,0 +1,18 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'job_do_papers_switch_operation_bus.g.dart';
+
+@JsonSerializable()
+class JobDoPapersSwitchOperationBus extends Object {
+ @JsonKey(name: 'flag')
+ bool flag;
+
+ JobDoPapersSwitchOperationBus(
+ this.flag,
+ );
+
+ factory JobDoPapersSwitchOperationBus.fromJson(Map srcJson) =>
+ _$JobDoPapersSwitchOperationBusFromJson(srcJson);
+
+ Map toJson() => _$JobDoPapersSwitchOperationBusToJson(this);
+}
diff --git a/marking_app/lib/common/model/event_bus/marking_statistics_bus.dart b/marking_app/lib/common/model/event_bus/marking_statistics_bus.dart
new file mode 100644
index 0000000..18ef796
--- /dev/null
+++ b/marking_app/lib/common/model/event_bus/marking_statistics_bus.dart
@@ -0,0 +1,5 @@
+// 阅卷列表统计数据更新
+class MarkingStatisticsBus {}
+
+// 阅卷列表统计数据更新
+class MarkingStatisticsMainListBus {}
diff --git a/marking_app/lib/common/model/job/gesture_recording.dart b/marking_app/lib/common/model/job/gesture_recording.dart
new file mode 100644
index 0000000..f140744
--- /dev/null
+++ b/marking_app/lib/common/model/job/gesture_recording.dart
@@ -0,0 +1,21 @@
+import 'dart:ui';
+
+/**
+ * 手势记录
+ */
+class GestureRecording {
+ bool eraser; // 是否是橡皮擦
+
+ int? usageTime; // 用时
+
+ Offset? data; // 位置记录 可能为null
+
+ bool annotationSwitch;
+
+ GestureRecording({
+ required this.eraser,
+ required this.annotationSwitch,
+ this.data,
+ this.usageTime,
+ });
+}
diff --git a/marking_app/lib/common/model/job/job_collect_params.dart b/marking_app/lib/common/model/job/job_collect_params.dart
new file mode 100644
index 0000000..3ec0fa6
--- /dev/null
+++ b/marking_app/lib/common/model/job/job_collect_params.dart
@@ -0,0 +1,25 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'job_collect_params.g.dart';
+
+@JsonSerializable()
+class JobCollectParams extends Object {
+ @JsonKey(name: 'taskId')
+ int taskId;
+
+ @JsonKey(name: 'studentId')
+ int studentId;
+
+ @JsonKey(name: 'isCollect')
+ bool isCollect;
+
+ JobCollectParams(
+ this.taskId,
+ this.studentId,
+ this.isCollect,
+ );
+
+ factory JobCollectParams.fromJson(Map srcJson) => _$JobCollectParamsFromJson(srcJson);
+
+ Map toJson() => _$JobCollectParamsToJson(this);
+}
diff --git a/marking_app/lib/common/model/job/job_concerned_with_student.dart b/marking_app/lib/common/model/job/job_concerned_with_student.dart
new file mode 100644
index 0000000..13822b0
--- /dev/null
+++ b/marking_app/lib/common/model/job/job_concerned_with_student.dart
@@ -0,0 +1,21 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'job_concerned_with_student.g.dart';
+
+@JsonSerializable()
+class JobConcernedWithStudent extends Object {
+ @JsonKey(name: 'studentId')
+ int studentId;
+
+ @JsonKey(name: 'studentName')
+ String studentName;
+
+ JobConcernedWithStudent(
+ this.studentId,
+ this.studentName,
+ );
+
+ factory JobConcernedWithStudent.fromJson(Map srcJson) => _$JobConcernedWithStudentFromJson(srcJson);
+
+ Map toJson() => _$JobConcernedWithStudentToJson(this);
+}
diff --git a/marking_app/lib/common/model/job/job_concerned_with_student_params.dart b/marking_app/lib/common/model/job/job_concerned_with_student_params.dart
new file mode 100644
index 0000000..e65a297
--- /dev/null
+++ b/marking_app/lib/common/model/job/job_concerned_with_student_params.dart
@@ -0,0 +1,19 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'job_concerned_with_student_params.g.dart';
+
+@JsonSerializable()
+class JobConcernedWithStudentParams extends Object {
+ @JsonKey(name: 'taskIds')
+ List taskIds;
+
+ @JsonKey(name: 'isCommit')
+ bool? isCommit;
+
+ JobConcernedWithStudentParams(this.taskIds, {this.isCommit});
+
+ factory JobConcernedWithStudentParams.fromJson(Map srcJson) =>
+ _$JobConcernedWithStudentParamsFromJson(srcJson);
+
+ Map toJson() => _$JobConcernedWithStudentParamsToJson(this);
+}
diff --git a/marking_app/lib/common/model/job/job_note_taking_trajectory.dart b/marking_app/lib/common/model/job/job_note_taking_trajectory.dart
new file mode 100644
index 0000000..5aec683
--- /dev/null
+++ b/marking_app/lib/common/model/job/job_note_taking_trajectory.dart
@@ -0,0 +1,51 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'job_note_taking_trajectory.g.dart';
+
+@JsonSerializable()
+class JobNoteTakingTrajectory extends Object {
+ @JsonKey(name: 'lattices')
+ List lattices;
+
+ @JsonKey(name: 'paperPicture')
+ String paperPicture;
+
+ @JsonKey(name: 'resetTime')
+ int resetTime;
+
+ JobNoteTakingTrajectory(
+ this.lattices,
+ this.paperPicture,
+ this.resetTime,
+ );
+
+ factory JobNoteTakingTrajectory.fromJson(Map srcJson) => _$JobNoteTakingTrajectoryFromJson(srcJson);
+
+ Map toJson() => _$JobNoteTakingTrajectoryToJson(this);
+}
+
+@JsonSerializable()
+class Lattices extends Object {
+ @JsonKey(name: 'stroke')
+ int stroke;
+
+ @JsonKey(name: 'x')
+ double x;
+
+ @JsonKey(name: 'y')
+ double y;
+
+ @JsonKey(name: 'time')
+ double time;
+
+ Lattices(
+ this.stroke,
+ this.x,
+ this.y,
+ this.time,
+ );
+
+ factory Lattices.fromJson(Map srcJson) => _$LatticesFromJson(srcJson);
+
+ Map toJson() => _$LatticesToJson(this);
+}
diff --git a/marking_app/lib/common/model/job/job_page_tab.dart b/marking_app/lib/common/model/job/job_page_tab.dart
new file mode 100644
index 0000000..04fb2be
--- /dev/null
+++ b/marking_app/lib/common/model/job/job_page_tab.dart
@@ -0,0 +1,25 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'job_page_tab.g.dart';
+
+@JsonSerializable()
+class JobPageTab extends Object {
+ @JsonKey(name: 'pageIndex')
+ int pageIndex;
+
+ @JsonKey(name: 'total')
+ int total;
+
+ @JsonKey(name: 'finishCount')
+ int finishCount;
+
+ JobPageTab(
+ this.pageIndex,
+ this.total,
+ this.finishCount,
+ );
+
+ factory JobPageTab.fromJson(Map srcJson) => _$JobPageTabFromJson(srcJson);
+
+ Map toJson() => _$JobPageTabToJson(this);
+}
diff --git a/marking_app/lib/common/model/job/job_review_submission.dart b/marking_app/lib/common/model/job/job_review_submission.dart
new file mode 100644
index 0000000..e54f2ae
--- /dev/null
+++ b/marking_app/lib/common/model/job/job_review_submission.dart
@@ -0,0 +1,47 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'job_review_submission.g.dart';
+
+@JsonSerializable(includeIfNull: false)
+class JobReviewSubmission extends Object {
+ @JsonKey(name: 'paperId')
+ int paperId;
+
+ @JsonKey(name: 'score')
+ int? score;
+
+ @JsonKey(name: 'commentImageUrl')
+ String? commentImageUrl;
+
+ @JsonKey(name: 'questions')
+ List questions;
+
+ JobReviewSubmission({
+ this.commentImageUrl,
+ required this.score,
+ required this.paperId,
+ required this.questions,
+ });
+
+ factory JobReviewSubmission.fromJson(Map srcJson) => _$JobReviewSubmissionFromJson(srcJson);
+
+ Map toJson() => _$JobReviewSubmissionToJson(this);
+}
+
+@JsonSerializable()
+class JobReviewQuestions extends Object {
+ @JsonKey(name: 'questionNo')
+ String questionNo;
+
+ @JsonKey(name: 'score') // 0:错 1:半对 2: 对
+ int? score;
+
+ JobReviewQuestions({
+ required this.questionNo,
+ required this.score,
+ });
+
+ factory JobReviewQuestions.fromJson(Map srcJson) => _$JobReviewQuestionsFromJson(srcJson);
+
+ Map toJson() => _$JobReviewQuestionsToJson(this);
+}
diff --git a/marking_app/lib/common/model/job/job_task_item.dart b/marking_app/lib/common/model/job/job_task_item.dart
new file mode 100644
index 0000000..6d817c9
--- /dev/null
+++ b/marking_app/lib/common/model/job/job_task_item.dart
@@ -0,0 +1,168 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'job_task_item.g.dart';
+
+@JsonSerializable()
+class JobTaskItem extends Object {
+ @JsonKey(name: 'id')
+ int id;
+
+ @JsonKey(name: 'title')
+ String title;
+
+ @JsonKey(name: 'subjectName')
+ String subjectName;
+
+ @JsonKey(name: 'genderName')
+ String genderName;
+
+ @JsonKey(name: 'isFinish')
+ bool isFinish;
+
+ @JsonKey(name: 'studentCount')
+ int studentCount;
+
+ @JsonKey(name: 'commitStudentCount')
+ int commitStudentCount;
+
+ @JsonKey(name: 'totalCount')
+ int totalCount;
+
+ @JsonKey(name: 'finishCount')
+ int finishCount;
+
+ @JsonKey(name: 'objectivePrecision')
+ double objectivePrecision;
+
+ @JsonKey(name: 'subjectivePrecision')
+ double subjectivePrecision;
+
+ @JsonKey(name: 'precision')
+ double precision;
+
+ @JsonKey(name: 'markingTasks')
+ List markingTasks;
+
+ @JsonKey(name: 'createTime')
+ String createTime;
+
+ @JsonKey(name: 'progressPercentage')
+ double progressPercentage; // 进度百分比
+
+ JobTaskItem(
+ this.id,
+ this.title,
+ this.subjectName,
+ this.genderName,
+ this.isFinish,
+ this.studentCount,
+ this.commitStudentCount,
+ this.totalCount,
+ this.finishCount,
+ this.objectivePrecision,
+ this.subjectivePrecision,
+ this.precision,
+ this.markingTasks,
+ this.createTime, {
+ this.progressPercentage = 0,
+ }) {
+ try {
+ progressPercentage = (finishCount / totalCount) * 100;
+ if (progressPercentage.isNaN) {
+ progressPercentage = 0;
+ } else {
+ progressPercentage = double.parse(progressPercentage.toStringAsFixed(2));
+ }
+ } catch (e) {
+ progressPercentage = 0;
+ }
+ }
+
+ factory JobTaskItem.fromJson(Map srcJson) => _$JobTaskItemFromJson(srcJson);
+
+ Map toJson() => _$JobTaskItemToJson(this);
+}
+
+@JsonSerializable()
+class MarkingTasks extends Object {
+ @JsonKey(name: 'id')
+ int id;
+
+ @JsonKey(name: 'className')
+ String className;
+
+ @JsonKey(name: 'teacherName')
+ String teacherName;
+
+ @JsonKey(name: 'isFinish')
+ bool isFinish;
+
+ @JsonKey(name: 'finishTime')
+ String? finishTime;
+
+ @JsonKey(name: 'studentCount')
+ int studentCount;
+
+ @JsonKey(name: 'commitStudentCount')
+ int commitStudentCount;
+
+ @JsonKey(name: 'totalCount')
+ int totalCount;
+
+ @JsonKey(name: 'finishCount')
+ int finishCount;
+
+ @JsonKey(name: 'objectivePrecision') // 客观题正确率
+ double objectivePrecision;
+
+ @JsonKey(name: 'subjectivePrecision') // 主观题正确率
+ double subjectivePrecision;
+
+ @JsonKey(name: 'precision') // 综合正确率
+ double precision;
+
+ @JsonKey(name: 'canMarking')
+ bool canMarking;
+
+ /** 前端自定义字段 */
+ @JsonKey(name: 'progressPercentage')
+ double progressPercentage; // 进度百分比
+
+ /** 前端自定义字段 */
+ @JsonKey(name: 'canGoReview')
+ bool canGoReview; // 是否能批阅
+
+ MarkingTasks(
+ this.id,
+ this.className,
+ this.teacherName,
+ this.isFinish,
+ this.studentCount,
+ this.commitStudentCount,
+ this.totalCount,
+ this.finishCount,
+ this.objectivePrecision,
+ this.subjectivePrecision,
+ this.precision,
+ this.canMarking, {
+ this.progressPercentage = 0,
+ this.canGoReview = true,
+ this.finishTime,
+ }) {
+ try {
+ progressPercentage = (finishCount / totalCount) * 100;
+ if (progressPercentage.isNaN)
+ progressPercentage = 0;
+ else
+ progressPercentage = double.parse(progressPercentage.toStringAsFixed(2));
+ } catch (e) {
+ progressPercentage = 0;
+ }
+
+ canGoReview = totalCount > 0 && canMarking && !isFinish;
+ }
+
+ factory MarkingTasks.fromJson(Map srcJson) => _$MarkingTasksFromJson(srcJson);
+
+ Map toJson() => _$MarkingTasksToJson(this);
+}
diff --git a/marking_app/lib/common/model/job/marking_text_question_job.dart b/marking_app/lib/common/model/job/marking_text_question_job.dart
new file mode 100644
index 0000000..8638ad6
--- /dev/null
+++ b/marking_app/lib/common/model/job/marking_text_question_job.dart
@@ -0,0 +1,98 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'marking_text_question_job.g.dart';
+
+@JsonSerializable()
+class MarkingTextQuestionJob extends Object {
+ @JsonKey(name: 'paperId')
+ int paperId;
+
+ int? nextPageIndex; // 下一个页面
+ int? previousPageIndex; // 上一
+
+ @JsonKey(name: 'pageIndex')
+ int pageIndex;
+
+ @JsonKey(name: 'taskId')
+ int taskId;
+
+ @JsonKey(name: 'schoolName')
+ String schoolName;
+
+ @JsonKey(name: 'className')
+ String className;
+
+ @JsonKey(name: 'studentId')
+ int studentId;
+
+ @JsonKey(name: 'studentName')
+ String studentName;
+
+ @JsonKey(name: 'isFinish')
+ bool isFinish;
+
+ @JsonKey(name: 'current')
+ int current;
+
+ @JsonKey(name: 'prevId')
+ int prevId;
+
+ @JsonKey(name: 'nextId')
+ int nextId;
+
+ @JsonKey(name: 'questions')
+ List questions;
+
+ @JsonKey(name: 'imageUrl')
+ String imageUrl;
+
+ @JsonKey(name: 'commentImageUrl')
+ String? commentImageUrl;
+
+ bool isFirst;
+
+ String? lastModifyTime;
+
+ MarkingTextQuestionJob(
+ this.paperId,
+ this.pageIndex,
+ this.taskId,
+ this.schoolName,
+ this.className,
+ this.studentId,
+ this.studentName,
+ this.isFinish,
+ this.current,
+ this.prevId,
+ this.nextId,
+ this.questions,
+ this.imageUrl,
+ this.commentImageUrl,
+ this.lastModifyTime,
+ this.isFirst,
+ ) {
+ if (lastModifyTime != null) imageUrl = imageUrl + '?$lastModifyTime';
+ }
+
+ factory MarkingTextQuestionJob.fromJson(Map srcJson) => _$MarkingTextQuestionJobFromJson(srcJson);
+
+ Map toJson() => _$MarkingTextQuestionJobToJson(this);
+}
+
+@JsonSerializable()
+class Questions extends Object {
+ @JsonKey(name: 'questionNo')
+ String questionNo;
+
+ @JsonKey(name: 'answer')
+ String answer;
+
+ @JsonKey(name: 'score')
+ double? score;
+
+ Questions(this.questionNo, this.answer, [this.score]);
+
+ factory Questions.fromJson(Map srcJson) => _$QuestionsFromJson(srcJson);
+
+ Map toJson() => _$QuestionsToJson(this);
+}
diff --git a/marking_app/lib/common/model/job/marking_text_question_job_params.dart b/marking_app/lib/common/model/job/marking_text_question_job_params.dart
new file mode 100644
index 0000000..df61d94
--- /dev/null
+++ b/marking_app/lib/common/model/job/marking_text_question_job_params.dart
@@ -0,0 +1,22 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'marking_text_question_job_params.g.dart';
+
+@JsonSerializable()
+class MarkingTextQuestionJobParams extends Object {
+ @JsonKey(name: 'taskSubjectiveDetailId')
+ int taskSubjectiveDetailId;
+
+ @JsonKey(name: 'score')
+ double score;
+
+ @JsonKey(name: 'commentImageUrl', includeIfNull: true)
+ String? commentImageUrl;
+
+ MarkingTextQuestionJobParams({this.commentImageUrl, required this.taskSubjectiveDetailId, required this.score});
+
+ factory MarkingTextQuestionJobParams.fromJson(Map srcJson) =>
+ _$MarkingTextQuestionJobParamsFromJson(srcJson);
+
+ Map toJson() => _$MarkingTextQuestionJobParamsToJson(this);
+}
diff --git a/marking_app/lib/common/model/job/marking_text_question_job_tab_params.dart b/marking_app/lib/common/model/job/marking_text_question_job_tab_params.dart
new file mode 100644
index 0000000..5aad5b9
--- /dev/null
+++ b/marking_app/lib/common/model/job/marking_text_question_job_tab_params.dart
@@ -0,0 +1,34 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'marking_text_question_job_tab_params.g.dart';
+
+@JsonSerializable(includeIfNull: false)
+class MarkingTextQuestionJobTabParams extends Object {
+ @JsonKey(name: 'taskId')
+ int taskId;
+
+ @JsonKey(name: 'pageIndex')
+ int pageIndex;
+ int? nextPageIndex; // 下一个页面
+ int? previousPageIndex; // 上一个页面
+
+ @JsonKey(name: 'paperId')
+ int? paperId;
+
+ @JsonKey(name: 'studentId')
+ int? studentId;
+
+ MarkingTextQuestionJobTabParams({
+ required this.taskId,
+ required this.pageIndex,
+ this.paperId,
+ this.studentId,
+ this.nextPageIndex,
+ this.previousPageIndex,
+ });
+
+ factory MarkingTextQuestionJobTabParams.fromJson(Map srcJson) =>
+ _$MarkingTextQuestionJobTabParamsFromJson(srcJson);
+
+ Map toJson() => _$MarkingTextQuestionJobTabParamsToJson(this);
+}
diff --git a/marking_app/lib/common/model/job/review_again_list_params.dart b/marking_app/lib/common/model/job/review_again_list_params.dart
new file mode 100644
index 0000000..4d7e742
--- /dev/null
+++ b/marking_app/lib/common/model/job/review_again_list_params.dart
@@ -0,0 +1,41 @@
+import 'package:json_annotation/json_annotation.dart';
+
+import '../common/base_page.dart';
+
+part 'review_again_list_params.g.dart';
+
+@JsonSerializable()
+class ReviewAgainListParams extends BasePage {
+ @JsonKey(name: 'TaskId')
+ int taskId;
+
+ @JsonKey(name: 'QuestionNo')
+ String? questionNo;
+
+ @JsonKey(name: 'IsFinish')
+ bool isFinish;
+
+ @JsonKey(name: 'SortName')
+ String? sortName;
+
+ @JsonKey(name: 'Order')
+ String? order; // asc desc
+
+ @JsonKey(name: 'keyword')
+ String? keyword;
+
+ ReviewAgainListParams(
+ {required this.taskId, required this.questionNo, this.isFinish = true, required page, required limit})
+ : super(page, limit);
+
+ factory ReviewAgainListParams.fromJson(Map srcJson) => _$ReviewAgainListParamsFromJson(srcJson);
+
+ Map toJson() => _$ReviewAgainListParamsToJson(this);
+
+ /// 条件赛选
+ void setConditionalFiltering({String? keyword, String? sortName, String? order}) {
+ this.keyword = keyword;
+ this.sortName = sortName;
+ this.order = order;
+ }
+}
diff --git a/marking_app/lib/common/model/job/test_questions_image_info.dart b/marking_app/lib/common/model/job/test_questions_image_info.dart
new file mode 100644
index 0000000..fed08ac
--- /dev/null
+++ b/marking_app/lib/common/model/job/test_questions_image_info.dart
@@ -0,0 +1,66 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'test_questions_image_info.g.dart';
+
+@JsonSerializable()
+class TestQuestionsImageInfo extends Object {
+ @JsonKey(name: 'url')
+ String url;
+
+ @JsonKey(name: 'boxWidth')
+ double boxWidth;
+
+ @JsonKey(name: 'boxHeight')
+ double boxHeight;
+
+ @JsonKey(name: 'width')
+ double width;
+
+ @JsonKey(name: 'height')
+ double height;
+
+ @JsonKey(name: 'pixelRatio') // 像素比
+ double pixelRatio;
+
+ @JsonKey(name: 'scale')
+ double? scale;
+
+ @JsonKey(name: 'scaleHeight')
+ double? scaleHeight;
+
+ @JsonKey(name: 'scaleWidth')
+ double? scaleWidth;
+
+ double? imageHeightOffsetStart;
+
+ double? imageHeightOffsetend;
+
+ TestQuestionsImageInfo(
+ {required this.width,
+ required this.height,
+ required this.url,
+ required this.boxWidth,
+ required this.boxHeight,
+ this.pixelRatio = 1}) {
+ // print('图片宽度:$width');
+ // print('图片高度:$height');
+
+ // print('容器宽度:$boxWidth');
+ // print('容器高度:$boxHeight');
+
+ pixelRatio = width / boxWidth;
+
+ scale = boxWidth / width;
+ scaleHeight = scale! * height;
+ scaleWidth = scale! * width;
+
+ if (scaleHeight != null) {
+ imageHeightOffsetStart = (boxHeight - scaleHeight!) / 2;
+ imageHeightOffsetend = imageHeightOffsetStart! + scaleHeight!;
+ }
+ }
+
+ factory TestQuestionsImageInfo.fromJson(Map srcJson) => _$TestQuestionsImageInfoFromJson(srcJson);
+
+ Map toJson() => _$TestQuestionsImageInfoToJson(this);
+}
diff --git a/marking_app/lib/common/model/job/upload_file_interface_config.dart b/marking_app/lib/common/model/job/upload_file_interface_config.dart
new file mode 100644
index 0000000..c6b365f
--- /dev/null
+++ b/marking_app/lib/common/model/job/upload_file_interface_config.dart
@@ -0,0 +1,26 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'upload_file_interface_config.g.dart';
+
+@JsonSerializable()
+class UploadFileInterfaceConfig extends Object {
+ @JsonKey(name: 'uploadMethod')
+ String uploadMethod;
+
+ @JsonKey(name: 'uploadUri')
+ String? uploadUri;
+
+ @JsonKey(name: 'downloadUri')
+ String downloadUri;
+
+ UploadFileInterfaceConfig(
+ this.uploadMethod,
+ this.uploadUri,
+ this.downloadUri,
+ );
+
+ factory UploadFileInterfaceConfig.fromJson(Map srcJson) =>
+ _$UploadFileInterfaceConfigFromJson(srcJson);
+
+ Map toJson() => _$UploadFileInterfaceConfigToJson(this);
+}
diff --git a/marking_app/lib/common/model/job/upload_file_interface_config_params.dart b/marking_app/lib/common/model/job/upload_file_interface_config_params.dart
new file mode 100644
index 0000000..7fc2885
--- /dev/null
+++ b/marking_app/lib/common/model/job/upload_file_interface_config_params.dart
@@ -0,0 +1,30 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'upload_file_interface_config_params.g.dart';
+
+@JsonSerializable()
+class UploadFileInterfaceConfigParams extends Object {
+ @JsonKey(name: 'fileName')
+ String fileName;
+
+ @JsonKey(name: 'fileMd5')
+ String fileMd5;
+
+ @JsonKey(name: 'contentLength')
+ int contentLength;
+
+ @JsonKey(name: 'objectName', includeIfNull: false)
+ String? objectName;
+
+ UploadFileInterfaceConfigParams({
+ required this.fileName,
+ required this.fileMd5,
+ required this.contentLength,
+ this.objectName,
+ });
+
+ factory UploadFileInterfaceConfigParams.fromJson(Map srcJson) =>
+ _$UploadFileInterfaceConfigParamsFromJson(srcJson);
+
+ Map toJson() => _$UploadFileInterfaceConfigParamsToJson(this);
+}
diff --git a/marking_app/lib/common/model/marking/annotation_graffiti_switch.dart b/marking_app/lib/common/model/marking/annotation_graffiti_switch.dart
new file mode 100644
index 0000000..04028f6
--- /dev/null
+++ b/marking_app/lib/common/model/marking/annotation_graffiti_switch.dart
@@ -0,0 +1,43 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'annotation_graffiti_switch.g.dart';
+
+// 审批涂鸦开关类
+@JsonSerializable()
+class AnnotationGraffitiSwitch extends Object {
+ // 是否打开工具
+ @JsonKey(name: 'annotationSwitch')
+ bool annotationSwitch;
+
+ // 打开画笔
+ @JsonKey(name: 'openBrush')
+ bool openBrush;
+
+ // 打开橡皮擦
+ @JsonKey(name: 'openEraser')
+ bool openEraser;
+
+ // 清空全部
+ @JsonKey(name: 'openClearAll')
+ bool openClearAll;
+
+ // 放大镜
+ @JsonKey(name: 'magnifier')
+ bool magnifier;
+
+ // 笔记回显
+ @JsonKey(name: 'trajectoryDisplay')
+ bool trajectoryDisplay;
+
+ AnnotationGraffitiSwitch({
+ this.annotationSwitch = false,
+ this.openBrush = false,
+ this.openEraser = false,
+ this.openClearAll = false,
+ this.magnifier = false,
+ this.trajectoryDisplay = false,
+ });
+ factory AnnotationGraffitiSwitch.fromJson(Map srcJson) =>
+ _$AnnotationGraffitiSwitchFromJson(srcJson);
+ Map toJson() => _$AnnotationGraffitiSwitchToJson(this);
+}
diff --git a/marking_app/lib/common/model/marking/current_review_task.dart b/marking_app/lib/common/model/marking/current_review_task.dart
new file mode 100644
index 0000000..a0e195b
--- /dev/null
+++ b/marking_app/lib/common/model/marking/current_review_task.dart
@@ -0,0 +1,32 @@
+/*
+ * @Author: wangyang 1147192855@qq.com
+ * @Date: 2022-09-27 14:45:27
+ * @LastEditors: wangyang 1147192855@qq.com
+ * @LastEditTime: 2022-09-27 16:13:57
+ * @FilePath: \marking_app\lib\common\model\marking\current_review_task.dart
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+import 'package:json_annotation/json_annotation.dart';
+
+part 'current_review_task.g.dart';
+
+
+@JsonSerializable()
+ class CurrentReviewTask extends Object {
+
+ @JsonKey(name: 'taskId')
+ int? taskId;
+
+ // 当前任务状态 (true、需要刷新 2、不需要刷新)
+ @JsonKey(name: 'refresh')
+ bool refresh;
+
+ CurrentReviewTask({this.taskId,this.refresh=false});
+
+ factory CurrentReviewTask.fromJson(Map srcJson) => _$CurrentReviewTaskFromJson(srcJson);
+
+ Map toJson() => _$CurrentReviewTaskToJson(this);
+
+}
+
+
diff --git a/marking_app/lib/common/model/marking/do_marking_keyboard_model.dart b/marking_app/lib/common/model/marking/do_marking_keyboard_model.dart
new file mode 100644
index 0000000..679f801
--- /dev/null
+++ b/marking_app/lib/common/model/marking/do_marking_keyboard_model.dart
@@ -0,0 +1,228 @@
+// import 'package:json_annotation/json_annotation.dart';
+// import 'package:marking_app/common/model/enum/KeyboardType.dart';
+
+// part 'do_marking_keyboard_model.g.dart';
+
+// // 键盘操作模型
+// @JsonSerializable()
+// class DoMarkingKeyboardModel extends Object {
+// // 当前选中键盘
+// KeyboardType keyboard;
+
+// // 屏幕方向
+// ScreenDirection screenDirection;
+
+// // 引导页展示
+// bool guidePageDisplay;
+
+// // 是否关闭键盘
+// bool open;
+
+// // 自动提交并前往下一题 (输入型键盘无法自动提交只回自动前往下一题)
+// bool autoSubmitToNextQuestion;
+
+// // 键盘排序方式(输入型键盘为,无排序规则)
+// SortKeyboard? sort;
+
+// // 阅卷分值步长集合(每个试卷 每种试题分值间隔不同) key:试卷号-题号 val:分值步长
+// Map? scoreIntervalMap;
+
+// // 是否有辅助键盘
+// bool auxiliaryKeyboard;
+
+// // 打开辅助键盘
+// bool openAuxiliary;
+
+// // 是否隐藏试题ID
+// bool hideQuestionId;
+
+// // 常用打分项
+// @JsonKey(name: 'commonScores', fromJson: MarkingCommonScoreItems.fromJson, includeIfNull: false)
+// MarkingCommonScoreItems? commonScores;
+
+// // 默认输入型键盘
+// DoMarkingKeyboardModel({
+// this.hideQuestionId = false,
+// this.screenDirection = ScreenDirection.HORIZONTAL_SCREEN,
+// this.openAuxiliary = true,
+// this.auxiliaryKeyboard = true,
+// this.keyboard = KeyboardType.RIGHT_SELECTION,
+// this.guidePageDisplay = true,
+// this.open = true,
+// this.autoSubmitToNextQuestion = true,
+// this.sort = SortKeyboard.FULL_AND_AERO_TOP,
+// this.scoreIntervalMap,
+// this.commonScores,
+// }) {
+// if (keyboard == KeyboardType.INPUT_TYPE) {
+// // 输入型键盘无排序规则
+// sort = null;
+// } else {
+// sort ??= SortKeyboard.FULL_AND_AERO_TOP;
+// }
+// if (keyboard == KeyboardType.BOTTOM_SELECTION) {
+// auxiliaryKeyboard = false;
+// }
+// if (keyboard == KeyboardType.RIGHT_SELECTION) {
+// open = true;
+// }
+// }
+// factory DoMarkingKeyboardModel.fromJson(Map srcJson) => _$DoMarkingKeyboardModelFromJson(srcJson);
+// Map toJson() => _$DoMarkingKeyboardModelToJson(this);
+
+// /// 设置步长
+// /// @param {int} markingUserId 当场考试任务ID
+// /// @param {String} questionNum 题号
+// /// @param {double?} val 步长值(val为null就清空当前步长,非null和0就是设置步长)
+// void setScoreStepSize(int markingUserId, String questionNum, double defaultNum, double val) {
+// if (val == defaultNum) return;
+// String theKey = '$markingUserId-$questionNum';
+// // val = val==0?null:val;
+// // if(val==null){
+// // // 清空
+// // scoreIntervalMap!.remove(theKey);
+// // }else{
+// // // 设置值
+// // scoreIntervalMap ??= {};
+// // scoreIntervalMap!['$markingUserId-$questionNum'] = val;
+// // }
+// // 设置值
+// scoreIntervalMap ??= {};
+// scoreIntervalMap!['$markingUserId-$questionNum'] = val;
+// }
+
+// /// 或者试题步长
+// /// @param {int} markingUserId 试卷ID
+// /// @param {String} questionNum 题号
+// /// return 没有设置就返回0,设置了返回对应的值
+// double getScoreStepSize(int markingUserId, String questionNum, double defaultNum) {
+// double? val = scoreIntervalMap?['$markingUserId-$questionNum'];
+// return val ?? defaultNum;
+// }
+// }
+
+// @JsonSerializable(includeIfNull: false)
+// class MarkingCommonScoreItems extends Object {
+// @JsonKey(name: 'id')
+// int id;
+
+// @JsonKey(name: 'questionNum')
+// String questionNum;
+
+// @JsonKey(name: 'score')
+// List score;
+
+// MarkingCommonScoreItems({
+// required this.id,
+// required this.questionNum,
+// required this.score,
+// });
+
+// factory MarkingCommonScoreItems.fromJson(Map srcJson) => _$MarkingCommonScoreItemsFromJson(srcJson);
+
+// Map toJson() => _$MarkingCommonScoreItemsToJson(this);
+// }
+
+import 'package:json_annotation/json_annotation.dart';
+import 'package:marking_app/common/model/enum/KeyboardType.dart';
+import 'package:marking_app/common/model/marking/marking_common_score_items.dart';
+
+part 'do_marking_keyboard_model.g.dart';
+
+// 键盘操作模型
+@JsonSerializable(includeIfNull: false, explicitToJson: true, checked: true)
+class DoMarkingKeyboardModel extends Object {
+ // 当前选中键盘
+ KeyboardType keyboard;
+
+ // 屏幕方向
+ ScreenDirection screenDirection;
+
+ // 引导页展示
+ bool guidePageDisplay;
+
+ // 是否关闭键盘
+ bool open;
+
+ // 自动提交并前往下一题 (输入型键盘无法自动提交只回自动前往下一题)
+ bool autoSubmitToNextQuestion;
+
+ // 键盘排序方式(输入型键盘为,无排序规则)
+ SortKeyboard? sort;
+
+ // 阅卷分值步长集合(每个试卷 每种试题分值间隔不同) key:试卷号-题号 val:分值步长
+ Map? scoreIntervalMap;
+
+ // 是否有辅助键盘
+ bool auxiliaryKeyboard;
+
+ // 打开辅助键盘
+ bool openAuxiliary;
+
+ // 是否隐藏试题ID
+ bool hideQuestionId;
+
+ // 常用打分项
+ @JsonKey(name: 'commonScores', includeIfNull: false)
+ MarkingCommonScoreItems? commonScores;
+
+ // 默认输入型键盘
+ DoMarkingKeyboardModel({
+ this.hideQuestionId = false,
+ this.screenDirection = ScreenDirection.HORIZONTAL_SCREEN,
+ this.openAuxiliary = true,
+ this.auxiliaryKeyboard = true,
+ this.keyboard = KeyboardType.RIGHT_SELECTION,
+ this.guidePageDisplay = true,
+ this.open = true,
+ this.autoSubmitToNextQuestion = true,
+ this.sort = SortKeyboard.FULL_AND_AERO_TOP,
+ this.scoreIntervalMap,
+ this.commonScores,
+ }) {
+ if (keyboard == KeyboardType.INPUT_TYPE) {
+ // 输入型键盘无排序规则
+ sort = null;
+ } else {
+ sort ??= SortKeyboard.FULL_AND_AERO_TOP;
+ }
+ if (keyboard == KeyboardType.BOTTOM_SELECTION) {
+ auxiliaryKeyboard = false;
+ }
+ if (keyboard == KeyboardType.RIGHT_SELECTION) {
+ open = true;
+ }
+ }
+ factory DoMarkingKeyboardModel.fromJson(Map srcJson) => _$DoMarkingKeyboardModelFromJson(srcJson);
+ Map toJson() => _$DoMarkingKeyboardModelToJson(this);
+
+ /// 设置步长
+ /// @param {int} markingUserId 当场考试任务ID
+ /// @param {String} questionNum 题号
+ /// @param {double?} val 步长值(val为null就清空当前步长,非null和0就是设置步长)
+ void setScoreStepSize(int markingUserId, String questionNum, double defaultNum, double val) {
+ if (val == defaultNum) return;
+ String theKey = '$markingUserId-$questionNum';
+ // val = val==0?null:val;
+ // if(val==null){
+ // // 清空
+ // scoreIntervalMap!.remove(theKey);
+ // }else{
+ // // 设置值
+ // scoreIntervalMap ??= {};
+ // scoreIntervalMap!['$markingUserId-$questionNum'] = val;
+ // }
+ // 设置值
+ scoreIntervalMap ??= {};
+ scoreIntervalMap!['$markingUserId-$questionNum'] = val;
+ }
+
+ /// 或者试题步长
+ /// @param {int} markingUserId 试卷ID
+ /// @param {String} questionNum 题号
+ /// return 没有设置就返回0,设置了返回对应的值
+ double getScoreStepSize(int markingUserId, String questionNum, double defaultNum) {
+ double? val = scoreIntervalMap?['$markingUserId-$questionNum'];
+ return val ?? defaultNum;
+ }
+}
diff --git a/marking_app/lib/common/model/marking/keyboard_assist_event.dart b/marking_app/lib/common/model/marking/keyboard_assist_event.dart
new file mode 100644
index 0000000..d564097
--- /dev/null
+++ b/marking_app/lib/common/model/marking/keyboard_assist_event.dart
@@ -0,0 +1,19 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'keyboard_assist_event.g.dart';
+
+// 键盘辅助类
+@JsonSerializable()
+class KeyboardAssistEvent extends Object {
+
+ bool openAuxiliary; // 打开辅助键盘
+
+ KeyboardAssistEvent({this.openAuxiliary = false});
+
+ factory KeyboardAssistEvent.fromJson(Map srcJson) => _$KeyboardAssistEventFromJson(srcJson);
+
+ Map toJson() => _$KeyboardAssistEventToJson(this);
+
+}
+
+
diff --git a/marking_app/lib/common/model/marking/keyboard_assist_event.g.dart b/marking_app/lib/common/model/marking/keyboard_assist_event.g.dart
new file mode 100644
index 0000000..13cca58
--- /dev/null
+++ b/marking_app/lib/common/model/marking/keyboard_assist_event.g.dart
@@ -0,0 +1,18 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+part of 'keyboard_assist_event.dart';
+
+// **************************************************************************
+// JsonSerializableGenerator
+// **************************************************************************
+
+KeyboardAssistEvent _$KeyboardAssistEventFromJson(Map json) =>
+ KeyboardAssistEvent(
+ openAuxiliary: json['openAuxiliary'] as bool? ?? false,
+ );
+
+Map _$KeyboardAssistEventToJson(
+ KeyboardAssistEvent instance) =>
+ {
+ 'openAuxiliary': instance.openAuxiliary,
+ };
diff --git a/marking_app/lib/common/model/marking/marking_abnormal_res.dart b/marking_app/lib/common/model/marking/marking_abnormal_res.dart
new file mode 100644
index 0000000..11da7f1
--- /dev/null
+++ b/marking_app/lib/common/model/marking/marking_abnormal_res.dart
@@ -0,0 +1,15 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'marking_abnormal_res.g.dart';
+
+@JsonSerializable()
+class MarkingAbnormalRes extends Object {
+ @JsonKey(name: 'errorsTypeDic')
+ Map errorsTypeDic;
+
+ MarkingAbnormalRes(this.errorsTypeDic);
+
+ factory MarkingAbnormalRes.fromJson(Map srcJson) => _$MarkingAbnormalResFromJson(srcJson);
+
+ Map toJson() => _$MarkingAbnormalResToJson(this);
+}
diff --git a/marking_app/lib/common/model/marking/marking_common_score_items.dart b/marking_app/lib/common/model/marking/marking_common_score_items.dart
new file mode 100644
index 0000000..fe7fe39
--- /dev/null
+++ b/marking_app/lib/common/model/marking/marking_common_score_items.dart
@@ -0,0 +1,51 @@
+// import 'package:json_annotation/json_annotation.dart';
+
+// part 'marking_common_score_items.g.dart';
+
+// @JsonSerializable(includeIfNull: false)
+// class MarkingCommonScoreItems extends Object {
+// @JsonKey(name: 'id')
+// int id;
+
+// @JsonKey(name: 'questionNum')
+// String questionNum;
+
+// @JsonKey(name: 'score')
+// List score;
+
+// MarkingCommonScoreItems({
+// required this.id,
+// required this.questionNum,
+// required this.score,
+// });
+
+// factory MarkingCommonScoreItems.fromJson(Map srcJson) => _$MarkingCommonScoreItemsFromJson(srcJson);
+
+// Map toJson() => _$MarkingCommonScoreItemsToJson(this);
+// }
+
+import 'package:json_annotation/json_annotation.dart';
+
+part 'marking_common_score_items.g.dart';
+
+@JsonSerializable(includeIfNull: false)
+class MarkingCommonScoreItems extends Object {
+ @JsonKey(name: 'id')
+ int id;
+
+ @JsonKey(name: 'questionNum')
+ String questionNum;
+
+ @JsonKey(name: 'score')
+ List score;
+
+ MarkingCommonScoreItems({
+ required this.id,
+ required this.questionNum,
+ required this.score,
+ });
+
+ factory MarkingCommonScoreItems.fromJson(Map srcJson) => _$MarkingCommonScoreItemsFromJson(srcJson);
+
+ Map toJson() => _$MarkingCommonScoreItemsToJson(this);
+}
diff --git a/marking_app/lib/common/model/marking/marking_history_zoom_info.dart b/marking_app/lib/common/model/marking/marking_history_zoom_info.dart
new file mode 100644
index 0000000..0bacc02
--- /dev/null
+++ b/marking_app/lib/common/model/marking/marking_history_zoom_info.dart
@@ -0,0 +1,33 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'marking_history_zoom_info.g.dart';
+
+@JsonSerializable()
+class MarkingHistoryZoomInfo extends Object {
+ @JsonKey(name: 'markingUserId')
+ int markingUserId;
+
+ @JsonKey(name: 'questionNum')
+ String questionNum;
+
+ @JsonKey(name: 'scale')
+ double scale;
+
+ @JsonKey(name: 'positionY')
+ double positionY;
+
+ @JsonKey(name: 'positionX')
+ double positionX;
+
+ MarkingHistoryZoomInfo({
+ required this.markingUserId,
+ required this.questionNum,
+ required this.scale,
+ required this.positionY,
+ required this.positionX,
+ });
+
+ factory MarkingHistoryZoomInfo.fromJson(Map srcJson) => _$MarkingHistoryZoomInfoFromJson(srcJson);
+
+ Map toJson() => _$MarkingHistoryZoomInfoToJson(this);
+}
diff --git a/marking_app/lib/common/model/marking/marking_history_zoom_info.g.dart b/marking_app/lib/common/model/marking/marking_history_zoom_info.g.dart
new file mode 100644
index 0000000..07a8b6a
--- /dev/null
+++ b/marking_app/lib/common/model/marking/marking_history_zoom_info.g.dart
@@ -0,0 +1,27 @@
+// GENERATED CODE - DO NOT MODIFY BY HAND
+
+part of 'marking_history_zoom_info.dart';
+
+// **************************************************************************
+// JsonSerializableGenerator
+// **************************************************************************
+
+MarkingHistoryZoomInfo _$MarkingHistoryZoomInfoFromJson(
+ Map json) =>
+ MarkingHistoryZoomInfo(
+ markingUserId: json['markingUserId'] as int,
+ questionNum: json['questionNum'] as String,
+ scale: (json['scale'] as num).toDouble(),
+ positionY: (json['positionY'] as num).toDouble(),
+ positionX: (json['positionX'] as num).toDouble(),
+ );
+
+Map _$MarkingHistoryZoomInfoToJson(
+ MarkingHistoryZoomInfo instance) =>
+ {
+ 'markingUserId': instance.markingUserId,
+ 'questionNum': instance.questionNum,
+ 'scale': instance.scale,
+ 'positionY': instance.positionY,
+ 'positionX': instance.positionX,
+ };
diff --git a/marking_app/lib/common/model/marking/marking_item.dart b/marking_app/lib/common/model/marking/marking_item.dart
new file mode 100644
index 0000000..e106ae4
--- /dev/null
+++ b/marking_app/lib/common/model/marking/marking_item.dart
@@ -0,0 +1,59 @@
+/*
+ * @Author: wangyang 1147192855@qq.com
+ * @Date: 2022-07-18 13:55:30
+ * @LastEditors: wangyang 1147192855@qq.com
+ * @LastEditTime: 2022-07-20 21:02:36
+ * @FilePath: \marking_app\lib\common\model\marking\markingItem.dart
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+import 'package:json_annotation/json_annotation.dart';
+import 'package:marking_app/utils/index.dart';
+
+part 'marking_item.g.dart';
+
+@JsonSerializable(checked: true)
+class MarkingItem extends Object {
+ @JsonKey(name: 'markingUserId')
+ int markingUserId;
+
+ @JsonKey(name: 'examSubjectId')
+ int examSubjectId;
+
+ @JsonKey(name: 'isSchoolAssign')
+ bool isSchoolAssign;
+
+ @JsonKey(name: 'examName')
+ String examName;
+
+ @JsonKey(name: 'subjectId')
+ int subjectId;
+
+ @JsonKey(name: 'finishCount')
+ int finishCount;
+
+ @JsonKey(name: 'totalCount')
+ int totalCount;
+
+ @JsonKey(name: 'isFinish')
+ bool isFinish;
+
+ // 完成比例
+ @JsonKey(name: 'completionRate')
+ double completionRate;
+
+ @JsonKey(name: 'completionRateStr')
+ String completionRateStr;
+
+ MarkingItem(this.examSubjectId, this.isFinish, this.markingUserId, this.examName, this.subjectId, this.finishCount,
+ this.totalCount,
+ {this.isSchoolAssign = false, this.completionRate = 0, this.completionRateStr = '0.0'}) {
+ if (totalCount != 0) {
+ completionRate = finishCount / totalCount;
+ completionRateStr = doubleToStringAsFixed((completionRate * 100));
+ }
+ }
+
+ factory MarkingItem.fromJson(Map srcJson) => _$MarkingItemFromJson(srcJson);
+
+ Map toJson() => _$MarkingItemToJson(this);
+}
diff --git a/marking_app/lib/common/model/marking/marking_keyboard_sliding_position.dart b/marking_app/lib/common/model/marking/marking_keyboard_sliding_position.dart
new file mode 100644
index 0000000..b950270
--- /dev/null
+++ b/marking_app/lib/common/model/marking/marking_keyboard_sliding_position.dart
@@ -0,0 +1,26 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'marking_keyboard_sliding_position.g.dart';
+
+@JsonSerializable()
+class MarkingKeyboardSlidingPosition extends Object {
+ @JsonKey(name: 'id')
+ int id;
+
+ @JsonKey(name: 'questionNum')
+ String questionNum;
+
+ @JsonKey(name: 'position')
+ double position;
+
+ @JsonKey(name: 'isVertical')
+ bool isVertical; // 是否是横行键盘
+
+ MarkingKeyboardSlidingPosition(
+ {required this.id, required this.questionNum, required this.position, this.isVertical = false});
+
+ factory MarkingKeyboardSlidingPosition.fromJson(Map srcJson) =>
+ _$MarkingKeyboardSlidingPositionFromJson(srcJson);
+
+ Map toJson() => _$MarkingKeyboardSlidingPositionToJson(this);
+}
diff --git a/marking_app/lib/common/model/marking/marking_list_params.dart b/marking_app/lib/common/model/marking/marking_list_params.dart
new file mode 100644
index 0000000..da455b5
--- /dev/null
+++ b/marking_app/lib/common/model/marking/marking_list_params.dart
@@ -0,0 +1,43 @@
+/*
+ * @Author: wangyang 1147192855@qq.com
+ * @Date: 2022-07-18 12:58:28
+ * @LastEditors: wangyang 1147192855@qq.com
+ * @LastEditTime: 2022-07-19 16:27:05
+ * @FilePath: \marking_app\lib\common\model\marking\marking_list_params.dart
+ * @Description: 阅卷列表请求参数类
+ */
+import 'package:json_annotation/json_annotation.dart';
+import 'package:marking_app/common/model/common/base_page.dart';
+import 'package:marking_app/common/model/enum/marking_list_type.dart';
+
+part 'marking_list_params.g.dart';
+
+@JsonSerializable()
+class MarkingListParams extends BasePage {
+ @JsonKey(name: 'isFinish')
+ bool isFinish;
+
+ // 阅卷类型
+ @JsonKey(name: 'PageType')
+ int pageType;
+
+ MarkingListParams({
+ required this.isFinish,
+ required this.pageType,
+ required page,
+ required limit,
+ }) : super(page, limit);
+
+ factory MarkingListParams.fromJson(Map srcJson) => _$MarkingListParamsFromJson(srcJson);
+
+ @override
+ Map toJson() => _$MarkingListParamsToJson(this);
+
+ setPagetype(MarkingListType typeEnum) {
+ this.pageType = typeEnum.index;
+ }
+
+ MarkingListType getPagetype() {
+ return MarkingListType.values[pageType];
+ }
+}
diff --git a/marking_app/lib/common/model/marking/marking_statistics.dart b/marking_app/lib/common/model/marking/marking_statistics.dart
new file mode 100644
index 0000000..6b5166d
--- /dev/null
+++ b/marking_app/lib/common/model/marking/marking_statistics.dart
@@ -0,0 +1,21 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'marking_statistics.g.dart';
+
+@JsonSerializable()
+class MarkingStatistics extends Object {
+ @JsonKey(name: 'total')
+ int total;
+
+ @JsonKey(name: 'navId')
+ int navld;
+
+ MarkingStatistics(
+ this.total,
+ this.navld,
+ );
+
+ factory MarkingStatistics.fromJson(Map srcJson) => _$MarkingStatisticsFromJson(srcJson);
+
+ Map toJson() => _$MarkingStatisticsToJson(this);
+}
diff --git a/marking_app/lib/common/model/marking/marking_submit_result.dart b/marking_app/lib/common/model/marking/marking_submit_result.dart
new file mode 100644
index 0000000..177562a
--- /dev/null
+++ b/marking_app/lib/common/model/marking/marking_submit_result.dart
@@ -0,0 +1,25 @@
+import 'package:json_annotation/json_annotation.dart';
+import 'package:marking_app/common/model/marking/progress_of_marking.dart';
+
+part 'marking_submit_result.g.dart';
+
+
+@JsonSerializable()
+ class MarkingSubmitResult extends Object {
+
+ @JsonKey(name: 'marking')
+ bool marking;
+
+ @JsonKey(name: 'markingProgress')
+ ProgressOfMarking markingProgress;
+
+ MarkingSubmitResult(this.marking,this.markingProgress,);
+
+ factory MarkingSubmitResult.fromJson(Map srcJson) => _$MarkingSubmitResultFromJson(srcJson);
+
+ Map toJson() => _$MarkingSubmitResultToJson(this);
+
+}
+
+
+
diff --git a/marking_app/lib/common/model/marking/marking_tag_single_params.dart b/marking_app/lib/common/model/marking/marking_tag_single_params.dart
new file mode 100644
index 0000000..ae59327
--- /dev/null
+++ b/marking_app/lib/common/model/marking/marking_tag_single_params.dart
@@ -0,0 +1,21 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'marking_tag_single_params.g.dart';
+
+@JsonSerializable()
+class MarkingTagSingleParams extends Object {
+ @JsonKey(name: 'markingUserId')
+ int markingUserId;
+
+ @JsonKey(name: 'questionNum')
+ String questionNum;
+
+ @JsonKey(name: 'isExcess')
+ bool isExcess;
+
+ MarkingTagSingleParams({required this.markingUserId,required this.questionNum,required this.isExcess});
+
+ factory MarkingTagSingleParams.fromJson(Map srcJson) => _$MarkingTagSingleParamsFromJson(srcJson);
+
+ Map toJson() => _$MarkingTagSingleParamsToJson(this);
+}
diff --git a/marking_app/lib/common/model/marking/marking_text_question.dart b/marking_app/lib/common/model/marking/marking_text_question.dart
new file mode 100644
index 0000000..f206ab9
--- /dev/null
+++ b/marking_app/lib/common/model/marking/marking_text_question.dart
@@ -0,0 +1,294 @@
+/*
+ * @Author: wangyang 1147192855@qq.com
+ * @Date: 2022-07-22 15:15:29
+ * @LastEditors: wangyang 1147192855@qq.com
+ * @LastEditTime: 2022-09-28 11:48:00
+ * @FilePath: \marking_app\lib\common\model\marking\marking_text_question.dart
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+import 'dart:convert';
+
+import 'package:json_annotation/json_annotation.dart';
+import 'package:marking_app/common/model/marking/progress_of_marking.dart';
+import 'package:marking_app/utils/image/gallery_example_item_model.dart';
+
+part 'marking_text_question.g.dart';
+
+@JsonSerializable(checked: true)
+class MarkingTextQuestion extends Object {
+ @JsonKey(name: 'id')
+ int id;
+
+ @JsonKey(name: 'isException')
+ bool isException;
+
+ @JsonKey(name: 'score')
+ double? score;
+
+ @JsonKey(name: 'totalScore')
+ double totalScore;
+
+ @JsonKey(name: 'isFinish')
+ bool isFinish;
+
+ @JsonKey(name: 'questionNum')
+ String questionNum;
+
+ // 分值间隔 前端自定义
+ @JsonKey(name: 'scoreInterval')
+ double scoreInterval;
+
+ // 学生试题图片
+ @JsonKey(name: 'studentAnswerList')
+ List studentAnswerList;
+
+ // 子题(小题)
+ @JsonKey(name: 'subQuestionDetailList')
+ List subQuestionDetailList;
+
+ // 当前试题位置
+ // @JsonKey(name: 'questionIndex')
+ // int questionIndex;
+
+ // @JsonKey(name: 'totalCount')
+ // int totalCount;
+
+ // // 前端自定义
+ // @JsonKey(name: 'currentIndex')
+ // int currentIndex;
+
+ @JsonKey(name: 'lastOne')
+ bool lastOne;
+
+ @JsonKey(name: 'nextId')
+ int nextId;
+
+ @JsonKey(name: 'prevId')
+ int prevId;
+
+ @JsonKey(name: 'paperNum')
+ String? paperNum;
+
+ // 当前ID (用于获取下一道天或者上一道题)
+ // @JsonKey(name: 'markingUserDetailId')
+ // int markingUserDetailId;
+
+ // 自定义 是否评分 ,默认false
+ @JsonKey(name: 'completeRating')
+ bool completeRating;
+
+ // 整卷图片 目前后端没有返回字段
+ @JsonKey(name: 'originalPaperAbsoluteUrl')
+ List originalPaperAbsoluteUrl;
+
+ // 阅卷进度
+ @JsonKey(name: 'markingProgress')
+ ProgressOfMarking? markingProgress;
+
+ // 批注图片集合
+ @JsonKey(name: 'commentImageUrl')
+ List commentImageUrl;
+
+ // 原卷数组 前端自定义
+ List papersUrl;
+
+ // 原卷地址 前端自定义
+ @JsonKey(name: 'papersUrlStr')
+ List? papersUrlStr;
+
+ // 批注图片 预提交集合
+ @JsonKey(name: 'commentImageUrlTodo')
+ List? commentImageUrlTodo;
+
+ // 批注图片Map
+ @JsonKey(name: 'commentImageUrlMap')
+ Map commentImageUrlMap;
+
+ // 仲裁历史得分
+ @JsonKey(name: 'historicalScore')
+ String? historicalScore;
+
+ @JsonKey(name: 'exceptionInfo')
+ ExceptionInfo? exceptionInfo;
+
+ // 仲裁历史得分 ==》
+ @JsonKey(name: 'historicalScorings')
+ List? historicalScorings;
+
+ MarkingTextQuestion(this.id, this.totalScore, this.isFinish, this.subQuestionDetailList, this.isException,
+ this.questionNum, this.score, this.studentAnswerList,
+ // this.questionIndex,
+ {required this.commentImageUrl,
+ required this.lastOne,
+ required this.nextId,
+ required this.prevId,
+ this.historicalScore,
+ this.scoreInterval = 1,
+ this.markingProgress,
+ this.completeRating = false,
+ this.originalPaperAbsoluteUrl = const [],
+ // this.totalCount = 0,
+ // this.currentIndex = 0,
+ this.papersUrl = const [],
+ this.commentImageUrlTodo,
+ this.commentImageUrlMap = const {}}) {
+ score = isFinish ? score : null;
+ completeRating = isFinish && score != null;
+ // totalCount = markingProgress?.totalCount ?? totalCount;
+ // currentIndex = markingProgress?.nowIndex ?? currentIndex;
+ // currentIndex = questionIndex;
+ commentImageUrlMap = Map();
+
+ if (commentImageUrl.isNotEmpty) {
+ for (var element in commentImageUrl) {
+ commentImageUrlMap[element] = '$element?${DateTime.now().millisecondsSinceEpoch}';
+ }
+ } else {
+ for (var element in studentAnswerList) {
+ commentImageUrlMap[element] = element;
+ }
+ }
+ // if (historicalScore != null) {
+ // this.historicalScorings = (jsonDecode(historicalScore!) as List).map((e) {
+ // return HistoricalScoring.fromJson(e as Map);
+ // }).toList();
+ // }
+ // TODO 删除
+ // this.historicalScorings = [
+ // HistoricalScoring.fromJson({'scorel': 1.5, 'name': 'wy', 'markingUserld': 121321231313}),
+ // HistoricalScoring.fromJson({'scorel': 5, 'name': '汪杨', 'markingUserld': 121321231313})
+ // ];
+ // print('这个是仲裁数据:${this.historicalScorings.toString()}');
+ // exceptionInfo = ExceptionInfo.fromJson({'reason': "4325432", 'errorType': "其他", 'submitUserName': "陈川蓉"});
+ }
+
+ factory MarkingTextQuestion.fromJson(Map srcJson) => _$MarkingTextQuestionFromJson(srcJson);
+
+ List getImageData() {
+ if (commentImageUrlTodo != null && commentImageUrlTodo!.isNotEmpty) {
+ return commentImageUrlTodo!;
+ }
+
+ if (commentImageUrl.isNotEmpty) {
+ return commentImageUrl;
+ }
+
+ return studentAnswerList;
+ }
+
+ bool setImageList(String resImage, int imageIndex) {
+ try {
+ commentImageUrlTodo ??= getImageData().map((e) => e).toList();
+ String oldImage = studentAnswerList[imageIndex];
+ commentImageUrlMap[oldImage] = '$resImage?${DateTime.now().millisecondsSinceEpoch}';
+ commentImageUrlTodo![imageIndex] = resImage;
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+
+ /// @param account 总数
+ /// @param index 下标
+ void setTotalCountAndCurrentIndex(int account, int index) {
+ // totalCount = account;
+ // currentIndex = index;
+ }
+}
+
+// 子题(小题)
+@JsonSerializable()
+class SubQuestions extends Object {
+ // 总分
+ @JsonKey(name: 'subQuestionScore')
+ double subQuestionScore;
+
+ // 得分
+ @JsonKey(name: 'subQuestionGotScore')
+ double? subQuestionGotScore;
+
+ // 小题题号
+ @JsonKey(name: 'subQuestionNum')
+ String subQuestionNum;
+
+ // JS端判断是否得分 判断0分使用,dart 不需要(也可作为是否已经提交判断)
+ @JsonKey(name: 'isFinish')
+ bool isFinish;
+
+ // 自定义 是否评分 ,默认false
+ @JsonKey(name: 'completeRating')
+ bool completeRating;
+
+ SubQuestions(
+ {required this.subQuestionScore,
+ required this.subQuestionNum,
+ this.subQuestionGotScore,
+ required this.isFinish,
+ this.completeRating = false}) {
+ subQuestionGotScore = isFinish ? subQuestionGotScore : null;
+ completeRating = isFinish && subQuestionGotScore != null;
+ }
+
+ factory SubQuestions.fromJson(Map srcJson) => _$SubQuestionsFromJson(srcJson);
+ Map toJson() => _$SubQuestionsToJson(this);
+}
+
+@JsonSerializable(checked: true)
+class HistoricalScoring extends Object {
+ @JsonKey(name: 'markingUserId')
+ int markingUserld;
+
+ @JsonKey(name: 'name')
+ String name;
+
+ @JsonKey(name: 'score')
+ double scorel;
+
+ HistoricalScoring(
+ this.markingUserld,
+ this.name,
+ this.scorel,
+ );
+
+ factory HistoricalScoring.fromJson(Map srcJson) => _$HistoricalScoringFromJson(srcJson);
+
+ Map toJson() => _$HistoricalScoringToJson(this);
+}
+
+@JsonSerializable()
+class ExceptionInfo extends Object {
+ @JsonKey(name: 'reason')
+ String? reason;
+
+ @JsonKey(name: 'errorType')
+ String errorType;
+
+ @JsonKey(name: 'submitUserName')
+ String submitUserName;
+
+ @JsonKey(name: 'studentName')
+ String studentName;
+
+ @JsonKey(name: 'studentExamNum')
+ String studentExamNum;
+
+ @JsonKey(name: 'paperNum')
+ String paperNum;
+
+ ExceptionInfo(
+ this.reason,
+ this.errorType,
+ this.submitUserName,
+ this.paperNum,
+ this.studentExamNum,
+ this.studentName,
+ ) {
+ if (reason?.length == 0) {
+ reason = null;
+ }
+ }
+
+ factory ExceptionInfo.fromJson(Map srcJson) => _$ExceptionInfoFromJson(srcJson);
+
+ Map toJson() => _$ExceptionInfoToJson(this);
+}
diff --git a/marking_app/lib/common/model/marking/marking_text_question_params.dart b/marking_app/lib/common/model/marking/marking_text_question_params.dart
new file mode 100644
index 0000000..36c7fbb
--- /dev/null
+++ b/marking_app/lib/common/model/marking/marking_text_question_params.dart
@@ -0,0 +1,42 @@
+/*
+ * @Author: wangyang 1147192855@qq.com
+ * @Date: 2022-07-22 15:19:54
+ * @LastEditors: wangyang 1147192855@qq.com
+ * @LastEditTime: 2022-07-27 12:26:15
+ * @FilePath: \marking_app\lib\common\model\marking\marking_text_question_params.dart
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+import 'package:json_annotation/json_annotation.dart';
+
+part 'marking_text_question_params.g.dart';
+
+@JsonSerializable(includeIfNull: false)
+class MarkingTextQuestionParams extends Object {
+ @JsonKey(name: 'markingUserId')
+ int markingUserId;
+
+ @JsonKey(name: 'MarkingUserDetailId')
+ int? markingUserDetailId;
+
+ @JsonKey(name: 'type')
+ int? type;
+
+ @JsonKey(name: 'isReview')
+ bool isReview;
+
+ @JsonKey(name: 'pageType')
+ int? pageType;
+
+ MarkingTextQuestionParams({
+ required this.markingUserId,
+ this.pageType,
+ this.markingUserDetailId,
+ this.type,
+ this.isReview = false,
+ });
+
+ factory MarkingTextQuestionParams.fromJson(Map srcJson) =>
+ _$MarkingTextQuestionParamsFromJson(srcJson);
+
+ Map toJson() => _$MarkingTextQuestionParamsToJson(this);
+}
diff --git a/marking_app/lib/common/model/marking/marking_text_question_tab.dart b/marking_app/lib/common/model/marking/marking_text_question_tab.dart
new file mode 100644
index 0000000..209b900
--- /dev/null
+++ b/marking_app/lib/common/model/marking/marking_text_question_tab.dart
@@ -0,0 +1,99 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'marking_text_question_tab.g.dart';
+
+@JsonSerializable()
+class MarkingTextQuestionTab extends Object {
+ @JsonKey(name: 'questionNum')
+ String questionNum; // 批次题号
+
+ @JsonKey(name: 'total')
+ int total; // 当前批次试题总数(领取的任务数量)
+
+ // @JsonKey(name: 'excessAvgCount')
+ // int excessAvgCount; // 阅卷指标
+
+ @JsonKey(name: 'finishCount')
+ int finishCount; // 当前批次完成数量
+
+ @JsonKey(name: 'isExcess')
+ bool isExcess; // 是否是超量题
+
+ @JsonKey(name: 'isFinished')
+ bool isFinished; // 是否是超量题
+
+ @JsonKey(name: 'scoreInterval')
+ double? scoreInterval; // 自定义 ==》 当前TAG下对应步长
+
+ // @JsonKey(name: 'agreementExcess')
+ // bool? agreementExcess; // 自定义 ==》 是否同意批阅超量题
+
+ // 进度条 完成百分比
+ @JsonKey(name: 'percent')
+ double percent;
+
+ // @JsonKey(name: 'excessCountTotal')
+ // int? excessCountTotal; // 前端自定义 ==》 超量题总数量
+
+ MarkingTextQuestionTab({
+ required this.questionNum,
+ required this.total,
+ required this.finishCount,
+ // this.excessCount = 0,
+ this.isExcess = false,
+ // this.excessAvgCount = 0,
+ this.scoreInterval,
+ // this.agreementExcess,
+ this.percent = 0.0,
+ this.isFinished = false,
+ }) {
+ initGradingProgress();
+ }
+
+ void initGradingProgress() {
+ try {
+ /** 取消字段不需要判断位置了
+ if (isExcess) {
+ // 超量题
+ dividendTotal = excessAvgCount; // 默认以指标数为被除数
+ if (finishCount >= excessAvgCount) {
+ percent = 1;
+ return;
+ /**
+ // 完成数量大于指标
+ if (agreementExcess == null || agreementExcess == false) {
+ // 没有同意继续批阅的试题返回1
+ percent = 1;
+ return;
+ }
+
+ if (excessCount > 0) {
+ // 题池中还有试题
+ dividendTotal = total + excessCount; // 任务总量加题池剩余重量 作为被除数
+ } else {
+ // 题池中没有试题
+ if (finishCount == total) {
+ percent = 1;
+ return;
+ }
+ dividendTotal = total;
+ } */
+ }
+ } */
+ // print('这里是数据:${finishCount};${dividendTotal}');
+ percent = isFinished || (isExcess && finishCount >= total) ? 1 : finishCount / total;
+ if (percent > 1) {
+ percent = 1;
+ }
+ // TODO 这里数据"percent"可能返回大于1 需要埋点
+ } catch (e) {
+ percent = 0.0;
+ }
+ }
+
+ setStepSize(double stepSize) => this.scoreInterval = stepSize;
+
+ factory MarkingTextQuestionTab.fromJson(Map srcJson) => _$MarkingTextQuestionTabFromJson(srcJson);
+
+ Map toJson() => _$MarkingTextQuestionTabToJson(this);
+}
diff --git a/marking_app/lib/common/model/marking/marking_text_question_tab_params.dart b/marking_app/lib/common/model/marking/marking_text_question_tab_params.dart
new file mode 100644
index 0000000..dc14888
--- /dev/null
+++ b/marking_app/lib/common/model/marking/marking_text_question_tab_params.dart
@@ -0,0 +1,43 @@
+/*
+ * @Author: wangyang 1147192855@qq.com
+ * @Date: 2022-07-22 15:19:54
+ * @LastEditors: wangyang 1147192855@qq.com
+ * @LastEditTime: 2022-07-27 12:26:15
+ * @FilePath: \marking_app\lib\common\model\marking\marking_text_question_params.dart
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+import 'package:json_annotation/json_annotation.dart';
+import 'package:marking_app/common/model/marking/marking_text_question_tab.dart';
+
+part 'marking_text_question_tab_params.g.dart';
+
+@JsonSerializable(includeIfNull: false)
+class MarkingTextQuestionTabParams extends Object {
+ @JsonKey(name: 'markingUserId')
+ int markingUserId;
+
+ @JsonKey(name: 'MarkingUserDetailId')
+ int? markingUserDetailId;
+
+ @JsonKey(name: 'QuestionNum')
+ String? questionNum;
+
+ MarkingTextQuestionTabParams({
+ required this.markingUserId,
+ required this.questionNum,
+ this.markingUserDetailId,
+ });
+
+ factory MarkingTextQuestionTabParams.fromJson(Map srcJson) =>
+ _$MarkingTextQuestionTabParamsFromJson(srcJson);
+
+ Map toJson() => _$MarkingTextQuestionTabParamsToJson(this);
+
+ MarkingTextQuestionTabParams setQuestionNum({required MarkingTextQuestionTab tab, String? locaQuestionNum}) {
+ this.questionNum = tab.questionNum;
+ if (locaQuestionNum != null && questionNum != locaQuestionNum) {
+ this.markingUserDetailId = 0;
+ }
+ return this;
+ }
+}
diff --git a/marking_app/lib/common/model/marking/marking_text_question_tab_step_size.dart b/marking_app/lib/common/model/marking/marking_text_question_tab_step_size.dart
new file mode 100644
index 0000000..93cc5f6
--- /dev/null
+++ b/marking_app/lib/common/model/marking/marking_text_question_tab_step_size.dart
@@ -0,0 +1,24 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'marking_text_question_tab_step_size.g.dart';
+
+
+@JsonSerializable()
+ class MarkingTextQuestionTabStepSize extends Object {
+
+ @JsonKey(name: 'questionNum')
+ String questionNum; // 批次题号
+
+ @JsonKey(name: 'scoreInterval')
+ double scoreInterval; // 超量题词数量
+
+ MarkingTextQuestionTabStepSize(this.questionNum,this.scoreInterval);
+
+ factory MarkingTextQuestionTabStepSize.fromJson(Map srcJson) => _$MarkingTextQuestionTabStepSizeFromJson(srcJson);
+
+ Map toJson() => _$MarkingTextQuestionTabStepSizeToJson(this);
+
+
+}
+
+
diff --git a/marking_app/lib/common/model/marking/marking_zoom.dart b/marking_app/lib/common/model/marking/marking_zoom.dart
new file mode 100644
index 0000000..3efd7f4
--- /dev/null
+++ b/marking_app/lib/common/model/marking/marking_zoom.dart
@@ -0,0 +1,29 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'marking_zoom.g.dart';
+
+@JsonSerializable()
+class MarkingZoom extends Object {
+ @JsonKey(name: 'questionNumber')
+ String questionNumber;
+
+ @JsonKey(name: 'scale')
+ double scale;
+
+ @JsonKey(name: 'dx')
+ double dx;
+
+ @JsonKey(name: 'dy')
+ double dy;
+
+ MarkingZoom({
+ required this.scale,
+ required this.dx,
+ required this.dy,
+ required this.questionNumber,
+ });
+
+ factory MarkingZoom.fromJson(Map srcJson) => _$MarkingZoomFromJson(srcJson);
+
+ Map toJson() => _$MarkingZoomToJson(this);
+}
diff --git a/marking_app/lib/common/model/marking/progress_of_marking.dart b/marking_app/lib/common/model/marking/progress_of_marking.dart
new file mode 100644
index 0000000..0d30c25
--- /dev/null
+++ b/marking_app/lib/common/model/marking/progress_of_marking.dart
@@ -0,0 +1,21 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'progress_of_marking.g.dart';
+
+@JsonSerializable()
+class ProgressOfMarking extends Object {
+
+ @JsonKey(name: 'totalCount')
+ int totalCount;
+
+ @JsonKey(name: 'nowIndex')
+ int nowIndex;
+
+
+ ProgressOfMarking(this.totalCount,this.nowIndex);
+
+ factory ProgressOfMarking.fromJson(Map srcJson) =>
+ _$ProgressOfMarkingFromJson(srcJson);
+
+ Map toJson() => _$ProgressOfMarkingToJson(this);
+}
diff --git a/marking_app/lib/common/model/marking/rating_progress_model.dart b/marking_app/lib/common/model/marking/rating_progress_model.dart
new file mode 100644
index 0000000..6727419
--- /dev/null
+++ b/marking_app/lib/common/model/marking/rating_progress_model.dart
@@ -0,0 +1,29 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'rating_progress_model.g.dart';
+
+@JsonSerializable()
+class RatingProgressModel extends Object {
+ @JsonKey(name: 'questionNum')
+ String questionNum;
+
+ @JsonKey(name: 'avgScore')
+ double avgScore;
+
+ @JsonKey(name: 'schedule')
+ double schedule;
+
+ @JsonKey(name: 'myAvgScore')
+ double myAvgScore;
+
+ RatingProgressModel(
+ this.questionNum,
+ this.avgScore,
+ this.schedule,
+ this.myAvgScore,
+ );
+
+ factory RatingProgressModel.fromJson(Map srcJson) => _$RatingProgressModelFromJson(srcJson);
+
+ Map toJson() => _$RatingProgressModelToJson(this);
+}
diff --git a/marking_app/lib/common/model/marking/review_records_item.dart b/marking_app/lib/common/model/marking/review_records_item.dart
new file mode 100644
index 0000000..df8836e
--- /dev/null
+++ b/marking_app/lib/common/model/marking/review_records_item.dart
@@ -0,0 +1,33 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'review_records_item.g.dart';
+
+@JsonSerializable()
+class ReviewRecordsItem extends Object {
+ @JsonKey(name: 'markingUserDetailId')
+ int markingUserDetailId;
+
+ @JsonKey(name: 'paperNum')
+ String paperNum;
+
+ @JsonKey(name: 'finishTime')
+ String finishTime;
+
+ @JsonKey(name: 'sort')
+ int sort;
+
+ @JsonKey(name: 'score')
+ double score;
+
+ ReviewRecordsItem(
+ this.markingUserDetailId,
+ this.paperNum,
+ this.finishTime,
+ this.sort,
+ this.score,
+ );
+
+ factory ReviewRecordsItem.fromJson(Map srcJson) => _$ReviewRecordsItemFromJson(srcJson);
+
+ Map toJson() => _$ReviewRecordsItemToJson(this);
+}
diff --git a/marking_app/lib/common/model/marking/review_records_params.dart b/marking_app/lib/common/model/marking/review_records_params.dart
new file mode 100644
index 0000000..8ab23bf
--- /dev/null
+++ b/marking_app/lib/common/model/marking/review_records_params.dart
@@ -0,0 +1,20 @@
+import 'package:json_annotation/json_annotation.dart';
+import 'package:marking_app/common/model/common/base_page.dart';
+
+part 'review_records_params.g.dart';
+
+@JsonSerializable()
+class ReviewRecordsParams extends BasePage {
+ @JsonKey(name: 'QuestionNum')
+ String questionNum;
+
+ @JsonKey(name: 'markingUserId')
+ int markingUserId;
+
+ ReviewRecordsParams({required page, required limit, required this.questionNum, required this.markingUserId})
+ : super(page, limit);
+
+ factory ReviewRecordsParams.fromJson(Map srcJson) => _$ReviewRecordsParamsFromJson(srcJson);
+
+ Map toJson() => _$ReviewRecordsParamsToJson(this);
+}
diff --git a/marking_app/lib/common/model/marking/submit_exam_abnormal_params.dart b/marking_app/lib/common/model/marking/submit_exam_abnormal_params.dart
new file mode 100644
index 0000000..1077e70
--- /dev/null
+++ b/marking_app/lib/common/model/marking/submit_exam_abnormal_params.dart
@@ -0,0 +1,30 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'submit_exam_abnormal_params.g.dart';
+
+@JsonSerializable()
+class SubmitExamAbnormalParams extends Object {
+ @JsonKey(name: 'markingUserDetailId')
+ int markingUserDetailId;
+
+ @JsonKey(name: 'markingUserId')
+ int markingUserId;
+
+ @JsonKey(name: 'reason')
+ String reason;
+
+ @JsonKey(name: 'errorType')
+ int errorType;
+
+ SubmitExamAbnormalParams({
+ required this.markingUserDetailId,
+ required this.markingUserId,
+ required this.reason,
+ required this.errorType,
+ });
+
+ factory SubmitExamAbnormalParams.fromJson(Map srcJson) =>
+ _$SubmitExamAbnormalParamsFromJson(srcJson);
+
+ Map toJson() => _$SubmitExamAbnormalParamsToJson(this);
+}
diff --git a/marking_app/lib/common/model/marking/submit_exam_params.dart b/marking_app/lib/common/model/marking/submit_exam_params.dart
new file mode 100644
index 0000000..1e3f3d3
--- /dev/null
+++ b/marking_app/lib/common/model/marking/submit_exam_params.dart
@@ -0,0 +1,76 @@
+/*
+ * @Author: wangyang 1147192855@qq.com
+ * @Date: 2022-07-22 15:32:18
+ * @LastEditors: wangyang 1147192855@qq.com
+ * @LastEditTime: 2022-07-22 15:36:53
+ * @FilePath: \marking_app\lib\common\model\marking\submit_exam_params.dart
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+import 'package:json_annotation/json_annotation.dart';
+import 'package:marking_app/common/model/marking/submit_exam_abnormal_params.dart';
+import 'package:marking_app/common/model/marking/submit_exam_small_params.dart';
+
+part 'submit_exam_params.g.dart';
+
+@JsonSerializable(includeIfNull: false, explicitToJson: true)
+class SubmitExamParams extends Object {
+ // 任务ID
+ @JsonKey(name: 'markingUserId')
+ int markingUserId;
+
+ // 当前试题ID
+ @JsonKey(name: 'markingUserDetailId')
+ int markingUserDetailId;
+
+ @JsonKey(name: 'isReview')
+ bool isReview;
+
+ // 是否异常
+ @JsonKey(name: 'isException')
+ bool isException;
+
+ // 得分
+ @JsonKey(name: 'score')
+ double? score;
+
+ @JsonKey(name: 'commentImageUrl')
+ String? commentImageUrl;
+
+ // 试题
+ @JsonKey(name: 'subQuestionDetailList')
+ List? subQuestionDetailList;
+
+ @JsonKey(name: 'questionNum')
+ String? questionNum;
+
+ @JsonKey(name: 'isExcess')
+ bool? isExcess;
+
+ @JsonKey(name: 'excessContinue')
+ bool? excessContinue;
+
+ @JsonKey(name: 'pageType')
+ int? pageType;
+
+ // @JsonKey(name: 'errorRecord', fromJson: SubmitExamAbnormalParams.fromJson, includeIfNull: false)
+ // SubmitExamAbnormalParams? errorRecord;
+
+ SubmitExamParams(
+ this.markingUserId,
+ this.markingUserDetailId, {
+ this.score,
+ this.subQuestionDetailList,
+ this.isException = false,
+ this.isReview = false,
+ this.commentImageUrl,
+ this.questionNum,
+ this.isExcess,
+ this.excessContinue = true,
+ this.pageType,
+ // this.errorRecord,
+ });
+
+ factory SubmitExamParams.fromJson(Map srcJson) => _$SubmitExamParamsFromJson(srcJson);
+
+ Map toJson() => _$SubmitExamParamsToJson(this);
+}
diff --git a/marking_app/lib/common/model/marking/submit_exam_small_params.dart b/marking_app/lib/common/model/marking/submit_exam_small_params.dart
new file mode 100644
index 0000000..1a851cb
--- /dev/null
+++ b/marking_app/lib/common/model/marking/submit_exam_small_params.dart
@@ -0,0 +1,35 @@
+/*
+ * @Author: wangyang 1147192855@qq.com
+ * @Date: 2022-07-22 15:33:34
+ * @LastEditors: wangyang 1147192855@qq.com
+ * @LastEditTime: 2022-07-27 10:14:28
+ * @FilePath: \marking_app\lib\common\model\marking\submit_exam_small_params.dart
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+import 'package:json_annotation/json_annotation.dart';
+
+part 'submit_exam_small_params.g.dart';
+
+
+@JsonSerializable()
+ class SubmitExamSmallParams extends Object {
+
+ @JsonKey(name: 'subQuestionNum')
+ String subQuestionNum;
+
+ @JsonKey(name: 'subQuestionScore')
+ double subQuestionScore;
+
+ @JsonKey(name: 'subQuestionGotScore')
+ double subQuestionGotScore;
+
+ @JsonKey(name: 'isFinish')
+ bool isFinish;
+
+ SubmitExamSmallParams(this.subQuestionNum,this.subQuestionScore,this.subQuestionGotScore,this.isFinish);
+
+ factory SubmitExamSmallParams.fromJson(Map srcJson) => _$SubmitExamSmallParamsFromJson(srcJson);
+
+ Map toJson() => _$SubmitExamSmallParamsToJson(this);
+
+}
\ No newline at end of file
diff --git a/marking_app/lib/common/model/marking/switch_keyboard_to_reload_images.dart b/marking_app/lib/common/model/marking/switch_keyboard_to_reload_images.dart
new file mode 100644
index 0000000..01f5640
--- /dev/null
+++ b/marking_app/lib/common/model/marking/switch_keyboard_to_reload_images.dart
@@ -0,0 +1,18 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'switch_keyboard_to_reload_images.g.dart';
+
+@JsonSerializable()
+class SwitchKeyboardToReloadImages extends Object {
+ @JsonKey(name: 'reload ')
+ bool reload;
+
+ SwitchKeyboardToReloadImages(
+ this.reload,
+ );
+
+ factory SwitchKeyboardToReloadImages.fromJson(Map srcJson) =>
+ _$SwitchKeyboardToReloadImagesFromJson(srcJson);
+
+ Map toJson() => _$SwitchKeyboardToReloadImagesToJson(this);
+}
diff --git a/marking_app/lib/common/model/progress/progress_item.dart b/marking_app/lib/common/model/progress/progress_item.dart
new file mode 100644
index 0000000..535cc51
--- /dev/null
+++ b/marking_app/lib/common/model/progress/progress_item.dart
@@ -0,0 +1,56 @@
+/*
+ * @Author: wangyang 1147192855@qq.com
+ * @Date: 2022-07-20 15:06:38
+ * @LastEditors: wangyang 1147192855@qq.com
+ * @LastEditTime: 2022-07-28 18:59:16
+ * @FilePath: \marking_app\lib\common\model\progress\progress_item.dart
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+import 'package:json_annotation/json_annotation.dart';
+
+part 'progress_item.g.dart';
+
+@JsonSerializable()
+class ProgressItem extends Object {
+ @JsonKey(name: 'teacherName')
+ String teacherName;
+
+ @JsonKey(name: 'avgScore')
+ double avgScore;
+
+ @JsonKey(name: 'schoolName')
+ String schoolName;
+
+ @JsonKey(name: 'totalCount')
+ int totalCount;
+
+ @JsonKey(name: 'finishCount')
+ int finishCount;
+
+ // 完成比例
+ @JsonKey(name: 'completionRate')
+ double completionRate;
+
+ @JsonKey(name: 'completionRateStr')
+ String completionRateStr;
+
+ ProgressItem(
+ this.teacherName,
+ this.finishCount,
+ this.totalCount,
+ this.avgScore,
+ this.schoolName, {
+ this.completionRate = 0,
+ this.completionRateStr = '0.0',
+ }) {
+ if (totalCount != 0) {
+ completionRate = finishCount / totalCount;
+ completionRateStr = (completionRate * 100).toStringAsFixed(2);
+ }
+ }
+
+ factory ProgressItem.fromJson(Map srcJson) =>
+ _$ProgressItemFromJson(srcJson);
+
+ Map toJson() => _$ProgressItemToJson(this);
+}
diff --git a/marking_app/lib/common/model/progress/progress_page_params.dart b/marking_app/lib/common/model/progress/progress_page_params.dart
new file mode 100644
index 0000000..5d917d0
--- /dev/null
+++ b/marking_app/lib/common/model/progress/progress_page_params.dart
@@ -0,0 +1,29 @@
+/*
+ * @Author: wangyang 1147192855@qq.com
+ * @Date: 2022-07-20 15:09:30
+ * @LastEditors: wangyang 1147192855@qq.com
+ * @LastEditTime: 2022-07-20 15:13:23
+ * @FilePath: \marking_app\lib\common\model\progress\progress_page_params.dart
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+import 'package:json_annotation/json_annotation.dart';
+import 'package:marking_app/common/model/common/base_page.dart';
+
+part 'progress_page_params.g.dart';
+
+
+@JsonSerializable()
+ class ProgressPageParams extends BasePage {
+
+ @JsonKey(name: 'examSubjectId')
+ int examSubjectId;
+
+ ProgressPageParams({required this.examSubjectId,required page,required limit}):super(page,limit);
+
+ factory ProgressPageParams.fromJson(Map srcJson) => _$ProgressPageParamsFromJson(srcJson);
+
+ Map toJson() => _$ProgressPageParamsToJson(this);
+
+}
+
+
diff --git a/marking_app/lib/common/model/progress/progress_statistics.dart b/marking_app/lib/common/model/progress/progress_statistics.dart
new file mode 100644
index 0000000..464fb0f
--- /dev/null
+++ b/marking_app/lib/common/model/progress/progress_statistics.dart
@@ -0,0 +1,57 @@
+/*
+ * @Author: wangyang 1147192855@qq.com
+ * @Date: 2022-07-20 15:20:11
+ * @LastEditors: wangyang 1147192855@qq.com
+ * @LastEditTime: 2022-07-26 16:42:09
+ * @FilePath: \marking_app\lib\common\model\progress\progress_statistics.dart
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+import 'package:json_annotation/json_annotation.dart';
+
+part 'progress_statistics.g.dart';
+
+@JsonSerializable()
+class ProgressStatistics extends Object {
+
+ @JsonKey(name: 'markingTotal')
+ int markingTotal;
+
+ @JsonKey(name: 'markingFinishedCount')
+ int markingFinishedCount;
+
+ @JsonKey(name: 'markingUnfinishedCount')
+ int markingUnfinishedCount;
+
+ @JsonKey(name: 'overallAverage')
+ double overallAverage;
+
+ @JsonKey(name: 'myAverage')
+ double myAverage;
+
+ // 完成比例
+ @JsonKey(name: 'completionRate')
+ double completionRate;
+
+ @JsonKey(name: 'completionRateStr')
+ String completionRateStr;
+
+ ProgressStatistics(
+ this.markingUnfinishedCount,
+ this.markingFinishedCount,
+ this.myAverage,
+ this.markingTotal,
+ this.overallAverage, {
+ this.completionRate = 0,
+ this.completionRateStr = '0.0',
+ }) {
+ if (markingTotal != 0) {
+ completionRate = markingFinishedCount / markingTotal;
+ completionRateStr = (completionRate * 100).toStringAsFixed(2);
+ }
+ }
+
+ factory ProgressStatistics.fromJson(Map srcJson) =>
+ _$ProgressStatisticsFromJson(srcJson);
+
+ Map toJson() => _$ProgressStatisticsToJson(this);
+}
diff --git a/marking_app/lib/common/model/report/marked_item.dart b/marking_app/lib/common/model/report/marked_item.dart
new file mode 100644
index 0000000..95393f5
--- /dev/null
+++ b/marking_app/lib/common/model/report/marked_item.dart
@@ -0,0 +1,39 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'marked_item.g.dart';
+
+@JsonSerializable()
+class MarkedItem extends Object {
+ @JsonKey(name: 'Id')
+ int id;
+
+ @JsonKey(name: 'UserId')
+ int userId;
+
+ @JsonKey(name: 'Name')
+ String name;
+
+ @JsonKey(name: 'Type')
+ int type;
+
+ @JsonKey(name: 'TypeName')
+ String typeName;
+
+ @JsonKey(name: 'Subjects')
+ String subjects;
+
+ @JsonKey(name: 'StartTime')
+ String startTime;
+
+ @JsonKey(name: 'Status')
+ int status;
+
+ @JsonKey(name: 'StatusName')
+ String statusName;
+
+ MarkedItem(this.id, this.userId, this.name, this.type, this.typeName, this.subjects, this.startTime, this.status, this.statusName);
+
+ factory MarkedItem.fromJson(Map srcJson) => _$MarkedItemFromJson(srcJson);
+
+ Map toJson() => _$MarkedItemToJson(this);
+}
diff --git a/marking_app/lib/common/model/report/marked_item_params.dart b/marking_app/lib/common/model/report/marked_item_params.dart
new file mode 100644
index 0000000..3d29ab3
--- /dev/null
+++ b/marking_app/lib/common/model/report/marked_item_params.dart
@@ -0,0 +1,18 @@
+import 'package:json_annotation/json_annotation.dart';
+import 'package:marking_app/common/model/common/base_page_report.dart';
+
+part 'marked_item_params.g.dart';
+
+@JsonSerializable()
+class MarkedItemParams extends BasePageReport {
+
+ // 角色
+ @JsonKey(name: 'PositionId')
+ int roleId;
+
+ MarkedItemParams(super.page, super.limit, {required this.roleId});
+
+ factory MarkedItemParams.fromJson(Map srcJson) => _$MarkedItemParamsFromJson(srcJson);
+
+ Map toJson() => _$MarkedItemParamsToJson(this);
+}
diff --git a/marking_app/lib/common/model/report/radar_chart_model.dart b/marking_app/lib/common/model/report/radar_chart_model.dart
new file mode 100644
index 0000000..be46b73
--- /dev/null
+++ b/marking_app/lib/common/model/report/radar_chart_model.dart
@@ -0,0 +1,63 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'radar_chart_model.g.dart';
+
+@JsonSerializable()
+class RadarChartModel extends Object {
+ RadarChartModel();
+
+ factory RadarChartModel.fromJson(Map srcJson) => _$RadarChartModelFromJson(srcJson);
+
+ Map toJson() => _$RadarChartModelToJson(this);
+}
+
+
+@JsonSerializable()
+class RawDataSet extends Object {
+ @JsonKey(name: 'name')
+ String name;
+
+ @JsonKey(name: 'value')
+ List value;
+
+ @JsonKey(name: 'itemStyle')
+ ItemStyle? itemStyle;
+
+ RawDataSet({required this.name, required this.value,this.itemStyle});
+
+ factory RawDataSet.fromJson(Map srcJson) => _$RawDataSetFromJson(srcJson);
+
+ Map toJson() => _$RawDataSetToJson(this);
+}
+
+
+
+@JsonSerializable()
+ class ItemStyle extends Object {
+
+ @JsonKey(name: 'color')
+ String color;
+
+ ItemStyle({required this.color});
+
+ factory ItemStyle.fromJson(Map srcJson) => _$ItemStyleFromJson(srcJson);
+
+ Map toJson() => _$ItemStyleToJson(this);
+
+}
+
+
+@JsonSerializable()
+class RawTitle extends Object {
+ @JsonKey(name: 'name')
+ String name;
+
+ @JsonKey(name: 'max')
+ double max;
+
+ RawTitle({required this.name, required this.max});
+
+ factory RawTitle.fromJson(Map srcJson) => _$RawTitleFromJson(srcJson);
+
+ Map toJson() => _$RawTitleToJson(this);
+}
diff --git a/marking_app/lib/common/model/report/report_for_class_teacher_model.dart b/marking_app/lib/common/model/report/report_for_class_teacher_model.dart
new file mode 100644
index 0000000..e650513
--- /dev/null
+++ b/marking_app/lib/common/model/report/report_for_class_teacher_model.dart
@@ -0,0 +1,263 @@
+import 'package:json_annotation/json_annotation.dart';
+import 'package:marking_app/common/model/report/report_for_subject_teacher_model.dart';
+import 'package:marking_app/common/model/report/report_histogram_model.dart';
+
+part 'report_for_class_teacher_model.g.dart';
+
+
+@JsonSerializable(checked: true)
+ class ReportForClassTeacherModel extends Object {
+
+ @JsonKey(name: 'BaseInfo')
+ BaseInfo baseInfo;
+
+ @JsonKey(name: 'ExamTagDistributionList')
+ List examTagDistributionList;
+
+ @JsonKey(name: 'AvgComparison')
+ AvgComparison avgComparison;
+
+ @JsonKey(name: 'YearLevel')
+ YearLevel yearLevel;
+
+ @JsonKey(name: 'OverallLevel')
+ OverallLevel overallLevel;
+
+ @JsonKey(name: 'StudentInfo')
+ StudentInfo studentInfo;
+
+ @JsonKey(name: 'SubjectRadarMap')
+ SubjectRadarMap subjectRadarMap;
+
+ List averageModels;
+
+ ReportForClassTeacherModel(this.baseInfo,this.examTagDistributionList,this.avgComparison,this.yearLevel,this.overallLevel,this.studentInfo,this.subjectRadarMap,{this.averageModels=const []});
+
+ factory ReportForClassTeacherModel.fromJson(Map srcJson) => _$ReportForClassTeacherModelFromJson(srcJson);
+
+ Map toJson() => _$ReportForClassTeacherModelToJson(this);
+
+}
+
+
+@JsonSerializable(checked: true)
+ class BaseInfo extends Object {
+
+ @JsonKey(name: 'ExamName')
+ String examName;
+
+ @JsonKey(name: 'ExamType')
+ String examType;
+
+ @JsonKey(name: 'Grade')
+ String grade;
+
+ @JsonKey(name: 'Subjects')
+ List subjects;
+
+ @JsonKey(name: 'TotalScore')
+ double totalScore;
+
+ @JsonKey(name: 'Average')
+ double average;
+
+ @JsonKey(name: 'MaxScore')
+ double maxScore;
+
+ @JsonKey(name: 'Excellent')
+ String excellent;
+
+ @JsonKey(name: 'Qualified')
+ String qualified;
+
+ @JsonKey(name: 'ExamTime')
+ String examTime;
+
+ BaseInfo(this.examName,this.examType,this.grade,this.subjects,this.totalScore,this.average,this.maxScore,this.excellent,this.qualified,this.examTime,);
+
+ factory BaseInfo.fromJson(Map srcJson) => _$BaseInfoFromJson(srcJson);
+
+ Map toJson() => _$BaseInfoToJson(this);
+
+}
+
+
+@JsonSerializable(checked: true)
+ class Subjects extends Object {
+
+ @JsonKey(name: 'SubjectId')
+ int subjectId;
+
+ @JsonKey(name: 'SubjectName')
+ String subjectName;
+
+ Subjects(this.subjectId,this.subjectName,);
+
+ factory Subjects.fromJson(Map srcJson) => _$SubjectsFromJson(srcJson);
+
+ Map toJson() => _$SubjectsToJson(this);
+
+}
+
+
+
+
+@JsonSerializable(checked: true)
+ class ExamTagDistributionList extends Object {
+
+ @JsonKey(name: 'TagId')
+ int tagId;
+
+ @JsonKey(name: 'TagName')
+ String tagName;
+
+ @JsonKey(name: 'Number')
+ int number;
+
+ @JsonKey(name: 'NumberRate')
+ String numberRate;
+
+ ExamTagDistributionList(this.tagId,this.tagName,this.number,this.numberRate,);
+
+ factory ExamTagDistributionList.fromJson(Map srcJson) => _$ExamTagDistributionListFromJson(srcJson);
+
+ Map toJson() => _$ExamTagDistributionListToJson(this);
+
+}
+
+
+@JsonSerializable(checked: true)
+ class AvgComparison extends Object {
+
+ @JsonKey(name: 'AvgScore')
+ double avgScore;
+
+ @JsonKey(name: 'AvgComparisonList')
+ List avgComparisonList;
+
+ AvgComparison(this.avgScore,this.avgComparisonList,);
+
+ factory AvgComparison.fromJson(Map srcJson) => _$AvgComparisonFromJson(srcJson);
+
+ Map toJson() => _$AvgComparisonToJson(this);
+
+}
+
+
+@JsonSerializable(checked: true)
+ class AvgComparisonList extends Object {
+
+ @JsonKey(name: 'Id')
+ int id;
+
+ @JsonKey(name: 'Name')
+ String name;
+
+ @JsonKey(name: 'Score')
+ double score;
+
+ AvgComparisonList(this.id,this.name,this.score,);
+
+ factory AvgComparisonList.fromJson(Map srcJson) => _$AvgComparisonListFromJson(srcJson);
+
+ Map toJson() => _$AvgComparisonListToJson(this);
+
+}
+
+
+@JsonSerializable(checked: true)
+ class YearLevel extends Object {
+
+ @JsonKey(name: 'Actor')
+ int actor;
+
+ @JsonKey(name: 'Ranking')
+ int ranking;
+
+ YearLevel(this.actor,this.ranking,);
+
+ factory YearLevel.fromJson(Map srcJson) => _$YearLevelFromJson(srcJson);
+
+ Map toJson() => _$YearLevelToJson(this);
+
+}
+
+
+@JsonSerializable(checked: true)
+ class OverallLevel extends Object {
+
+ @JsonKey(name: 'Actor')
+ int actor;
+
+ @JsonKey(name: 'Ranking')
+ int ranking;
+
+ OverallLevel(this.actor,this.ranking,);
+
+ factory OverallLevel.fromJson(Map srcJson) => _$OverallLevelFromJson(srcJson);
+
+ Map toJson() => _$OverallLevelToJson(this);
+
+}
+
+
+@JsonSerializable(checked: true)
+ class StudentInfo extends Object {
+
+ @JsonKey(name: 'Heads')
+ List heads;
+
+ @JsonKey(name: 'Data')
+ List> data;
+
+ StudentInfo(this.heads,this.data,);
+
+ factory StudentInfo.fromJson(Map srcJson) => _$StudentInfoFromJson(srcJson);
+
+ Map toJson() => _$StudentInfoToJson(this);
+
+}
+
+
+@JsonSerializable(checked: true)
+ class SubjectRadarMap extends Object {
+
+ @JsonKey(name: 'Id')
+ int id;
+
+ @JsonKey(name: 'Name')
+ String name;
+
+ @JsonKey(name: 'ExamSubjects')
+ List examSubjects;
+
+ SubjectRadarMap(this.id,this.name,this.examSubjects,);
+
+ factory SubjectRadarMap.fromJson(Map srcJson) => _$SubjectRadarMapFromJson(srcJson);
+
+ Map toJson() => _$SubjectRadarMapToJson(this);
+
+}
+
+
+@JsonSerializable(checked: true)
+ class ExamSubjects extends Object {
+
+ @JsonKey(name: 'Subject')
+ String subject;
+
+ @JsonKey(name: 'Score')
+ double score;
+
+ @JsonKey(name: 'TotalScore')
+ double totalScore;
+
+ ExamSubjects(this.subject,this.score,this.totalScore,);
+
+ factory ExamSubjects.fromJson(Map srcJson) => _$ExamSubjectsFromJson(srcJson);
+
+ Map toJson() => _$ExamSubjectsToJson(this);
+
+}
+
+
diff --git a/marking_app/lib/common/model/report/report_for_class_teacher_params.dart b/marking_app/lib/common/model/report/report_for_class_teacher_params.dart
new file mode 100644
index 0000000..61a2437
--- /dev/null
+++ b/marking_app/lib/common/model/report/report_for_class_teacher_params.dart
@@ -0,0 +1,24 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'report_for_class_teacher_params.g.dart';
+
+
+@JsonSerializable()
+ class ReportForClassTeacherParams extends Object {
+
+ @JsonKey(name: 'ExamId')
+ int examId;
+
+
+ @JsonKey(name: 'CompareAll')
+ bool compareAll;
+
+ ReportForClassTeacherParams({required this.examId,required this.compareAll});
+
+ factory ReportForClassTeacherParams.fromJson(Map srcJson) => _$ReportForClassTeacherParamsFromJson(srcJson);
+
+ Map toJson() => _$ReportForClassTeacherParamsToJson(this);
+
+}
+
+
diff --git a/marking_app/lib/common/model/report/report_for_marking_pagerdetail_model.dart b/marking_app/lib/common/model/report/report_for_marking_pagerdetail_model.dart
new file mode 100644
index 0000000..597f16e
--- /dev/null
+++ b/marking_app/lib/common/model/report/report_for_marking_pagerdetail_model.dart
@@ -0,0 +1,20 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'report_for_marking_pagerdetail_model.g.dart';
+
+
+@JsonSerializable()
+ class ReportForMarkingPagerdetailModel extends Object {
+
+ @JsonKey(name: 'MarkingPagerImgs')
+ List markingPagerImgs;
+
+ ReportForMarkingPagerdetailModel(this.markingPagerImgs);
+
+ factory ReportForMarkingPagerdetailModel.fromJson(Map srcJson) => _$ReportForMarkingPagerdetailModelFromJson(srcJson);
+
+ Map toJson() => _$ReportForMarkingPagerdetailModelToJson(this);
+
+}
+
+
diff --git a/marking_app/lib/common/model/report/report_for_marking_pagerdetail_params.dart b/marking_app/lib/common/model/report/report_for_marking_pagerdetail_params.dart
new file mode 100644
index 0000000..3918541
--- /dev/null
+++ b/marking_app/lib/common/model/report/report_for_marking_pagerdetail_params.dart
@@ -0,0 +1,29 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'report_for_marking_pagerdetail_params.g.dart';
+
+@JsonSerializable()
+class ReportForMarkingPagerdetailParams extends Object {
+ @JsonKey(name: 'ExamSubjectSchoolId')
+ int examSubjectSchoolId;
+
+ @JsonKey(name: 'ExamSubjectId')
+ int examSubjectId;
+
+ @JsonKey(name: 'ExamInfoId')
+ int examInfoId;
+
+ @JsonKey(name: 'StudentExamNum')
+ String studentExamNum;
+
+ ReportForMarkingPagerdetailParams({
+ required this.examSubjectSchoolId,
+ required this.examSubjectId,
+ required this.examInfoId,
+ required this.studentExamNum,
+ });
+
+ factory ReportForMarkingPagerdetailParams.fromJson(Map srcJson) => _$ReportForMarkingPagerdetailParamsFromJson(srcJson);
+
+ Map toJson() => _$ReportForMarkingPagerdetailParamsToJson(this);
+}
diff --git a/marking_app/lib/common/model/report/report_for_subject_student_model.dart b/marking_app/lib/common/model/report/report_for_subject_student_model.dart
new file mode 100644
index 0000000..fb7e44a
--- /dev/null
+++ b/marking_app/lib/common/model/report/report_for_subject_student_model.dart
@@ -0,0 +1,417 @@
+import 'package:json_annotation/json_annotation.dart';
+
+part 'report_for_subject_student_model.g.dart';
+
+
+@JsonSerializable(checked: true)
+ class ReportForSubjectStudentModel extends Object {
+
+ @JsonKey(name: 'BaseInfo')
+ BaseInfo baseInfo;
+
+ @JsonKey(name: 'ClassLevel')
+ ClassLevel classLevel;
+
+ @JsonKey(name: 'YearLevel')
+ YearLevel yearLevel;
+
+ @JsonKey(name: 'OverallLevel')
+ OverallLevel overallLevel;
+
+ @JsonKey(name: 'ScoreTrends')
+ List scoreTrends;
+
+ @JsonKey(name: 'RankingTrends')
+ List rankingTrends;
+
+ @JsonKey(name: 'TagAnalysis')
+ List tagAnalysis;
+
+ @JsonKey(name: 'KnowledgeAnalysisList')
+ List knowledgeAnalysisList;
+
+ @JsonKey(name: 'MethodAnalysisList')
+ List methodAnalysisList;
+
+ @JsonKey(name: 'AnswerDetails')
+ List