xuyue and Claude Opus 5.5
fa092d334c
feat(编译错误): C / C++ 编译没过时也给中文说明、标出出错位置,中文标点能一键换成英文
...
Deploy / deploy (push) Canceled after 0s
原来 C / C++ 的编译错误学生看到的是 gcc 的英文原文。现在和 Python 一样一张翻译表
(cError.ts),照全库 2851 条 C / C++ 编译错误用现在的判题机(gcc-14)重新编译出来的
报错定的,只看第一条 error,98% 能给出说明。
三件事先于句式判,因为 gcc 对同一个错报法五花八门:
- 交成了 Python 代码(330 条):gcc 报的是 request for member 之类,直接说换语言;
- C 里写了 C++(iostream、cout);
- 中文标点:gcc-14 不再报 stray,而是把「;」吞进变量名、错报到下一行,所以直接在
代码里找引号和注释之外的中文标点,行号按代码算。中文标点查找认 C 的 // 和 /* */。
句式上:缺分号报在下一句开头的往回挪一行,把分号写成冒号、关键字拼错(coutinue、
RETURN、return0)、文字没加引号、#include 拼错、main 外面写语句等各有说法。
gcc 的 did you mean 会从库函数里挑(num → enum),只信学生代码里有的名字。
列范围按 gcc 的显示宽度换算(中文占两格),含中文的行也能标到具体位置。
卡片改名 CompileErrorExplain,提交结果、运行例子、提交列表弹框三处都接上了。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 11:22:31 +08:00
xuyue and Claude Opus 5.5
4c6f2e7611
fix(判题): C 里 main() 前面没写 int,升 gcc-14 之后直接编译错误,原来能过
...
Deploy / deploy (push) Canceled after 0s
gcc-14 把 -Wimplicit-int 也提成了 error。全库判过的 C 提交里有 45 条这么写(8 条 AC),
重新编译一遍:不放行全是 CE,放行后 45 条全部编译通过。最近一条因此 CE 的在 2026-09-28。
冒烟测试那条宽松度用例把 main 改成省略 int 的写法。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 10:56:17 +08:00
xuyue and Claude Opus 5.5
79ca8ac3bd
feat(运维): 新增 oj2-api rediagnose,旧提交的运行时错误说明也能用上新规则
...
诊断是判题时写进库的,规则改了旧提交不跟着变。这个子命令把库里的诊断按现在的规则重做:
Python 只重做已经有诊断的(重跑第一个失败测试点拿回溯,所以要在线上 oj-api 容器里跑),
C / C++ 用 info 里存着的信号和退出码直接补上(原来一条都没有)。比赛提交不诊断,
重跑不出来的保留原样,只写 runtime_error 这一个键。默认只读预演,--apply 才写。
本机验过:dev 与编译两种形态都跑通,--apply 之后再跑是 0 条变化。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 10:51:54 +08:00
xuyue and Claude Opus 5.5
fa0e1ab66c
fix(判题): C 的 int 函数里写 return; 升 gcc-14 之后直接编译错误,原来能跑
...
gcc-14 把 -Wreturn-mismatch 也提成了 error,和另外三个一样 -w 压不住。
cLooseErrors 补上这一个,判定和 gcc-13 一致。冒烟测试加一条对应的用例。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 10:47:21 +08:00
xuyue and Claude Opus 5.5
e118d80057
fix(判题): 题目缺测试数据时学生看到「编译错误」和一句英文「Test case not found」,以为是自己写错了
...
Deploy / deploy (push) Canceled after 0s
判题机的 err 只有 CompileError 是学生的错,别的(JudgeClientError 之类)原来也一律
记成编译错误,全库 337 条,最近一条在 2026-09。改记系统错误,学生那边说「判题出了
问题,不是你的代码写错了,告诉老师」,不再贴英文原文。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 10:44:09 +08:00
xuyue and Claude Opus 5.5
96ce9725b2
fix(语法错误): 有模板的题报错行号多 1;else 后面写了条件被说成「少了冒号」,a+b=c 被说成「判断相等要用 ==」
...
全库 9182 条 Python 编译错误逐条过了一遍翻译表,1014 条的说明变了:
- 行号:判题跑的是「模板 + 代码」,运行时错误扣了模板行数、编译错误没扣,
「第 N 行」和标红都落在下一行(691 条)。提交和运行例子两条路都扣上,
gcc 的 main.c:N: 和代码摘录左边的行号一起扣。报错前先打了一条警告时
File 那行是缩进的,行号原来解析不出来。
- 同一句报错要看出错那一行才分得开:expected ':' 九成是 else a<60:(行尾有冒号),
「Maybe you meant '=='」只有 if / while 行才是真想判相等,a+b=c、a=96,b=92、
print(1+1=2) 各有各的说法。
- 选了 Python 却交了 C 代码(294 条),直接说换语言。只凭 printf 不算:
Python 里 print 手误成 printf 的不少。
- 单独说清楚的:elif: 没写条件、esle / else if、=< 写反、条件之间用逗号、
漏了 +、√ ² ≤ ≥、顿号、全角 #、emoji(正则少了 u 标志)。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 10:44:09 +08:00
xuyue and Claude Opus 5.5
f413518a85
fix(运行时错误): 列表练习里 append() 参数给错,说明却是「把文字当成数字、input() 读进来的是文字」,代码里根本没有 input()
...
全库 9228 条 Python 运行时错误在判题沙箱里重跑了一遍(9028 条复现),按真实回溯重定归类表:
- TypeError 原来只认 12 种句式,633 条掉进兜底,一律被说成「把文字当成数字」。
实际多半是函数用法错:参数个数不对(点名 append / insert 并给正确写法)、
end= 拼成 enp=、list.index(x) 该写变量名.index(x)、忘写 ()(int(input)、
input[0],约 200 条)、拿 print() / append() 的返回值去算(约 100 条)等。
兜底从 633 条降到 64 条,ValueError 从 336 降到 5(split("")、%.2f 写错、
值不在列表里)。
- input[0] 原来被说成「对一个数字用了下标」:值的类型名比句式更说明问题,
builtin_function_or_method / NoneType 先于句式判。类型名来自代码不来自输入。
- AttributeError 带上 Python 的「Did you mean」(spilt → split 一种就 188 条),
s.len() 说成函数不是方法,数字没有 split() 说顺序反了。
- 「input() 读进来的是文字」只在学生代码里真有 input( 时才说。
- C:信号 31(system("pause") 被沙箱拦 / 字符数组溢出)和 25(死循环打印)
原来只有「崩溃了」,占 C 运行时错误一半多;void main 不再说成「要写 return 0」。
已经存进库的诊断没有新的 kind,旧提交看到的是新的中性兜底话。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 10:43:44 +08:00
xuyue and Claude Opus 5.5
6306b5a919
style(提交列表): 结果筛选里「语法未通过」挪到「答案正确」后面,下拉加宽,五个字的选项不再被截断
...
Deploy / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 10:13:53 +08:00
xuyue and Claude Opus 5.5
11d2155908
style(提交列表): 结果筛选里去掉「内存超限」「正在评分」「系统错误」,只留学生真会碰到的几种
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 10:11:23 +08:00
xuyue and Claude Opus 5.5
1c54371fc5
style(协作): 协作条上不再写学生用什么语言,只写「正在帮 谁」,名字长也放得下
...
Deploy / deploy (push) Canceled after 0s
语言在下面工具栏的语言下拉里本来就看得到。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 09:57:56 +08:00
xuyue and Claude Opus 5.5
773d15b033
feat(课堂看板): 「这节课的题」旁边多一个语言下拉,布置 C 的作业学生打开题目编辑器就是 C
...
Deploy / deploy (push) Canceled after 0s
默认是这个班上一次布置选的语言。学生那边首页、题号下拉、题目页课堂条都写上「C语言」;
打开这节课的题时编辑器自动切过去,每道题只切一次,学生自己再换就按他的。提交列表的
「这节课」连语言一起筛。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 09:54:21 +08:00
xuyue and Claude Opus 5.5
a18e129f4c
feat(课堂): 布置这节课的题时可以选用什么语言做,学生用别的语言交对不算这份作业做完
...
class_lesson 加一列 language(0024,可空:以前布置的、按提交推断出来的课都不限语言)。
布置时有题不支持选的语言就整个拒掉并点名是哪几道;看板的格子、学生首页的做完状态、
提交列表「这节课」都只认这个语言的代码提交,流程图照旧算。看板多给 lastLanguage 当默认值。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 09:54:21 +08:00
xuyue and Claude Opus 5.5
e3be3cd62c
feat(统计): 「今日统计」「数据统计」合成一个「统计」,打开是一行一节课,这节课在最上面
...
Deploy / deploy (push) Canceled after 0s
老师的提交列表上只剩一个「统计」按钮;什么都没筛时按课列(选「今天」就是原来今日统计看的),
点一行进那节课(班、题、时段都带好),左上「← 全部」回来;只填题号时仍按班级汇总,和题目页
统计页签对得上。数字行加结果条,统计里的「课堂看板」按钮去掉,改成有班正在上课时才引过去。
学生仍是「今日统计」。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 09:23:54 +08:00
xuyue and Claude Opus 5.5
921990285c
feat(统计): 统计能按「一节课」列了——哪天哪个班几点到几点、来了几人、错得最多的题,选什么时间段都有
...
原来这些只有「今日统计」里有、而且只看今天;老师那一版并进统计之后,今日统计接口只留学生版。
课按「隔 30 分钟切开、一段里有一道题 5 人以上做过」切,26计算机0班 9 月 29 日是 14:04–15:38,
不再被课后两次零星提交拖成 14:04–18:42。统计接口多给一份结果分布,数字行画结果条用。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 09:23:53 +08:00
xuyue and Claude Opus 5.5
e98ee610a1
style(统计): 时间段默认改看一节课;「一节课」「两节课」后面不再写「1 小时内」,旁边本来就写着几点到几点
...
Deploy / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 09:06:22 +08:00
xuyue and Claude Opus 5.5
cb2fb57fdb
style(提交列表): 「重新判题」是右上角最显眼的按钮,上课却最用不上,收进「⋯」
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 08:47:57 +08:00
xuyue and Claude Opus 5.5
b19fc3c1d9
style(顶栏): 「课堂看板」夹在两个框中间像是没对齐,改成和「今日统计」一样的按钮
...
Deploy / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 01:20:01 +08:00
xuyue and Claude Opus 5.5
e3eb41288c
feat(提交列表): 「数据统计」改回在当前页弹框里看,不再开新标签页;按钮和「今日统计」一个样子
...
弹框带着列表现在的班级、学生、题号打开,「在提交列表里看」直接改背后的列表。
今日统计里点班级名也开同一个弹框。统计主体抽成 StatisticsView,/statistics 页面
留给课堂看板「回头看」、题目页这些别处的入口。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 01:20:01 +08:00
xuyue and Claude Opus 5.5
13051926cf
fix(统计): 按班级列的时候零星一两个人补做的班排在最前,改成交过的人多的在前
...
Deploy / deploy (push) Canceled after 0s
题目页「各班做得怎样」和数据统计「按班级汇总」一起改,两边顺序一致。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 00:59:41 +08:00
xuyue and Claude Opus 5.5
50d8e072ac
fix(题目页): 统计页签的各班表和数据统计「按班级汇总」对不上,改成同一个口径
...
原来题目页写 13/26(做对/交过)、数据统计写 13/58(做完/班级人数),列的班也不一样,
老师点过去看到的数「变了」。现在两边都是:只算学生,做完/班级人数、交了没对、没交、
正确率、最近一次,按最近一次排。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 00:56:35 +08:00
xuyue and Claude Opus 5.5
db493cebe4
fix(题目页): 统计页签的老师版回到讲这道题本身,各班只列一张表,不选班、不列人名
...
Deploy / deploy (push) Canceled after 0s
按人看谁没做对是提交页「数据统计」的活;表里点一个班就去那边看。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 00:50:01 +08:00
xuyue and Claude Opus 5.5
2fddf4a011
feat(提交列表): 今日统计重做——老师看今天哪几个班上了课、几点到几点、错得最多的题;学生版从简
...
- 老师:各班上课时段画在一条 7–20 点的时间轴上(点班级名去数据统计),有班正在上课时引去课堂看板
- 错得最多的题带班级、没过的原因、做对 x/y 人;底部一根全站结果条,语言只有一种时缩成一句
- 学生:你今天交了几次做对几道 + 今天大家都在做(按人数,带去做 / 接着做)
- 标题栏写「截至几点」、判题中几条;打开时把按钮上的数一起更新(原来只在进页面时拉一次)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 00:47:51 +08:00
xuyue and Claude Opus 5.5
99319fdcc5
feat(题目页): 「统计」页签重做——学生看难不难、几次做对、常错在哪,老师按班看谁没做对
...
- 全部按人算:原来的「通过数」是 AC 条数、「通过率」按提交算;击败用户、饼图、历年 AC 率去掉
- 错得最多的那种给一句该怎么办(都指向「运行例子」),自己交了 3 次以上还没对再多一张卡
- 老师选一个班:做对 / 交了没对(次数、最后结果)/ 没交;班里错得和全站不一样时点出来
- 题库入口工具栏的「课堂统计」并进这里(题单没有页签,按钮留着)
- 新接口 /problems/:id/stats(按内部题号,比赛题不再查到同号公开题),删掉 beat-count、yearly-ac
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 00:39:57 +08:00
xuyue and Claude Opus 5.5
91d9c9c6d7
feat(首页): 登录后不再弹「登录速报」,上次来做了什么、哪道还没做对放进首页,带「接着做」
...
Deploy / deploy (push) Canceled after 0s
- 新接口 /me/last-visit:上次登录到这次登录之间的题库提交,不调 AI(原来要同步等模型最长 60 秒弹框才出来)
- 班里今天在做时让位给班里卡,只在卡底留一句;班里那天就是上次来那天时两张卡合成一张
- 第一次登录说「欢迎来到判题狗」,隔了 30 天以上说「好久不见」
- 删掉弹框、store 和 /ai/login-summary
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 00:28:14 +08:00
xuyue and Claude Opus 5.5
2b4676ae34
ci(部署): 推 origin 时 Gitea 也会拿这份工作流再部署一遍,改成只在 GitHub 上跑
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 00:04:16 +08:00
xuyue and Claude Opus 5.5
e393ffedf7
feat(课堂看板): 加「回头看 →」,带着这个班进数据统计看以前几节课
...
Deploy / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 00:00:38 +08:00
xuyue and Claude Opus 5.5
5f9743efe0
feat(提交列表): 右栏名字旁多一个「只看这个班」,不在班级列表里的老班也能筛出来
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 00:00:38 +08:00
xuyue and Claude Opus 5.5
e37ad982c0
revert(提交列表): 撤掉班级下拉里补「近半年有提交的班」那一版,下拉回到只用系统设定的班级列表
...
改成在右栏名字旁加「只看这个班」过滤按钮(下一条)。
This reverts commit 61ec7d7 .
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 00:00:38 +08:00
xuyue and Claude Opus 5.5
61ec7d7f8e
fix(提交列表): 不在班级列表里的班(毕业、换届摘掉的老班)在班级下拉里选不到,筛不出它的提交
...
Deploy / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-29 23:31:50 +08:00
xuyue and Claude Opus 5.5
6bc927402e
fix(提交列表): 列表上的「1/1」被学生当成交了几次,换成显示编程语言
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-29 23:31:50 +08:00
xuyue and Claude Opus 5.5
9b4c4a73f1
style(页脚): 版权和备案信息只在首页显示,其他页面不再占地方
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-29 23:31:17 +08:00
xuyue and Claude Opus 5.5
365ce0a7b4
style(提交列表): 列表改回比代码区窄一点(46 : 54)
...
Deploy / deploy (push) Canceled after 0s
56% 的列表嫌宽了。46% 在机房 1280 的屏上题目列约 215px,快照里抽的几组各 50 行题目名
都放得下,特别长的看鼠标提示;大屏上列表最宽 900。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-29 19:23:25 +08:00
xuyue and Claude Opus 5.5
816e295dc9
style(提交列表): 翻上一条下一条只用 ↑ ↓,去掉 ← →
...
Deploy / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-29 19:13:03 +08:00
xuyue and Claude Opus 5.5
b46529c741
style(提交列表): 列表放宽、代码区收窄,题目名不再被截成三个字;只看一个人时筛选框换成名字标签
...
- 左右从「列表 560 固定 + 代码占满」改成 56% : 44%(大屏列表最宽 1000):学生的代码大多
十来行,右边原来空着一大片,左边的题目名却只剩三个字;用户名一列 132 → 116
- 右栏顶上固定一行:「只看他 / 只看这题」只留漏斗图标,题目名太长时省略,翻条时代码区不再上下跳
- 按整名只看一个人时(只看他、协作条、看板点进来),108px 的输入框装不下八九个字的用户名,
换成「只看 xxx ×」的标签;列表里题目名加上鼠标提示
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-29 19:12:14 +08:00
xuyue and Claude Opus 5.5
923516ad36
fix(课堂看板): 这节课整班在画流程图时,点格子、点名字进到的是一片空的代码提交列表
...
Deploy / deploy (push) Canceled after 0s
看板格子的次数原来是代码和流程图加在一起的,链接却总是去代码那边;名字链接看的「今天交过」
还把比赛提交算了进去。现在格子分开给代码 / 流程图次数、学生分开给今天交过代码 / 画过流程图,
只画了流程图的跳到提交列表的「流程图」那边。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-29 19:02:33 +08:00
xuyue and Claude Opus 5.5
52bf2d6111
feat(提交列表): 题号填错一道时顶上提示「没有这道题」;← → 也能翻上一条下一条
...
Deploy / deploy (push) Canceled after 0s
- 列表接口回带查不到的题号(公开列表只认公开题,比赛列表只认本场的题),
一次填好几道时打错的那道原来被悄悄忽略
- 方向键恢复成四个都能翻(9 月加的时候就是这样,老师已经用惯了)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-29 18:58:31 +08:00
xuyue and Claude Opus 5.5
0bcc981e6f
fix(提交列表/统计): 按方向键会顺手切掉「代码/流程图」、重判后右栏还是旧内容、没人交时统计说「全都做完了」
...
提交列表:
- 焦点在单选框、下拉框上时方向键不再一边切控件一边换条;跨页没回来前不再连跳一整页
- 重判、重新评分之后右栏重新拉,不再命中旧缓存;同一条新旧请求不再互相覆盖
- 从「我的提交」点顶栏「提交」、浏览器后退时,地址里没有的筛选回到默认
- 找回点用户名开个人主页;「只看他 / 只看这题」学生也能用;重判不用等代码拉下来
- 手机上老师也能重判、能按语言筛,流程图行有手机排版;学生界面带着的班级筛选显示成能点掉的标签
- mermaid 画不出来时先说中文、原始报错折起来
统计页:
- 没人交时说「这段时间没有人交」,不再说「全都做完了」;没填题号时各处统一叫「做对过题」
- 班级按 class_name 单独传;查询失败清掉旧数据并说清原因;标签跟着查出来的那一份走
- 「语法未过」的格子单独标「语」;正确率不算还在判的;截断提示说清哪些数字受影响
- 看板的请假隐藏只藏还没交过、没在举手的人,「恢复」只恢复这个班的
- 手机上筛选折行、上下排,不再挤出屏幕
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-29 18:52:58 +08:00
xuyue and Claude Opus 5.5
26c8d65e89
fix(判题/统计): 老师重判一次题目提交数就多一;统计选 231 班会把 2311、2312 班也算进来
...
- 重判带上原来的结果,落库只做差量:提交数不变、旧结果那一格减一新结果加一,
通过数按新旧结果调整(原来重判当新提交记账,连点三次就多三)。重判时一起清掉 info,
判题中那几秒不再按旧结果显示「通过 2/3」
- 三个统计接口加 className,按 class_name 精确匹配(原来拼 ks231 做包含匹配)
- 流程图统计查几道题时要每道都拿到 A/S 才算完成;「每人最好的一次」截断时有标记,
题号上限 20 道和代码统计一致;流程图列表支持按整名匹配用户
- 删掉统计弹框走后没人用的展开行明细接口,以及每次都白算的「语法未过题数」「最近一次错在哪」
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-29 18:52:58 +08:00
xuyue and Claude Opus 5.5
ed55ee5af6
feat(统计): 数据统计从弹框改成独立页面,左边题目、右边学生,一道题看全班每人的每一次
...
- 课堂看板管这节课,统计管回头看:时间段默认「两节课」,还有这节课、今天、7 天、30 天、这学期、全部、自己选日子;不再自动刷新
- 选一道题看每人在这道题上的方块串,鼠标停上去看那次的代码;选「全部」每人一行、展开按题看
- 没选班级(从题目页进来)先按班级汇总;流程图统计有等级分布、四项雷达、各项平均分、词云和每人最好的一次
- 提交列表、题目页的「数据统计」改成新标签打开这个页面
- 「请假隐藏」挪到课堂看板:点名字旁的 × 藏两个小时,做完人数的分母一起减掉
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-29 18:28:27 +08:00
xuyue and Claude Opus 5.5
f09da88ff7
feat(统计): 统计接口补上每人每道题的每一次提交、流程图每人最好的一次,流程图也能一次查几道题
...
- 新增 GET /submissions/statistics/grid:范围内每个学生的每次提交(只含普通学生,最多 5000 条),
没选班级时附带各班花名册人数,统计页按「人 × 题」画方块串、按班级汇总
- /flowcharts/statistics 题号可以一次填几道,多返回 people(每人分数最高的那张)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-29 18:28:27 +08:00
xuyue and Claude Opus 5.5
99c158498c
feat(提交列表): 老师也能在「全部 / 我的」之间切换,不用再靠「清空」退出「我的提交」
...
Deploy / deploy (push) Canceled after 0s
选「我的」时这节课、班级、学生三个框收起来(只看自己时后端本来就不认它们);
机房 1280 宽的屏上「今日统计」只留图标和数字,给这个切换腾地方。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-29 13:30:17 +08:00
xuyue and Claude Opus 5.5
8d1521f3b6
fix(统计): 统计弹框里几处数字对不上——完成度圆环把交了没对的也算成完成、请假隐藏的人还算在班级人数里
...
- 代码统计「班级完成度」圆环的已完成改成做完的人数,和上面「完成人数」一致
- 流程图统计「班级人数」减掉请假隐藏的,和完成度的分母一致
- 流程图统计打开就查、开着自动刷新(一天以内的时间段,30 秒一次),按钮带转圈
- 两个面板统计失败时在按钮旁说一句,不再无声无息停在旧数字上
- 没完成的人全被隐藏时不再显示「全都完成了」
- 流程图统计的「未完成」页签在全班做完后不再整个消失
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-29 11:14:34 +08:00
xuyue and Claude Opus 5.5
660f689a5c
feat(提交列表): 重做成左边列表、右边代码,方向键一条条翻,不再开弹框
...
- 右栏常驻选中那条的代码:编译失败 / 运行时错误用中文说清第几行错了并标红,
老师看得到逐个测试点,学生看别人的只显示结果
- 老师一键「这节课」:筛到正在上课的班、这节课的题、今天
- 「正在评分」的行自己变成结果;新交的不插队,顶上提示「有 N 条新提交」
- 按天分组、默认每页 30 条;状态筛选补全,语言补上 SQL;流程图的评分详情也放进右栏
- 课堂看板的格子和名字能直接点进这个学生今天的提交
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-29 11:08:49 +08:00
xuyue and Claude Opus 5.5
ea480d5e0c
feat(提交列表): 老师也能重新判题;列表能按班级、一次按几道题筛,还带「通过几个测试点」
...
- 重新判题从只放超管改成老师及以上:前端一直给老师亮着按钮,点了只会「权限不足」
- /submissions、/flowcharts 加 className(user.class_name 精确匹配),题号可以一次填几道
- 列表每行带 caseSummary,口径和详情一致,在库里数完只回两个数
- 新增 GET /classroom/lesson:提交列表「这节课」按钮用,班级和题的取法同课堂看板
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-29 11:08:49 +08:00
xuyue and Claude Opus 5.5
b76a35b5f2
feat(顶栏): 「提交」回到顶栏,顺序改为自学、题目、提交、题单、比赛、排名;公告只留在首页
...
Deploy / deploy (push) Canceled after 0s
「更多」下拉里只剩公告一项,一起去掉。公告基本是版本更新,一年五六条,
首页公告卡片有「全部」入口;手机菜单末尾仍留一项「公告」。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-29 10:05:33 +08:00
xuyue and Claude Opus 5.5
56ef4a999c
feat(顶栏): 顶栏重排——点题号框就能看到这节课的题,老师的「N 人举手」挪上顶栏、不再一条条弹提示
...
Deploy / deploy (push) Canceled after 0s
- 导航改成 题目 / 题单 / 比赛 / 排名 / 自学 / 更多,当前页浅绿底块;提交、公告收进「更多」
- 题号框点开先列出这节课的题(做对没有、下一道),输入时按题号或标题筛,回车照旧直达;
只在今天有课、不在题目页时出现
- 后台入口、暗色开关收进个人菜单;老师顶栏只留课堂看板
- 「N 人举手」前台、后台顶栏都有,放最末尾:没人等不显示,人数变多时闪一下;
新求助的 toast 删掉(一节课能弹十几次,投屏时还弹在全班面前)
- 1280 以下题号框变窄、课堂看板只留图标、名字最宽 120;1024 以下允许折行
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-29 09:24:02 +08:00
xuyue and Claude Opus 5.5
5b43015be4
feat(统计): 提交统计里鼠标停在提交方块上就能看到这次交的代码,不用再点开新页面
...
Deploy / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-29 08:42:57 +08:00
xuyue and Claude Opus 5.5
22459cc212
feat(统计): 提交记录和流程图的统计弹框记住上次查的班级、题号、时间段,一小时内再打开自动带上
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-29 08:36:16 +08:00
xuyue and Claude Opus 5.5
893b74b1cb
style(题目): 左栏「题目 / 结果」和右栏工具栏的下边线对齐,分隔线处不再错一个台阶
...
Deploy / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-29 08:31:08 +08:00
xuyue and Claude Opus 5.5
ad2e4a34a2
style(顶栏): 机房 1280 宽的屏上顶栏不再折成两行——菜单改成纯文字,「后台」挪到右边
...
Deploy / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-29 08:26:43 +08:00
xuyue and Claude Opus 5.5
eb32676de4
feat(题目): 「运行例子」「自己输入」改用和提交同一台判题机——例子上跑出什么样,提交在这几个例子上就是什么样
...
Deploy / deploy (push) Canceled after 0s
原来试运行走另一台 Judge0:C 是 GCC 9、编译参数也不一样,Python 的语法错误回来的是运行错误,
没有题目的时间内存限制和代码模板,例子上的结果常和提交对不上。现在走本站判题机
(POST /trial-runs),同一套编译命令、这道题的限制和模板,对不对也由判题机比。
- 不落库、不算提交、不进判题队列:api 进程里自己排队,全站同时 TRIAL_CONCURRENCY 批
(服务器 2、机房 4),每人最多两批,排满或等超过 30 秒就请学生过一会儿再点
- 死循环不停打印时判题机回包会很大,超过 16MB 就掐断,告诉学生输出太多、停不下来
- Python 语法错误用和提交一样的说明:第几行、中文标点标红、一键换成英文
- 运行时错误和提交用同一个解析,说清楚第几行、为什么(下标越界、int() 转换失败、段错误……);
比赛里照旧只给按结果码的那一句
- 语法没过、服务没跑成时,标题不再说「N 个例子没对上」
- 后台「生成测试点」一并迁过来,编译警告不会再写进 .out;Judge0 的地址和调用全部删掉
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-29 08:09:44 +08:00
xuyue and Claude Opus 5.5
8834536135
style(题目): 题面的「描述 / 输入 / 输出 / 例子」这些小标题加粗、左边加一道绿条,一眼分得出哪是标题
...
Deploy / deploy (push) Canceled after 0s
画板上小标题是 15px 半粗,比 14px 的正文只大一号,一屏扫下来分不出标题和正文。
改成 16px 粗体、左边 3px 主色竖条,小节之间的间距从 14px 拉到 18px。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-29 00:07:16 +08:00
xuyue and Claude Opus 5.5
e7b95d211d
fix(题目): 修掉题目页重构审查查出的问题——提交途中换题会把结果算到新题上、运行例子把对的菱形判错、点评完「下一题」不跳等
...
题目页重构之后按「功能对照 / 状态 / 结果页 / 布局与后端」四路审查了一遍,查出的问题一起修:
提交与换题
- 提交、画流程图途中换题:A 题格式化好的代码会盖掉 B 的草稿,A 判对了把 B 标成已解决、
弹 B 的点评、题单里跳回题单。现在每个请求回来先核对题目,轮询和推送回来的也核对提交编号
- 画着流程图换到不能画的题,语言退到题目的第一门、还被记成偏好;现在回到学生习惯的那门
- 强制点评评完点「继续 / 下一题」,学生之前在看「题目」页签的话会停在原题
- 离开题目页之后判题、流程图的 WebSocket 一直连着,现在闲 15 分钟断开
运行例子
- 输出开头的空格被削掉,打印菱形这类题对的代码也显示「没对上」
- C 的编译警告拼进了「你的输出」(后台生成测试点也会写进 .out)
- Python 的语法错误(中文标点)被说成「下标有没有越界、除数是不是 0」
- 比赛里仍然把空格画成「·」、把不同的地方标红
入口与协作
- 比赛里不给「课堂统计」、不绑协作:房间和统计都按题号找,比赛题号和公开题撞号
- 「看他交过什么」按整名匹配,不再混进学号相近的同学
- 协作中点上下文条、相似题、下一题开新标签,协作不断
- 题单入口给管理员的「⋯」里留「本题提交」
结果与题面
- 「去自己输入拿 51 这些数试试」取到了题面 HTML 里的颜色值;「题目原话」露出 "
- 流程图 A 级的学生标题下还写着「还没交过」
- 「我的提交」上方补回「答案错误 × 3」这样的计数
- 流程图历次评分能点开看那一版的图;读分数失败不再说「还没交过流程图」;手机上能看流程图点评
- 「结果」页签有新结果没看时加粗上色,看过就恢复
- 空画布拖进第一个节点画布会跳一下;画布底下空着一条
- 比赛没开始写成「已结束」、倒计时超过一个月算错;分隔条拖到头工具栏被挤坏;题单里的题目页有备案页脚
- 流程图历次分数只读需要的几列(一个学生一道题 23 次提交:96 kB → 2 kB)
- 比赛密码、比赛没开始等几条学生看得到的英文报错换成中文
设计文档照实际做法更新了第 5.5、5.6、6、8、9、10、11 节。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-29 00:07:16 +08:00
xuyue and Claude Opus 5.5
ee66cef367
feat(课堂): 只画了流程图的学生也算来上过课、做完了题——推断这节课的题、班上几人做完、最近来了几次都认流程图
...
原来课堂那边只有「我的状态」和看板格子认流程图 A/S,其余统计只数代码提交:
全班画流程图的那节课推断不出题,课堂条和看板都是空的;只画了图的学生在看板上
「最近来了 0 次」。现在代码提交和流程图提交合成一张表来数,口径统一:
流程图 A/S 算做完,交过流程图(含评分中、评失败)算做过。
- 推断这节课的题、「班上 M 人做完」、最近几节课是哪几天
- 看板「最近来了几次」、最后提交时间、各题尝试次数
- 看板没选班时猜正在上课的班
- 班级对比、个人资料的通过数不在这次范围,仍然只数代码
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-29 00:06:54 +08:00
xuyue and Claude Opus 5.5
2857ff83c4
fix(题目): 超时、内存超限的结果下面说清楚是怎么回事——题面不再写限时之后,学生光看「运行超时」不知道哪里出了问题
...
Deploy / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-28 23:17:48 +08:00
xuyue and Claude Opus 5.5
5836902c6b
style(题目): 运行例子、自己输入、Python 报错、流程图点评这几块结果也照设计稿重排,手机上题目页顶满屏幕
...
- 运行例子:标题带每个例子的对错胶囊,全对时提示「再按提交」
- 自己输入:说明「这里不判对错」,输出框留出固定高度
- Python 报错:灰底卡片,改法按钮放显眼处
- 流程图点评:画过几次连成一排,大分数 + 等级 + 四项分数条,重新提交后直接显示新的这一次
- 工具栏「写代码 / 画流程图」换成设计稿的分段切换,窄时缩成「代码 / 流程图」
- 设计文档记下和画板有意不同的几处(去掉限时、保留新轮盘等)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-28 23:13:23 +08:00
xuyue and Claude Opus 5.5
1fd9bf67c2
style(题目): 题目页照设计稿「机房(方案 B)」重排——顶满的两栏、带底色的上下文条、下划线页签、新的结果和题面样式
...
Deploy / deploy (push) Canceled after 0s
原来实施时只照了设计文档,没对照设计稿,一路套 Naive 现成的分段页签、提示框、单选组,
功能对了、样子差很多。这次逐块对着设计稿的画板改:
- 两栏顶满内容区,中间一条 1px 分隔线;上下文条、页签行、工具栏下面各一道分隔线
- 上下文条:课堂浅绿、题单浅蓝、比赛浅黄三种底色;‹ › 是不带边框的箭头;比赛的题号是方角、
做错的是红色 ✕;手机上不摆一排题号,写「这节课 做完 2/5 · 这是第 3 道」配 44px 的箭头
- 「题目 / 结果」是下划线页签,右边「统计 / 点评 / 我的提交」是胶囊按钮
- 抽屉盖住整个左栏(连上下文条、页签行),顶上有自己的「我的提交 / 统计 / 点评」页签,Esc 能关
- 结果页签:三个分段是胶囊,选中的深色实心、带时间(「提交结果 · 10:42」);标题是圆形图标 +
大字 + 灰字(「答案错误 在例子 1 上就错了」),不再套整块彩色提示框;答错的对比三栏并排、
只把不一样的那几个字标红;「题目要求的输出」是一行小字;「让 AI 分析我的代码」是描边按钮;
答对后的「下一题」是浅绿卡片里 44px 的大按钮
- 工具栏:语言、运行例子(描边)、提交(实心,就叫「提交」)靠左,求助、⋯ 推到最右;
交对之后「提交」变成绿色描边;协作条换成设计稿的深蓝
- 题面:标题下「简单 · 还没交过」,流程图过关的加「流程图 A 级」;代码要求压成一行;
小标题不带图标;输入、输出左右两栏;参考流程图是一行可以点开的条;例子表带「例子 1」和「复制」
- 去掉「限时 1 秒」:执行时间、内存对中职学生只会添迷惑(和设计稿不同,用户定的)
- 我的提交:一整块带框的列表,结果用彩色文字;展开的代码先露 5 行;题单锁住的几次合成一行
- 错在隐藏测试点时「去自己输入」给的数跳过例子里出现过的
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-28 20:04:20 +08:00
xuyue and Claude Opus 5.5
83b6b7a81a
fix(题目): 修掉代码审查查出的几处问题——流程图拿到的徽章不弹、点评弹窗读失败时关不掉等
...
- 流程图画到 A / S 拿到的题单徽章、成就原来不弹:流程图那条 WebSocket 只认评分完成 / 失败,
成就消息被丢掉了,要等下次换路由拉 pending 才出来
- 强制点评弹窗读不出点评、或者一直交不上时,「下一题 / 继续」按钮也给出来:原来弹窗关不掉,
只能按浏览器后退;拦下换题时就记上「继续」,按钮文字不会写错
- 「放回编辑器」走正常的换语言路子(画流程图时切回代码编辑器、读那门语言的草稿);
这道题已经不收的语言(0020 摘掉的 Java / JS / Go)置灰,只能复制
- 举着手时刚交对、1.5 秒内点下一题:原来「确定要换题吗」要问两遍(点评完再问一次),
现在同意过的那个地址不再问
- 课堂看板上评分中、评失败的流程图不再算「尝试过」,和学生的课堂条一个口径;
新加的流程图查询和其他查询并行,不再多等一轮数据库
- 课堂条的数据只认最后发出的那次请求:进页面那次后到的话会把刚做完的那道盖回「没做」
- 「A / S 算做完」收进契约,前后端只留一份;协作中老师的判断统一用 useTeacherCollab;
几处放错位置、说法过时的注释
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-28 19:35:07 +08:00
xuyue and Claude Opus 5.5
10169f5792
style(题目): 分隔条两边各留 12px——左栏的「统计 / 点评 / 我的提交」和右栏的「写代码 / 画流程图」原来紧贴着分隔条,看上去连成一排
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-28 19:21:53 +08:00
xuyue and Claude Opus 5.5
a538e60e28
feat(题目): 手机上页签行的「⋯」里能直接复制、重置代码、去自测猫,不用先切到「代码」页签
...
Deploy / deploy (push) Canceled after 0s
- 「⋯」分两组:统计 / 点评 / 我的提交,分隔线,再是去自测猫 / 复制代码 / 重置代码
(老师还有课堂统计)。原来后几项在「代码」页签工具栏的「更多」里,代码页签那一行
现在只剩语言选择
- 菜单抽成 useEditorMenu,桌面工具栏的「更多」和手机的「⋯」共用一份;「课堂统计」弹窗
挂在页面上,两个入口开的是同一个
- 草稿键抽成 useDraftKey:编辑器存取草稿、「重置代码」删草稿用同一份算法。原来键在编辑器里拼、
当 prop 传给工具栏,挪出去之后再拼一份迟早对不上(题单入口还多了一种)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-28 19:09:06 +08:00
xuyue and Claude Opus 5.5
cd960ca01c
fix(SQL 题): 列多的数据表横向滚动,不再把每一列挤成一两个字宽
...
Deploy / deploy (push) Canceled after 0s
原来表格固定占满左栏宽度,列一多、或者左栏拖窄,列名和值都折成好几行,对不上哪个值是
哪一列的。现在按内容撑开、至少占满一行,放不下就在表格里横向滚
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-28 19:03:13 +08:00
xuyue and Claude Opus 5.5
8f0d39bb5a
feat(题目): 结果标题说清楚错在哪——「在例子 1 上就错了」「所有测试点都对了」,答错时附上题目对输出的原话
...
- 在公开例子上就错了的:标题写「答案错误 · 在例子 N 上就错了」,不再挂「通过 x/y 个测试点」
和进度条 —— 那时候那个数字没意义,先把例子跑对
- 做对了:「答案正确 · 所有测试点都对了」
- 答案错误的说明末尾摆出题目「输出」那一节的原话:格式不对、漏了一行这类错,对着原话一看就明白
- 例子都对、错在隐藏测试点的,给「去自己输入试试」(SQL 题不给,跑不了)
- 提交详情页的标题不变
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-28 19:03:13 +08:00
xuyue and Claude Opus 5.5
b4afcbd47f
chore(流程图): 注明 flowchart/current、history 两个接口为什么还留着、什么时候可以删
...
Deploy / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-28 18:50:05 +08:00
xuyue and Claude Opus 5.5
1026b8f9a2
feat(题目): 左栏拖宽、右栏窄于 600px 时工具栏收一收,不再折成两行把编辑器往下挤
...
「课堂统计」收进「⋯」,「写代码 / 画流程图」缩成「代码 / 流程图」,按钮间距收窄。
语言下拉不收:窄于 120px 时图标和「Python」会被挤成两行
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-28 18:49:40 +08:00
xuyue and Claude Opus 5.5
03985fcbf9
style(题目): 暗色下「做完」的题号芯片换成深色字——浅薄荷绿底上的白字几乎看不见
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-28 18:45:59 +08:00
xuyue and Claude Opus 5.5
11ff340110
feat(题目): 语法没过时把代码里每一处中文标点都标出来,和「换成英文(N 处)」对得上
...
- 原来编辑器里只标报错点名的第一处,按钮却写着「4 处」,学生对不上、也不知道一键替换
会改哪里。字符串和注释里的中文标点是合法的,不标(和一键替换同一套判断)
- 这种情况下没交上去:结果页签那一段叫「交之前检查」,标题写「还没有交上去」,
不再叫「提交结果」
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-28 18:44:29 +08:00
xuyue and Claude Opus 5.5
b5d2f1589e
feat(课堂看板): 流程图画到 A / S 在老师的看板上也算做完,只画了图的学生不再显示「没开始」
...
和学生首页的课堂条同一个口径:格子的状态、做对的时间、尝试次数都把流程图提交算进去;
「最后一次提交」也算上今天画的图。有的题这节课整个班都在画流程图,原来看板上是满屏「没开始」
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-28 18:42:53 +08:00
xuyue and Claude Opus 5.5
972dac3776
feat(题目): 答错时说清楚「输出了什么、应该是什么」,交对后给相似题,零碎几处对齐设计
...
Deploy / deploy (push) Canceled after 0s
- 答案错误里「格式和内容都不一样」那一类(样例上错的 44%):原来只说「对照一下,找找
从哪里开始不一样」,现在是「你的程序输出了「E」,正确的是「D」。拿例子 2 的输入「60」,
一行一行走一遍你的程序,看它走进了哪个分支」;多行的说第几行开始不一样
- 不在这节课里的题交对之后,结果页签里给「再练几道相似的」(原来只在题面最底下)
- 提交前自动排版改了代码的,结果上面提一句「编辑器里的代码也跟着变了,按 Ctrl+Z 能撤回」
- 交对之后「提交」降成描边按钮,「下一题」是唯一的主按钮
- 「重置代码」先确认(原来点一下就把代码和本地草稿一起清掉了)
- AI 提示的档位写「第 1 档 · 反问」,不写「L0 反问」
- 成就弹窗从右下角挪到右上角,别和结果、点评弹窗叠在一起
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-28 18:39:05 +08:00
xuyue and Claude Opus 5.5
9110c678fc
feat(题目): 手机上「运行例子 / 提交」固定在屏幕底部,看着题目也能直接交
...
- 两个 44px 高的大按钮固定在底部,三个页签下都在;原来它们在「代码」页签顶上,
和语言、更多挤成两行,看着题面想交一次还得先切回代码页签
- 「代码」页签的编辑器一直挂着(原来切走就卸载):没打开过代码页签也能交,撤销历史也不丢
- 编辑器高度让出底部那条,最后几行不再被按钮盖住
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-28 18:33:17 +08:00
xuyue and Claude Opus 5.5
0c2ff68e9b
feat(协作): 老师协作时右栏顶上一条协作条,结果页签先摆学生最近一次交的,抽屉变成「他的提交」
...
- 协作条:「正在帮 谁 · 语言 · 看他交过什么 ↗ · 结束协作」,从工具栏里挪出来,一眼看得出
编辑器里是学生的代码。「看他交过什么」带上学生用户名、开新标签(原来只带题号,还得再筛一遍)
- 老师接单后「结果」页签原来是空的:现在摆学生在这道题上最近一次交的结果,可刷新;
不给 AI 提示(那是按登录的人自己的失败次数解锁的)
- 抽屉「我的提交」在协作中变成「他的提交」,列的是学生的提交,只能复制、不能放回编辑器
(放回去会经协作通道直接盖掉学生正在写的代码),也不显示老师自己的排名
- 学生排队求助中、或者老师正在帮他时换题:先确认一句。换题会断开协作 / 撤掉举手,
原来一点「下一题」就把正在帮他的老师踢出去了
- 求助按钮文案:「举手求助」→「已举手 · 前面 2 人」→「某某 老师在帮你」
- 提交列表加 exactUsername=1:用户名精确匹配。原来只有「包含」,ks24a1 会把 ks24a10 的提交
也捞进来
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-28 18:28:53 +08:00
xuyue and Claude Opus 5.5
11368813cc
feat(流程图): 「写代码 / 画流程图」变成工具栏上的切换,AI 的评分和历次分数挪进结果页签,题单里也能画
...
- 流程图题的工具栏最左边是「写代码 / 画流程图」。原来流程图藏在语言下拉里,叫一个名叫
Flowchart 的「语言」;画完一道题之后它还被记成语言偏好,下一道能画的题一打开就是画布
- 「交给 AI 点评」交完切到「结果」页签:评的时候写着「AI 正在看你的图」、画布照样能改;
评完是分数、评语、改进建议、四项得分,顶上一排历次分数,点哪次看哪次。
原来是提交按钮旁一个 1000px 的弹框,盖住画布,翻历次评分要一页一页点
- 画到 A / S:给「照着它写代码 →」,题单里 1.5 秒后回题单(和代码通过一样),
课堂条当场标成做完;只在这一页上刚评完的那次才算,进页面读到以前的 A 不跳
- 「把这一版载回画布」只在画布和那一版不一样时出现;载回、进页面读回草稿后都缩放到装下整张图
- 题单入口能画流程图了(原来只有题库入口能画),题单里的代码草稿、流程图草稿各存一份,
加入题单之前写的、画的不会一进题单就摆在编辑器里
- 手机上不给「画流程图」(节点库是拖放,手机上拖不动),题面里以前画好的那张照样看得到
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-28 18:19:16 +08:00
xuyue and Claude Opus 5.5
3fe3caa944
feat(流程图): 流程图画到 A / S 算这道题做完——题单进度、课堂条都认;加入题单之前画的图先藏起来
...
Deploy / deploy (push) Canceled after 0s
- 流程图评到 A 或 S,记进所有已加入、且包含这道题的题单(和判题那一路同一个口径,不看从哪个
入口交的),徽章和题单类成就照样推送。原来题单进度只在判代码时记,流程图作业在题单里永远是
「没做」。流程图提交的 id 进不了 problemset_submission(外键指向代码提交表),所以只写
progress_detail —— 解锁旧提交的那道闸看的也是它
- 课堂条(/me/class-activity)的 myStatus:流程图 A / S 也算 accepted,评完的非 A/S 算 tried
- 题单防抄闸门补到流程图上:加入题单之前画的图,对本人藏起来(列表 showLink、详情 404、
current / history 不数它),规则和代码提交同一份(problemSetJoinTimes 挪进 services/problemset)。
原来加入之前画到 A 的那张图点一下就能载回画布、交上去就是 A
- 新增 GET /problems/:id/flowchart/scores:一次给出自己评完的每一次的分数和等级,外加被藏起来
的次数(原来 history 一次只给一条,看分数走势得一页一页翻)
- 「A/S 算过关」和按分数定等级收进 flowchart/grade.ts;判题那边的记账 + 通知抽成
recordSolvedAndNotify,两条路共用
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-28 17:56:35 +08:00
xuyue and Claude Opus 5.5
948e9a734d
feat(题目): 例子摆成一张「输入 | 输出」的表,三个例子不再占掉大半屏
...
原来每个例子各占一个小标题加两个框,三个例子就把输入输出说明挤出了一屏;
现在一行一个例子、输入输出对齐,每格右上角带复制。「自己输入数据试试」留在表头旁边
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-28 17:48:13 +08:00
xuyue and Claude Opus 5.5
6a0f6399b7
feat(题目): 「我的提交」按第几次列出来,点开就地看代码,一键放回编辑器(Ctrl+Z 能撤回)
...
- 每条写成「第 N 次 · 结果 · 语言 · 时间」,点一下在抽屉里展开代码,带「放回编辑器」「复制」
和「完整详情」(新标签打开,测试点、自测猫都在那边)。原来是点编号弹出 70vw 的详情弹窗,
盖住整个题目页,「复制回到题目」还要整页跳一次
- 放回编辑器是一次普通的整段替换,编辑器的撤销历史记着它,按 Ctrl+Z 就回到原来的代码
- 顶上一句话:「你是班上第 N 个做对的,班上一共 M 人做对了」(没有班级时是全站),
后面跟「看看他们的写法」
- 加入题单之前交的那几次照旧锁着,改成行内一句说明,点不开
- 协作中的老师不给「放回编辑器」:那会儿编辑器里是学生的代码,放回去会经协作通道直接盖掉
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-28 17:48:13 +08:00
xuyue and Claude Opus 5.5
5bb69ecce3
feat(点评): 点评改回轮盘并重新设计——每块直接写着名字,选完就地变成玫瑰图看大家怎么选
...
上一版把轮盘换成了按钮格子,改回轮盘,但重新画了一个:
- SVG 画的 7 块环形扇区,每块上直接写着表情和名字(最大 16px),不用先把鼠标移过去;
悬停的那块染上主色、往外弹出,圆心报它的名字
- 选之前哪里都没有人数;选完就地变成玫瑰图:每块从里往外填一段、长短按人数,标「N 人」,
自己选的那块是主色、弹出、带 ✓,圆心写「你选了 学到了 · 共 N 人评过」
- 没登录、没做对时轮盘照画、整个淡下去,圆心写原因
- 原来的轮盘用 CSS clip-path 加 color-mix(),后者 Chrome 111 才有,机房 105 那档扇区没有底色
- 上一版的防误触(600ms、强制弹窗里不响应 Enter / 空格、不预选)和选完的「下一题」都保留;
抽屉里能用键盘选
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-28 17:19:37 +08:00
xuyue and Claude Opus 5.5
c64b0a402b
feat(点评): 点评轮盘换成一排大按钮,选之前不显示人数,选完看大家怎么选、直接去下一题
...
- 七个选项不变,排成 4 + 3 的大按钮(表情 + 15px 的字)。原来的轮盘要把鼠标移到扇区上
才看得清,每块的字只有 12px 左右;还用了 Chrome 111 才有的 color-mix(),机房 105 那档
渲染不出扇区底色
- 选之前不显示「N 人选择」,免得跟风;选完换成横条图,标出自己选的那一项
- 防误触:弹出后 600ms 内点不了,强制弹窗里不响应 Enter / 空格,也不预选任何一项
- 选完弹窗不马上关,下面只有一个按钮、焦点就在上面:这节课的「下一题」,或者刚才被拦下
的换题「继续」,都没有就是「好的」
- 标题从「恭喜你成功提交」改成「做对了!」:交上去不等于做对
- 提交失败留在弹窗里提示「没记上,再点一次」;没做对的人在抽屉里只看到一句说明
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-28 16:22:48 +08:00
xuyue and Claude Opus 5.5
116b0a2c95
feat(题目): 左栏顶上标出「这节课做完几道」、题单进度或比赛倒计时,统计 / 点评 / 我的提交收进抽屉
...
- 上下文条(按入口三选一):课堂 = 「这节课 做完 3/5」+ 每道题号 + 上一题 / 下一题;
题单 = 题单名 + 进度 +「第 N 题」+ 上一题 / 下一题;比赛 = 比赛名 + 每道题号 +「还剩 38:12」+ 排名。
题号只放号码,状态用 ✓ / ! 字符区分,不只靠颜色;多于 5 道横向滚动,当前题保持可见。
通过之后当场 +1,不用刷新
- 左栏只剩「题目 / 结果」两个页签;统计 / 点评 / 我的提交变成页签行右侧的按钮,点开是抽屉,
只盖题面、编辑器不动,交完判出结果时自动收起。手机上收进页签行的「⋯」
- 流程图并进「题目」页签:参考流程图默认折叠;自己画到 A/S 的那张缩略显示、可放大,
一进题就能看到(原来要先切到「流程图」这门「语言」),也不再强行切页签
- 「本题已经被你解决啦」两条整宽提示改成标题下的「✓ 已解决 / ! 尝试过」标签;
时间内存限制只写「限时 1 秒」
- 入口差异收成一张表(problemPageContext):题单里不给抽屉、状态标签、相似题;
比赛里没有点评和求助。工具栏的「本题提交」挪到「我的提交」抽屉底部
- 顺手修:没有例子的题点「去自测猫」会抛错;「我的提交」没交过时一片空白
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-28 16:02:28 +08:00
xuyue and Claude Opus 5.5
45505e8384
feat(题目): 工具栏加「运行例子」、结果页签加「自己输入」,去掉每个例子旁的「测试」和顶栏的分栏切换
...
Deploy / deploy (push) Canceled after 0s
- 工具栏「运行例子」:一键用全部例子试跑(Judge0,不算提交),结果进「结果 › 运行例子」,
每个例子 ✓ / ✕,没对上的沿用答案错误那套中文说明;比赛里只摆输出、不给提示句
(后端在比赛里故意不做例子对比);SQL 题不给
- 「结果」页签分成提交结果 / 运行例子 / 自己输入三段;「自己输入」顶替顶栏「自测」模式
那个单独的编辑器
- 试跑出错(编译、运行、超时)给中文说明,Judge0 的英文原文折叠起来
- 例子比对两边都去掉末尾空白:原来只 trim 了运行输出,样例末尾带空格的题永远「不通过」
- 去掉题面里每个例子旁的「测试」、顶栏的「双栏 / 自测 / 题目」切换、EditorForTest 和
screenMode store
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-28 14:35:58 +08:00
xuyue and Claude Opus 5.5
f4db7dc81c
feat(题目): 判题结果从提交按钮下的浮层挪到左栏「结果」页签——改代码时结果就摆在旁边
...
原来结果是提交按钮下面的 n-popover:点一下外面就收起、最高 600px、盖住编辑器,
学生没法一边看「正确输出 / 你的输出」一边改代码,还得靠「上次结果」按钮找回来。
- 左栏新增「结果」页签(手机上排在「代码」后面),交上去或者语法检查没过就自动切过去;
页签标题带状态图标(✕ / ✓ / ! / 判题中转圈),不只靠颜色
- 页签用 show:lazy:切走不卸载,编辑器里的错误标记、AI 提示都留着
- 「题目描述」改叫「题目」;去掉浮层和「上次结果」按钮
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-28 14:21:57 +08:00
xuyue and Claude Opus 5.5
5cb7cfa924
refactor(流程图): 评分状态挪进 store——交完切去写代码,这次的评分结果不再丢
...
Deploy / deploy (push) Canceled after 0s
SubmitFlowchart 只在语言选成 Flowchart 时才挂载,评分的全部状态(WebSocket 订阅、
轮询兜底、3 分钟超时)都长在它身上:交完马上切去写代码,组件一卸载就断开连接,
正在评的那次结果丢了 —— 不提示分数,评到 A/S 也不亮到「我的流程图」。
- oj/store/flowchart.ts:提交、评分跟踪、评完的提示、A/S 亮图、最近一次分数;
换题和离开页面时收掉
- SubmitFlowchart 只剩从画布取图和评分详情弹框
- 顺手补了登录检查:原来没登录也能点,请求发出去才被拦,只看到一句「提交失败」
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-28 13:49:45 +08:00
xuyue and Claude Opus 5.5
26e22e2542
refactor(题目): 提交状态挪进 store——手机上切页签、桌面切分栏,判题结果和点评不再丢
...
提交按钮那个组件(SubmitCode)在编辑器的工具栏里,而提交的全部状态和判完之后的
反应都长在它身上:手机上交完切到「描述」页签(Naive 的页签切走即卸载)、桌面切到
「题目 / 自测」模式,编辑器一卸载,判题结果、AI 提示、失败计数、通过后的点评、
题单里的回题单全丢了。
- oj/store/submission.ts:这次提交、判题跟踪、语法检查报错、结果面板开合、冷却、
AI 提示(useSubmissionHint)
- SubmissionEffects.vue:挂在题目页这一层,失败计数、标成已解决、烟花、强制点评
(连同「先点评再换题」的导航拦截)、回题单
- SubmitCode 只剩按钮和结果面板
- WebSocket 通道和判题监控的收尾改成 onScopeDispose:onUnmounted 在 store 里挂不上
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-28 13:36:35 +08:00
xuyue and Claude Opus 5.5
a8b83ba762
refactor(题目): 比赛和题单改用题库那个编辑器——题单里的求助终于接得上,一键换中文标点也能用了
...
比赛和题单原来用的是另一个精简版编辑器(BasicEditor),没有协作绑定、也没有
错误标记扩展:题单里学生点「求助」,老师接单后编辑器绑不上;比赛和题单里
「把中文标点都换成英文」点了没反应、出错行也不标红。三种入口统一成 ProblemEditor,
删掉 BasicEditor。流程图仍然只在题库入口出现(语言列表那道闸没动)。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-28 13:18:58 +08:00
xuyue and Claude Opus 5.5
0daa74651d
fix(题目): 通过后马上点「下一题」或换题,强制点评会被跳过
...
Deploy / deploy (push) Canceled after 0s
从答案正确到点评弹窗出来有 1.5 秒(外加查一次评过没有),而换题会取消弹窗的
定时器 ——「下一题」在通过的那一刻就出现,学生手快就绕过了强制点评。
现在这段时间里离开这道题的导航(下一题、题号直达、顶栏导航、相似题……)先拦下:
立刻弹点评,选完再去原来要去的地方。只改 query(左栏切页签)不拦;弹窗已经开着时
也不拦,免得点评接口一直失败时把学生关在这一页。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-28 12:08:45 +08:00
xuyue and Claude Opus 5.5
85fadd237e
docs(题目页): 重设计的设计文档——结果放左栏页签,适配机房 1366×768 与 1280×1024 两种屏
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-28 11:30:54 +08:00
xuyue and Claude Opus 5.5
1b149a4f3f
fix(题目): 在题目页里直接换题(下一题、题号直达)后,例子和语言还停在上一道题
...
Deploy / deploy (push) Canceled after 0s
题目页换题是同一个组件复用、只换路由参数,几处只在创建时读一次的状态就停在了上一道题:
- 例子:新题下面摆着旧题的例子,「测试」也拿旧例子比对
- 语言:下拉选项不跟着变,也不回退——从 Python 题跳到 SQL 题,语言停在 Python,提交必被拒
- 比赛 / 题单的编辑器只在挂载时载入一次代码
- 流程图:分数按钮、评分弹框、「我的流程图」还是上一道题的,上一道题还没评完的那次会挂到新题上
语言回退挪进 problem store 的 supportedLanguage(),两个编辑器在载入草稿之前调用,
保证先定语言再读这门语言的草稿。没有用给整块加 key 强制重新挂载的办法:课堂协作的
绑定依赖组件复用,重挂载会让协作中切题的老师语言恢复不了。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-28 09:15:50 +08:00
xuyue and Claude Opus 5.5
71670e609b
feat(成就): 新增「最长连续新通过周数」指标,按课表的节奏算连续;修掉比赛成就重扫因孤儿提交失败
...
Deploy / deploy (push) Canceled after 0s
按天的连续成就对这里的学生基本拿不到:2025 秋最长连续交题天数的中位数是 1 天,
连续 7 天的只有 3 人。按周算,连续 2/4/8 周分别有约 73%/49%/8% 的学生做到过。
- 新指标 max_ac_week_streak:连续几个自然周(周一起、东八区)每周都至少新通过一道题
(不含比赛)。判题结算时增量累计(比按天那段多一道判断:重判更早的提交不会把连续清零);
后台建成就触发重扫时,先从提交记录全量补算(refreshAcWeekStreakForAll),同 contest_joined
- 老的「坚持三天」「坚持一周」不动:下架的成就连已获得的人也看不到
- 修:库里 28 个已不存在的用户留下了 935 条提交(其中 11 人有比赛提交),全量补算往
user_stat 写时撞外键,整次失败——比赛类成就的重扫因此一直是失败的;两处都改为只算
还在的用户。本地修好后重扫「初入赛场」补发了 3 人
- 本地验证:连续 2/4/8 周补发 1086/618/123 人,与独立 SQL 一致
线上要在后台手动建成就(指标选「最长连续新通过周数」),建的时候自动补发。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-28 08:27:25 +08:00
xuyue
8ca427b5cd
update
Deploy / deploy (push) Canceled after 0s
2026-09-27 23:28:17 +08:00
xuyue and Claude Opus 5.5
a7f6ebaf49
feat(激励): 知识点地图——每个知识点做对几道、在哪一档、再做几道升级,首页一句话提示本周进步
...
Deploy / deploy (push) Canceled after 0s
现有 38 个成就全是累计量(通过几题、提交几次、连续几天),起步的人人都有、往上的够不着,
而且没有一个在说「你学会了什么」。连续打卡在这里结构上做不到:2025 秋学生最长连续交题
天数的中位数是 1 天,连续 7 天的只有 3 人。
- GET /me/knowledge:题数 ≥10 的知识点标签(10 个),每个给做对几道、档位、周一时的档位、
下一档门槛;四档 入门 1 / 会了 3 / 熟练 题数 40%(≤10)/ 精通 75%(≤20)。
回测 2025 秋:中位数学生一学期升 5 档;「入门」一档是给只做对一两道的 71 人加的
- 同班 ≥30% 点亮过的知识点才会出现在「还没碰过」里,免得 Python 班看到「C 语言」
- 个人主页加「我的知识点」,只在看自己时显示;首页一句话:本周升级 > 离下一档最近的 >
去点亮一个班里在学的,点了去按知识点筛的题目列表
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-27 23:17:43 +08:00
xuyue and Claude Opus 5.5
a63bf6ea07
feat(题目): 通过之后直接给出这节课的下一题;在题目页里换题时不再带着上一道题的结果和评价弹窗
...
Deploy / deploy (push) Canceled after 0s
72% 的提交一次就通过,每次通过之后学生都要回首页或再问一遍题号去找下一道。
- 结果面板在通过时显示 LessonNext:取 /me/class-activity(老师布置的优先,否则推断),
给出排在当前题后面、还没通过的第一道,后面都做完了再从头找;全做完了显示「都做完了」
并指向题单。当前题不在列表里、比赛、题单入口都不显示
- 评价弹窗关掉后重新打开结果面板:点弹窗时面板会被当成点了外面收起来,「下一题」就在面板里
- 换题(同一组件只换路由参数,有了题号直达和下一题之后成了常规操作)时收掉上一道题的
结果面板、语法错误、还在跟的提交(新增 useSubmissionMonitor.reset),并取消通过后
那两个 1.5 秒的定时器——否则会给还没做的新题弹评价,上一道判完时还会把新题标成已解决
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-27 22:58:19 +08:00
xuyue and Claude Opus 5.5
a6bf845e06
feat(课堂看板): 标出最近几节课经常没交的学生,求助的学生置顶,点一下打开求助列表
...
Deploy / deploy (push) Canceled after 0s
2025 秋至少上过 5 节课的学生里,12.5% 七成以上的课一道都没交,37% 的学生贡献了
一半以上的「没交」;当堂那份「今天还没交过」把偶尔没来的和一直不动手的排在同一行。
- 看板接口给每个学生加 recentAttended:最近几节课(最多 5 节、不含今天、45 天内;
一节课 = 同班同日 ≥5 人做同一题)里交过几节,另给 recentLessons
- 「今天还没交过」拆成「经常没交」(≥3 节可比且最多交过 1 节)和其他;表格加一列
「最近 N 节」;只给老师看,投影模式不出现
- 求助读老师端常驻 WebSocket 的 collabStore.requests(不改后端):求助的学生置顶,
状态显示「举手了 / 老师在帮」,点一下打开求助列表;求助提示不论布没布置题都显示
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-27 22:47:24 +08:00
xuyue and Claude Opus 5.5
80106eaa04
feat(课堂): 老师的课堂看板——布置这节课的题、看全班谁还没开始谁卡住了,布置的题直接出现在学生首页
...
2025 秋平均每节课有 14 个平时在用的学生一道都没交(三分之一),交了 3 次以上还没过的
平均不到 1 个;而老师原来只能一道题一道题打开统计弹窗看。
- 新表 class_lesson(迁移 0023,仅建表):一个班一天一行,存老师布置的 problem.id 与顺序;
day 存东八区日历日文本,created_by CASCADE
- GET /classroom/board:这个班今天的题 × 全班学生(通过与否不限今天、今天交了几次、
最后提交时间);不给班级时猜最近两小时提交人数最多的班,不记老师上次选的
- PUT /classroom/lesson:按展示题号布置,对不上的题号点名拒绝,空数组 = 清掉
- /me/class-activity 优先返回老师布置的题(source = teacher),否则照旧推断
- 前端 /classroom:没交过的名单置顶,按 没交过 → 卡住 → 在做 → 做完 排序,15 秒刷新;
投影模式只显示每题完成人数、不出名字;用户菜单给老师加入口
- 学生首页:老师布置的标题写「今天老师布置的题」,没人交时不显示 0/0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-27 22:37:59 +08:00
xuyue and Claude Opus 5.5
7e964fdbdd
feat(题目): 答案错误时拿公开样例重跑,并排显示正确输出和你的输出,按差异类型给中文提示
...
Deploy / deploy (push) Canceled after 0s
原来答案错误只有四个字。6901 条历史答案错误在公开样例上重跑过:73% 在样例上就错了,
其中约三分之一只差格式(没输出、input() 提示文字、空格换行、中英文标点、小数位数)。
- judge/run.ts 的 checkSamples:判出答案错误后以内联测试点重跑题目样例(output: true),
记下第一个没过的样例和学生在它上面的输出,写进 statistic_info.sample_check;
样例全过则只记 passed。全是公开信息,不碰隐藏测试点;比赛不跑(有期末考试)
- 前端按差异归类(数字先于「多了内容」判,免得 007 被当成多打了文字),
并排显示输入 / 正确输出 / 你的输出,标出第一处不同的行;只差空白时把空格、换行画出来,
末尾空白不画(判题本来就忽略)
- 提示给具体值(「正确输出是 84.10,你输出的是 84.1」),input("…") 单独提示
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-27 22:14:24 +08:00
xuyue and Claude Opus 5.5
db70ab62e8
feat(题目): 运行时错误告诉学生第几行、为什么出错(Python 看回溯,C 看信号),不泄露测试数据
...
原来学生只看到「运行时错误」四个字:主判题 output: false,Python 回溯没回来;
C 的信号值在 info 里,而 info 只给管理员。
- Python 判出 RE 时,拿第一个失败测试点单独重跑一次(内联测试点 + output: true),
从回溯取行号(扣掉模板前置行)、异常类型和按句式归的类别。主判题仍不开 output,
免得每个点最多 16MB 的输出回到 worker
- C / C++ 取失败点的信号和退出码(段错误提示 scanf 漏 &、return 非 0 等)
- 写进 statistic_info.runtime_error;不存异常原文(里面常带测试点输入),名字只在
出现在学生代码里时才存——raise Exception(input()) 实测只落下类型
- 前端按类型翻成中文、摆出出错那行并在编辑器标红;比赛提交不诊断(ACM 只报对错)
- 没有诊断的 RE 不再说「代码格式写错了」
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-27 22:01:30 +08:00
xuyue and Claude Opus 5.5
2a4405d2ea
feat(题目): Python 语法错误改成中文说明,在编辑器里标出位置,中文标点可以一键换成英文
...
Deploy / deploy (push) Canceled after 0s
中职学生看不懂英文报错。原来提交前用浏览器里的 Skulpt 拦语法错误,只弹一句
「第 N 行存在语法错误」——Skulpt 九成报的是 bad input / bad token,没有列号。
- 提交前的语法检查挪到服务端:/code/format 先用 CPython 编译一遍(只编译不执行),
api 镜像加 python3-minimal(3.13,与判题机同版本,+17MB),前端删掉 Skulpt
- 报错按规则表翻成中文(pythonError.ts),生产库 2695 条 Python 编译错误覆盖 99.7%;
提交前拦下的和判题回来的编译错误共用同一张卡片
- 编辑器里标红出错行和 ^ 指的位置
- 中文标点(历史编译错误的 22%)一键换成英文,跳过字符串和注释、处理 f 字符串花括号;
594 条里修好 593 条,经 tokenize 核对没有改到字符串内容;走编辑器事务,可 Ctrl+Z
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-27 21:47:01 +08:00
xuyue and Claude Opus 5.5
039992dc86
feat(前台): 顶栏可以输入题号直达;首页列出班里最近一次课一起做的题和自己的完成情况
...
Deploy / deploy (push) Canceled after 0s
课上老师报题号、全班去找,是 2025 秋七成非比赛提交的来路,界面上原本没有它的入口。
- 顶栏(桌面端)加题号框,首页「找题」同一套逻辑:题号对上直接进题,否则去列表搜
- 新接口 GET /me/class-activity:同班同一天 ≥5 人做过的题,取最近 7 天里最近的一天,
附带我自己的状态与班里通过人数;首页据此显示「今天班里在做」卡片,没有就不占位
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-27 20:58:15 +08:00
xuyue and Claude Opus 5.5
d07459928d
feat(标签): 题目列表的标签分成「知识点」「主题」两组,新建的标签在后台标出待归类
...
Deploy / deploy (push) Canceled after 0s
- 迁移 0022:problem_tag 加 category(knowledge / theme)和 category_confirmed;
存量 25 个题材、题集类标签归主题,其余归知识点,全部记为已确认
- 前台题目列表按两组显示标签,组内按题目数从多到少
- 后台标签管理:每行切换分类;出题时新建的标签默认知识点、标「待归类」并排在最前,
页头提示待归类数量,可点「确认」保留默认;加分类筛选
- 新接口 PUT /admin/problem-tags/:id/category,设置分类即视为确认
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-27 20:38:43 +08:00
xuyue and Claude Opus 5.5
e1b6a9e9fa
feat(前台): 题单卡片显示完成进度,手机上题目列表不再横向溢出,个人主页数据排得更紧凑
...
- 题单卡片:完成进度条和「已完成 x / y 题」,「已完成」改成绿色,未获得的徽章置灰;
进度按加入时的快照算,题单后来加了题就注明「新加了 N 题」,不再出现「已完成」却是 5 / 6
- 题目列表:手机上只留状态、编号、题目、难度四列;标签默认收起,选中的标签显示在按钮旁
- 个人主页:六项数据保留,改成三列两行的小卡片,头像缩小
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-27 20:27:00 +08:00
xuyue and Claude Opus 5.5
6bf8c6e1d9
style(前台): 列表页去掉表头 emoji、已结束的比赛改成灰色;比赛列表置顶进行中的比赛,排名页先看榜单
...
- 前台 53 处表头改成纯文字,删掉只剩这一个用途的 utils/renders.ts
- 「已结束」从红色改灰色(比赛列表 / 详情 / 后台 / 首页一起)
- 比赛列表第一页、无筛选时顶部列出进行中和即将开始的比赛
- 内容少的页面页脚贴底,不再悬在半屏
- 排名页两张柱状图挪到最后,第一屏是 Top100、本周进步榜和我的排名
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-27 20:13:29 +08:00
xuyue and Claude Opus 5.5
31aa5f6e74
feat(前台): 登录后首页改成个人首页;题目详情页的代码要求挪到最前面、样例并排显示
...
- 登录后 / 是个人首页:继续学习、最近提交、进行中/即将开始的比赛、公告;
没登录仍是题目列表,题目列表另有 /problem 地址,顶栏「题目」指向它
- 继续学习按服务端留痕取最近打开的一课,不用 localStorage(机房一机多人)
- 题目详情:标题下加难度与时空限制,代码要求提到最前,小节收紧,
样例输入/输出并排;工具栏「提交信息」「更多操作」改为「本题提交」「更多」
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-27 20:08:47 +08:00
xuyue and Claude Opus 5.5
d3823430f9
feat(后台): 侧栏分组带图标、可收起,加顶栏;所有后台页面统一页头
...
Deploy / deploy (push) Canceled after 0s
- 侧栏按 概览 / 教学内容 / 学情分析 / 站点管理 分组,去掉超管菜单里的重复项;
菜单项的角色与路由守卫一一对应,没有题目权限的教师不再看到点了就被踢回首页的「题目」
- 顶栏:面包屑、回到前台、明暗切换、用户菜单(退出登录);窄屏侧栏自动收起
- 新增 PageHeader:标题 + 右侧主操作 + 下方筛选栏,编辑页带返回按钮
- 卡点分析 / 年度趋势 / 标签管理从题目列表的按钮挪进侧栏
- 首页改成统计卡片 + 班级排名卡片;设置页按钮移到卡片右上角
- 题目、比赛、题单、用户列表的「选项」列固定在右侧,不再被挤出屏幕
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-27 19:54:42 +08:00