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>
This commit is contained in:
xuyueandClaude Opus 5.5 committed 2026-11-02 23:41:49 +08:00
1 parent 221d264701
commit 2bda05a978
32 files changed
+229 -111

No files matched your search

+3 -2
View File
@@ -1,3 +1,4 @@
import { displayName } from '@oj2/contract'
import type { LessonMode } from '@oj2/contract'
import type { Tone } from 'shared/composables/tone'
import { parseTime } from 'utils/functions'
@@ -114,11 +115,11 @@ export function cellTitle(cell: TaskBoardCell, student: TaskBoardStudent, day: s
if (stage === 'draw') {
const latest = cell.flowchart?.latest
if (latest?.status === 0 || latest?.status === 1) return 'AI 正在评这张图'
return latest ? `讲讲 ${student.username} 这张图哪里画错了` : '还没画对'
return latest ? `讲讲 ${displayName(student.username)} 这张图哪里画错了` : '还没画对'
}
if (stage === 'nodraw') return '代码做对了,流程图还没画'
if (halfDone(cell, mode)) return '流程图画对了,代码还没交'
if (cell.latest) return `讲讲 ${student.username} 这道题的错`
if (cell.latest) return `讲讲 ${displayName(student.username)} 这道题的错`
if (mode === 'both' && cell.flowchart?.status === 'accepted') return '流程图画对了,代码以前交过、没做对'
return cell.attempts ? `今天画了 ${cell.flowchartAttempts} 张流程图` : '以前交过,没做对'
}
@@ -1,4 +1,5 @@
<script setup lang="ts">
import { displayName } from '@oj2/contract'
import type { TaskBoardStudent } from 'utils/types'
/**
@@ -68,7 +69,13 @@ function save() {
</n-button>
</div>
<div class="leave-grid">
<n-checkbox v-for="student in section.students" :key="student.userId" :value="student.username" :label="student.username" class="leave-option" />
<n-checkbox
v-for="student in section.students"
:key="student.userId"
:value="student.username"
:label="displayName(student.username)"
class="leave-option"
/>
</div>
</div>
</n-checkbox-group>
+3 -2
View File
@@ -1,4 +1,5 @@
<script setup lang="ts">
import { displayName } from '@oj2/contract'
import { Icon } from '@iconify/vue'
import { useThemeVars } from 'naive-ui'
import { getTaskBoard } from 'oj/api'
@@ -714,7 +715,7 @@ function lastText(student: TaskBoardStudent) {
class="plain"
:href="submissionsHref(student, undefined, !student.codeToday)"
target="_blank"
:title="`看 ${student.username} 今天交的全部`"
:title="`看 ${displayName(student.username)} 今天交的全部`"
>
<UserName :username="student.username" />
</a>
@@ -733,7 +734,7 @@ function lastText(student: TaskBoardStudent) {
v-else-if="student.editing"
type="button"
class="where"
:title="`打开 ${student.username} 正在写的 ${student.editing}`"
:title="`打开 ${displayName(student.username)} 正在写的 ${student.editing}`"
@click="peek(student.userId)"
>
{{ student.editing }}