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