完善文档

This commit is contained in:
2026-04-19 15:59:20 +08:00
parent 4972d1e3be
commit fe411724f4
10 changed files with 853 additions and 25 deletions

View File

@@ -0,0 +1,367 @@
# 班级操行分管理系统 - 安装部署指南
## 环境要求
### 服务器配置
- **操作系统**: Linux (Ubuntu 20.04+ / CentOS 7+)
- **CPU**: 2核+
- **内存**: 4GB+
- **磁盘**: 20GB+
### 软件依赖
| 软件 | 版本 | 用途 |
|------|------|------|
| Python | 3.9+ | 后端运行环境 |
| MySQL | 5.7+ | 数据存储 |
| Redis | 6.0+ | 缓存、会话 |
| Nginx | 1.18+ | Web服务器、反向代理 |
| PHP | 8.0+ | 前端页面处理 |
---
## 宝塔面板部署(推荐)
### 1. 安装宝塔面板
```bash
# 通用安装脚本(免登录版)
url=https://download.bt.cn/install/installStable.sh;if [ -f /usr/bin/curl ];then curl -sSO $url;else wget -O installStable.sh $url;fi;bash installStable.sh ed8484bec
```
安装完成后,根据提示访问宝塔面板地址,完成初始化设置。
### 2. 安装运行环境
在宝塔面板的"软件商店"中安装以下软件:
| 软件名称 | 版本要求 | 用途 |
|---------|---------|------|
| Nginx | 1.21+ | Web服务器 |
| MySQL | 5.7+ | 数据库 |
| Redis | 6.0+ | 缓存服务 |
| PHP | 8.0+ | 前端处理 |
| Python项目管理器 | 最新版 | 后端部署 |
### 3. 创建数据库
在宝塔面板中:
1. 进入"数据库"菜单
2. 点击"添加数据库"
3. 填写数据库信息:
- 数据库名:`class_manager`
- 用户名:`class_user`
- 密码:生成强密码并保存
4. 点击"导入",选择 `sql/init.sql` 文件导入
### 4. 部署后端服务
#### 4.1 上传代码
1. 进入宝塔面板"文件"菜单
2. 进入 `/www/wwwroot/` 目录
3. 创建项目目录 `classmanager`
4. 上传或克隆代码到 `/www/wwwroot/classmanager`
#### 4.2 使用Python项目管理器部署
1. 进入宝塔面板"网站 -> Python项目"
2. 点击"添加项目"
- 项目路径:`/www/wwwroot/classmanager/backend`
- Python版本3.9+
- 框架FastAPI
- 启动方式:`uvicorn main:app --host 127.0.0.1 --port 8000 --workers 4`
- 项目名称:`classmanager_backend`
#### 4.3 配置环境变量
`/www/wwwroot/classmanager/backend/` 目录下:
```bash
# 复制环境变量示例文件
cp .env.example .env
# 编辑配置
vim .env
```
根据实际环境修改以下配置:
- `DB_USER` - 数据库用户名
- `DB_PASSWORD` - 数据库密码
- `REDIS_PASSWORD` - Redis密码如有
- `SECRET_KEY` - 应用密钥32位以上随机字符串
- `JWT_SECRET_KEY` - JWT密钥32位以上随机字符串
- `DEBUG_PATH` - 调试入口路径(生产环境请修改为随机字符串)
### 5. 部署前端
#### 5.1 上传前端代码
将代码上传或克隆到 `/www/wwwroot/classmanager`
#### 5.2 创建网站
1. 进入宝塔面板"网站"菜单
2. 点击"添加站点"
- 域名:填写您的域名
- 根目录:`/www/wwwroot/classmanager/frontend`
- PHP版本8.0
#### 5.3 配置伪静态
在站点设置中:
1. 点击"伪静态"
2. 选择"thinkphp"或添加以下规则:
```nginx
location / {
if (!-e $request_filename){
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
}
```
---
**部署方式二:一体化部署(同域名)**
如果希望前后端使用同一个域名(如 `https://your-domain.com`),需要配置反向代理:
在站点设置中:
1. 点击"反向代理"
2. 添加反向代理:
- 目标URL`http://127.0.0.1:8000`
- 发送域名:`$host`
- 代理目录:`/api/`
3. 前端 `.env` 配置:
```
API_BASE_URL=https://your-domain.com
```
---
#### 5.4 配置伪静态(续)
在站点设置中:
1. 点击"伪静态"
2. 选择"thinkphp"或添加以下规则:
```nginx
location / {
if (!-e $request_filename){
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
}
```
### 6. 配置SSL证书
1. 在站点设置中点击"SSL"
2. 选择"Let's Encrypt"免费证书
3. 勾选"强制HTTPS"
### 7. 初始化管理员账号
使用调试接口创建初始管理员(仅首次部署使用):
```bash
# 替换 your-domain.com 为您的域名
# 替换 /a7k9x2m4q8w1e3r5t6y7u8i9o0p1z2x3 为 .env 中配置的 DEBUG_PATH
curl -X POST https://your-domain.com/a7k9x2m4q8w1e3r5t6y7u8i9o0p1z2x3 \
-H "Content-Type: application/json" \
-d '{
"username": "admin",
"password": "Admin@123",
"real_name": "班主任",
"role_type": "班主任"
}'
```
**注意**:创建成功后,请立即登录系统修改密码,并在生产环境中禁用或修改 DEBUG_PATH。
---
## 手动部署(无宝塔面板)
### 1. 安装系统依赖
```bash
# Ubuntu/Debian
sudo apt update
sudo apt install -y python3 python3-pip python3-venv mysql-server redis-server nginx php8.0 php8.0-fpm php8.0-mysql
# CentOS
sudo yum install -y python3 python3-pip mysql-server redis nginx php php-fpm php-mysql
```
### 2. 数据库配置
```bash
# 启动MySQL
sudo systemctl start mysqld
sudo systemctl enable mysqld
# 登录MySQL创建数据库
mysql -u root -p
```
```sql
CREATE DATABASE class_manager CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'class_user'@'localhost' IDENTIFIED BY 'YourStrongPassword';
GRANT ALL PRIVILEGES ON class_manager.* TO 'class_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
```
导入初始化数据:
```bash
mysql -u class_user -p class_manager < sql/init.sql
```
### 3. 后端部署
```bash
# 创建项目目录
sudo mkdir -p /var/www/classmanager
sudo chown -R $USER:$USER /var/www/classmanager
# 上传代码到 /var/www/classmanager/backend/
cd /var/www/classmanager/backend
# 创建虚拟环境
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
# 配置环境变量
cp .env.example .env
vim .env # 根据实际情况修改配置
# 使用Systemd管理服务
sudo vim /etc/systemd/system/classmanager.service
```
Systemd服务文件内容
```ini
[Unit]
Description=ClassManager Backend
After=network.target
[Service]
Type=simple
User=www-data
WorkingDirectory=/var/www/classmanager/backend
Environment="PATH=/var/www/classmanager/backend/venv/bin"
ExecStart=/var/www/classmanager/backend/venv/bin/uvicorn main:app --host 127.0.0.1 --port 8000
Restart=always
[Install]
WantedBy=multi-user.target
```
启动服务:
```bash
sudo systemctl daemon-reload
sudo systemctl start classmanager
sudo systemctl enable classmanager
```
### 4. 前端部署
```bash
# 上传前端代码到 /var/www/classmanager/frontend/
# 配置Nginx
sudo vim /etc/nginx/sites-available/classmanager
```
Nginx配置示例
```nginx
server {
listen 80;
server_name your-domain.com;
root /var/www/classmanager/frontend;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
}
location /api/ {
proxy_pass http://127.0.0.1:8000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
```
启用站点:
```bash
sudo ln -s /etc/nginx/sites-available/classmanager /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
```
---
## 环境变量说明
后端 `.env` 文件主要配置项:
| 配置项 | 说明 | 示例 |
|-------|------|------|
| `APP_NAME` | 应用名称 | 班级操行分管理系统 |
| `DEBUG` | 调试模式 | false生产环境 |
| `SECRET_KEY` | 应用密钥 | 32位以上随机字符串 |
| `DB_HOST` | 数据库地址 | localhost |
| `DB_USER` | 数据库用户名 | class_user |
| `DB_PASSWORD` | 数据库密码 | YourPassword |
| `DB_NAME` | 数据库名 | class_manager |
| `REDIS_HOST` | Redis地址 | localhost |
| `REDIS_PASSWORD` | Redis密码 | 可选 |
| `JWT_SECRET_KEY` | JWT密钥 | 32位以上随机字符串 |
| `DEBUG_PATH` | 调试入口路径 | /random-string |
| `DEDUCTION_HOMEWORK_NOT_SUBMIT` | 作业未提交扣分 | 2 |
| `DEDUCTION_HOMEWORK_LATE` | 作业迟交扣分 | 1 |
| `DEDUCTION_ATTENDANCE_ABSENT` | 缺勤扣分 | 5 |
| `DEDUCTION_ATTENDANCE_LATE` | 迟到扣分 | 2 |
| `DEDUCTION_ATTENDANCE_LEAVE` | 请假扣分 | 1 |
---
## 常见问题
### Q1: 后端启动失败
- 检查端口8000是否被占用
- 检查数据库和Redis连接配置
- 查看日志:`sudo journalctl -u classmanager -f`
### Q2: 前端页面空白或报错
- 检查Nginx配置中的root路径
- 检查PHP-FPM是否运行
- 检查文件权限:`sudo chown -R www-data:www-data /var/www/classmanager`
### Q3: API请求404
- 检查反向代理配置
- 确认后端服务已启动
- 检查防火墙设置
### Q4: 数据库连接失败
- 确认MySQL已启动
- 检查用户名密码
- 确认用户有数据库权限
---
## 技术支持
- 开发者: Canglan
- 联系方式: admin@sea-studio.top
- 版权归属: Sea Network Technology Studio
- 许可证: MIT License

