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
xuyue and Claude Opus 5.5
1ba8928d41
feat(课堂看板): 「请假隐藏」不会用——改成班级旁一个「请假」按钮勾名单,请假的人变灰排到最后、今天有效
...
Deploy / deploy (push) Canceled after 0s
原来要先打开开关、名字变成带 × 的标签再点 ×,× 像删除;标完人从页面上消失,
恢复只能全部恢复。现在:
- 班级下拉旁「请假」按钮,标了人之后按钮直接写「请假 2 人:陈言、黄依露 · 修改」
- 弹框只列今天还没交过的人(请假的人一定在里面,刚上课时就是全班),勾上点确定
- 请假的人在表格里变灰排到最后,不算进进度和「还没交过」
- 交了题或举手就算来了,自动取消标记
- 有效期从两小时改成今天(请假一般是一整天),仍然只记在这台电脑上
顺带修掉:被标过的学生后来交了题,会从表格里整个消失、也不算进进度。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-09 10:38:25 +08:00
xuyue and Claude Opus 5.5
af2ca31de5
fix(学生管理员): 260 班看板 23 人、数据统计只有 22 人,学生管理员还能看同学的作业代码——学生管理员一律按学生算
...
Deploy / deploy (push) Canceled after 0s
- 统计、题目页各班表、流程图统计的班级名单原来只认普通用户,改成和看板、排行榜一样的
STUDENT_ROLES,学生管理员进名单、进分母
- 看别人的提交代码和流程图只给老师、超管和出题人;题单防抄对学生管理员也生效。
原来「比赛进行中学生管理员不能看」那条特例随之去掉
- 题单的「用户进度」原来只给题单创建者,其余老师点开报「题单不存在」;改成所有老师都能看,
和看板、统计对所有班开放一致。后台能改能删的接口仍只给创建者
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-08 14:00:11 +08:00
xuyue and Claude Opus 5.5
30f34f0e36
fix(老师权限): 老师在自己比赛里点题目「可见」没反应、看不到学生的智能分析入口等一批权限错位
...
- 比赛题的可见开关按题目作者判归属,从题库加进比赛的题作者是别人,老师点了 404 且无提示;
改成和编辑、删除一样按比赛创建者判(canEdit)
- 学生主页「智能分析」和「查看指定用户」只给超管,后端本来就允许老师;改成老师可见
- 排名页班级详情的「AI 分析」学生也看得到,点了权限不足;只给老师显示
- 班级 PK 页解构 store 丢了响应性,资料晚到时老师看不到「AI 分析」
- 学生管理员能给任何人的流程图重新评分且不限流;别人的提交只有老师能重评,免限流也只给老师
- 超管没退登就过期的机房电脑上,下一个登录的老师继承演示模式、看不到后台和看板且关不掉;
演示模式只对超管生效
- 老师的出题权限能设成「无权限」,设了比赛题目页全是权限不足;后端兜成「仅自己」,
编辑框里老师不再给这个选项
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-08 14:00:04 +08:00
xuyue
bde387e8bc
fix
Deploy / deploy (push) Canceled after 0s
2026-10-08 12:29:35 +08:00
xuyue and Claude Opus 5.5
af63b05d4b
fix(班级下拉): 「26计算机11班」这种两位数的班在有的机器上显示成省略号——下拉加宽到 152px
...
Deploy / deploy (push) Canceled after 0s
132px 时最长的班名只剩两像素余量,字体稍宽就放不下。提交列表和统计面板两处一起改。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 12:40:08 +08:00
xuyue and Claude Opus 5.5
b7ec65eee8
feat(提交详情): 点了班级筛选之后,要挪到上面班级下拉去点 × 才能取消——右栏那个班级标签原地变成「取消」
...
已经在筛这个班时,标签不再消失,填色带 ×,悬停变红,再点一下回到全部班级。手机上顺手关掉详情抽屉。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 12:40:08 +08:00
xuyue and Claude Opus 5.5
2fafb25959
style(提交详情): 状态那一行挤得快放不下——去掉「测试点 1、2、3 答案错误」和耗时、内存
...
Deploy / deploy (push) Canceled after 0s
测试点小方块本身带颜色、悬停有结果名,后面再写一遍是重复;耗时和内存在课堂上没人看。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 12:28:59 +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
923f3efeca
feat(统计): 没填班级的学生也能和班级一样看——班级下拉多一项「没填班级」,一起上的课能切出来、点进去看小方块;零散提交也能点了
...
- 班级筛选多一个取值 NO_CLASS("none"),统计、方块串、流程图、提交列表都认;只圈普通学生,
老师管理员的号本来就不填班级,不挡的话试题的提交会算进去
- 切课时没填班级的号合在一起当一个班切(原来 class_name is null 直接排除,7 月 4 日那两节课看不到)
- 没填班级不是真班:不列「还没交」,课上只写几人不写几人之几
- 「另有零散提交」每一项可点,进那个班那一整天
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 12:18:06 +08:00
xuyue and Claude Opus 5.5
c2ef55b10b
fix(提交): C 代码编译不过时,提交前的自动格式化把出错的几行并成一行,学生认不出自己的代码
...
Deploy / deploy (push) Canceled after 0s
clang-format 不认中文分号、缺了分号的语句,会把它和下一行并起来(int n; 和 scanf 成了
一行),报错的行号也对不上学生记得的位置。现在 C / C++ 格式化之前先套上题目模板、在
判题机上编一次,编不过就原样返回、不格式化,代码照常提交、照常判成编译错误。
api 容器里没有 gcc,判题机的编译器和参数本来就是判的标准,所以借它编。这一下不进判题
队列、不建提交记录;判题机连不上时照旧格式化。代价是每次交 C 多一次编译,零点几秒。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-30 11:29:37 +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
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