Files
zhxg_xsbdV1.0/pages/bedChoice/bedChoice.vue
2025-07-16 17:44:45 +08:00

301 lines
6.7 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>
<view class="bed">
<!-- <view class="location">
<view class="right">
<view class="item" v-for="(item,index) in bedList[0]" :key="index">
<image src="../../static/icon/bed-choice.png" mode="aspectFit"></image>
<text>{{item}}</text>
</view>
</view>
<text style="color: #808080;" class="aisle">过道</text>
<view class="left">
<view class="item" v-for="(item,index) in bedList[1]" :key="index">
<image src="../../static/icon/bed-choice-right.png" mode="aspectFit"></image>
<text>{{item}}</text>
</view>
</view>
</view> -->
<!-- <view class="middle">
<text>床位图示意</text>
</view> -->
<!-- 房间信息 -->
<view class="dormitory-info">
<text style="font-size: 36rpx; color: #131313;">{{roomName}}</text>
<br>
<!-- <text style="color: #808080; font-size: 28rpx;">南校区/学生公寓一/9</text> -->
</view>
<!-- 房间选择 -->
<view class="dormitory-choose">
<view :class="!item.state?'item':'item-selected'" :id="activeIndex == index?'dormitory-choose-active':''"
v-for="(item,index) in bedStateList" :key="index" @click="chooseDormitory(item)">
<text>{{item.bedPosition+""+item.name+""}}</text><br />
<text style="position: relative;top: -130rpx;">{{item.is_own ? "(我的床位)" : ""}}</text>
</view>
</view>
<!-- <view style="margin-top: 700rpx;">
<u-button text="确定" :disabled="disabledState" type="primary" @click="rightBed"></u-button>
</view> -->
<u-toast ref="uToast" @show="showToast"></u-toast>
<!-- 提示窗示例 -->
<uni-popup ref="alertDialog" type="dialog">
<uni-popup-dialog :type="msgType" cancelText="关闭" confirmText="同意" title="通知" content="真的要取消选择床位吗"
@confirm="dialogConfirm"></uni-popup-dialog>
</uni-popup>
<!-- 提示信息弹窗 -->
<uni-popup ref="message" type="message">
<uni-popup-message :type="msgType" :message="messageText" :duration="2000"></uni-popup-message>
</uni-popup>
<zero-loading v-if="loading"></zero-loading>
</view>
</template>
<script>
import {
chooseBed,
getBedsInfoByDormId,
cancelOwnBed
} from "@/api/dormApi.js";
import {
isEmpty
} from "@/api/helpFunc.js";
export default {
data() {
return {
loading: false,
roomName: "",
bedStateList: [],
// 选择状态
activeIndex: -1,
disabledState: true,
toastParams: {
message: "该床位已被选中",
type: "error",
duration: 1000
},
dorm_id: null,
msgType: 'success',
messageText: '这是一条成功提示',
}
},
methods: {
async dialogConfirm() {
console.log('点击确认')
this.loading = true;
let res = await cancelOwnBed();
if(res.code == 200){
this.toastParams.message = res.msg;
this.toastParams.type = "success";
}else{
this.toastParams.message = res.msg;
this.toastParams.type = "error";
}
this.showToast();
this.getBedInfo();
this.loading = false;
},
async getBedInfo() {
this.loading = true;
let res = await getBedsInfoByDormId(this.dorm_id);
this.loading = false;
if (res.code == 200) {
let data = res.data;
let temp = [];
let my_stu_no = uni.getStorageSync("stu_no");
console.log(data);
data.map(x => {
temp.push({
bedPosition: x.BedCode + "号床",
name: x.XSXM == null ? "空床位" : x.XSXM,
state: x.hasStudent,
id: x.id,
xh: my_stu_no,
is_own: my_stu_no == x.XH
});
});
this.bedStateList = [...temp];
}
},
async chooseDormitory(v) {
console.log(v)
if (v.is_own) {
this.loading = false;
this.msgType = "info";
this.$refs.alertDialog.open()
return;
}
if (v.state) {
this.message="该床位已被选中";
this.type="error";
return this.showToast();
}
this.loading = true;
let sdata = {
bedId: v.id,
dormitoryId: this.dorm_id
};
let res = await chooseBed(sdata);
this.loading = false;
if (res.code == 200) {
this.toastParams.message = "选择成功";
this.toastParams.type = "success";
this.showToast();
setTimeout(() => {
uni.switchTab({
url: "/pages/pay/index"
})
}, 1000);
} else {
this.getBedInfo();
this.toastParams.message = "换个床位吧";
this.toastParams.type = "error";
this.showToast();
}
},
rightBed() {
let params = {
type: "loading",
message: "正在确认",
}
this.showToast(params)
},
showToast(params) {
this.$refs.uToast.show({
...this.toastParams,
...params
})
}
},
onLoad(value) {
let data = JSON.parse(value.param);
this.roomName = data.name + "-" + data.bedNum + "人间";
this.dorm_id = data.id;
this.getBedInfo();
}
}
</script>
<style lang="scss" scoped>
$text-color: #808080;
.bed {
padding: 20rpx;
padding-bottom: 50px;
// 床位的位置
.location {
display: flex;
justify-content: space-around;
align-items: center;
height: 600rpx;
margin: 40rpx 0;
.aisle {
writing-mode: vertical-rl;
/* 设置文字垂直排列方向为从上到下 */
text-orientation: upright;
/* 设置文字方向为直立 */
font-size: 40rpx;
}
.right {
border-right: 1px solid #E9E9E9;
padding: 0 90rpx;
}
.left {
border-left: 1px solid #E9E9E9;
padding: 0 90rpx;
}
.right,
.left {
display: flex;
flex-direction: column;
height: 600rpx;
justify-content: space-between;
.item {
display: flex;
align-items: center;
flex-direction: column;
justify-content: space-between;
height: 140rpx;
text-align: center;
text {
display: block;
color: $text-color;
font-size: 40rpx;
}
image {
width: 70rpx;
height: 50rpx;
}
}
}
}
.middle {
text-align: center;
color: $text-color;
height: 100rpx;
border-bottom: 1px solid #E2E2E2;
margin-bottom: 40rpx;
}
// 房间信息
.dormitory-info {
padding-bottom: 30rpx;
margin-bottom: 30rpx;
border-bottom: 1px solid #E9E9E9;
}
#dormitory-choose-active {
background-color: #4A90E2;
color: white;
transition: 200ms linear;
}
// 宿舍选择
.dormitory-choose {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
margin-bottom: 60rpx;
.item-selected {
background-color: #F4F4F4;
color: #7B7B7B;
}
.item-selected,
.item {
width: 346rpx;
height: 160rpx;
text-align: center;
line-height: 160rpx;
margin-bottom: 25rpx;
transition: 200ms ease-out;
}
.item {
background-color: #F2F8FF;
color: #4A90E2;
}
}
}
</style>