View File

@@ -19,11 +19,12 @@
**班主任权限:** **班主任权限:**
- 学生管理:新增/编辑/删除学生、批量导入学生JSON - 学生管理:新增/编辑/删除学生、批量导入学生JSON
- 操行分管理:对学生进行加减分、撤销任何扣分记录、查看全班历史记录 - 操行分管理:对学生进行加减分、撤销任何扣分记录、查看全班历史记录、导出德育分记录
- 作业管理:发布作业、查看提交情况 - 作业管理:发布作业、查看提交情况
- 考勤管理:查看全班考勤记录 - 考勤管理:查看全班考勤记录、自定义考勤扣分值
- 科目管理:动态增删学科 - 科目管理:动态增删学科
- 管理员管理:添加班长/科代表/考勤委员/劳动委员 - 管理员管理:添加/编辑/删除/重置密码班长/科代表/考勤委员/劳动委员/志愿委员
- 数据导出:导出历史记录、导出德育分记录(含加分/减分历史)
**班长权限:** **班长权限:**
- 操行分管理对学生进行加减分±5分以内、撤销任何人的扣分记录、查看全班历史记录 - 操行分管理对学生进行加减分±5分以内、撤销任何人的扣分记录、查看全班历史记录
@@ -41,6 +42,10 @@
- 操行分管理:以卫生值日为理由进行加减分(固定 ±1 分) - 操行分管理:以卫生值日为理由进行加减分(固定 ±1 分)
- 历史记录:仅查看自己提交的操作记录 - 历史记录:仅查看自己提交的操作记录
**志愿委员权限:**
- 操行分管理:以服务时长为由进行加分(仅加分)
- 历史记录:仅查看自己提交的操作记录
## 技术栈 ## 技术栈
| 层级 | 技术 | 版本 | | 层级 | 技术 | 版本 |
@@ -81,7 +86,7 @@ classmanager/
│ │ ├── attendance.py # 考勤模型 │ │ ├── attendance.py # 考勤模型
│ │ ├── conduct.py # 操行分模型 │ │ ├── conduct.py # 操行分模型
│ │ ├── homework.py # 作业模型 │ │ ├── homework.py # 作业模型
│ │ ├── operation_log.py # 操作日志模型 │ │ ├── log.py # 日志模型
│ │ ├── student.py # 学生模型 │ │ ├── student.py # 学生模型
│ │ ├── subject.py # 科目模型 │ │ ├── subject.py # 科目模型
│ │ └── user.py # 用户模型 │ │ └── user.py # 用户模型
@@ -112,10 +117,8 @@ classmanager/
│ │ ├── auth_service.py │ │ ├── auth_service.py
│ │ ├── conduct_service.py │ │ ├── conduct_service.py
│ │ ├── homework_service.py │ │ ├── homework_service.py
│ │ ├── import_service.py
│ │ ├── log_service.py │ │ ├── log_service.py
│ │ ├── parent_service.py │ │ ├── parent_service.py
│ │ ├── permission_service.py
│ │ ├── student_service.py │ │ ├── student_service.py
│ │ └── subject_service.py │ │ └── subject_service.py
│ │ │ │
@@ -192,15 +195,22 @@ classmanager/
## 角色权限一览表 ## 角色权限一览表
| 角色 | 操行分查看 | 操行分加减 | 撤销扣分 | 历史记录查看 | | 角色 | 操行分查看 | 操行分加减 | 撤销扣分 | 历史记录查看 | 其他权限 |
|------|-----------|-----------|---------|-------------| |------|-----------|-----------|---------|-------------|---------|
| 班主任 | 全班 | 无限制 | 可撤销任何记录 | 全班所有记录 | | 班主任 | 全班 | 无限制 | 可撤销任何记录 | 全班所有记录 | 学生/管理员/科目管理、数据导出 |
| 班长 | 全班 | ±5分 | 可撤销任何记录 | 全班所有记录 | | 班长 | 全班 | ±5分 | 可撤销任何记录 | 全班所有记录 | - |
| 学习委员 | 全班 | 仅扣分(按规则) | 不可撤销 | 仅自己提交的 | | 学习委员 | 全班 | 仅扣分(按规则) | 不可撤销 | 仅自己提交的 | 作业管理、科目管理 |
| 考勤委员 | 全班 | 仅扣分(按规则) | 不可撤销 | 仅自己提交的 | | 考勤委员 | 全班 | 仅扣分(按规则) | 不可撤销 | 仅自己提交的 | 考勤管理 |
| 劳动委员 | 全班 | 仅±1分卫生值日 | 不可撤销 | 仅自己提交的 | | 劳动委员 | 全班 | 仅±1分卫生值日 | 不可撤销 | 仅自己提交的 | - |
| 学生 | 自己 | 无 | 无 | 自己的历史 | | 志愿委员 | 全班 | 仅加分 | 不可撤销 | 自己提交的 | - |
| 家长 | 子女总分 | 无 | 无 | 不可见详情 | | 学生 | 自己 | 无 | 无 | 自己的历史 | 修改密码 |
| 家长 | 子女总分 | 无 | 无 | 不可见详情 | - |
## 密码要求
- 长度6-20位
- 复杂度必须包含大写字母、小写字母、数字、特殊符号中的至少3种
- 示例有效密码:`Hello1!``Abc123#``Test@99`
## 安装部署 ## 安装部署

