feat: 改版阶段 4:挑战列表页、教程按小节存代码、出题页合并、用户管理、整站暗色
Deploy / deploy (build, debian, 22) (push) Canceled after 0s

- 挑战列表改成独立页面(ChallengeHome):每题一行,完成状态、分值、出题人,可按未做 / 已交筛选;
  教程面板只放教程
- 教程每一节的代码各存一份(和挑战同一个按任务的 key),切回来时还在,第一次才放示例代码;
  提交列表“复制到编辑器”对教程也写入该任务的代码
- 教程 / 挑战出题页合并为 TaskEditor:“提交”改为“保存”,保存后停在当前项,删除前说明会连带删除学生提交;
  admin 也能在列表里切换挑战是否公开(保存时本来就能设)
- 用户管理:初始密码默认隐藏,封号前确认,批量新建说明用户名规则
- 整站暗色:顶栏切换跟随系统 / 亮色 / 暗色;Naive 暗色主题、markdown 和代码高亮的暗色覆盖
  (styles/dark-content.css 由 GitHub 暗色样式生成)、CodeMirror One Dark 配色、md-editor 暗色;
  组件里剩下的硬编码颜色全部换成配色变量

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
xuyueandClaude Opus 5.5 committed 2026-10-27 08:17:43 +08:00
1 parent df3f842dac
commit 8653d411a6
40 files changed
+1208 -851

No files matched your search

+8 -8
View File
@@ -160,11 +160,11 @@ watch([() => messages.value.length, streamingContent], () => {
font-size: 12px;
font-weight: bold;
margin-bottom: 4px;
color: #888;
color: var(--wp-muted);
}
.guidance-msg.user .msg-role {
color: #2080f0;
color: var(--wp-css);
}
.guidance-msg.assistant .msg-role {
@@ -172,8 +172,8 @@ watch([() => messages.value.length, streamingContent], () => {
}
.guidance-msg.assistant .msg-content {
background: #f0f7ff;
border-left: 3px solid #2080f0;
background: var(--wp-css-soft);
border-left: 3px solid var(--wp-css);
padding: 8px 12px;
border-radius: 0 6px 6px 0;
font-size: 14px;
@@ -183,7 +183,7 @@ watch([() => messages.value.length, streamingContent], () => {
.guidance-msg.user .msg-content {
font-size: 14px;
line-height: 1.6;
color: #333;
color: var(--wp-ink);
}
.msg-content :deep(p) {
@@ -198,9 +198,9 @@ watch([() => messages.value.length, streamingContent], () => {
font-size: 13px;
font-weight: 500;
padding: 6px 10px;
background: #f0fff4;
background: var(--wp-brand-soft);
border-radius: 6px;
border: 1px solid #b8e8cc;
border: 1px solid var(--wp-brand-soft);
}
.typing-indicator {
@@ -213,7 +213,7 @@ watch([() => messages.value.length, streamingContent], () => {
width: 7px;
height: 7px;
border-radius: 50%;
background: #2080f0;
background: var(--wp-css);
animation: bounce 1.4s ease-in-out infinite;
}