|
@@ -36,8 +36,8 @@
|
|
|
<el-form-item label="房间号" prop="roomName">
|
|
<el-form-item label="房间号" prop="roomName">
|
|
|
<el-input v-model="queryParams.roomName" placeholder="请输入房间号" clearable @keyup.enter="handleQuery" />
|
|
<el-input v-model="queryParams.roomName" placeholder="请输入房间号" clearable @keyup.enter="handleQuery" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
- <el-form-item label="状态" prop="status">
|
|
|
|
|
- <el-select v-model="queryParams.status" placeholder="房间状态" clearable>
|
|
|
|
|
|
|
+ <el-form-item label="状态" prop="roomStatus">
|
|
|
|
|
+ <el-select v-model="queryParams.roomStatus" placeholder="房间状态" clearable>
|
|
|
<el-option label="正常" value="0" />
|
|
<el-option label="正常" value="0" />
|
|
|
<el-option label="维修中" value="1" />
|
|
<el-option label="维修中" value="1" />
|
|
|
<el-option label="停用" value="2" />
|
|
<el-option label="停用" value="2" />
|
|
@@ -67,7 +67,11 @@
|
|
|
<span class="font-bold">{{ selectedBuilding?.label }} - 房间管理</span>
|
|
<span class="font-bold">{{ selectedBuilding?.label }} - 房间管理</span>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
<el-col :span="12" class="text-right">
|
|
<el-col :span="12" class="text-right">
|
|
|
- <right-toolbar v-model:show-search="showSearch" @query-table="loadRoomData"></right-toolbar>
|
|
|
|
|
|
|
+ <right-toolbar
|
|
|
|
|
+ :show-search="showSearch"
|
|
|
|
|
+ @update:show-search="(val) => (showSearch = val)"
|
|
|
|
|
+ @query-table="loadRoomData"
|
|
|
|
|
+ ></right-toolbar>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
</el-row>
|
|
</el-row>
|
|
|
</template>
|
|
</template>
|
|
@@ -84,23 +88,25 @@
|
|
|
<div v-else class="room-grid">
|
|
<div v-else class="room-grid">
|
|
|
<el-card
|
|
<el-card
|
|
|
v-for="room in getRoomsByFloor(floor)"
|
|
v-for="room in getRoomsByFloor(floor)"
|
|
|
- :key="room.roomId"
|
|
|
|
|
|
|
+ :key="room.id"
|
|
|
class="room-card"
|
|
class="room-card"
|
|
|
- :class="{ 'room-disabled': room.status !== '0' }"
|
|
|
|
|
|
|
+ :class="{ 'room-disabled': room.roomStatus !== '0' }"
|
|
|
>
|
|
>
|
|
|
<template #header>
|
|
<template #header>
|
|
|
<div class="flex items-center justify-between">
|
|
<div class="flex items-center justify-between">
|
|
|
<span class="font-bold">{{ room.roomName }}</span>
|
|
<span class="font-bold">{{ room.roomName }}</span>
|
|
|
<div>
|
|
<div>
|
|
|
- <el-tag v-if="room.status === '0'" type="success" size="small">正常</el-tag>
|
|
|
|
|
- <el-tag v-else-if="room.status === '1'" type="warning" size="small">维修中</el-tag>
|
|
|
|
|
|
|
+ <el-tag v-if="room.roomStatus === '0'" type="success" size="small">正常</el-tag>
|
|
|
|
|
+ <el-tag v-else-if="room.roomStatus === '1'" type="warning" size="small">维修中</el-tag>
|
|
|
<el-tag v-else type="danger" size="small">停用</el-tag>
|
|
<el-tag v-else type="danger" size="small">停用</el-tag>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
|
<div class="room-info">
|
|
<div class="room-info">
|
|
|
- <div class="mb-2"><span class="text-gray-500">类型:</span>{{ room.roomType }}</div>
|
|
|
|
|
- <div class="mb-2"><span class="text-gray-500">床位:</span>{{ room.used }}/{{ room.capacity }}</div>
|
|
|
|
|
|
|
+ <div class="mb-2">
|
|
|
|
|
+ <span class="text-gray-500">类型:</span>{{ room.roomType === '1' ? '标准间' : room.roomType === '2' ? '单人间' : '套间' }}
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="mb-2"><span class="text-gray-500">床位:</span>0/{{ room.actualBeds }}</div>
|
|
|
<div class="flex justify-between mt-4">
|
|
<div class="flex justify-between mt-4">
|
|
|
<div>
|
|
<div>
|
|
|
<el-button type="primary" link size="small" @click="handleManageBeds(room)">床位管理</el-button>
|
|
<el-button type="primary" link size="small" @click="handleManageBeds(room)">床位管理</el-button>
|
|
@@ -125,8 +131,9 @@
|
|
|
v-model="roomDialog.visible"
|
|
v-model="roomDialog.visible"
|
|
|
:title="roomDialog.title"
|
|
:title="roomDialog.title"
|
|
|
:room-id="roomDialog.roomId"
|
|
:room-id="roomDialog.roomId"
|
|
|
- :floor-number="roomDialog.floorNumber"
|
|
|
|
|
|
|
+ :floor-num="roomDialog.floorNum"
|
|
|
:building-id="roomDialog.buildingId"
|
|
:building-id="roomDialog.buildingId"
|
|
|
|
|
+ :room="roomDialog.room"
|
|
|
@success="handleRoomSuccess"
|
|
@success="handleRoomSuccess"
|
|
|
/>
|
|
/>
|
|
|
|
|
|
|
@@ -168,10 +175,12 @@
|
|
|
|
|
|
|
|
<script setup name="DormRoomManagement" lang="ts">
|
|
<script setup name="DormRoomManagement" lang="ts">
|
|
|
import { ref, computed, reactive, onMounted, nextTick, watch } from 'vue';
|
|
import { ref, computed, reactive, onMounted, nextTick, watch } from 'vue';
|
|
|
-import { ElMessageBox, ElMessage } from 'element-plus';
|
|
|
|
|
|
|
+import { ElMessage, ElMessageBox } from 'element-plus';
|
|
|
import { InfoFilled, Search } from '@element-plus/icons-vue';
|
|
import { InfoFilled, Search } from '@element-plus/icons-vue';
|
|
|
-import { DormTreeNode, RoomInfo, BedInfo, DormQuery } from '@/api/xgss/xsssfjgl/types';
|
|
|
|
|
-import { getDormTree, listRooms, delRoom, listBeds, delBed } from '@/api/xgss/xsssfjgl';
|
|
|
|
|
|
|
+import { DormTreeNode, BedInfo, DormQuery } from '@/api/xgss/xsssfjgl/types';
|
|
|
|
|
+import { DormRoomVO, DormRoomQuery } from '@/api/xgss/dormRoom/types';
|
|
|
|
|
+import { getDormTree, listBeds, delBed } from '@/api/xgss/xsssfjgl';
|
|
|
|
|
+import { listDormRoom, delDormRoom } from '@/api/xgss/dormRoom';
|
|
|
|
|
|
|
|
// 引入子组件
|
|
// 引入子组件
|
|
|
import RoomDialog from './components/RoomDialog.vue';
|
|
import RoomDialog from './components/RoomDialog.vue';
|
|
@@ -194,19 +203,19 @@ const dormOptions = ref<DormTreeNode[]>([]);
|
|
|
const selectedBuilding = ref<DormTreeNode>();
|
|
const selectedBuilding = ref<DormTreeNode>();
|
|
|
|
|
|
|
|
// 房间数据
|
|
// 房间数据
|
|
|
-const roomList = ref<RoomInfo[]>([]);
|
|
|
|
|
|
|
+const roomList = ref<DormRoomVO[]>([]);
|
|
|
const floorList = computed(() => {
|
|
const floorList = computed(() => {
|
|
|
if (!selectedBuilding.value?.buildingFloors) return [];
|
|
if (!selectedBuilding.value?.buildingFloors) return [];
|
|
|
return Array.from({ length: selectedBuilding.value.buildingFloors }, (_, i) => i + 1);
|
|
return Array.from({ length: selectedBuilding.value.buildingFloors }, (_, i) => i + 1);
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
// 查询参数
|
|
// 查询参数
|
|
|
-const queryParams = reactive<DormQuery>({
|
|
|
|
|
|
|
+const queryParams = reactive<DormRoomQuery>({
|
|
|
pageNum: 1,
|
|
pageNum: 1,
|
|
|
pageSize: 100,
|
|
pageSize: 100,
|
|
|
buildingId: undefined,
|
|
buildingId: undefined,
|
|
|
roomName: '',
|
|
roomName: '',
|
|
|
- status: undefined
|
|
|
|
|
|
|
+ roomStatus: undefined
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
// 房间对话框
|
|
// 房间对话框
|
|
@@ -214,8 +223,9 @@ const roomDialog = reactive({
|
|
|
visible: false,
|
|
visible: false,
|
|
|
title: '',
|
|
title: '',
|
|
|
roomId: undefined as string | number | undefined,
|
|
roomId: undefined as string | number | undefined,
|
|
|
- floorNumber: 1,
|
|
|
|
|
- buildingId: '' as string | number
|
|
|
|
|
|
|
+ floorNum: 1,
|
|
|
|
|
+ buildingId: '' as string | number,
|
|
|
|
|
+ room: undefined as DormRoomVO | undefined
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
// 床位管理对话框
|
|
// 床位管理对话框
|
|
@@ -280,8 +290,8 @@ const loadRoomData = async () => {
|
|
|
if (!queryParams.buildingId) return;
|
|
if (!queryParams.buildingId) return;
|
|
|
|
|
|
|
|
try {
|
|
try {
|
|
|
- const res = await listRooms(queryParams);
|
|
|
|
|
- roomList.value = res.rows;
|
|
|
|
|
|
|
+ const res = await listDormRoom(queryParams);
|
|
|
|
|
+ roomList.value = res?.rows;
|
|
|
} catch (error) {
|
|
} catch (error) {
|
|
|
console.error('获取房间列表失败', error);
|
|
console.error('获取房间列表失败', error);
|
|
|
}
|
|
}
|
|
@@ -289,7 +299,7 @@ const loadRoomData = async () => {
|
|
|
|
|
|
|
|
/** 根据楼层获取房间数据 */
|
|
/** 根据楼层获取房间数据 */
|
|
|
const getRoomsByFloor = (floor: number) => {
|
|
const getRoomsByFloor = (floor: number) => {
|
|
|
- return roomList.value.filter((room) => room.floorNumber === floor);
|
|
|
|
|
|
|
+ return roomList.value.filter((room) => room.floorNum === floor);
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
/** 搜索按钮操作 */
|
|
/** 搜索按钮操作 */
|
|
@@ -303,32 +313,40 @@ const resetQuery = () => {
|
|
|
queryFormRef.value?.resetFields();
|
|
queryFormRef.value?.resetFields();
|
|
|
queryParams.pageNum = 1;
|
|
queryParams.pageNum = 1;
|
|
|
queryParams.roomName = '';
|
|
queryParams.roomName = '';
|
|
|
- queryParams.status = undefined;
|
|
|
|
|
|
|
+ queryParams.roomStatus = undefined;
|
|
|
handleQuery();
|
|
handleQuery();
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
/** 添加房间 */
|
|
/** 添加房间 */
|
|
|
const handleAddRoom = (floor: number) => {
|
|
const handleAddRoom = (floor: number) => {
|
|
|
if (!selectedBuilding.value) return;
|
|
if (!selectedBuilding.value) return;
|
|
|
|
|
+ // console.log(floor);
|
|
|
|
|
|
|
|
|
|
+ // 完全重置房间对话框的状态
|
|
|
roomDialog.title = '添加房间';
|
|
roomDialog.title = '添加房间';
|
|
|
roomDialog.roomId = undefined;
|
|
roomDialog.roomId = undefined;
|
|
|
- roomDialog.floorNumber = floor;
|
|
|
|
|
|
|
+ roomDialog.floorNum = floor;
|
|
|
roomDialog.buildingId = selectedBuilding.value.id;
|
|
roomDialog.buildingId = selectedBuilding.value.id;
|
|
|
- roomDialog.visible = true;
|
|
|
|
|
|
|
+ roomDialog.room = undefined; // 确保清除之前的房间数据
|
|
|
|
|
+
|
|
|
|
|
+ // 延迟显示对话框,确保状态已完全重置
|
|
|
|
|
+ nextTick(() => {
|
|
|
|
|
+ roomDialog.visible = true;
|
|
|
|
|
+ });
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
/** 编辑房间 */
|
|
/** 编辑房间 */
|
|
|
-const handleEditRoom = (room: RoomInfo) => {
|
|
|
|
|
|
|
+const handleEditRoom = (room: DormRoomVO) => {
|
|
|
roomDialog.title = '编辑房间';
|
|
roomDialog.title = '编辑房间';
|
|
|
- roomDialog.roomId = room.roomId;
|
|
|
|
|
- roomDialog.floorNumber = room.floorNumber;
|
|
|
|
|
|
|
+ roomDialog.roomId = room.id;
|
|
|
|
|
+ roomDialog.floorNum = room.floorNum;
|
|
|
roomDialog.buildingId = room.buildingId;
|
|
roomDialog.buildingId = room.buildingId;
|
|
|
|
|
+ roomDialog.room = room; // 将完整房间对象传递给对话框
|
|
|
roomDialog.visible = true;
|
|
roomDialog.visible = true;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
/** 删除房间 */
|
|
/** 删除房间 */
|
|
|
-const handleDeleteRoom = (row: RoomInfo) => {
|
|
|
|
|
|
|
+const handleDeleteRoom = (row: DormRoomVO) => {
|
|
|
ElMessageBox.confirm(`确定要删除房间 ${row.roomName} 吗?`, '警告', {
|
|
ElMessageBox.confirm(`确定要删除房间 ${row.roomName} 吗?`, '警告', {
|
|
|
confirmButtonText: '确定',
|
|
confirmButtonText: '确定',
|
|
|
cancelButtonText: '取消',
|
|
cancelButtonText: '取消',
|
|
@@ -336,8 +354,7 @@ const handleDeleteRoom = (row: RoomInfo) => {
|
|
|
})
|
|
})
|
|
|
.then(async () => {
|
|
.then(async () => {
|
|
|
try {
|
|
try {
|
|
|
- // await delRoom(row.roomId);
|
|
|
|
|
- // 模拟删除成功
|
|
|
|
|
|
|
+ await delDormRoom(row.id);
|
|
|
ElMessage.success('删除成功');
|
|
ElMessage.success('删除成功');
|
|
|
loadRoomData();
|
|
loadRoomData();
|
|
|
} catch (error) {
|
|
} catch (error) {
|
|
@@ -353,12 +370,12 @@ const handleRoomSuccess = () => {
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
/** 管理床位 */
|
|
/** 管理床位 */
|
|
|
-const handleManageBeds = async (room: RoomInfo) => {
|
|
|
|
|
- bedManageDialog.roomId = room.roomId;
|
|
|
|
|
|
|
+const handleManageBeds = async (room: DormRoomVO) => {
|
|
|
|
|
+ bedManageDialog.roomId = room.id;
|
|
|
bedManageDialog.roomName = room.roomName;
|
|
bedManageDialog.roomName = room.roomName;
|
|
|
bedManageDialog.visible = true;
|
|
bedManageDialog.visible = true;
|
|
|
|
|
|
|
|
- await loadBedData(room.roomId);
|
|
|
|
|
|
|
+ await loadBedData(room.id);
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
/** 加载床位数据 */
|
|
/** 加载床位数据 */
|