View File

@@ -60,10 +60,19 @@ DEBUG_PATH=/a7k9x2m4q8w1e3r5t6y7u8i9o0p1z2x3
# 扣分规则配置 # 扣分规则配置
# =========================================== # ===========================================
# 作业未提交扣分 - 学生未按时提交作业时扣除的操行分
DEDUCTION_HOMEWORK_NOT_SUBMIT=2 DEDUCTION_HOMEWORK_NOT_SUBMIT=2
# 作业迟交扣分 - 学生迟交作业时扣除的操行分
DEDUCTION_HOMEWORK_LATE=1 DEDUCTION_HOMEWORK_LATE=1
# 缺勤扣分 - 学生无故缺勤时扣除的操行分
DEDUCTION_ATTENDANCE_ABSENT=5 DEDUCTION_ATTENDANCE_ABSENT=5
# 迟到扣分 - 学生迟到时扣除的操行分
DEDUCTION_ATTENDANCE_LATE=2 DEDUCTION_ATTENDANCE_LATE=2
# 请假扣分 - 学生请假时扣除的操行分可设为0表示不扣分
DEDUCTION_ATTENDANCE_LEAVE=1 DEDUCTION_ATTENDANCE_LEAVE=1
# =========================================== # ===========================================

View File

@@ -1 +1,295 @@
# 管理端使用文档 # 管理端使用文档
## 登录
1. 打开系统网址,进入登录页面
2. 输入**用户名**和**密码**
3. 点击"登录"按钮
4. 首次登录系统会强制要求修改密码
> **密码要求**长度6-20位必须包含大写字母、小写字母、数字、特殊符号中的至少3种。
---
## 角色说明
管理端根据角色不同,拥有不同的功能权限:
| 角色 | 操行分管理 | 历史记录 | 作业管理 | 考勤管理 | 科目管理 | 管理员管理 | 数据导出 |
|------|-----------|---------|---------|---------|---------|-----------|---------|
| 班主任 | 无限制 | 全部 | 全部 | 全部 | ✓ | ✓ | ✓ |
| 班长 | ±5分 | 全部 | - | - | - | - | - |
| 学习委员 | - | 自己的 | ✓ | - | ✓ | - | - |
| 考勤委员 | - | 自己的 | - | ✓ | - | - | - |
| 劳动委员 | ±1分 | 自己的 | - | - | - | - | - |
| 志愿委员 | 仅加分 | 自己的 | - | - | - | - | - |
---
## 功能说明
### 1. 首页 (dashboard.php)
管理端首页展示以下内容:
- **统计数据**:学生总数
- **快捷操作**
- 操行分管理(班主任/班长/劳动委员/志愿委员)
- 导入学生(班主任)
- 导出德育分记录(班主任)
- **操行分排行榜**展示前100名学生的排名、学号、姓名和操行分
---
### 2. 操行分管理 (conduct.php)
#### 查看学生列表
- 展示所有学生的学号、姓名、当前操行分
- 支持按学生选择
#### 批量加减分
1. 在学生列表中勾选目标学生(可点击"全选"
2. 点击"批量加减分"按钮
3. 填写以下信息:
- **分数变动**:正数为加分,负数为扣分
- **原因**:填写加减分原因(必填)
4. 点击"确认提交"
**加减分限制**
| 角色 | 限制 |
|------|------|
| 班主任 | 无限制 |
| 班长 | ±5分以内 |
| 劳动委员 | 固定±1分卫生值日理由 |
| 志愿委员 | 仅限加分 |
#### 单人加减分
点击学生行右侧的"加减分"按钮,操作同批量加减分。
#### 导出德育分记录(仅班主任)
1. 点击"导出德育分记录"按钮
2. 系统自动生成CSV文件并下载
3. 文件格式:`学号,姓名,分数,加分历史,减分记录`
4. 历史记录以分号分隔,包含原因和分值
---
### 3. 历史记录 (history.php)
#### 查看历史记录
- 展示所有操行分变动记录
- 支持筛选条件:
- **开始日期** / **结束日期**:按时间范围筛选
- **学生**:按学生筛选
- 点击"查询"按钮刷新列表
#### 导出历史记录(仅班主任)
1. 设置筛选条件(可选)
2. 点击"导出历史记录"按钮
3. 系统自动生成CSV文件并下载
4. 文件格式:`时间,学号,姓名,分数变动,原因,操作人`
#### 撤销记录(班主任/班长)
1. 在历史记录列表中找到目标记录
2. 点击右侧"撤销"按钮
3. 确认撤销操作
---
### 4. 作业管理 (homework.php)(班主任/学习委员)
本模块用于管理学生作业缺交情况,学习委员可发布缺交作业记录并关联扣分。
#### 查看学生列表
- 展示所有学生的学号、姓名、当前操行分
- 可勾选学生进行批量操作
#### 批量扣分
1. 在学生列表中勾选目标学生(可点击"全选"
2. 点击"批量加减分"按钮
3. 选择扣分类型:
- **未交作业**按配置扣分默认2分
- **迟交作业**按配置扣分默认1分
- **自定义**:手动输入扣分值
4. 填写原因(自动填充或手动修改)
5. 可选择是否关联扣分
6. 点击"确认提交"
**扣分限制**每次加减分不超过3分
#### 学生端作业查看
学生可在学生端"作业情况"页面查看:
- 科目、作业标题
- 截止日期
- 提交状态
- 教师备注
---
### 5. 考勤管理 (attendance.php)(班主任/考勤委员)
#### 添加考勤记录
1. 点击"添加考勤"按钮
2. 选择学生(支持多选)
3. 选择日期
4. 选择考勤状态:
- 正常
- 迟到
- 缺勤
- 请假
5. 填写备注(可选)
6. 设置是否关联扣分(默认开启)
7. 可自定义扣分值(仅班主任)
8. 点击"确认提交"
#### 查看考勤记录
- 按日期和学生筛选考勤记录
- 每条记录显示:
- 学号、姓名
- 日期
- 考勤状态
- 备注
**默认扣分规则**
| 考勤状态 | 默认扣分 |
|---------|---------|
| 缺勤 | 5分 |
| 迟到 | 2分 |
| 请假 | 1分 |
---
### 6. 学生管理 (students.php)(仅班主任)
#### 查看学生列表
- 展示所有学生的学号、姓名、家长手机号、状态等信息
- 支持搜索
#### 新增学生
1. 点击"新增学生"按钮
2. 填写学号、姓名
3. 可选填家长手机号(填写后系统自动创建家长账号)
4. 点击"确认"
#### 批量导入学生
1. 点击"导入学生"按钮
2. 下载导入模板
3. 上传JSON格式的学生数据文件
4. 系统自动解析并导入
5. 导入结果展示成功/失败数量
> 导入的学生初始操行分为60分系统自动创建学生登录账号和密码。
---
### 7. 科目管理 (subjects.php)(班主任/学习委员)
#### 查看科目列表
- 展示所有科目及其状态
#### 添加科目
1. 点击"添加科目"按钮
2. 填写科目名称
3. 可选填科目编码和排序
4. 点击"确认"
#### 管理科目
- 编辑:修改科目信息
- 删除:删除科目(已有作业关联的科目不可删除)
- 启用/禁用:控制科目状态
---
### 8. 管理员管理 (admins.php)(仅班主任)
#### 查看管理员列表
- 展示所有管理员的用户名、姓名、角色
#### 添加管理员
1. 点击"添加管理员"按钮
2. 填写以下信息:
- **用户名**:登录账号
- **姓名**:真实姓名
- **密码**留空则自动生成8位随机密码
- **角色**:选择角色类型
3. 点击"添加"
4. 添加成功后会显示管理员信息和初始密码(请妥善保存)
#### 编辑管理员
1. 点击管理员行的"编辑"按钮
2. 修改角色类型
3. 点击"保存"
#### 重置密码
1. 点击管理员行的"重置密码"按钮
2. 输入新密码至少6位
3. 点击"确认重置"
#### 删除管理员
1. 点击管理员行的"删除"按钮
2. 确认删除操作
3. 不可恢复,请谨慎操作
---
### 9. 修改密码 (password.php)
- 输入原密码和新密码
- 新密码需符合密码强度要求
- 修改成功后需重新登录
---
## 导航栏说明
管理端侧边导航栏包含以下入口:
| 导航项 | 页面 | 权限 |
|-------|------|------|
| 首页 | /admin/dashboard.php | 所有管理员 |
| 操行分管理 | /admin/conduct.php | 班主任/班长/劳动委员/志愿委员 |
| 历史记录 | /admin/history.php | 所有管理员 |
| 作业管理 | /admin/homework.php | 班主任/学习委员 |
| 考勤管理 | /admin/attendance.php | 班主任/考勤委员 |
| 学生管理 | /admin/students.php | 班主任 |
| 科目管理 | /admin/subjects.php | 班主任/学习委员 |
| 管理员管理 | /admin/admins.php | 班主任 |
| 修改密码 | /admin/password.php | 所有管理员 |
---
## 常见问题
### Q: 忘记密码怎么办?
班主任密码请联系系统管理员通过调试接口重置。其他管理员请联系班主任或开发人员重置。
### Q: 如何导出全班德育分记录?
班主任登录后,在"操行分管理"页面点击"导出德育分记录"按钮系统会生成包含所有学生当前分数及加减分历史的CSV文件。
### Q: 如何撤销错误的加减分?
在"历史记录"页面找到对应记录,点击"撤销"按钮。班主任和班长可以撤销任何人的扣分记录。
### Q: 导入学生时格式错误怎么办?
请确保上传的文件是JSON格式包含 `students` 数组,每个学生对象至少包含 `student_no`(学号)和 `name`(姓名)字段。
### Q: 考勤扣分规则可以修改吗?
考勤扣分规则在系统配置中设置,如需调整请联系系统管理员修改后端配置文件。班主任在添加考勤记录时可以自定义扣分值。
---
## 数据导出说明
### 德育分记录导出
- **位置**:操行分管理页面
- **权限**:仅班主任
- **格式**CSVUTF-8编码
- **字段**:学号、姓名、分数、加分历史、减分记录
- **文件名**`德育分记录_日期.csv`
### 历史记录导出
- **位置**:历史记录页面
- **权限**:仅班主任
- **格式**CSVUTF-8编码
- **字段**:时间、学号、姓名、分数变动、原因、操作人
- **支持筛选**:可按时间范围和学生筛选后导出
- **文件名**`历史记录_日期.csv`

View File

@@ -1 +1,59 @@
# 家长端使用文档 # 家长端使用文档
## 登录
1. 打开系统网址,进入登录页面
2. 选择"家长"身份
3. 输入在学校请假系统使用的的**手机号**和**初始密码**
4. 点击"登录"按钮
> **注意**:家长账号由班主任创建,与子女信息关联。每个学生对应一个家长账号。
---
## 功能说明
家长端包含以下页面:
### 1. 首页
登录后进入家长端首页,展示以下信息:
| 信息项 | 说明 |
|-------|------|
| 子女姓名 | 显示关联学生的姓名 |
| 学号 | 显示关联学生的学号 |
| 当前操行分 | 显示子女当前的总操行分 |
页面顶部以紫色渐变卡片展示子女基本信息,下方大字号显示当前操行分。
### 2. 考勤记录
查看子女的考勤记录:
- 按日期显示考勤记录列表
- 每条记录包含:
- 日期
- 考勤状态(正常/迟到/缺勤/请假)
- 备注(如有)
---
## 导航栏说明
家长端导航栏包含以下入口:
| 导航项 | 页面 | 说明 |
|-------|------|------|
| 首页 | /parent/dashboard.php | 子女信息和操行分概览 |
| 考勤记录 | /parent/attendance.php | 子女考勤记录明细 |
---
## 常见问题
### Q: 忘记密码怎么办?
请联系班主任重置密码。
### Q: 为什么只能看到总分,看不到加减分详情?
家长端目前仅展示子女的总操行分,如需了解详细加减分情况,请联系班主任或通过学生端查看。

View File

@@ -1 +1,91 @@
# 学生端使用文档 # 学生端使用文档
## 登录
1. 打开系统网址,进入登录页面
2. 输入的**长学号**和**密码**
3. 点击"登录"按钮
4. 首次登录系统会强制要求修改密码,请设置一个安全的新密码
> **密码要求**长度6-20位必须包含大写字母、小写字母、数字、特殊符号中的至少3种。
---
## 功能说明
学生端包含以下页面:
### 1. 首页
登录后进入学生端首页,展示以下信息:
| 信息项 | 说明 |
|-------|------|
| 当前操行分 | 显示当前总操行分 |
| 班级排名 | 显示在班级中的排名 |
| 作业完成率 | 已完成作业数/总作业数 |
| 本月出勤率 | 本月正常出勤天数/应出勤天数 |
首页下方还会显示最近的操行分变动记录。
### 2. 操行分详情
查看个人完整的操行分明细:
- **当前总分**:显示在页面顶部
- **历史记录列表**:包含每条加减分记录的详细信息
- 变动时间
- 分数变化(绿色为加分,红色为扣分)
- 变动原因
- 操作人
### 3. 作业情况
查看个人作业缺交记录:
- 显示作业列表
- 每条作业显示:
- 科目、作业标题
- 截止日期
- 提交状态(已提交/未提交/迟交)
- 教师备注(如有)
### 4. 考勤记录
查看个人考勤记录:
- 按月份显示考勤记录
- 每条记录包含:
- 日期
- 考勤状态(正常/迟到/缺勤/请假)
- 备注(如有)
### 5. 修改密码
- 输入原密码和新密码
- 新密码需符合密码强度要求
- 修改成功后需重新登录
---
## 常见问题
### Q: 忘记密码怎么办?
请联系班主任或开发人员重置密码。
### Q: 操行分有误怎么办?
请联系班主任或班长核实并调整。
---
## 导航栏说明
学生端底部/顶部导航栏包含以下入口:
| 导航项 | 页面 | 说明 |
|-------|------|------|
| 首页 | /student/dashboard.php | 概览信息和快捷数据 |
| 操行分详情 | /student/conduct_history.php | 完整加减分历史 |
| 作业情况 | /student/homework.php | 作业缺交记录 |
| 考勤记录 | /student/attendance.php | 考勤记录明细 |
| 修改密码 | /student/password.php | 修改登录密码 |

View File

@@ -56,7 +56,7 @@ include __DIR__ . '/../includes/header.php';
<th>分数变动</th> <th>分数变动</th>
<th>原因</th> <th>原因</th>
<th>操作人</th> <th>操作人</th>
<?php if ($role === '班主任' || $role === '班长' || $role === '志愿委员'): ?> <?php if ($role === '班主任' || $role === '班长'): ?>
<th>操作</th> <th>操作</th>
<?php endif; ?> <?php endif; ?>
</tr> </tr>
@@ -108,14 +108,14 @@ async function loadHistory(page = 1) {
<td class="${pointsClass}">${record.points_change > 0 ? '+' : ''}${record.points_change}</td> <td class="${pointsClass}">${record.points_change > 0 ? '+' : ''}${record.points_change}</td>
<td>${escapeHtml(record.reason)}</td> <td>${escapeHtml(record.reason)}</td>
<td>${escapeHtml(record.recorder_name)}</td>`; <td>${escapeHtml(record.recorder_name)}</td>`;
<?php if ($role === '班主任' || $role === '班长' || $role === '志愿委员'): ?> <?php if ($role === '班主任' || $role === '班长'): ?>
html += `<td><button class="btn btn-sm btn-danger" onclick="revokeRecord(${record.record_id})">撤销</button></td>`; html += `<td><button class="btn btn-sm btn-danger" onclick="revokeRecord(${record.record_id})">撤销</button></td>`;
<?php endif; ?> <?php endif; ?>
html += `</tr>`; html += `</tr>`;
}); });
if (res.data.records.length === 0) { if (res.data.records.length === 0) {
const colSpan = <?php echo ($role === '班主任' || $role === '班长' || $role === '志愿委员') ? '6' : '5'; ?>; const colSpan = <?php echo ($role === '班主任' || $role === '班长') ? '6' : '5'; ?>;
html = `<tr><td colspan="${colSpan}" style="text-align:center;">暂无记录</td></tr>`; html = `<tr><td colspan="${colSpan}" style="text-align:center;">暂无记录</td></tr>`;
} }

