面向成都信息工程大学学生的校园教务助手。项目将 CAS、EAMS 和一网通办登录流程封装在服务端,通过一个移动端优先的 PWA 提供课表、成绩、考试、空教室和学籍信息查询。
- 在线访问:https://fanxiaogao05.dpdns.org
- API 文档:docs/API.md
- 部署说明:deploy/README.md
- SSH 后端更新:deploy/SSH_BACKEND_UPDATE.md
- Android 构建:apps/web/ANDROID.md
本项目是非官方学生项目,与成都信息工程大学及学校教务系统运营方无隶属或授权关系。
- 统一身份认证登录及应用会话管理
- 学期列表、成绩和个人课表查询
- 期末考试、补考批次及考场安排查询
- 按学期、校区、教学周、星期和节次查询空教室
- 学籍信息与培养计划完成情况
- 教学周、公开校历和校园地图
- 最近课表、手动课程和教室占用数据的本机离线查看
- PWA 安装及 Capacitor Android APK
浏览器不直接访问学校认证系统。后端为每位用户创建独立的 jwxt.Client 和 CookieJar,避免不同学生的学校会话相互混用。
| 部分 | 技术 |
|---|---|
| Web | Vue 3、TypeScript、Vite、Pinia、Vue Router、vite-plugin-pwa |
| Android | Capacitor 8、Gradle |
| API | Go、Hertz |
| JWXT SDK | Resty v2、goquery、net/http/cookiejar |
| 数据 | SQLite、Redis |
| 部署 | Cloudflare Pages、Cloudflare Tunnel、systemd |
.
├── apps/
│ ├── api/ # HTTP 服务入口
│ ├── web/ # Vue PWA 与 Android 工程
│ └── worker/ # EAMS/CAS 网络连通性探测
├── internal/ # 后端业务模块与基础能力
├── migrations/ # SQLite 迁移
├── pkg/jwxt/ # 独立的 CAS/EAMS/JWXT SDK
├── docs/ # HTTP API 文档
├── deploy/ # 正式环境部署说明与 systemd 配置
└── cmd/jwxt-demo/ # SDK 手动验证程序
各模块的实现约定见对应目录下的 README:
- Go 1.25.12
- Redis
- Node.js 24
- pnpm 10.26.1
git clone https://github.com/shajinhui/cuit-server.git
cd cuit-server
cp .env.example .env
openssl rand -base64 32将生成的值写入 .env 的 JWXT_CREDENTIAL_KEY,然后启动:
go run ./apps/apiAPI 默认监听 http://127.0.0.1:8888。首次启动会自动创建 data/cuit-server.db 并执行数据库迁移。Redis 未启动时 API 仍可运行,但会跳过共享查询缓存。
cd apps/web
pnpm install --frozen-lockfile
pnpm devWeb 默认运行在 http://127.0.0.1:5173,开发服务器会将 /api 代理到本地 API。
后端:
go test ./...
go vet ./...前端:
cd apps/web
pnpm run checkpnpm run check 会依次执行 ESLint、Vitest、TypeScript 类型检查和生产构建。网络集成测试默认不访问学校系统,显式测试方式见 JWXT SDK 文档。
- 不在前端保存教务密码、CAS Ticket 或学校 Cookie。
- 教务密码在服务端加密后存入 SQLite,加密密钥仅由环境变量提供。
- 应用 Session 只在数据库中保存 Token 哈希;浏览器使用
HttpOnlyCookie。 - Redis 只缓存有有效期的查询结果,不保存密码、Cookie、Token、Ticket 或 JWXT Client。
- 每位用户使用独立的 JWXT Client 和 CookieJar,同一用户的教务请求串行执行。
- 日志不得记录密码、Cookie、Token、Ticket 或完整认证重定向地址。
.env、SQLite 数据库、Android 签名文件和真实账号不得提交到仓库。
完整开发约束见 Agent.md。
本项目仅用于学习、个人信息查询和校园服务体验改进,不提供抢课、批量抓取、凭据共享或绕过学校访问控制的能力。学校页面或登录流程发生变化时,相关功能可能暂时不可用。
仓库目前尚未添加开源许可证。公开代码仅代表允许查看,不自动授予复制、修改或分发权利。




