xuyue and Claude Opus 5.5
5c9d0ca501
feat(课堂看板): 「这节课」那排题号后面写上几点布置的,之后改题不变
...
Deploy / deploy (push) Canceled after 0s
class_lesson 加 created_at(0034,老数据用 updated_at 回填),「改」只动 updated_at;
清掉再布置算重新开始。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-13 10:21:39 +08:00
xuyue and Claude Opus 5.5
5c1f1d2bf8
feat(课堂看板): 看板重做——顶上当场填题号,一排题卡片点开看这道题错在哪,全班一张表按没交/卡住/在做排,点红格子弹出代码讲错误、← → 换人
...
Deploy / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-13 10:02:50 +08:00
xuyue and Claude Opus 5.5
0a4f528c44
feat(课堂看板): 看板接口给没做对的格子带上今天最后一次提交,按错法归堆、点开讲错误要用
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-13 10:02:50 +08:00
xuyue and Claude Opus 5.5
754a9d7caf
fix(提交详情): 代码不用再左右滚了——改成一栏到底,代码占满整宽在前、例子对比在后;交的几次横着排,← → 一次次翻
...
Deploy / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-13 01:17:42 +08:00
xuyue and Claude Opus 5.5
e923965f70
fix(提交详情): 「这道题交了几次」是竖着排的,翻上一次、下一次改用 ↑ ↓,和提交列表一样
...
Deploy / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-13 01:07:46 +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
4240a451e4
chore(站内信): 消息页、后台空壳页、两个接口和 message 表一起下线
...
Deploy / deploy (push) Canceled after 0s
历史上一共 6 条站内信(最后一条 2025-06),发信接口两代前端都没接过,后台页面只有一句
「未完待续」,OJ2 顶栏也没有入口。
0033 是 DROP TABLE,部署要显式放行:OJ2_ALLOW_DESTRUCTIVE=1 docker/deploy.sh,
或 CI 手工触发时勾 allow_destructive。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-13 00:51:12 +08:00
xuyue and Claude Opus 5.5
734f4aed05
fix(成就): 成就线的进度线不再从徽章中间透出来
...
Deploy / deploy (push) Canceled after 0s
徽章底色是半透明的稀有度色,压在线上面挡不住;底下垫一层卡片底色
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-13 00:32:37 +08:00
xuyue and Claude Opus 5.5
36f2a45c5e
fix(成就): 题单奖章名字不再被截成「物联网专业…」;没有班级时「快拿到了」横排占满整宽
...
- 奖章名最长 9 个字,竖排格子只放得下 4 个,改成图标 + 全名横排、放不下就换行
- 老师、自己注册的号没有班级就没有「本班」,原来「快拿到了」只占左半边、右边空着
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-13 00:31:03 +08:00
xuyue and Claude Opus 5.5
cbeb0737ef
feat(成就): 成就页改成「快拿到了 + 本班」加一条条成就线,不再是一墙灰卡
...
Deploy / deploy (push) Canceled after 0s
- 顶上「快拿到了」三个只说还差什么,旁边「本班」:最近谁拿到了什么、成就最多前五(自己不在就钉在底下)
- 38 个成就按指标收成一条条线、分五组,同一串几档排在一根进度线上,下一档标「差几」;
悬停看说明、哪天拿到、本班几人有、全站几人有
- 还没找到的隐藏成就只露问号;本班动态里也只说「彩蛋」,不漏名字
- 题单奖章并进「题单和比赛」那组;看别人的成就只有成就线
- 去掉「仅 X% 的人获得」(分母是全站历届账号)和完成度圆环
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-13 00:26:37 +08:00
xuyue and Claude Opus 5.5
85108df9d8
feat(成就): 下架三个拿不到的成就、理顺稀有度和图标;接口多给本班几人有和「本班」卡片
...
- 0032:下架六边形战士(判题机只剩 3 种语言)、坚持三天/一周(按天算基本拿不到);
不撞南墙改白银、屡败屡战改黄金;百发百中换 💯 、屡败屡战换 💪 ,不再和别的撞图标;
代码行数只算做对的、空行不算,并按新口径重算所有人;已经拿到的一个不收回
- 奖杯收藏家只数上架的成就(判题结算、补发重算、0032 存量一起改)
- GET /achievements:每个成就带全站几人有、本班几人有;看自己时带「本班」(最近拿到、成就最多前五、自己第几);
隐藏成就同一串拿到一档就整串亮出来;连续几周给「现在连着几周」而不是历史最长
- 删掉只有旧成就页在用的 /achievements/summary
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-13 00:26:37 +08:00
xuyue and Claude Opus 5.5
689d40b116
chore(顶栏): 注释里去掉已经没有的 /setting
...
Deploy / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-13 00:05:01 +08:00
xuyue and Claude Opus 5.5
e368ed3eca
feat(个人主页): 主页改成名片 + 两栏,做对的题按天带题名;设置并进主页,点头像换头像、点笔改签名
...
- 名片:头像、班级、签名、做对几道 / 本班第几 / 成就,底下一排四个时间(第一次提交、最近一次提交、距上次提交、学习天数)
- 做对的题按日期或按知识点,能搜;最上面一行是交过还没做对的
- 知识点本人和老师看得到;同学看多一张「你和他」
- 老师看学生:看他的智能分析 / 看他的提交 /「⋯」不计入排名、清空签名
- 换头像弹框:拖圆圈选一块,看领奖台和排名里多大,可退回名字的字
- 去掉「我的设置」页和下拉菜单里那一项;手机三个页签
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-13 00:03:37 +08:00
xuyue and Claude Opus 5.5
cbf5b9d922
feat(个人主页): 后端一个接口给齐主页要的东西:做对的题带题名和日期、四个时间、本班第几、成就,老师和本人多拿知识点和没做对的题
...
- GET /profiles/:username/overview:同学看拿不到知识点和没做对的题,多一份「你和他」
- DELETE /me/avatar:不用图片,退回名字的字
- 知识点地图抽成 knowledgeMapOf,老师看学生也能用
- 删掉没人用了的 /users/:id/metrics
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-13 00:03:37 +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
3ca3b42997
fix(排名): 老师点「本班」不再随手挑个交题最多的班,改成布置过作业的班、上次选的班,都没有就停在全部
...
Deploy / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-12 23:28:55 +08:00
xuyue and Claude Opus 5.5
e4abbc1645
feat(智能分析): 页面改成每节课一行,一眼看出哪道一次就对、哪道交了很多次、哪道还没做对
...
Deploy / deploy (push) Canceled after 0s
一年热力图、半年月度图、难度分布、时间活跃度这些对多数学生大半空白的图都去掉了;
右边是差一点的(接着做)、错在哪、知识点;老师看学生能 ‹ › 翻同班下一个人。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-12 23:20:34 +08:00
xuyue and Claude Opus 5.5
890e731a1c
feat(智能分析): 后端改成按「每节课」给数据,AI 小结跟着改,不再把交了好几次的题夸成做得好
...
GET /ai/report 一次给整页:每天分课上的题和自己练的,和班上中间那位比,差一点的、错在哪、
知识点;时间段改成 这周 / 这个月 / 这学期 / 全部。删了 /ai/detail、/ai/solved、
/ai/duration、/ai/heatmap、/ai/pinned,换成 /ai/analysis/latest。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-12 23:20:34 +08:00
xuyue and Claude Opus 5.5
69f8d89153
fix(智能分析): AI 报告不再把答案错误说成编译错误、不再编出真名,改成四段三百字的短评
...
Deploy / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-12 22:10:57 +08:00
xuyue and Claude Opus 5.5
3430028ea8
style(题目列表): 「全部类型」下拉里每种题型的说明改短
...
Deploy / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-12 22:04:00 +08:00
xuyue and Claude Opus 5.5
28a09831b5
feat(排名): 个性签名直接写在名单上,不用再指着小引号才看得到
...
- 桌面:写了签名的同学名字下面多一行,把签名写出来(一行二十来个字,长的指上去看全文);两栏按高度对半分
- 手机:签名从名字后面(只剩三五个字)挪到名字下面一行
- 自己还没写的,名单里自己那行有「写一句个性签名」,和「你」卡点开的是同一个框
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-12 22:02:15 +08:00
xuyue and Claude Opus 5.5
6e946c99fb
feat(出题): 参考流程图改用画布画,「让学生自己画」不再要参考图
...
Deploy / deploy (push) Canceled after 0s
- 学生画的图现在按例子和测试数据评(拼成程序跑),参考图用不上了:「让学生自己画」
只剩一句说明,保存前改成检查有没有例子;「给学生的提示」那一栏去掉(学生从来看不到,
16 道题也都没填)
- 「给学生看一张参考流程图」改用学生画图的同一个编辑器,存结构树(problem.flowchart_data,
原来是死列),Mermaid 由后端照它生成,题面里的图和学生交的图同一套形状
- 「AI 照 Python 答案画一张」改成出结构树,直接摆在画布上接着改;for 循环画成
计数变量 + 当型循环
- 老题手写的 Mermaid 照旧给代码框,旁边「改用画布画」
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-12 21:39:50 +08:00
xuyue and Claude Opus 5.5
b9ece7d38f
feat(统计): 流程图统计列出「最常见的错」,不再显示新评法下没意义的平均分
...
新评法(走例子)没有四项分、几乎没有评语,雷达图、各项平均分、词云都拼不出来,
页面上只剩一个等级圆环。改成:
- 「最常见的错」:每张图第一组没走对的原因原样数一下(「『一级果』多输出了一行
『一级果』2 张」),最多 8 条;全是新数据时放在等级分布旁边,新老混着时顶替词云
- 只有新数据时「每人最好的一次」铺满一行、分几栏
- 去掉「平均分」:新评法的分数只是走对的比例,看它不如看「拿到 A / S」;
「每人最好的一次」也只写等级
老数据(2026-10 之前)照旧是四项分和词云。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-12 21:31:18 +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
6b7d87d677
chore(流程图): 删掉前端两周前就不再调的 flowchart/current、history 两个接口
...
9-28 题目页重构后结果页签只用 scores + GET /flowcharts/:id,这两个留着是给上线那一刻
还开着旧页面的浏览器,现在可以删了,契约里对应的两份形状一起删。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-12 21:25:51 +08:00
xuyue and Claude Opus 5.5
e4905fcec1
fix(流程图): AI 点评不再让模型在脑子里走图——拼成程序在判题机上跑,同一张图两次结果一样
...
Deploy / deploy (push) Canceled after 0s
上一版让模型拿例子在图上「走一遍」,真模型一试:同一张错图两次一次全对一次 C
(看得到应该输出时它会照抄),365 圈的循环多算一圈也判对。现在:
- 结构照学生的结构树拼,AI 只把每个框里的字翻成一句 Python,改不了结构、补不了漏的步骤
- 拼好的程序在本站判题机上跑例子和测试数据,逐行比输出:空格、标点、全角半角不算错,
题目输出里固定的提示文字(「较大的数是: 」)框里没写也不算错
- 走过哪些框、每行是哪个框输出的在程序里记下来,画布照旧亮路径、标出错的框
- 没走对的原因由代码说:多输出了一行「一级果」、输出的是 38.16 应该是 37.78、
「输入有无瑕疵 f」读到的数据不对、走不到结束(死循环)
- 结构树挪进契约(flowchart-doc.ts),前端画图、后端评分用同一份
用真模型(deepseek-v4-flash)对 9 张图各评两次,结果两次一致、对错都判对,每张一秒左右。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-12 21:22:15 +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
ce26925e79
style(提交列表): 右栏的代码字太小,调到和题目页编辑器一样的 20px
...
Deploy / deploy (push) Canceled after 0s
行高跟着从 30 调到 32,标红的报错行仍和行号逐行对齐。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-12 20:22:39 +08:00
xuyue and Claude Opus 5.5
d2b8a1ce4a
refactor(编辑器): 去掉 vue-codemirror,代码编辑器、协作编辑器、教程编辑器改用自己的薄外壳
...
三个编辑器只用到它的 v-model、extensions、只读、缩进、占位文字、尺寸和 ready,
shared/components/CodeMirror.vue 照它的做法写了这几样,功能和手感不变:
- 它默认带的 basicSetup(行号、撤销、折叠、搜索、括号……)照样带上
- 各项配置的先后顺序和它一致;外部改代码仍是一次不带 userEvent 的 changes,
提交时的编辑过程统计不受影响
- @codemirror/commands 现在直接 import,显式声明进依赖
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-12 20:22:39 +08:00
xuyue and Claude Opus 5.5
6216e1cf22
chore(依赖): 删掉三个没用到的 vue-flow 插件,代码高亮全站只注册一份
...
- @vue-flow/minimap、node-resizer、node-toolbar 一处引用都没有
- App.vue 给 n-code 另建了一份 highlight.js,还注册着判题机早就不认的 Java、
JavaScript、Go;改成空闲时加载 shared/highlight.ts 那份。62 条这三种语言的
历史提交改为不上色显示
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-12 20:22:32 +08:00
xuyue and Claude Opus 5.5
ea487bdc7b
fix(题面): 图片点不开大图,而且半栏放不下的图会被压扁
...
Deploy / deploy (push) Canceled after 0s
换掉 md-editor 时把它自带的点图放大一起丢了;富文本存的图片带行内
style="width; height",宽被 max-width 压窄时高还是原值,height: auto 盖不住行内样式。
- 正文图片点一下全屏看大图,点任意处或按 Esc 关闭;包在链接里的图照旧走链接
- 图片高度用 !important 跟着宽度走,比例不再变形
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-12 18:16:36 +08:00
xuyue and Claude Opus 5.5
0e1784ba26
fix(自学): 练一练的填空框、拖拽卡片、连线项都没有边框,填空题看不出空在哪
...
Deploy / deploy (push) Canceled after 0s
填空、排序、找错、连线、分组、输出预测六种题的边框和底色写的是 --n-border-color、
--n-color、--n-text-color-3。这几个变量只在 Naive 组件内部才有,自学重设计把外层换成
自己的卡片之后就全没了:边框整个消失,填空题只剩一个看不见的输入框。
换成 learn.css 里自学自己的变量,补了一个可操作控件用的深一档边框和次要文字色,
亮暗两套都有。代码字体原来只写了 Monaco,机房 Windows 没有,换成 --learn-code-font。
顺手把填空框的上下内边距去掉,几行之间不再贴在一起。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-12 14:07:04 +08:00
xuyue and Claude Opus 5.5
e6c02dce33
chore(依赖): 前后端依赖升到最新,补上机房 Chrome 105 缺的两个 polyfill
...
几处随升级改的:
- VueUse 15 的 useNow 不再收 interval,不传 scheduler 默认逐帧刷新。比赛列表(1 秒)
和后台建比赛(15 秒)改成用 useIntervalFn 当调度器,频率不变。
- 重新探测 modernPolyfills:mermaid 12 用了 Object.groupBy(Chrome 117),core-js 新数据
把 URL.parse(Chrome 126)也算进来了,不补的话机房老机器上静默报 TypeError。清单 52 项。
- vue-router 5.4 弃用了导航守卫里的 next(),全局守卫改成返回值。
- web-tree-sitter 0.27:AST 规则在 dev 和编译后的二进制里各跑过一遍,判过、判不过都对;
jieba 2.0.4 原生模块在仓库外起二进制能正常分词。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-12 14:03:34 +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
cd75d42a64
feat(年度趋势): 后台年度趋势改成「这届和往届比」,比往届差的题排在最前面
...
Deploy / deploy (push) Canceled after 0s
- 选一届和往届(或另一届)比,两边都至少 20 人做过的题才比;分比往届差 / 差不多 / 比往届好三组,一题一根哑铃条
- 侧栏「历年概况」改回「年度趋势」,地址换成 /admin/problem/trend
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-12 13:10:18 +08:00
xuyue and Claude Opus 5.5
318ffac90f
feat(年度趋势): 历年概况那张表只有一堆数、看不出趋势;改成按届比,这届和往届在同一批题上逐题比一次就对
...
- 新接口 /problem-analytics/grades:每道题在各届(班号前两位)的人数和一次就对人数
- 删掉 /problem-analytics/yearly 和只给它用的学年时间函数
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-12 13:10:18 +08:00
xuyue and Claude Opus 5.5
0980ea858a
feat(卡点分析): 后台卡点分析按知识点 → 题 → 一道题重做,年度趋势改名历年概况只留逐学年总表
...
Deploy / deploy (push) Canceled after 0s
- 选班后只列这个班课上布置过的题,右栏换成「交了几次才对」和交得最多的人
- 历年概况可以导出表格;旧地址 top_ac_trend 跳到新页面
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-12 12:55:49 +08:00
xuyue and Claude Opus 5.5
b2c802174c
feat(卡点分析): 「卡住」原来数的是错过一次的人,做的人多的题全排在前面;改成看一次就对、交几次才对,能按班级和时间段筛
...
- 卡点按「人 × 题」算:一次就对、做对之前交了几次、还没做对几人,带知识点;一道题给每个人的情况、错在哪、全站历年一次就对
- 年度趋势换成历年概况:学年按 9 月切(原来按自然年),进行中的学年和去年同期并排
- 删掉旧的 /problem-analytics/stuck 全站前 40 和 /ac-trend
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-12 12:55:49 +08:00
xuyue and Claude Opus 5.5
9e23d28f62
fix(自学): 教程代码块输入框空着就运行,报错说成「input() 用的次数超过了输入的行数」
...
Deploy / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-12 10:55:45 +08:00
xuyue and Claude Opus 5.5
401c1bef7c
fix(自学): 上一课 / 下一课下面空出一大截;学习目标里的加粗显示成两对星号
...
Deploy / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-12 10:41:24 +08:00
xuyue and Claude Opus 5.5
845e41c060
feat(自学): 自学重做——首页课程地图、读一课按项目分目录、代码块就地运行、学完给题做
...
Deploy / deploy (push) Canceled after 0s
- 顶栏「自学」进新的自学首页 /learn:接着学(按服务端记录,不再串到上一个学生)+ 按项目分组的课程地图
- 读一课:左边目录按项目折叠,正文加宽,右边本课大纲带练一练标记;去掉了不能运行的示例代码栏
- 正文里的代码块能改能运行,报错用题目页那套中文解释;读输入的代码出输入框
- 课末:练一练做到几道 → 学完了 → 老师挑的几道题(必会标出来)→ 下一课
- 练一练统一成绿色提交、结果一行字;手机版目录从底部弹出
- 后台:教程列表按项目分组拖动排序,编辑页左写右看、练一练插到光标处、挑相关题;
自学情况改成方块格 + 还没打开过的名单
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-12 09:40:34 +08:00
xuyue and Claude Opus 5.5
11194543a3
feat(自学): 教程有了「所属项目」和课末的相关题,正文里的代码能直接运行
...
- 0031 迁移:tutorial 加 project 列(从正文「所属项目:」回填),新表 tutorial_problem
挂每课的相关题(两头 CASCADE)
- 学完一课 = 练一练全对(契约 isLessonDone),不再按停留满 3 分钟算
- /tutorials/:id 带相关题和做对没有,/tutorials/:id/exercises 带每道做对没有
- /trial-runs 收 tutorialId:教程里的代码块走同一台判题机跑一组
- 后台:教程列表带练一练 / 相关题数 / 打开过的人,拖动排序、项目改名、挑题候选(必会题在前)
- 自学情况换成学生 × 课的方块格(/learn-analytics/board),默认班和排名页同一套猜法
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-12 09:40:34 +08:00
xuyue and Claude Opus 5.5
6d1bfc522d
fix(题目列表): 知识点一多后面就被截成「选…」「循环…」
...
Deploy / deploy (push) Canceled after 0s
知识点一栏从 190px 加到 260px,挂 4 个以内的都能完整显示;更多的仍截断,鼠标停上去看全部。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-10 14:48:28 +08:00
xuyue and Claude Opus 5.5
cdd69764c4
fix(题目列表): 同样两个知识点,有的题写「取余 · 选择结构」,有的写「选择结构 · 取余」
...
Deploy / deploy (push) Canceled after 0s
知识点一栏改成按左栏的顺序(题数多的在前)排,不再跟着标签挂上去的先后走。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-10 14:42:48 +08:00
xuyue and Claude Opus 5.5
afb52ce0f8
feat(题目列表): C 语言课的题在题目名后挂「C语言」,不再混在知识点里
...
Deploy / deploy (push) Canceled after 0s
「C语言」标签已改成主题分类,像「必会」一样挂在题目名后告诉学生这是 C 语言课专门用的题。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-10 14:39:39 +08:00
xuyue and Claude Opus 5.5
da30ae1875
style(比赛/题单/班级PK/统计): 图例和规则说明跟排名页一样多,读起来像说明书
...
Deploy / deploy (push) Canceled after 0s
比赛排名表底下的图例和用时规则、比赛题目页的「做对人数随时更新」和计分规则、
老师比赛班级页的「学生看不到这一页 · 15 秒刷新一次」和键盘提示;
题单详情的「加入以后…才算进度」「做对一道会自动回到这里」、题单列表的
「老师现在布置的」「加入过的在前」、老师题单进度表底部的颜色说明;
班级 PK 里「格子里是…」「条 = …」「皇冠 = …」「一根柱一档…」「这学期,最近 N 周」、
只有一个班做过的题那行、「根据上面这些数字写,仅供参考」;
统计里「没选班级,先按班级列出来…」「点方块在新页面打开这一条」;
流程图节点库的「拖拽节点到画布中」,都拿掉。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-10 14:17:42 +08:00
xuyue and Claude Opus 5.5
c2e05d423f
style(排名): 到处是图例和规则说明,读起来像说明书
...
卡片头上那排图例(做出的题数 / 你 / 前一名 / 后一名 / 你们班 / 进步最大)、
右上角「9月1日起 · 每道题按第一次做对算 · ↑↓ 比周一」、副标题里的
「一样多的,先做到的在前 · 只列前面 N 名」、班级对抗的「全服 · 点班名看详情」、
各卡片标题后的「每周日晚上 · 越高越好」「下周一清零」、签名框下的提示、
班级详情抽屉里几行小字都拿掉。前一名 / 后一名的颜色靠「你」卡里同色标签认。
老师卡里「不计入排名的人」只在本班且真拿掉过人时出现。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-10 14:10:54 +08:00
xuyue and Claude Opus 5.5
aba3767fc1
fix(排名): 题数一样时一列灰色短条像没加载完的占位块,看不出是什么
...
Deploy / deploy (push) Canceled after 0s
条后面加一道淡色的满宽底槽,读得出「离满格还差多少」;桌面图例补上「做出的题数」,
老师也看得到。手机上条本来就是整行底色,不动。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-10 14:07:31 +08:00
xuyue and Claude Opus 5.5
eaab224ba8
feat(出题): 测试数据最多 20 组,几百组的题提交详情截图截不下
...
上传 zip 超过 20 组直接报错(编程题、SQL 题都算);出题页加满 20 组后「加一组」
「AI 想几组输入」变灰,导入超过 20 组的 zip 在浏览器里就拦下,改老题超了不让保存。
上限在契约 TEST_CASE_MAX_CASES。线上超过 20 组的题已经手工缩到 20 组。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-10 14:07:30 +08:00
xuyue and Claude Opus 5.5
ab757553d4
style(首页): 「更多」不再半透明
...
Deploy / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-10 13:09:02 +08:00
xuyue and Claude Opus 5.5
bb1585942a
fix(顶栏): 暗色下个人菜单里「暗色」那一行是黑字,看不清;指上去也没有高亮
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-10 13:09:02 +08:00
xuyue and Claude Opus 5.5
8b8a9d89f0
fix(排名): 桌面上条太短,压在上面的「前一名」「进步最大」把条整个盖住;标签从条上拿掉,进步最大改成涨跌那一格的橙色徽章
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-10 13:09:02 +08:00
xuyue and Claude Opus 5.5
1330fc49af
fix(排名): 「进步最大」的人条长时,条上只剩一块白、标签也看不见
...
Deploy / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-10 13:00:56 +08:00
xuyue and Claude Opus 5.5
367cfc9d5d
feat(班级下拉): 全站的班级下拉按年级分组,新年级在上,组里按班号排
...
Deploy / deploy (push) Canceled after 0s
登录框、提交列表、数据统计、排名、课堂看板、题单班级视图、班级 PK 七处统一走
groupClassOptions。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-10 12:54:26 +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
45d79ed366
feat(排名): 全服 100 名以外不报具体名次,写「100 名以外」并提示再做对几道进前 100;赛道每行加高,条不再被挤成一小截
...
Deploy / deploy (push) Canceled after 0s
- 全服排在 100 名以外:「你」卡和下面的小名次写「100 名以外」,不给前一名、后一名和名次走势,
改成「再做对 N 道就进前 100」;名单上没有你这一行,图例和副标题也不再提「你」
- 赛道每行从 18px 加到 28px,头像、字、条都大一号(不必刻意塞进机房一屏);
「前一名 / 后一名 / 进步最大」挂到条的末端,不再单占一列把条挤短;领奖台台阶恢复原来的高度
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-10 10:45:17 +08:00
xuyue and Claude Opus 5.5
2553c6ddfe
feat(排名): 个性签名挂到排名上,领奖台上每人一句、「你」卡里就地改;全服排名只列到第 100 名,展开不再卡死
...
- 领奖台:头像旁边一个签名气泡(手机在头像上面),只露两行,长的指上去看全文
- 「你」卡:自己的签名带「改」,就地改不用跳设置页;没写的提示「写一句个性签名」;前一名、后一名名字下面带他们的签名
- 赛道:桌面有签名的名字后面一个引号,指上去看;手机直接写在名字后面
- 个性签名以后限 30 个字(老的长签名不动,榜上只露两行)
- 老师在名单「⋯」或台上气泡的「×」能清空不合适的签名(DELETE /rankings/mood/:userId)
- 全服名单最多列到第 100 名:原来展开会一次摊开一千五百多人把页面卡死
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-10 09:52:06 +08:00
xuyue
540d88355c
update
Deploy / deploy (push) Canceled after 0s
2026-10-10 09:33:52 +08:00
xuyue and Claude Opus 5.5
ce0093fc29
feat(班级PK): 班级 PK 页重做:两个班看比分和每道题谁赢,三个班以上看题目对照格,学生也能比
...
Deploy / deploy (push) Canceled after 0s
- 两个班:大比分 + 一次就对副比分,每道题左右两根条、差得最多的在上,下面每周人均和全班分布
- 三个班以上:一行一道题、一格一个班,越深做对的人越多,皇冠是这道做得最好的班;右边谁领先的题多和赛跑
- 学生自己的班标「你们班」,输掉的题写「再 N 人做对就打平」;AI 分析只给老师,直接在页面里出
- 去掉综合分、雷达图、十张柱状图;手机版按稿改成上下排和页签
- 排名页、班级对抗、班级详情的入口对登录的人都开放,带上当前的班
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-10 09:06:21 +08:00
xuyue and Claude Opus 5.5
d83804b814
feat(班级PK): 班级 PK 只比两个班都布置过的同一批题,按做对的人占几成分输赢;登录了就能看,AI 分析由服务端现算
...
- 新接口 GET /rankings/pk:一个班过半的人交过算布置过,至少两个班布置过的题才比;
显示的整数百分比一样算平;口径和排名页一样(这学期、比赛不算、不计入排名的人不算)
- 不给班就用自己的班(老师用默认的班),只给一个班就配同年级一起布置过的题最多的班,
一样多挑班级对抗排得更前的
- 去掉 POST /classes/comparison(原来不登录也能查,综合分、四分位数、优秀率都按所选几个班算)
- /ai/class-pk-analysis 只收班号和时间段,数字和页面上的是同一份
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-10 09:06:21 +08:00
xuyue and Claude Opus 5.5
3c6e4a1e7c
feat(排名): 班级详情改成右侧抽屉、老师能在里面直接出 AI 分析;排名页加上个人智能分析入口;用词改成前一名 / 后一名
...
Deploy / deploy (push) Canceled after 0s
- 班级对抗点班名打开班级详情:人均做对和年级比、中间那位同学、做对过的人、全班分布点阵、
每周人均新做对;去掉四分位数、标准差、综合分。老师多看到「要多关心的同学」(这学期做对不到
3 道)和 AI 分析,报告直接在抽屉里出
- 班级 AI 分析只传班号,数字由服务端按抽屉同一套现算(services/ranking.ts),报告和抽屉对得上
- 学生「你」那张卡底下加「看我的智能分析」;老师名单「⋯」加「看他的智能分析」;班级对抗右上角
「班级 PK ›」
- 「要追的 / 追你 / 冲得最猛 / 对手」会被学生读歪,改成「前一名 / 后一名 / 进步最大」,
对前后一名只说「比你早 / 晚几秒做到几道」
- 老师打开排名页默认看全部,班级下拉框第一项「全部」,选了班就切到本班
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-10 07:58:52 +08:00
xuyue and Claude Opus 5.5
2cf2d4260a
fix(排名): 手机上的排名不再是四屏长的一栏,条变成每行底色、只列你附近几行,下面四块收成页签
...
Deploy / deploy (push) Canceled after 0s
- 条形改成整行的底色:窄屏上原来只剩 30px 宽的条看不出谁多谁少
- 默认只列领奖台下的前 5 行和你上下各 2 行,「看全班 39 人」点开;本年级 / 全服折起来的段点开再取全量
- 「你」那张卡:对手的说明换到名字下面一行,不再被截断
- 范围、时间两组开关各占满一行;班级对抗、名次走势、这周本班、每周冠军收成一张页签卡
- 有「追你」标签的那行数字不再错位
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-10 07:34:08 +08:00
xuyue and Claude Opus 5.5
1c6e2b9d82
feat(排名): 排名页重做成领奖台加全班赛道,一眼看出自己第几、该追谁、谁在追自己
...
Deploy / deploy (push) Canceled after 0s
- 一张榜两个开关:本班 / 本年级 / 全服 × 这周 / 这学期 / 全部,默认本班 · 这学期。
原来最大那张全服 Top100 里,这学期在用的 25 级学生一个都进不去
- 做对一样多的不再按「提交少的在前」排,改成先做到的在前;名次旁边写比周一升降了几名
- 「你」那张卡:第几名、再做对几道上领奖台,要追的人早你几秒、追你的人晚你几秒
- 本年级 / 全服只列前面一段和你附近一段,中间折起来,点开再看
- 班级对抗按人均做对比,另有我和对手的名次走势、这周本班、每周冠军
- 老师不上榜,选班看;每行「⋯」能把怀疑抄代码的学生设成不计入排名(新增 user.rank_hidden_at,
首页周榜同样不算他),随时能恢复
- 去掉全服 Top10、日活两张图、在线人数和班级详情弹框里的统计词,以及它们背后的旧接口
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-10 07:26:15 +08:00
xuyue and Claude Opus 5.5
0cee4ef779
fix(名字): 比赛成绩、全班情况、看板、题单、统计里的名字不再用真名,一律和排行榜一样显示 ks241XXX;导出成绩去掉姓名列
...
Deploy / deploy (push) Canceled after 0s
两个写法不同的 UserName 合成 shared/components/UserName.vue 一个。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-10 06:44:42 +08:00
xuyue and Claude Opus 5.5
2bb74652a0
style(比赛): 有密码的比赛前面那个彩色盾牌锁换成和全站一样的细线灰锁,放到比赛名后面
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-10 06:44:42 +08:00
xuyue and Claude Opus 5.5
0e68c434fc
fix(题单): 奖章阶梯下一个奖章的金圈上沿被切掉;「总分」换成「做对几道」后漏发的奖章补上
...
Deploy / deploy (push) Canceled after 0s
- 阶梯外层为了窄屏横向滚动设了 overflow-x,纵向也跟着被裁,画在图标外的金圈上沿没了
- 0026 只改了奖章条件没按新条件补发:玩家国度每题 5 / 10 分,题数够了、总分不够的人
没拿到「成分复杂」,页面还显示「再做对 1 道」。0029 按现在的条件只补不收(按 9-29 备份
只有 1 人;其余两枚换算前后等价,也没有人会因新条件被收回)。排在删列 0028 之后,
因为 0028 可能已经在线上执行过
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-09 22:24:18 +08:00
xuyue and Claude Opus 5.5
d6c94fe4c4
refactor(题单): 删掉不再用的难度、状态、分数、提示、总分、百分比几列和 problemset_submission 表
...
Deploy / deploy (push) Canceled after 0s
退役第二步(第一步 0027 已在服务器和机房上线)。破坏性迁移,部署要手工放行。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-09 22:13:14 +08:00
xuyue and Claude Opus 5.5
646c57c748
refactor(题单): 难度、状态、分数、提示、总分、百分比和 problemset_submission 表不再读写,先补默认值、下一步再删
...
Deploy / deploy (push) Canceled after 0s
机房和服务器共用一个库、不一定同时升级,所以分两步退役:0027 只给还非空的几列补默认值,
新代码插行不用再填、没升级的那边照旧能跑;两个站点都换上新代码后,再单独一条迁移删列删表
(要手工放行破坏性迁移,语句写在 0027 的注释里)。
进度算法随之去掉分数和百分比,判题记进度不再往 problemset_submission 写一行(从来没人读)。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-09 22:08:15 +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
8c53e28dcb
feat(题单): 「截止时间」改成「布置期」,布置期内没加入的人也藏旧代码;老师能看全班情况,后台一次加好几道题
...
- 布置期(列名仍是 end_time,机房共库不改名)+ 新列 assigned_at:布置期内题单里这几道题,
学生在布置开始之前交的代码先藏起来,不管加没加入,堵住「先抄再加入」;做对或到期放出来,不拦做题
- 「总分达到 N」奖章换成「做对 N 道」,草稿并进「不公开」(0026)
- /problem-sets 带布置期、必做题数、奖章获得时间;题目带做对时刻、错几次、旧代码藏着没有
- 新增 /problem-sets/:id/class-view(老师看一个班:真名 × 每题,加入前就做对过)、/problem-sets/locks
- 后台:批量加题、拖动排序、切必做;去掉状态、难度、分数、提示和单独的进度页
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-09 22:01:39 +08:00
xuyue
2224478294
fix
Deploy / deploy (push) Canceled after 0s
2026-10-09 21:35:34 +08:00
xuyue and Claude Opus 5.5
dd10e64b38
style(出题页): 左边写的地方放大、右边「学生看到的样子」缩小,右边能收起来专心写
...
Deploy / deploy (push) Canceled after 0s
编程题、SQL 题两张出题页一起改:两栏 3 : 2,右栏头上「收起 ›」,收起后剩一条竖着的「学生看到的样子」点了再展开;收没收记在本机
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-09 21:03:50 +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
b94e028ff4
feat(比赛): 榜单一次给全,带名次变化和每题谁最先做对;期中、期末考试中学生看不到排名;老师能看全班情况
...
- GET /contests/:id/scoreboard 代替 /rank:整张榜、5 分钟前的名次、每题做对 / 做过人数和学生里最先做对的人(不再用 is_first_ac,老师赛中试做会占掉它)
- 期中、期末进行中:学生只拿到自己那一行,人数清零、「全班最先」也不给,考完一起公布
- GET /contests/:id/class-view(老师):真名、每人最后一次交、没进来的人 —— 比赛不绑班,来了一半以上的班才算这场的班
- 比赛列表带题数、参赛人数、我的名次和做对数,能筛「我参加过的」「期中 · 期末」
- PUT /admin/contests/:id/problems/order:比赛题按顺序重编 1、2、3,比赛结束后不让动
- 后台「审核」列表接口去掉,并进前台老师的成绩页;「看过了」的写接口留着
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-09 20:58:59 +08:00
xuyue and Claude Opus 5.5
4ef2794552
fix(后台): 出题页读回来的测试数据每组多一行空白;导入大包后原来的例子丢了
...
Deploy / deploy (push) Canceled after 0s
- 测试点文件末尾的换行读回来时去掉(上传时补回去),比对改没改过也按去掉后的比,没改的题不会白白重传
- 导入超过 100 组的 zip 时先把例子拿下来再切成「不展开」,例子不再丢
- 「不展开」时保存栏改说「加一个例子」;刚导入还没保存时不给「下载 zip」(下到的是库里的旧数据)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-09 20:14:36 +08:00
xuyue and Claude Opus 5.5
ba5b9ada0e
feat(后台): 编程题出题页重做——左边写,右边是学生看到的样子;例子和测试数据的输出都由标准答案跑出来,改老题能直接看、改测试数据
...
- 例子就是测试数据里勾了「当例子」的几组,不再手抄输出;老题的例子不在测试数据里的补到最后
- 改了答案,输出变了的那组标黄、写清原来存的是什么;答案在某组上报错就挡住保存
- 没存标准答案的老题输出手写;太大的测试数据(>100 组或单文件 >32KB)只能导入 / 下载 zip
- 预制代码只写学生看得到的那段,前后藏起来的代码收进折叠;语法要求先拿标准答案自测
- 流程图两个互斥开关改成三选一;时间 / 内存限制能改了;草稿只给新建页
- 后端:读回测试点原文、语法要求自测、AI 想测试输入三个接口
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-09 20:07:34 +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
2cb39fd96b
feat(后台): SQL 题有了自己的出题页——左边写,右边就是学生看到的样子,改答案、改数据马上重跑
...
- 「新建题目」先选编程题还是 SQL 题,选了就不能改;编辑时按题目本身进对应的页
- SQL 出题页(设计稿「SQL 出题页」方案 B):测试数据一组一行,改完自动重跑,
跑不通的用中文说原因;保存时才打包上传测试点,不用再手动「预览」「上传」
- 新建时存草稿,误关页面不丢
- 编程题出题页去掉 SQL 那一堆分支(以前勾上 SQL 会静默清掉语法要求和流程图)
- 题目列表能按题型筛,SQL 题标题后面挂标签
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-09 18:59:15 +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
fcf63c2ecb
fix(课堂看板): 作业里有 SQL 题就布置不上去(报「不能用 C 交」),也没法布置一节 SQL 课
...
- 布置作业的语言加上 SQL,数据库课整节选 SQL
- C / Python 的作业里可以夹 SQL 题:SQL 题只收 SQL,不受作业语言限制,交对 SQL 就算做完
(学生首页课堂条、看板格子、班里做了几个人三处一起改)
- 看板点 SQL 题的格子,提交列表按 SQL 筛,不再是一片空白;提交列表「这节课」遇到夹了
SQL 题的作业不再按 C 筛
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-09 18:18:10 +08:00
xuyue and Claude Opus 5.5
98dfcc1e7e
fix(题目列表): 「随便来一道」常抽到用自己的语言做不了的题,老师那边「只看没做完」开了看不出藏了什么
...
Deploy / deploy (push) Canceled after 0s
- 随便来一道:按学生在编辑器里上次用的语言挑(没用过按 Python),C 学生不再抽到 Python 专用题和 SQL 题,Python 学生不再抽到 SQL 题;选了 SQL 知识点或 SQL 类型才从 SQL 题里抽。也跟着「全部类型」的筛选走
- 老师那一版去掉「只看没做完」:没有状态列,开了只是题少了
- 题目页「相似题目」:流程图评到 A / S 的题也算做对,不再推荐,和列表打勾一个口径
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-09 16:56:34 +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
e958d69258
fix(题目列表): 连着快点几个知识点,列表偶尔停在前一个知识点的题上
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-09 16:49:09 +08:00
xuyue and Claude Opus 5.5
50660abf11
fix(题目列表): 切了几个知识点再按后退,地址回到了全部题目、页面还停在上一个知识点
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-09 16:49:09 +08:00
xuyue and Claude Opus 5.5
c3927d522c
fix(题目列表): 新生和没登录的人点「随便来一道」,每次都是同一道题
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-09 16:49:09 +08:00
xuyue and Claude Opus 5.5
8f21f15c43
feat(提交列表): 同一分钟里连交好几次分不清先后——每行的提交时间带上秒
...
Deploy / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-09 15:31:43 +08:00
xuyue and Claude Opus 5.5
b121c2d0ee
style(一言): 短句也要点一下弹出一模一样的全文——只有两行放不下的才弹,而且是鼠标移上去就弹
...
Deploy / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-09 15:27:27 +08:00
xuyue and Claude Opus 5.5
43ca3c34f1
style(一言): 句子只有一行,稍长一点就被截掉——改成最多两行,出处跟在第二行末尾靠右
...
Deploy / deploy (push) Canceled after 0s
短句一行时出处就在这一行右边;超过两行截断的是句子,出处始终露在外面。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-09 15:21:42 +08:00
xuyue and Claude Opus 5.5
adea781b8e
fix(一言): 句子下面多挂了个「· 游戏」「· 动画」的分类,看着啰嗦——不显示分类;本机不用再配 env 就能读到一言数据集
...
Deploy / deploy (push) Canceled after 0s
- 出处只写「—— 谁《出处》」。接口里的分类还在,只用来判断出处要不要加书名号
- HITOKOTO_DIRECTORY 默认值改成仓库旁边的 ../sentences-bundle,.env.example 里那几行撤掉。
线上不受影响:镜像里 Dockerfile 写死了 /data/hitokoto
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-09 15:14:03 +08:00
xuyue and Claude Opus 5.5
c7a8e05385
feat(一言): 一言挤在角落里,出处被截成「来自 Structure and Interpretatio…」、不知道点一下能换——改成引号 + 句子 + 「—— 谁《出处》· 分类」+ 换一句按钮
...
设计稿「一言重设计」A 版:
- 句子一行,长句(数据集 p90 44 字、最长 255 字)截断,点句子弹出全文
- 出处写成「雷电将军《原神》· 游戏」:接口多下发 fromWho 和分类名,「佚名」「网络」这类充数的出处不写
- 「换一句」是个看得见的圆按钮,换的时候转一圈
- 契约 quoteSchema 从 string | Record 收成定形对象
- .env.example 说明本机怎么把 HITOKOTO_DIRECTORY 指到 sentences-bundle(不指就一直是内置的三句)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-09 14:19:55 +08:00
xuyue and Claude Opus 5.5
dab53c9098
fix(题目列表): 筛空了只说「没有符合条件的题」,点「清空筛选」连左边的知识点一起清掉——说清楚是哪个条件,每个条件一个按钮只去掉它
...
例如「『函数定义』里没有『画流程图』的题」+「看全部类型」;几个条件一起时每个条件各一个按钮
(看全部类型 / 看全部难度 / 看所有出题者 / 清掉搜索 / 关掉只看没做完)。
「你都做对了」只在「只看没做完」是唯一条件时才说,带着别的筛选空了不再误报。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-09 13:10:54 +08:00
xuyue and Claude Opus 5.5
99d3d99128
fix(题目列表): 「全部类型」里 0 道的类型还能点,点了只得到一个空列表——0 道的置灰不能点
...
已经选中的那一项除外:选了「画流程图」再切到没有这类题的知识点,它仍显示为选中,好让人看出列表为什么空。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-09 13:08:30 +08:00
xuyue and Claude Opus 5.5
9cc7f0f60c
fix(题目列表): 左边换了知识点,「全部类型」下拉里还是全站的 13 / 13 / 14 道,看着像没生效——题数跟着当前知识点和筛选走
...
「全部类型」本身也带上题数。手机「筛选」里的类型下拉同样带数。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-09 13:06:43 +08:00
xuyue and Claude Opus 5.5
e852bf4498
fix(题目列表): 排序里多了个用不上的「按题号」,原来的最早创建、最多 / 最少提交、通过都没了——换回原来那一套
...
Deploy / deploy (push) Canceled after 0s
最新创建 / 最早创建 / 最多人做过 / 最少人做过 / 最多人做对 / 最少人做对。排序值和原来一样,
旧链接照样能用;「最多 / 最少」改成按人数,和最后一列「做对 / 做过」对得上。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-09 12:58:26 +08:00
xuyue and Claude Opus 5.5
97426f0895
fix(题目列表): 选了知识点后题目改成按题号排,和平时看惯的「最新的在前」不一样——默认一律按最新创建
...
排序下拉固定三项:最新创建(默认)/ 按题号 / 最多人做对。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-09 12:57:14 +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