View File

@@ -35,7 +35,7 @@ include __DIR__ . '/../includes/header.php';
<div class="form-group"> <div class="form-group">
<label>新密码 <span style="color:red;">*</span></label> <label>新密码 <span style="color:red;">*</span></label>
<input type="password" id="newPassword" required> <input type="password" id="newPassword" required>
<small>密码长度6-20位需包含字母和数字</small> <small>密码长度6-20位需包含大写字母、小写字母、数字、特殊符号中的至少3种</small>
</div> </div>
<div class="form-group"> <div class="form-group">
<label>确认新密码 <span style="color:red;">*</span></label> <label>确认新密码 <span style="color:red;">*</span></label>

View File

@@ -196,7 +196,7 @@ include __DIR__ . '/../includes/header.php';
<div class="form-group"> <div class="form-group">
<label>新密码</label> <label>新密码</label>
<input type="password" id="newPassword" required> <input type="password" id="newPassword" required>
<small>密码长度6-20位需包含字母和数字</small> <small>密码长度6-20位需包含大写字母、小写字母、数字、特殊符号中的至少3种</small>
</div> </div>
<div class="form-group"> <div class="form-group">
<label>确认新密码</label> <label>确认新密码</label>
@@ -218,7 +218,7 @@ include __DIR__ . '/../includes/header.php';
<div class="form-group"> <div class="form-group">
<label>新密码</label> <label>新密码</label>
<input type="password" id="forceNewPassword" required> <input type="password" id="forceNewPassword" required>
<small>密码长度6-20位需包含字母和数字</small> <small>密码长度6-20位需包含大写字母、小写字母、数字、特殊符号中的至少3种</small>
</div> </div>
<div class="form-group"> <div class="form-group">
<label>确认新密码</label> <label>确认新密码</label>

View File

@@ -40,7 +40,7 @@ include __DIR__ . '/../includes/header.php';
<div class="form-group"> <div class="form-group">
<label>新密码</label> <label>新密码</label>
<input type="password" id="newPassword" required> <input type="password" id="newPassword" required>
<small>密码长度6-20位需包含字母和数字</small> <small>密码长度6-20位需包含大写字母、小写字母、数字、特殊符号中的至少3种</small>
</div> </div>
<div class="form-group"> <div class="form-group">
<label>确认新密码</label> <label>确认新密码</label>