# task_management_sys **Repository Path**: wangyiming888/task_management_sys ## Basic Information - **Project Name**: task_management_sys - **Description**: 一个任务管理系统,大家来修改 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-08-24 - **Last Updated**: 2026-08-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 学生任务管理系统(Student Task Management System) 基于 **FastAPI + Vue 3 + MySQL + Docker Compose** 的学生任务管理项目:学生注册后主动领取任务、以富文本(文字+图片)提交完成情况;班长发布/修改任务并审核工单发放积分;超级管理员登录后默认查看全员积分排名。支持 **RBAC**(基于角色的访问控制)权限管理、**动态菜单配置**、**Excel 导入导出**。 ## 快速启动(本地开发) ### 前置条件 - Python 3.12+ - Node.js 18+ - MySQL 8.0+,账号 `root` / 密码 `wang0912`,端口 `3306` - 已创建数据库 `wym` ### 1. 初始化数据库 ```bash mysql -u root -pwang0912 -e "CREATE DATABASE IF NOT EXISTS wym CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" ``` ### 2. 启动后端 ```bash cd task_management_sys # 创建虚拟环境 python -m venv venv # 激活虚拟环境(Windows) .\venv\Scripts\activate # 安装依赖 pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ # 启动后端服务(端口 8030) uvicorn app.main:app --host 0.0.0.0 --port 8030 --reload ``` ### 3. 启动前端 ```bash cd frontend # 安装依赖 npm install # 启动前端开发服务器(端口 8031) npm run dev ``` ### 4. 访问系统 | 入口 | 地址 | | --- | --- | | 前端页面 | http://localhost:8031 | | 后端 API | http://localhost:8030/api/health | | 接口文档(Swagger) | http://localhost:8030/docs | --- ## Docker 部署(可选) ```bash docker compose up -d ``` 启动后访问: | 入口 | 地址 | | --- | --- | | 前端页面 | http://localhost:8030 | | 后端 API | http://localhost:8030/api/health | --- ## 内置演示账号(密码均为 `123456`) | 账号 | 姓名 | 角色 | 说明 | | --- | --- | --- | --- | | `SUPER_ADMIN` | 超级管理员 | SUPER_ADMIN | 登录后默认进入全员积分排行榜 | | `A002` | 李四 | STUDENT + ADMIN | 班长:既是学生又是管理员,可发布任务 | | `A003` | 王五 | STUDENT + ADMIN | 班长 | | `A001` | 张三 | STUDENT | 普通学生 | --- ## 功能一览 - **用户注册/登录**:学号、名字、手机号码、照片上传 - **RBAC 权限管理**:基于角色的菜单和按钮级权限控制 - **动态菜单配置**:支持二级菜单,菜单树由后端权限数据动态渲染,可通过菜单管理页面配置 - **Excel 导入导出**:用户和任务数据的批量导入导出,支持模板下载 - **学生端**:浏览任务大厅 → 领取任务 → 富文本提交完成情况(文本+图片)→ 查看审核结果与积分 - **班长(ADMIN)**:发布/修改/删除任务,查看每个任务的完成情况(工单),通过/驳回并自动发放积分 - **超级管理员(SUPER_ADMIN)**:全部权限,登录后默认看到所有学生积分倒序排名 - **积分排行榜**:按已获总积分倒序,前三名高亮 - **个人任务**:管理员可发布仅指定学生可见的任务,其他学生不可见 - **父子任务**:发布任务时可内嵌多个子任务(名称+积分),子任务不显示在任务大厅,需进入父任务详情查看;子任务可独立领取/提交/审核,无需全部完成 - **任务大厅优化**:按发布日期自动折叠分组(今天/昨天/本周/更早),支持按任务名称和日期范围搜索 - **一键通过**:批量通过所有待审核工单,仅发放已通过子任务的积分 ## 权限说明 ### 角色定义 | 角色 | 权限范围 | | --- | --- | | `STUDENT`(学生) | 查看任务、领取任务、提交完成情况、查看排行榜、查看本人记录 | | `ADMIN`(班长) | 继承学生权限 + 发布/修改/删除任务、审核工单、一键通过 | | `SUPER_ADMIN`(超级管理员) | 全部权限 + 用户管理、角色分配、菜单管理 | ### 菜单权限(支持二级菜单) | 一级菜单 | 二级菜单 | 权限编码 | 可见角色 | | --- | --- | --- | --- | | 任务大厅 | - | `task:view` | ALL | | 任务管理 | 完成情况 | `task:records` | ADMIN+ | | 任务管理 | 发布任务 | `task:publish` | ADMIN+ | | 数据中心 | 积分排行榜 | `ranking:view` | ALL | | 数据中心 | 我的任务 | `my:records` | ALL | | 系统管理 | 用户管理 | `user:view` | SUPER_ADMIN | | 系统管理 | 菜单管理 | `menu:manage` | SUPER_ADMIN | | 个人中心 | - | `profile:view` | ALL | ### 按钮权限 | 权限编码 | 说明 | 父菜单 | | --- | --- | --- | | `task:edit` | 修改任务 | task:view | | `task:delete` | 删除任务 | task:view | | `task:claim` | 领取任务 | task:view | | `task:submit` | 提交任务 | task:view | | `task:review` | 审核工单 | task:records | | `task:approve_all` | 一键通过 | task:records | | `user:manage` | 管理用户 | user:view | | `user:role` | 修改角色 | user:view | --- ## 目录结构 ``` task_management_sys/ ├── docker-compose.yml # Docker Compose 配置 ├── README.md # 项目说明文档 ├── requirements.txt # Python 依赖 ├── docs/ │ └── 项目总结文档.md # 项目设计文档 ├── app/ # 主后端应用 │ ├── __init__.py │ ├── config.py # 数据库/JWT/上传配置 │ ├── database.py # SQLAlchemy 引擎与会话 │ ├── deps.py # 登录校验 / 角色权限依赖 │ ├── init_db.py # 自动建库建表 + 种子数据 │ ├── main.py # 应用入口、路由挂载 │ ├── models.py # 数据模型(含权限菜单字段) │ ├── schemas.py # Pydantic 模型(含菜单树) │ ├── security.py # 密码哈希 + JWT │ ├── services/ │ │ └── excel_service.py # Excel 导入导出服务 │ └── routers/ │ ├── auth.py # 认证(登录/注册) │ ├── permissions.py # 权限管理 + 菜单树接口 │ ├── ranking.py # 排行榜 │ ├── records.py # 任务记录 │ ├── tasks.py # 任务管理(含导入导出) │ ├── upload.py # 文件上传 │ └── users.py # 用户管理(含导入导出) ├── backend/ # Docker 部署用后端 │ ├── Dockerfile │ ├── requirements.txt │ └── app/ # 与 app/ 内容相同 └── frontend/ # Vue3 + Vite + Element Plus ├── Dockerfile ├── nginx.conf ├── package.json ├── vite.config.js └── src/ ├── api/ # API 请求封装 ├── components/ # 组件 │ └── RichEditor.vue # wangEditor 富文本 ├── router/ # 路由配置 ├── store/ # Pinia 状态管理 │ └── auth.js # 认证状态 + 菜单树 └── views/ # 页面 ├── Login.vue ├── Register.vue ├── TaskList.vue # 任务大厅(含导入导出按钮) ├── TaskDetail.vue ├── TaskEdit.vue ├── MyRecords.vue ├── TaskRecords.vue ├── Ranking.vue ├── UserManagement.vue # 用户管理(含导入导出弹窗) ├── MenuManagement.vue # 菜单管理页面 └── UserProfile.vue ``` ## 技术栈 | 层级 | 技术 | 版本 | | --- | --- | --- | | 后端框架 | FastAPI | 0.115+ | | 数据库 | MySQL | 8.0+ | | ORM | SQLAlchemy | 2.0+ | | 认证 | JWT (PyJWT) | 2.8+ | | 前端框架 | Vue 3 | 3.5+ | | UI 组件 | Element Plus | 2.9+ | | 构建工具 | Vite | 5.4+ | | 富文本 | wangEditor | 5.1+ | | Excel | openpyxl | 3.1+ | | 部署 | Docker Compose | - | ## 环境变量 | 变量 | 默认值 | 说明 | | --- | --- | --- | | `DATABASE_URL` | `mysql+pymysql://root:wang0912@127.0.0.1:3306/wym?charset=utf8mb4` | 数据库连接串 | | `JWT_SECRET` | `stms-secret-key-please-change-in-production` | JWT 密钥(生产环境请修改) | | `JWT_ALGORITHM` | `HS256` | JWT 算法 | | `JWT_EXPIRE_HOURS` | `72` | Token 有效期(小时) | | `UPLOAD_DIR` | `uploads/` | 文件上传目录 | ## API 接口速览 ### Excel 导入导出 | 方法 | 路径 | 权限 | 说明 | | --- | --- | --- | --- | | GET | `/api/users/export` | SUPER_ADMIN | 导出用户列表到 Excel | | GET | `/api/users/import/template` | SUPER_ADMIN | 下载用户导入模板 | | POST | `/api/users/import/file` | SUPER_ADMIN | 上传 Excel 批量导入用户 | | GET | `/api/tasks/export` | 登录 | 导出任务列表到 Excel | | GET | `/api/tasks/export/records` | 登录 | 导出任务完成记录(工单)到 Excel | | GET | `/api/tasks/import/template` | 登录 | 下载任务导入模板 | | POST | `/api/tasks/import/file` | ADMIN | 上传 Excel 批量导入任务 | ### 菜单管理 | 方法 | 路径 | 权限 | 说明 | | --- | --- | --- | --- | | GET | `/api/permissions/menus/tree` | 登录 | 获取当前用户的菜单树(动态侧边栏) | | GET | `/api/permissions/menus/full` | SUPER_ADMIN | 获取完整菜单树(含隐藏菜单) | | GET | `/api/permissions` | SUPER_ADMIN | 权限列表 | | POST | `/api/permissions` | SUPER_ADMIN | 创建权限/菜单 | | PUT | `/api/permissions/{id}` | SUPER_ADMIN | 修改权限/菜单 | | DELETE | `/api/permissions/{id}` | SUPER_ADMIN | 删除权限/菜单 | 完整 API 文档见 [http://localhost:8030/docs](http://localhost:8030/docs)(Swagger UI)。 ## 注意事项 - 生产环境请务必修改 `JWT_SECRET` 和所有账号密码 - 截止日期以服务器本地时区(Asia/Shanghai)的日期为准 - 富文本内容以 HTML 形式存储,前端渲染时来自登录后的可信数据 - 上传文件保存在 `uploads/` 目录,大小限制 10MB - Excel 导入仅支持 `.xlsx` 格式 更多设计细节见 [docs/项目总结文档.md](docs/项目总结文档.md)。