# 使用说明

> **中学成绩档案系统**（初中 / 高中）  
> 版权所有 © 马建军 · 微信 **dekun03** · 手机 **18364911125**

---

## 1. 系统简介

本系统面向**初中、高中**学生，提供：

- 多用户账号，数据互相隔离  
- 学生档案管理（学段、年级、班级）  
- 成绩录入：周考、月考、期末  
- 分科成绩占比曲线（上升绿色、下降红色、大幅波动高亮）  
- 错题库：拍照上传 → OCR 识别 → AI 生成解法（可编辑）  
- 成绩 CSV 导出  

部署与代码发布见 [DEPLOY.md](./DEPLOY.md)（systemd 零 Node，端口 **23566**）。

---

## 2. 快速上手

### 2.1 登录与注册

1. 浏览器打开 `http://<服务器IP>:23566`  
2. **首次部署**默认超级管理员：**admin / admin123**（请登录后立即修改）  
3. 若管理员已**开放注册**，可在登录页 **注册** 新账号（用户名 ≥3 字符，密码 ≥6 字符）  
4. 若管理员已**关闭注册**，登录页不显示注册入口，需联系管理员在「系统设置 → 用户管理」中添加账号  

> 普通用户数据仅本人可见；普通用户**不能**自行修改用户名或密码。

### 2.2 系统设置（超级管理员）

首页右上角 **系统设置**（仅超级管理员可见）：

| 功能 | 说明 |
|------|------|
| 注册开关 | 开启后用户可自行注册；关闭后仅管理员添加用户 |
| 管理员账号 | 修改超级管理员的用户名、密码（修改密码需输入当前密码） |
| 用户管理 | 添加用户、重置密码、删除普通用户 |

### 2.3 添加学生

1. 首页点击 **添加学生**  
2. 填写：
   - **姓名**（必填）
   - **学段**：初中 / 高中
   - **年级**：初一～初三 或 高一～高三
   - **班级**：如「3班」（可选）
3. 保存后在卡片上可看到学段标签  

### 2.4 录入成绩

进入学生详情 → **成绩录入** 标签：

1. 点击 **录入成绩**  
2. 选择 **考试类型**：周考 / 月考 / 期末  
3. 选择 **考试日期**  
4. 在表格中填写各科 **总分**、**得分**（未考科目可留空）  
5. 系统自动计算 **占比**  
6. 保存后在列表中可编辑或删除  

**校验规则：**

- 总分必须 > 0  
- 得分不能大于总分  
- 至少录入一科成绩  

---

## 3. 成绩分析

### 3.1 成绩总览

**成绩总览** 标签以表格展示历次考试各科得分与占比。

- 顶部 **波动预警** 会标记相邻两次占比变化 ≥ 8% 的考试  
- 可横向滚动查看所有科目  

### 3.2 分科曲线

**分科曲线** 标签：

1. 选择科目  
2. 查看占比（%）随时间变化折线图  

**图例说明：**

| 元素 | 含义 |
|------|------|
| 绿色线段 | 较上一次占比 **上升** |
| 红色线段 | 较上一次占比 **下降** |
| 橙色大圆点 | **大幅波动**（变化 ≥ 8%） |
| Tooltip | 显示日期、考试类型、占比、较上次变化 |

---

## 4. 错题库

### 4.1 上传错题（手机 / 平板）

进入 **错题库** 或 **奥数区** 标签：

1. 选择 **科目**  
2. 点击 **拍照上传** 或 **相册选图**  
3. 上传后自动：**OCR 识别 → 照片上红框标注错误位置 → 整理题目 → 生成「解题思路」与详细解答**  

> 标注效果类似作业帮：错误作答处显示红色框和 × 标记。详情页可切换「标注图 / 原图」。

### 4.2 奥数区

学生详情页 **奥数区** 标签专门存放奥数题：

- 按学生**学段**（初中 / 高中）生成奥数解题思路  
- **严禁超纲**：初中不用高中/大学方法，高中不用大学高阶理论  
- 上传方式与错题库相同，支持拍照  

### 4.3 解题 AI 与学段约束

- **错题库**：按初中/高中**课内**标准解题，禁止超纲  
- **奥数区**：按对应学段**奥数培优**范围解题  
- 超级管理员可在 **系统设置 → AI 模型** 中选择：
  - **本地 Ollama**（地址 + 模型名）
  - **OpenAI 兼容 API**（Base URL + 模型 + API Key）

### 4.4 查看与编辑

点击错题卡片打开详情：

- **左侧**：原始试卷图片、OCR 原文  
- **右侧**：识别题目、解法（均可编辑）  
- **保存编辑**：手动修正后点击保存  
- **重新 OCR**：识别不准时可重试  
- **重新生成解法**：基于当前题目重新调用 AI  

> 解法标注「AI 生成，请核对」，使用前请人工确认。

### 4.5 筛选与搜索

- 按 **科目** 筛选  
- **搜索** 题目/解法关键词  

---

## 5. 数据导出

学生详情页点击 **导出 CSV**，下载该生全部成绩记录，可用 Excel 打开。

---

## 6. 预置科目

语文、数学、英语、物理、化学、生物、历史、地理、政治。

---

## 7. 维护人员：修改代码后如何更新线上

**服务器不在本地构建前端。** 维护或二次开发时，请严格按以下流程发布：

### 只改后端

```bash
git add backend/
git commit -m "说明"
git push
# 服务器
bash /opt/secondary-school-grade-archive/deploy/update.sh
```

### 改前端（或前后端都改）

```powershell
# Windows：先构建
.\deploy\build-frontend.ps1
```

```bash
# Linux / macOS：先构建
bash deploy/build-frontend.sh

git add frontend/ frontend/dist
git commit -m "说明"
git push
# 服务器
bash /opt/secondary-school-grade-archive/deploy/update.sh
```

详细说明见 [DEPLOY.md §2](./DEPLOY.md#2-代码修改与发布流程重要) 与 [README](../README.md#修改代码后如何发布必读)。

---

## 8. 常见问题

**Q：忘记密码怎么办？**  
A：普通用户请联系超级管理员，在「系统设置 → 用户管理」中重置密码。超级管理员忘记密码需通过数据库或 `.env` 中的 `ADMIN_DEFAULT_*` 配合运维处理。

**Q：多人能否共用一台服务器？**  
A：可以。每人独立账号，数据互不可见。

**Q：能否同时管理初中和高中孩子？**  
A：可以。添加学生时分别选择学段即可。

**Q：换手机/电脑能否访问？**  
A：可以。使用同一服务器地址与账号登录即可。

**Q：HTTPS 和域名怎么配置？**  
A：本项目不包含反向代理配置，请参考 [DEPLOY.md §8](./DEPLOY.md#8-反向代理用户自行配置) 自行设置。

**Q：改了代码但服务器页面没变化？**  
A：很可能未在开发机执行 `npm run build` 或未将 `frontend/dist` 推送到仓库。见上文第 7 节。

---

## 9. 技术支持与版权

| 项目 | 内容 |
|------|------|
| 作者 | 马建军 |
| 微信 | dekun03 |
| 手机 | 18364911125 |
| 仓库 | [secondary-school-grade-archive](https://git.bz121.com/dekun/secondary-school-grade-archive.git) |

使用本软件须遵守 [LICENSE](../LICENSE) 与 [COPYRIGHT.md](../COPYRIGHT.md)。  
商业使用或二次分发请联系作者取得授权。
