作业提交系统

Scholaris 作业提交系统

这是一个基于 Cloudflare Pages + Pages Functions 的班级作业提交与管理系统。前端页面位于 public/,后端接口位于 functions/api/

主要功能

  • 学生端:登录、修改密码、提交作业、查看个人提交历史、撤回本人上传文件、使用 AI 助手。
  • 管理端:登录后台、管理科目、查看/预览/下载/删除提交文件、维护学生库、设置截止时间、公告、AI 规则、审计日志、评分与评语。
  • 文件存储:使用 Cloudflare R2 保存作业文件和部分 JSON 数据。
  • 学生数据:使用 Cloudflare D1 保存学生档案、学生密码、命名规则等数据。
  • AI 能力:支持 OpenAI 兼容接口,例如 SiliconFlow。

目录结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public/
index.html 学生端主页
login.html 学生/管理员统一登录页
admin.html 管理后台页面
assets/ 页面拆分后的 CSS 和 JS
tailwind.js 本地 Tailwind runtime

functions/api/
upload.js 学生上传作业
delete.js 学生撤回文件
history.js 学生提交历史
folders.js 科目列表、截止时间、复杂科目
submitted.js 已提交信息与重名检查
notice.js 公告
ai.js AI 助手入口
admin/ 管理端登录、鉴权、核心接口
student/ 学生登录、鉴权、改密、个人信息
*-store.js R2 JSON 数据读写模块
student-db.js D1 学生库、密码、命名规则

本地调试

  1. 安装 Node.js。
  2. 在项目根目录打开终端。
  3. 复制示例环境变量:
1
Copy-Item .dev.vars.example .dev.vars
  1. 编辑 .dev.vars,至少填写这些变量:
1
2
3
4
5
ADMIN_SESSION_SECRET=一段足够长的随机字符串
DELETE_TOKEN_SECRET=一段足够长的随机字符串
STUDENT_SESSION_SECRET=一段足够长的随机字符串
ADMIN_USERS={"admin":"123456"}
ALLOWED_EXTENSIONS=.pdf,.doc,.docx,.jpg,.jpeg,.png,.zip
  1. 启动本地 Pages Functions:
1
npx wrangler pages dev public --r2 R2_BUCKET --d1 DB
  1. 浏览器访问:
1
2
3
http://127.0.0.1:8788/login
http://127.0.0.1:8788/
http://127.0.0.1:8788/admin

Cloudflare 绑定名

代码里固定使用以下绑定名,本地和线上都要保持一致:

1
2
R2_BUCKET  Cloudflare R2 存储桶
DB Cloudflare D1 数据库

如果要使用 wrangler.toml,可以复制示例:

1
Copy-Item wrangler.toml.example wrangler.toml

然后把 bucket_namedatabase_namedatabase_id 改成自己的 Cloudflare 资源。

线上部署注意事项

  • .dev.vars 只用于本地,不要上传给别人,也不要提交到仓库。
  • Cloudflare Pages 后台需要配置同名环境变量和绑定。
  • D1 绑定变量名必须是 DB
  • R2 绑定变量名必须是 R2_BUCKET
  • 管理员账号通过 ADMIN_USERS 配置,格式是 JSON 对象。
  • 学生首次默认密码通常是 123456,首次登录后会提示修改密码。
  • 如果启用 AI,需要配置:
1
2
3
4
5
OPENAI_API_KEY
AI_BASE_URL
AI_LIGHT_MODEL
AI_HEAVY_MODEL
AI_TIMEOUT_MS

SiliconFlow 这类 OpenAI 兼容服务可以这样填:

1
2
3
AI_BASE_URL=https://api.siliconflow.cn/v1
AI_LIGHT_MODEL=Qwen/Qwen2.5-7B-Instruct
AI_HEAVY_MODEL=Qwen/Qwen2.5-7B-Instruct