xuyue and Claude Opus 5.5
7e68e11371
feat(题目页): 手机上写代码顺手多了:键盘上面多一排常用符号(括号、引号、冒号、缩进…点一下就进去,括号自动配对),代码字号改小、长行折行不再看不见右半截;输入输出说明上下排、例子不再被左边两列标签挤窄;题单里那条不再超出屏幕
...
Deploy / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-13 22:56:02 +08:00
xuyue and Claude Opus 5.5
1fcd12f6f4
feat(举手与协作): 顶栏「N 人举手」点开按题分组带错法;看板多一列「在写」点了就能看他的代码;帮完了回看板、还有人就「下一个」
...
学生那边按钮写「xuyue 在帮你 / 在看你的代码」。顺带修了老师接单后编辑器里留着自己的
草稿或模板、学生的代码插在前面、两边从此不一致的问题。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-13 13:04:57 +08:00
xuyue and Claude Opus 5.5
df76e7f101
feat(提交详情): 单独打开的一条提交改成左边代码、右边为什么错 + 这道题交的每一次
...
Deploy / deploy (push) Canceled after 0s
- 原来不显示是哪道题、时间只到日、答案错误不说为什么,测试点表 5 行一模一样
- 右边摆题目页那块例子对比(输入 / 正确输出 / 他的输出,差的字标红),编译失败、运行时错误同提交列表右栏的说法,代码里标出那一行
- 「这道题交了 N 次」常驻右栏,← → 一次次翻,看他是怎么改对的;题单藏着的那几次点不进
- 老师:「他的全部提交」和「⋯」(复制两项、重新判题);测试点方块悬停看用时和内存;判题中自己刷新
- 别人的代码、链接不对原来一直转圈,现在说清楚是哪种;自己在题单布置期内的照样看得到是哪道题、什么结果
- 后端详情多给题目名、班级、题单,`?attempts=1` 带上同题的每一次;看不到别人的回 403 而不是 404;提交者本人也拿得到 contestId(比赛里的题号是比赛自己的)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-13 01:00:22 +08:00
xuyue and Claude Opus 5.5
afbc240a19
fix(点评): 做对之后的点评弹窗点一块就关,不用再点一次「好的 / 下一题」
...
Deploy / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-12 23:34:33 +08:00
xuyue and Claude Opus 5.5
04c90e3f89
feat(流程图): 手机上也能画流程图了
...
原来手机上不给画(节点库是 HTML5 拖放,手机上拖不动),只能在结果页签里多一段只读的
「流程图点评」。换成插入式编辑器之后只用点,手机上照样能画:
- 「代码」页签的工具栏里有「写代码 / 画流程图」、撤销、重做
- 屏幕底部那条在画流程图时换成「交给 AI 点评」
- 结果页签就是电脑上那一套(逐组结果、亮路径、载回画布),只读的那一段删了
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-12 21:28:20 +08:00
xuyue and Claude Opus 5.5
099c6d7ba6
feat(流程图): AI 点评改成拿例子和测试数据在图上走一遍,同一张图不能再原样重交抽等级
...
原来让 AI 按逻辑 40 / 完整 30 / 规范 20 / 清晰 10 打总分:同一张图交两次能差 35 分
(有一张 C 再交变 S),22% 的提交和上一次一模一样;评语里写 node_9 这种学生看不到的编号。
照画布稿 FlowResFail / FlowResPass:
- AI 拿题目的例子和最多 3 组测试数据,从开始照着图走到结束,逐组说输出什么、对不对、
最先错在哪个框;全对 A,全对且写法挑不出毛病 S,走对一半以上 B,否则 C
- 结果页签:「3 组走对 2 组」,逐组 ✓ / ✗,点开看「你的图输出 / 应该输出」,画布上按先后
编号亮出这一组走过的框、错的那个标红;图一改就不亮,载回那一版又能亮
- 画布和上次评完的那张一模一样时「交给 AI 点评」灰掉;后端也兜着:同一道题一模一样的图
直接照搬上次走例子的结果,不再问 AI
- 题目一组例子、测试数据都没有时退回老的四项分;老提交照旧按四项分显示
- 历次等级、提交列表的胶囊只写等级,不写分数
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-12 21:08:42 +08:00
xuyue and Claude Opus 5.5
09f8a56913
feat(流程图): 画流程图不用再拖框连线——点箭头上的 + 加一步,判断自动分出是 / 否,排版全自动
...
原来要从节点库拖框、对准连接点拉线、自己摆位置,还能画出断线和孤立的框;
画布上全是彩色圆角块,交上去的却是平行四边形和菱形。现在照画布稿 FlowEdB:
- 图存成一棵结构树(顺序 / 判断 / 循环),开始、结束固定在两头,排版是纯函数
- 每根箭头上一个 +,点了选输入 / 输出 / 处理 / 判断 / 循环;点框直接改字,右上角「删除」
- 形状照国标流程图,画布、缩略图、交给 AI 的 Mermaid 是同一套;缩略图配色跟着画布改
- 已保存时间、撤销、重做挪到工具栏,「清空画布」收进「⋯」;空框交不上去
- 去掉 vue-flow 三个包(编辑器打包后 16 KB),删掉没人进的 /flowchart 页
2026-10 之前交的图是 vue-flow 格式,只能看缩略图、载不回画布;旧草稿键名不同,不去碰。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-12 20:56:45 +08:00
xuyue and Claude Opus 5.5
6f47ad8358
perf(Markdown): 题面、教程、AI 提示每次打开都去 unpkg.com 拉四个库,机房网络下又慢又不稳
...
md-editor-v3 的 MdPreview 不管正文里有没有代码、公式,都会从 unpkg.com 加载
highlight.js、katex、mermaid、echarts(mermaid 还是另一份 11.x)。而我们只用到最基础的
Markdown:题面 95% 是富文本存的 HTML,教程是标题、表格、图片,AI 输出是标题、列表、
表格、少量代码块,库里一处公式、mermaid 都没有。
- 显示:新组件 shared/components/Markdown.vue,直接用 markdown-it,代码高亮走本地的
highlight.js(和练一练共用 shared/highlight.ts,补了 C++ / SQL)。9 处 MdPreview 全换掉。
正文默认 16px,教程也统一成 16px。
- 编辑:后台教程编辑器换成项目已有的 CodeMirror,加一排格式按钮;图片可以按按钮选、
粘贴、拖进来,都是先上传再插入。md-editor-v3 从依赖里删掉。
- AI 生成的内容(AI 提示、AI 分析、班级报告)不再放行原生 HTML:学生能在代码里诱导
AI 吐出 <img onerror>,老师在后台一打开就执行。库里 1196 条 AI 输出没有一个 HTML
标签,关掉不影响显示。题面、教程照旧放行。
- 长英文改成在单词之间折行,原来 break-all 会把 "I live" 断成 "I l / ive"。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-12 14:02:54 +08:00
xuyue and Claude Opus 5.5
c497ccadc8
fix(题目页): 例子输出长一点就在半格里横着滚,机房屏幕上一成的题看不全
...
机房两种屏上左栏只有 550px 左右,「例子 N | 输入 | 输出」每格只放得下二十来个字符,
而例子输出最长那行的 p90 有 28 个字符宽(中文按两个算),62 道题超过 32。
按这道题最长那行用实际字体量宽度:半格放得下照旧摆表;放不下就整道题的例子改成
上下排,输入、输出各占满宽;整宽也放不下的二十来道才横着滚,滚动条改成 6px 细条。
拖动分栏时实时重算。不自动折行:折出来的行学生分不清是不是真换了行。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-12 14:00:29 +08:00
xuyue and Claude Opus 5.5
1e441411a5
style(前台): 页面整体放大一档,列表不再挤成一团;宽屏上内容居中,不再铺满到两边
...
Deploy / deploy (push) Canceled after 0s
- index.css 加一张 --oj-* 尺寸表和 .oj-page 外壳,二十几个前台页面改成引用它:
正文 14→15、页标题 20→24、题目/提交列表行高 40→48、比赛/公告 56、筛选控件 28→34
- 阅读型页面限宽 1200 居中;题目/提交列表 1600、比赛详情 1400、排名 1280、班级 PK 1440
- 1280 宽的筛选条放大后放不下,题目/提交列表在 1366 以下退回 13px 的字
- 班级 PK 五个班起格子里不写「一次 x%」(只剩「一次 8…」);赛跑图线尾的数字不再被截掉
- 手机上比赛列表的「没参加」挪到比赛名下面;题单里「以前做对过 · 旧代码先藏着」缩成「做对过」
- 题目详情页(编辑器)和后台不在这一轮
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-10 12:43:12 +08:00
xuyue and Claude Opus 5.5
c17f88cdbb
feat(题单): 题单页重做——布置中的放最上面,详情顶上一条进度和奖章阶梯,没加入看得见题点不进;老师看全班、后台一屏编辑
...
Deploy / deploy (push) Canceled after 0s
- 列表:布置中的大卡片(做对几道、布置到哪天、再做对几道拿哪个奖章),其余小卡片,加入过的在前
- 详情:进度 + 奖章阶梯(下一个金圈「再做对 n 道」),题目两列写几点做对 / 交过几次;
以前做对过的标「旧代码先藏着」;做完整条变绿,烟花只在做完那一刻放
- 老师多一个「全班情况」页签;题目页从链接直接进来没加入时,条上给「加入题单」
- 后台一屏编辑:布置一周 / 两周 / 四周 / 选日期,公开开关,粘贴多个题号一次加,拖动排序,奖章只剩两种条件
- 旧代码藏着的地方都说清楚是哪个题单、哪天之后能看
- 修掉列表卡片把选做题数说成「新加了 N 题」
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-09 22:01:39 +08:00
xuyue and Claude Opus 5.5
151bbdcb50
feat(比赛): 比赛页一页看题目和自己的名次;排名竞争感做足、结束有领奖台;老师考试中看全班、考完看成绩;新建比赛一屏做完
...
Deploy / deploy (push) Canceled after 0s
- 学生比赛页(设计稿 B):左边题目带几人做对、谁最先做对;右边我第几名、5 分钟里升了几名、再做对 1 道能到第几名、我前后的人
- 期中、期末考试中只有自己的进度,写明「排名考完公布」,题目页的排名入口也藏起来
- 排名页:按班筛、名次变化、最先做对的深绿格、自己那行钉住;结束后前三名领奖台 + 我的成绩卡;排名曲线和学生的「导出数据」去掉
- 老师的「全班情况」:卡在一道题、15 分钟没交的放最上面,没进来的人对上看板的请假;考完变「成绩」,点格子看代码、标看过了(代替后台审核页),导出成绩
- 比赛列表:进行中的一大块「接着比」,已结束的写我第几名,前三带奖杯
- 新建比赛:默认 10 分钟后开始,时长点按钮,搜题号把题加进来自动编号、拖动排顺序
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-09 20:58:59 +08:00
xuyue and Claude Opus 5.5
033a245abb
feat(SQL 题): 增删改题除了第 1 组,其余测试数据可以一行都不改——用来抓学生多改(WHERE 写漏、写宽)
...
Deploy / deploy (push) Canceled after 0s
原来每组数据都必须有被标准答案改到的行,所以「这组里没有研发部,看学生会不会把别的部门也改了」
这种测试数据建不了。现在只有第 1 组(题面上给学生看的那组)还要求改到行;其余组一行都没改时
出题页写「一行都没改」、预览写「执行后所有表都没有变化」。删掉第 1 组、别的组顶上来时自动按
新位置重查。判题本来就不管这一条,不受影响。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-09 19:17:42 +08:00
xuyue and Claude Opus 5.5
25d3296410
feat(SQL 题): 增删改题的期望结果标出执行后变了的格子,删掉的行写清是哪几行
...
学生原来只能拿两张表逐格对,看不出要改的是哪几行。现在改过的格子、新插的行标黄,
删掉的行在表下面写「删掉了 2 行(id 是 2、3)」。按第一列配对,对不上就不标。
数据表和期望结果抽成一个组件,后台出题页的预览也用它。
题型判断统一走契约的 isSqlProblem()。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-09 18:59:15 +08:00
xuyue and Claude Opus 5.5
e01dabc6da
fix(题目列表): 亮色模式下「语法要求」标签用的是暗色模式的字色和描边
...
Deploy / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-09 18:26:38 +08:00
xuyue and Claude Opus 5.5
84bfb44c20
feat(题目列表): SQL 题混在一般题里看不出来,点进去才发现不是写 C——和画流程图一样挂「SQL」标签,「全部类型」里也能单独筛
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-09 16:51:42 +08:00
xuyue and Claude Opus 5.5
74af88046e
perf(题目列表): 切知识点、翻页有点卡——类型标签每个都让整页重算一遍样式,人数统计要扫整张提交索引
...
Deploy / deploy (push) Canceled after 0s
- 「画流程图 / 语法要求 / 有参考图」标签不再各自调 useDark():vueuse 每个实例都会重写
<html> 的 class、插一段禁用过渡的样式再强制整页重算,一页十几个标签就重算十几遍。
明暗两套色改走 CSS(html.dark)。每次切换 Vue 更新 46ms → 15ms、样式重算 24ms → 1.6ms
- 新索引 submission_public_problem_user_idx(problem_id, user_id, result,只含公开提交):
每页「做对 / 做过人数」原来要把以 user_id 打头的索引 11 万行扫一遍。
列表接口 19ms → 9ms,「最多人做对」排序 55ms → 26ms
- 第一次打开、没带筛选时,不再单独多数一次题目总数
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-09 12:52:38 +08:00
xuyue and Claude Opus 5.5
ed7752afbb
feat(题目列表): 学生自己挑题时只看得到一堆标签和提交数,不知道自己练到哪了——改成左栏知识点进度、顶上先说做到了什么
...
Deploy / deploy (push) Canceled after 0s
- 左栏是知识点(可切到主题)和自己的进度:做了一部分写 37/96 加进度条,全做对写「通关」,
一道没做对过的只写题数,不再是一整列 0/108
- 顶上一行:做对几道 · 这周 +n(或连续几周都有做对)· 离哪个成就最近 ·「有 n 道差一点」
(点开才列出来);新生引去「输出入门」;一言照旧在右边
- 每题最后一列是做对 / 做过的人数,代替提交数和按提交算的通过率(和题目页统计同一个口径)
- 「画流程图 / 语法要求 / 有参考图」挂在题目名后面,「全部类型」下拉单独筛这三类,
不再混在排序里;题目页的「代码要求」统一叫「语法要求」
- 「只看没做完」开关(默认关)、「随便来一道」(当前知识点里先挑没做对的简单 / 中等题)
- 画流程图的题,流程图评到 A / S 在状态列也打勾,和题单、课堂条一个口径
- 老师看不到状态列和个人进度;出题者筛选保留
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-09 12:31:49 +08:00
xuyue and Claude Opus 5.5
a8918b41b1
fix(题目统计): 「答案错误几乎都卡在第 1 个测试点」几乎每道题都弹,说了等于没说——答案错误最多时不再给提示
...
Deploy / deploy (push) Canceled after 0s
七成多的题错得最多的都是答案错误(快照 349 / 484),卡在第 1 个测试点过六成的也有 185 / 320 道,
两句提示对哪道题都一样。具体错在哪,每次提交的结果里已经有「题目里的例子 N 就错了」和三栏对照。
运行时错误、编译失败排第一时的提示保留。后端那条扫 info JSONB 数第 1 个点的查询一起删掉。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 12:21:00 +08:00
xuyue and Claude Opus 5.5
c22521fb61
fix(答案错误): 说明写「在例子 1 上就错了」,旁边测试点 1 是绿的,看着像写反了——改成「题目里的例子 1 就错了」
...
例子是题面样例,测试点是隐藏数据,两边都从 1 编号,只写「例子 1」分不开。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 12:18:06 +08:00
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
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
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
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
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
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
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
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
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
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
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
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