待办

列表、发布、勾选/取消、定位与审核

路径未版本化 最后更新:2026-10-25

待办

GET /api/todos

认证:是。班级:必需。用途:按当前用户可见范围返回待办,分为待完成和已完成。

参数位置说明
classquery可选,指定班级 id 或 slug;不传用自己加入的班
{
  "ok": true,
  "data": {
    "pending": [ { "id": 55, "title": "交实验报告", "scope": "class", "done": false, "pending_review": false, "overdue": false, "time_label": "截止 10-30 23:59", "visible_label": "全班", "geo": null } ],
    "finished": [ { "id": 54, "title": "青年大学习", "scope": "class", "done": true, "done_at": "2026-10-24 20:11:03" } ]
  },
  "meta": { "classId": 3, "isManager": false, "canPublish": false, "pendingCount": 1, "finishedCount": 1 }
}

待办对象包含待办行的原始字段(如 start_at、due_at、status、source_key、created_at 等)以及以下派生字段:

字段说明
scopeclass 班级待办;personal 个人待办
creator_name / creator_username / system_generated发布人;今日课程自动生成的待办显示为「系统自动」
time_label / has_time / only_in_window时间文案、是否有时间、是否仅时间内可完成
visible_label / group_list可见范围文案、分组徽章数组
geo{name, radius} 或 null。注意:当前实现会随待办行一并返回 geo_lat/geo_lng/geo_radius 等原始字段(完整清单以源码 TODO_FIELDS 为准);geo 只是给界面展示的派生字段,客户端不应把坐标展示给其他同学
done / pending_review / done_at / overdue是否已完成、是否待审核、完成时间、是否过期
done_count已完成人数

meta.isManager 表示当前用户是否可管理本班待办;meta.canPublish 表示是否可以发布班级待办。

POST /api/todos

认证:是。班级:必需。用途:发布班级待办或个人待办。班级待办需要班委及以上权限;个人待办任何已登入同学都可发布,且只有自己可见。

参数类型必填说明
titlestring是标题,最长 128 字符
contentstring否正文
scopestring否class 或 personal;不传时按权限推断(班委默认 class,同学默认 personal)
visibleGroupsnumber[]否班级待办的可见分组 id 数组;空数组表示全班;分组必须属于本班(个人待办忽略该字段)
startAtstring否开始时间;与 dueAt 至少填一个
dueAtstring否结束/截止时间;与 startAt 至少填一个
onlyInWindowboolean否仅允许在开始–结束之间完成;开启时必须同时提供两个时间
needReviewboolean否完成后需班委/班级管理员确认
geoLat / geoLngnumber否定位打卡坐标;坐标不合法时按“未开启定位”处理
geoRadiusnumber否允许半径(米),服务端会归一化
geoNamestring否地点名称,最长 64 字符
statusstring否只有 closed 会写成关闭状态,其他值都按 published

成功返回新待办的摘要:{id, title, scope, notified}。notified 是实际写入的通知条数;个人待办恒为 0。发布班级待办后会自动通知应完成的人,通知失败不会让发布失败。

curl -s -X POST "$BASE/api/todos" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "交实验报告",
    "content": "周四前交到学习委员处",
    "scope": "class",
    "visibleGroups": [1, 2],
    "startAt": "2026-10-26 08:00:00",
    "dueAt": "2026-10-30 23:59:59",
    "onlyInWindow": false,
    "needReview": true
  }'

没有班委权限却指定 scope=class 会返回 403;visibleGroups 里出现不属于本班的分组返回 400;时间格式不接受时返回 400。

POST /api/todos/:id/toggle

认证:是。班级:必需。用途:勾选或取消「已完成」。再次调用会取消完成。

参数位置类型说明
idpathnumber待办 id,必须是正整数
lat / lngbodynumber当前定位坐标;待办要求定位时必须提供且在允许半径内
accuracybodynumber定位精度(米),可选

成功返回 {done, pending, title}:普通待办变成完成时 done=true;需要审核的待办提交后 done=false, pending=true;取消完成时两者都为 false。

curl -s -X POST "$BASE/api/todos/55/toggle" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"lat":30.123456,"lng":114.123456,"accuracy":20}'
  • 待办不存在、已删除或属于其他班:404;待办对当前用户不可见:403。
  • 时间窗口不满足或定位超出范围:400,错误信息会说明原因。
  • 取消完成不校验定位和时间窗口。
若本文与源码不一致,以源码和实际响应为准;发现不一致时请更新文档,而不是修改 API 行为。 学生使用指南 · 返回 API 总览