 xuyueandClaude Opus 5.5
|
e8a20d12f9
|
refactor(前端): shared / utils 不再 import oj 和 admin 下的任何东西
依赖方向原来是反的:顶栏、登录框、举手列表这些 shared 组件从 oj/ 里拿东西。
- 跨端的接口挪进 shared/api.ts(按 apps/web/CLAUDE.md 的分法):学生端题目列表、
出题人列表、这节课的题、待弹的成就
- 这节课的 store → shared/store/lesson.ts;头像 RankAvatar → shared/components
- 纯函数挪进 utils/:举手列表的错法归类 errorKind、它依赖的答案错误分类 wrongAnswer
和 Python 报错翻译 pythonError、题目列表行的 toProblemRow
- 只有后台在用的出题人下拉 AuthorSelect 挪回 admin/components
纯搬家。首页、题目列表、题目页、排名、课堂看板、后台题目列表打开无报错,
顶栏题号框敲 1001 回车直达题目页。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-10-16 15:11:21 +08:00 |
|
 xuyueandClaude Opus 5.5
|
309ca0ece2
|
refactor(前端): 全站共用的班级下拉、胶囊配色挪出提交列表目录,编辑器不再偷读题目页的 store
Deploy / deploy (push) Canceled after 0s
- classLabel / groupClassOptions / classSelectOptions 挪到 utils/classes.ts,useTone 挪到
shared/composables/tone.ts:原来放在 oj/submission/ 下,被前台、后台、shared 引了 50 多处
- 流程图编辑器的草稿键改由题目页传进来(键名不变,学生存着的草稿照样读得到)。原来编辑器
自己读题目页的 store 和路由拼,后台出题页也用这个组件,那边 store 是空的
- SQL 表名补全改由题目页传表进来。原来补全直接读题目页的 store,自学页的 SQL 代码块会
补出上一道看过的题的表名
实跑:提交列表、题目页、排名、后台题目页、SQL 题、流程图题打开无报错;SQL 题输入 stu
补出 students;流程图加一步,草稿照旧存在 flowchart-v2-problem-<题号>。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-10-16 14:59:55 +08:00 |
|
 xuyueandClaude Opus 5.5
|
64994b9499
|
perf(判题结果): 全班一起交、判题排队时不再每人每 2 秒问一次结果
Deploy / deploy (push) Canceled after 0s
原来交上去 5 秒没结果就每 2 秒(流程图 3 秒)拉一次,分不清 WebSocket 断了还是队列长:
50 人一起交、队列排一分钟时每秒二十几个请求,全在和判题抢那两个核。
- 收到这一条的任何推送(服务端订阅时就回一帧当前状态)就认定 WebSocket 是通的,
轮询退到 20 秒一次,只防推送丢失;连接断了才回快档,2 秒起按 1.5 倍退到 10 秒
- 拉失败不再永久停掉(掉线那几秒拉失败是常事),连着失败 5 次才放弃
- 页面在后台时不拉;比赛题目页、榜单、班级页的定时刷新也一样,切回来立刻补一次
- 代码判题和流程图评分共用 shared/composables/fallbackPoll.ts
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-10-16 14:37:08 +08:00 |
|
 xuyueandClaude Opus 5.5
|
0ffc405a20
|
feat(前台): 各页直达后台对应功能——编辑这一课、新建比赛、编辑这条公告……
Deploy / deploy (push) Canceled after 0s
题目页「编辑题目」从只给超管放宽到有权改这道题的人(含学生管理员改自己出的题);
题目、比赛、题单列表加「新建」;自学首页加「自学情况」「管理教程」,课文加「编辑这一课」;
公告加「编辑这条」「发公告」;成就加「管理成就」;智能分析加「AI 报告」,看某个学生时
带着用户名过去直接筛到他。按钮统一走 shared/components/AdminLink.vue。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-10-15 14:02:29 +08:00 |
|
 xuyueandClaude Opus 5.5
|
a5d5c39411
|
fix(手机): 收起键盘后「提交」按钮不回来;比赛领奖台第一名被挤出屏幕;iPhone 点输入框整页放大
- 题目页:安卓按返回键收键盘时编辑器不失焦,符号键一直贴底、「运行例子 / 提交」不回来。
改成看键盘真弹着没有(可视视口变矮),不只看焦点
- 比赛排名:结束后的领奖台三块共 646px,手机上第一名被切掉、第三名看不见;改成平分一行
- iPhone:点 14/15px 的输入框和代码编辑器,Safari 会整页放大且不缩回;只给 iOS 加 maximum-scale=1
- 登录:手机上选完班不再自动聚焦搜索框(键盘弹出来盖住半张名单)
- 题单:窄屏上题目拆成两张没标题的卡片,像分了两组;放不下两栏时合成一张
- 「中等」在题目页是蓝色、在题目列表是橙色,统一成橙色
- 零碎:自学四列表格在 360 宽上收窄格子;统计「错得最多的题」表头不再挤成竖排;
「第 N 名」「14 道」不再把最后一个字甩到下一行
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-10-15 12:36:33 +08:00 |
|
 xuyueandClaude Opus 5.5
