From ca57ceb3543bf8ba3cd94a338a68bfe5095a1169 Mon Sep 17 00:00:00 2001 From: Max Date: Wed, 5 Nov 2025 18:38:05 +0800 Subject: [PATCH] update --- .../as_dev_dependency/generator_config.yaml | 3 + .../lib/generated/api_documentation.md | 20429 ++++++++++++++++ lib/commands/generate_command.dart | 115 +- lib/core/config.dart | 6 + lib/core/config_loader.dart | 46 + lib/generators/model_code_generator.dart | 33 + lib/generators/retrofit_api_generator.dart | 220 +- lib/utils/file_utils.dart | 49 +- lib/utils/string_utils.dart | 1 - pubspec.yaml | 4 +- 10 files changed, 20759 insertions(+), 147 deletions(-) create mode 100644 example/as_dev_dependency/lib/generated/api_documentation.md diff --git a/example/as_dev_dependency/generator_config.yaml b/example/as_dev_dependency/generator_config.yaml index adb3c28..18ef12b 100644 --- a/example/as_dev_dependency/generator_config.yaml +++ b/example/as_dev_dependency/generator_config.yaml @@ -11,6 +11,9 @@ generator: # 输入配置 input: # Swagger 文档源(支持多版本) + # 注意:多个 URL 会按顺序合并,后面的文档会覆盖前面的同名模型和路径 + # 因此建议将高版本(如 V2)配置在低版本(如 V1)之后,以确保高版本的模型覆盖低版本 + # 例如:V1 在前,V2 在后,那么 V2 的模型会覆盖 V1 的同名模型 swagger_urls: # 完整形式:可以控制每个版本的启用状态 - url: "https://quanxue-test-api.w.23544.com:8843/swagger/v1/swagger.json" enabled: true diff --git a/example/as_dev_dependency/lib/generated/api_documentation.md b/example/as_dev_dependency/lib/generated/api_documentation.md new file mode 100644 index 0000000..88e2117 --- /dev/null +++ b/example/as_dev_dependency/lib/generated/api_documentation.md @@ -0,0 +1,20429 @@ +# OA移动端Api + +**版本**: v1 + v2 +**基础URL**: / +**生成时间**: 2025-11-05T17:55:54.662063 + +![API版本](https://img.shields.io/badge/API-v1 + v2-blue.svg) +![状态](https://img.shields.io/badge/状态-活跃-green.svg) + +## 📋 目录 + +- [API概述](#api概述) +- [认证](#认证) +- [API端点](#api端点) + - [FollowManager](#followmanager) + - [HealthCheck](#healthcheck) + - [Index](#index) + - [Login](#login) + - [ManagerDataCollection](#managerdatacollection) + - [MobileManager](#mobilemanager) + - [MyInfo](#myinfo) + - [TaskClassCadreMeeting](#taskclasscadremeeting) + - [TaskClassesActivity](#taskclassesactivity) + - [TaskClassMeeting](#taskclassmeeting) + - [TaskCoachSub](#taskcoachsub) + - [TaskCultural](#taskcultural) + - [TaskDataCollect](#taskdatacollect) + - [TaskFollow](#taskfollow) + - [TaskInfo](#taskinfo) + - [TaskMeeting](#taskmeeting) + - [TaskOther](#taskother) + - [TaskSolution](#tasksolution) + - [TaskSpot](#taskspot) + - [TaskSummarize](#tasksummarize) + - [TaskTalk](#tasktalk) + - [TaskTeacherBehavior](#taskteacherbehavior) + - [TaskTeacherTalk](#taskteachertalk) + - [Superior](#superior) + - [SystemParameterOther](#systemparameterother) +- [数据模型](#数据模型) +- [错误代码](#错误代码) +- [示例代码](#示例代码) +- [更新日志](#更新日志) + +## 🚀 API概述 + +### 📊 统计信息 + +- **总端点数**: 204 +- **控制器数**: 25 +- **数据模型数**: 189 + +### 🔗 HTTP方法分布 + +- **GET**: 122个 (59.8%) +- **PUT**: 58个 (28.4%) +- **DELETE**: 13个 (6.4%) +- **POST**: 11个 (5.4%) + +### 🌐 服务器配置 + +**服务器**: 相对路径 `/` + +## 🔐 认证 + +本API使用以下认证方式: + +### Bearer Token + +在请求头中包含Authorization字段: + +``` +Authorization: Bearer YOUR_TOKEN_HERE +``` + +### 获取Token + +请使用登录接口获取访问令牌。 + +## 📡 API端点 + +### FollowManager + +#### GET /api/v1/FollowManager/DeleteFinancial_ClassesById + +**工作台-删除班级经费使用记录** + +**标签**: FollowManager + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| Id | integer | ❌ | 使用记录id | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/FollowManager/DeleteFinancial_ClassesById +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/FollowManager/GetClassTeachersByClassId + +**根据班级ID获取班级科目教师列表** + +**标签**: FollowManager + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| classId | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/FollowManager/GetClassTeachersByClassId +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/FollowManager/GetFinancial_Classes + +**工作台-获取当前时间的班级经费使用列表** + +**标签**: FollowManager + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| class_id | integer | ❌ | 班级id | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/FollowManager/GetFinancial_Classes +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/FollowManager/GetFinancial_Indicators + +**工作台-获取当前时间的经费指标** + +**标签**: FollowManager + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/FollowManager/GetFinancial_Indicators +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/FollowManager/GetStudents + +**工作台-获取班级学生列表** + +**标签**: FollowManager + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| classId | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/FollowManager/GetStudents +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/FollowManager/GetSubjectinfos + +**获取所有科目列表** + +**标签**: FollowManager + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/FollowManager/GetSubjectinfos +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v2/FollowManager/GetStudentDetailInfo + +**工作台-获取学生详情信息** + +**标签**: FollowManager + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| studentId | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v2/FollowManager/GetStudentDetailInfo +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/FollowManager/AddClassesStudent + +**工作台-添加班级学生绑定表** + +**标签**: FollowManager + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/FollowManager/AddClassesStudent \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/FollowManager/AddFinancial_Classes + +**工作台-添加班级经费使用** + +**标签**: FollowManager + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/FollowManager/AddFinancial_Classes \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v2/FollowManager/AddClassesStudent + +**工作台-添加班级学生绑定表** + +**标签**: FollowManager + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v2/FollowManager/AddClassesStudent \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v2/FollowManager/ChangeStudentClass + +**转班** + +**标签**: FollowManager + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v2/FollowManager/ChangeStudentClass \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v2/FollowManager/DropStudent + +**退学** + +**标签**: FollowManager + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v2/FollowManager/DropStudent \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v2/FollowManager/UpdateClassesStudent + +**工作台-修改班级学生绑定表** + +**标签**: FollowManager + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v2/FollowManager/UpdateClassesStudent \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### DELETE /api/v1/FollowManager/DeleteClassesStudent + +**工作台-删除班级学生绑定表** + +**标签**: FollowManager + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| classId | integer | ❌ | - | - | +| userId | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X DELETE //api/v1/FollowManager/DeleteClassesStudent +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + + +### HealthCheck + +#### GET /HealthCheck + +**健康检查接口** + +**标签**: HealthCheck + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| api-version | string | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //HealthCheck +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + + +### Index + +#### GET /api/v1/Index/GetBanner + +**获取首页的轮播图** + +**标签**: Index + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/Index/GetBanner +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/Index/GetClasses + +**获取本人所管班级列表** + +**标签**: Index + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/Index/GetClasses +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/Index/GetClassesTaskChecklistUsers + +**获取本人通用工作指标列表** + +**标签**: Index + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| PageIndex | integer | ❌ | - | - | +| PageSize | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/Index/GetClassesTaskChecklistUsers +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/Index/GetClassesTaskList + +**获取首页的待办任务列表** + +**标签**: Index + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| class_id | integer | ❌ | - | - | +| TaskTypeEnum | integer | ❌ | - | - | +| Status | integer | ❌ | - | - | +| IsSuperiorTask | integer | ❌ | 是否是布置任务。0否;1是 | - | +| PageIndex | integer | ❌ | - | - | +| PageSize | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/Index/GetClassesTaskList +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/Index/GetDatetimeNow + +**获取服务器当前时间** + +**标签**: Index + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/Index/GetDatetimeNow +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/Index/GetHistoryTaskList + +**获取历史任务列表** + +**标签**: Index + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| PageIndex | integer | ❌ | - | - | +| PageSize | integer | ❌ | - | - | +| Task_index_type | integer | ❌ | 任务指标类型-1班级;2通用 | - | +| class_id | integer | ❌ | Task_index_type为1时,班级id必传 | - | +| TaskTypeEnum | integer | ❌ | 任务类型枚举 | - | +| BeginDate | string | ❌ | 开始日期 | - | +| EndDate | string | ❌ | 结束日期 | - | +| TaskUserId | integer | ❌ | 用户id | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/Index/GetHistoryTaskList +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/Index/GetList + +**根据班级获取工作主题及列表** + +**标签**: Index + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| classesId | integer | ❌ | 班级id | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/Index/GetList +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/Index/GetTaskList + +**获取任务列表** + +**标签**: Index + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| PageIndex | integer | ❌ | - | - | +| PageSize | integer | ❌ | - | - | +| Task_index_type | integer | ❌ | 任务指标类型-1班级;2通用 | - | +| class_id | integer | ❌ | Task_index_type为1时,班级id必传 | - | +| TaskTypeEnum | integer | ❌ | 任务类型枚举 | - | +| BeginDate | string | ❌ | 开始日期 | - | +| EndDate | string | ❌ | 结束日期 | - | +| Status | string | ❌ | 0:未开始 1:进行中 2:已结束 3:问题待处理(仅用于双师跟课) 4:已逾期 。多个用英文逗号分开 | - | +| TaskUserId | integer | ❌ | 任务执行人id | - | +| IsSuperiorTask | integer | ❌ | 是否是布置任务。0否;1是 | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/Index/GetTaskList +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + + +### Login + +#### GET /api/v1/Login/GetMyUserSig + +**获取 UserSig 鉴权票据** + +**标签**: Login + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/Login/GetMyUserSig +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/Login/GetOpenTest + +**获取是否开启测试** + +**标签**: Login + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/Login/GetOpenTest +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### POST /api/v1/Login/GetUserLoginCode + +**普通用户验证码登录-获取验证码** + +**标签**: Login + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X POST //api/v1/Login/GetUserLoginCode \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### POST /api/v1/Login/LogOff + +**注销** + +**标签**: Login + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| account | string | ❌ | 账号 | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X POST //api/v1/Login/LogOff \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### POST /api/v1/Login/OutLogin + +**退出登录** + +**标签**: Login + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X POST //api/v1/Login/OutLogin \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### POST /api/v1/Login/RefreshToken + +**换取token** + +**标签**: Login + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X POST //api/v1/Login/RefreshToken \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### POST /api/v1/Login/userCodeLogin + +**普通用户验证码登录** + +**标签**: Login + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X POST //api/v1/Login/userCodeLogin \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### POST /api/v1/Login/userLogin + +**普通用户登录** + +**标签**: Login + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X POST //api/v1/Login/userLogin \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/Login/Register + +**注册** + +**标签**: Login + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/Login/Register \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + + +### ManagerDataCollection + +#### GET /api/v1/ManagerDataCollection/DeskTopGetDataConllectionDetail + +**电脑端-(学习官)获取资料收集详情** + +**标签**: ManagerDataCollection + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| sign | string | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/ManagerDataCollection/DeskTopGetDataConllectionDetail +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/ManagerDataCollection/GetDataCollectionUserFiles + +**(电脑端)获取资料收集用户上传文件列表** + +**标签**: ManagerDataCollection + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| sign | string | ❌ | - | - | +| UserId | integer | ❌ | 组长id | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/ManagerDataCollection/GetDataCollectionUserFiles +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/ManagerDataCollection/GetDataConllectionDetail + +**(学习官)获取资料收集详情** + +**标签**: ManagerDataCollection + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| Id | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/ManagerDataCollection/GetDataConllectionDetail +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/ManagerDataCollection/GetDataConllectionsList + +**(学习官)获取资料收集列表** + +**标签**: ManagerDataCollection + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| PageIndex | integer | ❌ | - | - | +| PageSize | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/ManagerDataCollection/GetDataConllectionsList +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/ManagerDataCollection/GetDataFileUrl + +**获取电脑端获取的文件地址** + +**标签**: ManagerDataCollection + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| id | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/ManagerDataCollection/GetDataFileUrl +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/ManagerDataCollection/GetDataUserResults + +**(电脑端)获取本资料收集的组长用户列表** + +**标签**: ManagerDataCollection + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| UserName | string | ❌ | 搜索组长用户名称 | - | +| sign | string | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/ManagerDataCollection/GetDataUserResults +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/ManagerDataCollection/GetManagerDataCollectionDetail + +**获取资料收集详情** + +**标签**: ManagerDataCollection + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| Id | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/ManagerDataCollection/GetManagerDataCollectionDetail +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/ManagerDataCollection/GetManagerDataCollectionList + +**(部长/组长)获取资料收集列表** + +**标签**: ManagerDataCollection + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| status | integer | ❌ | - | - | +| PageIndex | integer | ❌ | - | - | +| PageSize | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/ManagerDataCollection/GetManagerDataCollectionList +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/ManagerDataCollection/GetOssSignByUrl + +**获取oss预签名** + +**标签**: ManagerDataCollection + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| sign | string | ❌ | 签名 | - | +| objectName | string | ❌ | 只传后缀。例【https://meeting-yhzh.oss-cn-hangzhou.aliyuncs.com/sss/11.txt】中的【txt】 | - | +| type | integer | ❌ | 文件模块类型:1、普通文件上传; 2:资料收集 | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/ManagerDataCollection/GetOssSignByUrl +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/ManagerDataCollection/GetUploadDataFileUrl + +**获取电脑端资料收集用户上传文件地址** + +**标签**: ManagerDataCollection + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| id | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/ManagerDataCollection/GetUploadDataFileUrl +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/ManagerDataCollection/GetUploadModelFileUrl + +**获取电脑端资料收集模板文件上传地址** + +**标签**: ManagerDataCollection + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| id | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/ManagerDataCollection/GetUploadModelFileUrl +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/ManagerDataCollection/PhoneGetDataCollectionUserFiles + +**(手机端)获取资料收集用户上传文件列表** + +**标签**: ManagerDataCollection + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| DataCollectionId | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/ManagerDataCollection/PhoneGetDataCollectionUserFiles +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/ManagerDataCollection/UpdateManagerDataCollectionStatus + +**更新资料收集状态** + +**标签**: ManagerDataCollection + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| Id | integer | ❌ | - | - | +| Status | integer | ❌ | 2:发布;4:关闭 | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/ManagerDataCollection/UpdateManagerDataCollectionStatus +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/ManagerDataCollection/AddManagerDataCollection + +**添加资料收集** + +**标签**: ManagerDataCollection + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/ManagerDataCollection/AddManagerDataCollection \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/ManagerDataCollection/AddManagerDataCollectionUserFile + +**资料收集用户上传文件** + +**标签**: ManagerDataCollection + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/ManagerDataCollection/AddManagerDataCollectionUserFile \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/ManagerDataCollection/AddManagerDataModelFile + +**资料收集模板文件上传** + +**标签**: ManagerDataCollection + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/ManagerDataCollection/AddManagerDataModelFile \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/ManagerDataCollection/FileUploadBySign + +**文件上传(返回文件id)** + +**标签**: ManagerDataCollection + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| sign | string | ❌ | url | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/ManagerDataCollection/FileUploadBySign \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/ManagerDataCollection/UploadDataFile + +**电脑端上传用户文件** + +**标签**: ManagerDataCollection + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/ManagerDataCollection/UploadDataFile \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/ManagerDataCollection/UploadModelFile + +**电脑端上传模板** + +**标签**: ManagerDataCollection + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/ManagerDataCollection/UploadModelFile \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + + +### MobileManager + +#### GET /api/v1/MobileManager/GetBindClassesBySchoolId + +**根据学校获取这个学校【本人管理班级】列表** + +**标签**: MobileManager + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| schoolId | integer | ❌ | 学校id | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/MobileManager/GetBindClassesBySchoolId +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/MobileManager/GetClassesAndFollowBySchoolId + +**根据学校获取管理的班级列表(包含学习官信息)** + +**标签**: MobileManager + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| schoolId | integer | ❌ | 学校id | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/MobileManager/GetClassesAndFollowBySchoolId +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/MobileManager/GetClassesBySchoolId + +**根据学校获取所有班级列表** + +**标签**: MobileManager + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| schoolId | integer | ❌ | 学校id | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/MobileManager/GetClassesBySchoolId +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/MobileManager/GetClassesTaskChecklists + +**组长根据学习官id获取工作任务指标列表** + +**标签**: MobileManager + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| followId | integer | ❌ | 学习官id | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/MobileManager/GetClassesTaskChecklists +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/MobileManager/GetDataSummariz + +**部长获取数据统计** + +**标签**: MobileManager + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| BeginTime | string | ❌ | - | - | +| EndTime | string | ❌ | - | - | +| FollowId | integer | ❌ | 学习官id【可能存在组长id,组长也是学习官】 | - | +| TeamLeaderUserId | integer | ❌ | 组长id,查询该组所有人 | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/MobileManager/GetDataSummariz +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/MobileManager/GetSchoolResults + +**获取管理的学校列表** + +**标签**: MobileManager + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| SchoolName | string | ❌ | 搜索学校名称 | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/MobileManager/GetSchoolResults +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/MobileManager/GetTaskCheckListByType + +**部长获取工作任务指标列表** + +**标签**: MobileManager + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/MobileManager/GetTaskCheckListByType +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v2/MobileManager/GetClassDetail + +**根据班级id获取班级详情** + +**标签**: MobileManager + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| classId | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v2/MobileManager/GetClassDetail +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v2/MobileManager/GetDataSummariz + +**总部长获取数据统计** + +**标签**: MobileManager + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| CloudSchoolId | integer | ❌ | 云校id | - | +| SchoolId | integer | ❌ | - | - | +| BeginTime | string | ❌ | - | - | +| EndTime | string | ❌ | - | - | +| FollowId | integer | ❌ | 学习官id【可能存在组长id,组长也是学习官】 | - | +| TeamLeaderUserId | integer | ❌ | 组长id,查询该组所有人 | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v2/MobileManager/GetDataSummariz +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v2/MobileManager/GetManagerUserInfoDetailResult + +**获取管理用户详情** + +**标签**: MobileManager + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| UserId | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v2/MobileManager/GetManagerUserInfoDetailResult +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v2/MobileManager/GetMonthWorkDetail + +**获取月工作完成详情** + +**标签**: MobileManager + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| userId | integer | ❌ | - | - | +| year | integer | ❌ | - | - | +| month | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v2/MobileManager/GetMonthWorkDetail +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v2/MobileManager/GetSchoolResults + +**根据云校id获取学校列表** + +**标签**: MobileManager + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| CloudSchoolId | integer | ❌ | 云校id | - | +| SchoolName | string | ❌ | 学校名称(可空) | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v2/MobileManager/GetSchoolResults +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v2/MobileManager/GetTaskCheckListByType + +**部长获取工作任务指标列表** + +**标签**: MobileManager + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v2/MobileManager/GetTaskCheckListByType +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v2/MobileManager/GetUserAdminInfu + +**人员管理(根据角色获取【组长获取学习官,部长根据学校id获取组长和学习官,总部长根据学校id获取部长组长学习官】)** + +**标签**: MobileManager + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| schoolId | integer | ❌ | 学校id | - | +| cloudSchoolId | integer | ❌ | 云校id | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v2/MobileManager/GetUserAdminInfu +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### POST /api/v1/MobileManager/GetMinisterAdminUsers + +**获取本人是部长管理的组长用户列表** + +**标签**: MobileManager + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| CloudSchoolId | integer | ❌ | 云校id(总部长查看某云校时需要传) | - | +| TeamLeaderUserName | string | ❌ | 用户姓名 | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X POST //api/v1/MobileManager/GetMinisterAdminUsers \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### POST /api/v1/MobileManager/GetMinisterAdminUsersAll + +**获取本人是部长管理的组长和学习官用户列表** + +**标签**: MobileManager + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| CloudSchoolId | integer | ❌ | 云校id(总部长查看某云校时需要传) | - | +| TeamLeaderUserName | string | ❌ | 用户姓名 | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X POST //api/v1/MobileManager/GetMinisterAdminUsersAll \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### POST /api/v1/MobileManager/GetTeamLeaderUsers + +**获取本人是组长管理的学习官用户列表** + +**标签**: MobileManager + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| userIds | array | ❌ | 组长id集合,不传则本人id | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X POST //api/v1/MobileManager/GetTeamLeaderUsers \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/MobileManager/AddTaskCheckList + +**部长新增工作任务指标 +(会删除所有管理的班级任务指标-删除所有管理的学习官的通用任务指标)** + +**标签**: MobileManager + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/MobileManager/AddTaskCheckList \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/MobileManager/ClassManagerAddUpdateTaskCheckList + +**组长新增工作任务指标** + +**标签**: MobileManager + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| followId | integer | ❌ | 学习官id | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/MobileManager/ClassManagerAddUpdateTaskCheckList \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + + +### MyInfo + +#### GET /api/v1/MyInfo/GetOssConfig + +**获取oss配置** + +**标签**: MyInfo + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/MyInfo/GetOssConfig +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/MyInfo/GetOssSign + +**获取oss预签名** + +**标签**: MyInfo + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| objectName | string | ❌ | 只传后缀。例【https://meeting-yhzh.oss-cn-hangzhou.aliyuncs.com/sss/11.txt】中的【txt】 | - | +| type | integer | ❌ | 文件模块类型:1、普通文件上传; 2:资料收集 | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/MyInfo/GetOssSign +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/MyInfo/GetPhoneCode + +**获取验证码-5分钟有效期(登录系统后)** + +**标签**: MyInfo + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| type | integer | ❌ | 1:换绑手机 | - | +| phone | string | ❌ | phone | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/MyInfo/GetPhoneCode +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/MyInfo/GetRedPoint + +**获取红点信息** + +**标签**: MyInfo + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/MyInfo/GetRedPoint +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/MyInfo/GetTencentIMAppID + +**获取腾讯IM的AppID** + +**标签**: MyInfo + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/MyInfo/GetTencentIMAppID +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/MyInfo/GetUpdateVersion + +**获取1:安卓,2:IOS版本更新信息** + +**标签**: MyInfo + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| upType | integer | ❌ | 1:安卓,2:IOS | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/MyInfo/GetUpdateVersion +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/MyInfo/UpMyHeadImage + +**修改本人头像** + +**标签**: MyInfo + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| FileId | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/MyInfo/UpMyHeadImage +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/MyInfo/FileUpload + +**文件上传(返回文件id)** + +**标签**: MyInfo + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/MyInfo/FileUpload \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/MyInfo/UpdateMyPasswodInfo + +**修改本人密码** + +**标签**: MyInfo + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/MyInfo/UpdateMyPasswodInfo \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/MyInfo/UpdateMyPhoneInfo + +**换绑本人手机信息** + +**标签**: MyInfo + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/MyInfo/UpdateMyPhoneInfo \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### DELETE /api/v1/MyInfo/DeleteOSSFile + +**删除oss存储中的服务** + +**标签**: MyInfo + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| filePath | string | ❌ | 完整网络路径 | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X DELETE //api/v1/MyInfo/DeleteOSSFile +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + + +### TaskClassCadreMeeting + +#### GET /api/v1/TaskClassCadreMeeting/GetClassCadreMeetingResult + +**根据任务id获取班干部会议信息** + +**标签**: TaskClassCadreMeeting + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| TaskId | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskClassCadreMeeting/GetClassCadreMeetingResult +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/TaskClassCadreMeeting/AddUpdateClassCadreMeeting + +**创建/修改班干部会议任务** + +**标签**: TaskClassCadreMeeting + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/TaskClassCadreMeeting/AddUpdateClassCadreMeeting \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/TaskClassCadreMeeting/ClassCadreMeetingFinish + +**完成班干部会议任务** + +**标签**: TaskClassCadreMeeting + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/TaskClassCadreMeeting/ClassCadreMeetingFinish \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### DELETE /api/v1/TaskClassCadreMeeting/DeleteClassCadreMeetingFile + +**删除班干部会议文件信息** + +**标签**: TaskClassCadreMeeting + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| ClassmeetingId | integer | ❌ | 班干部会id | - | +| fileId | integer | ❌ | 文件id | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X DELETE //api/v1/TaskClassCadreMeeting/DeleteClassCadreMeetingFile +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + + +### TaskClassesActivity + +#### GET /api/v1/TaskClassesActivity/GetTaskClassesActivityResult + +**根据任务id获取班干部班级活动信息** + +**标签**: TaskClassesActivity + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| TaskId | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskClassesActivity/GetTaskClassesActivityResult +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/TaskClassesActivity/AddUpdateTaskClassesActivity + +**添加或更新班级活动** + +**标签**: TaskClassesActivity + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/TaskClassesActivity/AddUpdateTaskClassesActivity \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/TaskClassesActivity/TaskClassesActivityFinish + +**完成班级活动** + +**标签**: TaskClassesActivity + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/TaskClassesActivity/TaskClassesActivityFinish \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### DELETE /api/v1/TaskClassesActivity/DeleteTaskClassesActivityFile + +**删除班级活动文件信息** + +**标签**: TaskClassesActivity + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| ActivityId | integer | ❌ | 活动Id | - | +| fileId | integer | ❌ | 文件id | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X DELETE //api/v1/TaskClassesActivity/DeleteTaskClassesActivityFile +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + + +### TaskClassMeeting + +#### GET /api/v1/TaskClassMeeting/GetClassMeetingResult + +**根据任务id获取召开班级会议信息** + +**标签**: TaskClassMeeting + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| TaskId | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskClassMeeting/GetClassMeetingResult +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/TaskClassMeeting/AddUpdateClassMeeting + +**创建/修改召开会议任务** + +**标签**: TaskClassMeeting + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/TaskClassMeeting/AddUpdateClassMeeting \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/TaskClassMeeting/ClassMeetingFinish + +**完成召开会议任务** + +**标签**: TaskClassMeeting + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/TaskClassMeeting/ClassMeetingFinish \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### DELETE /api/v1/TaskClassMeeting/DeleteClassMeetingFile + +**删除召开会议文件信息** + +**标签**: TaskClassMeeting + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| ClassmeetingId | integer | ❌ | 召开id | - | +| fileId | integer | ❌ | 文件id | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X DELETE //api/v1/TaskClassMeeting/DeleteClassMeetingFile +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + + +### TaskCoachSub + +#### GET /api/v1/TaskCoachSub/GetTaskCoachSubResult + +**根据任务id获取班干部学科辅助信息** + +**标签**: TaskCoachSub + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| TaskId | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskCoachSub/GetTaskCoachSubResult +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/TaskCoachSub/AddUpdateTaskCoachSub + +**添加或更新学科辅助** + +**标签**: TaskCoachSub + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/TaskCoachSub/AddUpdateTaskCoachSub \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/TaskCoachSub/TaskCoachSubFinish + +**完成学科辅助** + +**标签**: TaskCoachSub + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/TaskCoachSub/TaskCoachSubFinish \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### DELETE /api/v1/TaskCoachSub/DeleteTaskCoachSubFile + +**删除学科辅助文件信息** + +**标签**: TaskCoachSub + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| CoachId | integer | ❌ | 辅导表任务id | - | +| fileId | integer | ❌ | 文件id | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X DELETE //api/v1/TaskCoachSub/DeleteTaskCoachSubFile +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + + +### TaskCultural + +#### GET /api/v1/TaskCultural/GetCulturalDetailResult + +**获取文创内容详情结果** + +**标签**: TaskCultural + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| taskId | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskCultural/GetCulturalDetailResult +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### POST /api/v1/TaskCultural/CulturalFinish + +**完成文创内容任务** + +**标签**: TaskCultural + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X POST //api/v1/TaskCultural/CulturalFinish \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/TaskCultural/AddUpdateCulturalTask + +**创建/修改文创内容任务** + +**标签**: TaskCultural + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/TaskCultural/AddUpdateCulturalTask \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### DELETE /api/v1/TaskCultural/DeleteCulturalFile + +**删除文创内容文件** + +**标签**: TaskCultural + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| CulturalId | integer | ❌ | 文创id | - | +| FileId | integer | ❌ | 文件id | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X DELETE //api/v1/TaskCultural/DeleteCulturalFile +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + + +### TaskDataCollect + +#### GET /api/v1/TaskDataCollect/GetDataCollectResult + +**根据任务id获取数据收集信息** + +**标签**: TaskDataCollect + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| TaskId | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskDataCollect/GetDataCollectResult +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskDataCollect/GetDataCollectUserResults + +**获取数据收集用户列表** + +**标签**: TaskDataCollect + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| ClassId | integer | ❌ | 班级id | - | +| CollectId | integer | ❌ | 采集任务id | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskDataCollect/GetDataCollectUserResults +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskDataCollect/GetSunTaskFileResultsByUserId + +**获取用户的数据收集** + +**标签**: TaskDataCollect + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| UserId | integer | ❌ | 用户id | - | +| CollectId | integer | ❌ | 采集任务id | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskDataCollect/GetSunTaskFileResultsByUserId +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/TaskDataCollect/AddUpdateDataCollect + +**创建/修改数据收集任务** + +**标签**: TaskDataCollect + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/TaskDataCollect/AddUpdateDataCollect \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/TaskDataCollect/DataCollectFinish + +**完成数据收集任务** + +**标签**: TaskDataCollect + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/TaskDataCollect/DataCollectFinish \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/TaskDataCollect/SaveDataCollectFile + +**保存数据收集文件信息** + +**标签**: TaskDataCollect + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/TaskDataCollect/SaveDataCollectFile \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### DELETE /api/v1/TaskDataCollect/DeleteDataCollectFile + +**删除数据收集文件信息** + +**标签**: TaskDataCollect + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| SunTaskId | integer | ❌ | 数据收集id | - | +| UserId | integer | ❌ | 用户id | - | +| FileId | integer | ❌ | 文件id | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X DELETE //api/v1/TaskDataCollect/DeleteDataCollectFile +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + + +### TaskFollow + +#### GET /api/v1/TaskFollow/GetCourseWeekDetail + +**根据课程ID获取课程详情** + +**标签**: TaskFollow + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| ClassCourseId | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskFollow/GetCourseWeekDetail +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskFollow/GetFollowTaskByDate + +**获取时间段内双师课堂课程id集合** + +**标签**: TaskFollow + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| ClassesId | integer | ❌ | - | - | +| BeginDateTime | string | ❌ | - | - | +| EndDateTime | string | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskFollow/GetFollowTaskByDate +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskFollow/GetTaskCoachSubResult + +**根据任务id获取班干部双师课堂信息** + +**标签**: TaskFollow + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| TaskId | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskFollow/GetTaskCoachSubResult +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskFollow/GetWeekCourseTable + +**根据时间获取当周课程表(时间不传默认一周)** + +**标签**: TaskFollow + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| ClassId | integer | ❌ | 班级id必传 | - | +| StartTime | string | ❌ | - | - | +| EndTime | string | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskFollow/GetWeekCourseTable +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### POST /api/v2/TaskFollow/UpdateClassCourseTable + +**修改课程** + +**标签**: TaskFollow + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X POST //api/v2/TaskFollow/UpdateClassCourseTable \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/TaskFollow/AddFollowAbsenceUser + +**添加缺勤人员(每次覆盖上一次的)** + +**标签**: TaskFollow + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| FollowId | integer | ❌ | 跟课记录id | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/TaskFollow/AddFollowAbsenceUser \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/TaskFollow/AddFollowKeyNoteUser + +**添加重点人员** + +**标签**: TaskFollow + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| FollowId | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/TaskFollow/AddFollowKeyNoteUser \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/TaskFollow/AddFollowTeachersituation + +**添加老师、学生问题(每次覆盖上一次的)** + +**标签**: TaskFollow + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/TaskFollow/AddFollowTeachersituation \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/TaskFollow/AddUpdateTaskCoachSub + +**添加双师课堂(无修改)** + +**标签**: TaskFollow + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/TaskFollow/AddUpdateTaskCoachSub \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/TaskFollow/TaskCoachSubFinish + +**完成双师课堂(完成后判断是否有待处理任务。状态改为已完成或待处理)** + +**标签**: TaskFollow + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/TaskFollow/TaskCoachSubFinish \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v2/TaskFollow/UpdateClassTaskInfo + +**修改任务科目** + +**标签**: TaskFollow + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v2/TaskFollow/UpdateClassTaskInfo \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + + +### TaskInfo + +#### GET /api/v1/TaskInfo/GetAssistUsers + +**获取协助人员(同校同级的学习官、当前账户绑定的组长、组长上级的部长)** + +**标签**: TaskInfo + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| ClassesId | integer | ❌ | 班级id | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskInfo/GetAssistUsers +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskInfo/GetCloudSchoolList + +**获取通讯录云校树** + +**标签**: TaskInfo + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskInfo/GetCloudSchoolList +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskInfo/GetTaskTypeInfo + +**获取任务类型列表** + +**标签**: TaskInfo + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| PageIndex | integer | ❌ | 当前页 | - | +| PageSize | integer | ❌ | 一页条数 | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskInfo/GetTaskTypeInfo +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskInfo/GetTaskTypeInfoAllByPValue + +**获取该PValue本级和下级的所有参数** + +**标签**: TaskInfo + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| PValue | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskInfo/GetTaskTypeInfoAllByPValue +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskInfo/GetTaskTypeInfoAllByPid + +**获取该pid下的所有参数** + +**标签**: TaskInfo + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| pid | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskInfo/GetTaskTypeInfoAllByPid +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskInfo/GetTaskTypeInfoAllByPidString + +**根据参数字符串(英文逗号),获取该参数下的所有参数** + +**标签**: TaskInfo + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| pidString | string | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskInfo/GetTaskTypeInfoAllByPidString +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskInfo/GetTaskTypeInfoByPid + +**根据父级ID获取该级任务类型列表** + +**标签**: TaskInfo + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| pid | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskInfo/GetTaskTypeInfoByPid +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskInfo/GetUserBooksResultByLike + +**模糊查询通讯录人员信息** + +**标签**: TaskInfo + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| UserName | string | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskInfo/GetUserBooksResultByLike +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskInfo/GetUserBooksResultBySchoolId + +**根据学校id查询通讯录人员信息** + +**标签**: TaskInfo + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| schoolId | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskInfo/GetUserBooksResultBySchoolId +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskInfo/GetUserBooksResultByUserId + +**根据id获取该用户的资料信息** + +**标签**: TaskInfo + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| UserId | integer | ❌ | 用户id | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskInfo/GetUserBooksResultByUserId +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskInfo/GetUserSchoolLikeBooksResultByLike + +**模糊查询通讯录人员/学校信息** + +**标签**: TaskInfo + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| Name | string | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskInfo/GetUserSchoolLikeBooksResultByLike +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v2/TaskInfo/GetCloudSchoolList + +**获取通讯录云校树** + +**标签**: TaskInfo + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v2/TaskInfo/GetCloudSchoolList +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v2/TaskInfo/GetCloudSchoolListAll + +**获取整个通讯录** + +**标签**: TaskInfo + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v2/TaskInfo/GetCloudSchoolListAll +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### DELETE /api/v1/TaskInfo/DeleteTask + +**删除任务(适用于所有类型任务)** + +**标签**: TaskInfo + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| taskId | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X DELETE //api/v1/TaskInfo/DeleteTask +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + + +### TaskMeeting + +#### GET /api/v1/TaskMeeting/GetTaskMeetingResult + +**根据任务id获取班干部会议信息** + +**标签**: TaskMeeting + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| TaskId | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskMeeting/GetTaskMeetingResult +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/TaskMeeting/AddUpdateTaskMeeting + +**添加或更新会议任务** + +**标签**: TaskMeeting + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/TaskMeeting/AddUpdateTaskMeeting \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/TaskMeeting/TaskMeetingFinish + +**完成会议任务** + +**标签**: TaskMeeting + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/TaskMeeting/TaskMeetingFinish \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### DELETE /api/v1/TaskMeeting/DeleteTaskMeetingFile + +**删除会议文件信息** + +**标签**: TaskMeeting + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| MeetingId | integer | ❌ | 会id | - | +| fileId | integer | ❌ | 文件id | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X DELETE //api/v1/TaskMeeting/DeleteTaskMeetingFile +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + + +### TaskOther + +#### GET /api/v1/TaskOther/GetOtherInfoResult + +**根据任务id获取其他信息** + +**标签**: TaskOther + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| TaskId | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskOther/GetOtherInfoResult +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/TaskOther/AddUpdateOtherInfo + +**创建/修改其他任务** + +**标签**: TaskOther + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/TaskOther/AddUpdateOtherInfo \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/TaskOther/OtherInfoFinish + +**完成其他任务** + +**标签**: TaskOther + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/TaskOther/OtherInfoFinish \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### DELETE /api/v1/TaskOther/DeleteOtherInfoFile + +**删除其他文件信息** + +**标签**: TaskOther + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| OtherId | integer | ❌ | 其他id | - | +| fileId | integer | ❌ | 文件id | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X DELETE //api/v1/TaskOther/DeleteOtherInfoFile +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + + +### TaskSolution + +#### GET /api/v1/TaskSolution/GetList + +**获取解决方案列表** + +**标签**: TaskSolution + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| ProblemTitle | string | ❌ | 备 注:问题描述 +默认值: | - | +| ProblemObj | string | ❌ | 备 注:适用对象 1:学校;2:教师;3:学生 +默认值: | - | +| ProblemPhenomenon | string | ❌ | 备 注:问题显著现象 +默认值: | - | +| ClassesId | integer | ❌ | 班级id(必传) | - | +| ProblemTaskType | string | ❌ | 任务类型枚举列表 | - | +| PageIndex | integer | ❌ | 当前页 | - | +| PageSize | integer | ❌ | 一页条数 | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskSolution/GetList +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskSolution/GetQuestionByUserId + +**根据用户id获取问题列表** + +**标签**: TaskSolution + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| userId | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskSolution/GetQuestionByUserId +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskSolution/GetQuestionDateResults + +**获取问题日期结果列表** + +**标签**: TaskSolution + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| year | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskSolution/GetQuestionDateResults +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskSolution/GetQuestionListByQuestionType + +**根据问题类别获取问题类型列表及数量(组长作为学习官或者 学习官才能看)** + +**标签**: TaskSolution + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| questionType | integer | ❌ | 1:学生;2:老师; | - | +| classId | integer | ❌ | 学生时,传班级id | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskSolution/GetQuestionListByQuestionType +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskSolution/GetQuestionListByTaskType + +**根据任务问题枚举获取问题列表** + +**标签**: TaskSolution + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| QuestionPvalue | integer | ❌ | 任务问题枚举 | - | +| userId | integer | ❌ | 搜索 用户id | - | +| year | integer | ❌ | 搜索 年 | - | +| month | integer | ❌ | 搜索 月 | - | +| isChain | integer | ❌ | 是否查询环比,0查询有环比的,1查询历史总记录 | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskSolution/GetQuestionListByTaskType +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskSolution/GetSingle + +**获取解决方案详情** + +**标签**: TaskSolution + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| id | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskSolution/GetSingle +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v2/TaskSolution/GetSolutionLikeList + +**搜索解决方案列表(模糊搜索)** + +**标签**: TaskSolution + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| ClassesIds | array | ❌ | 班级id集合 | - | +| PageIndex | integer | ❌ | 当前页 | - | +| PageSize | integer | ❌ | 一页条数 | - | +| LikeType | integer | ❌ | 搜索类型:null/不传为全部;1:学校;2:教师;3:学生 | - | +| LikeName | string | ❌ | 搜索的内容 | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v2/TaskSolution/GetSolutionLikeList +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + + +### TaskSpot + +#### GET /api/v1/TaskSpot/GetSpotCheckType + +**学习行为习惯全面抽查-根据抽查项目 获取任务计划分值标准** + +**标签**: TaskSpot + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| Check_id | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskSpot/GetSpotCheckType +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskSpot/GetSpotTaskInfoById + +**学习行为习惯全面抽查-获取抽查任务信息** + +**标签**: TaskSpot + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| TaskId | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskSpot/GetSpotTaskInfoById +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskSpot/GetSpotTaskUser + +**学习行为习惯全面抽查-根据抽查id获取抽查任务用户信息(抽查记录)** + +**标签**: TaskSpot + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| SpotId | integer | ❌ | 必传 | - | +| Date | string | ❌ | 日期 | - | +| UserId | array | ❌ | 学生id | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskSpot/GetSpotTaskUser +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskSpot/GetSpotTaskUserDateBySpotId + +**学习行为习惯全面抽查-根据抽查id获取已抽查用户的 日期记录信息** + +**标签**: TaskSpot + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| SpotId | integer | ❌ | 必传 | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskSpot/GetSpotTaskUserDateBySpotId +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/TaskSpot/AddSpotCheckTask + +**学习行为习惯全面抽查-添加/修改工作任务** + +**标签**: TaskSpot + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/TaskSpot/AddSpotCheckTask \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/TaskSpot/AddSpotCheckUser + +**学习行为习惯全面抽查-添加工作任务-添加抽查用户(只要有添加,就不能修改任务)** + +**标签**: TaskSpot + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/TaskSpot/AddSpotCheckUser \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/TaskSpot/SpotTaskFinish + +**学习行为习惯全面抽查-结束工作任务** + +**标签**: TaskSpot + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/TaskSpot/SpotTaskFinish \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + + +### TaskSummarize + +#### GET /api/v1/TaskSummarize/GetSummarizDay + +**获取日报信息** + +**标签**: TaskSummarize + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| workDate | string | ❌ | - | - | +| userId | integer | ❌ | 用户id,不传则获取自己(组长时,获取他作为学习官时绑定的班级或通用任务) | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskSummarize/GetSummarizDay +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskSummarize/GetSummarizDayDateSlot + +**获取日报信息(时间段)** + +**标签**: TaskSummarize + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| BeginDate | string | ❌ | - | - | +| EndDate | string | ❌ | - | - | +| userId | integer | ❌ | 用户id,不传则获取自己(组长时,获取他作为学习官时绑定的班级或通用任务) | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskSummarize/GetSummarizDayDateSlot +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskSummarize/GetSummarizDayListResult + +**管理端获取本人所管理的人员的日报** + +**标签**: TaskSummarize + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| UserIds | array | ❌ | 用户id | - | +| UserName | string | ❌ | 用户姓名 | - | +| BeginTime | string | ❌ | 开始时间 | - | +| EndTime | string | ❌ | 结束时间 | - | +| PageIndex | integer | ❌ | - | - | +| PageSize | integer | ❌ | - | - | +| isOnlyNoRead | boolean | ❌ | 是否已读 | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskSummarize/GetSummarizDayListResult +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskSummarize/GetSummarizMonth + +**获取月报信息** + +**标签**: TaskSummarize + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| Year | integer | ❌ | - | - | +| Month | integer | ❌ | - | - | +| userId | integer | ❌ | 用户id,不传则获取自己(组长时,获取他作为学习官时绑定的班级或通用任务) | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskSummarize/GetSummarizMonth +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskSummarize/GetSummarizMonthByYear + +**获取月报信息-一年的** + +**标签**: TaskSummarize + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| Year | integer | ❌ | - | - | +| userId | integer | ❌ | 用户id,不传则获取自己(组长时,获取他作为学习官时绑定的班级或通用任务) | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskSummarize/GetSummarizMonthByYear +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskSummarize/GetSummarizMonthTaskByDate + +**获取月报中的任务完成情况列表(月报)** + +**标签**: TaskSummarize + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| Year | integer | ❌ | 年份 | - | +| Month | integer | ❌ | 月份 | - | +| UserId | integer | ❌ | 用户id,不传则获取自己(组长时,获取他作为学习官时绑定的班级或通用任务) | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskSummarize/GetSummarizMonthTaskByDate +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskSummarize/GetSummarizMonthTaskResult + +**管理端获取本人所管理的人员的月报** + +**标签**: TaskSummarize + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| UserIds | array | ❌ | 用户id | - | +| UserName | string | ❌ | 用户姓名 | - | +| BeginTime | string | ❌ | 开始时间 | - | +| EndTime | string | ❌ | 结束时间 | - | +| PageIndex | integer | ❌ | - | - | +| PageSize | integer | ❌ | - | - | +| isOnlyNoRead | boolean | ❌ | 是否已读 | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskSummarize/GetSummarizMonthTaskResult +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskSummarize/GetSummarizNoReadByType + +**获取用户未读的总结任务数量** + +**标签**: TaskSummarize + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| type | integer | ❌ | 1:日报 2:周报 3:月报 | - | +| LikeUserIds | array | ❌ | 用户id集合 | - | +| BeginDate | string | ❌ | 开始时间 | - | +| EndDate | string | ❌ | 结束时间 | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskSummarize/GetSummarizNoReadByType +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskSummarize/GetSummarizWeek + +**获取周报信息** + +**标签**: TaskSummarize + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| BeginDate | string | ❌ | - | - | +| EndDate | string | ❌ | - | - | +| userId | integer | ❌ | 用户id,不传则获取自己(组长时,获取他作为学习官时绑定的班级或通用任务) | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskSummarize/GetSummarizWeek +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskSummarize/GetSummarizWeekByDate + +**获取周报信息(时间段)** + +**标签**: TaskSummarize + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| BeginDate | string | ❌ | - | - | +| EndDate | string | ❌ | - | - | +| userId | integer | ❌ | 用户id,不传则获取自己(组长时,获取他作为学习官时绑定的班级或通用任务) | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskSummarize/GetSummarizWeekByDate +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskSummarize/GetSummarizWeekListResult + +**管理端获取本人所管理的人员的周报** + +**标签**: TaskSummarize + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| UserIds | array | ❌ | 用户id | - | +| UserName | string | ❌ | 用户姓名 | - | +| BeginTime | string | ❌ | 开始时间 | - | +| EndTime | string | ❌ | 结束时间 | - | +| PageIndex | integer | ❌ | - | - | +| PageSize | integer | ❌ | - | - | +| isOnlyNoRead | boolean | ❌ | 是否已读 | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskSummarize/GetSummarizWeekListResult +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskSummarize/GetSummarizWeekTaskByDate + +**获取周报中的任务列表-根据开始日期和结束日期获取任务列表(周报)** + +**标签**: TaskSummarize + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| BeginDate | string | ❌ | 开始日期 | - | +| EndDate | string | ❌ | 结束日期 | - | +| UserId | integer | ❌ | 用户id,不传则获取自己(组长时,获取他作为学习官时绑定的班级或通用任务) | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskSummarize/GetSummarizWeekTaskByDate +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskSummarize/GetSummarizePlanById + +**根据总结id获取总结计划信息(日报周报月报通用)** + +**标签**: TaskSummarize + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| SummarizeId | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskSummarize/GetSummarizePlanById +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskSummarize/GetSummarizeTaskByDate + +**获取日报中的任务列表-根据日期获取任务列表(日报)** + +**标签**: TaskSummarize + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| Date | string | ❌ | 日期 | - | +| UserId | integer | ❌ | 用户id,不传则获取自己(组长时,只获取他作为学习官绑定的班级或通用任务) | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskSummarize/GetSummarizeTaskByDate +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskSummarize/GetTaskLogResult + +**获取用户该任务操作记录(工作进度)(日报周报月报通用)** + +**标签**: TaskSummarize + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| taskId | integer | ❌ | - | - | +| UserId | integer | ❌ | 用户id,不传则获取自己(组长时,获取他作为学习官时绑定的班级或通用任务) | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskSummarize/GetTaskLogResult +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v2/TaskSummarize/GetDataSummariz + +**总部长获取数据统计** + +**标签**: TaskSummarize + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| CloudSchoolId | integer | ❌ | 云校id | - | +| BeginTime | string | ❌ | - | - | +| EndTime | string | ❌ | - | - | +| FollowId | integer | ❌ | 学习官id【可能存在组长id,组长也是学习官】 | - | +| TeamLeaderUserId | integer | ❌ | 组长id,查询该组所有人 | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v2/TaskSummarize/GetDataSummariz +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v2/TaskSummarize/GetGeneralCloudSchoolInfo + +**总部长获取关联云校的列表** + +**标签**: TaskSummarize + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v2/TaskSummarize/GetGeneralCloudSchoolInfo +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v2/TaskSummarize/GetSummarizDayListResult + +**管理端获取本人所管理的人员的日报** + +**标签**: TaskSummarize + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| cloudSchoolId | integer | ❌ | 云校iD | - | +| UserIds | array | ❌ | 用户id | - | +| UserName | string | ❌ | 用户姓名 | - | +| BeginTime | string | ❌ | 开始时间 | - | +| EndTime | string | ❌ | 结束时间 | - | +| PageIndex | integer | ❌ | - | - | +| PageSize | integer | ❌ | - | - | +| isOnlyNoRead | boolean | ❌ | 是否已读 | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v2/TaskSummarize/GetSummarizDayListResult +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v2/TaskSummarize/GetSummarizMonthTaskResult + +**管理端获取本人所管理的人员的月报** + +**标签**: TaskSummarize + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| cloudSchoolId | integer | ❌ | 云校iD | - | +| UserIds | array | ❌ | 用户id | - | +| UserName | string | ❌ | 用户姓名 | - | +| BeginTime | string | ❌ | 开始时间 | - | +| EndTime | string | ❌ | 结束时间 | - | +| PageIndex | integer | ❌ | - | - | +| PageSize | integer | ❌ | - | - | +| isOnlyNoRead | boolean | ❌ | 是否已读 | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v2/TaskSummarize/GetSummarizMonthTaskResult +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v2/TaskSummarize/GetSummarizNoReadByType + +**获取用户未读的总结任务数量** + +**标签**: TaskSummarize + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| type | integer | ❌ | 1:日报 2:周报 3:月报 | - | +| LikeUserIds | array | ❌ | 用户id集合 | - | +| BeginDate | string | ❌ | 开始时间 | - | +| EndDate | string | ❌ | 结束时间 | - | +| cloudSchoolId | integer | ❌ | 云校id | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v2/TaskSummarize/GetSummarizNoReadByType +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v2/TaskSummarize/GetSummarizWeekListResult + +**管理端获取本人所管理的人员的周报** + +**标签**: TaskSummarize + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| cloudSchoolId | integer | ❌ | 云校iD | - | +| UserIds | array | ❌ | 用户id | - | +| UserName | string | ❌ | 用户姓名 | - | +| BeginTime | string | ❌ | 开始时间 | - | +| EndTime | string | ❌ | 结束时间 | - | +| PageIndex | integer | ❌ | - | - | +| PageSize | integer | ❌ | - | - | +| isOnlyNoRead | boolean | ❌ | 是否已读 | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v2/TaskSummarize/GetSummarizWeekListResult +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/TaskSummarize/AddDaySummarize + +**添加日报** + +**标签**: TaskSummarize + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/TaskSummarize/AddDaySummarize \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/TaskSummarize/AddMonthSummarize + +**添加月报** + +**标签**: TaskSummarize + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/TaskSummarize/AddMonthSummarize \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/TaskSummarize/AddReadSummariz + +**添加日报 周报 月报的已读信息** + +**标签**: TaskSummarize + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/TaskSummarize/AddReadSummariz \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/TaskSummarize/AddWeekSummarize + +**添加周报** + +**标签**: TaskSummarize + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/TaskSummarize/AddWeekSummarize \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/TaskSummarize/EvaluationSumDay + +**评价日报** + +**标签**: TaskSummarize + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/TaskSummarize/EvaluationSumDay \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/TaskSummarize/EvaluationSumMonth + +**评价月报** + +**标签**: TaskSummarize + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/TaskSummarize/EvaluationSumMonth \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/TaskSummarize/EvaluationSumWeek + +**评价周报** + +**标签**: TaskSummarize + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/TaskSummarize/EvaluationSumWeek \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + + +### TaskTalk + +#### GET /api/v1/TaskTalk/GetTaskTalkResult + +**获取任务谈话结果** + +**标签**: TaskTalk + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| TaskId | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskTalk/GetTaskTalkResult +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/TaskTalk/AddUpdateTaskTalk + +**添加或更新谈话任务** + +**标签**: TaskTalk + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/TaskTalk/AddUpdateTaskTalk \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/TaskTalk/TaskTalkFinish + +**结束谈话任务** + +**标签**: TaskTalk + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/TaskTalk/TaskTalkFinish \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### DELETE /api/v1/TaskTalk/DeleteTaskTalk + +**删除谈话任务文件** + +**标签**: TaskTalk + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| Talk_id | integer | ❌ | 谈话记录表id | - | +| fileId | integer | ❌ | 文件id | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X DELETE //api/v1/TaskTalk/DeleteTaskTalk +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + + +### TaskTeacherBehavior + +#### GET /api/v1/TaskTeacherBehavior/GetTeacherBehaviorQuestionNumList + +**获取教师行为规范问题列表(观察记录)** + +**标签**: TaskTeacherBehavior + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| tbId | integer | ❌ | - | - | +| Date | string | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskTeacherBehavior/GetTeacherBehaviorQuestionNumList +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskTeacherBehavior/GetTeacherBehaviorQuestionNumResult + +**获取教师行为规范结果列表-问题记录列表** + +**标签**: TaskTeacherBehavior + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| taskId | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskTeacherBehavior/GetTeacherBehaviorQuestionNumResult +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskTeacherBehavior/GetTeacherBehaviorQuestionResult + +**根据问题观察记录id获取问题详细** + +**标签**: TaskTeacherBehavior + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| QuestionId | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskTeacherBehavior/GetTeacherBehaviorQuestionResult +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v1/TaskTeacherBehavior/GetTeacherBehaviorResults + +**获取教师行为规范结果列表** + +**标签**: TaskTeacherBehavior + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| taskId | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskTeacherBehavior/GetTeacherBehaviorResults +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/TaskTeacherBehavior/AddTeacherBehaviorQuestion + +**添加观察问题记录** + +**标签**: TaskTeacherBehavior + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/TaskTeacherBehavior/AddTeacherBehaviorQuestion \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/TaskTeacherBehavior/AddUpdateTaskTeacherBehavior + +**添加或更新教师行为规范任务** + +**标签**: TaskTeacherBehavior + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/TaskTeacherBehavior/AddUpdateTaskTeacherBehavior \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/TaskTeacherBehavior/TeacherBehaviorFinish + +**结束教师行为规范任务** + +**标签**: TaskTeacherBehavior + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/TaskTeacherBehavior/TeacherBehaviorFinish \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + + +### TaskTeacherTalk + +#### GET /api/v1/TaskTeacherTalk/GetTeacherTalkInfoResult + +**根据任务id获取教师谈话信息** + +**标签**: TaskTeacherTalk + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| TaskId | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v1/TaskTeacherTalk/GetTeacherTalkInfoResult +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/TaskTeacherTalk/AddUpdateTeacherTalkInfo + +**创建/修改教师谈话任务** + +**标签**: TaskTeacherTalk + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/TaskTeacherTalk/AddUpdateTeacherTalkInfo \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v1/TaskTeacherTalk/TeacherTalkInfoFinish + +**完成教师谈话任务** + +**标签**: TaskTeacherTalk + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v1/TaskTeacherTalk/TeacherTalkInfoFinish \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### DELETE /api/v1/TaskTeacherTalk/DeleteTeacherTalkInfoFile + +**删除教师谈话文件信息** + +**标签**: TaskTeacherTalk + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| TalkId | integer | ❌ | 谈话id | - | +| fileId | integer | ❌ | 文件id | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X DELETE //api/v1/TaskTeacherTalk/DeleteTeacherTalkInfoFile +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + + +### Superior + +#### GET /api/v2/Superior/GetMySuperiorTaskListResult + +**获取作为被布置者的布置任务列表** + +**标签**: Superior + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| PageIndex | integer | ❌ | 当前页 | - | +| PageSize | integer | ❌ | 一页条数 | - | +| SuperiorBeginTime | string | ❌ | 布置时间-开始 | - | +| SuperiorEndTime | string | ❌ | 布置时间-结束 | - | +| TaskEnum | integer | ❌ | 任务类型 | - | +| TaskWorkType | integer | ❌ | 1单人;2多人; | - | +| FinishBeginTime | string | ❌ | 完成时间-开始 | - | +| FinishEndTime | string | ❌ | 完成时间-结束 | - | +| TaskStatus | integer | ❌ | 任务状态。-1:未响应;1:已创建;2进行中;3:已完成;4:已逾期; | - | +| UserId | integer | ❌ | 用户id(他收到的工作),不传则获取本人 | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v2/Superior/GetMySuperiorTaskListResult +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v2/Superior/GetSuperiorTaskDetail + +**获取布置任务详情** + +**标签**: Superior + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| SuperiorId | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v2/Superior/GetSuperiorTaskDetail +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v2/Superior/GetSuperiorTaskInfoUserDetail + +**获取布置任务多人的用户任务情况** + +**标签**: Superior + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| SuperiorId | integer | ❌ | - | - | +| PageIndex | integer | ❌ | 当前页 | - | +| PageSize | integer | ❌ | 一页条数 | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v2/Superior/GetSuperiorTaskInfoUserDetail +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### GET /api/v2/Superior/GetSuperiorTaskListResult + +**获取作为布置者的布置任务列表** + +**标签**: Superior + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| PageIndex | integer | ❌ | 当前页 | - | +| PageSize | integer | ❌ | 一页条数 | - | +| SuperiorBeginTime | string | ❌ | 布置时间-开始 | - | +| SuperiorEndTime | string | ❌ | 布置时间-结束 | - | +| TaskEnum | integer | ❌ | 任务类型 | - | +| TaskWorkType | integer | ❌ | 1单人;2多人; | - | +| FinishBeginTime | string | ❌ | 完成时间-开始 | - | +| FinishEndTime | string | ❌ | 完成时间-结束 | - | +| TaskStatus | integer | ❌ | 任务状态。-1:未响应;1:已创建;2进行中;3:已完成;4:已逾期; | - | +| UserId | integer | ❌ | 用户id(他布置的工作),不传则获取本人 | - | +| UserName | string | ❌ | 模糊搜索被接收人姓名 | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v2/Superior/GetSuperiorTaskListResult +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + +#### PUT /api/v2/Superior/AddSuperiorTask + +**添加布置任务** + +**标签**: Superior + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X PUT //api/v2/Superior/AddSuperiorTask \ + -H "Content-Type: application/json" \ + -d '{"key": "value"}' +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + + +### SystemParameterOther + +#### GET /api/v2/SystemParameterOther/GetSysParameterOtherByPid + +**根据父级id获取字典列表** + +**标签**: SystemParameterOther + +**参数**: + +*查询参数*: + +| 参数名 | 类型 | 必填 | 描述 | 示例 | +|--------|------|------|------|------| +| pid | integer | ❌ | - | - | + +**响应**: + +*HTTP 200*: +- OK + +**示例**: + +```bash +curl -X GET //api/v2/SystemParameterOther/GetSysParameterOtherByPid +``` + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +--- + + +## 📋 数据模型 + +### AssistUserResult + +人员基本信息 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | Id | +| userName | string | ❌ | 用户姓名 | + +**JSON示例**: + +```json +{ + "id": 0, + "userName": "string" +} +``` + +--- + +### BannerResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | id | +| bannerFileId | integer (int64) | ❌ | 备 注:文件id +默认值: | +| bannerName | string | ❌ | 备 注:banne名称 +默认值: | +| bannerFileUrl | string | ❌ | 备 注:文件地址 | +| bannerFileName | string | ❌ | 文件名称 | +| bannerFileSize | integer (int64)? | ❌ | 文件大小 | + +**JSON示例**: + +```json +{ + "id": 0, + "bannerFileId": 0, + "bannerName": "string", + "bannerFileUrl": "string", + "bannerFileName": "string", + "bannerFileSize": 0 +} +``` + +--- + +### BaseTaskAddResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | 新增后返回的任务id | +| sunClassTaskId | integer (int64) | ❌ | 任务子表的id(例:新增学习习惯全面抽查,此id则为抽查工作记录id,也就是SpotId) +也可能是0,为0时,说明没有子表数据,以任务id为主 | + +**JSON示例**: + +```json +{ + "id": 0, + "sunClassTaskId": 0 +} +``` + +--- + +### BaseTaskClassResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | 任务id | +| status | integer (int32) | ❌ | 任务状态 0:未开始 1:进行中 2:已结束 3:问题待处理(仅用于双师跟课) 4:已逾期 | +| classesId | integer (int64)? | ❌ | 备 注:班级id(班级任务) +默认值: | +| classesName | string? | ❌ | 备 注:班级名称(用于展示) | +| gradeLevel | string? | ❌ | 备 注:年级 +默认值: | +| graduationYear | integer (int32)? | ❌ | 备 注:所属届 +默认值: | +| taskTypeEnum | integer (int32) | ❌ | 备 注:参数表 枚举值,任务类型 +默认值: | +| taskTypeName | string | ❌ | 备 注:任务类型名称(用于展示) | +| taskTitleSuffix | string | ❌ | 备 注:任务标题后缀,用于展示(有值时,将任务类型名称 和该字段用 “-”连接) +默认值: | +| startDate | string (date-time)? | ❌ | 备 注:开始日期 +默认值: | +| startTime | string (date-time) | ❌ | 备 注:开始时间 +默认值: | +| endDate | string (date-time)? | ❌ | 备 注:结束日期 +默认值: | +| endTime | string (date-time) | ❌ | 备 注:结束时间 +默认值: | +| isLongwork | integer (int64) | ❌ | 备 注:是否长期性工作(0否,1是) +默认值: | +| finishDate | string (date-time)? | ❌ | 备 注:任务完成日期 +默认值: | +| finishDatetime | string (date-time)? | ❌ | 备 注:任务完成时间 +默认值: | +| taskUserId | integer (int64)? | ❌ | 备 注:执行人id(通用任务才有) +默认值: | +| taskIndexType | integer (int32) | ❌ | 备 注:任务指标类型-1班级;2通用; 班级时,classes_id不为空;通用时,执行人id不为空 +默认值: | + +**JSON示例**: + +```json +{ + "id": 0, + "status": 0, + "classesId": 0, + "classesName": "string", + "gradeLevel": "string", + "graduationYear": 0, + "taskTypeEnum": 0, + "taskTypeName": "string", + "taskTitleSuffix": "string", + "startDate": "string", + "startTime": "string", + "endDate": "string", + "endTime": "string", + "isLongwork": 0, + "finishDate": "string", + "finishDatetime": "string", + "taskUserId": 0, + "taskIndexType": 0 +} +``` + +--- + +### BaseTaskFileRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| classesTaskId | integer (int64) | ❌ | 关联表id(非任务主表id) | +| fileId | integer (int64) | ❌ | 文件id | + +**JSON示例**: + +```json +{ + "classesTaskId": 0, + "fileId": 0 +} +``` + +--- + +### CheckListTaskTypeResult + +指标任务完成情况 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| year | integer (int32) | ❌ | 备 注:年份 +默认值: | +| month | integer (int32) | ❌ | 备 注:月份 +默认值: | +| typeEnum | integer (int32) | ❌ | 备 注:指标任务类型 +默认值: | +| checkCount | integer (int32) | ❌ | 备 注:任务指标数 +默认值: | +| taskCountEnd | integer (int32) | ❌ | 备 注:任务已完成数 +默认值: | +| taskCountOverdue | integer (int32) | ❌ | 备 注:任务逾期数 +默认值: | +| taskUserId | integer (int64) | ❌ | 备 注:用户id +默认值: | + +**JSON示例**: + +```json +{ + "year": 0, + "month": 0, + "typeEnum": 0, + "checkCount": 0, + "taskCountEnd": 0, + "taskCountOverdue": 0, + "taskUserId": 0 +} +``` + +--- + +### ClassCadreMeetingFinishRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | 任务id | +| classCadreId | integer (int64) | ❌ | 班干部会议ID | +| remark | string | ❌ | 会议纪要 | +| files | array? | ❌ | 文件 | + +**JSON示例**: + +```json +{ + "id": 0, + "classCadreId": 0, + "remark": "string", + "files": [] +} +``` + +--- + +### ClassCadreMeetingRequest + +开展班干部会议请求参数 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64)? | ❌ | 任务id(新增时为null,修改时必传) | +| classesId | integer (int64)? | ❌ | 班级id(班级任务时,classes_id不为空;通用任务时,班级id为空 null) | +| taskTypeEnum | integer (int32) | ❌ | 任务类型id | +| startTime | string (date-time) | ❌ | 备 注:开始时间 +默认值: | +| endTime | string (date-time) | ❌ | 备 注:结束时间 +默认值: | +| taskTitleSuffix | string? | ❌ | 任务后缀 | +| isSuperiorTask | integer (int32) | ❌ | 备 注:是否是布置任务。0否(默认);1是; +默认值: | +| superiorId | integer (int64)? | ❌ | 备 注:布置任务id,如果是布置任务才需要传 +默认值: | +| classCadreId | integer (int64)? | ❌ | id(新增时为null,修改时必传) | +| meetingTitle | string | ❌ | 会议主题 | +| userIds | array | ❌ | 参会人员id | + +**JSON示例**: + +```json +{ + "id": 0, + "classesId": 0, + "taskTypeEnum": 0, + "startTime": "string", + "endTime": "string", + "taskTitleSuffix": "string", + "isSuperiorTask": 0, + "superiorId": 0, + "classCadreId": 0, + "meetingTitle": "string", + "userIds": [] +} +``` + +--- + +### ClassCadreMeetingResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| classCadreId | integer (int64) | ❌ | 班干部会议记录ID | +| meetingTitle | string | ❌ | 会议标题 | +| remark | string | ❌ | 会议纪要 | +| taskInfo | reference | ❌ | - | +| sunTaskUserResults | array | ❌ | 关联用户 | +| sunTaskFileResults | array | ❌ | 关联文件 | + +**JSON示例**: + +```json +{ + "classCadreId": 0, + "meetingTitle": "string", + "remark": "string", + "taskInfo": {}, + "sunTaskUserResults": [], + "sunTaskFileResults": [] +} +``` + +--- + +### ClassClassTaskInfoRequest + +修改班级任务信息请求参数 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| classCourseId | integer (int64) | ❌ | 课程id | +| subId | integer (int32) | ❌ | 科目 | + +**JSON示例**: + +```json +{ + "classCourseId": 0, + "subId": 0 +} +``` + +--- + +### ClassCourseTableRequest + +班级课程表请求参数 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| classCourseId | integer (int64) | ❌ | 课程id | +| classCourseTableId | integer (int64) | ❌ | 班级课表id | +| classCourseWeekId | integer (int64) | ❌ | 周id | +| coursesSectionDetailId | integer (int64) | ❌ | 课节详情id | +| name | string? | ❌ | 名称 | +| week | integer (int32) | ❌ | 周几 | +| subject | integer (int32) | ❌ | 科目id | +| planStartTime | string (date-time) | ❌ | 计划上课时间 | +| planEndTime | string (date-time) | ❌ | 计划下课时间 | + +**JSON示例**: + +```json +{ + "classCourseId": 0, + "classCourseTableId": 0, + "classCourseWeekId": 0, + "coursesSectionDetailId": 0, + "name": "string", + "week": 0, + "subject": 0, + "planStartTime": "string", + "planEndTime": "string" +} +``` + +--- + +### ClassDataListResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | - | +| className | string | ❌ | 备 注:名称 +默认值: | +| schoolId | integer (int64) | ❌ | 备 注:学校编号 +默认值: | +| gradeLevel | string | ❌ | 备 注:年级 +默认值: | +| graduationYear | integer (int32) | ❌ | 备 注:所属届 +默认值: | +| createTime | string (date-time) | ❌ | 备 注:添加时间 +默认值: | +| createPositionId | integer (int64)? | ❌ | 备 注:创建者部门Id +默认值: | +| deleteState | boolean | ❌ | 备 注:删除状态 +默认值: | +| type | reference | ❌ | - | +| teachingLevel | reference | ❌ | - | +| schoolName | string | ❌ | 学校名称 | + +**JSON示例**: + +```json +{ + "id": 0, + "className": "string", + "schoolId": 0, + "gradeLevel": "string", + "graduationYear": 0, + "createTime": "string", + "createPositionId": 0, + "deleteState": true, + "type": {}, + "teachingLevel": {}, + "schoolName": "string" +} +``` + +--- + +### ClassDetailResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | - | +| name | string | ❌ | 班级名称 | +| gradeLevel | string | ❌ | 备 注:年级 +默认值: | +| studentCount | integer (int32) | ❌ | 备 注:学生人数 +默认值: | +| graduationYear | integer (int32) | ❌ | 备 注:所属届 +默认值: | +| schoolId | integer (int64) | ❌ | 学校ID | +| schoolName | string | ❌ | 学校名称 | +| elective1 | integer (int32)? | ❌ | 选修课指标1 | +| elective1Name | string? | ❌ | 选修课指标1名称 | +| elective2 | integer (int32)? | ❌ | 选修课指标2 | +| elective2Name | string? | ❌ | 选修课指标2名称 | +| elective3 | integer (int32)? | ❌ | 选修课指标3 | +| elective3Name | string? | ❌ | 选修课指标3名称 | + +**JSON示例**: + +```json +{ + "id": 0, + "name": "string", + "gradeLevel": "string", + "studentCount": 0, + "graduationYear": 0, + "schoolId": 0, + "schoolName": "string", + "elective1": 0, + "elective1Name": "string", + "elective2": 0, + "elective2Name": "string", + "elective3": 0, + "elective3Name": "string" +} +``` + +--- + +### ClassManageTaskListResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| taskChecklistUser | array | ❌ | 通用工作指标清单列表 | + +**JSON示例**: + +```json +{ + "taskChecklistUser": [] +} +``` + +--- + +### ClassManager_Task_checklistRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64)? | ❌ | 新增为null | +| taskTypeEnum | integer (int64) | ❌ | 备 注:任务类型id +默认值: | +| targetNumber | integer (int32) | ❌ | 备 注:任务指标数 +默认值: | +| taskType | integer (int32) | ❌ | 备 注:班级/通用任务类型 1班级;2通用 +默认值: | + +**JSON示例**: + +```json +{ + "id": 0, + "taskTypeEnum": 0, + "targetNumber": 0, + "taskType": 0 +} +``` + +--- + +### ClassMeetingFinishRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | 任务id | +| classMeetingId | integer (int64) | ❌ | 班级会议ID | +| remark | string | ❌ | 会议纪要 | +| files | array? | ❌ | 文件 | + +**JSON示例**: + +```json +{ + "id": 0, + "classMeetingId": 0, + "remark": "string", + "files": [] +} +``` + +--- + +### ClassMeetingRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64)? | ❌ | 任务id(新增时为null,修改时必传) | +| classesId | integer (int64)? | ❌ | 班级id(班级任务时,classes_id不为空;通用任务时,班级id为空 null) | +| taskTypeEnum | integer (int32) | ❌ | 任务类型id | +| startTime | string (date-time) | ❌ | 备 注:开始时间 +默认值: | +| endTime | string (date-time) | ❌ | 备 注:结束时间 +默认值: | +| taskTitleSuffix | string? | ❌ | 任务后缀 | +| isSuperiorTask | integer (int32) | ❌ | 备 注:是否是布置任务。0否(默认);1是; +默认值: | +| superiorId | integer (int64)? | ❌ | 备 注:布置任务id,如果是布置任务才需要传 +默认值: | +| classMeetingId | integer (int64)? | ❌ | id(新增时为null,修改时必传) | +| meetingTitle | string | ❌ | 会议主题 | + +**JSON示例**: + +```json +{ + "id": 0, + "classesId": 0, + "taskTypeEnum": 0, + "startTime": "string", + "endTime": "string", + "taskTitleSuffix": "string", + "isSuperiorTask": 0, + "superiorId": 0, + "classMeetingId": 0, + "meetingTitle": "string" +} +``` + +--- + +### ClassMeetingResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| classMeetingId | integer (int64) | ❌ | 班级会议记录ID | +| meetingTitle | string | ❌ | 会议标题 | +| meetingContent | string | ❌ | 会议纪要 | +| taskInfo | reference | ❌ | - | +| sunTaskFileResults | array | ❌ | 关联文件 | + +**JSON示例**: + +```json +{ + "classMeetingId": 0, + "meetingTitle": "string", + "meetingContent": "string", + "taskInfo": {}, + "sunTaskFileResults": [] +} +``` + +--- + +### ClassTeacherResult + +工作台-班级教师 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| teacherId | integer (int64) | ❌ | 教师id | +| teacherName | string | ❌ | 教师名称 | +| subId | integer (int64) | ❌ | 科目Id | +| subName | string | ❌ | 科目名称 | + +**JSON示例**: + +```json +{ + "teacherId": 0, + "teacherName": "string", + "subId": 0, + "subName": "string" +} +``` + +--- + +### ClassTypeEnum + +**枚举值**: + +- `0` +- `1` +- `2` +- `3` +- `4` +- `5` +- `6` +- `10` +- `20` +- `30` +- `40` +- `50` + +**JSON示例**: + +```json +"0" +``` + +--- + +### ClassesActivityFinishRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | 任务id | +| activityId | integer (int64) | ❌ | 班级活动ID | +| remark | string | ❌ | 活动记录 | +| files | array? | ❌ | 文件 | + +**JSON示例**: + +```json +{ + "id": 0, + "activityId": 0, + "remark": "string", + "files": [] +} +``` + +--- + +### ClassesActivityRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64)? | ❌ | 任务id(新增时为null,修改时必传) | +| classesId | integer (int64)? | ❌ | 班级id(班级任务时,classes_id不为空;通用任务时,班级id为空 null) | +| taskTypeEnum | integer (int32) | ❌ | 任务类型id | +| startTime | string (date-time) | ❌ | 备 注:开始时间 +默认值: | +| endTime | string (date-time) | ❌ | 备 注:结束时间 +默认值: | +| taskTitleSuffix | string? | ❌ | 任务后缀 | +| isSuperiorTask | integer (int32) | ❌ | 备 注:是否是布置任务。0否(默认);1是; +默认值: | +| superiorId | integer (int64)? | ❌ | 备 注:布置任务id,如果是布置任务才需要传 +默认值: | +| activityId | integer (int64)? | ❌ | 活动id(新增时为null,修改时必传) | +| activityTitle | string | ❌ | 备 注:活动主题 +默认值: | + +**JSON示例**: + +```json +{ + "id": 0, + "classesId": 0, + "taskTypeEnum": 0, + "startTime": "string", + "endTime": "string", + "taskTitleSuffix": "string", + "isSuperiorTask": 0, + "superiorId": 0, + "activityId": 0, + "activityTitle": "string" +} +``` + +--- + +### ClassesActivityResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| activityId | integer (int64) | ❌ | 活动id | +| activityTitle | string | ❌ | 备 注:活动主题 +默认值: | +| remark | string? | ❌ | 备 注:活动记录 +默认值: | +| taskInfo | reference | ❌ | - | +| sunTaskFileResults | array | ❌ | 关联文件 | + +**JSON示例**: + +```json +{ + "activityId": 0, + "activityTitle": "string", + "remark": "string", + "taskInfo": {}, + "sunTaskFileResults": [] +} +``` + +--- + +### ClassesAndFollowResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | - | +| name | string | ❌ | 班级id | +| gradeLevel | string | ❌ | 备 注:年级 +默认值: | +| graduationYear | integer (int32) | ❌ | 备 注:所属届 +默认值: | +| followName | string | ❌ | 学习官名称 | +| followId | integer (int64) | ❌ | 学习官id | + +**JSON示例**: + +```json +{ + "id": 0, + "name": "string", + "gradeLevel": "string", + "graduationYear": 0, + "followName": "string", + "followId": 0 +} +``` + +--- + +### ClassesResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | - | +| name | string | ❌ | 班级名称 | +| gradeLevel | string | ❌ | 备 注:年级 +默认值: | +| graduationYear | integer (int32) | ❌ | 备 注:所属届 +默认值: | +| schoolId | integer (int64) | ❌ | 备 注:学校id +默认值: | +| schoolName | string | ❌ | 学校名称 | + +**JSON示例**: + +```json +{ + "id": 0, + "name": "string", + "gradeLevel": "string", + "graduationYear": 0, + "schoolId": 0, + "schoolName": "string" +} +``` + +--- + +### ClassesTaskListResult + +任务列表 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | - | +| status | integer (int32) | ❌ | 备 注:任务状态 0:未开始 1:进行中 2:已结束 3:问题待处理(仅用于双师跟课) 4:已逾期 +默认值: | +| classesId | integer (int64)? | ❌ | 备 注:班级id(班级任务) +默认值: | +| classesName | string | ❌ | - | +| gradeLevel | string | ❌ | 备 注:年级 +默认值: | +| graduationYear | integer (int32) | ❌ | 备 注:所属届 +默认值: | +| isLongwork | integer (int64) | ❌ | 备 注:是否长期性工作 +默认值: | +| taskTypeEnum | integer (int32) | ❌ | 备 注:参数表 枚举值,任务类型 +默认值: | +| taskTitleSuffix | string | ❌ | 备 注:任务标题后缀,用于展示 +默认值: | +| startDate | string (date-time)? | ❌ | 备 注:开始日期 +默认值: | +| startTime | string (date-time) | ❌ | 备 注:开始时间 +默认值: | +| endDate | string (date-time)? | ❌ | 备 注:结束日期 +默认值: | +| endTime | string (date-time) | ❌ | 备 注:结束时间 +默认值: | +| taskIndexType | integer (int32) | ❌ | 备 注:任务指标类型-1班级;2通用; 班级时,classes_id不为空;通用时,执行人id不为空 +默认值: | +| isSuperiorTask | integer (int32)? | ❌ | 备 注:是否是布置任务。0否(默认);1是; +默认值: | + +**JSON示例**: + +```json +{ + "id": 0, + "status": 0, + "classesId": 0, + "classesName": "string", + "gradeLevel": "string", + "graduationYear": 0, + "isLongwork": 0, + "taskTypeEnum": 0, + "taskTitleSuffix": "string", + "startDate": "string", + "startTime": "string", + "endDate": "string", + "endTime": "string", + "taskIndexType": 0, + "isSuperiorTask": 0 +} +``` + +--- + +### ClassesTaskListResultPageResponse + +分页响应实体类 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| total | integer (int32) | ❌ | 总记录条数 | +| items | array | ❌ | 响应数据 | + +**JSON示例**: + +```json +{ + "total": 0, + "items": [] +} +``` + +--- + +### ClassesTheme + +班级工作主题 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | - | +| semester | string | ❌ | 备 注:学期 +默认值: | +| upDown | string | ❌ | · + 备 注:上/下 + 默认值: | +| semesterMonth | integer (int32) | ❌ | 备 注:月份 +默认值: | +| semesterTitle | string | ❌ | 备 注:月德育主题 +默认值: | +| classesThemeObjectiveList | array | ❌ | 关联班级工作主题目标 | + +**JSON示例**: + +```json +{ + "id": 0, + "semester": "string", + "upDown": "string", + "semesterMonth": 0, + "semesterTitle": "string", + "classesThemeObjectiveList": [] +} +``` + +--- + +### ClassesThemeObjectives + +班级工作主题的目标 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | - | +| objectivesTitle | string | ❌ | 备 注:工作目标 +默认值: | +| themeId | integer (int64) | ❌ | 备 注:主题id +默认值: | + +**JSON示例**: + +```json +{ + "id": 0, + "objectivesTitle": "string", + "themeId": 0 +} +``` + +--- + +### CloudSchoolResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| cloudName | string | ❌ | 云校名称 | +| cloudId | integer (int64) | ❌ | 云校ID | + +**JSON示例**: + +```json +{ + "cloudName": "string", + "cloudId": 0 +} +``` + +--- + +### CoachSubInfoFinishRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | 新增为null,编辑时传Id | +| coachId | integer (int64) | ❌ | 备 注:学科辅助任务Id +默认值: | +| coachContent | string | ❌ | 备 注:辅导内容 +默认值: | +| files | array? | ❌ | - | + +**JSON示例**: + +```json +{ + "id": 0, + "coachId": 0, + "coachContent": "string", + "files": [] +} +``` + +--- + +### CoachSubInfoRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64)? | ❌ | 任务id(新增时为null,修改时必传) | +| classesId | integer (int64)? | ❌ | 班级id(班级任务时,classes_id不为空;通用任务时,班级id为空 null) | +| taskTypeEnum | integer (int32) | ❌ | 任务类型id | +| startTime | string (date-time) | ❌ | 备 注:开始时间 +默认值: | +| endTime | string (date-time) | ❌ | 备 注:结束时间 +默认值: | +| taskTitleSuffix | string? | ❌ | 任务后缀 | +| isSuperiorTask | integer (int32) | ❌ | 备 注:是否是布置任务。0否(默认);1是; +默认值: | +| superiorId | integer (int64)? | ❌ | 备 注:布置任务id,如果是布置任务才需要传 +默认值: | +| coachId | integer (int64)? | ❌ | 辅导表id(新增时为null,修改时必传) | +| coachSubId | integer (int64) | ❌ | 科目id | +| coachSubName | string | ❌ | 科目名称 | +| userId | array | ❌ | 参会人员 | + +**JSON示例**: + +```json +{ + "id": 0, + "classesId": 0, + "taskTypeEnum": 0, + "startTime": "string", + "endTime": "string", + "taskTitleSuffix": "string", + "isSuperiorTask": 0, + "superiorId": 0, + "coachId": 0, + "coachSubId": 0, + "coachSubName": "string", + "userId": [] +} +``` + +--- + +### CoachSubInfoResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| coachId | integer (int64) | ❌ | 学科辅助ID | +| coachSubId | integer (int64) | ❌ | 学科辅助科目id | +| coachSubName | string | ❌ | 学科辅助科目名称 | +| coachContent | string | ❌ | 学科辅助内容 | +| taskInfo | reference | ❌ | - | +| sunTaskUserResults | array | ❌ | 关联用户 | +| sunTaskFileResults | array | ❌ | 关联文件 | + +**JSON示例**: + +```json +{ + "coachId": 0, + "coachSubId": 0, + "coachSubName": "string", + "coachContent": "string", + "taskInfo": {}, + "sunTaskUserResults": [], + "sunTaskFileResults": [] +} +``` + +--- + +### CourseWeekDetailOutput + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| classCourseId | integer (int64) | ❌ | 课程id | +| subject | integer (int32) | ❌ | 科目id | +| subjectName | string | ❌ | 科目名称 | +| teacherName | string | ❌ | 云校老师 | +| teacherId | integer (int64) | ❌ | 云校老师 | +| landingTeacherId | integer (int64) | ❌ | 落地老师 | +| landingTeacherName | string | ❌ | 落地老师 | +| planStartTime | string (date-time) | ❌ | 上课时间 | +| planEndTime | string (date-time) | ❌ | 下课时间 | + +**JSON示例**: + +```json +{ + "classCourseId": 0, + "subject": 0, + "subjectName": "string", + "teacherName": "string", + "teacherId": 0, + "landingTeacherId": 0, + "landingTeacherName": "string", + "planStartTime": "string", + "planEndTime": "string" +} +``` + +--- + +### CulturalDetailResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| taskInfo | reference | ❌ | - | +| culturalId | integer (int64) | ❌ | 文创id | +| culturalTitle | string | ❌ | 文创标题 | +| remark | string? | ❌ | 备 注:更新说明 +默认值: | +| sunTaskFileResults | array | ❌ | 文创文件信息 | + +**JSON示例**: + +```json +{ + "taskInfo": {}, + "culturalId": 0, + "culturalTitle": "string", + "remark": "string", + "sunTaskFileResults": [] +} +``` + +--- + +### CulturalFinishRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | 任务id | +| culturalId | integer (int64) | ❌ | 文创ID | +| remark | string | ❌ | 工作内容 | +| files | array | ❌ | 文创文件 | + +**JSON示例**: + +```json +{ + "id": 0, + "culturalId": 0, + "remark": "string", + "files": [] +} +``` + +--- + +### CulturalRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64)? | ❌ | 任务id(新增时为null,修改时必传) | +| classesId | integer (int64)? | ❌ | 班级id(班级任务时,classes_id不为空;通用任务时,班级id为空 null) | +| taskTypeEnum | integer (int32) | ❌ | 任务类型id | +| startTime | string (date-time) | ❌ | 备 注:开始时间 +默认值: | +| endTime | string (date-time) | ❌ | 备 注:结束时间 +默认值: | +| taskTitleSuffix | string? | ❌ | 任务后缀 | +| isSuperiorTask | integer (int32) | ❌ | 备 注:是否是布置任务。0否(默认);1是; +默认值: | +| superiorId | integer (int64)? | ❌ | 备 注:布置任务id,如果是布置任务才需要传 +默认值: | +| culturalId | integer (int64)? | ❌ | 文创id 新增不传,修改必传 | +| culturalTitle | string | ❌ | 文创标题 | + +**JSON示例**: + +```json +{ + "id": 0, + "classesId": 0, + "taskTypeEnum": 0, + "startTime": "string", + "endTime": "string", + "taskTitleSuffix": "string", + "isSuperiorTask": 0, + "superiorId": 0, + "culturalId": 0, + "culturalTitle": "string" +} +``` + +--- + +### DataCollectFileRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| classesTaskId | integer (int64) | ❌ | 关联表id(非任务主表id) | +| fileId | integer (int64) | ❌ | 文件id | +| userId | integer (int64) | ❌ | 用户ID | + +**JSON示例**: + +```json +{ + "classesTaskId": 0, + "fileId": 0, + "userId": 0 +} +``` + +--- + +### DataCollectFinishRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | 任务id | +| collectId | integer (int64) | ❌ | 采集ID | +| remark | string | ❌ | 分析总结 | + +**JSON示例**: + +```json +{ + "id": 0, + "collectId": 0, + "remark": "string" +} +``` + +--- + +### DataCollectRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64)? | ❌ | 任务id(新增时为null,修改时必传) | +| classesId | integer (int64)? | ❌ | 班级id(班级任务时,classes_id不为空;通用任务时,班级id为空 null) | +| taskTypeEnum | integer (int32) | ❌ | 任务类型id | +| startTime | string (date-time) | ❌ | 备 注:开始时间 +默认值: | +| endTime | string (date-time) | ❌ | 备 注:结束时间 +默认值: | +| taskTitleSuffix | string? | ❌ | 任务后缀 | +| isSuperiorTask | integer (int32) | ❌ | 备 注:是否是布置任务。0否(默认);1是; +默认值: | +| superiorId | integer (int64)? | ❌ | 备 注:布置任务id,如果是布置任务才需要传 +默认值: | +| dataCollectId | integer (int64)? | ❌ | 数据采集任务ID(新增时为null,修改时必传) | +| collectTitle | string | ❌ | 数据采集标题 | + +**JSON示例**: + +```json +{ + "id": 0, + "classesId": 0, + "taskTypeEnum": 0, + "startTime": "string", + "endTime": "string", + "taskTitleSuffix": "string", + "isSuperiorTask": 0, + "superiorId": 0, + "dataCollectId": 0, + "collectTitle": "string" +} +``` + +--- + +### DataCollectResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| taskInfo | reference | ❌ | - | +| collectId | integer (int64) | ❌ | 采集ID | +| collectTitle | string | ❌ | 采集主题 | +| remark | string | ❌ | 分析总结 | +| collectUsers | array | ❌ | 已采集用户列表 | + +**JSON示例**: + +```json +{ + "taskInfo": {}, + "collectId": 0, + "collectTitle": "string", + "remark": "string", + "collectUsers": [] +} +``` + +--- + +### DataCollectUserResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| userId | integer (int64) | ❌ | 用户ID | +| userName | string | ❌ | 用户名 | +| fileCount | integer (int32) | ❌ | 采集文件数量 | + +**JSON示例**: + +```json +{ + "userId": 0, + "userName": "string", + "fileCount": 0 +} +``` + +--- + +### DataConllectionDetailResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | - | +| title | string | ❌ | 备 注:收集主题 +默认值: | +| remark | string | ❌ | 备 注:收集要求 +默认值: | +| fileId | integer (int64)? | ❌ | 备 注:模板文件id +默认值: | +| filePath | string? | ❌ | 备 注:模板文件路径 | +| fileName | string? | ❌ | 备 注:模板文件名称 | +| fileSize | integer (int64)? | ❌ | 备 注:模板文件大小 | +| endtime | string (date-time) | ❌ | 备 注:提交时间 +默认值: | +| status | integer (int32)? | ❌ | 备 注:状态:1:已创建(未发布);2:进行中(已发布);3:已完成;4:已关闭 +默认值: | +| subFileId | integer (int64)? | ❌ | 已提交文件id(空则未提交) | +| subFilePath | string? | ❌ | 备 注:提交文件路径 | +| subFileName | string? | ❌ | 备 注:提交文件名称 | +| subFileSize | integer (int64)? | ❌ | 备 注:提交文件大小 | +| subAddtime | string (date-time)? | ❌ | 备 注:提交时间 | + +**JSON示例**: + +```json +{ + "id": 0, + "title": "string", + "remark": "string", + "fileId": 0, + "filePath": "string", + "fileName": "string", + "fileSize": 0, + "endtime": "string", + "status": 0, + "subFileId": 0, + "subFilePath": "string", + "subFileName": "string", + "subFileSize": 0, + "subAddtime": "string" +} +``` + +--- + +### DataConllectionListResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | - | +| title | string | ❌ | 备 注:收集主题 +默认值: | +| endtime | string (date-time) | ❌ | 备 注:需要提交时间 +默认值: | +| fileId | integer (int64)? | ❌ | 已提交文件id(空则未提交) | + +**JSON示例**: + +```json +{ + "id": 0, + "title": "string", + "endtime": "string", + "fileId": 0 +} +``` + +--- + +### DataConllectionListResultPageResponse + +分页响应实体类 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| total | integer (int32) | ❌ | 总记录条数 | +| items | array | ❌ | 响应数据 | + +**JSON示例**: + +```json +{ + "total": 0, + "items": [] +} +``` + +--- + +### DataConllectionUpFileRequest + +数据采集上传文件 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| dataCollectionId | integer (int64) | ❌ | 资料收集id | +| fileId | integer (int64) | ❌ | 文件id | + +**JSON示例**: + +```json +{ + "dataCollectionId": 0, + "fileId": 0 +} +``` + +--- + +### DesktopDataConllectionUpFileRequest + +电脑端上传采集文件 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| sign | string | ❌ | 加密数据 | +| fileId | integer (int64) | ❌ | 文件id | + +**JSON示例**: + +```json +{ + "sign": "string", + "fileId": 0 +} +``` + +--- + +### EvaluationSumRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | 总结报告id | +| content | string | ❌ | 评论内容 | + +**JSON示例**: + +```json +{ + "id": 0, + "content": "string" +} +``` + +--- + +### FinancialClassRequest + +添加班级使用经费记录 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| classId | integer (int64) | ❌ | 班级id | +| remark | string | ❌ | 用途 | +| money | number (double) | ❌ | 元 | +| financialTime | string (date-time) | ❌ | 使用时间 | + +**JSON示例**: + +```json +{ + "classId": 0, + "remark": "string", + "money": 0.0, + "financialTime": "string" +} +``` + +--- + +### FinancialClassResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | 经费使用记录Id | +| financialTime | string (date-time) | ❌ | 备 注:使用时间 +默认值: | +| remark | string | ❌ | 用途 | +| money | number (double) | ❌ | 消费费用(元) | + +**JSON示例**: + +```json +{ + "id": 0, + "financialTime": "string", + "remark": "string", + "money": 0.0 +} +``` + +--- + +### FinancialClassSumResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| financialIndicatorsResult | reference | ❌ | - | +| sumMoney | number (double) | ❌ | 累计金额 | +| financialClassResults | array | ❌ | 使用经费 | + +**JSON示例**: + +```json +{ + "financialIndicatorsResult": {}, + "sumMoney": 0.0, + "financialClassResults": [] +} +``` + +--- + +### FinancialIndicatorsResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| startTime | string (date-time) | ❌ | 备 注:开始时间 +默认值: | +| endTime | string (date-time) | ❌ | 备 注:结束时间 +默认值: | +| money | number (double) | ❌ | 备 注:本时段经费金额 +默认值: | + +**JSON示例**: + +```json +{ + "startTime": "string", + "endTime": "string", + "money": 0.0 +} +``` + +--- + +### Financial_indicators + +经费管理 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | - | +| startTime | string (date-time) | ❌ | 备 注:开始时间 +默认值: | +| endTime | string (date-time) | ❌ | 备 注:结束时间 +默认值: | +| money | number (double) | ❌ | 备 注:本时段经费金额 +默认值: | + +**JSON示例**: + +```json +{ + "id": 0, + "startTime": "string", + "endTime": "string", + "money": 0.0 +} +``` + +--- + +### FollowAbsenceUserRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| followId | integer (int64) | ❌ | 双师课堂记录表id | +| userId | integer (int64) | ❌ | 用户id | +| handleState | integer (int64) | ❌ | 处理状态 默认0 0未处理 1忽略 2发起谈话 | + +**JSON示例**: + +```json +{ + "followId": 0, + "userId": 0, + "handleState": 0 +} +``` + +--- + +### FollowAbsenceUserResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | - | +| followId | integer (int64) | ❌ | 跟课id | +| userId | integer (int64) | ❌ | 用户id | +| userName | string | ❌ | 用户姓名 | + +**JSON示例**: + +```json +{ + "id": 0, + "followId": 0, + "userId": 0, + "userName": "string" +} +``` + +--- + +### FollowInfoFinishRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | 任务id | +| followId | integer (int64) | ❌ | 备 注:跟课id | + +**JSON示例**: + +```json +{ + "id": 0, + "followId": 0 +} +``` + +--- + +### FollowInfoRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64)? | ❌ | 任务id(新增时为null,修改时必传) | +| classesId | integer (int64)? | ❌ | 班级id(班级任务时,classes_id不为空;通用任务时,班级id为空 null) | +| taskTypeEnum | integer (int32) | ❌ | 任务类型id | +| startTime | string (date-time) | ❌ | 备 注:开始时间 +默认值: | +| endTime | string (date-time) | ❌ | 备 注:结束时间 +默认值: | +| taskTitleSuffix | string? | ❌ | 任务后缀 | +| isSuperiorTask | integer (int32) | ❌ | 备 注:是否是布置任务。0否(默认);1是; +默认值: | +| superiorId | integer (int64)? | ❌ | 备 注:布置任务id,如果是布置任务才需要传 +默认值: | +| classCourseId | integer (int64) | ❌ | 备 注:课程id +默认值: | + +**JSON示例**: + +```json +{ + "id": 0, + "classesId": 0, + "taskTypeEnum": 0, + "startTime": "string", + "endTime": "string", + "taskTitleSuffix": "string", + "isSuperiorTask": 0, + "superiorId": 0, + "classCourseId": 0 +} +``` + +--- + +### FollowInfoResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| taskInfo | reference | ❌ | - | +| followTeachersituations | array | ❌ | 落地老师问题 | +| followAbsenceUserResults | array | ❌ | 跟课缺席用户列表 | +| followKeynoteUserResults | array | ❌ | 重点学生列表 | +| followId | integer (int64) | ❌ | 跟课ID | +| classCourseId | integer (int64) | ❌ | 备 注:课程id +默认值: | +| classesFollowMethod | integer (int32)? | ❌ | 备 注:跟课方式1:直播;2:录播; +默认值: | +| classesSignalStability | integer (int32)? | ❌ | 备 注:信号是否稳定;0否;1:是; +默认值: | +| concentrationActivityEnum | integer (int32)? | ❌ | 备 注:整体活跃度,参数id +默认值: | +| concentrationLevelEnum | integer (int32)? | ❌ | 备 注:整体专注度,参数id +默认值: | +| masteryLevelEnum | integer (int32)? | ❌ | 备 注:整体问题回答正确率/知识掌握程度,参数id +默认值: | +| remark | string | ❌ | 其他 | + +**JSON示例**: + +```json +{ + "taskInfo": {}, + "followTeachersituations": [], + "followAbsenceUserResults": [], + "followKeynoteUserResults": [], + "followId": 0, + "classCourseId": 0, + "classesFollowMethod": 0, + "classesSignalStability": 0, + "concentrationActivityEnum": 0, + "concentrationLevelEnum": 0, + "masteryLevelEnum": 0, + "remark": "string" +} +``` + +--- + +### FollowKeyNoteUserRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| followId | integer (int64) | ❌ | 备 注:跟课id +默认值: | +| userId | integer (int64) | ❌ | 备 注:重点学生用户id +默认值: | +| attentionFocus | string | ❌ | 备 注:注意力与专注力,参数id,多个用英文逗号分割 +默认值: | +| participationEnthusiasm | string | ❌ | 备 注:参与度与积极性,参数id,多个用英文逗号分割 +默认值: | +| behaviorNormsDiscipline | string | ❌ | 备 注:行为规范与纪律,参数id,多个用英文逗号分割 +默认值: | +| comprehensionDifficulties | string | ❌ | 备 注:学习效果与理解困难,参数id,多个用英文逗号分割 +默认值: | +| psychologicalState | string | ❌ | 备 注:情绪与心理状态,参数id,多个用英文逗号分割 +默认值: | + +**JSON示例**: + +```json +{ + "followId": 0, + "userId": 0, + "attentionFocus": "string", + "participationEnthusiasm": "string", + "behaviorNormsDiscipline": "string", + "comprehensionDifficulties": "string", + "psychologicalState": "string" +} +``` + +--- + +### FollowKeynoteUserResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | 重点学生id | +| followId | integer (int64) | ❌ | 跟课id | +| userId | integer (int64) | ❌ | 重点学生id | +| userName | string | ❌ | 重点学生姓名 | +| attentionFocus | string | ❌ | 备 注:注意力与专注力,参数id,多个用英文逗号分割 +默认值: | +| participationEnthusiasm | string | ❌ | 备 注:参与度与积极性,参数id,多个用英文逗号分割 +默认值: | +| behaviorNormsDiscipline | string | ❌ | 备 注:行为规范与纪律,参数id,多个用英文逗号分割 +默认值: | +| comprehensionDifficulties | string | ❌ | 备 注:学习效果与理解困难,参数id,多个用英文逗号分割 +默认值: | +| psychologicalState | string | ❌ | 备 注:情绪与心理状态,参数id,多个用英文逗号分割 +默认值: | + +**JSON示例**: + +```json +{ + "id": 0, + "followId": 0, + "userId": 0, + "userName": "string", + "attentionFocus": "string", + "participationEnthusiasm": "string", + "behaviorNormsDiscipline": "string", + "comprehensionDifficulties": "string", + "psychologicalState": "string" +} +``` + +--- + +### FollowQuestionRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| followId | integer (int64) | ❌ | 备 注:跟课id | +| followTeachersituations | array? | ❌ | 落地老师的问题列表 | +| classesFollowMethod | integer (int32)? | ❌ | 备 注:跟课方式1:直播;2:录播; +默认值: | +| classesSignalStability | integer (int32)? | ❌ | 备 注:信号是否稳定;0否;1:是; +默认值: | +| concentrationActivityEnum | integer (int32)? | ❌ | 备 注:整体活跃度,参数id +默认值: | +| concentrationLevelEnum | integer (int32)? | ❌ | 备 注:整体专注度,参数id +默认值: | +| masteryLevelEnum | integer (int32)? | ❌ | 备 注:整体问题回答正确率/知识掌握程度,参数id +默认值: | +| remark | string? | ❌ | 其他 | + +**JSON示例**: + +```json +{ + "followId": 0, + "followTeachersituations": [], + "classesFollowMethod": 0, + "classesSignalStability": 0, + "concentrationActivityEnum": 0, + "concentrationLevelEnum": 0, + "masteryLevelEnum": 0, + "remark": "string" +} +``` + +--- + +### FollowTeachersituationRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| followId | integer (int64) | ❌ | 备 注:跟课id +默认值: | +| paramId | integer (int64) | ❌ | 备 注:落地老师-问题类型,字典表 +默认值: | + +**JSON示例**: + +```json +{ + "followId": 0, + "paramId": 0 +} +``` + +--- + +### FollowTeachersituationResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | - | +| followId | integer (int64) | ❌ | 跟课id | +| paramId | integer (int64) | ❌ | 落地老师-问题类型,字典表 | +| paramName | string | ❌ | 问题描述 | + +**JSON示例**: + +```json +{ + "id": 0, + "followId": 0, + "paramId": 0, + "paramName": "string" +} +``` + +--- + +### ImConfigResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| sDKAppID | integer (int32) | ❌ | - | +| videoCall | boolean | ❌ | 视频通话状态 | +| voiceCall | boolean | ❌ | 语音通话状态 | + +**JSON示例**: + +```json +{ + "sDKAppID": 0, + "videoCall": true, + "voiceCall": true +} +``` + +--- + +### Index_ClassesTaskCheckList_User + +通用首页任务清单用户信息 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| taskTypeEnum | integer (int64) | ❌ | 任务类型枚举 | +| taskTypeName | string | ❌ | 任务类型枚举-名称 | +| createTaskCount | integer (int32) | ❌ | 已创建任务数量 | +| okTaskCount | integer (int32) | ❌ | 已完成任务数量 | +| shouldTaskCount | integer (int32) | ❌ | 应完成任务数量 | + +**JSON示例**: + +```json +{ + "taskTypeEnum": 0, + "taskTypeName": "string", + "createTaskCount": 0, + "okTaskCount": 0, + "shouldTaskCount": 0 +} +``` + +--- + +### Index_ClassesTaskCheckList_UserPageResponse + +分页响应实体类 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| total | integer (int32) | ❌ | 总记录条数 | +| items | array | ❌ | 响应数据 | + +**JSON示例**: + +```json +{ + "total": 0, + "items": [] +} +``` + +--- + +### LikeUserBooksResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| cloudSchoolName | string | ❌ | 云校名称 | +| id | integer (int64) | ❌ | Id | +| userName | string | ❌ | 用户姓名 | +| roleEnum | reference | ❌ | - | +| headImage | string | ❌ | 头像 | +| phone | string | ❌ | 电话 | +| classNum | integer (int32) | ❌ | 管理班级数量 | + +**JSON示例**: + +```json +{ + "cloudSchoolName": "string", + "id": 0, + "userName": "string", + "roleEnum": {}, + "headImage": "string", + "phone": "string", + "classNum": 0 +} +``` + +--- + +### LoginCodeRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| phone | string | ❌ | 电话 | +| code | string | ❌ | 验证码 | +| loginType | integer (int32) | ❌ | 登录类型 1:Android;2Ios | + +**JSON示例**: + +```json +{ + "phone": "string", + "code": "string", + "loginType": 0 +} +``` + +--- + +### LoginRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| username | string | ❌ | 用户名 | +| pwd | string | ❌ | 密码 | +| loginType | integer (int32) | ❌ | 登录类型 1:Android;2Ios | + +**JSON示例**: + +```json +{ + "username": "string", + "pwd": "string", + "loginType": 0 +} +``` + +--- + +### ManagerDataCollectionDetailResult + +管理数据采集详情结果 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | id | +| title | string | ❌ | 备 注:收集主题 +默认值: | +| remark | string | ❌ | 备 注:收集要求 +默认值: | +| fileId | integer (int64)? | ❌ | 备 注:模板文件id +默认值: | +| filePath | string? | ❌ | 备 注:模板文件路径 | +| fileName | string? | ❌ | 备 注:模板文件名称 | +| fileSize | integer (int64)? | ❌ | 备 注:模板文件大小 | +| endtime | string (date-time) | ❌ | 备 注:提交时间 +默认值: | +| addtime | string (date-time) | ❌ | 备 注:添加时间 +默认值: | +| fileCount | integer (int32)? | ❌ | 备 注:收集对象个数 +默认值: | +| submitCount | integer (int32) | ❌ | 备 注:已提交个数 | +| status | integer (int32)? | ❌ | 备 注:状态:1:已创建(未发布);2:进行中(已发布);3:已完成;4:已关闭 +默认值: | +| managerDataCollectionUserFiles | array | ❌ | 收集文件用户列表 | +| managerDataCollectionNonUsers | array | ❌ | 未提交用户列表 | + +**JSON示例**: + +```json +{ + "id": 0, + "title": "string", + "remark": "string", + "fileId": 0, + "filePath": "string", + "fileName": "string", + "fileSize": 0, + "endtime": "string", + "addtime": "string", + "fileCount": 0, + "submitCount": 0, + "status": 0, + "managerDataCollectionUserFiles": [], + "managerDataCollectionNonUsers": [] +} +``` + +--- + +### ManagerDataCollectionNonUser + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| userId | integer (int64) | ❌ | 用户id | +| userName | string | ❌ | 用户名称 | + +**JSON示例**: + +```json +{ + "userId": 0, + "userName": "string" +} +``` + +--- + +### ManagerDataCollectionRequest + +资料收集 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| title | string | ❌ | 备 注:收集主题 +默认值: | +| remark | string | ❌ | 备 注:收集要求 +默认值: | +| fileId | integer (int64)? | ❌ | 备 注:模板文件id(直接手机传则传id,电脑传则为null) +默认值: | +| endtime | string (date-time) | ❌ | 备 注:提交时间 +默认值: | +| users | array | ❌ | 备 注:收集对象,用户集合 | + +**JSON示例**: + +```json +{ + "title": "string", + "remark": "string", + "fileId": 0, + "endtime": "string", + "users": [] +} +``` + +--- + +### ManagerDataCollectionResult + +管理数据采集结果 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | id | +| title | string | ❌ | 备 注:收集主题 +默认值: | +| endtime | string (date-time) | ❌ | 备 注:提交时间 +默认值: | +| addtime | string (date-time) | ❌ | 备 注:添加时间 +默认值: | +| fileCount | integer (int32)? | ❌ | 备 注:收集对象个数 +默认值: | +| submitCount | integer (int32) | ❌ | 备 注:已提交个数 | +| status | integer (int32) | ❌ | 备 注:状态:1:已创建(未发布);2:进行中(已发布);3:已完成;4:已关闭 +默认值: | + +**JSON示例**: + +```json +{ + "id": 0, + "title": "string", + "endtime": "string", + "addtime": "string", + "fileCount": 0, + "submitCount": 0, + "status": 0 +} +``` + +--- + +### ManagerDataCollectionResultPageResponse + +分页响应实体类 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| total | integer (int32) | ❌ | 总记录条数 | +| items | array | ❌ | 响应数据 | + +**JSON示例**: + +```json +{ + "total": 0, + "items": [] +} +``` + +--- + +### ManagerDataCollectionUserFile + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| userHeadImage | string | ❌ | 用户头像 | +| userId | integer (int64) | ❌ | 用户id | +| userName | string | ❌ | 用户名称 | +| fileId | integer (int64)? | ❌ | 提交的文件id | +| filePath | string? | ❌ | 提交的文件路径 | +| fileName | string? | ❌ | 提交的文件名称 | +| fileSize | integer (int64)? | ❌ | 提交的文件大小 | +| addFileTime | string (date-time)? | ❌ | 提交时间 | + +**JSON示例**: + +```json +{ + "userHeadImage": "string", + "userId": 0, + "userName": "string", + "fileId": 0, + "filePath": "string", + "fileName": "string", + "fileSize": 0, + "addFileTime": "string" +} +``` + +--- + +### ManagerUserInfoDetailResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| userDetailInfo | reference | ❌ | - | +| schoolResults | array? | ❌ | 管理学校 | +| manageUserResults | array? | ❌ | 管理学习官 | +| classesResults | array? | ❌ | 管理班级 | +| performances | array? | ❌ | 用户绩效信息(近半年) | + +**JSON示例**: + +```json +{ + "userDetailInfo": {}, + "schoolResults": [], + "manageUserResults": [], + "classesResults": [], + "performances": [] +} +``` + +--- + +### MeetingInfoFinishRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | 任务id | +| meetingId | integer (int64) | ❌ | 会议ID | +| remark | string | ❌ | 会议纪要 | +| files | array? | ❌ | - | + +**JSON示例**: + +```json +{ + "id": 0, + "meetingId": 0, + "remark": "string", + "files": [] +} +``` + +--- + +### MeetingInfoRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64)? | ❌ | 任务id(新增时为null,修改时必传) | +| classesId | integer (int64)? | ❌ | 班级id(班级任务时,classes_id不为空;通用任务时,班级id为空 null) | +| taskTypeEnum | integer (int32) | ❌ | 任务类型id | +| startTime | string (date-time) | ❌ | 备 注:开始时间 +默认值: | +| endTime | string (date-time) | ❌ | 备 注:结束时间 +默认值: | +| taskTitleSuffix | string? | ❌ | 任务后缀 | +| isSuperiorTask | integer (int32) | ❌ | 备 注:是否是布置任务。0否(默认);1是; +默认值: | +| superiorId | integer (int64)? | ❌ | 备 注:布置任务id,如果是布置任务才需要传 +默认值: | +| meetingId | integer (int64)? | ❌ | 会议任务id(新增时为null,修改时必传) | +| meetingTitle | string | ❌ | 会议主题 | +| meetingUsername | string | ❌ | 参会人员 | + +**JSON示例**: + +```json +{ + "id": 0, + "classesId": 0, + "taskTypeEnum": 0, + "startTime": "string", + "endTime": "string", + "taskTitleSuffix": "string", + "isSuperiorTask": 0, + "superiorId": 0, + "meetingId": 0, + "meetingTitle": "string", + "meetingUsername": "string" +} +``` + +--- + +### MeetingInfoResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| meetingId | integer (int64) | ❌ | 会议ID | +| meetingTitle | string | ❌ | 会议主题 | +| remark | string | ❌ | 会议纪要 | +| taskInfo | reference | ❌ | - | +| meetingUsername | string | ❌ | 参会人员 | +| sunTaskFileResults | array | ❌ | 关联文件 | + +**JSON示例**: + +```json +{ + "meetingId": 0, + "meetingTitle": "string", + "remark": "string", + "taskInfo": {}, + "meetingUsername": "string", + "sunTaskFileResults": [] +} +``` + +--- + +### MyInfoResetPwdRequest + +修改密码 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | 用户id | +| password | string | ❌ | 原密码 | +| newPassword | string | ❌ | 新密码 | + +**JSON示例**: + +```json +{ + "id": 0, + "password": "string", + "newPassword": "string" +} +``` + +--- + +### MyPhoneBindRequest + +换绑电话 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| phone | string | ❌ | 电话 | +| phoneCode | string | ❌ | 验证码 | + +**JSON示例**: + +```json +{ + "phone": "string", + "phoneCode": "string" +} +``` + +--- + +### OSSConfigResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| accessKeyId | string | ❌ | - | +| accessKeySecret | string | ❌ | - | +| endpoint | string | ❌ | - | +| bucketName | string | ❌ | - | +| size | integer (int64) | ❌ | - | + +**JSON示例**: + +```json +{ + "accessKeyId": "string", + "accessKeySecret": "string", + "endpoint": "string", + "bucketName": "string", + "size": 0 +} +``` + +--- + +### OssSignResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| filePath | string | ❌ | 上传路径 | +| fileSize | integer (int64) | ❌ | 文件限制大小 | +| uploadUrl | string | ❌ | 上传URL | + +**JSON示例**: + +```json +{ + "filePath": "string", + "fileSize": 0, + "uploadUrl": "string" +} +``` + +--- + +### OtherInfoFinishRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | 任务id | +| otherId | integer (int64) | ❌ | 其他ID | +| remark | string | ❌ | 工作内容 | +| files | array? | ❌ | - | + +**JSON示例**: + +```json +{ + "id": 0, + "otherId": 0, + "remark": "string", + "files": [] +} +``` + +--- + +### OtherInfoRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64)? | ❌ | 任务id(新增时为null,修改时必传) | +| classesId | integer (int64)? | ❌ | 班级id(班级任务时,classes_id不为空;通用任务时,班级id为空 null) | +| taskTypeEnum | integer (int32) | ❌ | 任务类型id | +| startTime | string (date-time) | ❌ | 备 注:开始时间 +默认值: | +| endTime | string (date-time) | ❌ | 备 注:结束时间 +默认值: | +| taskTitleSuffix | string? | ❌ | 任务后缀 | +| isSuperiorTask | integer (int32) | ❌ | 备 注:是否是布置任务。0否(默认);1是; +默认值: | +| superiorId | integer (int64)? | ❌ | 备 注:布置任务id,如果是布置任务才需要传 +默认值: | +| otherId | integer (int64)? | ❌ | id(新增时为null,修改时必传) | +| otherTitle | string | ❌ | 任务描述 | + +**JSON示例**: + +```json +{ + "id": 0, + "classesId": 0, + "taskTypeEnum": 0, + "startTime": "string", + "endTime": "string", + "taskTitleSuffix": "string", + "isSuperiorTask": 0, + "superiorId": 0, + "otherId": 0, + "otherTitle": "string" +} +``` + +--- + +### OtherInfoResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| otherId | integer (int64) | ❌ | 班干部会议记录ID | +| otherTitle | string | ❌ | 工作描述 | +| remark | string | ❌ | 工作内容 | +| taskInfo | reference | ❌ | - | +| sunTaskFileResults | array | ❌ | 关联文件 | + +**JSON示例**: + +```json +{ + "otherId": 0, + "otherTitle": "string", + "remark": "string", + "taskInfo": {}, + "sunTaskFileResults": [] +} +``` + +--- + +### Performance + +用户绩效信息 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| monthDate | string | ❌ | 月份 | +| completionRate | integer (int32) | ❌ | 完成率 | + +**JSON示例**: + +```json +{ + "monthDate": "string", + "completionRate": 0 +} +``` + +--- + +### ProblemSemesterViewDto + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| solutionSemesterEnum | reference | ❌ | - | +| solutionSemesterName | string | ❌ | 解决方案枚举名称 | + +**JSON示例**: + +```json +{ + "solutionSemesterEnum": {}, + "solutionSemesterName": "string" +} +``` + +--- + +### ProblemTaskTypeViewDto + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| taskTypeEnum | reference | ❌ | - | +| taskTypeEnumName | string | ❌ | 任务类型枚举名称 | + +**JSON示例**: + +```json +{ + "taskTypeEnum": {}, + "taskTypeEnumName": "string" +} +``` + +--- + +### QuestionDateResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| dataYear | integer (int32) | ❌ | 年 | +| dataMonth | integer (int32) | ❌ | 月 | +| dataCount | integer (int32) | ❌ | 数据条数 | + +**JSON示例**: + +```json +{ + "dataYear": 0, + "dataMonth": 0, + "dataCount": 0 +} +``` + +--- + +### QuestionInfoByTaskEnumResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| fatherQuestionName | string | ❌ | 父级问题类型 | +| questionName | string | ❌ | 问题类型 | +| questionCount | integer (int32) | ❌ | 条数 | +| questionChain | string | ❌ | 环比 | +| questionInfoResults | array | ❌ | 问题列表 | + +**JSON示例**: + +```json +{ + "fatherQuestionName": "string", + "questionName": "string", + "questionCount": 0, + "questionChain": "string", + "questionInfoResults": [] +} +``` + +--- + +### QuestionInfoByTypeResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| taskEnum | integer (int32) | ❌ | 任务类型枚举 | +| questionType | integer (int32) | ❌ | 问题类型枚举 | +| questionPValue | integer (int64) | ❌ | 问题具体信息 | +| fatherQuestionName | string | ❌ | 父级问题类型 | +| questionName | string | ❌ | 问题类型 | +| questionCount | integer (int32) | ❌ | 首页本月条数/类型总条数 | + +**JSON示例**: + +```json +{ + "taskEnum": 0, + "questionType": 0, + "questionPValue": 0, + "fatherQuestionName": "string", + "questionName": "string", + "questionCount": 0 +} +``` + +--- + +### QuestionInfoResult + +问题列表 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| questionUserId | integer (int64) | ❌ | 问题人id | +| questionUserName | string | ❌ | 问题人 | +| addTime | string (date-time) | ❌ | 问题时间 | +| taskEnum | integer (int32) | ❌ | 任务类型枚举 | +| taskId | integer (int64) | ❌ | 任务id | +| questionPValue | integer (int64) | ❌ | 问题具体value | +| fatherQuestionName | string | ❌ | 父级问题类型 | +| questionName | string | ❌ | 问题类型 | +| questionType | integer (int32) | ❌ | 问题类型 1:学生;2:老师; | +| questionClassId | integer (int64)? | ❌ | 学生问题时所属班级id | + +**JSON示例**: + +```json +{ + "questionUserId": 0, + "questionUserName": "string", + "addTime": "string", + "taskEnum": 0, + "taskId": 0, + "questionPValue": 0, + "fatherQuestionName": "string", + "questionName": "string", + "questionType": 0, + "questionClassId": 0 +} +``` + +--- + +### QuestionType + +问题类别 + +**枚举值**: + +- `0` +- `1` +- `2` + +**JSON示例**: + +```json +"0" +``` + +--- + +### ReadSummarizRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| sumId | integer (int64) | ❌ | 总结id | +| sumType | integer (int32) | ❌ | 总结类型 1日报 2周报 3月报 | + +**JSON示例**: + +```json +{ + "sumId": 0, + "sumType": 0 +} +``` + +--- + +### RedPoint + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| workBenchNonCount | integer (int32) | ❌ | 工作台待办数量 | +| dataCollectionNonSubCount | integer (int32) | ❌ | 资料收集待提交数量 | + +**JSON示例**: + +```json +{ + "workBenchNonCount": 0, + "dataCollectionNonSubCount": 0 +} +``` + +--- + +### RefreshTokenRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| token | string | ❌ | 过期的token | + +**JSON示例**: + +```json +{ + "token": "string" +} +``` + +--- + +### RegisterRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| account | string | ❌ | 账号 | +| password | string | ❌ | 密码 | +| userName | string | ❌ | - | + +**JSON示例**: + +```json +{ + "account": "string", + "password": "string", + "userName": "string" +} +``` + +--- + +### SchoolInfo + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | - | +| schoolName | string | ❌ | 学校名称 | +| cloudSchoolId | integer (int64) | ❌ | 云校id | +| cloudSchoolName | string | ❌ | 云校名称 | + +**JSON示例**: + +```json +{ + "id": 0, + "schoolName": "string", + "cloudSchoolId": 0, + "cloudSchoolName": "string" +} +``` + +--- + +### SchoolResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | - | +| schoolName | string | ❌ | - | + +**JSON示例**: + +```json +{ + "id": 0, + "schoolName": "string" +} +``` + +--- + +### SchoolTree + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | - | +| schoolName | string | ❌ | - | +| count | integer (int32) | ❌ | - | +| users | array? | ❌ | - | +| children | array? | ❌ | - | + +**JSON示例**: + +```json +{ + "id": 0, + "schoolName": "string", + "count": 0, + "users": [], + "children": [] +} +``` + +--- + +### SchoolUserBooksResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| cloudSchoolName | string | ❌ | 云校名称 | +| schoolName | string | ❌ | 学校名称 | +| id | integer (int64) | ❌ | Id | +| userName | string | ❌ | 用户姓名 | +| headImage | string | ❌ | 头像 | +| roleEnum | reference | ❌ | - | +| phone | string | ❌ | 电话 | + +**JSON示例**: + +```json +{ + "cloudSchoolName": "string", + "schoolName": "string", + "id": 0, + "userName": "string", + "headImage": "string", + "roleEnum": {}, + "phone": "string" +} +``` + +--- + +### SolutionDetailViewDto + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | - | +| problemTitle | string | ❌ | 备 注:问题描述 +默认值: | +| upTime | string (date-time) | ❌ | 最后修改时间 | +| problemObj | reference | ❌ | - | +| toolClassType | reference | ❌ | - | +| problemSemesters | array | ❌ | 关联学段枚举列表 | +| problemPhenomenon | string | ❌ | 备 注:问题显著现象 +默认值: | +| solutionContent | string | ❌ | 备 注:解决方案文本描述 +默认值: | +| problemTaskTypes | array | ❌ | 关联任务类型枚举列表 | +| toolKits | array | ❌ | 解决方案工具列表 | + +**JSON示例**: + +```json +{ + "id": 0, + "problemTitle": "string", + "upTime": "string", + "problemObj": {}, + "toolClassType": {}, + "problemSemesters": [], + "problemPhenomenon": "string", + "solutionContent": "string", + "problemTaskTypes": [], + "toolKits": [] +} +``` + +--- + +### SolutionListViewDto + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | - | +| problemTitle | string | ❌ | 备 注:问题描述 +默认值: | +| upTime | string (date-time) | ❌ | 最后修改时间 | +| problemObj | reference | ❌ | - | +| toolClassType | reference | ❌ | - | +| problemSemesters | array | ❌ | 关联学段枚举列表 | + +**JSON示例**: + +```json +{ + "id": 0, + "problemTitle": "string", + "upTime": "string", + "problemObj": {}, + "toolClassType": {}, + "problemSemesters": [] +} +``` + +--- + +### SolutionListViewMobileDto + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | - | +| problemTitle | string | ❌ | 备 注:问题描述 +默认值: | +| upTime | string (date-time) | ❌ | 最后修改时间 | +| problemObj | reference | ❌ | - | +| toolClassType | reference | ❌ | - | +| problemPhenomenon | string | ❌ | 备 注:问题显著现象 +默认值: | +| problemSemesters | array | ❌ | 关联学段枚举列表 | + +**JSON示例**: + +```json +{ + "id": 0, + "problemTitle": "string", + "upTime": "string", + "problemObj": {}, + "toolClassType": {}, + "problemPhenomenon": "string", + "problemSemesters": [] +} +``` + +--- + +### SolutionListViewMobileDtoPageResponse + +分页响应实体类 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| total | integer (int32) | ❌ | 总记录条数 | +| items | array | ❌ | 响应数据 | + +**JSON示例**: + +```json +{ + "total": 0, + "items": [] +} +``` + +--- + +### SolutionSemesterEnum + +解决方案及工具包使用年级枚举 + +**枚举值**: + +- `0` +- `101` +- `102` +- `103` +- `104` +- `111` +- `112` +- `113` +- `114` +- `121` +- `122` +- `123` +- `124` + +**JSON示例**: + +```json +"0" +``` + +--- + +### SpotCheckTypeValue + +学习行为习惯全面抽查流程标准-类型表-各项具体分值表 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | - | +| value | integer (int32) | ❌ | 备 注:分值 +默认值: | +| valueName | string | ❌ | 备 注:标准内容 +默认值: | +| checkId | integer (int64) | ❌ | 备 注:所属抽查标准 +默认值: | + +**JSON示例**: + +```json +{ + "id": 0, + "value": 0, + "valueName": "string", + "checkId": 0 +} +``` + +--- + +### SpotTaskFinishRequest + +学习行为习惯全面抽查任务完成请求类 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | 任务id | +| spotId | integer (int64) | ❌ | 抽查记录表id | +| remark | string | ❌ | 反馈/反思 | + +**JSON示例**: + +```json +{ + "id": 0, + "spotId": 0, + "remark": "string" +} +``` + +--- + +### SpotTaskRequest + +学习行为习惯全面抽查任务请求类 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64)? | ❌ | 任务id(新增时为null,修改时必传) | +| classesId | integer (int64)? | ❌ | 班级id(班级任务时,classes_id不为空;通用任务时,班级id为空 null) | +| taskTypeEnum | integer (int32) | ❌ | 任务类型id | +| startTime | string (date-time) | ❌ | 备 注:开始时间 +默认值: | +| endTime | string (date-time) | ❌ | 备 注:结束时间 +默认值: | +| taskTitleSuffix | string? | ❌ | 任务后缀 | +| isSuperiorTask | integer (int32) | ❌ | 备 注:是否是布置任务。0否(默认);1是; +默认值: | +| superiorId | integer (int64)? | ❌ | 备 注:布置任务id,如果是布置任务才需要传 +默认值: | +| spotId | integer (int64)? | ❌ | 抽查任务id(新增时为null,修改时必传) | +| checkProjectid | integer (int64) | ❌ | 备 注:抽查项目id +默认值: | + +**JSON示例**: + +```json +{ + "id": 0, + "classesId": 0, + "taskTypeEnum": 0, + "startTime": "string", + "endTime": "string", + "taskTitleSuffix": "string", + "isSuperiorTask": 0, + "superiorId": 0, + "spotId": 0, + "checkProjectid": 0 +} +``` + +--- + +### SpotTaskResult + +学习行为习惯全面抽查任务结果类 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| taskInfo | reference | ❌ | - | +| spotId | integer (int64) | ❌ | 抽查任务id | +| classesTaskId | integer (int64) | ❌ | 任务id | +| checkProjectid | integer (int64) | ❌ | 抽查项目id | +| checkProjectName | string | ❌ | 抽查项目名称 | +| remark | string? | ❌ | 反馈/反思 | +| spotTaskUserResults | array | ❌ | 抽查人员列表 | + +**JSON示例**: + +```json +{ + "taskInfo": {}, + "spotId": 0, + "classesTaskId": 0, + "checkProjectid": 0, + "checkProjectName": "string", + "remark": "string", + "spotTaskUserResults": [] +} +``` + +--- + +### SpotTaskUserRequest + +学习行为习惯全面抽查任务-抽查人员请求类 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| spotId | integer (int64) | ❌ | 抽查记录表id | +| userId | integer (int64) | ❌ | 抽查人员id | +| valueTotal | integer (int32) | ❌ | 分值 | + +**JSON示例**: + +```json +{ + "spotId": 0, + "userId": 0, + "valueTotal": 0 +} +``` + +--- + +### SpotTaskUserResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | id | +| spotId | integer (int64) | ❌ | 抽查记录表id | +| userId | integer (int64) | ❌ | 抽查人员id | +| valueTotal | number (double) | ❌ | 得分 | +| userName | string | ❌ | 抽查人员名称 | +| addTime | string (date-time) | ❌ | 添加时间 | + +**JSON示例**: + +```json +{ + "id": 0, + "spotId": 0, + "userId": 0, + "valueTotal": 0.0, + "userName": "string", + "addTime": "string" +} +``` + +--- + +### StudentDetailInfoResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | - | +| schoolId | integer (int64) | ❌ | 学校id | +| schoolName | string | ❌ | 备 注:学校名称 +默认值: | +| classId | integer (int64) | ❌ | 班级id | +| className | string | ❌ | 备 注:班级名称 +默认值: | +| userName | string | ❌ | 姓名 | +| remark | string | ❌ | 备注 | +| gradeLevel | string | ❌ | 备 注:年级 +默认值: | +| graduationYear | integer (int32) | ❌ | 备 注:所属届 +默认值: | +| studentParents | array? | ❌ | - | + +**JSON示例**: + +```json +{ + "id": 0, + "schoolId": 0, + "schoolName": "string", + "classId": 0, + "className": "string", + "userName": "string", + "remark": "string", + "gradeLevel": "string", + "graduationYear": 0, + "studentParents": [] +} +``` + +--- + +### StudentParentInfoResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | - | +| parentName | string | ❌ | 家长姓名 | +| parentRelation | integer (int64) | ❌ | 字典表-关系 | +| parentRelationName | string? | ❌ | 字典表-关系名称 | +| parentPhone | string | ❌ | 电话 | + +**JSON示例**: + +```json +{ + "id": 0, + "parentName": "string", + "parentRelation": 0, + "parentRelationName": "string", + "parentPhone": "string" +} +``` + +--- + +### StudentParentRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| parentName | string | ❌ | 家长名称 | +| parentRelation | integer (int64) | ❌ | 字典表-关系 | +| parentPhone | string | ❌ | 电话 | + +**JSON示例**: + +```json +{ + "parentName": "string", + "parentRelation": 0, + "parentPhone": "string" +} +``` + +--- + +### StudentRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| classesId | integer (int64) | ❌ | 班级id | +| userName | string | ❌ | 用户名称 | + +**JSON示例**: + +```json +{ + "classesId": 0, + "userName": "string" +} +``` + +--- + +### StudentRequest_V2 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64)? | ❌ | 学生id(添加不传) | +| classesId | integer (int64) | ❌ | 班级id | +| userName | string | ❌ | 用户名称 | +| studentParentRequests | array? | ❌ | 家长信息 | +| remark | string | ❌ | 备注 | + +**JSON示例**: + +```json +{ + "id": 0, + "classesId": 0, + "userName": "string", + "studentParentRequests": [], + "remark": "string" +} +``` + +--- + +### StudentResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | 学生Id | +| name | string | ❌ | 学生姓名 | + +**JSON示例**: + +```json +{ + "id": 0, + "name": "string" +} +``` + +--- + +### Subjectinfo + +学科/科目表 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | - | +| name | string | ❌ | 备 注:学科名称 +默认值: | +| thisid | integer (int64) | ❌ | 备 注:自己数据库Id +默认值: | +| createtime | string (date-time) | ❌ | 备 注:创建时间 +默认值: | +| updatetime | string (date-time)? | ❌ | 备 注:更新时间 +默认值: | +| deletestate | boolean | ❌ | 备 注:是否删除 true=删除 +默认值: | +| ordinal | integer (int32) | ❌ | 备 注:排序 +默认值: | + +**JSON示例**: + +```json +{ + "id": 0, + "name": "string", + "thisid": 0, + "createtime": "string", + "updatetime": "string", + "deletestate": true, + "ordinal": 0 +} +``` + +--- + +### SumQuestionInfoByTypeResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| questionInfoByTypeResult | array | ❌ | - | +| sumQuestionCount | integer (int32) | ❌ | 总条数 | + +**JSON示例**: + +```json +{ + "questionInfoByTypeResult": [], + "sumQuestionCount": 0 +} +``` + +--- + +### SummarizDayResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| taskList | array | ❌ | 任务列表 | +| summarizDay | reference | ❌ | - | + +**JSON示例**: + +```json +{ + "taskList": [], + "summarizDay": {} +} +``` + +--- + +### SummarizDayTaskResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | - | +| userEnum | integer (int32) | ❌ | 用户角色枚举 | +| userId | integer (int64) | ❌ | 用户Id | +| userName | string | ❌ | 用户姓名 | +| workDate | string (date-time) | ❌ | 工作总结日期 | +| questContent | string | ❌ | 问题反馈 | +| addTime | string (date-time) | ❌ | 创建时间 | +| superiorEvaluation | string | ❌ | 组长评价 | +| superiorUserId | integer (int64)? | ❌ | 组长用户Id | +| superiorUserName | string | ❌ | 组长用户名 | +| ministerEvaluation | string | ❌ | 部长评价 | +| ministerUserId | integer (int64)? | ❌ | 部长用户Id | +| ministerUserName | string | ❌ | 部长用户名 | +| generalEvaluation | string | ❌ | 总部长评价 | +| generalUserId | integer (int64)? | ❌ | 总部长用户Id | +| generalUserName | string | ❌ | 总部长用户名 | +| nextTimeContent | string | ❌ | 备 注:下次工作内容 +默认值: | + +**JSON示例**: + +```json +{ + "id": 0, + "userEnum": 0, + "userId": 0, + "userName": "string", + "workDate": "string", + "questContent": "string", + "addTime": "string", + "superiorEvaluation": "string", + "superiorUserId": 0, + "superiorUserName": "string", + "ministerEvaluation": "string", + "ministerUserId": 0, + "ministerUserName": "string", + "generalEvaluation": "string", + "generalUserId": 0, + "generalUserName": "string", + "nextTimeContent": "string" +} +``` + +--- + +### SummarizMonthCheckList + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| taskTypeEnum | integer (int64) | ❌ | 任务类型枚举 | +| taskTypeName | string | ❌ | 任务类型枚举-名称 | +| okTaskCount | integer (int32) | ❌ | 已完成任务数量 | +| shouldTaskCount | integer (int64) | ❌ | 应完成任务数量(为0时,代表是指标之外的) | + +**JSON示例**: + +```json +{ + "taskTypeEnum": 0, + "taskTypeName": "string", + "okTaskCount": 0, + "shouldTaskCount": 0 +} +``` + +--- + +### SummarizWeekTaskResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | - | +| userEnum | integer (int32) | ❌ | 用户角色枚举 | +| userId | integer (int64) | ❌ | 用户Id | +| userName | string | ❌ | 用户姓名 | +| userHeadImage | string | ❌ | 用户头像地址 | +| workYear | integer (int32) | ❌ | 总结年份 | +| workMonth | integer (int32) | ❌ | 总结月份 | +| workWeek | integer (int32) | ❌ | 总结周 | +| beginDate | string (date-time)? | ❌ | 开始日期 | +| endDate | string (date-time)? | ❌ | 结束日期 | +| questContent | string | ❌ | 问题反馈 | +| addTime | string (date-time) | ❌ | 创建时间 | +| superiorEvaluation | string? | ❌ | 组长评价 | +| superiorUserId | integer (int64)? | ❌ | 组长用户Id | +| superiorAddtime | string (date-time)? | ❌ | 备 注:组长评价时间 +默认值: | +| superiorUserName | string? | ❌ | 组长用户名 | +| ministerEvaluation | string? | ❌ | 部长评价 | +| ministerUserId | integer (int64)? | ❌ | 部长用户Id | +| ministerAddtime | string (date-time)? | ❌ | 备 注:部长评价时间 +默认值: | +| ministerUserName | string? | ❌ | 部长用户名 | +| generalEvaluation | string | ❌ | 总部长评价 | +| generalUserId | integer (int64)? | ❌ | 总部长用户Id | +| generalUserName | string | ❌ | 总部长用户名 | +| nextTimeContent | string | ❌ | 备 注:下次工作内容 +默认值: | +| readId | integer (int64)? | ❌ | 已读id(如果null则未读) | + +**JSON示例**: + +```json +{ + "id": 0, + "userEnum": 0, + "userId": 0, + "userName": "string", + "userHeadImage": "string", + "workYear": 0, + "workMonth": 0, + "workWeek": 0, + "beginDate": "string", + "endDate": "string", + "questContent": "string", + "addTime": "string", + "superiorEvaluation": "string", + "superiorUserId": 0, + "superiorAddtime": "string", + "superiorUserName": "string", + "ministerEvaluation": "string", + "ministerUserId": 0, + "ministerAddtime": "string", + "ministerUserName": "string", + "generalEvaluation": "string", + "generalUserId": 0, + "generalUserName": "string", + "nextTimeContent": "string", + "readId": 0 +} +``` + +--- + +### SummarizWeekTaskResultPageResponse + +分页响应实体类 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| total | integer (int32) | ❌ | 总记录条数 | +| items | array | ❌ | 响应数据 | + +**JSON示例**: + +```json +{ + "total": 0, + "items": [] +} +``` + +--- + +### SummarizeDayListResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | 日报Id | +| workDate | string (date-time) | ❌ | 备 注:工作总结日期 +默认值: | +| questContent | string | ❌ | 备 注:问题反馈 +默认值: | +| userId | integer (int64) | ❌ | 用户id | +| userName | string | ❌ | 用户姓名 | +| userHeadImage | string | ❌ | 用户头像地址 | +| userEnum | integer (int32) | ❌ | 备 注:用户角色枚举(如果是组长,只有部长评价,如果是学习官,有部长和组长评价) +默认值: | +| addTime | string (date-time) | ❌ | 备 注:添加时间 +默认值: | +| superiorEvaluation | string? | ❌ | 备 注:组长评价 +默认值: | +| superiorUserId | integer (int64)? | ❌ | 备 注:组长评价人id +默认值: | +| superiorUserName | string? | ❌ | 备 注:组长评价人 +默认值: | +| ministerEvaluation | string? | ❌ | 备 注:部长评价 +默认值: | +| ministerUserId | integer (int64)? | ❌ | 备 注:部长评价人id +默认值: | +| ministerUserName | string? | ❌ | 备 注:部长评价人 +默认值: | +| generalEvaluation | string | ❌ | 总部长评价 | +| generalUserId | integer (int64)? | ❌ | 总部长用户Id | +| generalUserName | string | ❌ | 总部长用户名 | +| nextTimeContent | string | ❌ | 备 注:下次工作内容 +默认值: | +| readId | integer (int64)? | ❌ | 已读id(如果null则未读) | + +**JSON示例**: + +```json +{ + "id": 0, + "workDate": "string", + "questContent": "string", + "userId": 0, + "userName": "string", + "userHeadImage": "string", + "userEnum": 0, + "addTime": "string", + "superiorEvaluation": "string", + "superiorUserId": 0, + "superiorUserName": "string", + "ministerEvaluation": "string", + "ministerUserId": 0, + "ministerUserName": "string", + "generalEvaluation": "string", + "generalUserId": 0, + "generalUserName": "string", + "nextTimeContent": "string", + "readId": 0 +} +``` + +--- + +### SummarizeDayListResultPageResponse + +分页响应实体类 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| total | integer (int32) | ❌ | 总记录条数 | +| items | array | ❌ | 响应数据 | + +**JSON示例**: + +```json +{ + "total": 0, + "items": [] +} +``` + +--- + +### SummarizeDayRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| workDate | string (date-time) | ❌ | 备 注:工作总结日期 +默认值: | +| questContent | string | ❌ | 备 注:问题反馈 +默认值: | +| nextTimeContent | string | ❌ | 备 注:下次工作内容 +默认值: | +| fileId | string? | ❌ | 备 注:明日计划-文件id集合,多个英文逗号隔开 | + +**JSON示例**: + +```json +{ + "workDate": "string", + "questContent": "string", + "nextTimeContent": "string", + "fileId": "string" +} +``` + +--- + +### SummarizeMonthListResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| taskInfo | reference | ❌ | - | +| summarizMonthTaskResult | reference | ❌ | - | + +**JSON示例**: + +```json +{ + "taskInfo": {}, + "summarizMonthTaskResult": {} +} +``` + +--- + +### SummarizeMonthRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| workYear | integer (int32)? | ❌ | 备 注:工作年份 +默认值: | +| workMonth | integer (int32) | ❌ | 备 注:工作月份 +默认值: | +| questContent | string | ❌ | 备 注:问题反馈 +默认值: | +| monthContent | string | ❌ | 备 注:本月总结 +默认值: | +| nextTimeContent | string | ❌ | 备 注:下次工作内容 +默认值: | +| fileId | string? | ❌ | 备 注:明日计划-文件id集合,多个英文逗号隔开 | + +**JSON示例**: + +```json +{ + "workYear": 0, + "workMonth": 0, + "questContent": "string", + "monthContent": "string", + "nextTimeContent": "string", + "fileId": "string" +} +``` + +--- + +### SummarizeMonthStandardResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| generalTasks | array | ❌ | 通用任务列表 | +| taskFinishLists | array | ❌ | 其他工作完成情况 | +| taskSuperiorTaskLists | array | ❌ | 布置任务完成情况 | + +**JSON示例**: + +```json +{ + "generalTasks": [], + "taskFinishLists": [], + "taskSuperiorTaskLists": [] +} +``` + +--- + +### SummarizeMonthTaskResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | - | +| userId | integer (int64) | ❌ | 备 注:用户id +默认值: | +| userName | string | ❌ | 用户姓名 | +| userHeadImage | string | ❌ | 用户头像地址 | +| userEnum | integer (int32) | ❌ | 备 注:用户角色枚举(如果是组长,只有部长评价,如果是学习官,有部长和组长评价) +默认值: | +| workYear | integer (int32)? | ❌ | 备 注:工作年份 +默认值: | +| workMonth | integer (int32) | ❌ | 备 注:工作月份 +默认值: | +| questContent | string | ❌ | 备 注:问题反馈 +默认值: | +| monthContent | string | ❌ | 备 注:本月总结 +默认值: | +| addTime | string (date-time) | ❌ | 备 注:添加时间 +默认值: | +| superiorEvaluation | string? | ❌ | 备 注:组长评价 +默认值: | +| superiorUserId | integer (int64)? | ❌ | 备 注:组长评价人id +默认值: | +| superiorAddtime | string (date-time)? | ❌ | 备 注:组长评价时间 +默认值: | +| superiorUserName | string? | ❌ | 组长用户名 | +| ministerEvaluation | string? | ❌ | 备 注:部长评价 +默认值: | +| ministerUserId | integer (int64)? | ❌ | 备 注:部长评价人id +默认值: | +| ministerAddtime | string (date-time)? | ❌ | 备 注:部长评价时间 +默认值: | +| ministerUserName | string? | ❌ | 部长用户名 | +| generalEvaluation | string | ❌ | 总部长评价 | +| generalUserId | integer (int64)? | ❌ | 总部长用户Id | +| generalUserName | string | ❌ | 总部长用户名 | +| nextTimeContent | string | ❌ | 备 注:下次工作内容 +默认值: | +| readId | integer (int64)? | ❌ | 已读id(如果null则未读) | + +**JSON示例**: + +```json +{ + "id": 0, + "userId": 0, + "userName": "string", + "userHeadImage": "string", + "userEnum": 0, + "workYear": 0, + "workMonth": 0, + "questContent": "string", + "monthContent": "string", + "addTime": "string", + "superiorEvaluation": "string", + "superiorUserId": 0, + "superiorAddtime": "string", + "superiorUserName": "string", + "ministerEvaluation": "string", + "ministerUserId": 0, + "ministerAddtime": "string", + "ministerUserName": "string", + "generalEvaluation": "string", + "generalUserId": 0, + "generalUserName": "string", + "nextTimeContent": "string", + "readId": 0 +} +``` + +--- + +### SummarizeMonthTaskResultPageResponse + +分页响应实体类 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| total | integer (int32) | ❌ | 总记录条数 | +| items | array | ❌ | 响应数据 | + +**JSON示例**: + +```json +{ + "total": 0, + "items": [] +} +``` + +--- + +### SummarizeNoReadResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| noReadCount | integer (int32) | ❌ | 未读消息数量 | + +**JSON示例**: + +```json +{ + "noReadCount": 0 +} +``` + +--- + +### SummarizeTaskResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | - | +| status | integer (int32) | ❌ | 备 注:任务状态 0:未开始 1:进行中 2:已结束 3:问题待处理(仅用于双师跟课) 4:已逾期 +默认值: | +| classesId | integer (int64)? | ❌ | 备 注:班级id(班级任务) +默认值: | +| classesName | string | ❌ | 备 注:班级名称 | +| gradeLevel | string? | ❌ | 备 注:年级 +默认值: | +| graduationYear | integer (int32)? | ❌ | 备 注:所属届 +默认值: | +| taskTypeEnum | integer (int32) | ❌ | 备 注:参数表 枚举值,任务类型 +默认值: | +| taskTypeName | string | ❌ | 备 注:任务类型名称 | +| taskTitleSuffix | string | ❌ | 备 注:任务标题后缀,用于展示 +默认值: | +| startDate | string (date-time)? | ❌ | 备 注:开始日期 +默认值: | +| startTime | string (date-time) | ❌ | 备 注:开始时间 +默认值: | +| endDate | string (date-time)? | ❌ | 备 注:结束日期 +默认值: | +| endTime | string (date-time) | ❌ | 备 注:结束时间 +默认值: | +| taskIndexType | integer (int32) | ❌ | 备 注:任务指标类型-1班级;2通用; 班级时,classes_id不为空;通用时,执行人id不为空 +默认值: | +| finishDate | string (date-time)? | ❌ | 备 注:任务完成日期 +默认值: | +| finishDatetime | string (date-time)? | ❌ | 备 注:任务完成时间 +默认值: | +| taskWorkTime | string (date-time)? | ❌ | 备 注:任务首次操作时间 +默认值: | +| taskWorkDate | string (date-time)? | ❌ | 备 注:任务首次操作日期 +默认值: | + +**JSON示例**: + +```json +{ + "id": 0, + "status": 0, + "classesId": 0, + "classesName": "string", + "gradeLevel": "string", + "graduationYear": 0, + "taskTypeEnum": 0, + "taskTypeName": "string", + "taskTitleSuffix": "string", + "startDate": "string", + "startTime": "string", + "endDate": "string", + "endTime": "string", + "taskIndexType": 0, + "finishDate": "string", + "finishDatetime": "string", + "taskWorkTime": "string", + "taskWorkDate": "string" +} +``` + +--- + +### SummarizeWeekListResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| taskList | array | ❌ | 任务列表 | +| summarizWeekTaskResult | reference | ❌ | - | + +**JSON示例**: + +```json +{ + "taskList": [], + "summarizWeekTaskResult": {} +} +``` + +--- + +### SummarizeWeekRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| workYear | integer (int32) | ❌ | 备 注:工作年份 +默认值: | +| workMonth | integer (int32) | ❌ | 备 注:工作月份 +默认值: | +| workWeek | integer (int32) | ❌ | 备 注:工作周报 +默认值: | +| beginDate | string (date-time) | ❌ | 备 注:工作总结日期-开始 +默认值: | +| endDate | string (date-time) | ❌ | 备 注:工作总结日期-结束 +默认值: | +| questContent | string | ❌ | 备 注:问题反馈 +默认值: | +| nextTimeContent | string | ❌ | 备 注:下次工作内容 +默认值: | +| fileId | string? | ❌ | 备 注:明日计划-文件id集合,多个英文逗号隔开 | + +**JSON示例**: + +```json +{ + "workYear": 0, + "workMonth": 0, + "workWeek": 0, + "beginDate": "string", + "endDate": "string", + "questContent": "string", + "nextTimeContent": "string", + "fileId": "string" +} +``` + +--- + +### SunTaskFileResult + +任务关联文件 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | 文件关联表的id | +| sunTaskId | integer (int64) | ❌ | 子任务关联表id | +| fileId | integer (int64) | ❌ | 文件id | +| filePath | string | ❌ | 备 注:文件路径 | +| fileSize | integer (int64)? | ❌ | 备 注:文件大小(文件大小-kb,不足1kb为1kb) +默认值: | + +**JSON示例**: + +```json +{ + "id": 0, + "sunTaskId": 0, + "fileId": 0, + "filePath": "string", + "fileSize": 0 +} +``` + +--- + +### SunTaskUserResult + +任务关联用户 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | 用户关联表的id | +| sunTaskId | integer (int64) | ❌ | 子任务关联表id | +| userId | integer (int64) | ❌ | - | +| userName | string | ❌ | 备 注:文件路径 | + +**JSON示例**: + +```json +{ + "id": 0, + "sunTaskId": 0, + "userId": 0, + "userName": "string" +} +``` + +--- + +### SuperiorTaskDetailResult + +任务详情返回结果 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | - | +| taskEnum | integer (int32) | ❌ | 备 注:任务类型枚举 +默认值: | +| taskStatus | integer (int32) | ❌ | 备 注:任务状态。-1:未响应;1:已创建;2进行中;3:已完成;4:已逾期; +默认值: | +| taskAddtime | string (date-time) | ❌ | 备 注:布置时间 +默认值: | +| taskAdduser | integer (int64) | ❌ | 备 注:布置人id +默认值: | +| taskWorkType | integer (int32) | ❌ | 备 注:1:单人任务;2多人任务 +默认值: | +| taskEndTime | string (date-time) | ❌ | 备 注:完成时间 +默认值: | +| remark | string? | ❌ | 备 注:备注 +默认值: | +| taskUserNames | string | ❌ | 备 注:布置对象 +默认值: | +| taskUserNum | integer (int32) | ❌ | 备 注:接受任务人数 +默认值: | +| updateTime | string (date-time)? | ❌ | 备 注:最后一次更新时间 +默认值: | +| finishUserNum | integer (int32) | ❌ | 备 注:完成任务人数(多人才有,单人默认为0) | +| superiorTaskInfoProcessResult | array? | ❌ | 任务完成流程记录(单人才有,多人为null) | + +**JSON示例**: + +```json +{ + "id": 0, + "taskEnum": 0, + "taskStatus": 0, + "taskAddtime": "string", + "taskAdduser": 0, + "taskWorkType": 0, + "taskEndTime": "string", + "remark": "string", + "taskUserNames": "string", + "taskUserNum": 0, + "updateTime": "string", + "finishUserNum": 0, + "superiorTaskInfoProcessResult": [] +} +``` + +--- + +### SuperiorTaskInfoProcessResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | - | +| superiorId | integer (int64)? | ❌ | 备 注:布置任务id +默认值: | +| taskId | integer (int64)? | ❌ | 备 注:任务id +默认值: | +| taskStatus | integer (int64)? | ❌ | 备 注:任务状态。-1:未响应;1:已创建;2进行中;3:已完成;4:已逾期; +默认值: | +| taskTime | string (date-time)? | ❌ | 备 注:时间 +默认值: | +| taskUserId | integer (int64)? | ❌ | 备 注:任务接收人id +默认值: | + +**JSON示例**: + +```json +{ + "id": 0, + "superiorId": 0, + "taskId": 0, + "taskStatus": 0, + "taskTime": "string", + "taskUserId": 0 +} +``` + +--- + +### SuperiorTaskInfoUserDetailResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | - | +| superiorId | integer (int64)? | ❌ | 备 注:布置任务id +默认值: | +| taskUserId | integer (int64) | ❌ | 任务接收人id | +| userName | string | ❌ | 用户名称 | +| userTaskStatus | integer (int32) | ❌ | 备 注:任务状态。-1:未响应;1:已创建;2进行中;3:已完成;4:已逾期; | +| taskId | integer (int64)? | ❌ | 备 注:创建任务id | + +**JSON示例**: + +```json +{ + "id": 0, + "superiorId": 0, + "taskUserId": 0, + "userName": "string", + "userTaskStatus": 0, + "taskId": 0 +} +``` + +--- + +### SuperiorTaskInfoUserDetailResultPageResponse + +分页响应实体类 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| total | integer (int32) | ❌ | 总记录条数 | +| items | array | ❌ | 响应数据 | + +**JSON示例**: + +```json +{ + "total": 0, + "items": [] +} +``` + +--- + +### SuperiorTaskListResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | - | +| taskEnum | integer (int32) | ❌ | 备 注:任务类型枚举 +默认值: | +| taskStatus | integer (int32) | ❌ | 备 注:任务状态。-1:未响应;1:已创建;2进行中;3:已完成;4:已逾期; +默认值: | +| taskAddtime | string (date-time) | ❌ | 备 注:布置时间 +默认值: | +| taskAdduser | integer (int64) | ❌ | 备 注:布置人id +默认值: | +| taskAdduserName | string | ❌ | 备 注:布置人姓名 +默认值: | +| taskWorkType | integer (int32) | ❌ | 备 注:1:单人任务;2多人任务 +默认值: | +| taskUserNum | integer (int32) | ❌ | 备 注:接受任务人数 +默认值: | +| taskUserNames | string | ❌ | 备 注:用户姓名 +默认值: | +| taskEndTime | string (date-time) | ❌ | 备 注:完成时间 +默认值: | +| finishCount | integer (int32)? | ❌ | 完成人数 | +| remark | string? | ❌ | 备 注:备注 +默认值: | +| updateTime | string (date-time)? | ❌ | 备 注:最后一次更新时间 +默认值: | +| userHeadImage | string? | ❌ | 备 注:布置对象头像列表 | + +**JSON示例**: + +```json +{ + "id": 0, + "taskEnum": 0, + "taskStatus": 0, + "taskAddtime": "string", + "taskAdduser": 0, + "taskAdduserName": "string", + "taskWorkType": 0, + "taskUserNum": 0, + "taskUserNames": "string", + "taskEndTime": "string", + "finishCount": 0, + "remark": "string", + "updateTime": "string", + "userHeadImage": "string" +} +``` + +--- + +### SuperiorTaskListResultPageResponse + +分页响应实体类 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| total | integer (int32) | ❌ | 总记录条数 | +| items | array | ❌ | 响应数据 | + +**JSON示例**: + +```json +{ + "total": 0, + "items": [] +} +``` + +--- + +### SuperiorTaskRequest + +布置任务请求参数 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| users | array | ❌ | 布置对象 | +| taskEnum | integer (int32) | ❌ | 任务类型枚举 | +| taskEndTime | string (date-time) | ❌ | 完成时间 | +| remark | string? | ❌ | 备注 | + +**JSON示例**: + +```json +{ + "users": [], + "taskEnum": 0, + "taskEndTime": "string", + "remark": "string" +} +``` + +--- + +### SysFileViewDto + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | - | +| fileName | string? | ❌ | 备 注:原文件名 +默认值: | +| filePath | string? | ❌ | 备 注:文件所在路径 +默认值: | +| fileType | string? | ❌ | 备 注:文件类型 +默认值: | +| addtime | string (date-time)? | ❌ | 备 注:上传时间 +默认值: | + +**JSON示例**: + +```json +{ + "id": 0, + "fileName": "string", + "filePath": "string", + "fileType": "string", + "addtime": "string" +} +``` + +--- + +### SysFileinfo + +文件记录表 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | - | +| fileName | string? | ❌ | 备 注:原文件名 +默认值: | +| filePath | string? | ❌ | 备 注:文件所在路径 +默认值: | +| fileType | string? | ❌ | 备 注:文件类型 +默认值: | +| adduser | integer (int64)? | ❌ | 备 注:上传用户id +默认值: | +| addtime | string (date-time)? | ❌ | 备 注:上传时间 +默认值: | +| fileSize | integer (int64)? | ❌ | 备 注:文件大小(文件大小-kb,不足1kb为1kb) +默认值: | + +**JSON示例**: + +```json +{ + "id": 0, + "fileName": "string", + "filePath": "string", + "fileType": "string", + "adduser": 0, + "addtime": "string", + "fileSize": 0 +} +``` + +--- + +### SysParameter + +字典表 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | - | +| pid | integer (int64) | ❌ | 备 注:父级id,默认0,0时无父级 +默认值: | +| pName | string | ❌ | 备 注:参数名称 +默认值: | +| pValue | integer (int64) | ❌ | 备 注:枚举值,不可重复,自定义 或 直接生成,后续业务关联也是关联此字段 +默认值: | +| sort | integer (int32) | ❌ | 备 注:排序,默认0 +默认值: | +| isQuestion | boolean | ❌ | 备 注:是否纳入问题记录。0否,1是 +默认值: | +| questionType | reference | ❌ | - | +| selectionMode | integer (int32)? | ❌ | 备 注: 1=单选,2=多选 +默认值: | +| isRequiredSelection | boolean | ❌ | 备 注:是否必填项 +默认值: | +| child | array | ❌ | - | +| parent | reference | ❌ | - | +| childrenIsOption | boolean | ❌ | 下级是否为选项 | + +**JSON示例**: + +```json +{ + "id": 0, + "pid": 0, + "pName": "string", + "pValue": 0, + "sort": 0, + "isQuestion": true, + "questionType": {}, + "selectionMode": 0, + "isRequiredSelection": true, + "child": [], + "parent": {}, + "childrenIsOption": true +} +``` + +--- + +### SysParameterOther + +除开任务的其他信息字典表 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | - | +| pid | integer (int32) | ❌ | 备 注:父级id。0为顶级 +默认值: | +| pName | string | ❌ | 备 注:参数名称 +默认值: | +| pValue | integer (int64) | ❌ | 备 注:枚举值 +默认值: | +| sort | integer (int32) | ❌ | 备 注:排序 +默认值: | + +**JSON示例**: + +```json +{ + "id": 0, + "pid": 0, + "pName": "string", + "pValue": 0, + "sort": 0 +} +``` + +--- + +### SysParameterPageResponse + +分页响应实体类 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| total | integer (int32) | ❌ | 总记录条数 | +| items | array | ❌ | 响应数据 | + +**JSON示例**: + +```json +{ + "total": 0, + "items": [] +} +``` + +--- + +### SysRoleEnum + +系统角色枚举 + +**枚举值**: + +- `1` +- `2` +- `1000` +- `1001` +- `1002` +- `1003` + +**JSON示例**: + +```json +"1" +``` + +--- + +### SysTaskTypeEnums + +任务类型枚举 + +**枚举值**: + +- `1` +- `2` +- `3` +- `4` +- `5` +- `6` +- `7` +- `8` +- `9` +- `10` +- `11` +- `12` +- `13` + +**JSON示例**: + +```json +"1" +``` + +--- + +### System_filesRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| fileName | string? | ❌ | 备 注:原文件名包括后缀例如【111.txt】 +默认值: | +| filePath | string? | ❌ | 备 注:文件Url路径 +默认值: | +| fileType | string? | ❌ | 备 注:文件类型(文件后缀名,不带.) +默认值: | +| fileSize | integer (int64)? | ❌ | 备 注:文件大小(文件大小-kb,不足1kb为1kb) +默认值: | + +**JSON示例**: + +```json +{ + "fileName": "string", + "filePath": "string", + "fileType": "string", + "fileSize": 0 +} +``` + +--- + +### TalkInfoRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64)? | ❌ | 任务id(新增时为null,修改时必传) | +| classesId | integer (int64)? | ❌ | 班级id(班级任务时,classes_id不为空;通用任务时,班级id为空 null) | +| taskTypeEnum | integer (int32) | ❌ | 任务类型id | +| startTime | string (date-time) | ❌ | 备 注:开始时间 +默认值: | +| endTime | string (date-time) | ❌ | 备 注:结束时间 +默认值: | +| taskTitleSuffix | string? | ❌ | 任务后缀 | +| isSuperiorTask | integer (int32) | ❌ | 备 注:是否是布置任务。0否(默认);1是; +默认值: | +| superiorId | integer (int64)? | ❌ | 备 注:布置任务id,如果是布置任务才需要传 +默认值: | +| talkId | integer (int64)? | ❌ | 谈话记录表id(新增时为null,修改时必传) | +| quiltUserid | integer (int64) | ❌ | 被谈话人id | + +**JSON示例**: + +```json +{ + "id": 0, + "classesId": 0, + "taskTypeEnum": 0, + "startTime": "string", + "endTime": "string", + "taskTitleSuffix": "string", + "isSuperiorTask": 0, + "superiorId": 0, + "talkId": 0, + "quiltUserid": 0 +} +``` + +--- + +### TaskFinishList + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| taskTypeEnum | integer (int64) | ❌ | 任务类型枚举 | +| taskTypeName | string | ❌ | 任务类型枚举-名称 | +| taskCount | integer (int32) | ❌ | 任务数量 | + +**JSON示例**: + +```json +{ + "taskTypeEnum": 0, + "taskTypeName": "string", + "taskCount": 0 +} +``` + +--- + +### TaskLoginfoResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| taskId | integer (int64) | ❌ | 任务id | +| sunTaskId | integer (int64) | ❌ | 备 注:子任务id +默认值: | +| addDate | string (date-time) | ❌ | 备 注:操作日期 +默认值: | +| logType | integer (int32) | ❌ | 备 注:操作类型。1新增,2推进,3完成任务 +默认值: | +| logCount | integer (int32) | ❌ | 当天操作记录数量 | + +**JSON示例**: + +```json +{ + "taskId": 0, + "sunTaskId": 0, + "addDate": "string", + "logType": 0, + "logCount": 0 +} +``` + +--- + +### TaskTalkFinishRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | 任务id | +| talkId | integer (int64) | ❌ | 谈话表id | +| remark | string | ❌ | 谈话纪要 | +| files | array? | ❌ | - | + +**JSON示例**: + +```json +{ + "id": 0, + "talkId": 0, + "remark": "string", + "files": [] +} +``` + +--- + +### TaskTalkResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| talkId | integer (int64) | ❌ | 谈话表id | +| remark | string | ❌ | 谈话纪要 | +| userId | integer (int64) | ❌ | 用户id | +| userName | string | ❌ | 用户名称 | +| taskInfo | reference | ❌ | - | +| sunTaskFileResults | array | ❌ | 关联文件 | + +**JSON示例**: + +```json +{ + "talkId": 0, + "remark": "string", + "userId": 0, + "userName": "string", + "taskInfo": {}, + "sunTaskFileResults": [] +} +``` + +--- + +### Task_checklistCloudSchoolResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | - | +| taskTypeEnum | integer (int64) | ❌ | 任务类型id | +| taskTypeEnumName | string | ❌ | 备 注:任务类型名称 | +| cloudSchoolId | integer (int64)? | ❌ | 备 注:云校id +默认值: | +| targetNumber | integer (int32) | ❌ | 备 注:任务指标数 +默认值: | +| taskType | integer (int32) | ❌ | 备 注:班级/通用任务类型 1班级;2通用 +默认值: | + +**JSON示例**: + +```json +{ + "id": 0, + "taskTypeEnum": 0, + "taskTypeEnumName": "string", + "cloudSchoolId": 0, + "targetNumber": 0, + "taskType": 0 +} +``` + +--- + +### Task_checklistRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64)? | ❌ | 新增为null,编辑时传Id | +| taskTypeEnum | integer (int64) | ❌ | 备 注:任务类型id +默认值: | +| targetNumber | integer (int32) | ❌ | 备 注:任务指标数 +默认值: | +| taskType | integer (int32) | ❌ | 备 注:班级/通用任务类型 1班级;2通用 +默认值: | + +**JSON示例**: + +```json +{ + "id": 0, + "taskTypeEnum": 0, + "targetNumber": 0, + "taskType": 0 +} +``` + +--- + +### Task_checklistResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | - | +| taskTypeEnum | integer (int64) | ❌ | 任务类型id | +| taskTypeEnumName | string | ❌ | 备 注:任务类型名称 | +| taskUserId | integer (int64)? | ❌ | 备 注:用户id +默认值: | +| targetNumber | integer (int32) | ❌ | 备 注:任务指标数 +默认值: | +| taskType | integer (int32) | ❌ | 备 注:班级/通用任务类型 1班级;2通用 +默认值: | + +**JSON示例**: + +```json +{ + "id": 0, + "taskTypeEnum": 0, + "taskTypeEnumName": "string", + "taskUserId": 0, + "targetNumber": 0, + "taskType": 0 +} +``` + +--- + +### TeacherBehaviorFinishRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | 任务id | +| tBId | integer (int64) | ❌ | 观察表id | +| remark | string | ❌ | 分析/总结 | + +**JSON示例**: + +```json +{ + "id": 0, + "tBId": 0, + "remark": "string" +} +``` + +--- + +### TeacherBehaviorQuestionNumResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| questionId | integer (int64) | ❌ | 问题id | +| num | integer (int32) | ❌ | 问题个数 | +| addTime | string (date-time) | ❌ | 记录时间 | + +**JSON示例**: + +```json +{ + "questionId": 0, + "num": 0, + "addTime": "string" +} +``` + +--- + +### TeacherBehaviorQuestionResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| previewString | string | ❌ | 预习安排 | +| previewTypeString | string | ❌ | 预习方式 | +| checkTypeString | string | ❌ | 检查方式 | +| previewResultString | string | ❌ | 预习效果 | +| cooperationString | string | ❌ | 课堂配合 | +| patrolRate | string | ❌ | 巡查频率 | +| afterString | string | ❌ | 课后观察 | + +**JSON示例**: + +```json +{ + "previewString": "string", + "previewTypeString": "string", + "checkTypeString": "string", + "previewResultString": "string", + "cooperationString": "string", + "patrolRate": "string", + "afterString": "string" +} +``` + +--- + +### TeacherBehaviorRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64)? | ❌ | 任务id(新增时为null,修改时必传) | +| classesId | integer (int64)? | ❌ | 班级id(班级任务时,classes_id不为空;通用任务时,班级id为空 null) | +| taskTypeEnum | integer (int32) | ❌ | 任务类型id | +| startTime | string (date-time) | ❌ | 备 注:开始时间 +默认值: | +| endTime | string (date-time) | ❌ | 备 注:结束时间 +默认值: | +| taskTitleSuffix | string? | ❌ | 任务后缀 | +| isSuperiorTask | integer (int32) | ❌ | 备 注:是否是布置任务。0否(默认);1是; +默认值: | +| superiorId | integer (int64)? | ❌ | 备 注:布置任务id,如果是布置任务才需要传 +默认值: | +| tBId | integer (int64)? | ❌ | 教师行为规范id(新增时为null,修改时必传) | +| behaviorUserName | string | ❌ | 观察对象姓名 | +| behaviorUserId | integer (int64) | ❌ | 观察对象Id | + +**JSON示例**: + +```json +{ + "id": 0, + "classesId": 0, + "taskTypeEnum": 0, + "startTime": "string", + "endTime": "string", + "taskTitleSuffix": "string", + "isSuperiorTask": 0, + "superiorId": 0, + "tBId": 0, + "behaviorUserName": "string", + "behaviorUserId": 0 +} +``` + +--- + +### TeacherBehaviorResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| taskInfo | reference | ❌ | - | +| tBId | integer (int64) | ❌ | 观察表id | +| behaviorUserName | string | ❌ | 观察对象名称 | +| remark | string? | ❌ | 反馈反思 | +| teacherBehaviorQuestionNumResults | array | ❌ | 观察记录列表 | + +**JSON示例**: + +```json +{ + "taskInfo": {}, + "tBId": 0, + "behaviorUserName": "string", + "remark": "string", + "teacherBehaviorQuestionNumResults": [] +} +``` + +--- + +### TeacherTalkInfoFinishRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | 任务id | +| teacherTalkId | integer (int64) | ❌ | 谈话ID | +| remark | string | ❌ | 谈话纪要 | +| files | array? | ❌ | - | + +**JSON示例**: + +```json +{ + "id": 0, + "teacherTalkId": 0, + "remark": "string", + "files": [] +} +``` + +--- + +### TeacherTalkInfoRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64)? | ❌ | 任务id(新增时为null,修改时必传) | +| classesId | integer (int64)? | ❌ | 班级id(班级任务时,classes_id不为空;通用任务时,班级id为空 null) | +| taskTypeEnum | integer (int32) | ❌ | 任务类型id | +| startTime | string (date-time) | ❌ | 备 注:开始时间 +默认值: | +| endTime | string (date-time) | ❌ | 备 注:结束时间 +默认值: | +| taskTitleSuffix | string? | ❌ | 任务后缀 | +| isSuperiorTask | integer (int32) | ❌ | 备 注:是否是布置任务。0否(默认);1是; +默认值: | +| superiorId | integer (int64)? | ❌ | 备 注:布置任务id,如果是布置任务才需要传 +默认值: | +| teacherTalkId | integer (int64)? | ❌ | id(新增时为null,修改时必传) | +| quiltUserName | string | ❌ | 被谈话老师用户姓名 | +| quiltUserId | integer (int64) | ❌ | 备 注:被谈话老师用户id +默认值: | + +**JSON示例**: + +```json +{ + "id": 0, + "classesId": 0, + "taskTypeEnum": 0, + "startTime": "string", + "endTime": "string", + "taskTitleSuffix": "string", + "isSuperiorTask": 0, + "superiorId": 0, + "teacherTalkId": 0, + "quiltUserName": "string", + "quiltUserId": 0 +} +``` + +--- + +### TeacherTalkInfoResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| talkId | integer (int64) | ❌ | 谈话记录ID | +| quiltUserId | integer (int64) | ❌ | 备 注:被谈话老师用户id +默认值: | +| quiltUserName | string | ❌ | 被谈话老师用户姓名 | +| remark | string | ❌ | 谈话纪要 | +| taskInfo | reference | ❌ | - | +| sunTaskFileResults | array | ❌ | 关联文件 | + +**JSON示例**: + +```json +{ + "talkId": 0, + "quiltUserId": 0, + "quiltUserName": "string", + "remark": "string", + "taskInfo": {}, + "sunTaskFileResults": [] +} +``` + +--- + +### Teacher_behavior_questionRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| tBId | integer (int64) | ❌ | 观察记录id | +| previewId | string? | ❌ | 预习安排问题,参数id,多个用英文逗号分割 | +| previewTypeId | string? | ❌ | 预习安排-预习方式问题,参数id,多个用英文逗号分割 | +| inspectTypeEnum | integer (int32)? | ❌ | 预习安排-检查方式: 1课前检查;2课间检查;3全面检查;4未检查 | +| previewResultEnum | integer (int32)? | ❌ | 预习安排-预习效果;参数id | +| cooperationId | string? | ❌ | 备 注:课堂配合,参数id,多个用英文逗号分割 +默认值: | +| cooperationInspectionEnum | integer (int32)? | ❌ | 备 注:课堂配合-巡视频率,1好;2中;3低 +默认值: | +| afterClassId | string? | ❌ | 备 注:课后观察,参数id,多个用英文逗号分割 +默认值: | + +**JSON示例**: + +```json +{ + "tBId": 0, + "previewId": "string", + "previewTypeId": "string", + "inspectTypeEnum": 0, + "previewResultEnum": 0, + "cooperationId": "string", + "cooperationInspectionEnum": 0, + "afterClassId": "string" +} +``` + +--- + +### TeachingLevelEnum + +班级教学层次枚举 + +**枚举值**: + +- `1` +- `2` + +**JSON示例**: + +```json +"1" +``` + +--- + +### ToolClassType + +**枚举值**: + +- `1` +- `2` +- `3` + +**JSON示例**: + +```json +"1" +``` + +--- + +### ToolKitSemesterViewDto + +工具包学期视图数据传输对象 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | - | +| toolKitId | integer (int64) | ❌ | 备 注:工具包Id +默认值: | +| solutionSemesterEnum | reference | ❌ | - | +| solutionSemesterName | string | ❌ | - | + +**JSON示例**: + +```json +{ + "id": 0, + "toolKitId": 0, + "solutionSemesterEnum": {}, + "solutionSemesterName": "string" +} +``` + +--- + +### ToolKitViewDto + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | - | +| toolName | string | ❌ | 备 注:工具名称 +默认值: | +| toolType | string | ❌ | 备 注:工具格式 文件后缀名 +默认值: | +| toolSize | integer (int32) | ❌ | 备 注:大小 kb +默认值: | +| problemObj | reference | ❌ | - | +| upTime | string (date-time) | ❌ | 备 注:最后更新时间 +默认值: | +| fileinfo | reference | ❌ | - | +| addTime | string (date-time) | ❌ | 备 注:添加时间 +默认值: | +| toolClassType | reference | ❌ | - | +| toolKitSemesters | array | ❌ | - | +| solutionLists | array | ❌ | 关联解决方案列表 | + +**JSON示例**: + +```json +{ + "id": 0, + "toolName": "string", + "toolType": "string", + "toolSize": 0, + "problemObj": {}, + "upTime": "string", + "fileinfo": {}, + "addTime": "string", + "toolClassType": {}, + "toolKitSemesters": [], + "solutionLists": [] +} +``` + +--- + +### ToolObjectType + +工具对象类型枚举 + +**枚举值**: + +- `1` +- `2` +- `3` + +**JSON示例**: + +```json +"1" +``` + +--- + +### UpdateappResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | 备 注: +默认值: | +| version | integer (int32) | ❌ | 备 注:版本 +默认值: | +| versionName | string | ❌ | 版本号 | +| remark | string? | ❌ | 版本说明 | +| imageBase | string? | ❌ | 二维码图片:base64 | +| updatetype | integer (int32)? | ❌ | 1:安卓APP,2: IOS | +| isActive | integer (int32)? | ❌ | 1启用 0停用 | +| fileid | integer (int64)? | ❌ | 备 注:文件id +默认值: | +| fileName | string? | ❌ | 原文件名 | +| filePath | string? | ❌ | 文件路径 | +| fileSize | integer (int64)? | ❌ | 备 注:文件大小(文件大小-kb,不足1kb为1kb) +默认值: | +| isforce | boolean | ❌ | 备 注:版本是否强制升级 +默认值: | + +**JSON示例**: + +```json +{ + "id": 0, + "version": 0, + "versionName": "string", + "remark": "string", + "imageBase": "string", + "updatetype": 0, + "isActive": 0, + "fileid": 0, + "fileName": "string", + "filePath": "string", + "fileSize": 0, + "isforce": true +} +``` + +--- + +### UserAdminInfoResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| userName | string | ❌ | 用户姓名 | +| userId | integer (int64) | ❌ | 用户id | +| roleEnum | reference | ❌ | - | +| classCount | integer (int32)? | ❌ | 管理班级个数 | + +**JSON示例**: + +```json +{ + "userName": "string", + "userId": 0, + "roleEnum": {}, + "classCount": 0 +} +``` + +--- + +### UserBooksResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | Id | +| userName | string | ❌ | 用户姓名 | +| headImage | string | ❌ | 头像 | +| roleEnum | reference | ❌ | - | +| phone | string | ❌ | 电话 | +| classNum | integer (int32) | ❌ | 管理班级数量 | +| cloudSchoolId | integer (int64)? | ❌ | 账号所属云校id | + +**JSON示例**: + +```json +{ + "id": 0, + "userName": "string", + "headImage": "string", + "roleEnum": {}, + "phone": "string", + "classNum": 0, + "cloudSchoolId": 0 +} +``` + +--- + +### UserDetailInfo + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| userId | integer (int64) | ❌ | 用户ID | +| userName | string | ❌ | 用户姓名 | +| roleEnum | reference | ❌ | - | +| cloudSchoolId | integer (int64) | ❌ | 云校id | +| cloudSchoolName | string | ❌ | 云校名称 | +| schoolResults | array | ❌ | 管理学校 | +| headImage | string | ❌ | 头像URL | + +**JSON示例**: + +```json +{ + "userId": 0, + "userName": "string", + "roleEnum": {}, + "cloudSchoolId": 0, + "cloudSchoolName": "string", + "schoolResults": [], + "headImage": "string" +} +``` + +--- + +### UserFoundationResult + +用户基本表 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| userName | string | ❌ | 用户姓名 | +| userId | integer (int64) | ❌ | 用户id | +| roleEnum | reference | ❌ | - | + +**JSON示例**: + +```json +{ + "userName": "string", + "userId": 0, + "roleEnum": {} +} +``` + +--- + +### UserResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| id | integer (int64) | ❌ | 备 注:用户中心id +默认值: | +| realName | string | ❌ | 备 注:姓名 +默认值: | +| account | string | ❌ | 备 注:账号 +默认值: | +| roleEnum | reference | ❌ | - | +| cloudId | integer (int64)? | ❌ | 云校id | +| roleName | string? | ❌ | 角色名称 | +| cloudName | string? | ❌ | 备 注:云校名称 +默认值: | +| phone | string? | ❌ | 备 注:手机号 +默认值: | +| headImage | string | ❌ | 头像URL | + +**JSON示例**: + +```json +{ + "id": 0, + "realName": "string", + "account": "string", + "roleEnum": {}, + "cloudId": 0, + "roleName": "string", + "cloudName": "string", + "phone": "string", + "headImage": "string" +} +``` + +--- + +### UserSchoolLikeBooksResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| schoolInfos | array | ❌ | 学校信息 | +| likeUserBooksResults | array | ❌ | 用户 | + +**JSON示例**: + +```json +{ + "schoolInfos": [], + "likeUserBooksResults": [] +} +``` + +--- + +### WeekModel + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| week | integer (int32) | ❌ | 周 | +| weekDay | string (date-time) | ❌ | - | +| weekDayDetails | array | ❌ | - | + +**JSON示例**: + +```json +{ + "week": 0, + "weekDay": "string", + "weekDayDetails": [] +} +``` + +--- + +### WorkCompletionResult + +工作完成情况 + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| userId | integer (int64) | ❌ | 用户id | +| workDate | string | ❌ | 所属月份 | +| completionRate | number (double) | ❌ | 完成率 | +| taskCompletionInfos | array | ❌ | 任务完成情况列表 | + +**JSON示例**: + +```json +{ + "userId": 0, + "workDate": "string", + "completionRate": 0.0, + "taskCompletionInfos": [] +} +``` + +--- + +### userLoginRequest + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| phone | string | ❌ | 电话 | + +**JSON示例**: + +```json +{ + "phone": "string" +} +``` + +--- + +### userLoginResult + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| token | string | ❌ | Token | +| userInfo | reference | ❌ | - | +| userSig | string | ❌ | UserSig | + +**JSON示例**: + +```json +{ + "token": "string", + "userInfo": {}, + "userSig": "string" +} +``` + +--- + +### weekDayDetail + +**属性**: + +| 属性名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| classCourseId | integer (int64) | ❌ | 课程id | +| classCourseWeekId | integer (int64) | ❌ | 周ID | +| classCourseTableId | integer (int64) | ❌ | 班级课表ID | +| coursesSectionDetailId | integer (int64) | ❌ | 课节详情ID | +| name | string | ❌ | 名称 | +| week | integer (int32) | ❌ | 周类型 | +| subject | integer (int32) | ❌ | 科目id | +| subjectName | string | ❌ | 科目名称 | +| teacherName | string | ❌ | 云校老师 | +| teacherId | integer (int64) | ❌ | 云校老师id | +| landingTeacherId | integer (int64) | ❌ | 落地老师 | +| landingTeacherName | string | ❌ | 落地老师 | +| planStartTime | string (date-time) | ❌ | 上课时间 | +| planEndTime | string (date-time) | ❌ | 下课时间 | + +**JSON示例**: + +```json +{ + "classCourseId": 0, + "classCourseWeekId": 0, + "classCourseTableId": 0, + "coursesSectionDetailId": 0, + "name": "string", + "week": 0, + "subject": 0, + "subjectName": "string", + "teacherName": "string", + "teacherId": 0, + "landingTeacherId": 0, + "landingTeacherName": "string", + "planStartTime": "string", + "planEndTime": "string" +} +``` + +--- + +## ❌ 错误代码 + +| 状态码 | 描述 | +|--------|------| +| 400 | 请求参数错误 | +| 401 | 未授权访问 | +| 403 | 禁止访问 | +| 404 | 资源不存在 | +| 405 | 方法不允许 | +| 422 | 参数验证失败 | +| 500 | 服务器内部错误 | +| 502 | 网关错误 | +| 503 | 服务不可用 | + +### 错误响应格式 + +```json +{ + "error": { + "code": "ERROR_CODE", + "message": "错误描述", + "details": "详细信息" + } +} +``` + +## 💡 示例代码 + +### Dart HTTP客户端 + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; + +class ApiClient { + static const String baseUrl = '/'; + String? _token; + + void setToken(String token) { + _token = token; + } + + Map get _headers => { + 'Content-Type': 'application/json', + if (_token != null) 'Authorization': 'Bearer $_token', + }; + + Future> get(String endpoint) async { + final response = await http.get( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + ); + + if (response.statusCode == 200) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to load data: ${response.statusCode}'); + } + } + + Future> post(String endpoint, Map data) async { + final response = await http.post( + Uri.parse('$baseUrl$endpoint'), + headers: _headers, + body: jsonEncode(data), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return jsonDecode(response.body); + } else { + throw Exception('Failed to post data: ${response.statusCode}'); + } + } +} +``` + +## 📝 更新日志 + +### v1 + v2 - 2025-11-05 + +- 🎉 初始版本发布 +- 📡 204 个API端点 +- 📋 189 个数据模型 +- 🔧 完整的API文档 + +--- + +*文档由 Swagger CLI By Max 自动生成* + diff --git a/lib/commands/generate_command.dart b/lib/commands/generate_command.dart index 088a58d..7821ad5 100644 --- a/lib/commands/generate_command.dart +++ b/lib/commands/generate_command.dart @@ -84,27 +84,64 @@ class GenerateCommand extends BaseCommand { final parser = SwaggerDataParser(); // 合并所有文档的 paths 和 models + // 注意:合并策略是后面的文档会覆盖前面的同名模型和路径 + // 因此建议将高版本(如 V2)配置在低版本(如 V1)之后,以确保高版本的模型覆盖低版本 SwaggerDocument? mergedDocument; - for (int i = 0; i < SwaggerConfig.swaggerJsonUrls.length; i++) { - final url = SwaggerConfig.swaggerJsonUrls[i]; - progress( - ' [${i + 1}/${SwaggerConfig.swaggerJsonUrls.length}] 正在解析: $url'); + final urls = SwaggerConfig.swaggerJsonUrls; + progress('URL 处理顺序: ${urls.join(" -> ")}'); + + for (int i = 0; i < urls.length; i++) { + final url = urls[i]; + progress(' [${i + 1}/${urls.length}] 正在解析: $url'); final doc = await parser.fetchAndParseSwaggerDocument(url); + progress(' 解析完成: ${doc.models.length} 个模型, ${doc.paths.length} 个路径'); if (mergedDocument == null) { mergedDocument = doc; + progress(' 初始文档: ${doc.models.length} 个模型'); } else { // 合并 paths 和 models + // 重要:使用 {...mergedDocument.models, ...doc.models} + // 后面的 doc.models 会覆盖前面的 mergedDocument.models 中的同名 key + // 这样可以确保高版本的模型定义覆盖低版本的模型定义 + final beforeModelCount = mergedDocument.models.length; + final currentModelCount = doc.models.length; + + // 找出会被覆盖的模型(同名模型) + final overlappingModels = []; + for (final key in doc.models.keys) { + if (mergedDocument.models.containsKey(key)) { + overlappingModels.add(key); + } + } + + if (overlappingModels.isNotEmpty) { + progress( + ' 发现 ${overlappingModels.length} 个同名模型将被覆盖: ${overlappingModels.take(5).join(", ")}${overlappingModels.length > 5 ? "..." : ""}'); + } + mergedDocument = SwaggerDocument( title: mergedDocument.title, description: mergedDocument.description, version: '${mergedDocument.version} + ${doc.version}', + // 注意:后面的 doc 会覆盖前面的 mergedDocument 中的同名 key + // 确保 V2 的模型覆盖 V1 的同名模型 paths: {...mergedDocument.paths, ...doc.paths}, models: {...mergedDocument.models, ...doc.models}, controllers: {...mergedDocument.controllers, ...doc.controllers}, ); + + final afterModelCount = mergedDocument.models.length; + progress( + ' 合并后: $beforeModelCount + $currentModelCount -> $afterModelCount 个模型'); + + // 验证同名模型是否被正确覆盖 + if (overlappingModels.isNotEmpty) { + progress( + ' 同名模型列表: ${overlappingModels.take(10).join(", ")}${overlappingModels.length > 10 ? "..." : ""}'); + } } } @@ -118,12 +155,20 @@ class GenerateCommand extends BaseCommand { // 解析生成选项 final options = _parseGenerateOptions(parsedArgs); - final fullOutputDir = FileUtils.getProjectRootGeneratorDir(); - progress('输出目录: $fullOutputDir'); + // 使用配置的输出目录 + final baseDir = SwaggerConfig.generatorDir; + final apiDir = SwaggerConfig.apiDir; + final modelsDir = SwaggerConfig.modelsDir; + + progress('输出目录: $baseDir'); + progress('API 目录: $apiDir'); + progress('模型目录: $modelsDir'); // 确保输出目录存在 - await FileUtils.ensureDirectoryExists(fullOutputDir); + await FileUtils.ensureDirectoryExists(baseDir); + await FileUtils.ensureDirectoryExists(apiDir); + await FileUtils.ensureDirectoryExists(modelsDir); int generatedFiles = 0; @@ -135,20 +180,19 @@ class GenerateCommand extends BaseCommand { useSimpleModels: options.useSimpleModels, ); - final modelsDir = '$fullOutputDir/api_models'; await FileUtils.ensureDirectoryExists(modelsDir); final modelFiles = generator.generateSeparateModelFiles(); for (final entry in modelFiles.entries) { final filePath = '$modelsDir/${entry.key}'; - + // 检查是否跳过此文件 if (ConfigLoader.shouldSkipFile(filePath)) { progress('跳过文件: $filePath'); continue; } - + await FileUtils.writeFile(filePath, entry.value); success('模型文件已保存到: $filePath'); generatedFiles++; @@ -159,7 +203,6 @@ class GenerateCommand extends BaseCommand { if (options.generateApi) { progress('正在按版本和tags分组生成Retrofit风格API接口...'); - final apiDir = '$fullOutputDir/api'; await FileUtils.ensureDirectoryExists(apiDir); // 🎯 先按版本分组 paths @@ -224,26 +267,26 @@ class GenerateCommand extends BaseCommand { final files = versionEntry.value; final versionDir = '$apiDir/$version'; - + // 检查是否跳过此版本目录 if (ConfigLoader.shouldSkipFile(versionDir)) { progress('跳过版本目录: $versionDir'); continue; } - + await FileUtils.ensureDirectoryExists(versionDir); for (final fileEntry in files.entries) { final fileName = fileEntry.key; final code = fileEntry.value; final filePath = '$versionDir/$fileName'; - + // 检查是否跳过此文件 if (ConfigLoader.shouldSkipFile(filePath)) { progress('跳过文件: $filePath'); continue; } - + await FileUtils.writeFile(filePath, code); success('API接口文件已保存到: $filePath'); generatedFiles++; @@ -259,7 +302,7 @@ class GenerateCommand extends BaseCommand { // 生成主 API 文件(ApiClient) final mainCode = _generateVersionedApiClient(versionedFiles); final mainFilePath = '$apiDir/api_client.dart'; - + // 检查是否跳过主 API 文件 if (!ConfigLoader.shouldSkipFile(mainFilePath)) { await FileUtils.writeFile(mainFilePath, mainCode); @@ -280,20 +323,19 @@ class GenerateCommand extends BaseCommand { final parameterEntityFiles = lastGenerator.generateParameterEntityFiles(); if (parameterEntityFiles.isNotEmpty) { - final modelsDir = '$fullOutputDir/api_models'; // Parameters 文件放在独立的 parameters 子目录中 final parametersDir = '$modelsDir/parameters'; await FileUtils.ensureDirectoryExists(parametersDir); for (final entry in parameterEntityFiles.entries) { final filePath = '$parametersDir/${entry.key}'; - + // 检查是否跳过此文件 if (ConfigLoader.shouldSkipFile(filePath)) { progress('跳过文件: $filePath'); continue; } - + await FileUtils.writeFile(filePath, entry.value); success('参数实体类文件已保存到: $filePath'); generatedFiles++; @@ -307,7 +349,6 @@ class GenerateCommand extends BaseCommand { // 重新生成 index.dart 文件,包含所有生成的文件 if (options.generateModels || options.generateApi) { progress('正在重新生成 index.dart 文件...'); - final modelsDir = '$fullOutputDir/api_models'; final allFiles = await _getAllModelFiles(modelsDir); final indexContent = _generateUpdatedIndexFile(allFiles); final indexPath = '$modelsDir/index.dart'; @@ -321,8 +362,8 @@ class GenerateCommand extends BaseCommand { final generator = DocumentationGenerator(document); final code = generator.generate(); - final filePath = '$fullOutputDir/api_documentation.md'; - + final filePath = '$baseDir/api_documentation.md'; + // 检查是否跳过文档文件 if (!ConfigLoader.shouldSkipFile(filePath)) { await FileUtils.writeFile(filePath, code); @@ -334,7 +375,7 @@ class GenerateCommand extends BaseCommand { } // 生成摘要 - _generateSummary(document, fullOutputDir); + _generateSummary(document, baseDir); success('代码生成完成!共生成 $generatedFiles 个文件'); return 0; @@ -428,7 +469,13 @@ class GenerateCommand extends BaseCommand { final fileName = path.basename(entity.path); // 排除 index.dart 本身和 .g.dart 文件 if (fileName != 'index.dart' && !fileName.endsWith('.g.dart')) { - dartFiles.add(fileName); + // 检查文件是否在 ignored_files 配置中 + final filePath = path.join(subDir, fileName); + if (!ConfigLoader.shouldSkipFile(filePath)) { + dartFiles.add(fileName); + } else { + progress(' 跳过导出文件: $fileName (在 ignored_files 配置中)'); + } } } } @@ -473,6 +520,22 @@ class GenerateCommand extends BaseCommand { buffer.writeln('library;'); buffer.writeln(''); + // 导出 base_result 和 base_page_result(如果配置了) + final baseResultImport = SwaggerConfig.baseResultImport; + final basePageResultImport = SwaggerConfig.basePageResultImport; + + if (baseResultImport.isNotEmpty) { + buffer.writeln('export \'$baseResultImport\';'); + } + if (basePageResultImport.isNotEmpty) { + buffer.writeln('export \'$basePageResultImport\';'); + } + + if ((baseResultImport.isNotEmpty || basePageResultImport.isNotEmpty) && + fileNames.isNotEmpty) { + buffer.writeln(''); + } + // 导出所有文件 for (final fileName in fileNames) { buffer.writeln('export \'$fileName\';'); @@ -513,7 +576,7 @@ class GenerateCommand extends BaseCommand { // 从配置文件读取版本提取模式 final pattern = ConfigLoader.getVersionExtractionPattern(); final defaultVersion = ConfigLoader.getDefaultVersion(); - + try { final versionMatch = RegExp(pattern).firstMatch(path); if (versionMatch != null && versionMatch.groupCount > 0) { @@ -527,7 +590,7 @@ class GenerateCommand extends BaseCommand { return 'v${versionMatch.group(1)}'; } } - + return defaultVersion; } diff --git a/lib/core/config.dart b/lib/core/config.dart index 4c065db..b08e412 100644 --- a/lib/core/config.dart +++ b/lib/core/config.dart @@ -40,6 +40,12 @@ class SwaggerConfig { /// 获取模型文件目录(从配置文件读取) static String get modelsDir => ConfigLoader.getModelsDir(); + /// 获取 BaseResult 导入路径(从配置文件读取) + static String get baseResultImport => ConfigLoader.getBaseResultImport(); + + /// 获取 BasePageResult 导入路径(从配置文件读取) + static String get basePageResultImport => ConfigLoader.getBasePageResultImport(); + /// 默认文档文件名 static const String defaultDocumentationFile = 'generated_api_documentation.md'; diff --git a/lib/core/config_loader.dart b/lib/core/config_loader.dart index 2c6a4e7..acfd677 100644 --- a/lib/core/config_loader.dart +++ b/lib/core/config_loader.dart @@ -106,6 +106,10 @@ class ConfigLoader { /// 只支持 swagger_urls (列表) 配置方式 /// 支持简写形式: ["url1", "url2"] /// 支持完整形式: [{url: "...", enabled: true}] + /// + /// 注意:URL 列表的顺序很重要! + /// 多个 Swagger 文档会按顺序合并,后面的文档会覆盖前面的同名模型和路径。 + /// 因此建议将高版本(如 V2)配置在低版本(如 V1)之后,以确保高版本的模型覆盖低版本。 static List getSwaggerUrls([Map? config]) { final cfg = config ?? loadConfig(); if (cfg == null) { @@ -430,4 +434,46 @@ class ConfigLoader { return versionExtraction['default_version'] as String? ?? 'v1'; } + + /// 获取 BaseResult 导入路径 + static String getBaseResultImport([Map? config]) { + final cfg = config ?? loadConfig(); + if (cfg == null) { + return 'package:learning_officer_oa/common/models/common/base_result.dart'; + } + + final generation = cfg['generation'] as Map?; + if (generation == null) { + return 'package:learning_officer_oa/common/models/common/base_result.dart'; + } + + final api = generation['api'] as Map?; + if (api == null) { + return 'package:learning_officer_oa/common/models/common/base_result.dart'; + } + + return api['base_result_import'] as String? ?? + 'package:learning_officer_oa/common/models/common/base_result.dart'; + } + + /// 获取 BasePageResult 导入路径 + static String getBasePageResultImport([Map? config]) { + final cfg = config ?? loadConfig(); + if (cfg == null) { + return 'package:learning_officer_oa/common/models/common/base_page_result.dart'; + } + + final generation = cfg['generation'] as Map?; + if (generation == null) { + return 'package:learning_officer_oa/common/models/common/base_page_result.dart'; + } + + final api = generation['api'] as Map?; + if (api == null) { + return 'package:learning_officer_oa/common/models/common/base_page_result.dart'; + } + + return api['base_page_result_import'] as String? ?? + 'package:learning_officer_oa/common/models/common/base_page_result.dart'; + } } diff --git a/lib/generators/model_code_generator.dart b/lib/generators/model_code_generator.dart index 0e3d7f2..3818a07 100644 --- a/lib/generators/model_code_generator.dart +++ b/lib/generators/model_code_generator.dart @@ -1,4 +1,5 @@ import '../core/models.dart'; +import '../core/config.dart'; import '../utils/string_utils.dart'; import 'base_generator.dart'; @@ -430,6 +431,22 @@ class ModelCodeGenerator extends ModelGenerator { buffer.writeln('library;'); buffer.writeln(''); + // 导出 base_result 和 base_page_result(如果配置了) + final baseResultImport = SwaggerConfig.baseResultImport; + final basePageResultImport = SwaggerConfig.basePageResultImport; + + if (baseResultImport.isNotEmpty) { + buffer.writeln('export \'$baseResultImport\';'); + } + if (basePageResultImport.isNotEmpty) { + buffer.writeln('export \'$basePageResultImport\';'); + } + + if ((baseResultImport.isNotEmpty || basePageResultImport.isNotEmpty) && + modelsByDirectory.isNotEmpty) { + buffer.writeln(''); + } + // 导出所有子目录的 index.dart final sortedDirs = modelsByDirectory.keys.toList()..sort(); @@ -473,6 +490,22 @@ class ModelCodeGenerator extends ModelGenerator { buffer.writeln('library;'); buffer.writeln(''); + // 导出 base_result 和 base_page_result(如果配置了) + final baseResultImport = SwaggerConfig.baseResultImport; + final basePageResultImport = SwaggerConfig.basePageResultImport; + + if (baseResultImport.isNotEmpty) { + buffer.writeln('export \'$baseResultImport\';'); + } + if (basePageResultImport.isNotEmpty) { + buffer.writeln('export \'$basePageResultImport\';'); + } + + if ((baseResultImport.isNotEmpty || basePageResultImport.isNotEmpty) && + modelFileNames.isNotEmpty) { + buffer.writeln(''); + } + // 按文件名排序并导出所有模型 final sortedFiles = List.from(modelFileNames)..sort(); diff --git a/lib/generators/retrofit_api_generator.dart b/lib/generators/retrofit_api_generator.dart index f0eebf6..d3d2f03 100644 --- a/lib/generators/retrofit_api_generator.dart +++ b/lib/generators/retrofit_api_generator.dart @@ -135,17 +135,18 @@ class RetrofitApiGenerator extends BaseGenerator { final buffer = StringBuffer(); final fileName = _generateTagFileName(tagName); - + // 生成文件头(传入文件名) - buffer.writeln(generateFileHeader('$tagName API 接口定义', fileName: fileName)); + buffer + .writeln(generateFileHeader('$tagName API 接口定义', fileName: fileName)); buffer.writeln(''); - + // 生成导入语句 _generateTagImports(buffer, paths); - + // 生成 API 接口类 _generateTagApiInterface(buffer, tagName, paths); - + apiFiles[fileName] = generateTypeCheckedCode(buffer.toString()); } @@ -154,12 +155,20 @@ class RetrofitApiGenerator extends BaseGenerator { /// 生成导入语句 void _generateImports(StringBuffer buffer) { - // 添加核心依赖的导入 + // Dart 导入顺序规范: + // 1. dart:xxx 导入 + // 2. package:xxx 导入(第三方包) + // 3. package:project_name 导入(项目内部包) + // 4. 相对路径导入 + // 每组之间用空行分隔 + + // dart: 标准库导入 buffer.writeln('import \'dart:convert\';'); buffer.writeln('import \'dart:io\';'); buffer.writeln('import \'dart:typed_data\';'); + buffer.writeln(''); - // Dio 和 Retrofit 相关导入 + // package: 第三方库导入(按字母顺序) if (useDio) { buffer.writeln('import \'package:dio/dio.dart\';'); } @@ -173,19 +182,9 @@ class RetrofitApiGenerator extends BaseGenerator { buffer.writeln('import \'package:crypto/crypto.dart\';'); buffer.writeln('import \'package:path/path.dart\' as path;'); buffer.writeln('import \'package:http_parser/http_parser.dart\';'); - buffer.writeln(''); - // 导入基础响应类型(从用户项目中导入) - buffer.writeln( - 'import \'package:learning_officer_oa/common/models/common/base_result.dart\';'); - buffer.writeln( - 'import \'package:learning_officer_oa/common/models/common/base_page_result.dart\';'); - buffer.writeln(''); - - // 导入所有模型(通过 index.dart) - // 使用统一的 index.dart 导入所有模型,简化维护 - // Dart 的 tree-shaking 会确保只打包实际使用的代码,不影响应用大小 + // 相对路径导入(api_models/index.dart 会导出 base_result 和 base_page_result) buffer.writeln('import \'../../api_models/index.dart\';'); buffer.writeln(''); @@ -1238,16 +1237,8 @@ class RetrofitApiGenerator extends BaseGenerator { buffer.writeln(''); - // 导入基础响应类型(从用户项目中导入) - buffer.writeln( - 'import \'package:learning_officer_oa/common/models/common/base_result.dart\';'); - - // 只有在需要分页时才导入 base_page_result.dart - if (_needsPaginationImportForDocument()) { - buffer.writeln( - 'import \'package:learning_officer_oa/common/models/common/base_page_result.dart\';'); - } - + // 相对路径导入(api_models/index.dart 会导出 base_result 和 base_page_result) + buffer.writeln('import \'../../api_models/index.dart\';'); buffer.writeln(''); // 导入错误处理相关类 @@ -1369,31 +1360,24 @@ class RetrofitApiGenerator extends BaseGenerator { /// 生成特定 tag 的导入语句 void _generateTagImports(StringBuffer buffer, List paths) { + // Dart 导入顺序规范: + // 1. dart:xxx 导入 + // 2. package:xxx 导入(第三方包) + // 3. package:project_name 导入(项目内部包) + // 4. 相对路径导入 + // 每组之间用空行分隔 + + // package: 第三方库导入(按字母顺序) if (useDio) { buffer.writeln('import \'package:dio/dio.dart\';'); } - if (useRetrofit) { buffer.writeln('import \'package:retrofit/retrofit.dart\';'); } buffer.writeln(''); - // 导入基础响应类型(从用户项目中导入) - buffer.writeln( - 'import \'package:learning_officer_oa/common/models/common/base_result.dart\';'); - - // 只有在需要分页时才导入 base_page_result.dart - if (_needsPaginationImport(paths)) { - buffer.writeln( - 'import \'package:learning_officer_oa/common/models/common/base_page_result.dart\';'); - } - - buffer.writeln(''); - - // 导入所有模型(通过 index.dart) - // 使用统一的 index.dart 导入所有模型,简化维护 - // Dart 的 tree-shaking 会确保只打包实际使用的代码,不影响应用大小 + // 相对路径导入(api_models/index.dart 会导出 base_result 和 base_page_result) buffer.writeln('import \'../../api_models/index.dart\';'); buffer.writeln(''); @@ -1663,84 +1647,85 @@ class RetrofitApiGenerator extends BaseGenerator { /// 生成参数实体类 void _generateParameterEntity( ApiPath path, String className, List queryParams) { - if (!_generatedParameterEntities.containsKey(className)) { - final buffer = StringBuffer(); + // 注意:如果类名已存在,会覆盖之前的定义 + // 这样可以确保后面版本的路径覆盖前面版本的参数实体类定义 + // 例如:V2 的参数实体类会覆盖 V1 的同名参数实体类 + final buffer = StringBuffer(); - // 生成文件头注释 - buffer.writeln(generateFileHeader( - '参数实体类 - $className', - fileName: '${StringUtils.toSnakeCase(className)}.dart', - )); - buffer.writeln('// 用于 ${path.method.value.toUpperCase()} ${path.path} 的查询参数'); - buffer.writeln(''); + // 生成文件头注释 + buffer.writeln(generateFileHeader( + '参数实体类 - $className', + fileName: '${StringUtils.toSnakeCase(className)}.dart', + )); + buffer + .writeln('// 用于 ${path.method.value.toUpperCase()} ${path.path} 的查询参数'); + buffer.writeln(''); - // 导入语句 - buffer - .writeln('import \'package:json_annotation/json_annotation.dart\';'); - buffer.writeln(''); - buffer.writeln('part \'${StringUtils.toSnakeCase(className)}.g.dart\';'); - buffer.writeln(''); + // 导入语句 + buffer.writeln('import \'package:json_annotation/json_annotation.dart\';'); + buffer.writeln(''); + buffer.writeln('part \'${StringUtils.toSnakeCase(className)}.g.dart\';'); + buffer.writeln(''); - // 生成参数实体类 - buffer.writeln('@JsonSerializable(checked: true, includeIfNull: false)'); - buffer.writeln('class $className {'); + // 生成参数实体类 + buffer.writeln('@JsonSerializable(checked: true, includeIfNull: false)'); + buffer.writeln('class $className {'); - // 生成属性 - for (final param in queryParams) { - final dartName = StringUtils.toDartPropertyName(param.name); - final dartType = _getDartType(param.type); - final nullable = param.required ? '' : '?'; + // 生成属性 + for (final param in queryParams) { + final dartName = StringUtils.toDartPropertyName(param.name); + final dartType = _getDartType(param.type); + final nullable = param.required ? '' : '?'; - // 处理描述中的换行符,确保注释格式正确 - final cleanDescription = param.description - .replaceAll('\r\n', ' ') - .replaceAll('\n', ' ') - .replaceAll('\r', ' ') - .trim(); - buffer.writeln( - ' /// ${cleanDescription.isNotEmpty ? cleanDescription : param.name}'); - buffer.writeln(' @JsonKey(name: \'${param.name}\')'); - buffer.writeln(' final $dartType$nullable $dartName;'); - buffer.writeln(''); - } - - // 生成构造函数 - buffer.writeln(' const $className({'); - for (final param in queryParams) { - final dartName = StringUtils.toDartPropertyName(param.name); - final required = param.required ? 'required ' : ''; - buffer.writeln(' ${required}this.$dartName,'); - } - buffer.writeln(' });'); - buffer.writeln(''); - - // 生成 fromJson 方法 + // 处理描述中的换行符,确保注释格式正确 + final cleanDescription = param.description + .replaceAll('\r\n', ' ') + .replaceAll('\n', ' ') + .replaceAll('\r', ' ') + .trim(); buffer.writeln( - ' factory $className.fromJson(Map json) =>'); - buffer.writeln(' _\$${className}FromJson(json);'); + ' /// ${cleanDescription.isNotEmpty ? cleanDescription : param.name}'); + buffer.writeln(' @JsonKey(name: \'${param.name}\')'); + buffer.writeln(' final $dartType$nullable $dartName;'); buffer.writeln(''); - - // 生成 toJson 方法 - buffer.writeln( - ' Map toJson() => _\$${className}ToJson(this);'); - buffer.writeln(''); - - // 生成 toQueryMap 方法(用于 Dio 查询参数) - buffer.writeln(' /// 转换为查询参数 Map'); - buffer.writeln(' Map toQueryMap() {'); - buffer.writeln(' final map = {};'); - for (final param in queryParams) { - final dartName = StringUtils.toDartPropertyName(param.name); - buffer.writeln( - ' if ($dartName != null) map[\'${param.name}\'] = $dartName;'); - } - buffer.writeln(' return map;'); - buffer.writeln(' }'); - - buffer.writeln('}'); - - _generatedParameterEntities[className] = buffer.toString(); } + + // 生成构造函数 + buffer.writeln(' const $className({'); + for (final param in queryParams) { + final dartName = StringUtils.toDartPropertyName(param.name); + final required = param.required ? 'required ' : ''; + buffer.writeln(' ${required}this.$dartName,'); + } + buffer.writeln(' });'); + buffer.writeln(''); + + // 生成 fromJson 方法 + buffer + .writeln(' factory $className.fromJson(Map json) =>'); + buffer.writeln(' _\$${className}FromJson(json);'); + buffer.writeln(''); + + // 生成 toJson 方法 + buffer.writeln( + ' Map toJson() => _\$${className}ToJson(this);'); + buffer.writeln(''); + + // 生成 toQueryMap 方法(用于 Dio 查询参数) + buffer.writeln(' /// 转换为查询参数 Map'); + buffer.writeln(' Map toQueryMap() {'); + buffer.writeln(' final map = {};'); + for (final param in queryParams) { + final dartName = StringUtils.toDartPropertyName(param.name); + buffer.writeln( + ' if ($dartName != null) map[\'${param.name}\'] = $dartName;'); + } + buffer.writeln(' return map;'); + buffer.writeln(' }'); + + buffer.writeln('}'); + + _generatedParameterEntities[className] = buffer.toString(); } /// 存储已生成的参数实体类 @@ -1767,7 +1752,12 @@ class RetrofitApiGenerator extends BaseGenerator { /// 确保参数实体类已生成(在调用 generate 之前调用) void ensureParameterEntitiesGenerated() { // 遍历所有路径,确保参数实体类已生成 - for (final path in document.paths.values) { + // 注意:按路径字符串排序,确保后面的版本(如 V2)覆盖前面的版本(如 V1) + // 因为如果类名相同,后面的会覆盖前面的 + final sortedPaths = document.paths.values.toList() + ..sort((a, b) => a.path.compareTo(b.path)); + + for (final path in sortedPaths) { final queryParams = path.parameters .where((p) => p.location == ParameterLocation.query) .toList(); diff --git a/lib/utils/file_utils.dart b/lib/utils/file_utils.dart index 1073fca..d0eab13 100644 --- a/lib/utils/file_utils.dart +++ b/lib/utils/file_utils.dart @@ -1,13 +1,55 @@ import 'dart:io'; - import 'package:path/path.dart' as path; /// 文件工具类 /// 提供文件操作、目录管理和代码格式化功能 class FileUtils { + /// 解析路径(支持相对路径和绝对路径) + /// 如果是相对路径,相对于项目根目录(配置文件所在目录) + static String resolvePath(String filePath) { + // 如果是绝对路径,直接返回 + if (path.isAbsolute(filePath)) { + return filePath; + } + + // 相对路径:相对于当前工作目录 + // 查找配置文件所在的目录作为项目根目录 + final configFile = _findConfigFile(); + if (configFile != null) { + final configDir = path.dirname(configFile); + return path.join(configDir, filePath); + } + + // 如果找不到配置文件,使用当前工作目录 + return path.join(Directory.current.path, filePath); + } + + /// 查找配置文件 + static String? _findConfigFile() { + var currentDir = Directory.current; + final maxDepth = 10; + var depth = 0; + + while (depth < maxDepth) { + final configFile = File(path.join(currentDir.path, 'generator_config.yaml')); + if (configFile.existsSync()) { + return configFile.path; + } + + final parent = currentDir.parent; + if (parent.path == currentDir.path) { + break; + } + currentDir = parent; + depth++; + } + + return null; + } /// 确保目录存在 static Future ensureDirectoryExists(String dirPath) async { - final directory = Directory(dirPath); + final resolvedPath = resolvePath(dirPath); + final directory = Directory(resolvedPath); if (!await directory.exists()) { await directory.create(recursive: true); } @@ -17,7 +59,8 @@ class FileUtils { /// 安全写入文件 static Future safeWriteFile(String filePath, String content) async { try { - final file = File(filePath); + final resolvedPath = resolvePath(filePath); + final file = File(resolvedPath); final directory = file.parent; // 确保目录存在 diff --git a/lib/utils/string_utils.dart b/lib/utils/string_utils.dart index aa293a7..daf3ae4 100644 --- a/lib/utils/string_utils.dart +++ b/lib/utils/string_utils.dart @@ -386,7 +386,6 @@ class StringUtils { final copyright = ConfigLoader.getCopyright(); return '''// $description -// 基于 Swagger API 文档: $source // 由 $generatorName by $author 生成 // $copyright '''; diff --git a/pubspec.yaml b/pubspec.yaml index 201b7cd..111cd3c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -30,11 +30,11 @@ dependencies: dio: ^5.0.0 retrofit: ^4.0.0 json_annotation: ^4.8.1 - + dev_dependencies: # 测试框架 test: ^1.24.0 - + # 代码生成工具(仅用于测试/示例) build_runner: ^2.4.7 json_serializable: ^6.7.1