<template>
|
<div style="display: flex; flex-direction: column; align-items: center;">
|
<div style="display: flex; flex-wrap: wrap; justify-content: center; margin-bottom: 20px">
|
<div class=roomwrap v-for="(value, key) in bedMap" :key="key">
|
<RoomBedSelect :title="key" :bedList="value" :curBed="curSel" @event-haveseat="haveSeat" @event-leaveseat="leaveSeat"/>
|
</div>
|
</div>
|
<el-button @click="confirmCurSel">确认</el-button>
|
</div>
|
</template>
|
|
<script setup lang="ts">
|
import {RoomBedSelect} from "@/components/RoomBedSelect"
|
import { RoomApi, RoomVO } from '@/api/ecg/room'
|
import { queueApi } from '@/api/ecg/queue'
|
import {useUserStore} from "@/store/modules/user";
|
import {ElMessage, ElMessageBox} from "element-plus";
|
import {isStringEmpty} from "@/utils/stringUtil";
|
const { push } = useRouter()
|
|
defineOptions({ name: 'RoomLoginSelect' })
|
|
const route = useRoute();
|
|
const userStore = useUserStore()
|
const curUser = userStore.getUser
|
|
const bedMap = ref() // 列表的数据
|
|
const originalSel = ref<RoomVO>();
|
|
let curSel = ref<RoomVO>({
|
id: null,
|
roomId: null,
|
roomName: null,
|
bedNo: null,
|
status: null,
|
docId: null,
|
docName: null
|
});
|
|
/** 查询列表 */
|
const getList = async () => {
|
const data = await RoomApi.getOnstageBedMap()
|
bedMap.value = data;
|
|
for (const key in data) {
|
const roomVOArray = data[key] as RoomVO[];
|
roomVOArray.forEach((roomVO) => {
|
if (roomVO.docId === curUser.id) {
|
originalSel.value = roomVO
|
curSel.value = roomVO
|
return
|
}
|
} )
|
}
|
}
|
|
const haveSeatConfirm = async () => {
|
if (curSel.value.roomId === null) {
|
ElMessage({
|
message: '请先选择工作的位置!',
|
type: 'info',
|
duration: 3000 // 自动关闭时间,默认为3000ms
|
});
|
return
|
}
|
|
if (curSel.value !== originalSel.value) {
|
console.info(originalSel.value)
|
let data;
|
if (originalSel.value !== undefined) {
|
data = await queueApi.bedDoctorOff(originalSel.value)
|
if (data !== 0) {
|
ElMessage({
|
message: '内部错误!' + data,
|
type: 'info',
|
duration: 3000 // 自动关闭时间,默认为3000ms
|
});
|
return
|
}
|
}
|
data = await queueApi.bedDoctorOn(curSel.value)
|
if (data !== 0) {
|
ElMessage({
|
message: '内部错误!' + data,
|
type: 'info',
|
duration: 3000 // 自动关闭时间,默认为3000ms
|
});
|
return
|
}
|
originalSel.value = curSel.value
|
}
|
|
userStore.setRoomInfoAction(curSel.value)
|
if (isStringEmpty(route.redirectedFrom?.fullPath))
|
push({ path: "/"})
|
else if(route.redirectedFrom?.fullPath === "/roomselect" )
|
push({ path: "/"})
|
else
|
push({ path: route.redirectedFrom?.fullPath})
|
}
|
|
const leaveSeatConfirm = async () => {
|
if (curSel.value.roomId !== null) {
|
ElMessage({
|
message: '请先离开工位, 再确认离座!',
|
type: 'info',
|
duration: 3000 // 自动关闭时间,默认为3000ms
|
});
|
return
|
}
|
|
if (originalSel.value !== undefined) {
|
let data = await queueApi.bedDoctorOff(originalSel.value)
|
if (data !== 0) {
|
ElMessage({
|
message: '内部错误!' + data,
|
type: 'info',
|
duration: 3000 // 自动关闭时间,默认为3000ms
|
});
|
return
|
}
|
originalSel.value = undefined
|
}
|
|
userStore.clearRoomInfoAction()
|
}
|
|
const haveSeat = (roomVO: RoomVO) => {
|
ElMessageBox.confirm(
|
'入座, 是否继续?',
|
'提示',
|
{
|
confirmButtonText: '确定',
|
cancelButtonText: '取消',
|
type: 'warning'
|
}
|
).then(() => {
|
console.log('确认');
|
curSel.value.docId = null
|
curSel.value.docName = null
|
|
roomVO.docId = curUser.id
|
roomVO.docName = curUser.nickname
|
curSel.value = roomVO
|
|
haveSeatConfirm()
|
}).catch(() => {
|
console.log('取消');
|
});
|
}
|
|
const leaveSeat = (roomVO: RoomVO) => {
|
ElMessageBox.confirm(
|
'离座, 是否继续?',
|
'提示',
|
{
|
confirmButtonText: '确定',
|
cancelButtonText: '取消',
|
type: 'warning'
|
}
|
).then(() => {
|
console.log('确认');
|
curSel.value.docId = null
|
curSel.value.docName = null
|
|
curSel.value = {
|
id: null,
|
roomId: null,
|
roomName: null,
|
bedNo: null,
|
status: null,
|
docId: null,
|
docName: null
|
}
|
|
leaveSeatConfirm()
|
}).catch(() => {
|
console.log('取消');
|
});
|
}
|
|
const confirmCurSel = () => {
|
if (curSel.value.docId === null ) {
|
ElMessage({
|
message: '请先选择工作的位置!',
|
type: 'info',
|
duration: 3000 // 自动关闭时间,默认为3000ms
|
});
|
return
|
}
|
|
userStore.setRoomInfoAction(curSel.value)
|
if (isStringEmpty(route.redirectedFrom?.fullPath))
|
push({ path: "/"})
|
else if(route.redirectedFrom?.fullPath === "/roomselect" )
|
push({ path: "/"})
|
else
|
push({ path: route.redirectedFrom?.fullPath})
|
}
|
|
/** 初始化 **/
|
onMounted(() => {
|
getList()
|
})
|
|
</script>
|
|
<style scoped lang="scss">
|
.roomwrap {
|
margin-right: 20px;
|
}
|
</style>
|