|
90ce1ab0f5
|
fix(手机): 点开提交、班级详情、自学目录这类整屏的东西,按返回直接退出了整页,现在是先关掉它
Deploy / deploy (push) Canceled after 0s
- 提交列表:手机上点开一条,地址带上 ?id=,返回键就是关详情回到列表;刷新、转发链接
也还停在这一条;上一条 / 下一条、翻页、滚动位置都在;详情里点「只看他」先关详情再筛选
- 看板讲错误、排名班级详情、自学目录、题目页底部抽屉:手机上按返回只关它(useBackClose);
在自学目录里选一课,返回是回到上一课,不多一站
- 分页列表(提交、题目、比赛、后台几个列表)用浏览器后退翻回前一页时会多压一条历史,
前进的记录被冲掉、返回要多按一次 —— 电脑上也是,一起修了
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-10-15 11:55:30 +08:00 |
|
 xuyueandClaude Opus 5.5
|
68fae03165
|
style(做对了): 烟花细调:火星和尾焰大一点,在题目列表上也看得清;风火轮转慢、飞远,看得出四条臂;礼花瀑布真往下流;炮竹齐鸣的碎响更密
Deploy / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-10-14 13:21:18 +08:00 |
|
 xuyueandClaude Opus 5.5
|
4d6df4ab0c
|
fix(做对了): 点评弹窗等烟花放完再出来,不再放到一半就被盖住;星星雨、彩虹喷泉收短一点,十种都在两三秒内放完
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-10-14 13:17:27 +08:00 |
|
 xuyueandClaude Opus 5.5
|
655af07ca7
|
feat(做对了): 换了十种烟花:齐射、彩虹喷泉、螺旋上升、风火轮、炸出对勾和爱心……每次随机放一种;烟花盖在点评弹窗上面接着放,不再后半段被遮罩挡住
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-10-14 13:12:21 +08:00 |
|
 xuyueandClaude Opus 5.5
|
7881431fa9
|
fix(点评): 做对之后点完轮盘不再一闪就没:先停 2.5 秒给你看大家是怎么选的,再自己关;按钮挪到轮盘正下方居中,底边一条线缩完就关,急着走可以直接点
Deploy / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-10-14 11:58:58 +08:00 |
|
 xuyueandClaude 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 |
|
 xuyueandClaude Opus 5.5
|
06c679579c
|
fix(前台): 地址打错不再是一整页空白,题目、比赛、题单不存在时写明是哪样不存在、给一个回去的按钮
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-10-13 22:03:49 +08:00 |
|
 xuyueandClaude Opus 5.5
|
48738f74d9
|
fix(题目列表): 老师账号看题目列表也有「状态」列了,自己做对的题打勾
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-10-13 13:46:34 +08:00 |
|
 xuyueandClaude 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 |
|
 xuyueandClaude 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 |
|
 xuyueandClaude 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 |
|
 xuyueandClaude 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 |
|
 xuyueandClaude 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 |
|
 xuyueandClaude 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 |
|
 xuyueandClaude 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 |
|
 xuyueandClaude 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 |
|
 xuyueandClaude 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 |
|
 xuyueandClaude 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 |
|
 xuyueandClaude 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 |
|
 xuyueandClaude 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 |
|
 xuyueandClaude 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 |
|
 xuyueandClaude 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 |
|
 xuyueandClaude 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 |
|
 xuyueandClaude 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 |
|
 xuyueandClaude 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 |
|
 xuyueandClaude 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 |
|
 xuyueandClaude 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 |
|
 xuyueandClaude 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 |
|
 xuyueandClaude 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 |
|
 xuyueandClaude Opus 5.5
|
e958d69258
|
fix(题目列表): 连着快点几个知识点,列表偶尔停在前一个知识点的题上
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-10-09 16:49:09 +08:00 |
|
 xuyueandClaude 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 |
|
 xuyueandClaude Opus 5.5
|
dab53c9098
|
fix(题目列表): 筛空了只说「没有符合条件的题」,点「清空筛选」连左边的知识点一起清掉——说清楚是哪个条件,每个条件一个按钮只去掉它
例如「『函数定义』里没有『画流程图』的题」+「看全部类型」;几个条件一起时每个条件各一个按钮
(看全部类型 / 看全部难度 / 看所有出题者 / 清掉搜索 / 关掉只看没做完)。
「你都做对了」只在「只看没做完」是唯一条件时才说,带着别的筛选空了不再误报。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-10-09 13:10:54 +08:00 |
|
 xuyueandClaude 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 |
|
 xuyueandClaude 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 |
|
 xuyueandClaude 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 |
|
 xuyueandClaude Opus 5.5
|
97426f0895
|
fix(题目列表): 选了知识点后题目改成按题号排,和平时看惯的「最新的在前」不一样——默认一律按最新创建
排序下拉固定三项:最新创建(默认)/ 按题号 / 最多人做对。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-10-09 12:57:14 +08:00 |
|
 xuyueandClaude 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 |
|
 xuyueandClaude 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 |
|
 xuyueandClaude 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 |
|
 xuyueandClaude 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 |
|
 xuyueandClaude 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 |
|
 xuyueandClaude 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 |
|
 xuyueandClaude 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 |
|
 xuyueandClaude 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 |
|
 xuyueandClaude 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 |
|