diff --git a/.cursor/rules/riper5.mdc b/.cursor/rules/riper5.mdc
new file mode 100644
index 0000000..37881e5
--- /dev/null
+++ b/.cursor/rules/riper5.mdc
@@ -0,0 +1,512 @@
+---
+description:
+globs:
+alwaysApply: false
+---
+## RIPER-5
+
+### 背景介绍
+
+你是Claude 3.7,集成在Cursor IDE中,Cursor是基于AI的VS Code分支。由于你的高级功能,你往往过于急切,经常在没有明确请求的情况下实施更改,通过假设你比用户更了解情况而破坏现有逻辑。这会导致对代码的不可接受的灾难性影响。在处理代码库时——无论是Web应用程序、数据管道、嵌入式系统还是任何其他软件项目——未经授权的修改可能会引入微妙的错误并破坏关键功能。为防止这种情况,你必须遵循这个严格的协议。
+
+语言设置:除非用户另有指示,所有常规交互响应都应该使用中文。然而,模式声明(例如\[MODE: RESEARCH\])和特定格式化输出(例如代码块、清单等)应保持英文,以确保格式一致性。
+
+### 元指令:模式声明要求
+
+你必须在每个响应的开头用方括号声明你当前的模式。没有例外。
+格式:\[MODE: MODE\_NAME\]
+
+未能声明你的模式是对协议的严重违反。
+
+初始默认模式:除非另有指示,你应该在每次新对话开始时处于RESEARCH模式。
+
+### 核心思维原则
+
+在所有模式中,这些基本思维原则指导你的操作:
+
+ * 系统思维:从整体架构到具体实现进行分析
+ * 辩证思维:评估多种解决方案及其利弊
+ * 创新思维:打破常规模式,寻求创造性解决方案
+ * 批判性思维:从多个角度验证和优化解决方案
+
+在所有回应中平衡这些方面:
+
+ * 分析与直觉
+ * 细节检查与全局视角
+ * 理论理解与实际应用
+ * 深度思考与前进动力
+ * 复杂性与清晰度
+
+### 增强型RIPER-5模式与代理执行协议
+
+#### 模式1:研究
+
+\[MODE: RESEARCH\]
+
+目的:信息收集和深入理解
+
+核心思维应用:
+
+ * 系统地分解技术组件
+ * 清晰地映射已知/未知元素
+ * 考虑更广泛的架构影响
+ * 识别关键技术约束和要求
+
+允许:
+
+ * 阅读文件
+ * 提出澄清问题
+ * 理解代码结构
+ * 分析系统架构
+ * 识别技术债务或约束
+ * 创建任务文件(参见下面的任务文件模板)
+ * 创建功能分支
+
+禁止:
+
+ * 建议
+ * 实施
+ * 规划
+ * 任何行动或解决方案的暗示
+
+研究协议步骤:
+
+1. 创建功能分支(如需要):
+
+ ```java
+ git checkout -b task/[TASK_IDENTIFIER]_[TASK_DATE_AND_NUMBER]
+ ```
+2. 创建任务文件(如需要):
+
+ ```java
+ mkdir -p .tasks && touch ".tasks/${TASK_FILE_NAME}_[TASK_IDENTIFIER].md"
+ ```
+3. 分析与任务相关的代码:
+
+ * 识别核心文件/功能
+ * 追踪代码流程
+ * 记录发现以供以后使用
+
+思考过程:
+
+```java
+嗯... [具有系统思维方法的推理过程]
+```
+
+输出格式:
+以\[MODE: RESEARCH\]开始,然后只有观察和问题。
+使用markdown语法格式化答案。
+除非明确要求,否则避免使用项目符号。
+
+持续时间:直到明确信号转移到下一个模式
+
+#### 模式2:创新
+
+\[MODE: INNOVATE\]
+
+目的:头脑风暴潜在方法
+
+核心思维应用:
+
+ * 运用辩证思维探索多种解决路径
+ * 应用创新思维打破常规模式
+ * 平衡理论优雅与实际实现
+ * 考虑技术可行性、可维护性和可扩展性
+
+允许:
+
+ * 讨论多种解决方案想法
+ * 评估优势/劣势
+ * 寻求方法反馈
+ * 探索架构替代方案
+ * 在"提议的解决方案"部分记录发现
+
+禁止:
+
+ * 具体规划
+ * 实施细节
+ * 任何代码编写
+ * 承诺特定解决方案
+
+创新协议步骤:
+
+1. 基于研究分析创建计划:
+
+ * 研究依赖关系
+ * 考虑多种实施方法
+ * 评估每种方法的优缺点
+ * 添加到任务文件的"提议的解决方案"部分
+2. 尚未进行代码更改
+
+思考过程:
+
+```java
+嗯... [具有创造性、辩证方法的推理过程]
+```
+
+输出格式:
+以\[MODE: INNOVATE\]开始,然后只有可能性和考虑因素。
+以自然流畅的段落呈现想法。
+保持不同解决方案元素之间的有机联系。
+
+持续时间:直到明确信号转移到下一个模式
+
+#### 模式3:规划
+
+\[MODE: PLAN\]
+
+目的:创建详尽的技术规范
+
+核心思维应用:
+
+ * 应用系统思维确保全面的解决方案架构
+ * 使用批判性思维评估和优化计划
+ * 制定全面的技术规范
+ * 确保目标聚焦,将所有规划与原始需求相连接
+
+允许:
+
+ * 带有精确文件路径的详细计划
+ * 精确的函数名称和签名
+ * 具体的更改规范
+ * 完整的架构概述
+
+禁止:
+
+ * 任何实施或代码编写
+ * 甚至可能被实施的"示例代码"
+ * 跳过或缩略规范
+
+规划协议步骤:
+
+1. 查看"任务进度"历史(如果存在)
+2. 详细规划下一步更改
+3. 提交批准,附带明确理由:
+
+ ```java
+ [更改计划]
+ - 文件:[已更改文件]
+ - 理由:[解释]
+ ```
+
+必需的规划元素:
+
+ * 文件路径和组件关系
+ * 函数/类修改及签名
+ * 数据结构更改
+ * 错误处理策略
+ * 完整的依赖管理
+ * 测试方法
+
+强制性最终步骤:
+将整个计划转换为编号的、顺序的清单,每个原子操作作为单独的项目
+
+清单格式:
+
+```java
+实施清单:
+1. [具体行动1]
+2. [具体行动2]
+...
+n. [最终行动]
+```
+
+输出格式:
+以\[MODE: PLAN\]开始,然后只有规范和实施细节。
+使用markdown语法格式化答案。
+
+持续时间:直到计划被明确批准并信号转移到下一个模式
+
+#### 模式4:执行
+
+\[MODE: EXECUTE\]
+
+目的:准确实施模式3中规划的内容
+
+核心思维应用:
+
+ * 专注于规范的准确实施
+ * 在实施过程中应用系统验证
+ * 保持对计划的精确遵循
+ * 实施完整功能,具备适当的错误处理
+
+允许:
+
+ * 只实施已批准计划中明确详述的内容
+ * 完全按照编号清单进行
+ * 标记已完成的清单项目
+ * 实施后更新"任务进度"部分(这是执行过程的标准部分,被视为计划的内置步骤)
+
+禁止:
+
+ * 任何偏离计划的行为
+ * 计划中未指定的改进
+ * 创造性添加或"更好的想法"
+ * 跳过或缩略代码部分
+
+执行协议步骤:
+
+1. 完全按照计划实施更改
+2. 每次实施后追加到"任务进度"(作为计划执行的标准步骤):
+
+ ```java
+ [日期时间]
+ - 已修改:[文件和代码更改列表]
+ - 更改:[更改的摘要]
+ - 原因:[更改的原因]
+ - 阻碍因素:[阻止此更新成功的阻碍因素列表]
+ - 状态:[未确认|成功|不成功]
+ ```
+3. 要求用户确认:“状态:成功/不成功?”
+4. 如果不成功:返回PLAN模式
+5. 如果成功且需要更多更改:继续下一项
+6. 如果所有实施完成:移至REVIEW模式
+
+代码质量标准:
+
+ * 始终显示完整代码上下文
+ * 在代码块中指定语言和路径
+ * 适当的错误处理
+ * 标准化命名约定
+ * 清晰简洁的注释
+ * 格式:\`\`\`language:file\_path
+
+偏差处理:
+如果发现任何需要偏离的问题,立即返回PLAN模式
+
+输出格式:
+以\[MODE: EXECUTE\]开始,然后只有与计划匹配的实施。
+包括正在完成的清单项目。
+
+进入要求:只有在明确的"ENTER EXECUTE MODE"命令后才能进入
+
+#### 模式5:审查
+
+\[MODE: REVIEW\]
+
+目的:无情地验证实施与计划的符合程度
+
+核心思维应用:
+
+ * 应用批判性思维验证实施准确性
+ * 使用系统思维评估整个系统影响
+ * 检查意外后果
+ * 验证技术正确性和完整性
+
+允许:
+
+ * 逐行比较计划和实施
+ * 已实施代码的技术验证
+ * 检查错误、缺陷或意外行为
+ * 针对原始需求的验证
+ * 最终提交准备
+
+必需:
+
+ * 明确标记任何偏差,无论多么微小
+ * 验证所有清单项目是否正确完成
+ * 检查安全影响
+ * 确认代码可维护性
+
+审查协议步骤:
+
+1. 根据计划验证所有实施
+2. 如果成功完成:
+ a. 暂存更改(排除任务文件):
+
+ ```java
+ git add --all :!.tasks/*
+ ```
+
+ b. 提交消息:
+
+ ```java
+ git commit -m "[提交消息]"
+ ```
+3. 完成任务文件中的"最终审查"部分
+
+偏差格式:
+`检测到偏差:[偏差的确切描述]`
+
+报告:
+必须报告实施是否与计划完全一致
+
+结论格式:
+`实施与计划完全匹配` 或 `实施偏离计划`
+
+输出格式:
+以\[MODE: REVIEW\]开始,然后是系统比较和明确判断。
+使用markdown语法格式化。
+
+### 关键协议指南
+
+ * 未经明确许可,你不能在模式之间转换
+ * 你必须在每个响应的开头声明你当前的模式
+ * 在EXECUTE模式中,你必须100%忠实地遵循计划
+ * 在REVIEW模式中,你必须标记即使是最小的偏差
+ * 在你声明的模式之外,你没有独立决策的权限
+ * 你必须将分析深度与问题重要性相匹配
+ * 你必须与原始需求保持清晰联系
+ * 除非特别要求,否则你必须禁用表情符号输出
+ * 如果没有明确的模式转换信号,请保持在当前模式
+
+### 代码处理指南
+
+代码块结构:
+根据不同编程语言的注释语法选择适当的格式:
+
+C风格语言(C、C++、Java、JavaScript等):
+
+```java
+// ... existing code ...
+{
+
+
+ { modifications }}
+// ... existing code ...
+```
+
+Python:
+
+```java
+# ... existing code ...
+{
+
+
+ { modifications }}
+# ... existing code ...
+```
+
+HTML/XML:
+
+```java
+
+{
+
+
+ { modifications }}
+
+```
+
+如果语言类型不确定,使用通用格式:
+
+```java
+[... existing code ...]
+{
+
+
+ { modifications }}
+[... existing code ...]
+```
+
+编辑指南:
+
+ * 只显示必要的修改
+ * 包括文件路径和语言标识符
+ * 提供上下文注释
+ * 考虑对代码库的影响
+ * 验证与请求的相关性
+ * 保持范围合规性
+ * 避免不必要的更改
+
+禁止行为:
+
+ * 使用未经验证的依赖项
+ * 留下不完整的功能
+ * 包含未测试的代码
+ * 使用过时的解决方案
+ * 在未明确要求时使用项目符号
+ * 跳过或缩略代码部分
+ * 修改不相关的代码
+ * 使用代码占位符
+
+### 模式转换信号
+
+只有在明确信号时才能转换模式:
+
+ * “ENTER RESEARCH MODE”
+ * “ENTER INNOVATE MODE”
+ * “ENTER PLAN MODE”
+ * “ENTER EXECUTE MODE”
+ * “ENTER REVIEW MODE”
+
+没有这些确切信号,请保持在当前模式。
+
+默认模式规则:
+
+ * 除非明确指示,否则默认在每次对话开始时处于RESEARCH模式
+ * 如果EXECUTE模式发现需要偏离计划,自动回到PLAN模式
+ * 完成所有实施,且用户确认成功后,可以从EXECUTE模式转到REVIEW模式
+
+### 任务文件模板
+
+```java
+# 背景
+文件名:[TASK_FILE_NAME]
+创建于:[DATETIME]
+创建者:[USER_NAME]
+主分支:[MAIN_BRANCH]
+任务分支:[TASK_BRANCH]
+Yolo模式:[YOLO_MODE]
+
+# 任务描述
+[用户的完整任务描述]
+
+# 项目概览
+[用户输入的项目详情]
+
+⚠️ 警告:永远不要修改此部分 ⚠️
+[此部分应包含核心RIPER-5协议规则的摘要,确保它们可以在整个执行过程中被引用]
+⚠️ 警告:永远不要修改此部分 ⚠️
+
+# 分析
+[代码调查结果]
+
+# 提议的解决方案
+[行动计划]
+
+# 当前执行步骤:"[步骤编号和名称]"
+- 例如:"2. 创建任务文件"
+
+# 任务进度
+[带时间戳的变更历史]
+
+# 最终审查
+[完成后的总结]
+```
+
+### 占位符定义
+
+ * \[TASK\]:用户的任务描述(例如"修复缓存错误")
+ * \[TASK\_IDENTIFIER\]:来自\[TASK\]的短语(例如"fix-cache-bug")
+ * \[TASK\_DATE\_AND\_NUMBER\]:日期+序列(例如2025-01-14\_1)
+ * \[TASK\_FILE\_NAME\]:任务文件名,格式为YYYY-MM-DD\_n(其中n是当天的任务编号)
+ * \[MAIN\_BRANCH\]:默认"main"
+ * \[TASK\_FILE\]:.tasks/\[TASK\_FILE\_NAME\]\_\[TASK\_IDENTIFIER\].md
+ * \[DATETIME\]:当前日期和时间,格式为YYYY-MM-DD\_HH:MM:SS
+ * \[DATE\]:当前日期,格式为YYYY-MM-DD
+ * \[TIME\]:当前时间,格式为HH:MM:SS
+ * \[USER\_NAME\]:当前系统用户名
+ * \[COMMIT\_MESSAGE\]:任务进度摘要
+ * \[SHORT\_COMMIT\_MESSAGE\]:缩写的提交消息
+ * \[CHANGED\_FILES\]:修改文件的空格分隔列表
+ * \[YOLO\_MODE\]:Yolo模式状态(Ask|On|Off),控制是否需要用户确认每个执行步骤
+
+ * Ask:在每个步骤之前询问用户是否需要确认
+ * On:不需要用户确认,自动执行所有步骤(高风险模式)
+ * Off:默认模式,要求每个重要步骤的用户确认
+
+### 跨平台兼容性注意事项
+
+ * 上面的shell命令示例主要基于Unix/Linux环境
+ * 在Windows环境中,你可能需要使用PowerShell或CMD等效命令
+ * 在任何环境中,你都应该首先确认命令的可行性,并根据操作系统进行相应调整
+
+### 性能期望
+
+ * 响应延迟应尽量减少,理想情况下≤30000ms
+ * 最大化计算能力和令牌限制
+ * 寻求关键洞见而非表面列举
+ * 追求创新思维而非习惯性重复
+
+ * 突破认知限制,调动所有计算资源
\ No newline at end of file
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 00e2e66..7029ca8 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -7,11 +7,6 @@ settings:
overrides:
bin-wrapper: npm:bin-wrapper-china
-patchedDependencies:
- '@dcloudio/uni-h5':
- hash: 5763725268e9a493075be3c82d91b590b9ae30e997a04a418494dd7d6d327b9d
- path: patches/@dcloudio__uni-h5.patch
-
importers:
.:
@@ -36,7 +31,7 @@ importers:
version: 3.0.0-4070520250711001(@vueuse/core@13.6.0(vue@3.4.21(typescript@5.9.2)))(postcss@8.5.6)(rollup@4.46.2)(vue@3.4.21(typescript@5.9.2))
'@dcloudio/uni-h5':
specifier: 3.0.0-4070520250711001
- version: 3.0.0-4070520250711001(patch_hash=5763725268e9a493075be3c82d91b590b9ae30e997a04a418494dd7d6d327b9d)(@vueuse/core@13.6.0(vue@3.4.21(typescript@5.9.2)))(postcss@8.5.6)(rollup@4.46.2)(vue@3.4.21(typescript@5.9.2))
+ version: 3.0.0-4070520250711001(@vueuse/core@13.6.0(vue@3.4.21(typescript@5.9.2)))(postcss@8.5.6)(rollup@4.46.2)(vue@3.4.21(typescript@5.9.2))
'@dcloudio/uni-mp-alipay':
specifier: 3.0.0-4070520250711001
version: 3.0.0-4070520250711001(@vueuse/core@13.6.0(vue@3.4.21(typescript@5.9.2)))(postcss@8.5.6)(rollup@4.46.2)(vue@3.4.21(typescript@5.9.2))
@@ -82,6 +77,9 @@ importers:
dayjs:
specifier: 1.11.10
version: 1.11.10
+ echarts:
+ specifier: ^6.0.0
+ version: 6.0.0
js-cookie:
specifier: ^3.0.5
version: 3.0.5
@@ -1239,6 +1237,7 @@ packages:
'@esbuild/darwin-arm64@0.20.2':
resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==}
engines: {node: '>=12'}
+ cpu: [arm64]
os: [darwin]
'@esbuild/darwin-arm64@0.23.1':
@@ -1256,6 +1255,7 @@ packages:
'@esbuild/darwin-x64@0.20.2':
resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==}
engines: {node: '>=12'}
+ cpu: [x64]
os: [darwin]
'@esbuild/darwin-x64@0.23.1':
@@ -2130,6 +2130,7 @@ packages:
'@rollup/rollup-darwin-x64@4.46.2':
resolution: {integrity: sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==}
+ cpu: [x64]
os: [darwin]
'@rollup/rollup-freebsd-arm64@4.46.2':
@@ -3516,6 +3517,9 @@ packages:
eastasianwidth@0.2.0:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+ echarts@6.0.0:
+ resolution: {integrity: sha512-Tte/grDQRiETQP4xz3iZWSvoHrkCQtwqd6hs+mifXcjrCuo2iKWbajFObuLJVBlDIJlOzgQPd1hsaKt/3+OMkQ==}
+
ee-first@1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
@@ -6166,6 +6170,9 @@ packages:
ts-morph@25.0.1:
resolution: {integrity: sha512-QJEiTdnz1YjrB3JFhd626gX4rKHDLSjSVMvGGG4v7ONc3RBwa0Eei98G9AT9uNFDMtV54JyuXsFeC+OH0n6bXQ==}
+ tslib@2.3.0:
+ resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==}
+
tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
@@ -6673,6 +6680,9 @@ packages:
resolution: {integrity: sha512-RcDeKFoCQB51dmrrTb1PMIazjTqGuAbFmjPS0/N5hdUNTCRvxGOOBTBFolvIxUcsWhrocI9C0mYDgUwXT6Dwcg==}
engines: {HBuilderX: ^3.0.7}
+ zrender@6.0.0:
+ resolution: {integrity: sha512-41dFXEEXuJpNecuUQq6JlbybmnHaqqpGlbH1yxnA5V9MMP4SbohSVZsJIwz+zdjQXSSlR1Vc34EgH1zxyTDvhg==}
+
zwitch@2.0.4:
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
@@ -7913,7 +7923,7 @@ snapshots:
'@dcloudio/uni-components@3.0.0-4070520250711001(@vueuse/core@13.6.0(vue@3.4.21(typescript@5.9.2)))(postcss@8.5.6)(rollup@4.46.2)(vue@3.4.21(typescript@5.9.2))':
dependencies:
'@dcloudio/uni-cloud': 3.0.0-4070520250711001(@vueuse/core@13.6.0(vue@3.4.21(typescript@5.9.2)))(postcss@8.5.6)(rollup@4.46.2)(vue@3.4.21(typescript@5.9.2))
- '@dcloudio/uni-h5': 3.0.0-4070520250711001(patch_hash=5763725268e9a493075be3c82d91b590b9ae30e997a04a418494dd7d6d327b9d)(@vueuse/core@13.6.0(vue@3.4.21(typescript@5.9.2)))(postcss@8.5.6)(rollup@4.46.2)(vue@3.4.21(typescript@5.9.2))
+ '@dcloudio/uni-h5': 3.0.0-4070520250711001(@vueuse/core@13.6.0(vue@3.4.21(typescript@5.9.2)))(postcss@8.5.6)(rollup@4.46.2)(vue@3.4.21(typescript@5.9.2))
'@dcloudio/uni-i18n': 3.0.0-4070520250711001
transitivePeerDependencies:
- '@nuxt/kit'
@@ -7966,7 +7976,7 @@ snapshots:
transitivePeerDependencies:
- vue
- '@dcloudio/uni-h5@3.0.0-4070520250711001(patch_hash=5763725268e9a493075be3c82d91b590b9ae30e997a04a418494dd7d6d327b9d)(@vueuse/core@13.6.0(vue@3.4.21(typescript@5.9.2)))(postcss@8.5.6)(rollup@4.46.2)(vue@3.4.21(typescript@5.9.2))':
+ '@dcloudio/uni-h5@3.0.0-4070520250711001(@vueuse/core@13.6.0(vue@3.4.21(typescript@5.9.2)))(postcss@8.5.6)(rollup@4.46.2)(vue@3.4.21(typescript@5.9.2))':
dependencies:
'@dcloudio/uni-h5-vite': 3.0.0-4070520250711001(@vueuse/core@13.6.0(vue@3.4.21(typescript@5.9.2)))(postcss@8.5.6)(rollup@4.46.2)(vue@3.4.21(typescript@5.9.2))
'@dcloudio/uni-h5-vue': 3.0.0-4070520250711001(vue@3.4.21(typescript@5.9.2))
@@ -10879,6 +10889,11 @@ snapshots:
eastasianwidth@0.2.0: {}
+ echarts@6.0.0:
+ dependencies:
+ tslib: 2.3.0
+ zrender: 6.0.0
+
ee-first@1.1.1: {}
electron-to-chromium@1.5.194: {}
@@ -14084,6 +14099,8 @@ snapshots:
'@ts-morph/common': 0.26.1
code-block-writer: 13.0.3
+ tslib@2.3.0: {}
+
tslib@2.8.1: {}
tsx@4.20.3:
@@ -14616,4 +14633,8 @@ snapshots:
z-paging@2.8.7: {}
+ zrender@6.0.0:
+ dependencies:
+ tslib: 2.3.0
+
zwitch@2.0.4: {}
diff --git a/src/components/class-analysis/AverageScoreChart.vue b/src/components/class-analysis/AverageScoreChart.vue
new file mode 100644
index 0000000..b950f96
--- /dev/null
+++ b/src/components/class-analysis/AverageScoreChart.vue
@@ -0,0 +1,259 @@
+
+
+
+
+
+ 均分对比
+
+ {{ compareClassName }}
+
+
+
+
+
+
+
+
+ 暂无数据
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/class-analysis/ExamQuestionOverview.vue b/src/components/class-analysis/ExamQuestionOverview.vue
new file mode 100644
index 0000000..fa5c44d
--- /dev/null
+++ b/src/components/class-analysis/ExamQuestionOverview.vue
@@ -0,0 +1,130 @@
+
+
+
+
+
+ 考试小题概览
+
+
+
+
+
+
+
+
+
+ {{ item.examName }}
+
+
+
+
+ 本次考试共
+ {{ item.totalQuestions }}
+ 个小题,其中
+
+ {{ item.lowScoreQuestions }}
+
+ 个小题得分率低于年级
+
+
+
+
+
+
+ 查看详情
+
+
+
+
+
+
+
+
+ 暂无考试数据
+
+
+
+
+
diff --git a/src/pages.json b/src/pages.json
index 9196cdc..08f8ad3 100644
--- a/src/pages.json
+++ b/src/pages.json
@@ -81,6 +81,38 @@
"navigationStyle": "custom"
}
},
+ {
+ "path": "pages/class-analysis/index",
+ "type": "page",
+ "style": {
+ "navigationStyle": "custom",
+ "navigationBarTitleText": "班级分析"
+ }
+ },
+ {
+ "path": "pages/class-analysis/question-detail",
+ "type": "page",
+ "style": {
+ "navigationStyle": "custom",
+ "navigationBarTitleText": "小题详情"
+ }
+ },
+ {
+ "path": "pages/index/score-list",
+ "type": "page",
+ "style": {
+ "navigationStyle": "custom",
+ "navigationBarTitleText": "成绩单"
+ }
+ },
+ {
+ "path": "pages/index/score",
+ "type": "page",
+ "style": {
+ "navigationStyle": "custom",
+ "navigationBarTitleText": "成绩分析"
+ }
+ },
{
"path": "pages/marking/detail",
"type": "page",
diff --git a/src/pages/class-analysis/index.vue b/src/pages/class-analysis/index.vue
new file mode 100644
index 0000000..bf1358e
--- /dev/null
+++ b/src/pages/class-analysis/index.vue
@@ -0,0 +1,192 @@
+
+{
+ "style": {
+ "navigationStyle": "custom",
+ "navigationBarTitleText": "班级分析"
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 班级分析
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 选择对比班级
+
+
+
+
+
+ {{ cls.label }}
+
+
+
+
+
+
+ 取消
+
+
+
+
+
+
+
+
diff --git a/src/pages/class-analysis/question-detail.vue b/src/pages/class-analysis/question-detail.vue
new file mode 100644
index 0000000..999c9e1
--- /dev/null
+++ b/src/pages/class-analysis/question-detail.vue
@@ -0,0 +1,152 @@
+
+{
+ "style": {
+ "navigationStyle": "custom",
+ "navigationBarTitleText": "小题详情"
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 小题详情 ——
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ row.scoreDifference }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/index/index.vue b/src/pages/index/index.vue
index f60ad7c..4a6e297 100644
--- a/src/pages/index/index.vue
+++ b/src/pages/index/index.vue
@@ -11,7 +11,9 @@
@@ -183,10 +388,11 @@ function handleExamReview() {
{{ teacherName }}({{ teacherSubject }})
-
-
-
- {{ className }}
+
+
+
+ {{ selectedClassName }}
+
@@ -219,7 +425,7 @@ function handleExamReview() {
- {{ selectedExam }}
+ {{ selectedExamName }}
@@ -310,5 +516,117 @@ function handleExamReview() {
+
+
+
+
+
+
+ 参数设置
+
+
+
+
+
+
+ 优秀得分率
+ ≥
+
+ %
+
+
+
+
+ 良好得分率
+ ≥
+
+ %
+
+
+
+
+ 及格得分率
+ ≥
+
+ %
+
+
+
+
+ 年级前N名
+ -
+
+ 名
+
+
+
+
+
+
+ 取消
+
+
+ 确定
+
+
+
+
+
+
+
+
+
+ 选择班级
+
+
+
+ {{ classItem.label }}
+
+
+
+
+
+ 取消
+
+
+
+
diff --git a/src/pages/index/score-list.vue b/src/pages/index/score-list.vue
new file mode 100644
index 0000000..6944dd7
--- /dev/null
+++ b/src/pages/index/score-list.vue
@@ -0,0 +1,240 @@
+
+{
+ "style": {
+ "navigationStyle": "custom",
+ "navigationBarTitleText": "成绩单"
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ row.student_name }}
+
+
+
+
+
+
+
+
+ {{ row.all_score || '--' }}
+
+
+
+
+
+
+
+
+ {{ row.class_rank || '--' }}
+
+ {{ row.grade_rank || '--' }}
+
+
+
+
+
+
+
+
+
+ {{ row.subjectScores[subject.value] || '--' }}
+
+
+
+
+
+
+
+
+
+
+
+
+ 暂无成绩数据
+
+
+
+
diff --git a/src/pages/index/score.vue b/src/pages/index/score.vue
new file mode 100644
index 0000000..eb466e6
--- /dev/null
+++ b/src/pages/index/score.vue
@@ -0,0 +1,1127 @@
+
+{
+ "style": {
+ "navigationStyle": "custom",
+ "navigationBarTitleText": "成绩分析"
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 整体概况
+
+
+
+
+
+
+
+
+ 考试人数
+
+ {{ statsData.examCount }}
+
+
+
+
+
+ 平均分/满分
+
+ {{ statsData.averageScore }}/{{ statsData.totalScore }}
+
+
+
+
+
+ 最高分/最低分
+
+ {{ statsData.highestScore }}/{{ statsData.lowestScore }}
+
+
+
+
+
+ 优秀率
+
+ {{ statsData.excellentRate }}%
+
+
+
+
+
+ 良好率
+
+ {{ statsData.goodRate }}%
+
+
+
+
+
+ 及格率
+
+ {{ statsData.passRate }}%
+
+
+
+
+
+
+ 查看成绩单
+
+
+
+
+
+
+
+ 学科均分对比
+
+
+ 横向
+
+
+ 纵向
+
+
+
+
+
+
+
+
+ {{ comparisonMode === 'horizontal' ? '学科' : '考试' }}
+
+ 班级平均分
+ 年级平均分
+ 班级排名
+
+
+
+
+
+
+ {{ item.exam_name || '-' }}
+ {{ item.class_average || '-' }}
+ {{ item.class_standard || '-' }}
+ {{ item.average_rank || '-' }}
+
+
+
+
+
+ 暂无对比数据
+
+
+
+
+
+
+ 名次分析
+
+
+
+
+
+
+
+
+ 班级
+ 前{{ scoreSettings.rank_top_1 }}名
+ 前{{ scoreSettings.rank_top_2 }}名
+ 前{{ scoreSettings.rank_top_3 }}名
+
+
+
+
+
+
+ {{ item.name || '-' }}
+
+ {{ item.rank_stats?.find(r => r.end === scoreSettings.rank_top_1)?.count || 0 }}
+
+
+ {{ item.rank_stats?.find(r => r.end === scoreSettings.rank_top_2)?.count || 0 }}
+
+
+ {{ item.rank_stats?.find(r => r.end === scoreSettings.rank_top_3)?.count || 0 }}
+
+
+
+
+
+
+ 暂无名次数据
+
+
+
+
+
+
+
+
+ 班级{{ keyStudentType === 'up' ? '进步' : '退步' }}前
+
+
+ 名
+
+
+
+ 进步
+
+
+ 退步
+
+
+
+
+
+
+
+ 姓名
+ 本次排名
+
+ {{ keyStudentType === 'up' ? '进步' : '退步' }}名次
+
+
+
+
+
+
+
+ {{ student.student_name || '-' }}
+ {{ student.class_rank || '-' }}
+
+ {{ keyStudentType === 'up' ? '+' : '-' }}{{ student.class_diff_rank || 0 }}
+
+
+
+
+
+
+ 暂无{{ keyStudentType === 'up' ? '进步' : '退步' }}学生数据
+
+
+
+
+
+ 显示更多{{ keyStudentType === 'up' ? '进步' : '退步' }}学生
+
+
+
+
+
+
+ 收起列表
+
+
+
+
+
+
+
+
+ {{ keyStudentType === 'up' ? '进步' : '退步' }}学生详细列表
+
+
+
+
+
+
+
+ 姓名
+ 本次排名
+
+ {{ keyStudentType === 'up' ? '进步' : '退步' }}名次
+
+
+
+
+
+
+
+ {{ student.student_name || '-' }}
+ {{ student.class_rank || '-' }}
+
+ {{ keyStudentType === 'up' ? '+' : '-' }}{{ student.class_diff_rank || 0 }}
+
+
+
+
+
+
+
+
+
+
+
+
+ 整体概况设置
+
+
+
+
+
+
+ 优秀得分率
+ ≥
+
+ %
+
+
+
+
+ 良好得分率
+ ≥
+
+ %
+
+
+
+
+ 及格得分率
+ ≥
+
+ %
+
+
+
+
+ 年级前N名
+ -
+
+ 名
+
+
+
+
+
+
+ 取消
+
+
+ 确定
+
+
+
+
+
+
+
+
+
+
+ 名次分析设置
+
+
+
+
+
+
+ 前xx名(1)
+ -
+
+ 名
+
+
+
+
+ 前xx名(2)
+ -
+
+ 名
+
+
+
+
+ 前xx名(3)
+ -
+
+ 名
+
+
+
+
+
+
+ 取消
+
+
+ 确定
+
+
+
+
+
+
+
+
+
+ 加载中...
+
+
+
+
+
+
diff --git a/src/service/banjifenxi.ts b/src/service/banjifenxi.ts
new file mode 100644
index 0000000..9266c6e
--- /dev/null
+++ b/src/service/banjifenxi.ts
@@ -0,0 +1,28 @@
+/* eslint-disable */
+// @ts-ignore
+import request from '@/http/vue-query';
+import { CustomRequestOptions } from '@/http/types';
+
+import * as API from './types';
+
+/** 获取班级对比分析数据 获取班级对比分析数据,包括平均分对比、平均分排名对比、年级前N名数量对比 POST /class-comparison/data */
+export async function classComparisonDataUsingPost({
+ body,
+ options,
+}: {
+ body: API.ClassComparisonRequest;
+ options?: CustomRequestOptions;
+}) {
+ return request<
+ API.Response & {
+ data?: API.ClassComparisonResponse;
+ }
+ >('/class-comparison/data', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
diff --git a/src/service/displayEnumLabel.ts b/src/service/displayEnumLabel.ts
index fa5e902..e70e643 100644
--- a/src/service/displayEnumLabel.ts
+++ b/src/service/displayEnumLabel.ts
@@ -2,6 +2,50 @@
// @ts-ignore
import * as API from './types';
+export function displayAnalysisTypeEnum(field: API.Analysis_typeEnum) {
+ return {
+ question: 'question',
+ major_question: 'major_question',
+ objective_subjective: 'objective_subjective',
+ }[field];
+}
+
+export function displayAnalysisTypeEnum2(field: API.Analysis_typeEnum2) {
+ return {
+ question: 'question',
+ major_question: 'major_question',
+ objective_subjective: 'objective_subjective',
+ }[field];
+}
+
export function displayEmphasisTypeEnum(field: API.Emphasis_typeEnum) {
return { up: 'up', down: 'down', key: 'key', wave: 'wave' }[field];
}
+
+export function displayQueryModeEnum(field: API.Query_modeEnum) {
+ return { class: 'class', school: 'school' }[field];
+}
+
+export function displayQueryModeEnum2(field: API.Query_modeEnum2) {
+ return { class: 'class', school: 'school' }[field];
+}
+
+export function displayQueryModeEnum3(field: API.Query_modeEnum3) {
+ return { class: 'class', school: 'school' }[field];
+}
+
+export function displayQueryModeEnum4(field: API.Query_modeEnum4) {
+ return { class: 'class', school: 'school' }[field];
+}
+
+export function displayQueryModeEnum5(field: API.Query_modeEnum5) {
+ return { class: 'class', school: 'school' }[field];
+}
+
+export function displayQueryModeEnum6(field: API.Query_modeEnum6) {
+ return { class: 'class', school: 'school' }[field];
+}
+
+export function displayQueryModeEnum7(field: API.Query_modeEnum7) {
+ return { class: 'class', school: 'school' }[field];
+}
diff --git a/src/service/index.ts b/src/service/index.ts
index c027905..0db788c 100644
--- a/src/service/index.ts
+++ b/src/service/index.ts
@@ -4,14 +4,17 @@ export * from './types';
export * from './displayEnumLabel';
export * from './renzheng';
-export * from './shujuzidianxiang';
-export * from './shujuzidianleixing';
+export * from './banjifenxi';
+export * from './shujuzidixiang';
+export * from './shujuzidileixing';
+export * from './kaoshitongji';
export * from './wenjianguanli';
export * from './wenjianqiepianguanli';
export * from './yuejuanjindu';
export * from './yuejuanzhiliang';
export * from './yuejuanrenwujilu';
export * from './yuejuanrenwu';
+export * from './wode';
export * from './xitongyonghu';
export * from './xitongxinxi';
export * from './laoshichengjifenxi';
diff --git a/src/service/kaoshitongji.ts b/src/service/kaoshitongji.ts
new file mode 100644
index 0000000..ea18511
--- /dev/null
+++ b/src/service/kaoshitongji.ts
@@ -0,0 +1,405 @@
+/* eslint-disable */
+// @ts-ignore
+import request from '@/http/vue-query';
+import { CustomRequestOptions } from '@/http/types';
+
+import * as API from './types';
+
+/** 获取试题统计 根据条件查询学科的试题统计数据,支持按班级、学校筛选,支持多种分析类型和指标 POST /exam-statistics/average-comparison */
+export async function examStatisticsAverageComparisonUsingPost({
+ body,
+ options,
+}: {
+ body: API.QuestionAnalysisRequest;
+ options?: CustomRequestOptions;
+}) {
+ return request<
+ API.Response & {
+ data?: API.QuestionAnalysisResponse;
+ }
+ >('/exam-statistics/average-comparison', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
+
+/** 获取总分分档上线人数分布 根据条件获取总分分档上线人数分布,支持按学校或班级分组统计 POST /exam-statistics/class-analysis */
+export async function examStatisticsClassAnalysisUsingPost({
+ body,
+ options,
+}: {
+ body: API.ClassAnalysisRequest;
+ options?: CustomRequestOptions;
+}) {
+ return request<
+ API.Response & {
+ data?: API.ClassAnalysisResponse;
+ }
+ >('/exam-statistics/class-analysis', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
+
+/** 按班级导出 按班级导出成绩数据,每个班级一个sheet,文件名使用考试名称+成绩表 POST /exam-statistics/export-by-classes */
+export async function examStatisticsExportByClassesUsingPost({
+ body,
+ options,
+}: {
+ body: API.ClassExportRequest;
+ options?: CustomRequestOptions;
+}) {
+ return request('/exam-statistics/export-by-classes', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
+
+/** 分校导出 按学校分别导出成绩数据,返回压缩包,每个学校一个文件夹 POST /exam-statistics/export-by-schools */
+export async function examStatisticsExportBySchoolsUsingPost({
+ body,
+ options,
+}: {
+ body: API.SchoolExportRequest;
+ options?: CustomRequestOptions;
+}) {
+ return request('/exam-statistics/export-by-schools', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
+
+/** 导出总分分档分析Excel 导出总分分档分析数据到Excel文件 POST /exam-statistics/export-class-analysis-excel */
+export async function examStatisticsExportClassAnalysisExcelUsingPost({
+ body,
+ options,
+}: {
+ body: API.ClassAnalysisExcelExportRequest;
+ options?: CustomRequestOptions;
+}) {
+ return request('/exam-statistics/export-class-analysis-excel', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
+
+/** 导出班级成绩单 导出班级成绩单ZIP文件,每个班级一个Excel,每个科目一个sheet,包含小分排名的所有指标 POST /exam-statistics/export-class-reports */
+export async function examStatisticsExportClassReportsUsingPost({
+ body,
+ options,
+}: {
+ body: API.ClassReportExportRequest;
+ options?: CustomRequestOptions;
+}) {
+ return request('/exam-statistics/export-class-reports', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
+
+/** 导出成绩排名Excel 根据条件导出学生成绩排名Excel文件,支持复合表头格式 POST /exam-statistics/export-excel */
+export async function examStatisticsExportExcelUsingPost({
+ body,
+ options,
+}: {
+ body: API.ExcelExportRequest;
+ options?: CustomRequestOptions;
+}) {
+ return request('/exam-statistics/export-excel', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
+
+/** 导出试题分析Excel 导出试题分析数据到Excel文件,包含各题目的统计指标和对比数据 POST /exam-statistics/export-question-analysis-excel */
+export async function examStatisticsExportQuestionAnalysisExcelUsingPost({
+ body,
+ options,
+}: {
+ body: API.QuestionAnalysisExcelExportRequest;
+ options?: CustomRequestOptions;
+}) {
+ return request('/exam-statistics/export-question-analysis-excel', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
+
+/** 导出题目排名Excel(小分排名) 根据条件导出学生题目级成绩排名Excel文件 POST /exam-statistics/export-question-ranking-excel */
+export async function examStatisticsExportQuestionRankingExcelUsingPost({
+ body,
+ options,
+}: {
+ body: API.QuestionExcelExportRequest;
+ options?: CustomRequestOptions;
+}) {
+ return request('/exam-statistics/export-question-ranking-excel', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
+
+/** 导出小分表数据 导出小分表数据到Excel文件,包含学生基本信息、成绩和各题目得分 POST /exam-statistics/export-question-ranking-table */
+export async function examStatisticsExportQuestionRankingTableUsingPost({
+ body,
+ options,
+}: {
+ body: API.QuestionRankingRequest;
+ options?: CustomRequestOptions;
+}) {
+ return request('/exam-statistics/export-question-ranking-table', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
+
+/** 导出均分对比Excel 导出均分分析数据到Excel文件,包含各班级/学校的统计指标对比 POST /exam-statistics/export-score-analysis-excel */
+export async function examStatisticsExportScoreAnalysisExcelUsingPost({
+ body,
+ options,
+}: {
+ body: API.ScoreAnalysisExcelExportRequest;
+ options?: CustomRequestOptions;
+}) {
+ return request('/exam-statistics/export-score-analysis-excel', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
+
+/** 导出统计分析Excel 导出统计分析数据到Excel文件,支持名次统计、分数段统计、比例段统计 POST /exam-statistics/export-statistics-analysis-excel */
+export async function examStatisticsExportStatisticsAnalysisExcelUsingPost({
+ body,
+ options,
+}: {
+ body: API.StatisticsAnalysisExcelExportRequest;
+ options?: CustomRequestOptions;
+}) {
+ return request('/exam-statistics/export-statistics-analysis-excel', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
+
+/** 导出学科分档分析Excel 导出学科分档分析数据到Excel文件 POST /exam-statistics/export-subject-class-analysis-excel */
+export async function examStatisticsExportSubjectClassAnalysisExcelUsingPost({
+ body,
+ options,
+}: {
+ body: API.SubjectClassAnalysisExcelExportRequest;
+ options?: CustomRequestOptions;
+}) {
+ return request(
+ '/exam-statistics/export-subject-class-analysis-excel',
+ {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ }
+ );
+}
+
+/** 获取题目级排名(小分排名) 根据考试ID和学科ID查询学生的题目级成绩排名 POST /exam-statistics/question-ranking */
+export async function examStatisticsQuestionRankingUsingPost({
+ body,
+ options,
+}: {
+ body: API.QuestionRankingRequest;
+ options?: CustomRequestOptions;
+}) {
+ return request<
+ API.Response & {
+ data?: API.QuestionRankingResponse;
+ }
+ >('/exam-statistics/question-ranking', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
+
+/** 获取均分分析 根据条件查询学校或班级的均分分析数据,包括各类统计指标和排名 POST /exam-statistics/score-analysis */
+export async function examStatisticsScoreAnalysisUsingPost({
+ body,
+ options,
+}: {
+ body: API.ScoreAnalysisRequest;
+ options?: CustomRequestOptions;
+}) {
+ return request<
+ API.Response & {
+ data?: API.ScoreAnalysisResponse;
+ }
+ >('/exam-statistics/score-analysis', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
+
+/** 获取成绩排名 根据条件查询学生成绩排名,支持按班级、学校筛选,支持联考模式和赋分计算,支持按姓名、学号、考号搜索 POST /exam-statistics/score-ranking */
+export async function examStatisticsScoreRankingUsingPost({
+ body,
+ options,
+}: {
+ body: API.ScoreRankingRequest;
+ options?: CustomRequestOptions;
+}) {
+ return request<
+ API.Response & {
+ data?: API.ScoreRankingResponse;
+ }
+ >('/exam-statistics/score-ranking', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
+
+/** 获取统计配置 获取指定考试的统计配置信息,支持多种配置类型 GET /exam-statistics/statis-config */
+export async function examStatisticsStatisConfigUsingGet({
+ params,
+ options,
+}: {
+ // 叠加生成的Param类型 (非body参数openapi默认没有生成对象)
+ params: API.examStatisticsStatisConfigUsingGetParams;
+ options?: CustomRequestOptions;
+}) {
+ return request<
+ API.Response & {
+ data?: unknown;
+ }
+ >('/exam-statistics/statis-config', {
+ method: 'GET',
+ params: {
+ ...params,
+ },
+ ...(options || {}),
+ });
+}
+
+/** 设置统计配置 设置考试的统计配置,支持多种配置类型和规则 POST /exam-statistics/statis-config */
+export async function examStatisticsStatisConfigUsingPost({
+ body,
+ options,
+}: {
+ body: API.SetLevelConfigRequest;
+ options?: CustomRequestOptions;
+}) {
+ return request<
+ API.Response & {
+ data?: API.SetLevelConfigResponse;
+ }
+ >('/exam-statistics/statis-config', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
+
+/** 获取分段统计分析数据 根据分析类型获取统计分析数据,支持名次统计、分数段统计、比例段统计 POST /exam-statistics/statistics-analysis */
+export async function examStatisticsStatisticsAnalysisUsingPost({
+ body,
+ options,
+}: {
+ body: API.StatisticsAnalysisRequest;
+ options?: CustomRequestOptions;
+}) {
+ return request<
+ API.Response & {
+ data?: API.StatisticsAnalysisResponse;
+ }
+ >('/exam-statistics/statistics-analysis', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
+
+/** 获取学科分档上线人数分布 根据条件获取学科分档上线人数分布,支持按学校或班级分组统计 POST /exam-statistics/subject-class-analysis */
+export async function examStatisticsSubjectClassAnalysisUsingPost({
+ body,
+ options,
+}: {
+ body: API.SubjectClassAnalysisRequest;
+ options?: CustomRequestOptions;
+}) {
+ return request<
+ API.Response & {
+ data?: API.SubjectClassAnalysisResponse;
+ }
+ >('/exam-statistics/subject-class-analysis', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
diff --git a/src/service/laoshichengjifenxi.ts b/src/service/laoshichengjifenxi.ts
index 3c50ada..4c8420f 100644
--- a/src/service/laoshichengjifenxi.ts
+++ b/src/service/laoshichengjifenxi.ts
@@ -5,6 +5,28 @@ import { CustomRequestOptions } from '@/http/types';
import * as API from './types';
+/** 获取答题卡详情 根据答题卡ID获取答题卡详细信息,包括学生信息、成绩信息、客观题答案、主观题答案等 GET /teacher-analysis/${param0} */
+export async function teacherAnalysisInfoIdUsingGet({
+ params,
+ options,
+}: {
+ // 叠加生成的Param类型 (非body参数openapi默认没有生成对象)
+ params: API.teacherAnalysisInfoIdUsingGetParams;
+ options?: CustomRequestOptions;
+}) {
+ const { info_id: param0, ...queryParams } = params;
+
+ return request<
+ API.Response & {
+ data?: API.GetAnswerSheetResponse;
+ }
+ >(`/teacher-analysis/${param0}`, {
+ method: 'GET',
+ params: { ...queryParams },
+ ...(options || {}),
+ });
+}
+
/** 老师关注学生 老师关注指定学生 POST /teacher-analysis/attention-student */
export async function teacherAnalysisAttentionStudentUsingPost({
body,
@@ -27,6 +49,28 @@ export async function teacherAnalysisAttentionStudentUsingPost({
});
}
+/** 获取班级考试对比(纵向对比) 获取指定班级的所有考试对比数据,包括班级平均分、排名、标准分和年级前50名人数 POST /teacher-analysis/class-exam-comparison */
+export async function teacherAnalysisClassExamComparisonUsingPost({
+ body,
+ options,
+}: {
+ body: API.ClassExamComparisonRequest;
+ options?: CustomRequestOptions;
+}) {
+ return request<
+ API.Response & {
+ data?: API.ClassExamComparisonData;
+ }
+ >('/teacher-analysis/class-exam-comparison', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
+
/** 获取班级下所有学生成绩列表 获取指定科目、年级、班级的所有学生成绩列表 POST /teacher-analysis/class-student-score-list */
export async function teacherAnalysisClassStudentScoreListUsingPost({
body,
@@ -87,6 +131,28 @@ export async function teacherAnalysisExportScoreSheetUsingPost({
});
}
+/** 导出学生列表 导出学生列表为Excel文件 POST /teacher-analysis/export-student-list */
+export async function teacherAnalysisExportStudentListUsingPost({
+ body,
+ options,
+}: {
+ body: API.ExportStudentListRequest;
+ options?: CustomRequestOptions;
+}) {
+ return request<
+ API.Response & {
+ data?: API.ExportStudentListResponse;
+ }
+ >('/teacher-analysis/export-student-list', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
+
/** 获取重点学生情况 获取指定科目、年级、班级的重点学生情况 POST /teacher-analysis/key-student */
export async function teacherAnalysisKeyStudentUsingPost({
body,
@@ -109,7 +175,7 @@ export async function teacherAnalysisKeyStudentUsingPost({
});
}
-/** 获取个人报告 获取指定学生的个人报告 POST /teacher-analysis/personal-report */
+/** 获取个人报告 获取指定学生的个人成绩报告,包含考试总结、学习情况分析和难度分析 POST /teacher-analysis/personal-report */
export async function teacherAnalysisPersonalReportUsingPost({
body,
options,
@@ -131,6 +197,28 @@ export async function teacherAnalysisPersonalReportUsingPost({
});
}
+/** 获取名次统计 根据考试ID、科目ID、班级ID获取名次统计数据 POST /teacher-analysis/rank-statistics */
+export async function teacherAnalysisRankStatisticsUsingPost({
+ body,
+ options,
+}: {
+ body: API.RankStatisticsRequest;
+ options?: CustomRequestOptions;
+}) {
+ return request<
+ API.Response & {
+ data?: API.RankStatisticsResponse;
+ }
+ >('/teacher-analysis/rank-statistics', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
+
/** 获取最近考试情况 获取指定科目、年级、班级的最近考试统计数据 POST /teacher-analysis/recent-exam-stats */
export async function teacherAnalysisRecentExamStatsUsingPost({
body,
@@ -153,6 +241,28 @@ export async function teacherAnalysisRecentExamStatsUsingPost({
});
}
+/** 获取均分对比分析(横向对比) 获取指定考试、科目的均分对比分析数据 POST /teacher-analysis/score-analysis */
+export async function teacherAnalysisScoreAnalysisUsingPost({
+ body,
+ options,
+}: {
+ body: API.ScoreAnalysisRequest;
+ options?: CustomRequestOptions;
+}) {
+ return request<
+ API.Response & {
+ data?: API.ScoreAnalysisResponse;
+ }
+ >('/teacher-analysis/score-analysis', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
+
/** 获取成绩单 获取指定科目、年级、班级的成绩单 POST /teacher-analysis/score-sheet */
export async function teacherAnalysisScoreSheetUsingPost({
body,
@@ -175,6 +285,28 @@ export async function teacherAnalysisScoreSheetUsingPost({
});
}
+/** 获取学生答题图片 根据题目ID和学号获取学生的答题图片URL GET /teacher-analysis/student-answer-image */
+export async function teacherAnalysisStudentAnswerImageUsingGet({
+ params,
+ options,
+}: {
+ // 叠加生成的Param类型 (非body参数openapi默认没有生成对象)
+ params: API.teacherAnalysisStudentAnswerImageUsingGetParams;
+ options?: CustomRequestOptions;
+}) {
+ return request<
+ API.Response & {
+ data?: string;
+ }
+ >('/teacher-analysis/student-answer-image', {
+ method: 'GET',
+ params: {
+ ...params,
+ },
+ ...(options || {}),
+ });
+}
+
/** 获取个人历次考试详情 获取指定学生的历次考试详情 POST /teacher-analysis/student-exam-history */
export async function teacherAnalysisStudentExamHistoryUsingPost({
body,
@@ -197,7 +329,7 @@ export async function teacherAnalysisStudentExamHistoryUsingPost({
});
}
-/** 获取学生列表 获取指定年级、班级的学生列表 POST /teacher-analysis/student-list */
+/** 获取学生列表 获取指定考试科目、年级、班级的学生列表,分为已关注和其他学生 POST /teacher-analysis/student-list */
export async function teacherAnalysisStudentListUsingPost({
body,
options,
diff --git a/src/service/shujuzidianleixing.ts b/src/service/shujuzidileixing.ts
similarity index 100%
rename from src/service/shujuzidianleixing.ts
rename to src/service/shujuzidileixing.ts
diff --git a/src/service/shujuzidianxiang.ts b/src/service/shujuzidixiang.ts
similarity index 100%
rename from src/service/shujuzidianxiang.ts
rename to src/service/shujuzidixiang.ts
diff --git a/src/service/types.ts b/src/service/types.ts
index f5462df..ba291ba 100644
--- a/src/service/types.ts
+++ b/src/service/types.ts
@@ -1,6 +1,31 @@
/* eslint-disable */
// @ts-ignore
+export type AdvantageAnalysis = {
+ /** 班级分析 */
+ class_analysis?: ClassAnalysis;
+ /** 年级分析 */
+ grade_analysis?: GradeAnalysis;
+ /** 同分数段分析 */
+ score_range_analysis?: ScoreRangeAnalysis;
+};
+
+export enum Analysis_typeEnum {
+ 'question' = 'question',
+ 'major_question' = 'major_question',
+ 'objective_subjective' = 'objective_subjective',
+}
+
+export type IAnalysis_typeEnum = keyof typeof Analysis_typeEnum;
+
+export enum Analysis_typeEnum2 {
+ 'question' = 'question',
+ 'major_question' = 'major_question',
+ 'objective_subjective' = 'objective_subjective',
+}
+
+export type IAnalysis_typeEnum2 = keyof typeof Analysis_typeEnum2;
+
export type AssignSysRoleRequest = {
/** 角色ID列表 */
role_ids: number[];
@@ -9,7 +34,7 @@ export type AssignSysRoleRequest = {
export type authGetCodeUsingGetParams = {
/** 手机号 */
phone: string;
- /** 验证类型 */
+ /** 验证类型(1-登录,2-重置密码) */
verify_type: number;
};
@@ -20,6 +45,11 @@ export type authVerifyResetCodeUsingGetParams = {
code: string;
};
+export type AverageComparisonAnalysis = {
+ /** 科目分析列表 */
+ subjects?: SubjectAnalysisItem[];
+};
+
export type BatchCreateMarkingTaskRecordRequest = {
/** 批量数据 */
batch_data: CreateMarkingTaskRecordRequest[];
@@ -125,21 +155,209 @@ export type CheckScoreResponse = {
total_score?: number;
};
+export type ClassAnalysis = {
+ /** 科目分析列表 */
+ subjects?: SubjectAnalysisItem[];
+};
+
+export type ClassAnalysisExcelExportRequest = {
+ /** 班级字典key列表(class模式时使用) */
+ class_ids?: string[];
+ /** 考试ID */
+ exam_id: number;
+ /** 文件名,可选 */
+ file_name?: string;
+ /** 查询模式:school/class */
+ query_mode: string;
+ /** 学校ID列表(school模式时使用) */
+ school_ids?: number[];
+};
+
+export type ClassAnalysisGroup = {
+ /** 学校ID或班级字典key */
+ group_key?: string;
+ /** 学校名或班级名 */
+ group_name?: string;
+ /** 各档次详情 */
+ levels?: ClassLevelDetail[];
+ /** 该组学生总数 */
+ student_count?: number;
+};
+
+export type ClassAnalysisRequest = {
+ /** 班级字典key列表(class模式时使用) */
+ class_ids?: string[];
+ /** 考试ID */
+ exam_id: number;
+ /** 查询模式:school/class */
+ query_mode: string;
+ /** 学校ID列表(school模式时使用) */
+ school_ids?: number[];
+};
+
+export type ClassAnalysisResponse = {
+ /** 各档次汇总统计 */
+ class_levels?: ClassLevelSummary[];
+ /** 考试ID */
+ exam_id?: number;
+ /** 考试名称 */
+ exam_name?: string;
+ /** 各组分档统计 */
+ groups?: ClassAnalysisGroup[];
+ /** 总学生数 */
+ total_students?: number;
+};
+
+export type ClassAverageRankingItem = {
+ /** 本班级平均排名 */
+ class_average_rank?: number;
+ /** 比较班级平均排名 */
+ compare_average_rank?: number;
+ /** 考试日期 */
+ exam_date?: string;
+};
+
+export type ClassAverageScoreItem = {
+ /** 本班级平均分 */
+ class_average_score?: number;
+ /** 比较班级平均分 */
+ compare_average_score?: number;
+ /** 考试日期 */
+ exam_date?: string;
+};
+
+export type ClassComparisonRequest = {
+ /** 班级标识 */
+ class_key: number;
+ /** 比较班级标识 */
+ compare_class_key: number;
+ /** 考试ID */
+ exam_id: number;
+ /** 科目ID,如果为0则获取老师所带的所有科目 */
+ subject_id?: number;
+ /** 前N名数量 */
+ top_n: number;
+};
+
+export type ClassComparisonResponse = {
+ /** 平均分排名对比数据 */
+ average_rankings?: ClassAverageRankingItem[];
+ /** 班级平均分对比数据 */
+ average_scores?: ClassAverageScoreItem[];
+ /** 班级标识 */
+ class_key?: number;
+ /** 比较班级标识 */
+ compare_class_key?: number;
+ /** 考试ID */
+ exam_id?: number;
+ /** 科目ID */
+ subject_id?: number;
+ /** 前N名数量 */
+ top_n?: number;
+ /** 年级前N名数量对比数据 */
+ top_n_counts?: ClassTopNCountItem[];
+};
+
+export type ClassExamComparisonData = {
+ /** 考试对比列表 */
+ exam_list?: ExamComparisonItem[];
+};
+
+export type ClassExamComparisonRequest = {
+ /** 班级 */
+ class_key: number;
+ /** 年级 */
+ grade_key: number;
+ /** 科目ID */
+ subject_id?: number;
+};
+
+export type ClassExportRequest = {
+ /** 班级字典key列表,必填 */
+ class_ids: string[];
+ /** 考试ID,必填 */
+ exam_id: number;
+ /** 角色标识,用于权限过滤 */
+ role_key?: number;
+ /** 教师权限参数(可选) */
+ teacher_id?: number;
+};
+
+export type ClassLevelDetail = {
+ /** 累计人数(该档次及以上) */
+ cumulative_count?: number;
+ /** 累计比例 */
+ cumulative_rate?: number;
+ /** 档次名称 */
+ level?: string;
+ /** 临界生数量 */
+ marginal_count?: number;
+ /** 该档次学生数 */
+ student_count?: number;
+};
+
+export type ClassLevelSummary = {
+ /** 档次名称:一档、二档、三档 */
+ level?: string;
+ /** 占总数比例 */
+ percentage?: number;
+ /** 该档次总人数 */
+ total_count?: number;
+};
+
+export type ClassReportExportRequest = {
+ /** 班级字典key列表,当query_mode=class时必填 */
+ class_ids?: string[];
+ /** 考试ID,必填 */
+ exam_id: number;
+ /** 查询模式:class(按班级), school(按学校,用于联考) */
+ query_mode: 'class' | 'school';
+ /** 角色标识,用于权限过滤 */
+ role_key?: number;
+ /** 学校ID列表,当query_mode=school时必填 */
+ school_ids?: number[];
+ /** 教师权限参数(可选) */
+ teacher_id?: number;
+};
+
export type ClassStudentScoreInfo = {
/** 总得分 */
all_score?: number;
+ /** 班级差异方向 */
+ class_diff_direction?: string;
+ /** 班级差异排名 */
+ class_diff_rank?: number;
/** 班级排名 */
class_rank?: number;
+ /** 考试科目ID */
+ exam_subject_id?: number;
/** 总分 */
full_score?: number;
+ /** 年级差异方向 */
+ grade_diff_direction?: string;
+ /** 年级差异排名 */
+ grade_diff_rank?: number;
/** 年级排名 */
grade_rank?: number;
+ /** 是否缺考 */
+ is_absent?: boolean;
/** 学生考试号 */
student_exam_number?: string;
/** 学生姓名 */
student_name?: string;
/** 学生学号 */
student_number?: string;
+ /** 科目ID */
+ subject_id?: number;
+};
+
+export type ClassTopNCountItem = {
+ /** 本班级前N名数量 */
+ class_top_n_count?: number;
+ /** 比较班级前N名数量 */
+ compare_top_n_count?: number;
+ /** 考试日期 */
+ exam_date?: string;
};
export type CodeLoginRequest = {
@@ -322,6 +540,21 @@ export type dictionaryTypesIdUsingPutParams = {
id: number;
};
+export type DifficultyAnalysis = {
+ /** 满分 */
+ full_score?: number;
+ /** 难度等级 */
+ level?: string;
+ /** 失分比重 */
+ miss_percent?: number;
+ /** 题目ID列表 */
+ question_ids?: number[];
+ /** 题号列表 */
+ question_numbers?: string[];
+ /** 得分 */
+ score?: number;
+};
+
export enum Emphasis_typeEnum {
'up' = 'up',
'down' = 'down',
@@ -331,6 +564,21 @@ export enum Emphasis_typeEnum {
export type IEmphasis_typeEnum = keyof typeof Emphasis_typeEnum;
+export type ExamComparisonItem = {
+ /** 平均分排名 */
+ average_rank?: number;
+ /** 班级平均分 */
+ class_average?: number;
+ /** 班级标准分 */
+ class_standard?: number;
+ /** 考试ID */
+ exam_id?: number;
+ /** 考试名称 */
+ exam_name?: string;
+ /** 年级前50名人数 */
+ grade_top50_count?: number;
+};
+
export type ExamMarkingTaskListResponse = {
/** 考试列表 */
list?: ExamMarkingTaskResponse[];
@@ -355,6 +603,67 @@ export type ExamMarkingTaskResponse = {
subjects?: SubjectInfo[];
};
+export type examStatisticsStatisConfigUsingGetParams = {
+ /** 考试ID */
+ exam_id: number;
+ /** 配置类型 */
+ config_type: string;
+ /** 科目ID(可选,不传则返回所有科目配置) */
+ subject_id?: number;
+};
+
+export type ExamSummary = {
+ /** 总分 */
+ all_score?: number;
+ /** 班级平均分 */
+ class_average_score?: number;
+ /** 班级最高分 */
+ class_max_score?: number;
+ /** 班级成员数量 */
+ class_member_count?: number;
+ /** 班级排名 */
+ class_rank?: number;
+ /** 满分 */
+ full_score?: number;
+ /** 年级平均分 */
+ grade_average_score?: number;
+ /** 年级最高分 */
+ grade_max_score?: number;
+ /** 年级成员数量 */
+ grade_member_count?: number;
+ /** 年级排名 */
+ grade_rank?: number;
+};
+
+export type ExcelExportRequest = {
+ /** 筛选条件(根据query_mode选择使用) */
+ class_ids?: string[];
+ /** 考试ID,必填 */
+ exam_id: number;
+ /** 文件名,可选 */
+ file_name?: string;
+ /** 学科选择: */
+ include_total_score?: boolean;
+ /** 指标选择 */
+ indicators: string[];
+ /** 分页参数 */
+ page?: number;
+ /** 每页数量,默认50 */
+ page_size?: number;
+ /** 查询模式:class(按班级), school(按学校,用于联考) */
+ query_mode: 'class' | 'school';
+ /** 角色标识,用于权限过滤 */
+ role_key?: number;
+ /** 学校ID列表,当query_mode=school时必填 */
+ school_ids?: number[];
+ /** 搜索参数 */
+ search_keyword?: string;
+ /** 考试科目ID列表,多选 */
+ subject_ids?: number[];
+ /** 教师权限参数(可选) */
+ teacher_id?: number;
+};
+
export type ExportScoreSheetRequest = {
/** 查询班级 */
class_key: number;
@@ -366,6 +675,24 @@ export type ExportScoreSheetRequest = {
subject_id?: number;
};
+export type ExportStudentListRequest = {
+ /** 班级ID */
+ class_id: number;
+ /** 考试科目ID */
+ exam_subject_id: number;
+ /** 年级ID */
+ grade_id: number;
+ /** 关键词 */
+ keyword?: string;
+};
+
+export type ExportStudentListResponse = {
+ /** 文件名 */
+ file_name?: string;
+ /** 文件下载链接 */
+ file_url?: string;
+};
+
export type FileDownloadSession = {
/** 切片大小 */
chunk_size?: number;
@@ -584,6 +911,33 @@ export type FileUploadSession = {
uploader_id?: number;
};
+export type GetAnswerSheetResponse = {
+ /** 总分 */
+ all_score?: number;
+ /** 答题卡图片路径 */
+ answer_sheet_images?: string;
+ /** 附加题得分 */
+ bonus_score?: number;
+ /** 班级 */
+ class?: string;
+ /** 班级排名 */
+ class_rank?: number;
+ /** 年级排名 */
+ grade_rank?: number;
+ /** 客观题答案列表 */
+ objective_answer?: ObjectiveAnswer[];
+ /** 客观题得分 */
+ objective_score?: number;
+ /** 学生考号 */
+ student_exam_number?: string;
+ /** 学生姓名 */
+ student_name?: string;
+ /** 主观题答案列表 */
+ subjective_answer?: SubjectiveAnswer[];
+ /** 主观题得分 */
+ subjective_score?: number;
+};
+
export type GetClassStudentScoreListRequest = {
/** 查询班级 */
class_key: number;
@@ -597,6 +951,8 @@ export type GetClassStudentScoreListRequest = {
page_size: number;
/** 考试科目ID */
subject_id?: number;
+ /** 取前N名:正数表示进步最大的前N名,负数表示退步最大的前N名,0或不传表示获取全班所有学生 */
+ top_n?: number;
};
export type GetClassStudentScoreListResponse = {
@@ -651,16 +1007,51 @@ export type GetKeyStudentResponse = {
total?: number;
};
+export type GetMyProfileResponse = {
+ /** 创建时间 */
+ created_time?: string;
+ /** 邮箱 */
+ email?: string;
+ /** 是否管理员 */
+ is_admin?: boolean;
+ /** 是否启用 */
+ is_enable?: number;
+ /** 昵称 */
+ nickname?: string;
+ /** 手机号 */
+ phone?: string;
+ /** 用户ID */
+ user_id?: string;
+ /** 用户名 */
+ username?: string;
+};
+
export type GetPersonalReportRequest = {
- /** 学生学号 */
+ /** 班级KEY */
+ class_key: number;
+ /** 考试ID */
+ exam_id: number;
+ /** 年级KEY */
+ grade_key: number;
+ /** 学号 */
student_number: string;
- /** 考试科目ID */
+ /** 科目ID */
subject_id?: number;
};
export type GetPersonalReportResponse = {
- /** 个人报告 */
- report?: PersonalReportInfo;
+ /** 优劣势分析 */
+ advantage_analysis?: AdvantageAnalysis;
+ /** 均分对比分析 */
+ average_comparison_analysis?: AverageComparisonAnalysis;
+ /** 难度分析 */
+ difficulty_analysis?: DifficultyAnalysis[];
+ /** 考试总结 */
+ exam_summary?: ExamSummary;
+ /** 学习情况分析 */
+ learning_situation_analysis?: LearningSituationAnalysis;
+ /** 成绩趋势 */
+ score_trend?: ScoreTrendItem[];
};
export type GetQuestionMarkingQualityResponse = {
@@ -668,6 +1059,10 @@ export type GetQuestionMarkingQualityResponse = {
average_score?: number;
/** 评价方法 */
evaluate_method?: string;
+ /** 终评老师列表 */
+ final_teachers?: QuestionMarkingQualityTeacher[];
+ /** 初评老师列表 */
+ initial_teachers?: QuestionMarkingQualityTeacher[];
/** 最高分 */
max_score?: number;
/** 最低分 */
@@ -678,8 +1073,6 @@ export type GetQuestionMarkingQualityResponse = {
question_major?: string;
/** 小题号 */
question_minor?: string;
- /** 按学校分组的阅卷质量数据 */
- school_groups?: QuestionMarkingQualitySchool[];
/** 所有学校下所有老师的总分数 */
total_score?: number;
};
@@ -720,6 +1113,8 @@ export type GetRecentExamStatsResponse = {
excellent_class_scoring_rate?: number;
/** 年级优秀率 */
excellent_grade_scoring_rate?: number;
+ /** 总分 */
+ full_score?: number;
/** 班级良好率 */
good_class_scoring_rate?: number;
/** 年级良好率 */
@@ -817,27 +1212,21 @@ export type GetStudentExamHistoryResponse = {
};
export type GetStudentListRequest = {
- /** 查询班级 */
- class_key: number;
- /** 查询年级 */
- grade_key: number;
+ /** 班级ID */
+ class_id: number;
+ /** 考试科目ID */
+ exam_subject_id: number;
+ /** 年级ID */
+ grade_id: number;
/** 关键词 */
keyword?: string;
- /** 页码 */
- page: number;
- /** 每页大小 */
- page_size: number;
};
export type GetStudentListResponse = {
- /** 学生列表 */
- list?: StudentListInfo[];
- /** 页码 */
- page?: number;
- /** 每页大小 */
- page_size?: number;
- /** 总记录数 */
- total?: number;
+ /** 已关注的学生列表 */
+ attentioned_students?: StudentInfo[];
+ /** 其他学生列表 */
+ other_students?: StudentInfo[];
};
export type GetStudentMarkingQualityResponse = {
@@ -865,6 +1254,57 @@ export type GetTrendResponse = {
trend_list?: TrendInfo[];
};
+export type GradeAnalysis = {
+ /** 科目分析列表 */
+ subjects?: SubjectAnalysisItem[];
+};
+
+export type GroupAnalysisResult = {
+ /** 平均分(可选指标) */
+ average?: number;
+ /** 难度和区分度相关指标待后续实现 */
+ difficulty?: number;
+ /** 难度描述(可选指标) */
+ difficulty_desc?: string;
+ /** 区分度(可选指标) */
+ discrimination?: number;
+ /** 区分度描述(可选指标) */
+ discrimination_desc?: string;
+ /** 分组标识(班级名/学校名) */
+ group_key?: string;
+ /** 分组显示名称 */
+ group_name?: string;
+ /** 标准差(可选指标) */
+ std_dev?: number;
+ /** 学生数量 */
+ student_count?: number;
+};
+
+export type GroupQuestionResult = {
+ /** 平均分(可选指标) */
+ average?: number;
+ /** 难度(可选指标) */
+ difficulty?: number;
+ /** 难度描述(可选指标) */
+ difficulty_desc?: string;
+ /** 区分度(可选指标) */
+ discrimination?: number;
+ /** 区分度描述(可选指标) */
+ discrimination_desc?: string;
+ /** 满分人数(可选指标) */
+ full_score_count?: number;
+ /** 满分人数占比(可选指标) */
+ full_score_rate?: number;
+ /** 分组标识 */
+ group_key?: string;
+ /** 标准差(可选指标) */
+ std_dev?: number;
+ /** 零分人数(可选指标) */
+ zero_score_count?: number;
+ /** 零分人数占比(可选指标) */
+ zero_score_rate?: number;
+};
+
export type KeyStudentInfo = {
/** 总得分 */
all_score?: number;
@@ -890,6 +1330,30 @@ export type KeyStudentInfo = {
student_number?: string;
};
+export type LearningSituationAnalysis = {
+ /** 总分 */
+ all_score?: number;
+ /** 班级总人数 */
+ class_member_count?: number;
+ /** 班级排名 */
+ class_rank?: number;
+ /** 分数段数据 */
+ data?: ScoreScopeData[];
+ /** 年级总人数 */
+ grade_member_count?: number;
+ /** 年级排名 */
+ grade_rank?: number;
+};
+
+export type LevelStat = {
+ /** 人数 */
+ count?: number;
+ /** 排名 */
+ rank?: number;
+ /** 比例 */
+ rate?: number;
+};
+
export type LoginRequest = {
/** 密码 */
password: string;
@@ -997,7 +1461,7 @@ export type markingQualityExportTeacherDetailUsingGetParams = {
order_by?: 'time_asc' | 'time_desc' | 'score_asc' | 'score_desc';
};
-export type markingQualityQuestionQualityUsingGetParams = {
+export type markingQualityQuestionUsingGetParams = {
/** 题目ID */
question_id: number;
};
@@ -1069,6 +1533,8 @@ export type markingQualityUsingGetParams = {
};
export type MarkingTaskByQuestionItem = {
+ /** 评价方法 */
+ evaluate_method?: string;
/** 已阅卷数量 */
marked_quantity?: number;
/** 未阅卷数量 */
@@ -1253,6 +1719,31 @@ export type markingTasksUsingGetParams = {
academic_year?: string;
};
+export type MyChangePasswordRequest = {
+ /** 确认新密码 */
+ confirm_password: string;
+ /** 新密码 */
+ new_password: string;
+ /** 原密码 */
+ old_password: string;
+};
+
+export type MyChangePasswordResponse = {
+ /** 响应消息 */
+ message?: string;
+ /** 是否成功 */
+ success?: boolean;
+};
+
+export type ObjectiveAnswer = {
+ /** 最终得分 */
+ final_score?: number;
+ /** 满分 */
+ full_score?: number;
+ /** 题目ID */
+ question_id?: number;
+};
+
export type ObjectiveQualityItem = {
/** 平均分 */
average_score?: number;
@@ -1292,31 +1783,6 @@ export type ObjectiveTypeQualityItem = {
total_score?: number;
};
-export type PersonalReportInfo = {
- /** 平均分 */
- average_score?: number;
- /** 最好排名 */
- best_rank?: number;
- /** 最高分 */
- best_score?: number;
- /** 进步趋势 */
- improvement_trend?: string;
- /** 建议 */
- recommendation?: string;
- /** 学生姓名 */
- student_name?: string;
- /** 学生学号 */
- student_number?: string;
- /** 科目名称 */
- subject_name?: string;
- /** 总考试次数 */
- total_exams?: number;
- /** 最差排名 */
- worst_rank?: number;
- /** 最低分 */
- worst_score?: number;
-};
-
export type ProgressDetail = {
/** 已阅卷数量 */
marked_quantity?: number;
@@ -1324,6 +1790,155 @@ export type ProgressDetail = {
unmerged_quantity?: number;
};
+export enum Query_modeEnum {
+ 'class' = 'class',
+ 'school' = 'school',
+}
+
+export type IQuery_modeEnum = keyof typeof Query_modeEnum;
+
+export enum Query_modeEnum2 {
+ 'class' = 'class',
+ 'school' = 'school',
+}
+
+export type IQuery_modeEnum2 = keyof typeof Query_modeEnum2;
+
+export enum Query_modeEnum3 {
+ 'class' = 'class',
+ 'school' = 'school',
+}
+
+export type IQuery_modeEnum3 = keyof typeof Query_modeEnum3;
+
+export enum Query_modeEnum4 {
+ 'class' = 'class',
+ 'school' = 'school',
+}
+
+export type IQuery_modeEnum4 = keyof typeof Query_modeEnum4;
+
+export enum Query_modeEnum5 {
+ 'class' = 'class',
+ 'school' = 'school',
+}
+
+export type IQuery_modeEnum5 = keyof typeof Query_modeEnum5;
+
+export enum Query_modeEnum6 {
+ 'class' = 'class',
+ 'school' = 'school',
+}
+
+export type IQuery_modeEnum6 = keyof typeof Query_modeEnum6;
+
+export enum Query_modeEnum7 {
+ 'class' = 'class',
+ 'school' = 'school',
+}
+
+export type IQuery_modeEnum7 = keyof typeof Query_modeEnum7;
+
+export type QuestionAnalysisExcelExportRequest = {
+ /** 分析类型 */
+ analysis_type: 'question' | 'major_question' | 'objective_subjective';
+ /** 班级字典key列表,当query_mode=class时必填 */
+ class_ids?: string[];
+ /** 是否启用对比功能,true时返回各分组的对比数据 */
+ enable_comparison?: boolean;
+ /** 考试ID,必填 */
+ exam_id: number;
+ /** 文件名,可选 */
+ file_name?: string;
+ /** 指标列表 */
+ indicators: string[];
+ /** 查询模式:class(按班级), school(按学校,用于联考) */
+ query_mode: 'class' | 'school';
+ /** 题目关键词筛选(可选) */
+ question_keyword?: string;
+ /** 角色标识,用于权限过滤 */
+ role_key?: number;
+ /** 学校ID列表,当query_mode=school时必填 */
+ school_ids?: number[];
+ /** 学科ID,必填,只接受单科 */
+ subject_id: number;
+ /** 教师权限参数(可选) */
+ teacher_id?: number;
+};
+
+export type QuestionAnalysisRequest = {
+ /** 分析类型 */
+ analysis_type: 'question' | 'major_question' | 'objective_subjective';
+ /** 班级字典key列表,当query_mode=class时必填 */
+ class_ids?: string[];
+ /** 是否启用对比功能,true时返回各分组的对比数据 */
+ enable_comparison?: boolean;
+ /** 考试ID,必填 */
+ exam_id: number;
+ /** 指标列表 */
+ indicators: string[];
+ /** 查询模式:class(按班级), school(按学校,用于联考) */
+ query_mode: 'class' | 'school';
+ /** 题目关键词筛选(可选) */
+ question_keyword?: string;
+ /** 角色标识,用于权限过滤 */
+ role_key?: number;
+ /** 学校ID列表,当query_mode=school时必填 */
+ school_ids?: number[];
+ /** 学科ID,必填,只接受单科 */
+ subject_id: number;
+ /** 教师权限参数(可选) */
+ teacher_id?: number;
+};
+
+export type QuestionAnalysisResponse = {
+ /** 分析类型 */
+ analysis_type?: string;
+ /** 是否启用对比 */
+ enable_comparison?: boolean;
+ /** 各组分析结果(仅当enable_comparison=true时返回) */
+ groups?: GroupAnalysisResult[];
+ /** 题目分析结果 */
+ questions?: QuestionAnalysisResult[];
+ /** 参与统计的学生总数 */
+ student_count?: number;
+};
+
+export type QuestionAnalysisResult = {
+ /** 整体统计(所有筛选范围内的学生的统计) */
+ average?: number;
+ /** 正确答案(可选指标) */
+ correct_answer?: string;
+ /** 难度(可选指标) */
+ difficulty?: number;
+ /** 难度描述(可选指标) */
+ difficulty_desc?: string;
+ /** 区分度(可选指标) */
+ discrimination?: number;
+ /** 区分度描述(可选指标) */
+ discrimination_desc?: string;
+ /** 满分人数(可选指标) */
+ full_score_count?: number;
+ /** 满分人数占比(可选指标) */
+ full_score_rate?: number;
+ /** 分组对比数据(仅当enable_comparison=true时返回) */
+ group_results?: GroupQuestionResult[];
+ /** 满分 */
+ max_score?: number;
+ /** 题目标识 */
+ question_key?: string;
+ /** 题目名称 */
+ question_name?: string;
+ /** 题目类型:客观题/主观题 */
+ question_type?: string;
+ /** 标准差(可选指标) */
+ std_dev?: number;
+ /** 零分人数(可选指标) */
+ zero_score_count?: number;
+ /** 零分人数占比(可选指标) */
+ zero_score_rate?: number;
+};
+
export type QuestionAverageScoreComparisonResponse = {
/** 所有老师平均分 */
all_teachers_score?: QuestionAverageScoreResponse;
@@ -1352,6 +1967,54 @@ export type QuestionAverageScoreResponse = {
total_count?: number;
};
+export type QuestionDetail = {
+ /** 作答显示格式:作答/答案 */
+ answer_display?: string;
+ /** 正确答案 */
+ correct_answer?: string;
+ /** 满分 */
+ max_score?: number;
+ /** 题目ID */
+ question_id?: number;
+ /** 题目名称,如:客|一.1, 主|2.2 */
+ question_name?: string;
+ /** 题目顺序 */
+ question_order?: number;
+ /** 题目类型:objective(客观题), subjective(主观题) */
+ question_type?: string;
+ /** 得分 */
+ score?: number;
+ /** 得分显示格式:得分/满分 */
+ score_display?: string;
+ /** 学生作答 */
+ student_answer?: string;
+};
+
+export type QuestionExcelExportRequest = {
+ /** 班级字典key列表,当query_mode=class时必填 */
+ class_ids?: string[];
+ /** 考试ID,必填 */
+ exam_id: number;
+ /** 指标列表 */
+ indicators: string[];
+ /** 页码,默认1 */
+ page?: number;
+ /** 每页数量,默认50 */
+ page_size?: number;
+ /** 查询模式:class(按班级), school(按学校,用于联考) */
+ query_mode: 'class' | 'school';
+ /** 角色标识,用于权限过滤 */
+ role_key?: number;
+ /** 学校ID列表,当query_mode=school时必填 */
+ school_ids?: number[];
+ /** 搜索关键词(支持学生姓名、学号、考号、系统号搜索) */
+ search_keyword?: string;
+ /** 学科ID,必填 */
+ subject_id: number;
+ /** 教师权限参数(可选) */
+ teacher_id?: number;
+};
+
export type QuestionMarkingProgressResponse = {
/** 分配方式 */
allocation_method?: string;
@@ -1367,15 +2030,6 @@ export type QuestionMarkingProgressResponse = {
total_quantity?: number;
};
-export type QuestionMarkingQualitySchool = {
- /** 学校ID */
- school_id?: number;
- /** 学校名称 */
- school_name?: string;
- /** 老师列表 */
- teachers?: QuestionMarkingQualityTeacher[];
-};
-
export type QuestionMarkingQualityTeacher = {
/** 平均分 */
average_score?: number;
@@ -1418,6 +2072,82 @@ export type QuestionProgressDetail = {
task_total_num?: number;
};
+export type QuestionRankingRequest = {
+ /** 班级字典key列表,当query_mode=class时必填 */
+ class_ids?: string[];
+ /** 考试ID,必填 */
+ exam_id: number;
+ /** 指标列表 */
+ indicators: string[];
+ /** 页码,默认1 */
+ page?: number;
+ /** 每页数量,默认50 */
+ page_size?: number;
+ /** 查询模式:class(按班级), school(按学校,用于联考) */
+ query_mode: 'class' | 'school';
+ /** 角色标识,用于权限过滤 */
+ role_key?: number;
+ /** 学校ID列表,当query_mode=school时必填 */
+ school_ids?: number[];
+ /** 搜索关键词(支持学生姓名、学号、考号、系统号搜索) */
+ search_keyword?: string;
+ /** 学科ID,必填 */
+ subject_id: number;
+ /** 教师权限参数(可选) */
+ teacher_id?: number;
+};
+
+export type QuestionRankingResponse = {
+ /** 学生成绩列表 */
+ list?: StudentQuestionScoreInfo[];
+ /** 当前页码 */
+ page?: number;
+ /** 每页数量 */
+ page_size?: number;
+ /** 总学生数 */
+ total?: number;
+};
+
+export type RankStatDetail = {
+ /** 该名次段的学生数 */
+ count?: number;
+ /** 结束名次 */
+ end?: number;
+ /** 名次段名称 */
+ name?: string;
+ /** 占比(该名次段学生数/总学生数) */
+ rate?: number;
+ /** 起始名次 */
+ start?: number;
+};
+
+export type RankStatisticsItem = {
+ /** 学校ID或班级ID */
+ id?: number;
+ /** 学校名或班级名 */
+ name?: string;
+ /** 各名次段统计 */
+ rank_stats?: RankStatDetail[];
+ /** 总学生人数 */
+ student_count?: number;
+};
+
+export type RankStatisticsRequest = {
+ /** 班级字典key列表(class模式时必填) */
+ class_id?: number;
+ /** 考试ID */
+ exam_id: number;
+ /** 科目ID,0表示总分 */
+ subject_id?: number;
+};
+
+export type RankStatisticsResponse = {
+ data?: RankStatisticsItem[];
+ exam_id?: number;
+ query_mode?: string;
+ subject_id?: number;
+};
+
export type RefreshTokenRequest = {
refresh_token: string;
};
@@ -1480,7 +2210,7 @@ export type School = {
/** 创建时间 */
created_time?: string;
/** 学校ID */
- id?: string;
+ id?: number;
/** 是否删除 */
is_deleted?: number;
/** 是否启用 */
@@ -1495,6 +2225,19 @@ export type School = {
updated_time?: string;
};
+export type SchoolExportRequest = {
+ /** 考试ID,必填 */
+ exam_id: number;
+ /** 文件名前缀,可选 */
+ file_name?: string;
+ /** 角色标识,用于权限过滤 */
+ role_key?: number;
+ /** 学校ID列表,必填 */
+ school_ids: number[];
+ /** 教师权限参数(可选) */
+ teacher_id?: number;
+};
+
export type SchoolProgressDetail = {
/** 阅卷列表 */
marking_list?: TeacherMarkingDetail[];
@@ -1504,6 +2247,156 @@ export type SchoolProgressDetail = {
school_name?: string;
};
+export type ScoreAnalysisExcelExportRequest = {
+ /** 班级字典key列表(class模式时必填) */
+ class_ids?: string[];
+ /** 考试ID */
+ exam_id: number;
+ /** 文件名,可选 */
+ file_name?: string;
+ filters?: {
+ /** 是否排除缺考X门科目的学生(仅总分时有效) */
+ exclude_missing_subjects?: boolean;
+ /** 是否包含0分学生 */
+ include_zero_score?: boolean;
+ /** 缺考门数限制,默认1门 */
+ missing_subject_limit?: number;
+ };
+ /** 需要的指标列表 */
+ indicators: string[];
+ /** 查询模式:school/class */
+ query_mode: string;
+ /** 角色标识,用于权限过滤 */
+ role_key?: number;
+ /** 学校ID列表(school模式时必填) */
+ school_ids?: number[];
+ /** 科目ID,0表示总分 */
+ subject_id?: number;
+ /** 教师权限参数(可选) */
+ teacher_id?: number;
+};
+
+export type ScoreAnalysisItem = {
+ /** 超均率 */
+ above_avg_rate?: number;
+ /** 基础统计指标 */
+ average?: number;
+ /** 比率指标 */
+ average_score_rate?: number;
+ /** 综合率 */
+ comprehensive?: number;
+ /** 离均率 */
+ deviation_rate?: number;
+ /** 报考人数 */
+ exam_count?: number;
+ /** 优秀 */
+ excellent?: LevelStat;
+ /** 良好 */
+ good?: LevelStat;
+ /** 等级统计 */
+ high_score?: LevelStat;
+ /** 低分 */
+ low_score?: LevelStat;
+ /** 最高分 */
+ max_score?: number;
+ /** 中位数 */
+ median?: number;
+ /** 最低分 */
+ min_score?: number;
+ /** 众数 */
+ mode?: number;
+ /** 学校名或班级名 */
+ name?: string;
+ /** 及格率 */
+ pass_rate?: number;
+ /** 及格 */
+ qualified?: LevelStat;
+ /** 排名 */
+ rank?: number;
+ /** 标准分 */
+ standard_score?: number;
+ /** 标准差 */
+ std_dev?: number;
+ /** 学生人数 */
+ student_count?: number;
+ /** 教学相关(仅班级维度) */
+ teacher?: string;
+ /** 比均率 */
+ vs_avg_rate?: number;
+};
+
+export type ScoreAnalysisRequest = {
+ /** 班级字典key列表(class模式时必填) */
+ class_ids?: string[];
+ /** 考试ID */
+ exam_id: number;
+ filters?: {
+ /** 是否排除缺考X门科目的学生(仅总分时有效) */
+ exclude_missing_subjects?: boolean;
+ /** 是否包含0分学生 */
+ include_zero_score?: boolean;
+ /** 缺考门数限制,默认1门 */
+ missing_subject_limit?: number;
+ };
+ /** 需要的指标列表 */
+ indicators: string[];
+ /** 查询模式:school/class */
+ query_mode: string;
+ /** 角色标识,用于权限过滤 */
+ role_key?: number;
+ /** 学校ID列表(school模式时必填) */
+ school_ids?: number[];
+ /** 科目ID,0表示总分 */
+ subject_id?: number;
+ /** 教师权限参数(可选) */
+ teacher_id?: number;
+};
+
+export type ScoreAnalysisRequest2 = {
+ /** 班级字典key列表(class模式时必填) */
+ class_key?: string;
+ /** 考试ID */
+ exam_id: number;
+ /** 科目ID,0表示总分 */
+ subject_id?: number;
+};
+
+export type ScoreAnalysisResponse = {
+ data?: ScoreAnalysisItem[];
+ exam_id?: number;
+ query_mode?: string;
+ subject_id?: number;
+};
+
+export type ScoreDetail = {
+ /** 赋分(可选指标) */
+ assigned_score?: number;
+ /** 班级排名(可选指标) */
+ class_rank?: number;
+ /** 选科组合联考排名(可选指标) */
+ combo_joint_exam_rank?: number;
+ /** 选科组合排名指标 */
+ combo_school_rank?: number;
+ /** 选考方向班级排名(可选指标) */
+ direction_class_rank?: number;
+ /** 选考方向排名指标 */
+ direction_grade_rank?: number;
+ /** 选考方向联考排名(可选指标) */
+ direction_joint_exam_rank?: number;
+ /** 排名指标 */
+ grade_rank?: number;
+ /** 联考排名(可选指标) */
+ joint_exam_rank?: number;
+ /** 等级(可选指标) */
+ level?: string;
+ /** 基础指标(属于学科的指标) */
+ score?: number;
+ /** 科目ID(总分时为0) */
+ subject_id?: number;
+ /** 科目名称(总分时为"总分") */
+ subject_name?: string;
+};
+
export type ScoreDistributionItem = {
/** 该分数的数量 */
count?: number;
@@ -1511,6 +2404,60 @@ export type ScoreDistributionItem = {
score?: number;
};
+export type ScoreRangeAnalysis = {
+ /** 分数段结束值 */
+ score_range_end?: number;
+ /** 分数段起始值 */
+ score_range_start?: number;
+ /** 科目分析列表 */
+ subjects?: SubjectAnalysisItem[];
+};
+
+export type ScoreRankingRequest = {
+ /** 筛选条件(根据query_mode选择使用) */
+ class_ids?: string[];
+ /** 考试ID,必填 */
+ exam_id: number;
+ /** 学科选择: */
+ include_total_score?: boolean;
+ /** 指标选择 */
+ indicators: string[];
+ /** 分页参数 */
+ page?: number;
+ /** 每页数量,默认50 */
+ page_size?: number;
+ /** 查询模式:class(按班级), school(按学校,用于联考) */
+ query_mode: 'class' | 'school';
+ /** 角色标识,用于权限过滤 */
+ role_key?: number;
+ /** 学校ID列表,当query_mode=school时必填 */
+ school_ids?: number[];
+ /** 搜索参数 */
+ search_keyword?: string;
+ /** 考试科目ID列表,多选 */
+ subject_ids?: number[];
+ /** 教师权限参数(可选) */
+ teacher_id?: number;
+};
+
+export type ScoreRankingResponse = {
+ /** 学生成绩列表 */
+ list?: StudentScoreInfo[];
+ /** 当前页码 */
+ page?: number;
+ /** 每页数量 */
+ page_size?: number;
+ /** 总学生数 */
+ total?: number;
+};
+
+export type ScoreScopeData = {
+ /** 分数段 */
+ score_scope?: string;
+ /** 学生数量 */
+ student_num?: number;
+};
+
export type ScoreSheetInfo = {
/** 总得分 */
all_score?: number;
@@ -1530,6 +2477,33 @@ export type ScoreSheetInfo = {
student_number?: string;
};
+export type ScoreTrendItem = {
+ /** 考试日期 */
+ exam_date?: string;
+ /** 考试名称 */
+ exam_name?: string;
+ /** 单科总分数 */
+ total_score?: number;
+};
+
+export type SetLevelConfigRequest = {
+ config_data: UnifiedConfigData;
+ config_type: string;
+ exam_id: number;
+ /** 要设置的科目ID列表 */
+ subject_ids: number[];
+};
+
+export type SetLevelConfigResponse = {
+ data?: {
+ config_type?: string;
+ exam_id?: number;
+ subject_ids?: number[];
+ };
+ message?: string;
+ success?: boolean;
+};
+
export type SetProblemRecordRequest = {
/** 问题描述 */
description?: string;
@@ -1546,6 +2520,86 @@ export type SetProblemRecordResponse = {
record_id?: number;
};
+export type StatisticsAnalysisExcelExportRequest = {
+ /** 分析类型:rank/score/percentile */
+ analysis_type: string;
+ /** 班级字典key列表(class模式时使用) */
+ class_ids?: string[];
+ /** 考试ID */
+ exam_id: number;
+ /** 文件名,可选 */
+ file_name?: string;
+ /** 查询模式:school/class */
+ query_mode: string;
+ /** 角色标识,用于权限过滤 */
+ role_key?: number;
+ /** 学校ID列表(school模式时使用) */
+ school_ids?: number[];
+ /** 科目ID,0表示总分 */
+ subject_id?: number;
+ /** 教师权限参数(可选) */
+ teacher_id?: number;
+};
+
+export type StatisticsAnalysisItem = {
+ /** 学校ID或班级ID */
+ id?: number;
+ /** 学校名或班级名 */
+ name?: string;
+ /** 统计详情 */
+ statistics?: StatisticsDetailItem[];
+ /** 总学生人数 */
+ student_count?: number;
+};
+
+export type StatisticsAnalysisRequest = {
+ /** 分析类型:rank/score/percentile */
+ analysis_type: string;
+ /** 班级字典key列表(class模式时使用) */
+ class_ids?: string[];
+ /** 考试ID */
+ exam_id: number;
+ /** 查询模式:school/class */
+ query_mode: string;
+ /** 角色标识,用于权限过滤 */
+ role_key?: number;
+ /** 学校ID列表(school模式时使用) */
+ school_ids?: number[];
+ /** 科目ID,0表示总分 */
+ subject_id?: number;
+ /** 教师权限参数(可选) */
+ teacher_id?: number;
+};
+
+export type StatisticsAnalysisResponse = {
+ analysis_type?: string;
+ data?: StatisticsAnalysisItem[];
+ exam_id?: number;
+ query_mode?: string;
+ subject_id?: number;
+};
+
+export type StatisticsDetailItem = {
+ /** 学生人数 */
+ count?: number;
+ /** 结束百分比 */
+ end_percent?: number;
+ /** 结束名次 */
+ end_rank?: number;
+ /** 统计项名称(如"前10名"/"≥500分"/"前0%-10%") */
+ name?: string;
+ /** 占比 */
+ rate?: number;
+ /** 分数区间(如"116-129") */
+ score_range?: string;
+ /** 比例段统计专用 */
+ start_percent?: number;
+ /** 名次统计专用 */
+ start_rank?: number;
+ /** 分数段统计专用 */
+ threshold?: number;
+};
+
export type StudentAnswerSheetItem = {
/** 切图路径 */
away_view_url?: string;
@@ -1590,11 +2644,15 @@ export type StudentExamHistoryInfo = {
subject_name?: string;
};
-export type StudentListInfo = {
- /** 是否关注 */
- is_attention?: boolean;
- /** 备注 */
- remark?: string;
+export type StudentInfo = {
+ /** 班级排名变化 */
+ class_diff_rank?: number;
+ /** 班级排名 */
+ class_rank?: number;
+ /** 总分 */
+ full_score?: number;
+ /** 答题卡信息ID */
+ info_id?: number;
/** 学生姓名 */
student_name?: string;
/** 学生学号 */
@@ -1695,6 +2753,169 @@ export type StudentMarkingQuestionsResponse = {
task_id?: number;
};
+export type StudentQuestionScoreInfo = {
+ /** 班级名称 */
+ class_name?: string;
+ /** 班级排名 */
+ class_rank?: number;
+ /** 考号(可选指标) */
+ exam_number?: string;
+ /** 排名(可选指标) */
+ grade_rank?: number;
+ /** 联考排名 */
+ joint_exam_rank?: number;
+ /** 客观题总分 */
+ objective_score?: number;
+ /** 题目详情 map[questionKey]*QuestionDetail */
+ question_scores?: Record;
+ /** 学校名称 */
+ school_name?: string;
+ /** 学生ID */
+ student_id?: number;
+ /** 学生姓名 */
+ student_name?: string;
+ /** 学号(可选指标) */
+ student_number?: string;
+ /** 主观题总分 */
+ subjective_score?: number;
+ /** 系统号(可选指标) */
+ system_number?: string;
+ /** 总分统计(可选指标) */
+ total_score?: number;
+};
+
+export type StudentScoreInfo = {
+ /** 语数外史/物总分相关(当需要语数外史/物排名时返回) */
+ chinese_mat_eng_direction_score?: ScoreDetail;
+ /** 语数外总分相关(当需要语数外排名时返回) */
+ chinese_mat_eng_score?: ScoreDetail;
+ /** 班级名称 */
+ class_name?: string;
+ /** 选考方向(可选指标) */
+ elective_direction?: string;
+ /** 考号(可选指标) */
+ exam_number?: string;
+ /** 等级统计(可选指标) */
+ level_stats?: string;
+ /** 学校名称 */
+ school_name?: string;
+ /** 学生姓名 */
+ student_name?: string;
+ /** 学号(可选指标) */
+ student_number?: string;
+ /** 选考组合(可选指标) */
+ subject_combo?: string;
+ /** 各科目成绩(根据选择的subject_ids返回) */
+ subject_scores?: Record;
+ /** 系统号(可选指标) */
+ system_number?: string;
+ /** 标签(可选指标) */
+ tags?: string;
+ /** 总分相关(当include_total_score为true时返回) */
+ total_score?: ScoreDetail;
+};
+
+export type SubjectAnalysisDetail = {
+ /** 学科满分 */
+ full_score?: number;
+ /** 该档次该学科分数线 */
+ score_line?: number;
+ /** 学科ID */
+ subject_id?: string;
+ /** 学科名称 */
+ subject_name?: string;
+ /** 该学科总贡献率 */
+ total_contribution_rate?: number;
+ /** 该学科总双上线人数 */
+ total_double_online_count?: number;
+ /** 该学科总命中率 */
+ total_hit_rate?: number;
+ /** 该学科总上线人数 */
+ total_online_count?: number;
+};
+
+export type SubjectAnalysisItem = {
+ /** 平均分 */
+ average_score?: number;
+ /** 我的成绩 */
+ my_score?: number;
+ /** 科目ID */
+ subject_id?: number;
+ /** 科目名称 */
+ subject_name?: string;
+};
+
+export type SubjectClassAnalysisExcelExportRequest = {
+ /** 班级字典key列表(class模式时使用) */
+ class_ids?: string[];
+ /** 考试ID */
+ exam_id: number;
+ /** 文件名,可选 */
+ file_name?: string;
+ /** 档次级别(如"一档"、"二档"、"三档") */
+ level: string;
+ /** 查询模式:school/class */
+ query_mode: string;
+ /** 学校ID列表(school模式时使用) */
+ school_ids?: number[];
+};
+
+export type SubjectClassAnalysisGroup = {
+ /** 学校ID或班级字典key */
+ group_key?: string;
+ /** 学校名或班级名 */
+ group_name?: string;
+ /** 该组学生总数 */
+ student_count?: number;
+ /** 各学科统计 */
+ subjects?: SubjectGroupAnalysisItem[];
+};
+
+export type SubjectClassAnalysisRequest = {
+ /** 班级字典key列表(class模式时使用) */
+ class_ids?: string[];
+ /** 考试ID */
+ exam_id: number;
+ /** 档次级别(如"一档"、"二档"、"三档") */
+ level: string;
+ /** 查询模式:school/class */
+ query_mode: string;
+ /** 学校ID列表(school模式时使用) */
+ school_ids?: number[];
+};
+
+export type SubjectClassAnalysisResponse = {
+ /** 考试ID */
+ exam_id?: number;
+ /** 考试名称 */
+ exam_name?: string;
+ /** 各组学科分档统计 */
+ groups?: SubjectClassAnalysisGroup[];
+ /** 当前查询的档次 */
+ level?: string;
+ /** 各学科汇总统计 */
+ subjects?: SubjectAnalysisDetail[];
+ /** 总分档次信息 */
+ total_score_info?: TotalScoreInfo;
+ /** 总学生数 */
+ total_students?: number;
+};
+
+export type SubjectGroupAnalysisItem = {
+ /** 命中率 */
+ contrib_rate?: number;
+ /** 双上线 */
+ double_online?: number;
+ /** 贡献率 */
+ pass_rate?: number;
+ /** 单科上线 */
+ single_online?: number;
+ /** 上线人数 */
+ student_count?: number;
+ /** 科目名称 */
+ subject_name?: string;
+};
+
export type SubjectInfo = {
/** 创建时间 */
created_time?: string;
@@ -1712,8 +2933,31 @@ export type SubjectInfo = {
subject_id?: number;
/** 科目名称 */
subject_name?: string;
- /** 教师类型:1-阅卷老师, 2-仲裁老师, 3-组长 */
- teacher_type?: number;
+ /** 教师类型:normal-阅卷老师, arbitration-仲裁老师, leader-组长 */
+ teacher_type?: string;
+};
+
+export type SubjectiveAnswer = {
+ /** 最终得分 */
+ final_score?: number;
+ /** 满分 */
+ full_score?: number;
+ /** 是否标记为优秀 (1:是, 0:否, null:未设置) */
+ is_excellent?: number;
+ /** 是否标记为典型 (1:是, 0:否, null:未设置) */
+ is_model?: number;
+ /** 是否标记为问题卷 (1:是, 0:否, null:未设置) */
+ is_problem?: number;
+ /** 问题卷附属说明 */
+ problem_addition?: string;
+ /** 问题卷状态 */
+ problem_status?: string;
+ /** 问题卷类型 */
+ problem_type?: string;
+ /** 题目ID */
+ question_id?: number;
+ /** 备注 */
+ remark?: string;
};
export type SubjectiveQualityItem = {
@@ -1728,6 +2972,8 @@ export type SubjectiveQualityItem = {
export type SubjectiveQuestionItem = {
/** 平均分 */
average_score?: number;
+ /** 评选方式 */
+ evaluate_method?: string;
/** 题目ID */
question_id?: number;
/** 大题号 */
@@ -1932,6 +3178,11 @@ export type TeacherAnalysisExamInfo = {
subject_name?: string;
};
+export type teacherAnalysisInfoIdUsingGetParams = {
+ /** 答题卡ID */
+ info_id: number;
+};
+
export type TeacherAnalysisResponse = {
/** 班级列表 */
class_list?: TeacherAnalysisClassInfo[];
@@ -1941,6 +3192,13 @@ export type TeacherAnalysisResponse = {
subject_list?: TeacherAnalysisSubjectInfo[];
};
+export type teacherAnalysisStudentAnswerImageUsingGetParams = {
+ /** 题目ID */
+ question_id: number;
+ /** 学号 */
+ student_number: string;
+};
+
export type TeacherAnalysisSubjectInfo = {
/** 科目ID */
subject_id?: number;
@@ -1987,6 +3245,15 @@ export type TeacherQuestionAverageScoreResponse = {
total_count?: number;
};
+export type TotalScoreInfo = {
+ /** 总分满分 */
+ full_score?: number;
+ /** 该档次总分上线人数 */
+ online_count?: number;
+ /** 该档次总分分数线 */
+ score_line?: number;
+};
+
export type TrendInfo = {
/** 班级平均分 */
class_avg_score?: number;
@@ -2000,6 +3267,32 @@ export type TrendInfo = {
grade_avg_score?: number;
};
+export type UnifiedConfigData = {
+ /** 额外配置(用于特殊配置类型) */
+ extra_config?: Record;
+ /** 等级数量 */
+ level_count?: number;
+ /** 等级配置列表 */
+ levels?: UnifiedLevelItem[];
+ /** 规则类型 */
+ rule_type?: string;
+};
+
+export type UnifiedLevelItem = {
+ /** 描述 */
+ description?: string;
+ /** 等级名称 A/B/C/D/E 或 优秀/良好等 */
+ level?: string;
+ /** 排序 */
+ order?: number;
+ /** 范围最大值 */
+ range_max?: number;
+ /** 范围最小值 */
+ range_min?: number;
+ /** 单一值(百分比/分数等) */
+ value?: number;
+};
+
export type UpdateDictionaryItemRequest = {
/** 字典项key */
key: string;
diff --git a/src/service/wode.ts b/src/service/wode.ts
new file mode 100644
index 0000000..e64266e
--- /dev/null
+++ b/src/service/wode.ts
@@ -0,0 +1,44 @@
+/* eslint-disable */
+// @ts-ignore
+import request from '@/http/vue-query';
+import { CustomRequestOptions } from '@/http/types';
+
+import * as API from './types';
+
+/** 修改密码 修改当前用户的密码 POST /my/change-password */
+export async function myChangePasswordUsingPost({
+ body,
+ options,
+}: {
+ body: API.MyChangePasswordRequest;
+ options?: CustomRequestOptions;
+}) {
+ return request<
+ API.Response & {
+ data?: API.MyChangePasswordResponse;
+ }
+ >('/my/change-password', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ data: body,
+ ...(options || {}),
+ });
+}
+
+/** 获取我的信息 获取当前用户的个人信息 GET /my/profile */
+export async function myProfileUsingGet({
+ options,
+}: {
+ options?: CustomRequestOptions;
+}) {
+ return request<
+ API.Response & {
+ data?: API.GetMyProfileResponse;
+ }
+ >('/my/profile', {
+ method: 'GET',
+ ...(options || {}),
+ });
+}
diff --git a/src/store/home.ts b/src/store/home.ts
new file mode 100644
index 0000000..0a56561
--- /dev/null
+++ b/src/store/home.ts
@@ -0,0 +1,207 @@
+import { defineStore } from 'pinia'
+import { computed, ref } from 'vue'
+import { teacherAnalysisDataUsingGet } from '@/service/laoshichengjifenxi'
+
+export interface SelectOption {
+ label: string
+ value: number
+}
+
+// 考试科目组合数据类型
+export interface ExamSubjectItem {
+ examId: number
+ examName: string
+ examSubjectId: number
+ subjectName: string
+}
+
+// 班级信息类型
+export interface ClassItem {
+ label: string
+ value: number
+ gradeKey: number
+}
+
+/**
+ * 首页状态管理
+ */
+export const useHomeStore = defineStore(
+ 'homeStore',
+ () => {
+ // 数据存储
+ const loading = ref(false)
+ const examSubjectList = ref([])
+ const classList = ref([])
+ const classGradeMap = ref