diff --git a/src/types/classroom.ts b/src/types/classroom.ts index f512927..b3ce7ae 100644 --- a/src/types/classroom.ts +++ b/src/types/classroom.ts @@ -107,6 +107,9 @@ export interface Classroom { /** 绑定班级 id(null=未绑定) */ classId?: number | null; className?: string | null; + /** 绑定班级的年级(1=高一 2=高二 3=高三) */ + grade?: GradeValue | null; + gradeName?: string | null; studentCount?: number | null; headTeacher?: string | null; } diff --git a/src/views/classroom/ClassroomManage.vue b/src/views/classroom/ClassroomManage.vue index 377b582..17fd083 100644 --- a/src/views/classroom/ClassroomManage.vue +++ b/src/views/classroom/ClassroomManage.vue @@ -17,6 +17,9 @@ import type { Equipment, } from "@/types/classroom"; +/** 年级值 → 展示名(绑定班级详情行用) */ +const GRADE_LABELS: Record = { 1: "高一", 2: "高二", 3: "高三" }; + /** * 教室管理(核心页)· 三栏布局 * @@ -500,6 +503,27 @@ const focusBuildingName = computed( () => buildings.value.find((b) => b.serID === focusRoom.value?.buildingId)?.buildingName ?? "" ); +/** + * 详情面板的绑定班级行。树回退行没有班级字段(classId 为 undefined)→ 全部显示"—"; + * 未绑定(classId 为 null)→ 班级行显示"未绑定";已绑定 → 年级/班级/班主任/人数。 + */ +const focusClassRows = computed(() => { + const fr = focusRoom.value; + const dash = "—"; + if (!fr || fr.classId === undefined) { + return { grade: dash, className: dash, headTeacher: dash, studentCount: dash }; + } + if (fr.classId == null) { + return { grade: dash, className: "未绑定", headTeacher: dash, studentCount: dash }; + } + return { + grade: fr.gradeName || (fr.grade != null ? GRADE_LABELS[fr.grade] ?? dash : dash), + className: fr.className || dash, + headTeacher: fr.headTeacher || dash, + studentCount: fr.studentCount == null ? dash : `${fr.studentCount} 人`, + }; +}); + /** 布局示意图几何(按座位数生成课桌网格;多媒体区按设备名判断) */ const plan = computed(() => { const fr = focusRoom.value; @@ -1225,6 +1249,22 @@ onMounted(async () => { +
+ 年级 + {{ focusClassRows.grade }} +
+
+ 班级 + {{ focusClassRows.className }} +
+
+ 班主任 + {{ focusClassRows.headTeacher }} +
+
+ 人数 + {{ focusClassRows.studentCount }} +