xuyue and Claude Opus 5.5
cccf7a37be
feat(成就): 多了 9 个好拿的档和「挑战成功」一条线,比赛里做的题也算,这学期八成学生多拿到成就
...
- 补档:做对 20 道、第一道中等题、交满 30 次、5 天交过题、一次就对 5 道、错 3 次后做对、一天做对 5 道;
新线「挑战成功」1 次 / 5 次
- 比赛里的提交也计入成就(比赛其实是单班测验,2612 班整班在比赛里做题,原来一个成就都没有);
参加过几场比赛改成判题时就更新,以前只在后台重扫时刷新
- 奖杯收藏家从 15 个提到 20 个
- 0044 迁移:按新口径从提交记录重数指标,给达标的人补发(已经拿到的不收回)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 16:52:00 +08:00
xuyue and Claude Opus 5.5
1fdee94812
docs(部署): 记下 runner 会「假在线」以及看门狗兜底
...
gitea-runner 5.2.4 拉任务超时一次后就不再拉,Gitea 显示没有在线的运行器。开发机上
fetch_timeout 放到 30s,另加用户级 gitea-runner-watchdog.timer 每 5 分钟检查、卡住就重启。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 16:36:48 +08:00
xuyue and Claude Opus 5.5
aa7e0a6eb8
feat(看板娘): 接上全班进度、难度、提示、知识点、排名等数据,说的话更贴每个人
...
Deploy / deploy (push) Successful in 50s
- 题目页:这节课同班做对的人多就说「全班已经 N 个人做对了」、都卡着就安慰、第一个做对的夸一句;
通过率不到三成的题错了说「本来就难」、高于七成的说「再看看题」;AI 提示开了没用就提一句;
做对了还有挑战就问敢不敢;流程图分低、拿 S 各有话
- 常点「太难了」的学生错了换软话;这周交得多、例子跑得少的念一句;卡住却从不举手的劝举手;
这周要提示多的劝先自己想
- 首页(这节课没要做的时)每次戳随机说一件:知识点差几道升级、周榜差几道超过前一名、
今天明天的比赛、三天内的新公告;两周以上没来说「好久不见」,只说一回
- 排名页第一名、差前一名几道;成就页差一点的;自学没全对的练一练;专题差最后一道拿奖章
- 运行例子、自己输入、举手也记进 mascot_event(trial、help),GET /mascot/profile
多给「太难了」次数和这一周交、跑例子、举手、要提示的次数
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 16:33:35 +08:00
xuyue and Claude Opus 5.5
81ef4dca6b
feat(看板娘): 记得你常错在哪,题目页上会主动开口,互动都记下来
...
Deploy / deploy (push) Successful in 51s
- 按学生的行为挑话:最近 20 次提交里某类错特别多(运行出错细到 NameError、TypeError、
ValueError、EOFError),再错这一类时点名说;今天做对第 3 道起偶尔数一数;
第一次戳她有见面的话,戳得多了说「又是你」
- 题目页上主动开口:同一题错到第 5 次、连着 3 次没跑例子就交还错了、又犯老毛病、
15 分钟没交没跑。比赛里不说,至少隔 3 分钟,同一件事一题一次,10 秒后收起
- 互动记进新表 mascot_event(0043):点开、点按钮、主动开口、摸头、点烦、被拖走;
只记看板娘这边的事,每人每分钟最多 30 条
- GET /mascot/profile 给最近的错类、今天做对几道、点过几次;门槛按本机生产快照定
(266 人里运行出错 ≥3 的 87 人、答案错误 ≥5 的 82 人)
- 编辑过程(粘贴)数据学生侧不用,免得冤枉人
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 16:22:58 +08:00
xuyue and Claude Opus 5.5
ef3c53c671
feat(看板娘): 点她会按页面说一句傲娇的话,再给两三个能直接办事的按钮
...
Deploy / deploy (push) Successful in 49s
- 她从不主动开口,点一下才冒气泡;比赛里不弹。台词 326 句(shared/mascot/lines.ts),
口吻照「小鲸鱼」角色卡,学校里舍掉英文、粗口,「用户」改叫「同学」
- 按情况换话:题目页分没写、没交、例子没对上/对上、答错、编译错误、运行出错、超时、
错很多次、做对、一次就对、终于对了、以前做过;首页、题目列表、提交、专题、自学、排名等各有一组
- 按钮真的去办:运行例子、我错在哪(切到结果里出错的那一段)、举手、输题号、随便来一道、
下一道、选题……
- 老师也看得到:有学生举手时任何页面先说这件事;首页、课堂任务、统计、题目页各有一组
- 页面用 useMascotGuide 告诉她现在的情况(shared/mascot/guide.ts),以后按学生行为调整也接在这一层
- 修:连点时像卡住了(快点时按压过渡来不及显示,改成每下播一遍压扁回弹);
一打开从左上角飞到右下角;去掉单击的摆动
设计稿与台词表:https://claude.ai/artifact/Qz2zPCfq2zCrqmxyms1UGx
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 16:12:23 +08:00
xuyue and Claude Opus 5.5
15966ceb0d
feat(看板娘): 前台右下角多了一个能拖、能点的看板娘,连点偶尔会被摸摸头
...
Deploy / deploy (push) Successful in 50s
形象和交互参照 MeteorNOX/DeepSeek-Balance-Whale-Widget,图片取自它的 assets/
(DSniang1.png 转 webp、rua.gif 原样)。那个仓库的图不在 MIT 范围内,见它的 PROVENANCE.md。
- 拖到哪停哪,靠近四边的四分之一就贴边;在左半边时镜像,脸朝页面中间
- 按下压扁、松手回弹,点一下蹦一下
- 彩蛋:连点时每轮三分之一的机会,在第 4~8 下随机一下被摸头
- 只在电脑宽度显示;位置存本机浏览器
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 14:57:59 +08:00
xuyue and Claude Opus 5.5
0c94f2db87
perf(暗色): 每次打开页面不再白白强制重算两次整页样式
...
Deploy / deploy (push) Successful in 49s
上一版全站共用一个 useDark 之后,它一进页面仍要把 <html> 的 class 同步两遍,每遍都插
style + getComputedStyle 逼整页重算。class 已经对了就跳过,只有真要切换时才走原来那套。
CPU 降速 6 倍下每页省约 25ms;切换暗色、暗色下刷新、切回亮色都核过。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 14:36:11 +08:00
xuyue and Claude Opus 5.5
f01870c072
fix(烟花): 「表情包」那一种在机房电脑上卡成幻灯片
...
canvas-confetti 画位图粒子是每帧按「位图边长 × scalar」填一个图案矩形,和表情实际多大
无关。原来位图 64px、scalar 5,表情显示 50px,每个粒子每帧却填 320×320,两团 32 个
粒子一帧三百多万像素。改成位图直接画成 50px、scalar 1、矩阵不缩放:显示大小和轨迹
不变(scalar 只管大小不管运动),填的正好是 50×50。
同样画法在无 GPU 的 Chrome 里复现一帧:17ms → 0.5ms(快的 CPU 核上,旧的已经吃满一帧)。
其余九种是圆点、星星、对勾、爱心这类路径,只填图形本身,没有这个问题。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 14:22:42 +08:00
xuyue and Claude Opus 5.5
95dc2f24e6
perf(提交列表): 按 ↑ ↓ 换到没看过的一条也不卡了 —— 右栏预取上一条、下一条
...
Deploy / deploy (push) Successful in 48s
原来换到没缓存的一条要先卸掉代码区、转圈、再整个挂回来,CPU 降速 6 倍下每次卡
60–100ms;走缓存的只换内容不卡。现在这一条加载完顺手把上下两条也拉回来,同一条
只发一次请求(预取还在路上时按到它就接着等),按住 ↓ 划过去的那些行不预取。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 13:57:34 +08:00
xuyue and Claude Opus 5.5
e511d82f3b
perf(暗色): 提交列表、排名首屏卡掉的一秒多回来了 —— 全站共用一个 useDark
...
VueUse 的 useDark 每个实例挂载时都插一段 style、getComputedStyle 逼整页重算样式,
亮色下它的「没东西要改就跳过」永远不成立。提交列表每行的结果胶囊(useTone)都调它,
一页 30 行就是 30 次整页重算,翻页、换条再来。
改成 shared/composables/dark.ts 的 createGlobalState,auto-import 用 priority 盖掉
@vueuse/core 的同名项,显式 import 的 7 处一并换掉。
生产构建、CPU 降速 6 倍实测:提交列表首屏主线程 2015 → 1092ms(列表出来 1.34 → 0.85 秒),
排名 1950 → 850ms,比赛 1060 → 757ms;右栏换到没看过的一条不再每次卡 100ms。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 13:55:33 +08:00
xuyue and Claude Opus 5.5
55bdf317f1
fix(语法要求): 「自定义函数」不再把 main 算进去,运算符不再把取地址、指针、模板尖括号当成用了
...
Deploy / deploy (push) Successful in 55s
- C / C++ 的函数定义排掉 main,下拉改叫「自定义函数」。原来「必须使用」永远通过、「不能使用」永远失败,
出题页挑战候选里 C 的「用自定义函数再写一遍」也因此一直挖不出来
- 运算符只认二元运算 / 复合赋值 / 自增自减里的 token,一元只认取反。scanf 的 &、int *p、vector<int>、
*args、import *、**kw、not in、is not、case 1 | 2 不再算「用了」
- Python 的 math.sqrt(4) 算调用了 sqrt()(只认 import 进来的模块)
- Python 的「赋值语句」连 s += 1 一起算,和 C 一个口径
- 保存时拦下负数次数、至少比至多还多的次数规则
现有 19 道题的规则都不受影响:1265 条真实提交重判,结论和改之前一致。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 13:29:57 +08:00
xuyue and Claude Opus 5.5
1b730da401
docs(格式化): 补上 learn.css 也会被 vp fmt 和 bun fmt 来回改,以及怎么列出受影响的文件
...
Deploy / deploy (push) Successful in 55s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 13:07:14 +08:00
xuyue and Claude Opus 5.5
8c5399755e
feat(相似题): 做对中等、困难题后不再只推一串简单题,每道推荐写出和原题共同的标签
...
- 共同标签一样多时先给难度最接近的,再并列才先简单的(原来一律简单的在前,
做对困难题时五条里三条多是简单题)
- 每行第二行写共同的标签(知识点在前、主题在后)和做对人数;带类型标签、
做过没对的红「−」,写法照题目列表
- 题面里的标题和「提示」「来源」一样,结果页签里的和「还能挑战」对齐
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 13:06:49 +08:00
xuyue and Claude Opus 5.5
da360e2f68
docs(部署): 开发机上的 runner 改成注册在 xuyue 用户下,和 IOT_SIM 共用(多一个 iot-deploy 标签)
...
Deploy / deploy (push) Successful in 49s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 12:08:14 +08:00
xuyue and Claude Opus 5.5
3beb039dda
fix(部署): 迁移没通过时把镜像名指回原来的,之后再起容器不会换上没迁移的新代码
...
Deploy / deploy (push) Successful in 51s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 11:24:06 +08:00
xuyue and Claude Opus 5.5
49643719b0
fix(部署): 开发机上编的后端到线上起不来(缺 libicu),改用官方 bun 编
...
Deploy / deploy (push) Successful in 59s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 11:17:36 +08:00
xuyue and Claude Opus 5.5
f1c4e89ec5
chore(部署): push origin 就由开发机编好传上去,不再绕道海外,晚上也是一分钟左右上线
...
Deploy / deploy (push) Failing after 37s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 11:08:03 +08:00
xuyue and Claude Opus 5.5
bcadab40b2
chore(部署): 同步到服务器少传约 20%,线路断了自动续传,不再一直卡着
...
Deploy / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 10:50:42 +08:00
xuyue and Claude Opus 5.5
41d2e46aa9
perf(排名): 打开排名页快一些,看「全服 · 全部」从 0.27 秒降到 0.08 秒
...
Deploy / deploy (push) Canceled after 0s
做对时刻在库里换成毫秒、按人聚成数组再取回,不再一行一个 timestamptz
逐条解析(全服全部历史六万多行,光解析就占 150ms)。名次与原来完全一致。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 10:32:32 +08:00
xuyue and Claude Opus 5.5
f06bb063b4
feat(顶栏): 导航最左边加「首页」,和点站名一样回到首页
...
没登录时不显示:那时首页就是题目列表,和「题目」是同一页。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 09:36:41 +08:00
xuyue and Claude Opus 5.5
4a4cede99f
style(专题): 列表没有「布置中」时不再另起一行「专题 14 个」,数量写在标题旁边
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 09:34:59 +08:00
xuyue and Claude Opus 5.5
91057c1096
fix(课堂任务): 先画一节、再用这几道题写代码时,老师这边也认没画图的还没做完
...
- 任务页格子、老师首页「全做对」和每道题做对几人,按今天几节里同一道题合起来的要求算
(和学生那边同一份口径,挪进 services/lesson.ts 的 todayNeeds):写代码那节只交对了代码、
没画图的,格子是「缺图」,不再打 ✓。后台和数据统计还是一节一行、各数各的
- 学生课堂条上「几人做对」也按合起来的要求数,不再把自己没做完的算进去
- 先画再写只交对了代码、图还没画的格子,不再挂挑战的圈
- 题目页标题下:流程图没画到 A 也写「流程图 C 级」(橙色),不再写「还没交过」
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 09:32:57 +08:00
xuyue and Claude Opus 5.5
c3f1413545
fix(课堂任务): 后台改一节不再把它排到同一分钟布置的另一节前面;学生管理员算进统计的课
...
- 后台「改」时刻只填到分,原来一保存就把布置时刻截成整分:先画流程图、紧接着再开一节写代码,
只改了做什么,「今天最后一节」就换回了画流程图那节。没改时刻就留着原来的
- 数据统计「一行一节课」只数 Regular User,学生管理员的提交不算,和「做完 / 全班」的花名册对不上
- 学生「老师改了这节课」:画流程图改成写 C、先画再写改成写代码,原来写「语言 改成 C语言」,
看不出不用画了;现在写「做法 改成 写代码 · C语言」
- 学生课堂标题按每道题合起来的要求写:先画流程图、再用这几道题写代码时,不再只写「用 C语言做」
- 先画再写的题,切到别的题再回来不再被拽回画布(原来只记最后一道题)
- 课堂任务顶上写代码的课也写「写代码」;讲错误的弹层开着时不再因为 15 秒刷新换了个人
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 09:26:39 +08:00
xuyue and Claude Opus 5.5
b09d479893
style(课堂任务): 后台列表分清写代码、先画再写、画流程图,能按做法筛
...
原来写代码当默认值不写出来,只剩「C语言」「Python」,看着和别的分不开。
现在三种都用不同颜色的标签写出来,筛选多一个「做什么」。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 09:05:23 +08:00
xuyue and Claude Opus 5.5
1b703d13ae
style(专题): 「题单」改名「专题」,顶栏、列表、详情、后台、成就说法统一
...
Deploy / deploy (push) Canceled after 0s
只改界面文字和注释:网址 /problemset、接口、表名、字段名都不动,老链接照常能打开。
设计稿页名「题单重设计」和已执行的迁移文件保留原样。
线上 3 个成就(题单收藏家 / 入门 / 通关)已同步改名。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-03 00:12:18 +08:00
xuyue and Claude Opus 5.5
959c326bc9
style(名字): 名字列按去掉 ks 前缀后的长度收窄,不再留一大块空
...
Deploy / deploy (push) Canceled after 0s
原来的定宽是按 ks2312李鑫楠 定的(110~170px),现在名字最长 4 个字(在读的班 423 人里 5 人)。
只放名字的列收到 80px 左右;混着几个班、名字后面还有班号的(全部提交、全服 / 年级排名、
卡点分析没选班时)108px,最宽的「翁鑫叶炫 2312」95px 也放得下。改了提交列表、排名赛道和周榜、
比赛排名和成绩、题单全班情况、数据统计、后台自学情况和卡点分析、请假名单
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-02 23:51:28 +08:00
xuyue
dbb265b02f
Update admin.vue
Deploy / deploy (push) Canceled after 0s
2026-11-02 23:47:05 +08:00
xuyue and Claude Opus 5.5
2bda05a978
feat(名字): 界面上不再显示 ks + 班号前缀,混着几个班的地方名字后面写班级
...
Deploy / deploy (push) Canceled after 0s
- 学生名字一律只显示名字(老号 ks232张三 显示成 张三),顶栏、首页问候、悬停提示、请假名单、比赛成绩表都一样
- 全服 / 年级排名、全部提交、几个班同时举手时,名字后面淡写班级;提交列表的名字列窄,只写班号(陈长 258)
- AI 班级分析点名「要多关心的同学」时不再带 ks 前缀
- 建号查重补漏:同班同名也比真名(加过数字的张三2、编号制老号);名字自己带数字(王芳1)也认得出被占;
导入时后端再拦一次同班同名,建号页要等查重结果对上当前名单才能点
- 登录名单换成新接口 /classes/:c/members(名字按界面规则剥,换过班的老号不再露出全名),
旧接口原样留给上线时还开着旧登录页的机房电脑
- 后台手写老格式 ks232张三 新建用户、没选班时按前缀补班级;PUT /me/profile 只带真名时不再 500
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-02 23:41:49 +08:00
xuyue and Claude Opus 5.5
221d264701
feat(账号): 新建的号不再加 ks + 班号前缀,班级单独选;学生改不了真名了
...
- 批量建号先选班再贴名单,用户名就是名字;被别的班或注册的号占了自动加数字(xuyue2)。
查重改成查「这个班里有没有同名的」,老号按剥掉 ks 前缀的名字比
- 后台编辑、新建用户能直接选班级;以前班级只能从用户名的 ks 前缀推,改不了
- 登录点名字时名单接口一并给出用户名,新号老号都登得上;本机记的班级兼容旧的 ks257 写法
- 筛选、抽人、「看看他们的写法」都按班级认人,不再拼 ks 前缀(新号拼出来永远圈不进去)
- 接口 PUT /me/profile 不再收真名:界面早没入口,但早几届有 44 人把真名改成了外号
- 0042:两个被推成非班号班级的老号(xrm、王仁杰)改成没填班级
- 老账号不改名,只认 ks 前缀的地方收在契约 username.ts 一处
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-02 23:22:20 +08:00
xuyue and Claude Opus 5.5
48590eee60
refactor(目录): 目录名对上界面上的名字,自学的「一课」不再也叫 lesson
...
Deploy / deploy (push) Canceled after 0s
- 后台课堂任务 admin/lesson → admin/task(/admin/task),和前台 oj/task 对上
- 后台首页 admin/setting/home.vue → admin/home/,设置 → admin/config/
- 卡点分析、年度趋势从 admin/problem 搬到 admin/analytics(/admin/analytics/stuck|trend),和菜单的「学情分析」、后端 analytics.ts 对上
- 首页 dashboard.vue / TeacherHome.vue → student.vue / teacher.vue;自学首页 home.vue → index.vue,看一课 index.vue → tutorial.vue
- lesson 只表示课堂上的一节:自学那边改叫 tutorial(oj/learn/lesson.ts → utils.ts、isLessonDone → isTutorialDone、Lesson*.vue → Tutorial*.vue、自学情况的 lessons 字段 → tutorials)
- 旧地址不留跳转
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-02 22:59:43 +08:00
xuyue and Claude Opus 5.5
29c31640b5
refactor(课堂任务): 「课堂看板」改名「课堂任务」,地址换成 /task;班级 PK 换成 /pk
...
- 界面上的「课堂看板」「课堂作业」统一叫「课堂任务」,顶栏、老师首页、后台菜单一起改
- 前端 oj/classroom → oj/task、oj/class → oj/pk,两个名字不再只差几个字母却毫不相干;旧地址不留跳转
- 后端 routes/classroom.ts 拆开:课堂任务的接口进 routes/task.ts(/task/board|lesson|today),
首页的「上次来」「班里在做」进 routes/home.ts;共用的取题口径挪进 services/lesson.ts
- 契约 classroom.ts 同样拆成 task.ts / home.ts,ClassBoard* 改叫 TaskBoard*
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-02 22:53:07 +08:00
xuyue
46d3fe2dbe
Update home.vue
Deploy / deploy (push) Canceled after 0s
2026-11-02 22:28:04 +08:00
xuyue and Claude Opus 5.5
bc42ade705
fix(判题): SQL 题判题也排队占名额,和别的判题一起抢那两个核时不再被误判超时
...
SQL 子进程在 worker 里跑,原来不经判题名额(judge/slots.ts):两道 SQL、两道沙箱判题、
再加流程图试运行可以同时压在服务器两个核上,SQL 的时限按墙钟算,挤的时候本来不超时的
语句会被判成超时。现在和沙箱判题占同一个池,一个名额管整份提交,租约按每个测试点
最长可能占的时间算。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-02 21:57:05 +08:00
xuyue and Claude Opus 5.5
38a331c2b7
feat(布置作业): 能布置「画流程图」「先画再写」,看板分清卡在画图还是写代码
...
Deploy / deploy (push) Canceled after 0s
布置时多一个「做什么」:写代码 / 先画再写 / 画流程图(只能选打开了画流程图的题)。
- 先画再写:一道题图画到 A/S、代码也交对才算做完;学生画一道写一道、全画完再写都行,
打开题目自动停在该做的那一步(图没画对停画布,画对了换到布置的语言)
- 也能分开布置:先一节画流程图,看板上「用这几道题写代码」再开一节;学生那边把今天
几节课的要求合起来,还没画完的照样看得到要画
- 看板格子是一条进度:图 1/6 → 空心「图 ✓」→ 代码 ✗ → ✓,先写代码没画图的写「缺图」;
卡在画图上的点开讲那张图(要改的框标红 + AI 的哪里错/怎么改),按走对几组归堆
- 写代码的课不再拿画对的流程图顶替做完;数据统计里画流程图的课数流程图提交
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-02 21:50:48 +08:00
xuyue and Claude Opus 5.5
71323d9b63
style(布置作业): 「老师改了这节课的题」电脑上挪到右下角,不再挡住提交按钮;手机上不再出屏
...
Deploy / deploy (push) Canceled after 0s
手机上照旧在顶栏下面(底下是运行例子 / 提交那条)。卡片宽度原来没算内边距和边框,
窄屏上左右各多出 22px,加 border-box。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-02 21:22:38 +08:00
xuyue and Claude Opus 5.5
df8af40d61
feat(布置作业): 课上老师改了作业,学生页面上弹出改了哪些题,点「刷新」就拿到新题单
...
Deploy / deploy (push) Canceled after 0s
看板「改 / 新的一节 / 清掉」和后台课堂作业的增改删,前后比较学生看到的那一节,
真变了才按班推 lesson_update(加了、去掉了、语言、顺序),走学生的 /ws/config,老师不收。
没点刷新又改会合并成一条。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-02 21:14:52 +08:00
xuyue and Claude Opus 5.5
0fd94ee8bf
style(选题): 左栏知识点整列放得下,不再冒出一根滚动条
...
Deploy / deploy (push) Canceled after 0s
每行 36px 时全部 + 必会题 + 13 个知识点比框高出 40px 左右,「总是显示滚动条」的电脑上
左边多了一根滚动条。压到 32px 一行,1366×768 上是 493px,框高 508px。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-02 21:04:40 +08:00
xuyue and Claude Opus 5.5
b046af4ba0
chore(部署): push 后先过检查再部署;判题机重启那几秒交的题不再变成系统错误;worker 挂了看得出来
...
Deploy / deploy (push) Canceled after 0s
按外部分析报告(reports/analysis)挑出来做的几条:
- CI 在编完前端之后跑 `bunx vp run verify`,有一项不过就不部署(必须排在编前端之后:
前端类型检查要的 auto-imports.d.ts / components.d.ts 是 vite build 时才生成的)
- 连不上判题机(连接被拒、解析不到、被重置)时,正式判题等 2/5/10 秒重试,不再当场记成
系统错误;超时、判题机回错、页面上的运行和自测不重试
- worker 每 10 秒刷一次「还活着」,compose 加 `oj2-api healthcheck --worker`,deploy.sh 起栈后
也等 worker 健康(docker 不会因 unhealthy 自动重启,只是看得见、部署时拦得住)
- 三套 compose 的容器日志限 10MB × 3
- `/public/%` 这类畸形编码回 404 而不是 500;找不到的接口回统一的 JSON 错误
- 删掉没人用的「停用判题机」接口,契约不再给 task_number / is_disabled(列留在库里)
- 删掉腐化的 apps/web/tests/submitButtonState.test.ts;契约包 zod 范围对齐到 ^4.6.6
- 修几处和实际对不上的注释与文档(表数、编译并发、AST 语言数、deploy.sh 流程、校验处数)
⚠️ 改了 compose 的日志配置,这次部署会把 postgres / redis / 判题机也重建一遍,各停几秒
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-02 20:59:19 +08:00
xuyue and Claude Opus 5.5
b344bd1dd6
feat(布置作业): 能按知识点点选题目;一个班一天能布置几节课;数据统计认老师布置的课;后台能管布置过的课
...
Deploy / deploy (push) Canceled after 0s
- 课堂看板「选题」弹框:左边知识点(加必会题),右边搜题号/题名、点选,按点的先后排;
只列这次作业的语言能交的题(/problems、/problem-tags 加 ?language=)
- 一天多节课:0040 拿掉 class_lesson (class_name, day) 唯一约束,每次布置一行;
看板「改」只改当前一节,加「新的一节」;这一节布置超过 100 分钟时先问这节课做哪几道题。
不带 lessonId/newLesson 的老请求照旧改今天最后一节
- 数据统计「一行一节课」:布置过的课以布置为准(题目和顺序照布置、做完按全班算、标「布置」),
这些提交不再参与推断切段,也不算零散;详情页「做完」注明是这一天/这节课/这段时间
- 后台「课堂作业」:一节一行,改(班级/日子/时刻/语言/题目)、看统计、删除、补一节;
看板加「布置过的课」入口。题号校验和「做完」口径抽到 services/lesson.ts,三处共用
⚠️ 机房站点要和服务器一起升级:旧代码布置时 ON CONFLICT (class_name, day) 找不到约束会报错
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-02 20:41:25 +08:00
xuyue and Claude Opus 5.5
0916015405
feat(流程图): 输入/输出/语句/条件/循环五种框各一种颜色,不再输入输出同色、条件循环同色
...
Deploy / deploy (push) Canceled after 0s
输出改紫、循环改青,绿和红留给起止框、选中和标错。存下来的 Mermaid 里循环也标成
decision,画之前按「有箭头从后面绕回来」认出循环,历史提交的图也按新颜色画。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-28 12:33:00 +08:00
xuyue and Claude Opus 5.5
179d5fa67d
feat(语法要求): 能要求「调用 print() 时必须用 sep 参数」,题目说要用 sep/end 的不再被绕过
...
Deploy / deploy (push) Canceled after 0s
原来只能数 print 调用几次,写成 print("1-2-3***4") + print() 也算达标。
新加 must_use_keyword(只有 Python),后台「关键字参数」一组里配函数名和参数名。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-27 22:16:44 +08:00
xuyue and Claude Opus 5.5
0e05f7e3c7
fix(部署): oj-web 里的 Caddy 从来没升级过,一直是服务器第一次构建时拉的那份
...
Deploy / deploy (push) Canceled after 0s
deploy.sh 构建时不带 --pull,FROM 的 caddy:2-alpine、debian:trixie-slim 永远用本地缓存。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-26 15:43:19 +08:00
xuyue and Claude Opus 5.5
7ff776b9d8
fix(做对了): 点评轮盘改成烟花开始 1.5 秒就弹,不再等烟花落完干等三四秒
...
Deploy / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-26 15:21:29 +08:00
xuyue and Claude Opus 5.5
6176b80ad9
chore(部署): 服务器的 judge0 早就删了,注释里还写着它
...
Deploy / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-26 15:05:49 +08:00
xuyue and Claude Opus 5.5
37e971b6b4
refactor(判题机): 换成 go-judge,空闲内存从几百 MB 降到 16 MB
...
原来的 JudgeServer 按核数起 gunicorn worker、每份提交再按核数开进程池,空闲内存跟着核数走
(2 核 52MB、16 核 305MB)。换成 go-judge 后空闲 16MB,同一批提交判题中 80–100MB(原来约 370MB)。
go-judge 只管在沙箱里跑命令,编译、逐点运行、比对输出、定状态码搬到 judge/sandbox.ts,
口径逐条照搬 JudgeServer,出参形状不变。拿生产库真实提交新旧逐点对比:C 2000 份 1989 一致、
C++ 891 份 890 一致、Python 2000 份全一致;不一致的是 system("pause")(现在不再判运行时错误)、
未定义行为、endl 死循环打印(运行时错误变运行超时),见 docker/judge/README.md。
- 判题容器改成 privileged(go-judge 要自己建 cgroup),镜像 oj2-judge-3
- 心跳改由 worker 每 5 秒问判题机 /version 代记,删掉 /api/judge-server/heartbeat
- 前端统一用 stripJudgePath 去掉判题机工作目录(新的 /w/ 和旧的 /judger/run/)
- 提交前编译检查只编译不运行
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-26 15:03:57 +08:00
xuyue and Claude Opus 5.5
8427475337
chore(清理): 删掉并行试跑、搬库、Python3 别名、旧链接这些过渡期的兼容写法
...
Deploy / deploy (push) Canceled after 0s
- 部署:JUDGE_STATE_DIR 不再强制设;删掉搬库脚本和只为搬库存在的自检、提醒
- 语言:Python3 / Python2 别名表删掉,normalizeLanguage 改名 parseLanguage
- 旧链接:后台题单详情的跳转、用户列表 -last_login 的转换
- 旧页面:布置作业必须带 language(null = 没选);不再清旧版出题页草稿
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-26 14:15:04 +08:00
xuyue and Claude Opus 5.5
9e074f3ab8
fix(路由检查): 改成单引号之后 check:routes 一条路由都没查,却照样报「没有遮蔽」
...
正则只认双引号,全仓换成单引号后匹配数变成 0。现在单双引号都认,查到 197 条。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-26 14:15:04 +08:00
xuyue and Claude Opus 5.5
6b5ca745bb
fix(出题页): 改了挑战点保存,提示「保存好了」其实一条都没存上
...
出题页发请求时漏了 challenges 这个字段,后端又把「不带」当成「不动原来的」,
所以改动被静默丢掉。现在出题页带上它,接口也改成必须带(null 是清空),
以后再漏传会直接报错,不会再悄悄丢。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-26 14:15:04 +08:00
xuyue and Claude Opus 5.5
195069450f
style(格式化): 改成单引号、一行最长 160,全仓重新格式化
...
Deploy / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-26 13:52:24 +08:00
xuyue and Claude Opus 5.5
530e1a3d5d
chore(格式化): 改用 Bun 自带的 bun fmt,格式检查从 2.7 秒降到 0.1 秒
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-26 13:45:53 +08:00
xuyue and Claude Opus 5.5
647186e276
fix(后台): 出题页收起的那几栏只有中间一行字能点,教程列表的项目行只有小三角能点
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-26 13:45:53 +08:00
xuyue and Claude Opus 5.5
36b3cd6b21
feat(结果): 判完之后测试点一格一格亮起来,错的那格写着第几组
...
Deploy / deploy (push) Canceled after 0s
借小丑牌结算时一张张牌亮起来:结果里每组测试点一个方块,从左往右依次亮,
对的绿、错的红并写组号,不到 1 秒亮完,提示和按钮亮完才出来,全对时亮完再放烟花。
大字和「通过几个」判完马上就有;只播刚交的那条,刷新、看旧提交、系统减少动画都直接全亮。
提交详情多给每组对没对(只有对错,不带数据),比赛照旧不给。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-26 09:56:32 +08:00
xuyue and Claude Opus 5.5
1a173f75d7
feat(挑战): 这节课做完了给「还能挑战」,挑战中编辑器顶上一条紫色的,老师看板上看得出谁在挑战
...
Deploy / deploy (push) Canceled after 0s
做完这节课(或题库里自己做对)之后列出还能挑战的题;去挑战后编辑器顶上写着要求,
没做到标出是哪几行,做到了写本班第几个、全站第几个。课堂看板做到的格子贴一枚紫色筹码、
在挑战的加一圈紫边,题卡片写挑战成功几人。出题页多一块「挑战」,能从做对的代码里找候选。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-26 08:52:50 +08:00
xuyue and Claude Opus 5.5
0faf78ad8f
feat(挑战): 做对之后可以加一条写法上的限制再做一遍,判题时记下谁做到了
...
借小丑牌的赌注档:同一道题加一条限制(「整首歌只用 1 次 print」)再做一遍,
给课上做得快的学生找事做(做完一节课的题,中位要空等 13 分钟)。
判定沿用 AST 规则,挑战配在 problem.challenges,做到的记在 challenge_success;
做对的提交顺手判一遍,挑战没做到也照样算做对。没过的规则带上是第几行。
0039 灌进第一批 56 道常用题的 73 条挑战,api 起来后拿历史上做对的代码补一遍谁已经做到了。
出题页能配挑战、从做对的代码里找候选;课堂看板的格子带上挑战状态。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-26 08:52:50 +08:00
xuyue and Claude Opus 5.5
cc1361e596
chore(数据): 一条命令把线上最新的库和测试点、图片拉到本机
...
docker/pull-prod.sh 经 ssh debian 只导 onlinejudge 一个库,灌进新库对过行数再换名,
旧库留作 onlinejudge_prev;--files 顺带同步测试点、题面图片、头像。对服务器只读。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-25 19:59:25 +08:00
xuyue and Claude Opus 5.5
2957db9ea9
fix(手机): 代码缩进显示不出来、相似题长标题挤出屏幕、登录框两边留灰边
...
Deploy / deploy (push) Canceled after 0s
- 题目页编辑器:手机上折行时把行首空格合并掉了,代码看着全部顶格(代码本身没丢)
- 相似题推荐:长标题把难度挤出屏幕,现在出省略号
- 登录、注册、看板「讲错误」:本该铺满整屏,被全站弹框「左右各留 16px」卡窄;
高度跟着浏览器工具栏变,底下的入口不再被压住
- 排名页底部三张小卡:「这学期 · 本年级」被截断,现在放不下就折两行,名次对齐
- 我的主页:「成就 · 一共 38 个」不再把「个」单独挤到第二行
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-25 18:56:24 +08:00
xuyue and Claude Opus 5.5
b0700d0bd9
fix(界面): 能点的文字平时就是绿色,不用再把鼠标移上去才看得出能点
...
Deploy / deploy (push) Canceled after 0s
首页「全部」、提交详情的用户名和题名、题目页「点开看全部」「有 N 道差一点」、
班级对抗的班级名、知识点、后台标题等 30 多处原来和正文同色,鼠标移上去才变色,
手机上根本没有「移上去」。现在一律主题绿,移上去加下划线;没设颜色的文字按钮补上
type="primary"。排名名字列、整行可点的列表、后台 quaternary 次要按钮不动。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 10:39:49 +08:00
xuyue and Claude Opus 5.5
b3dca1a271
perf(判题): SQL 题每次判题少等约 50ms,后端起服务快一倍
...
Deploy / deploy (push) Canceled after 0s
单二进制改用预编译字节码(--bytecode --format=esm)。SQL 判题每题都要起一次子进程,
单核实测从约 120ms 降到约 72ms;serve 起服务约 180ms → 100ms,内存不变,二进制大 8MB。
编译形态在仓库外实跑过:migrate / healthcheck / serve / worker 能起,C 题判对、
AST 规则判出 10、jieba 分词、SQL 子进程的判题与展示都和 dev 形态结果一致。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 09:16:32 +08:00
xuyue and Claude Opus 5.5
eb0309ae35
chore(构建): Bun 锁到 1.4.4,CI 和镜像不再跟 latest;后端类型检查换成 bun check
...
单二进制把运行时一起打进去,CI 装的是几线上就是几,之前三处都不锁(@types/bun latest、
setup-bun latest、oven/bun:1),1.4.x 每版都有破坏性变更会悄悄上线。
顺带 bunfig 加 minimumReleaseAge = "3d",@types/bun 除外。
后端 typecheck 从 tsc 换成 bun check,1.9s → 0.26s,报错一致。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-23 09:13:21 +08:00
xuyue and Claude Opus 5.5
b3f5ed41ae
fix(文案): 不再用「他」称呼学生,男生女生看着都别扭;老师看主页的按钮改成「智能分析」「提交记录」
...
Deploy / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-22 10:41:24 +08:00
xuyue and Claude Opus 5.5
a718394284
fix(年度趋势): 默认先打开 25 级,新一届没正式上课前只做过几道题,不再默认停在它上面
...
Deploy / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-20 21:30:11 +08:00
xuyue and Claude Opus 5.5
f7c4af0c01
fix(年度趋势): 刚学一个月的届不再拿去和学了一年多的往届比,两边都只算同样学了这么久时做的
...
Deploy / deploy (push) Canceled after 0s
以前往届那一侧把所有记录都算进去,25 级比 24 级显示 73% / 82%,
其实 24 级在这些题上近一半是学了半年以上才做的;同期比是 73% / 75%。
现在每个人以自己第一次交题为起点,两边都只算离起点不超过 N 天的人题对,
N = 两届里学得短的那届一半人开始做题到现在的天数。按人不按日历,因为各届
开始做题的时间不一样(25 级第二年才开始)。比哪届改成后端算,接口带 grade / compare。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-20 21:21:22 +08:00
xuyue and Claude Opus 5.5
e3c0507d41
feat(设置): 能查出并删掉没人用的图片,编辑器里删掉的图和换下来的头像都算
...
Deploy / deploy (push) Canceled after 0s
编辑器里删图、学生换头像都只改库不删文件,盘上越积越多。设置页加「没人用的图片」,
点「查一下」才扫(要扫整个库,不在进页面时跑),按编辑器插图 / 头像分两组,
缩略图可点开,单张删或整组删(先确认)。
判定宁可多留:扫库里每张表的每个文本列,文件名在哪儿出现过都算在用(老域名、
markdown 写法都认,不分大小写);只看 png/jpg/gif/bmp,目录里的 mp4 不碰;
一天内传的不算(可能还在编辑器里没保存);库里一张图都没提到时什么也不列(多半连错了库);
删之前重新扫一遍。服务器和机房图片目录各一份,要各清各的。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-20 20:50:02 +08:00
xuyue and Claude Opus 5.5
4000b3a9f0
feat(后台富文本): 图片可以拖四个角缩放,拖完的宽度学生端照样生效
...
Deploy / deploy (push) Canceled after 0s
点中或悬停图片四角出把手,按原比例缩放。宽写回 style、去掉高(学生端高一律 auto):
老题面的图片尺寸都在 style 里,Tiptap 自带的 resize 写的是 width / height 属性,
被 style 盖住,拖完存下来还是原尺寸,所以自己接了 ResizableNodeView。
解析和输出没动,不拖的图片打开再保存和原来一样。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-20 20:35:56 +08:00
xuyue and Claude Opus 5.5
9e2217e09d
refactor(后台富文本): 编辑器从 wangEditor 换成 Tiptap,老题面的图片尺寸、缩进、颜色打开再保存都不丢
...
Deploy / deploy (push) Canceled after 0s
拿库里全部 3384 条题面 / 提示 / 公告 / 比赛说明做过往返比对,补上图片 style、base64 图片、
段落缩进三处后文字和格式都对得上。工具栏照画布做成一行浅灰小图标,四套档位不变,
加了行内代码、光标在表格里出加删行列。表格格子里的段落在学生端不再把行撑高。
编辑器 JS 638 kB → 455 kB,wangEditor 的 39 kB 样式不用了;polyfill 清单重新审过,
去掉只有 wangEditor 用到的 web.immediate。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-20 20:20:13 +08:00
xuyue and Claude Opus 5.5
a2dcafae14
refactor(前端): 去掉 nanoid 和 date-fns;「12月」这种时长改说「1年」,年月按东八区日历数
...
Deploy / deploy (push) Canceled after 0s
时长拆分(比赛倒计时、比赛时长、主页「最近一次提交」)改用自己写的东八区日历差,
和 zonedParts 同一个口径,不再跟浏览器时区走。顺手删掉几次重设计后已经没人用的
getRandomId、durationFromValue 和 DURATION_OPTIONS / LONG_DURATION_OPTIONS。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-20 19:47:34 +08:00
xuyue and Claude Opus 5.5
d6c3171d13
refactor(请求): 去掉 axios,所有请求统一从 authFetch 出门;换 token 时断网不再平白弹登录框
...
Deploy / deploy (push) Canceled after 0s
utils/api 改成基于 authFetch 的一层 fetch 封装,调用方用法不变;下载测试点也走
authFetch,token 过期时会换一张重试。换 token 那一步断网时,AI 流式接口和自学上报
原来会拿掉 token 重发、弹登录框,现在和普通请求一样报「网络异常」。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-20 19:39:19 +08:00
xuyue and Claude Opus 5.5
13843c79a0
fix(登录): 两个标签页同时换 token 时,学生可能过一刻钟被莫名踢下线
...
Deploy / deploy (push) Canceled after 0s
refresh token 轮换原来是「读出来、查库、写回去」,两个标签页同时换会各自轮换出一张,
后写的冲掉先写的;浏览器里留下的若是被冲掉那张,下次换就被拒。机房走 http 用不了
navigator.locks,前端没法让标签页排队。
- 轮换改成比对再写入(Lua),抢输的重读后走宽限期
- 宽限期里回的是当前那张 refresh token,不再回 null,几个标签页最后落到同一张上
- 响应丢了、前端拿旧的重试,也由同一支接住
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-20 19:27:08 +08:00
xuyue and Claude Opus 5.5
793848b06f
refactor(登录): 登录态从 Cookie 换成 access token + refresh token
...
Deploy / deploy (push) Canceled after 0s
- access token 是 15 分钟的 JWT,走 Authorization: Bearer;refresh token 7 天,每次换都轮换
- 退出登录、改密码、禁用账号仍然立刻生效:每个请求核对 Redis 会话和库里新加的 user.token_version
- 在服务器后台改密码 / 禁用,机房那边登着的也会一起下线(原来两边 Redis 分开,管不到)
- WebSocket 握手借子协议带 token;JWT 密钥存在本站 Redis,部署不用加配置
- 去掉 COOKIE_SECURE;上线后所有人要重新登录一次
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-20 19:22:52 +08:00
xuyue and Claude Opus 5.5
4be569d978
chore(文档): CLAUDE.md 瘦身,后端专属的坑挪进 apps/api/CLAUDE.md,并改正「推 origin 不部署」的说法
...
Deploy / deploy (push) Canceled after 0s
- 单二进制、runtime.ts、SQL 自 spawn、路由遮蔽、出参 satisfies、外键与迁移原样搬到
apps/api/CLAUDE.md,只在动后端文件时加载;根文件留一行指路
- Chrome 105 的 polyfill 审计细节挪到 apps/web/CLAUDE.md
- 删掉 ls 就能看到的仓库结构表,以及 docs/database.md、docker/judge/README.md 已有的重复步骤
- origin 会镜像到 github,平时推 origin 通常也就部署了(CLAUDE.md 与 deploy.md 原来写的是不触发)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-20 18:18:24 +08:00
xuyue and Claude Opus 5.5
51c3c16fd5
feat(题目): 参考流程图点一下能放大看,手机上宽图横着滚、按返回先关弹框
...
Deploy / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-20 17:01:33 +08:00
xuyue and Claude Opus 5.5
67fcd11907
feat(题目): 参考流程图不用再点开,摊在例子后面,画法和学生自己画的图一样
...
Deploy / deploy (push) Canceled after 0s
原来折成一条「老师给的参考流程图」要点开,用 Mermaid 画、整张缩进左栏后字只剩十来像素。
现在默认摊开、放在例子后面(长图不把例子挤出第一屏),用画流程图那套排版和符号画
(FlowchartView,颜色形状和画布共用 paint.ts);只有手写 Mermaid 的老图照旧走 Mermaid。
出题页预览和说明文字一起改。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-20 16:56:44 +08:00
xuyue and Claude Opus 5.5
1a90a81868
feat(提交列表): 左边列表窄屏自动收窄,不用再手动点底栏的按钮
...
Deploy / deploy (push) Canceled after 0s
分栏不到 1200 宽(屏窄、或者浏览器放大了一档,右边的代码按 46 : 54 分看不全)
就自动收成两行的排法;1280 的屏不放大照旧是宽列表。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-20 10:36:03 +08:00
xuyue and Claude Opus 5.5
df152f505d
feat(课堂看板): 「这节课」写上是哪位老师布置的,别的老师改题也不换人
...
Deploy / deploy (push) Canceled after 0s
看板题号后面从「09:56 布置」变成「09:56 徐越 布置」,老师首页「今天的课」同样带上名字。
老师写真名(用户名 lwp0201、little 认不出是谁),没填真名的退回用户名。
「改」不再覆盖 created_by,和布置时间一样认第一次布置的人。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-20 09:56:46 +08:00
xuyue and Claude Opus 5.5
3fa897bec1
revert(流程图): 去掉「显示时自动认老参考图的框」——线上 36 张参考图已经全部转成结构树
...
Deploy / deploy (push) Canceled after 0s
c4306b0 是给手写 Mermaid 的老参考图兜底的;36 张已经在线上逐题转成画布格式(自动转 19 张、
照原图手工画 10 张,重复的比赛题 7 张),回读核对过其余字段没变,线上不再有没标种类的图。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-19 22:27:46 +08:00
xuyue and Claude Opus 5.5
e91f7cabc4
style(题目): 「你画的流程图」缩略图从 150px 加高到 260px,框里的字看得清
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-19 22:18:28 +08:00
xuyue and Claude Opus 5.5
c4306b092d
fix(流程图): 老师给的参考流程图是一堆彩色方框,和学生画的标准符号对不上
...
题面里的 36 张参考图都是 2026-10 之前手写的 Mermaid,一个框的种类都没标,只能按字分彩色。
显示前按写法和字认框(花括号是判断、开始结束是起止、以输入 / 输出 / 打印开头或写着
input( / print( 的是输入输出框,其余是处理框),换成标准形状和配色。数据不动;
学生的老提交都标了种类,不受影响。36 张全部渲染过,框数不变。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-19 22:18:28 +08:00
xuyue and Claude Opus 5.5
941cd64252
fix(题目): 题面「你画的流程图」缩略图只露出中间一截,要上下滚才看得全
...
Deploy / deploy (push) Canceled after 0s
pele 在图上写了内联的 height: auto,盖掉了按框高缩小的样式,图按原尺寸塞进 150px 的框。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-19 22:14:30 +08:00
xuyue and Claude Opus 5.5
9ae6287fb1
feat(流程图): 没画对也分得出远近——五档说法、完成度条、比上次多对了几组;右栏的图放大
...
只说「还没画对」,学生改了几次还是这一句,看不出在往前走。等级照旧存 S/A/B/C,
标题换成话:画对了,画得很清楚 / 画对了 / 快画对了 / 对了一部分 / 还没画对;
下面一根完成度条,走对几组亮几段;第二次起没画对时说比上次多(少)对了几组
(详情接口带上同一道题上一次走对了几组)。提交列表右栏的图从 42% 加宽到 62%,
小图也放大填满图框(最多 1.5 倍)。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-19 22:11:42 +08:00
xuyue and Claude Opus 5.5
ba90fe893e
feat(流程图): 结果先说「还没画对 / 画对了」和哪里错、怎么改,逐组数据收成一行点开才看
...
学生不关心过了几组数据。标题不再写「6 组走对 3 组」;点评做主体(AI 没写出来时
拿程序找到的第一处现象顶上);画布上只把要改的框标红、旁边写「要改这个框」,
别的框不再变淡,点开某一组才亮它走过的路;画对了直接给「照着它写代码」。
提交列表右栏老师看到的和学生一样,逐组数据也收着。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-19 22:03:16 +08:00
xuyue and Claude Opus 5.5
d2fc0382ec
feat(流程图): 没走对的图,AI 对照答案说出错在哪个框、该怎么改,并把那个框标红
...
原来只有程序拼出的现象(「输出 a」输出的是 2,应该是 8),指的是出结果的框,
错的根子常在前面,学生和老师都看不出该改哪里。跑完以后再请 AI 看题目、图、
没走对的几组和老师的答案,写「哪里错了 / 可以这样改」两句,指出真正要改的框;
提交列表右栏的图和题目页画布上标红它。等级照旧只由跑出来的结果定,
点评失败或像代码就不要,退回只显示逐组结果。老提交不补。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-19 21:52:05 +08:00
xuyue and Claude Opus 5.5
8bd3d998ae
fix(提交列表): 筛选栏折成两行时「统计」单独掉下去会跑到最左边
...
Deploy / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-19 21:41:47 +08:00
xuyue and Claude Opus 5.5
0f75fd1bd0
fix(提交列表): 流程图右栏窄时题目名被「查看大图」「重新评分」挤成一个字
...
右栏不到 760 宽时这两个按钮只留图标,字放进悬停提示。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-19 21:41:47 +08:00
xuyue and Claude Opus 5.5
5c997b6276
fix(提交列表): 窗口窄时筛选栏的学生、题号框被压扁,「统计」被挤出屏幕
...
排不下就折成两行,各个框保持原宽;1280 以上照旧一行、高度不变。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-19 21:38:53 +08:00
xuyue and Claude Opus 5.5
a24bb6c80b
feat(提交列表): 底栏加一个按钮把左边列表收窄,代码区留宽一点
...
收窄后每条排成手机上那样的两行(名字 + 结果、时间 + 题目 + 语言),
翻页换成「页码 / 总页数」;收没收着记在本机。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-19 21:37:00 +08:00
xuyue and Claude Opus 5.5
c6458eb373
fix(提交列表): 屏窄或浏览器放大时,右栏顶上的按钮和底栏「本页第几条」被切掉
...
右栏宽度不到 600 时顶行固定拆成两行(名字和按钮一行、题目一行),
底栏收起方向键提示;不到 440 再收起「本页第几条」,让给两个复制按钮。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-19 21:37:00 +08:00
xuyue and Claude Opus 5.5
d1b47e268e
fix(提交列表): 停在第一页时右栏每 15 秒重载一次,放大看的流程图被自己关掉
...
Deploy / deploy (push) Canceled after 0s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-19 21:23:51 +08:00
xuyue and Claude Opus 5.5
5f1c9072eb
fix(课堂看板): 布置题目时题号打到一半,每 15 秒被清空一次
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-19 21:21:07 +08:00
xuyue and Claude Opus 5.5
67b13a9345
fix(流程图): 老提交重新评分后四项明细全显示「0 / 0」
...
Deploy / deploy (push) Canceled after 0s
老办法(四项打总分)的 prompt 只写了 "criteria_details":{},模型换成 deepseek-flash
之后直接给 {"逻辑正确性": 32} 这样的裸数字,详情页读不到 score / max。prompt 里把
四项的形状写全,存之前按 { score, max, comment } 收好(缺满分按 40/30/20/10 补);
0036 把线上已经存进去的 4 条改回来。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-19 21:11:35 +08:00
xuyue and Claude Opus 5.5
d8e0efd05e
feat(课堂看板): 做对的格子写第几次做对,点开看他今天交的每一次和代码
...
- 格子:一次就对的还是「✓」,第 9 次才对的写「✓ 9」
- 点做对的格子弹出方块串(一格一次、从早到晚),停在哪格看哪次的代码,
默认停在做对前最后错的那次;下面能开这次提交、去提交列表看全部
- 方块配色和代码缓存从统计页的 AttemptSquares 抽到 statistics/attempts.ts 两边共用
- 点开一道题后面板里的题名可以点,新标签打开题目
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-19 21:09:35 +08:00
xuyue and Claude Opus 5.5
940895f643
feat(课堂看板): 接口给做对了的格子带上今天每一次代码提交和第几次做对
...
原来今天最后一次提交只给没做对的格子;现在同一条查询取今天全部,做对了的格子
多带 trail(从早到晚的 id / 结果 / 时间)和 acceptedTry(今天第几次做对,
以前就做对了的为 null)。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-19 21:09:35 +08:00
xuyue and Claude Opus 5.5
38360e8668
perf(流程图): 流程图改用 pele 渲染,懒加载从 200 kB 降到 44 kB(gzip)
...
Deploy / deploy (push) Canceled after 0s
mermaid 换成 obsidianmd/pele:同一套 Mermaid 语法、同步渲染、没有依赖。
库里 2170 张图(题目参考图 36、学生提交 2134)两边逐张对过,能画的和报错的完全一致。
配色按 pele 的 DOM 重写选择器,颜色不变;版本锁死在 1.6.0。
顺带按 modernPolyfills: true 重新探测了 polyfill 清单(50 项),并改正注释里
「DEBUG 会打印全集」的说法 —— 写死清单时它只回显清单。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-19 20:50:17 +08:00
xuyue and Claude Opus 5.5
a1d14a06bc
refactor(卡点分析): 右栏一道题的详情拆成 StuckDetail 组件
...
Deploy / deploy (push) Canceled after 0s
Stuck.vue 从 1006 行减到 544 行,右栏(做过几人、一次就对、错在哪、各班、交了几次才对、
历年、还没做对的人)连同它的计算和样式挪到 components/StuckDetail.vue;取数、三栏联动、
手机上整屏盖住的那层还在 Stuck.vue。两边都用的百分比和平均次数放 stuckMath.ts,
两边都用的几条小样式(muted / num / track …)各留一份。
纯搬家。全部班级、选一个班、手机打开一道题的详情,各自的顶部和滚到底改前改后截图一致。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-19 20:40:27 +08:00
xuyue and Claude Opus 5.5
ef7d065419
refactor(课堂看板): 布置题号、请假框拆成组件,格子的显示规则挪成纯函数
...
board.vue 从 1480 行减到 1283 行:
- components/LessonForm.vue:布置这节课的题(顶上一行的小条和刚上课时的大框是同一个组件的
两种样子,语言默认、推断的题带进框里这些规则跟着走)
- components/LeaveModal.vue:请假框(谁能算请假的规则还在看板,框里只管勾)
- boardCells.ts:格子的字、颜色、悬停说明和「卡住」的次数线,同 errorKind.ts 的做法
纯搬家。看板、选中一道题、请假框、勾了请假、顶上编辑、刚上课的大框(电脑 / 手机)改前改后
截图一致(唯一不同是测试学生的「在线」五分钟后过期变成「5 分钟前在」);顶上一行布置 /
清掉、大框布置、请假确定后「请假 1 人」并排到最下、再打开勾选还在、全部取消都正常。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-19 20:37:13 +08:00
xuyue and Claude Opus 5.5
871861220e
refactor(提交列表): 选中翻阅、实时更新、「这节课」、带条件去统计拆成四个 composable
...
list.vue 从 1834 行减到 1604 行,拆出 oj/submission/composables/ 下的
rowCursor(↑ ↓ 换条、页头页尾自动翻页)、listLive(正在评分的 3 秒刷新、第一页的
「有 N 条新提交」)、lessonFilter(「这节课」一键筛)、statsLink(和统计之间来回带条件)。
注释原样跟着走。
纯搬家。七个状态(列表、↓↓、↑、流程图、我的、手机列表、手机详情)改前改后截图一致;
连按 31 下 ↓ 翻到第 2 页,别人交一条后 18 秒内出「有 1 条新提交」,「这节课」筛到
班级 + 题号 + 今天。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-16 15:48:43 +08:00
xuyue and Claude Opus 5.5
ff3fdc0b1d
refactor(出题页): 编程题和 SQL 题两个出题页抄了两份的零件收到一处
...
Deploy / deploy (push) Canceled after 0s
admin/problem/components/problemForm.ts:判空富文本 isBlankHtml(原来三份,CodePreview 里还有
一份)、难度选项、返回列表的路由、保存失败的提示、标签超长校验、新建页的草稿
(useCreateDraft:停 0.8 秒存、什么都没填就清、编辑页不存)。
纯搬家。新建 / 编辑 × 编程 / SQL 四个页面改前改后整页截图逐像素一致;两种新建页填个
标题、刷新能恢复,「清空草稿」之后本地存储清掉。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-16 15:43:25 +08:00
xuyue and Claude 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
xuyue and Claude Opus 5.5
d4aadc7722
fix(后台列表): 加载失败有提示、慢的时候表格转圈、旧请求晚回来不再盖掉新结果
...
Deploy / deploy (push) Canceled after 0s
后台八个列表(题目、比赛、用户、公告、题单、AI 报告、从题库加题、标签下的题)原来是
`const res = await getXxx(); rows.value = res.results`:接口 500 或断网时什么都不提示,
表格停在旧数据上;关键词防抖和翻页一交错,先发的晚回来会把新结果盖掉。
shared/composables/listLoader.ts 的 track() 把请求包一层:带请求序号、出错按后端文案提示
(登录过期、没权限这几种全局拦截器已经提示过,不弹第二遍)、表格挂 loading。
实跑:六个列表各 10 行正常;拦掉题目列表的接口再翻页,弹「网络异常,请检查网络后重试」
(原来没有任何反应)。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-16 15:07:10 +08:00
xuyue and Claude Opus 5.5
4dfd14f95b
refactor(契约): 前端 60 个写请求的请求体接上契约类型,前后端对不上编译期就报
...
Deploy / deploy (push) Canceled after 0s
- 前端 oj/api.ts、admin/api.ts、shared/api.ts 的 post / put 请求体一律 `satisfies XxxRequest`,
只在编译期检查,不加运行时校验(和「只在三处挂运行时闸门」的规矩一致)
- 契约里的 XxxRequest 从 z.infer 改成 z.input:请求类型描述的是「客户端可以发什么」,
带默认值的字段可以不传。后端从不用这些类型(它用 parse 出来的 data),不受影响
- 补了四个漏导出的请求类型(比赛题目排序、题单题目排序、标签分类、检查用户名)
- 接上之后对不上的几处:编辑用户的角色和题目权限经 toAdminType / toProblemPermission
收窄,导入用户的行改成四元组,练习题数据改成 Record,格式化的语言只收后端认的四种
(isFormatLanguage)。出题页和成就的请求体是「表单校验兜底、出站补默认值」,
用 Partial<…> 只核键名和值的类型
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-16 15:03:58 +08:00
xuyue and Claude 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