<template> <view class="page"> <u-navbar title="房间详情" :border-bottom="false" :background="bgc" back-icon-color="#262B37" title-color='#262B37' title-size='36' height='50' id="navbar"> </u-navbar> <u-select v-model="show" :list="list" @confirm="confirm"></u-select> <view class="boxmask" v-if="flag"></view> <view class="box" v-if="flag"> <view class="topss"> 添加设施 </view> <view class="name"> <view class="lt"> 名称 </view> <view class="rt"> <input type="text" v-model="name" placeholder="请输入设施名称"/> <image src="https://api.ccttiot.com/smartmeter/img/static/uCta8cp7uXd1lGjZS6sc" mode=""></image> </view> </view> <view class="name" style="border: none;"> <view class="lt"> 类型 </view> <view class="rt" @click="show = true"> {{leixing}} <image src="https://api.ccttiot.com/smartmeter/img/static/uCta8cp7uXd1lGjZS6sc" mode=""></image> </view> </view> <view class="but"> <view class="quxiao" @click="flag = false"> 取消 </view> <view class="queding" @click="btnmd"> 确定 </view> </view> </view> <view class="boxtop"> <view class="top"> <view class="name"> {{roomobj.roomName == null ? '--' : roomobj.roomName}} </view> <view class="yuny" v-if="roomobj.status == 1"> <text></text> 运营中 </view> <view style="color: #ccc;" class="yuny" v-if="roomobj.status == 0"> <text style="background-color: #ccc;"></text> 歇业中 </view> <view style="color: #ccc;" class="yuny" v-if="roomobj.status == 8"> <text style="background-color: #ccc;"></text> 下线维护 </view> </view> <view class="bot"> <!-- <view class="" @click="btnjfgz"> <image src="https://api.ccttiot.com/smartmeter/img/static/udeYbjiOdwddMbUM90QB" mode=""></image> 计费规则 </view> --> <view class="" @click="btnewm"> <image src="https://api.ccttiot.com/smartmeter/img/static/uT7NCRBVoRy8KFIF9Gtq" mode=""></image> 下载二维码 </view> <view class="" @click="btnroomsz"> <image src="https://api.ccttiot.com/smartmeter/img/static/uTBNF3xzr0EAJjzJ3Ggc"mode=""></image> 房间设置 </view> </view> </view> <view class="tops"> <view class="lt"> 房间设施列表 </view> <view class="rt" @click="btnaddsb"> 添加 </view> <!-- <view class="tianjia" v-if="flag"> <view class="" @click="btnaddfm(1)"> 添加房门 </view> <view class="" @click="btnaddfm(2)"> 添加电源 </view> <view class="" @click="btnaddfm(3)" style="border: none;"> 添加设施 </view> </view> --> </view> <view class="damen" v-if="roomList != ''"> <view class="menbj" v-for="(item,index) in roomList" :key="index" @click="btnitem(item)"> <view class="top"> <view class="lt"> <text style="font-weight: 600;">{{item.name}}</text> <text v-if="item.device.onlineStatus == 0" class="lixian">设备离线</text> </view> <view class="rt" v-if="!item.device.sn"> <text></text> 未绑定 </view> <view class="rt" v-if="item.device.powerStatus == 0"> <text></text> 已关闭 </view> <view class="rt" style="color: #48893B;" v-if="item.device.powerStatus == 1"> <text style="background-color: #48893B;"></text> 已开启 </view> </view> <view class="bot" v-if="item.device.sn"> <view class="lt"> SN:{{item.device.sn}} </view> <view class="rt"> <image src="https://api.ccttiot.com/smartmeter/img/static/u4Btme5ARjeAyvvTjgBF" @click.stop="btnroomkg(1,index,item)" mode="" v-if="item.device.powerStatus == 0"></image> <image src="https://api.ccttiot.com/smartmeter/img/static/ua6R9hsgQZTfahcpaA8G" @click.stop="btnroomkg(0,index,item)" mode="" v-if="item.device.powerStatus == 1"></image> </view> </view> </view> </view> <!-- 添加房门 --> <view class="mask" v-if="fmflag"></view> <view class="addmen" v-if="fmflag"> <view class="top"> <view class="cha" @click="fmflag = false"> × </view> <view class="name"> 请选择添加{{roomtxt}}方式 </view> </view> <view class="one" @click="btntoufcesuo"> <view class="lt"> <view class="saoma"> 扫码添加 </view> <view class="saomas"> 扫描设备上的二维码 </view> <view class="saomas"> 设置{{roomtxt}} </view> </view> <view class="rt"> <image src="https://api.ccttiot.com/smartmeter/img/static/ukzEfdUUjPKUUOxonIgm" mode=""></image> </view> </view> <view class="one" @click="btntouffm"> <view class="lt"> <view class="saoma"> 未投放设备列表添加 </view> <view class="saomas"> 选择列表中的设备 </view> <view class="saomas"> 设置{{roomtxt}} </view> </view> <view class="rt"> <image src="https://api.ccttiot.com/smartmeter/img/static/ukzEfdUUjPKUUOxonIgm" mode=""></image> </view> </view> </view> <view class="mask" v-if="pricegzflag"></view> <view class="pricegz" v-if="pricegzflag"> <view class="top"> 下单须知: </view> <view class="shuom"> 基础单价每1小时10元,最低消费时长2小 时,押金金额100元(订单结束30分钟内退 还)注:订单提前结束剩余消费时长、金额 不返还 </view> <view class="annius" @click="pricegzflag = false"> 确认 </view> </view> <view class="anniu"> <view class="xinjian" @click="btnxia"> {{txtname}} </view> <view class="xinjian" @click="btnkai"> 全开 </view> <view class="xinjian" @click="btnguan"> 全关 </view> </view> </view> </template> <script> export default { data() { return { bgc: { backgroundColor: "#fff", }, roomId:'', flag:false, fmflag:false, roomtxt:'', pricegzflag:false, roomobj:{}, storeId:'', roomList: [], name:'', leixing:'请选择类型', type:'', show:false, list:[ { value: '1', label: '房间门' }, { value: '4', label: '房间灯' }, ], txtname:'' } }, onLoad(option) { this.roomId = option.roomId this.storeId = option.storeId }, onShow() { this.getfjxq() }, methods: { // 点击添加设施 btnaddsb(){ uni.navigateTo({ url:'/page_shanghu/roomsheshi?roomId=' + this.roomId }) }, // 点击房间下线维护 btnxia(){ let that = this if(that.txtname == '下线维护'){ uni.showModal({ title: '温馨提示', content: '您确定要下线维护吗?', success: function (res) { if (res.confirm) { let data = { roomId:that.roomId, status:8 } that.$u.put(`/app/room`,data).then(res =>{ if(res.code == 200){ uni.showToast({ title: '下线成功', icon: 'success', duration: 2000 }) that.txtname = '上线' that.roomobj.status = 8 }else{ uni.showToast({ title: res.msg, icon: 'none', duration: 2000 }) } }) } else if (res.cancel) { } } }) }else{ uni.showModal({ title: '温馨提示', content: '您确定要将此房间上线吗?', success: function (res) { if (res.confirm) { let data = { roomId:that.roomId, status:1 } that.$u.put(`/app/room`,data).then(res =>{ if(res.code == 200){ uni.showToast({ title: '上线成功', icon: 'success', duration: 2000 }) that.txtname = '下线维护' that.roomobj.status = 1 }else{ uni.showToast({ title: res.msg, icon: 'none', duration: 2000 }) } }) } else if (res.cancel) { } } }) } }, // 设施全关 btnguan(){ this.$u.post(`/app/device/adminAll/${this.roomId}/switch?open=false`).then(res =>{ if(res.code == 200){ uni.showToast({ title: '全部关闭成功', icon: 'success', duration: 2000 }) this.roomList.forEach(item =>{ item.device.powerStatus = 0 }) }else{ uni.showToast({ title: res.msg, icon: 'none', duration: 2000 }) } }) }, // 设施全开 btnkai(){ this.$u.post(`/app/device/adminAll/${this.roomId}/switch?open=true`).then(res =>{ if(res.code == 200){ uni.showToast({ title: '全部开启成功', icon: 'success', duration: 2000 }) this.roomList.forEach(item =>{ item.device.powerStatus = 1 }) }else{ uni.showToast({ title: res.msg, icon: 'none', duration: 2000 }) } }) }, // 点击控制房间设施 btnroomkg(num,index,item){ let equipmentId = item.equipmentId if(num == 0){ //关闭 this.$u.put(`/app/device/adminMch/${equipmentId}/switch?open=false`).then(res =>{ if(res.code == 200){ uni.showToast({ title: '关闭成功', icon: 'success', duration: 2000 }) this.roomList.forEach(item =>{ if(item.equipmentId == equipmentId){ item.device.powerStatus = 0 } }) }else{ uni.showToast({ title: res.msg, icon: 'none', duration: 2000 }) } }) }else{ //开启 this.$u.put(`/app/device/adminMch/${equipmentId}/switch?open=true`).then(res =>{ if(res.code == 200){ uni.showToast({ title: '开启成功', icon: 'success', duration: 2000 }) this.roomList.forEach(item =>{ if(item.equipmentId == equipmentId){ item.device.powerStatus = 1 } }) }else{ uni.showToast({ title: res.msg, icon: 'none', duration: 2000 }) } }) } }, // 点击房间中设施 btnitem(item){ // console.log(item); uni.navigateTo({ url:'/page_shanghu/roomsheshi?equipmentId=' + item.equipmentId }) }, // 点击确定新建设施 btnmd(){ let data = { name:this.name, roomId:this.roomId, type:this.type, picture:'' } this.$u.post(`/app/equipment`,data).then(res => { if (res.code == 200) { uni.showToast({ title: '新建成功', icon: 'success', duration: 2000 }) this.flag = false this.roomList = [] this.getfjxq() }else{ uni.showToast({ title: res.msg, icon: 'none', duration: 2000 }) } }) }, // 确认选择类型 confirm(e){ this.type = e[0].value this.leixing = e[0].label }, // 点击弹出计费规则 btnjfgz(){ this.pricegzflag = true }, // 跳转到编辑房间页 btnroomsz(){ uni.navigateTo({ url:'/page_shanghu/roomedit?roomId=' + this.roomId }) }, // 跳转到保存二维码 btnewm(){ uni.navigateTo({ url:'/page_shanghu/erwm' }) }, // 点击进行扫码 btntoufcesuo(){ this.fmflag = false uni.scanCode({ onlyFromCamera: true, scanType: ['qrCode'], success: res => { function getQueryParam(url, paramName) { let regex = new RegExp(`[?&]${paramName}=([^&]*)`) let results = regex.exec(url); return results ? decodeURIComponent(results[1].replace(/\+/g, ' ')) : null } console.log(res); let sceneValue = res.result let decodedValue = decodeURIComponent(sceneValue) let id = getQueryParam(decodedValue, 'sn') let that = this let data = { sn: id, storeId:this.storeId } uni.navigateTo({ url:'/page_shanghu/weishebei' }) } }) }, // 点击未投放列表选择设备 btntouffm(){ this.fmflag = false uni.navigateTo({ url:'/page_shanghu/weishebei' }) }, // 点击添加房门 btnaddfm(num){ if(num == 1){ this.roomtxt = '房门' this.fmflag = true this.flag = false }else if(num == 2){ this.roomtxt = '电源' this.fmflag = true this.flag = false }else if(num == 3){ this.roomtxt = '设施' this.fmflag = true this.flag = false } }, // 请求房间详情 getfjxq(){ this.$u.get(`/app/room/mch/${this.roomId}`).then(res =>{ if(res.code == 200){ this.roomobj = res.data this.roomList = res.data.equipmentList if(res.data.status == 8){ this.txtname = '上线' }else{ this.txtname = '下线维护' } } }) } } } </script> <style lang="scss"> /deep/ .u-iconfont, /deep/ .u-title{ padding-bottom: 20rpx; } .damen{ padding: 0 30rpx; box-sizing: border-box; margin-top: 38rpx; height: 830rpx; overflow: scroll; .fjlist{ display: flex; flex-wrap: wrap; justify-content: space-between; margin-top: 16rpx; width: 686rpx; max-height: 1408rpx; background: #FFFFFF; padding: 16rpx; padding-top: 0; box-sizing: border-box; border-radius: 20rpx 20rpx 20rpx 20rpx; .fj_item{ margin-top: 16rpx; width: 318rpx; height: 178rpx; background: #F9F9F9; padding: 26rpx; box-sizing: border-box; .zt{ font-size: 28rpx; color: #FC902A; margin-top: 8rpx; } .name{ // display: flex; // justify-content: space-between; text{ display: block; font-weight: 600; font-size: 36rpx; color: #3D3D3D; } } } } .name{ font-weight: 600; font-size: 36rpx; color: #3D3D3D; text-align: left; } .menbj{ width: 686rpx; max-height: 170rpx; background: #FFFFFF; border-radius: 20rpx 20rpx 20rpx 20rpx; padding: 30rpx; box-sizing: border-box; margin-top: 28rpx; .bot{ display: flex; justify-content: space-between; align-items: center; margin-top: 20rpx; .lt{ font-size: 28rpx; color: #3D3D3D; } .rt{ image{ width: 50rpx; height: 50rpx; } } } .top{ display: flex; justify-content: space-between; .lt{ text{ font-size: 28rpx; color: #3D3D3D; margin-right: 54rpx; } } .rt{ display: flex; align-items: center; font-size: 28rpx; color: #7C7C7C; font-weight: 600; text{ width: 10rpx; height: 10rpx; background-color: #7C7C7C; border-radius: 50%; margin-right: 10rpx; } } } } } .boxmask{ width: 100%; height: 100vh; background-color: #000; opacity: .3; z-index: 2; position: fixed; top: 0; left: 0; } .box{ position: fixed; z-index: 2; top: 500rpx; left: 50%; transform: translateX(-50%); width: 580rpx; max-height: 408rpx; background: #FFFFFF; margin: auto; margin-top: 22rpx; padding-top: 20rpx; box-sizing: border-box; border-radius: 20rpx; .but{ display: flex; align-items: center; justify-content: space-between; border-top:1px solid #D8D8D8; font-size: 32rpx; font-weight: 600; .quxiao{ border-right: 1px solid #D8D8D8; } view{ width: 50%; height: 100rpx; line-height: 100rpx; text-align: center; } } .topss{ width: 100%; text-align: center; margin-top: 20rpx; margin-bottom: 20rpx; font-size: 36rpx; } .name{ display: flex; justify-content: space-between; align-items: center; margin: auto; height: 80rpx; padding: 0 30rpx; margin-bottom: 10rpx; box-sizing: border-box; .lt{ font-size: 32rpx; color: #3D3D3D; } .rt{ display: flex; align-items: center; input{ text-align: right; width: 200rpx; } image{ width: 14rpx; height: 42rpx; margin-left: 10rpx; } } } } .pricegz{ width: 636rpx; max-height: 438rpx; background: #FFFFFF; border-radius: 20rpx 20rpx 20rpx 20rpx; padding: 52rpx 46rpx; box-sizing: border-box; margin: auto; position: fixed; top: 490rpx; left: 50%; transform: translateX(-50%); z-index: 3; .top{ font-weight: 600; font-size: 32rpx; color: #3D3D3D; } .shuom{ font-size: 28rpx; color: #3D3D3D; margin-top: 24rpx; } .annius{ width: 542rpx; height: 86rpx; background: #48893B; border-radius: 14rpx 14rpx 14rpx 14rpx; text-align: center; line-height: 86rpx; font-weight: 600; font-size: 36rpx; color: #FFFFFF; margin-top: 30rpx; } } .mask{ width: 100%; height: 100vh; background-color: #000; opacity: .3; position: fixed; top: 0; left: 0; z-index: 3; } .addmen{ width: 694rpx; height: 702rpx; background: linear-gradient( 180deg, #DEF1DA 0%, #FFFFFF 100%, #FFFFFF 100%); border-radius: 36rpx 36rpx 36rpx 36rpx; position: fixed; top: 464rpx; left: 50%; transform: translateX(-50%); z-index: 3; box-shadow: 1px 2px 4px -3px; .one{ display: flex; align-items: center; justify-content: space-between; width: 100%; .rt{ image{ width: 60rpx; height: 60rpx; } } .saoma{ font-weight: 600; font-size: 36rpx; color: #48893B; margin-top: 10rpx; } .saomas{ font-size: 28rpx; color: #48893B; margin-top: 10rpx; } width: 584rpx; height: 224rpx; border: 2rpx solid #48893B; border-radius: 20rpx; margin: auto; margin-top: 48rpx; padding: 38rpx 44rpx; box-sizing: border-box; } .top{ display: flex; flex-wrap: wrap; padding: 0 26rpx; box-sizing: border-box; .name{ font-weight: 600; font-size: 44rpx; color: #48893B; width: 100%; text-align: center; position: absolute; top: 56rpx; left: 50%; transform: translateX(-50%); } .cha{ font-size: 68rpx; font-weight: 600; width: 100%; text-align: right; } } } .anniu{ width: 750rpx; height: 152rpx; background: #FFFFFF; box-shadow: 0rpx 8rpx 20rpx 0rpx rgba(0,0,0,0.3); border-radius: 0rpx 0rpx 0rpx 0rpx; position: fixed; left: 0; bottom: 0; display: flex; justify-content: space-between; padding: 0 36rpx; box-sizing: border-box; padding-top: 24rpx; .xinjian{ width: 214rpx; height: 104rpx; border: 2rpx solid #48893B; border-radius: 20rpx; text-align: center; line-height: 104rpx; font-weight: 600; font-size: 36rpx; color: #48893B; } } page { background: #F6F6F6; } .list{ padding: 0 32rpx; box-sizing: border-box; margin-top: 42rpx; .item_list{ display: flex; justify-content: space-between; margin-top: 18rpx; max-height: 184rpx; .rt{ .name{ display: flex; align-items: center; text{ width: 10rpx; height: 10rpx; background: #7C7C7C; border-radius: 50%; margin-right: 10rpx; font-size: 28rpx; color: #969696; } } .img{ text-align: right; margin-top: 20rpx; image{ width: 50rpx; height: 50rpx; } } } .lt{ .name{ font-weight: 600; font-size: 32rpx; color: #3D3D3D; text{ font-size: 28rpx; color: #969696; font-weight: 400; margin-left: 30rpx; } } .sn{ font-size: 26rpx; color: #3D3D3D; margin-top: 26rpx; } } padding: 32rpx 30rpx; box-sizing: border-box; width: 680rpx; background: #FFFFFF; border-radius: 20rpx 20rpx 20rpx 20rpx; } } .boxtop{ width: 680rpx; height: 244rpx; background: #FFFFFF; border-radius: 20rpx 20rpx 20rpx 20rpx; margin: auto; margin-top: 22rpx; padding: 34rpx 30rpx; box-sizing: border-box; .bot{ display: flex; justify-content: space-between; align-items: center; margin-top: 40rpx; view{ display: flex; align-items: center; justify-content: center; width: 204rpx; height: 54rpx; border-radius: 27rpx 27rpx 27rpx 27rpx; border: 1rpx solid #7C7C7C; image{ width: 32rpx; height: 32rpx; margin-right: 6rpx; } } } .name{ font-weight: 600; font-size: 30rpx; color: #3D3D3D; } .yuny{ display: flex; align-items: center; font-weight: 600; font-size: 28rpx; color: #48893B; text{ width: 10rpx; height: 10rpx; background: #48893B; border-radius: 50%; margin-right: 10rpx; } } .top{ display: flex; justify-content: space-between; border-bottom: 1px solid #D8D8D8; padding-bottom: 22rpx; box-sizing: border-box; } } .tops{ width: 100%; display: flex; justify-content: space-between; align-items: center; padding: 0 36rpx; box-sizing: border-box; margin-top: 70rpx; position: relative; .tianjia{ width: 170rpx; height: 214rpx; background: #FFFFFF; box-shadow: 0rpx 0rpx 6rpx 0rpx rgba(0,0,0,0.3); border-radius: 12rpx 12rpx 12rpx 12rpx; position: absolute; top: 80rpx; right: 36rpx; view{ width: 120rpx; height: 70rpx; line-height: 70rpx; text-align: center; margin: auto; border-bottom: 1px solid #D8D8D8; font-size: 28rpx; color: #3D3D3D; } } .lt{ font-weight: 600; font-size: 36rpx; color: #3D3D3D; } .rt{ width: 126rpx; height: 58rpx; background: #48893B; border-radius: 6rpx 6rpx 6rpx 6rpx; font-weight: 600; text-align: center; line-height: 58rpx; font-size: 28rpx; color: #FFFFFF; } } </style>