# teacher-workload-system **Repository Path**: listen-carefully/teacher-workload-system ## Basic Information - **Project Name**: teacher-workload-system - **Description**: 教师工作量及超课时费核算系统 - 基于React + FastAPI的全栈Web应用 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-05 - **Last Updated**: 2026-03-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 教师工作量及超课时费核算系统
![License](https://img.shields.io/badge/license-MIT-blue.svg) ![React](https://img.shields.io/badge/React-19.2-61dafb.svg) ![FastAPI](https://img.shields.io/badge/FastAPI-Latest-009688.svg) ![Python](https://img.shields.io/badge/Python-3.13-3776ab.svg) ![MySQL](https://img.shields.io/badge/MySQL-8.0-4479a1.svg) 一个基于 React + FastAPI 的高校教师工作量自动化核算管理系统 [在线演示](http://demo.example.com) · [功能特性](#-功能特性) · [快速开始](#-快速开始) · [技术栈](#-技术栈)
--- ## 📖 项目简介 教师工作量及超课时费核算系统是一个面向高校教务管理的全栈Web应用,旨在解决传统手工核算效率低、易出错的问题。系统实现了教学任务管理、工作量自动核算、超课时费计算、多维度统计分析等核心功能,支持多角色权限管理和数据隔离。 ### 核心价值 - 🚀 **自动化核算**:一键完成全校教师工作量核算,节省90%人工时间 - 📊 **智能统计**:多维度数据分析,实时生成可视化报表 - 🔐 **权限管理**:基于RBAC的三级权限体系,数据安全隔离 - 📱 **响应式设计**:支持PC、平板等多种设备访问 - 💾 **数据导入导出**:支持Excel批量导入教师信息、导出核算结果 --- ## ✨ 功能特性 ### 核心功能模块 #### 1. 基础数据管理 - **院系管理**:院系信息的增删改查、状态管理 - **教师管理**:教师档案管理、支持Excel批量导入 - **课程管理**:课程信息维护、课程类型配置 - **班级管理**:班级信息管理、学生人数统计 - **学期管理**:学期设置、当前学期切换 #### 2. 教学任务管理 - 教学任务分配与调整 - 支持按学期、教师、课程多维度查询 - 实际学时录入与修改 - 任务统计与汇总 #### 3. 工作量核算 - **核算标准配置**:按职称设置额定工作量和超课时单价 - **课程系数设置**:理论课(1.0)、实验课(1.2)、实训课(1.5) - **一键核算**:自动计算所有教师工作量和超课时费 - **核算明细**:详细展示每门课程的计算过程 - **发布管理**:草稿/已发布状态控制,发布后锁定数据 #### 4. 统计分析 - **数据概览**:教师数、课程数、任务数等核心指标 - **工作量统计**:总工作量、超课时费汇总 - **排行榜**:教师工作量TOP排名 - **图表展示**:柱状图、饼图、折线图等多种图表 - **数据导出**:支持导出Excel报表 #### 5. 通知系统 - 支持全校通知、院系通知、个人通知 - 未读消息提醒 - 通知优先级设置 - 已读/未读状态管理 #### 6. 权限管理 - **超级管理员**:全局管理权限 - **院系管理员**:本院系数据管理权限 - **教师**:个人数据查看权限 - 操作日志记录与审计 --- ## 🎯 核心算法 ### 工作量计算公式 ``` 单门课程工作量 = 实际学时 × 课程系数 课程系数: - 理论课(theory): 1.0 - 实验课(experiment): 1.2 - 实训课(practice): 1.5 总工作量 = Σ(所有课程工作量) 超课时 = MAX(总工作量 - 额定工作量, 0) 超课时费 = 超课时 × 超课时单价 ``` ### 计算示例 某教授的核算标准: - 额定工作量:280学时 - 超课时单价:100元/学时 本学期教学任务: | 课程 | 类型 | 实际学时 | 系数 | 工作量 | |--------------|--------|----------|------|--------| | 程序设计基础 | 理论课 | 64 | 1.0 | 64.0 | | 数据结构 | 理论课 | 64 | 1.0 | 64.0 | | 程序设计实验 | 实验课 | 32 | 1.2 | 38.4 | | 软件工程实训 | 实训课 | 80 | 1.5 | 120.0 | 计算结果: - 总工作量 = 286.4 学时 - 超课时 = 286.4 - 280 = 6.4 学时 - 超课时费 = 6.4 × 100 = 640 元 --- ## 🛠️ 技术栈 ### 前端技术 | 技术 | 版本 | 说明 | |------|------|------| | React | 19.2 | 前端框架 | | TypeScript | 5.9 | 类型安全 | | Ant Design | 6.1 | UI组件库 | | Zustand | 5.0 | 状态管理 | | React Router | 7.12 | 路由管理 | | Axios | 1.13 | HTTP请求 | | ECharts | 6.0 | 数据可视化 | | Vite | 7.2 | 构建工具 | ### 后端技术 | 技术 | 版本 | 说明 | |------|------|------| | Python | 3.13 | 编程语言 | | FastAPI | Latest | Web框架 | | SQLAlchemy | 2.0 | ORM框架 | | MySQL | 8.0 | 数据库 | | Pydantic | 2.0 | 数据验证 | | JWT | - | 身份认证 | | BCrypt | - | 密码加密 | | openpyxl | 3.1 | Excel处理 | ### 架构特点 - 🏗️ **前后端分离**:React SPA + RESTful API - 🔒 **安全认证**:JWT Token + BCrypt密码加密 - 📦 **模块化设计**:清晰的代码组织结构 - 🎨 **响应式布局**:适配多种屏幕尺寸 - 🚀 **高性能**:Vite构建 + FastAPI异步处理 --- ## 🚀 快速开始 ### 环境要求 - Node.js >= 18.0 - Python >= 3.13 - MySQL >= 8.0 ### 1. 克隆项目 ```bash git clone https://github.com/yourusername/workload-system.git cd workload-system ``` ### 2. 数据库初始化 ```bash # 使用MySQL客户端执行初始化脚本 mysql -u root -p < DB/init_database.sql ``` 或使用SQLyog等图形化工具执行 `DB/init_database.sql` ### 3. 后端启动 ```bash cd backend # 创建虚拟环境(首次) python -m venv venv # 激活虚拟环境 # Windows: venv\Scripts\activate # Linux/Mac: source venv/bin/activate # 安装依赖 pip install -r requirements.txt # 配置环境变量 cp .env.example .env # 编辑 .env 文件,配置数据库连接信息 # 启动服务 python -m uvicorn app.main:app --reload --host 0.0.0.0 --port 8000 ``` 后端服务将运行在 http://localhost:8000 API文档:http://localhost:8000/docs ### 4. 前端启动 ```bash cd admin # 安装依赖 npm install # 启动开发服务器 npm run dev ``` 前端应用将运行在 http://localhost:5173 ### 5. 登录系统 默认测试账号: | 角色 | 账号 | 密码 | |------------|----------|----------| | 超级管理员 | admin | admin123 | | 院系管理员 | cs_admin | 123456 | | 教师 | T001 | 123456 | --- ## 📁 项目结构 ``` workload-system/ ├── admin/ # 前端项目 │ ├── src/ │ │ ├── api/ # API接口封装 │ │ ├── components/ # 公共组件 │ │ ├── pages/ # 页面组件 │ │ ├── router/ # 路由配置 │ │ ├── stores/ # 状态管理 │ │ ├── types/ # TypeScript类型 │ │ ├── utils/ # 工具函数 │ │ └── styles/ # 全局样式 │ ├── docs/ # 项目文档 │ └── package.json │ ├── backend/ # 后端项目 │ ├── app/ │ │ ├── api/ # API路由 │ │ │ └── v1/ # v1版本接口 │ │ ├── models/ # 数据库模型 │ │ ├── schemas/ # Pydantic模式 │ │ ├── services/ # 业务服务 │ │ ├── utils/ # 工具函数 │ │ ├── config.py # 配置文件 │ │ ├── database.py # 数据库连接 │ │ └── main.py # 应用入口 │ ├── uploads/ # 上传文件目录 │ ├── .env # 环境配置 │ └── requirements.txt # Python依赖 │ ├── DB/ # 数据库脚本 │ ├── ER图SQL文件/ │ └── init_database.sql # 初始化脚本 │ └── README.md # 项目说明 ``` --- ## 📊 数据库设计 ### ER图概览 系统共包含13张数据表,核心实体关系如下: ``` 院系 (department) ├─→ 教师 (teacher) ├─→ 班级 (class_info) └─→ 课程 (course) 学期 (semester) ├─→ 教学任务 (teaching_task) ├─→ 核算标准 (workload_standard) └─→ 工作量核算结果 (workload_result) 教学任务 (teaching_task) └─→ 工作量核算明细 (workload_detail) 用户 (sys_user) ├─→ 通知 (notice) ├─→ 通知已读 (notice_read) └─→ 操作日志 (operation_log) ``` ### 核心数据表 | 表名 | 说明 | 记录数(示例) | |------|------|----------------| | sys_user | 系统用户 | ~100 | | department | 院系信息 | ~20 | | teacher | 教师档案 | ~500 | | course | 课程信息 | ~300 | | class_info | 班级信息 | ~100 | | semester | 学期信息 | ~10 | | teaching_task | 教学任务 | ~2000/学期 | | workload_standard | 核算标准 | ~4/学期 | | workload_result | 核算结果 | ~500/学期 | | workload_detail | 核算明细 | ~2000/学期 | | notice | 通知公告 | ~100 | | notice_read | 已读记录 | ~5000 | | operation_log | 操作日志 | ~10000 | 详细设计请参考:[数据库设计文档](admin/docs/06-数据库设计文档.md) --- ## 🔌 API接口 ### 接口规范 - 基础路径:`/api/v1` - 请求方式:RESTful风格(GET/POST/PUT/DELETE) - 响应格式:JSON - 认证方式:JWT Bearer Token ### 统一响应格式 ```json { "code": 200, "message": "success", "data": {} } ``` ### 核心接口列表 | 模块 | 接口 | 说明 | |------|------|------| | 认证 | POST /api/v1/auth/login | 用户登录 | | 认证 | POST /api/v1/auth/logout | 用户登出 | | 认证 | GET /api/v1/auth/me | 获取当前用户信息 | | 院系 | GET /api/v1/departments | 获取院系列表 | | 教师 | GET /api/v1/teachers | 获取教师列表 | | 教师 | POST /api/v1/teachers/import | 批量导入教师 | | 课程 | GET /api/v1/courses | 获取课程列表 | | 任务 | GET /api/v1/tasks | 获取教学任务列表 | | 任务 | POST /api/v1/tasks | 创建教学任务 | | 标准 | GET /api/v1/standards | 获取核算标准 | | 核算 | POST /api/v1/workloads/calculate | 执行工作量核算 | | 核算 | POST /api/v1/workloads/publish | 发布核算结果 | | 核算 | GET /api/v1/workloads/export | 导出核算结果 | | 统计 | GET /api/v1/statistics/overview | 获取统计概览 | | 统计 | GET /api/v1/statistics/teacher-ranking | 教师排行榜 | | 通知 | GET /api/v1/notices/my | 获取我的通知 | 完整API文档:http://localhost:8000/docs --- ## 🎨 界面预览 ### 登录页面 - 简洁的登录界面 - 支持记住密码 - 输入验证提示 ### 工作台 - 数据概览卡片(教师数、课程数、任务数等) - 工作量统计图表 - 核算进度展示 - 教师工作量排行榜 - 未读通知列表 ### 工作量核算 - 核算参数设置 - 一键核算按钮 - 核算进度实时显示 - 核算结果列表 - 明细查看弹窗 - 批量发布/撤回 ### 统计分析 - 多维度筛选条件 - ECharts可视化图表 - 数据表格展示 - Excel导出功能 --- ## 🔐 安全特性 ### 认证与授权 - JWT Token身份认证 - Token自动刷新机制 - BCrypt密码加密存储 - 基于角色的访问控制(RBAC) ### 数据安全 - SQL注入防护(ORM参数化查询) - XSS攻击防护(前端输入过滤) - CSRF防护(Token验证) - 敏感数据加密存储 ### 操作审计 - 登录日志记录 - 敏感操作日志 - IP地址记录 - 操作时间追溯 --- ## 📈 性能优化 ### 前端优化 - 路由懒加载 - 组件按需加载 - 图片懒加载 - 请求防抖节流 - 列表虚拟滚动 ### 后端优化 - 数据库索引优化 - SQL查询优化 - 分页查询 - 异步处理 - 缓存机制 --- ## 🧪 测试 ### 前端测试 ```bash cd admin npm run test ``` ### 后端测试 ```bash cd backend pytest ``` --- ## 📦 部署 ### 生产环境构建 #### 前端构建 ```bash cd admin npm run build # 构建产物在 dist/ 目录 ``` #### 后端部署 ```bash cd backend # 使用 gunicorn 部署 gunicorn app.main:app -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000 ``` ### Docker部署(推荐) ```bash # 构建镜像 docker-compose build # 启动服务 docker-compose up -d ``` ### Nginx配置示例 ```nginx server { listen 80; server_name your-domain.com; # 前端静态文件 location / { root /var/www/workload-system/dist; try_files $uri $uri/ /index.html; } # 后端API代理 location /api { proxy_pass http://localhost:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } # 上传文件访问 location /uploads { proxy_pass http://localhost:8000; } } ``` --- ## 🤝 贡献指南 欢迎提交Issue和Pull Request! ### 开发流程 1. Fork本仓库 2. 创建特性分支 (`git checkout -b feature/AmazingFeature`) 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 提交Pull Request ### 代码规范 - 前端:遵循ESLint规则 - 后端:遵循PEP 8规范 - 提交信息:遵循Conventional Commits规范 --- ## 📄 许可证 本项目采用 [MIT](LICENSE) 许可证 --- ## 👨‍💻 作者 **Your Name** - GitHub: [@yourusername](https://github.com/yourusername) - Email: your.email@example.com --- ## 🙏 致谢 感谢以下开源项目: - [React](https://reactjs.org/) - [FastAPI](https://fastapi.tiangolo.com/) - [Ant Design](https://ant.design/) - [ECharts](https://echarts.apache.org/) - [SQLAlchemy](https://www.sqlalchemy.org/) --- ## 📞 联系方式 如有问题或建议,欢迎通过以下方式联系: - 提交 [Issue](https://github.com/yourusername/workload-system/issues) - 发送邮件至:your.email@example.com - 加入讨论群:[QQ群/微信群] ---
**⭐ 如果这个项目对你有帮助,请给一个Star支持一下!⭐** Made with ❤️ 宁采臣的剑