# FssAdmin_school
**Repository Path**: fsscms/fss-admin_school
## Basic Information
- **Project Name**: FssAdmin_school
- **Description**: 智慧学校管理系统(模块目录名 schoole):面向教务、班主任、科任教师的后台管理、教师移动端,以及面向家长的家长端。
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: main
- **Homepage**: https://school.phpframe.org/
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2026-09-07
- **Last Updated**: 2026-09-15
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 🎓 NovaSchool · 智慧校园管理系统
**一套后端 API,同时驱动 Web 管理后台、教师端小程序与家长端小程序**
[](https://www.php.net/)
[](https://www.workerman.net/)
[](https://vuejs.org/)
[](https://element-plus.org/)
[](https://www.typescriptlang.org/)
[](https://uniapp.dcloud.net.cn/)
[](https://www.mysql.com/)
[](./LICENSE)
---
## 📖 项目简介
**NovaSchool** 是运行在 [Fssphp](https://github.com/xuey490) 全栈框架之上的 **K12 智慧校园管理系统**。
它把学校日常教务中最琐碎、最耗时的环节(建班分课、成绩录入、作业批改、请假审批、通知触达、家校沟通)做成了**一套后端 + 三端协同**的完整闭环:
- 后端演示:https://school.phpframe.org/ 账号:admin 密码:123456
- 家长端(uniApp):https://parent.phpframe.org/ 账号:13712345678 密码:123456
- 备用家长端(H5):https://school.phpframe.org/#/parent 账号:13712345678 密码:123456
- 教师端(uniApp):https://teacher.phpframe.org/ 账号:admin 密码:123456
家长端,教师端(uniApp)可独立打包成微信,支付宝,快手,抖音,百度等小程序,兼容全平台。
[](https://parent.phpframe.org/parentQR.png)
[](https://parent.phpframe.org/parentQR.png)
购买联系作者微信号: xdbyvibm6
| 客户端 | 目录 | 面向用户 | 技术栈 |
|--------|------|----------|--------|
| 🖥️ **Web 管理后台** | `web/` | 校长 / 教务 / 管理员 / 教师(桌面办公) | Vue 3 + Vite + TypeScript + Element Plus + Pinia |
| 📱 **教师端小程序** | `teacher/` | 班主任 / 任课教师(移动办公) | UniApp + uview-plus |
| 👨👩👧 **家长端小程序** | `parent/` | 学生家长(家校互通) | UniApp + uview-plus |
> 三端共用同一套 `/api/schoole/**` 接口,后端零重复逻辑。
### ✨ 核心亮点
- 🤖 **AI 智能出题**:对接 DeepSeek 等大模型,通过 WebSocket **流式推送**生成题目,支持导出 Excel、批量导入与**人工审核入库**闭环
- ✅ **作业自动判分**:单选 / 多选 / 判断 / 填空 / 阅读理解逐题自动判对错,教师端与管理端均以 ✓ / ✕ 直观标记
- 🔄 **学期一键结转**:学期结束时一键升年级、自动毕业,支持结转预览,学生班级历史完整留痕
- 👨👩👧 **多孩子家长账号**:一个家长账号绑定多个孩子,自由切换查看成绩、作业与在校表现
- 🏢 **多租户(SaaS)**:一套系统承载多所学校 / 分校区,数据行级隔离 + 菜单权限隔离
- 📊 **成绩分析与大屏**:班级 / 年级 / 学生多维度统计、分数段分布、数据可视化大屏
---
## 🚀 功能总览
### 一、基础数据管理
| 模块 | 主要能力 |
|------|----------|
| **学期管理** | 学年学期维护、当前学期设置、**学期结转(升年级 / 毕业,带预览)** |
| **年级管理** | 年级维护、及格线 / 优秀线配置、毕业年级标识 |
| **科目管理** | 科目维护、及格线 / 优秀线、启用停用 |
| **班级管理** | 班级创建、班主任 / 任课教师分配、学生名册、名册导出 |
| **教师管理** | 教师档案、任教科目与班级关系、头像、Excel 批量导入导出 |
| **学生管理** | 学生档案、父母信息、班级历史、Excel 批量导入导出(含模板下载) |
| **学籍异动** | 转班、转学、休学、复学、退学、毕业,异动记录留痕 |
### 二、考试与成绩
| 模块 | 主要能力 |
|------|----------|
| **考试批次** | 按学期 / 年级 / 班级建立批次,批量生成各科考试、批次锁定 |
| **成绩录入** | 在线录入(支持正常 / 缺考 / 免考)、**Excel 模板导入导出** |
| **成绩分析** | 班级 / 年级 / 学生维度统计、平均分 / 最高最低分 / 及格率 / 优秀率、分数段分布、结果导出 |
### 三、题库 · 试卷 · 作业
| 模块 | 主要能力 |
|------|----------|
| **题库管理** | 六种题型(单选 / 多选 / 判断 / 填空 / 解答 / 阅读理解)、知识点、难度星级、出处、解析、Excel 批量导入、启用停用 |
| **🤖 AI 出题** | 选定科目 / 年级 / 题型 / 数量 / 难度 / 考察点 → 大模型**流式生成** → 结构化预览 → 一键入库(待审核)/ 导出 Excel → 人工审核通过后正式入库 |
| **试卷管理** | **手动组卷 / 随机组卷 / 蓝图组卷**三种模式、题目快照、发布与撤回、试卷复制、自动生成 |
| **作业管理** | 布置作业(纯文本 / 题库选题 / 整套试卷)、开闭状态、**答案公布控制**、学生在线作答 + 拍照上传、**自动判分**、教师批改评分评语 |
### 四、校务与家校
| 模块 | 主要能力 |
|------|----------|
| **请假管理** | 家长提交 → 教师 / 管理员审批,请假天数与附件 |
| **通知公告** | 校级 / 班级通知、发布与失效时间、附件、**已读统计** |
| **学生评价** | 教师多维度评价(班主任 / 副班主任 / 科任老师 + 学科)、内容与发布状态管理 |
| **班级活动** | 三类活动:**报名**、**投票**(单选 / 多选 / 分组)、**接龙**,参与者名单与实时统计 |
| **班级相册** | 班级照片、荣誉墙、学生照片分类管理 |
| **数据大屏** | 学校概览(班级 / 学生 / 教师 / 考试数)、荣誉展示、近期考试与活动 |
### 五、家长端小程序
登录注册(多校选择)· 多孩子切换 · 首页聚合 · 未读角标提醒(未读公告 / 待完成作业)· 成绩查询 · **在线做作业并提交** · 请假申请 · 班级活动报名 / 投票 / 接龙 · 通知公告 · 学生评价 · 班级相册 · 个人资料
### 六、教师端小程序
登录(多校选择)· 工作台 · 我的班级与学生名册 · 成绩录入 · **作业布置与批改** · 请假审批 · 通知公告 · 班级相册 · 个人资料
---
## 🏗️ 系统架构
```text
┌──────────────────────────────────────────────────────────────────────┐
│ 客户端层 │
│ Web 管理后台 教师端小程序 家长端小程序 │
│ (Vue3 + ElementPlus) (UniApp 微信/H5/APP) (UniApp 微信/H5/APP) │
└───────────────┬──────────────────┬───────────────────┬───────────────┘
│ HTTP /api/schoole/** │
┌───────────────▼──────────────────▼───────────────────▼───────────────┐
│ NovaPHP 应用层 │
│ Attribute 路由 → 中间件管道 → Controller → Service → DAO │
│ (Symfony Routing) (Auth/RBAC/Tenant/日志) (事务/校验/业务编排) │
└───────────────┬──────────────────────────────────────────────────────┘
│
┌──────────┼──────────────────────────┬──────────────────────┐
▼ ▼ ▼ ▼
┌─────────┐ ┌──────────────┐ ┌──────────────┐ ┌────────────────┐
│ MySQL │ │ Redis │ │ Eloquent │ │ WebSocket │
│ 业务数据 │ │ 缓存/队列/限流│ │ / ThinkORM │ │ AI 流式输出 │
└─────────┘ └──────────────┘ └──────────────┘ │ (Workerman) │
└───────┬───────┘
▼
┌────────────────┐
│ DeepSeek / GPT │
└────────────────┘
```
**请求生命周期**:`public/index.php` → `Framework::dispatch()` → 应用解析 → 路由匹配 → 中间件洋葱模型(全局 → 应用 → 路由属性)→ 控制器 → 统一响应 `{ code, msg, message, data }`
**三种运行时**:同一套 `app/` + `framework/` 业务代码,可在 **PHP-FPM**、**Workerman**、**Swoole** 三种进程模型下运行,入口只适配 HTTP 层:
```bash
php -S localhost:8000 -t public # PHP-FPM / 内置服务器
php server.php start # Workerman(HTTP 8000 + WebSocket)
swoole-cli swoole.php start # Swoole
```
---
## 🛠️ 技术栈
### 后端
| 类别 | 技术 | 版本 |
|------|------|------|
| 运行时 | PHP | 8.3+ |
| HTTP / 路由 / DI | Symfony http-foundation · http-kernel · routing · dependency-injection | 7.4 |
| 常驻服务 | Workerman | 5.2 |
| ORM | Laravel Eloquent(主)/ ThinkORM(备) | 12.58 / 4.0 |
| 鉴权 | JWT(lcobucci/jwt) | 5.6 |
| 权限 | Casbin RBAC | 4.2 |
| 缓存 | Redis(predis) | 3.3 |
| 日志 | Monolog | 3.9 |
| 图像处理 | Intervention Image | 4.0 |
| AI 客户端 | Guzzle HTTP | 7.10 |
### 前端与小程序
| 类别 | 技术 |
|------|------|
| Web 管理后台 | Vue 3 · Vite · TypeScript · Element Plus · Pinia · Tailwind CSS · ECharts · xlsx |
| 小程序(教师 / 家长) | UniApp 3 · uview-plus · Vue 3 · TypeScript |
| 实时通信 | 原生 WebSocket(AI 流式输出,默认端口 `12341`) |
### 数据库
MySQL 8.0+ · `utf8mb4` · 业务表统一 `school_` 前缀(40+ 张表)
---
## 📁 项目结构
```text
project/
├── app/ # 后端业务代码
│ ├── Controllers/Schoole/ # 学校模块控制器(23 个业务控制器)
│ ├── Services/Schoole/ # 业务服务层
│ ├── Dao/Schoole/ # 数据访问层
│ ├── Models/Schoole/ # Eloquent 模型
│ ├── Middlewares/ # 鉴权 / 权限 / 租户 / 操作日志
│ └── Services/Ai/ # AI 客户端(OpenAI 兼容协议)
├── framework/ # 自研框架内核(Symfony + Workerman)
├── config/ # 配置(apps / database / jwt / middlewares ...)
├── public/index.php # HTTP 入口
├── database/
│ ├── school_database.sql # 学校模块数据库脚本(一键导入)
│ └── migrations/ # 演进式迁移脚本(057 ~ 089 为学校模块)
├── web/ # Web 管理后台(Vue 3)
│ └── src/views/schoole/ # 学校模块页面(20 个业务模块)
├── teacher/ # 教师端小程序(UniApp)
├── parent/ # 家长端小程序(UniApp)
├── start_websocket_server.php # AI 流式输出 WebSocket 服务
├── server.php # Workerman HTTP + WebSocket 入口
└── docs/ # 接口清单与开发文档
```
---
## ⚡ 快速开始
### 环境要求
| 依赖 | 版本要求 |
|------|----------|
| PHP | ≥ 8.3(需 `pdo_mysql` `curl` `mbstring` `gd` 扩展) |
| MySQL | ≥ 8.0 |
| Redis | ≥ 5.0 |
| Composer | ≥ 2.x |
| Node.js | ≥ 20.19.0 |
| pnpm | ≥ 8.8.0(仅 `web/` 管理后台) |
| 微信开发者工具 | 最新版(调试小程序时需要) |
### 1️⃣ 后端部署
```bash
# 1. 拉取代码并安装依赖
git clone https://github.com//novaschool.git
cd novaschool
composer install
# 2. 配置环境变量
cp .env.example .env
# 编辑 .env,填写数据库 / Redis / JWT / AI 相关配置
```
`.env` 关键配置示例:
```ini
APP_DEBUG = true
DB_TYPE = mysql
DB_HOST = 127.0.0.1
DB_PORT = 3306
DB_NAME = fssoa
DB_USERNAME = root
DB_PASSWORD = root
DB_CHARSET = utf8mb4
REDIS_HOST = 127.0.0.1
REDIS_PORT = 6379
# AI(可选,用于智能出题 / 文章生成)
AI_HTTP_VERIFY = false
```
```bash
# 3. 导入数据库
mysql -uroot -p fssoa < database/school_database.sql
# 4. 启动服务
php server.php start # Workerman 常驻模式:HTTP :8000 + WebSocket :1234
# 或
php -S localhost:8000 -t public # 传统 FPM / 内置服务器模式
```
访问 `http://127.0.0.1:8000` 即可。
### 2️⃣ Web 管理后台
```bash
cd web
pnpm install
pnpm dev # 开发模式(默认端口 3060)
pnpm build # 生产构建(含 vue-tsc 类型检查)
pnpm lint # ESLint 检查
```
开发环境下 Vite 会把 `/api` 请求代理到后端,配置位于 `web/.env.development`:
```ini
VITE_API_URL = /api
VITE_API_PROXY_URL = http://localhost:8000 # 改成你的后端地址
VITE_PORT = 3060
```
### 3️⃣ 教师端 / 家长端小程序
```bash
cd teacher # 或 cd parent
npm install
npm run dev:mp-weixin # 微信小程序
npm run dev:h5 # H5 调试
npm run build:mp-weixin # 生产构建
```
构建产物位于 `dist/dev/mp-weixin`,用**微信开发者工具**导入即可预览。接口地址由环境变量 `VITE_API_BASE` 指定(未设置时默认 `http://127.0.0.1:8000`,H5 为 `/prod`),配置文件为 `src/utils/base.ts`。真机调试前请改为可公网访问的域名。
### 4️⃣ AI 出题服务(可选)
AI 出题依赖独立的 WebSocket 流式服务:
```bash
php start_websocket_server.php start # 监听 :12341
```
随后在后台 **AI 管理** 模块中完成两步配置:
1. 新增**供应商**(如 DeepSeek,`base_url` = `https://api.deepseek.com`,填入 API Key)
2. 新增**模型**记录,`scene` 选择 `question_generate` 并启用
配置完成后,即可在题库页面使用「AI 出题」。
---
## 🔌 API 约定
### 统一响应格式
```json
{
"code": 200,
"msg": "ok",
"message": "ok",
"data": {}
}
```
- `code = 200` 表示成功;`401` 触发登录态失效处理;`403` 表示无权访问
- 业务错误通过 `msg` / `message` 返回,前端统一提示
### 鉴权与权限
- **鉴权**:JWT(HS256),Access Token 默认 1 小时、Refresh Token 24 小时,支持多设备登录与黑名单
- **租户**:请求头 `X-Tenant-ID` 指定当前学校;用户可属于多所学校并自由切换
- **权限**:Casbin RBAC,权限点命名规范 `模块:资源:动作`,例如:
- `schoole:question:index` / `schoole:question:import` / `schoole:question:review`
- `schoole:student:save` / `schoole:score:export`
### 路由定义(PHP 8 Attribute)
```php
#[Route(path: '/api/schoole/question/list', methods: ['GET'], name: 'schoole.question.list')]
#[Auth(required: true)]
#[Permission('schoole:question:index')]
public function list(Request $request): BaseJsonResponse
{
return $this->success($this->svc->getList($this->requestPayload($request)));
}
```
完整接口清单见 [`docs/api-routes.csv`](./docs/api-routes.csv)。
---
## 🗄️ 数据模型
学校模块共 40+ 张业务表,核心表如下:
| 分类 | 数据表 |
|------|--------|
| 基础数据 | `school_term` `school_grade` `school_subject` `school_class` `school_class_teacher` `school_profile` |
| 人员 | `school_student` `school_student_parent` `school_student_class_history` `school_teacher_profile` `school_teacher_subject` |
| 考试成绩 | `school_exam_batch` `school_exam` `school_score` |
| 题库试卷 | `school_question` `school_paper` `school_paper_section` `school_paper_question` `school_paper_blueprint` `school_paper_generation_log` |
| 作业 | `school_homework` `school_homework_submit` `school_homework_file` `school_homework_submit_file` |
| 校务 | `school_leave` `school_notice` `school_notice_read` `school_notice_file` `school_student_eval` |
| 活动相册 | `school_activity` `school_activity_option` `school_activity_vote_option` `school_activity_vote_record` `school_activity_register` `school_activity_chain_entry` `school_activity_participant` `school_album_item` |
| 家长端 | `school_parent_account` `school_parent_student` |
| 其他 | `school_import_log` |
**命名约定**:模型统一使用 `create_time` / `update_time` / `delete_time` 时间戳与软删除;状态字段 `0 = 禁用`、`1 = 启用`。
---
## 🔐 安全特性
内置多层安全防护,业务代码无需重复处理:
- 🛡️ **XSS 过滤**:HTMLPurifier 全局过滤 GET / POST / JSON / 文件
- 🔒 **CSRF Token** 校验与 **CORS** 跨域配置
- 🚦 **接口限流**:基于 Redis 的速率限制,返回 `X-RateLimit-*` 响应头
- ⛔ **IP 黑名单**:支持 IPv4 / IPv6 CIDR 网段
- 🍪 **Cookie 合规**:Cookie 同意中间件
- 📝 **操作日志**:写操作自动落库,可追溯
- 🔑 **JWT 黑名单**:登出 / 改密后旧 Token 立即失效
---
## 🗺️ Roadmap
- [ ] 学生端小程序(在线做题、成绩查询、错题本)
- [ ] 智能组卷增强:知识点覆盖率分析与试卷难度预测
- [ ] 作业 AI 批改:主观题自动评分与评语生成
- [ ] 课表与排课引擎
- [ ] 数据导出中心(成绩单 / 学生档案 PDF 批量生成)
- [ ] 消息推送(微信订阅消息 / 短信)
---
## 🤝 参与贡献
欢迎提交 Issue 与 Pull Request:
1. Fork 本仓库
2. 新建分支:`git checkout -b feature/your-feature`
3. 提交改动:`git commit -m 'feat: add some feature'`
4. 推送分支:`git push origin feature/your-feature`
5. 提交 Pull Request
**代码规范**:后端遵循 PSR-12,使用 PHP-CS-Fixer 与 PHPStan 校验;前端遵循 ESLint + Prettier + Stylelint。所有 PHP 文件需声明 `declare(strict_types=1)`。
```bash
vendor/bin/php-cs-fixer fix # 后端代码格式化
vendor/bin/phpstan analyse # 后端静态分析
cd web && pnpm lint && pnpm fix # 前端检查与自动修复
```
---
## 📄 License
本项目基于 [MIT License](./LICENSE) 开源,可自由用于商业项目。
---
## 🙏 致谢
- 后端框架基于 [FSSPHP](https://github.com/xuey490) 构建
- Web 管理后台基于 Art Design Pro 风格主题
- 小程序 UI 组件使用 [uview-plus](https://uiadmin.net/uview-plus/)
- 感谢所有为项目提交 Issue 与 PR 的贡献者
---
**如果这个项目对您有帮助,请点一个 ⭐ Star 支持一下!**
Made with ❤️ for schools