update readme and license

This commit is contained in:
biss committed 2026-10-05 12:23:32 +08:00
1 parent 2dd238ca2c
commit ce2f91c36f
2 files changed
+762 -7

No files matched your search

+88 -7
View File
@@ -1,18 +1,62 @@
# 明序校园综合服务平台
面向普通高校教学管理、学业服务与校园生活的一体化综合服务平台。后端使用 ASP.NET Core 10、EF Core 10,前端使用 Vue 3、TypeScript 和 Element Plus。
<p align="center">面向普通高校教学管理、学业服务与校园生活的一体化综合服务平台。</p>
<p align="center">
<img alt="ASP.NET Core 10" src="https://img.shields.io/badge/ASP.NET%20Core-10-512BD4?logo=dotnet&logoColor=white">
<img alt="Vue 3" src="https://img.shields.io/badge/Vue-3-4FC08D?logo=vuedotjs&logoColor=white">
<img alt="TypeScript" src="https://img.shields.io/badge/TypeScript-6-3178C6?logo=typescript&logoColor=white">
<img alt="MySQL 8.4" src="https://img.shields.io/badge/MySQL-8.4-4479A1?logo=mysql&logoColor=white">
<img alt="Docker" src="https://img.shields.io/badge/Docker-ready-2496ED?logo=docker&logoColor=white">
<img alt="Release status" src="https://img.shields.io/badge/release-3.0.0--beta2-F59E0B">
<a href="LICENSE"><img alt="License: GPL v3" src="https://img.shields.io/badge/License-GPL%20v3-blue.svg"></a>
</p>
> 生产路径采用 ASP.NET Core + Vue 3;`web-react` 是并行迁移中的验证项目,尚未替代 `web`。详见 [前端迁移说明](#项目结构)。
## 快速导航
| 想做什么 | 从这里开始 |
| --- | --- |
| 在本机开发 | [热更新模式](#本地开发热更新模式) |
| 快速体验单服务应用 | [单服务模式](#本地开发单服务模式) |
| 部署到生产环境 | [MySQL 8.4 生产部署](#mysql-84-生产部署) |
| 使用 Docker / Compose | [跨平台发布与 Docker](#跨平台发布与-docker) |
| 构建 Android App 或 OTA 包 | [Capacitor Android App](#capacitor-android-app) |
| 编写受信任 SDK 插件 | [插件 SDK 文档](docs/plugin-sdk.md) |
## 项目概览
| 层级 | 技术与职责 |
| --- | --- |
| 服务端 | ASP.NET Core 10、EF Core 10、ASP.NET Core Identity;承担认证、授权、数据范围和业务约束 |
| Web | Vue 3、TypeScript、Vite、Element Plus;提供管理端与师生服务界面 |
| 移动端 | PWA 与 Capacitor Android;支持扫码、定位签到及可回滚的前端 OTA |
| 数据与基础设施 | 开发环境 SQLite;生产环境 MySQL 8.4,可选 Redis、RabbitMQ 与 ClickHouse |
| 发布 | systemd、Docker Compose,以及 `linux/amd64` / `linux/arm64` 容器镜像 |
## 核心能力
学校名称、平台全称、简称、定位语和介绍统一配置在
`src/Jiaowu.Api/appsettings.json` 的 `Branding` 节。其他学校部署时只需修改这一处并重新
构建前端;浏览器标题、登录页、PWA、Capacitor 应用、Swagger、课表与成绩分析导出等
品牌信息会同步更新。程序集名、数据库标识和 App 包名属于兼容性标识,不随展示名称变化。
官方电子凭证支持学生自助申请和教务代签,由服务端生成成绩单与学籍状态证明 PDF,并提供唯一凭证编号、二维码公开验真、下载记录、失效和重签;生产部署应通过 `OfficialDocuments__PublicBaseUrl` 配置二维码使用的最终 HTTPS 根地址。
| 领域 | 已覆盖能力 |
| --- | --- |
| 教学运行 | 基础数据、师生档案、课程库、培养方案、教学任务、排课课表、选课、成绩、考试与考场 |
| 学业全周期 | 学籍异动、毕业审核、学位授予、离校办理、电子凭证与公开验真 |
| 移动与提醒 | PWA 安装、Android 原生扫码/定位签到、iCalendar 订阅、App OTA 更新、桌面组件与快捷入口 |
| 平台治理 | 角色与数据范围、操作审计、归档、缓存、后台任务、监控、插件与单点登录 |
### 教学与学业服务
当前已实现系统登录与角色权限、基础数据、用户管理、教师档案、学生档案、课程库、培养方案、教学任务、排课课表、学生选课、成绩管理、考试考场、学籍异动、毕业审核、学位授予、毕业离校和首页统计。人员及课程列表支持组合筛选、服务端分页和完整增删改查;培养方案支持课程模块、专业年级版本、复制新版本、发布与旧版本归档,已发布版本可继续维护名称、学分说明和课程结构,适用专业、入学年级及版本号保持锁定;教学任务支持学期课程开设、多教师、合班、容量校验、发布与结课,公共课由校级教务负责、专业必修/专业选修/实践课下放课程所属学院管理,并支持教师按学期申报授课科目、学院审核授课资格、公共课按若干行政班合并教学班,以及在审核通过的教师池中随机均衡分配后批量生成草稿;排课支持学期作息维护、单双周与周次节次、课程可用时间、校区/教学楼/指定教室约束、不占用教室课程、教室容量、教师/行政班/教室冲突校验、自动生成、手工微调和版本化发布;教师和学生可启用个人教学日历订阅,将固定课程、考试/监考、补考及灵活课程提醒同步到支持 iCalendar 的客户端,并可重置或停用订阅地址;选课支持批次时间窗、投放范围、容量与学分上限、重复课程与课表冲突校验、退课截止时间、满员候补、顺位查询、退课后资格复核与自动递补,以及正式名单和候补队列管理;成绩管理支持分项比例、批量录入、特殊考试状态、自动总评与绩点、教师提交、学院审核、校级发布和学生成绩单;考试管理支持考试计划、场次、考场容量、监考教师、考生名单以及考场/监考/学生时间冲突校验;学籍异动支持休学、复学、退学申请,辅导员、学院、学校三级顺序审核,学生撤回,以及最终审批后自动同步学籍状态;毕业审核按入学年级匹配已发布培养方案,以正式成绩计算总学分、必修通过和未解决不及格课程,支持学院范围查看、人工复核、校级锁定发布和学生结果查询;学位授予以已发布毕业资格为来源,按正式成绩加权平均绩点生成规则结论,支持学院人工复核、校级发布锁定和学生结果查询;毕业离校支持自定义事项与责任部门,按校级、学院、辅导员角色分工办理,强制数据范围校验,学生进度查询,以及必办事项全部完成后的批次锁定。
课程库支持下载标准模板后批量导入 `.xlsx`,按课程编码新增或更新,并在整批校验失败时不写入任何课程;授课资格既支持教师申报后审核,也支持学院在本院教师范围内直接分配;学生可在“我的培养方案”中查看本人适用的已发布方案,并按已完成、在读、重修中、未通过、待完成和未修读状态核对课程与学分进度。
### 安全、权限与扩展
权限采用后端强制校验的角色与数据范围模型。多角色账号按 `All > College > Class > Self` 取最高数据范围:校级角色可访问全校数据,院系管理员限定本学院,辅导员通过稳定的账号 ID 绑定所带行政班,教师和学生限定本人及当前教学关系;前端菜单和路由限制仅作为交互辅助,不替代 API 授权。
系统提供统一插件平台。`SuperAdmin` 可以从“组织与权限 → 插件中心”启用或停用内置业务插件;状态变更同时作用于菜单、前端路由和对应后端 API,停用不会删除插件已有数据。插件只控制业务能力是否开放,原接口的角色与数据范围校验仍然有效。生产环境升级后需先执行数据库迁移,再启动新版本服务。
@@ -21,6 +65,32 @@
人员档案与登录账号分开维护。新增或 Excel 导入学生、教师档案时不会自动创建账号,也不会在修改档案时同步账号。学生首次使用时可以在登录页进入“自助激活”,填写姓名、学号、学院、专业、年级和行政班;全部匹配在籍档案后自行设置密码,系统才创建 Identity 登录账号并关联学生角色。`AspNetUsers` 作为 ASP.NET Core Identity 的内部安全存储,负责密码哈希、登录锁定、角色和令牌。
官方电子凭证支持学生自助申请和教务代签,由服务端生成成绩单与学籍状态证明 PDF,并提供唯一凭证编号、二维码公开验真、下载记录、失效和重签;生产部署应通过 `OfficialDocuments__PublicBaseUrl` 配置二维码使用的最终 HTTPS 根地址。
## 项目结构
```text
├─ src/ ASP.NET Core API、领域服务与插件抽象
├─ tests/ 后端自动化测试
├─ web/ 当前生产前端(Vue 3)
├─ web-react/ React 并行迁移与验证,不作为当前生产入口
├─ packages/CaptchaKit/ CAPTCHA 子模块
├─ deploy/ systemd 等部署资源
├─ docs/ SDK 与设计文档
└─ .gitea/workflows/ 发布、打包及多架构镜像工作流
```
## 运行要求
| 场景 | 必需环境 |
| --- | --- |
| 本地开发 | .NET SDK 10、Node.js 24、npm;默认使用 SQLite,无须先安装 MySQL |
| 生产部署 | ASP.NET Core Runtime 10、MySQL 8.4;建议配置 HTTPS 反向代理 |
| 可选能力 | Redis(缓存与多实例会话)、RabbitMQ(后台任务)、ClickHouse(分析读模型) |
| Android 构建 | Android Studio、Android SDK;详见下方 Capacitor 指引 |
> `packages/CaptchaKit` 是 Git 子模块。首次克隆后请执行:`git submodule update --init --recursive packages/CaptchaKit`。
## 本地开发:热更新模式
本地开发固定使用 SQLite。首次启动会自动创建空的
@@ -695,15 +765,22 @@ MySQL 时仍应使用前文的 `SslMode=VerifyFull` 和 CA,并拆分具备 DDL
Docker 镜像不包含 `.env`、数据库密码或 JWT 密钥。应用容器以非 root 用户运行并监听
8080 端口;生产环境仍应由反向代理负责 HTTPS、访问日志和请求大小限制。
## 验证
## 验证与质量检查
提交前可按与发布工作流一致的顺序执行以下检查。`npm ci` 使用锁定依赖;后端测试使用 Release 配置。
```powershell
dotnet test Jiaowu.slnx
npm --prefix web run build
Set-Location web
npm ci
npm run build
npm audit --audit-level=moderate
Set-Location ..
dotnet test Jiaowu.slnx --configuration Release
git diff --check
```
## 人员、课程、学期与成绩归档
## 归档策略
人员和课程列表默认显示未归档记录,可切换“已归档”或清空筛选查看全部;成绩管理提供同样的归档筛选。学期管理保留当前和历史学期展示,并可按归档状态筛选。各页面均提供单条、批量归档及恢复,提交前展示阻断事项和处理入口,归档或恢复原因必填,每批最多 100 条。批量请求逐项重新校验和提交,显示每条记录的处理结果。
@@ -717,3 +794,7 @@ npm --prefix web run build
统一接口为 `POST /api/archives/{kind}/preview`、`POST /api/archives/{kind}/apply` 和 `GET /api/archives/{kind}/{id}/history?page=1`,其中 `kind` 为 `teachers`、`students`、`courses`、`terms`、`grades`。原学期归档接口继续可用并复用同一校验流程。历史日志按每页 20 条读取,旧归档记录不会伪造操作日志。
数据库新增 `20260905093721_UnifiedArchiving` MySQL 迁移;SQLite 开发库由 `DevelopmentSqliteMigrator` 补齐字段和归档日志表,已有记录默认未归档,已有学期归档状态保留。部署时应按现有数据库升级流程应用迁移。
## 许可证
本项目采用 [GNU General Public License v3.0](LICENSE)(GPL-3.0)发布。使用、修改或再分发本项目时,请遵守该许可证的条款。