Files
school-developer/src/views/stuwork/dormbuilding/emptyRoomDialog.vue
吴红兵 b997b3ba48 fix
2026-03-07 12:35:45 +08:00

168 lines
5.3 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<el-dialog :title="dialogTitle" v-model="visible" :width="1000" :close-on-click-modal="false" draggable>
<el-table :data="tableData" v-loading="loading" border style="width: 100%">
<!-- 空宿舍列表序号宿舍几人间是否有空调 -->
<template v-if="roomType === 'all'">
<el-table-column type="index" label="序号" width="60" align="center" />
<el-table-column prop="roomNo" label="宿舍" show-overflow-tooltip align="center" />
<el-table-column prop="bedNum" label="几人间" show-overflow-tooltip align="center" />
<el-table-column prop="isHaveAir" label="是否有空调" show-overflow-tooltip align="center">
<template #default="scope">
<span>{{ scope.row.isHaveAir === '1' || scope.row.isHaveAir === 1 ? '已安装' : '未安装' }}</span>
</template>
</el-table-column>
</template>
<!-- 空几人宿舍列表宿舍床位1-6是否有空调 -->
<template v-else>
<el-table-column prop="roomNo" label="宿舍" show-overflow-tooltip align="center" />
<el-table-column prop="bedNo1" label="床位1" show-overflow-tooltip align="center">
<template #default="scope">
<span>{{ scope.row.bedNo1 || '-' }}</span>
</template>
</el-table-column>
<el-table-column prop="bedNo2" label="床位2" show-overflow-tooltip align="center">
<template #default="scope">
<span>{{ scope.row.bedNo2 || '-' }}</span>
</template>
</el-table-column>
<el-table-column prop="bedNo3" label="床位3" show-overflow-tooltip align="center">
<template #default="scope">
<span>{{ scope.row.bedNo3 || '-' }}</span>
</template>
</el-table-column>
<el-table-column prop="bedNo4" label="床位4" show-overflow-tooltip align="center">
<template #default="scope">
<span>{{ scope.row.bedNo4 || '-' }}</span>
</template>
</el-table-column>
<el-table-column prop="bedNo5" label="床位5" show-overflow-tooltip align="center">
<template #default="scope">
<span>{{ scope.row.bedNo5 || '-' }}</span>
</template>
</el-table-column>
<el-table-column prop="bedNo6" label="床位6" show-overflow-tooltip align="center">
<template #default="scope">
<span>{{ scope.row.bedNo6 || '-' }}</span>
</template>
</el-table-column>
<el-table-column prop="isHaveAir" label="是否有空调" show-overflow-tooltip align="center">
<template #default="scope">
<span>{{ scope.row.isHaveAir === '1' || scope.row.isHaveAir === 1 ? '已安装' : '未安装' }}</span>
</template>
</el-table-column>
</template>
</el-table>
<!-- 分页 -->
<pagination v-if="isPage" @size-change="sizeChangeHandle" @current-change="currentChangeHandle" v-bind="pagination" />
<template #footer>
<span class="dialog-footer">
<el-button @click="visible = false"> </el-button>
</span>
</template>
</el-dialog>
</template>
<script setup lang="ts" name="EmptyRoomDialog">
import { ref, reactive, computed } from 'vue';
import { queryEmptyRoomWithBuildingNo, queryEmtryRoomDetail } from '/@/api/stuwork/dormroomstudent';
import { useMessage } from '/@/hooks/message';
// 定义变量内容
const visible = ref(false);
const loading = ref(false);
const buildingNo = ref('');
const roomType = ref('');
const tableData = ref<any[]>([]);
const isPage = ref(false);
const pagination = reactive({
current: 1,
size: 10,
total: 0,
pageSizes: [10, 20, 50, 100],
layout: 'total, sizes, prev, pager, next, jumper',
});
// 对话框标题
const dialogTitle = computed(() => {
if (roomType.value === 'all') {
return `空宿舍列表 - ${buildingNo.value}号楼`;
} else {
return `${roomType.value}人宿舍列表 - ${buildingNo.value}号楼`;
}
});
// 打开对话框
const openDialog = async (building: string, type: string) => {
visible.value = true;
buildingNo.value = building;
roomType.value = type;
tableData.value = [];
pagination.current = 1;
pagination.total = 0;
await loadData();
};
// 加载数据
const loadData = async () => {
loading.value = true;
try {
let res: any;
if (roomType.value === 'all') {
// 查询所有空宿舍
res = await queryEmptyRoomWithBuildingNo(buildingNo.value);
} else {
// 查询空几人宿舍
res = await queryEmtryRoomDetail(buildingNo.value, roomType.value);
}
// 处理返回数据
if (res.data) {
if (Array.isArray(res.data)) {
tableData.value = res.data;
isPage.value = false;
} else if (res.data.records && Array.isArray(res.data.records)) {
tableData.value = res.data.records;
pagination.total = res.data.total || 0;
isPage.value = true;
} else if (res.data.list && Array.isArray(res.data.list)) {
tableData.value = res.data.list;
isPage.value = false;
} else {
tableData.value = [];
isPage.value = false;
}
} else {
tableData.value = [];
isPage.value = false;
}
} catch (err: any) {
useMessage().error(err.msg || '加载失败');
tableData.value = [];
} finally {
loading.value = false;
}
};
// 分页大小改变
const sizeChangeHandle = (val: number) => {
pagination.size = val;
pagination.current = 1;
loadData();
};
// 当前页改变
const currentChangeHandle = (val: number) => {
pagination.current = val;
loadData();
};
// 暴露方法给父组件
defineExpose({
openDialog,
});
</script>