教室修改
build / build (push) Successful in 4m5s

This commit is contained in:
wanghu
2026-10-20 10:56:54 +08:00
parent 412c23c498
commit d79becc317
4 changed files with 14 additions and 19 deletions
+1 -1
View File
@@ -201,7 +201,7 @@ class ClassroomApi {
batchAdd(req: ClassroomBatchAddRequest) { batchAdd(req: ClassroomBatchAddRequest) {
return postJSON<BatchAddResult>(`${CLASSROOM}/BatchAdd`, req as unknown as Record<string, any>); return postJSON<BatchAddResult>(`${CLASSROOM}/BatchAdd`, req as unknown as Record<string, any>);
} }
/** 编辑教室(类型/名称/编号/状态/容纳人数/座位数) */ /** 编辑教室(类型/名称/编号/状态/座位数) */
edit(req: ClassroomEditRequest) { edit(req: ClassroomEditRequest) {
return postJSON<void>(`${CLASSROOM}/Edit`, req as unknown as Record<string, any>); return postJSON<void>(`${CLASSROOM}/Edit`, req as unknown as Record<string, any>);
} }
+3 -3
View File
@@ -41,7 +41,7 @@ export interface Building {
} }
/** 教室列表排序字段(与后端 classroom/List 的 sortField 对齐) */ /** 教室列表排序字段(与后端 classroom/List 的 sortField 对齐) */
export type ClassroomSortField = "floor" | "roomCode" | "roomName" | "status" | "capacity" | "seatCount"; export type ClassroomSortField = "floor" | "roomCode" | "roomName" | "status" | "seatCount";
/** 排序方向 */ /** 排序方向 */
export type SortOrder = "asc" | "desc"; export type SortOrder = "asc" | "desc";
@@ -97,7 +97,6 @@ export interface Classroom {
typeId: number | null; typeId: number | null;
typeName?: string; typeName?: string;
status: ClassroomStatus; status: ClassroomStatus;
capacity: number;
seatCount: number; seatCount: number;
campusName?: string; campusName?: string;
buildingName?: string; buildingName?: string;
@@ -148,6 +147,8 @@ export interface ClassroomBatchAddRequest {
countPerFloor: number; countPerFloor: number;
/** 教室类型 id */ /** 教室类型 id */
typeId: number | null; typeId: number | null;
/** 座位数(缺省 0) */
seatCount?: number;
/** 编号/名称前缀(缺省用楼栋编号) */ /** 编号/名称前缀(缺省用楼栋编号) */
namePrefix?: string; namePrefix?: string;
/** 关联设备(含每间数量,可空) */ /** 关联设备(含每间数量,可空) */
@@ -168,7 +169,6 @@ export interface ClassroomEditRequest {
roomCode?: string; roomCode?: string;
typeId?: number | null; typeId?: number | null;
status?: ClassroomStatus; status?: ClassroomStatus;
capacity?: number;
seatCount?: number; seatCount?: number;
/** 关联设备(含每间数量;传数组含空=全量替换,不传=不改动) */ /** 关联设备(含每间数量;传数组含空=全量替换,不传=不改动) */
equipments?: ClassroomEquipmentItem[]; equipments?: ClassroomEquipmentItem[];
-1
View File
@@ -217,7 +217,6 @@ const columns = [
{ title: "楼栋", key: "buildingName", minWidth: 110, align: "center" as const, ellipsis: true }, { title: "楼栋", key: "buildingName", minWidth: 110, align: "center" as const, ellipsis: true },
{ title: "层数", slot: "floor", width: 70, align: "center" as const }, { title: "层数", slot: "floor", width: 70, align: "center" as const },
{ title: "教室", slot: "room", minWidth: 130, ellipsis: true }, { title: "教室", slot: "room", minWidth: 130, ellipsis: true },
{ title: "容纳人数", key: "capacity", width: 96, align: "center" as const },
{ title: "座位数", key: "seatCount", width: 96, align: "center" as const }, { title: "座位数", key: "seatCount", width: 96, align: "center" as const },
{ title: "班级", slot: "klass", minWidth: 300 }, { title: "班级", slot: "klass", minWidth: 300 },
]; ];
+10 -14
View File
@@ -438,7 +438,7 @@ async function exportCsv() {
Message.warning("当前筛选范围内没有可导出的教室"); Message.warning("当前筛选范围内没有可导出的教室");
return; return;
} }
const header = ["教室编号", "教室名称", "校区", "楼栋", "楼层", "类型", "状态", "容纳人数", "座位数", "设备"]; const header = ["教室编号", "教室名称", "校区", "楼栋", "楼层", "类型", "状态", "座位数", "设备"];
const rows = all.map((r) => [ const rows = all.map((r) => [
r.roomCode, r.roomCode,
r.roomName, r.roomName,
@@ -447,7 +447,6 @@ async function exportCsv() {
`${r.floor}层`, `${r.floor}层`,
r.typeName ?? "", r.typeName ?? "",
r.status === "open" ? "开放" : "关闭", r.status === "open" ? "开放" : "关闭",
r.capacity ?? 0,
r.seatCount ?? 0, r.seatCount ?? 0,
r.equipmentNames ?? "", r.equipmentNames ?? "",
]); ]);
@@ -490,7 +489,6 @@ const focusRoom = computed<Classroom | null>(() => {
typeId: null, typeId: null,
typeName: "", typeName: "",
status: t.status, status: t.status,
capacity: 0,
seatCount: 0, seatCount: 0,
}; };
}); });
@@ -600,6 +598,7 @@ const batch = ref({
floorTo: 1, floorTo: 1,
countPerFloor: 4, countPerFloor: 4,
typeId: null as number | null, typeId: null as number | null,
seatCount: 0,
namePrefix: "", namePrefix: "",
equipmentIds: [] as number[], equipmentIds: [] as number[],
/** 设备 id → 每间教室数量(勾选时默认 1) */ /** 设备 id → 每间教室数量(勾选时默认 1) */
@@ -663,6 +662,7 @@ function openBatch() {
floorTo: fc, floorTo: fc,
countPerFloor: 4, countPerFloor: 4,
typeId: enabledTypes.value[0].serID, typeId: enabledTypes.value[0].serID,
seatCount: 0,
namePrefix: "", namePrefix: "",
equipmentIds: [], equipmentIds: [],
equipmentQty: {}, equipmentQty: {},
@@ -671,7 +671,8 @@ function openBatch() {
} }
async function saveBatch() { async function saveBatch() {
const { buildingId, floorFrom, floorTo, countPerFloor, typeId, namePrefix, equipmentIds, equipmentQty } = batch.value; const { buildingId, floorFrom, floorTo, countPerFloor, typeId, seatCount, namePrefix, equipmentIds, equipmentQty } =
batch.value;
const b = batchBuilding.value; const b = batchBuilding.value;
if (!buildingId || !b) { if (!buildingId || !b) {
Message.warning("请选择楼栋"); Message.warning("请选择楼栋");
@@ -702,6 +703,7 @@ async function saveBatch() {
floorTo, floorTo,
countPerFloor, countPerFloor,
typeId, typeId,
seatCount: seatCount ?? 0,
namePrefix: namePrefix.trim() || undefined, namePrefix: namePrefix.trim() || undefined,
equipments: toEquipmentItems(equipmentIds, equipmentQty), equipments: toEquipmentItems(equipmentIds, equipmentQty),
}) })
@@ -723,7 +725,6 @@ const editForm = ref({
roomCode: "", roomCode: "",
typeId: null as number | null, typeId: null as number | null,
status: "open" as "open" | "closed", status: "open" as "open" | "closed",
capacity: 0,
seatCount: 0, seatCount: 0,
equipmentIds: [] as number[], equipmentIds: [] as number[],
/** 设备 id → 每间教室数量(回填已有关联,勾选新设备默认 1) */ /** 设备 id → 每间教室数量(回填已有关联,勾选新设备默认 1) */
@@ -737,7 +738,6 @@ function openEdit(row: Classroom) {
roomCode: row.roomCode, roomCode: row.roomCode,
typeId: row.typeId, typeId: row.typeId,
status: row.status, status: row.status,
capacity: row.capacity ?? 0,
seatCount: row.seatCount ?? 0, seatCount: row.seatCount ?? 0,
equipmentIds: [...(row.equipmentIds ?? [])], equipmentIds: [...(row.equipmentIds ?? [])],
equipmentQty: {}, equipmentQty: {},
@@ -773,7 +773,6 @@ async function saveEdit() {
roomCode: editForm.value.roomCode.trim(), roomCode: editForm.value.roomCode.trim(),
typeId: editForm.value.typeId, typeId: editForm.value.typeId,
status: editForm.value.status, status: editForm.value.status,
capacity: editForm.value.capacity,
seatCount: editForm.value.seatCount, seatCount: editForm.value.seatCount,
equipments: toEquipmentItems(editForm.value.equipmentIds, editForm.value.equipmentQty), equipments: toEquipmentItems(editForm.value.equipmentIds, editForm.value.equipmentQty),
}) })
@@ -1208,10 +1207,6 @@ onMounted(async () => {
<span class="detail-row__label">座位数</span> <span class="detail-row__label">座位数</span>
<span class="detail-row__value">{{ focusRoom.seatCount ?? 0 }}</span> <span class="detail-row__value">{{ focusRoom.seatCount ?? 0 }}</span>
</div> </div>
<div class="detail-row">
<span class="detail-row__label">容纳人数</span>
<span class="detail-row__value">{{ focusRoom.capacity ?? 0 }}</span>
</div>
<div class="detail-row"> <div class="detail-row">
<span class="detail-row__label">类型</span> <span class="detail-row__label">类型</span>
<span class="detail-row__value">{{ focusRoom.typeName || "—" }}</span> <span class="detail-row__value">{{ focusRoom.typeName || "—" }}</span>
@@ -1337,6 +1332,10 @@ onMounted(async () => {
<Option v-for="t in enabledTypes" :key="t.serID" :value="t.serID">{{ t.typeName }}</Option> <Option v-for="t in enabledTypes" :key="t.serID" :value="t.serID">{{ t.typeName }}</Option>
</Select> </Select>
</FormItem> </FormItem>
<FormItem label="座位数">
<InputNumber v-model="batch.seatCount" :min="0" :max="100000" style="width: 150px" />
<span class="hint inline">本次生成的每间教室(选填)</span>
</FormItem>
<FormItem label="编号前缀"> <FormItem label="编号前缀">
<Input <Input
v-model="batch.namePrefix" v-model="batch.namePrefix"
@@ -1391,9 +1390,6 @@ onMounted(async () => {
<Radio label="closed">关闭</Radio> <Radio label="closed">关闭</Radio>
</RadioGroup> </RadioGroup>
</FormItem> </FormItem>
<FormItem label="教室容纳人数">
<InputNumber v-model="editForm.capacity" :min="0" :max="100000" style="width: 150px" />
</FormItem>
<FormItem label="座位数"> <FormItem label="座位数">
<InputNumber v-model="editForm.seatCount" :min="0" :max="100000" style="width: 150px" /> <InputNumber v-model="editForm.seatCount" :min="0" :max="100000" style="width: 150px" />
</FormItem> </FormItem>