refactor(web): Header 只管顶栏,全局的东西挂回 App
Header 一直兼着「全局挂载点」:课堂求助的提示、新求助 toast、求助列表和 教师端协作弹框都寄生在里面,只因为顶栏是全局的。它其实不是 —— /admin/* 走的是 admin.vue,没有 Header,老师一进后台这四个消费者全部 卸载:求助照收,提示、角标、弹框一个都不出现,正好是 collab.ts 里写的 「老师可能正在后台改题时收到求助」那个场景。 这些东西跟着连接走,而连接在 App.vue 按登录态开关,所以搬进 CollabHost 挂在同一层。Header 因此不必再是单根组件,default.vue 那个靠 class 传 居中样式的写法也换成外层 div,连带删掉「必须挂在根 n-flex 内部」那段 补丁注释。 顺带: - 圆环扩散的暗黑切换抽成 useDarkTransition - 求助的角标/toast/列表不再限桌面端 —— 老师缩窗口也得知道有人在等; 接单确实要在电脑上写代码,那道闸挪进 HelpRequestList - 站名改 text 按钮,能 tab 到、回车能按 - logout 的两步收进 userStore.signOut() - 清掉死代码:handleMenuSelect 只认一个不存在的 key、active 里 ["user","setting"] 永远不生效的排除、两个 show:false 的菜单项 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QqqZwxtXLo2GTqMi51C94D
This commit is contained in:
@@ -35,8 +35,13 @@ export const useCollabStore = defineStore("collab", () => {
|
||||
const teacherName = ref("")
|
||||
/** 双方:当前房间。null 表示不在协作中 */
|
||||
const room = ref<RoomInfo | null>(null)
|
||||
/** 一次性提示,由 Header 统一消费后清空 */
|
||||
/** 一次性提示,由 CollabHost 统一消费后清空 */
|
||||
const notice = ref("")
|
||||
/**
|
||||
* 求助列表弹框开着没有。放在 store 里而不是组件内部:打开它的入口(顶栏的
|
||||
* 姓名下拉、新求助 toast)和弹框本身已经不在同一棵子树里了。
|
||||
*/
|
||||
const helpPanelOpen = ref(false)
|
||||
/**
|
||||
* 提示序号,每次设置都自增。
|
||||
*
|
||||
@@ -57,7 +62,10 @@ export const useCollabStore = defineStore("collab", () => {
|
||||
|
||||
/** 按题目聚合,同题多人时老师能一眼看出该停下来全班讲 */
|
||||
const groupedRequests = computed(() => {
|
||||
const groups = new Map<string, { problemId: string; problemTitle: string; items: CollabRequestItem[] }>()
|
||||
const groups = new Map<
|
||||
string,
|
||||
{ problemId: string; problemTitle: string; items: CollabRequestItem[] }
|
||||
>()
|
||||
for (const item of requests.value) {
|
||||
const group = groups.get(item.problemId)
|
||||
if (group) group.items.push(item)
|
||||
@@ -155,6 +163,7 @@ export const useCollabStore = defineStore("collab", () => {
|
||||
teacherName.value = ""
|
||||
room.value = null
|
||||
notice.value = ""
|
||||
helpPanelOpen.value = false
|
||||
}
|
||||
|
||||
function requestHelp(problemId: string, language: LANGUAGE) {
|
||||
@@ -211,6 +220,7 @@ export const useCollabStore = defineStore("collab", () => {
|
||||
room,
|
||||
notice,
|
||||
noticeSeq,
|
||||
helpPanelOpen,
|
||||
isTeacher: computed(() => userStore.isTeacherOrAbove),
|
||||
connect,
|
||||
disconnect,
|
||||
|
||||
Reference in New Issue
Block a user