zhangzhiyi
2 years ago
7 changed files with 293 additions and 8 deletions
After Width: | Height: | Size: 102 KiB |
After Width: | Height: | Size: 104 KiB |
After Width: | Height: | Size: 92 KiB |
After Width: | Height: | Size: 5.2 KiB |
After Width: | Height: | Size: 3.6 KiB |
@ -1,13 +1,294 @@ |
|||||||
<template> |
<template> |
||||||
<div id="device-control-wrapper"></div> |
<div id="device-control-wrapper"> |
||||||
|
<div class="title"> |
||||||
|
<div class="title-name">设备</div> |
||||||
|
<div class="all-close-btn" @click="allShutDown()">一键全关</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="container"> |
||||||
|
<div class="content"> |
||||||
|
<div |
||||||
|
v-for="(item, index) in deviceList" |
||||||
|
:key="index" |
||||||
|
class="device-card" |
||||||
|
:class="{ |
||||||
|
'air-quality-you': item.airQuality === '优', |
||||||
|
'air-quality-liang': item.airQuality === '良', |
||||||
|
'air-quality-cha': item.airQuality === '差', |
||||||
|
}" |
||||||
|
> |
||||||
|
<div class="content-top"> |
||||||
|
<div class="device-name">{{ item.name }}</div> |
||||||
|
<div v-if="item.self_clean !== 0" class="status-border" :class="{'need-clean-bg': item.self_clean === 1, 'cleaning-bg': item.self_clean === 2}"> |
||||||
|
<!-- 需清洁 --> |
||||||
|
<span v-if="item.self_clean === 1" class="need-clean">需清洁</span> |
||||||
|
<!-- 自清洁中 --> |
||||||
|
<span v-if="item.self_clean === 2" class="cleaning">自清洁中</span> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="content-btm"> |
||||||
|
<!-- 非空气盒子 --> |
||||||
|
<div v-if="item.deviceType !== '02'" class="device-btm"> |
||||||
|
<div :class="!item.openFlg? 'shutdown': 'powerOn'"> |
||||||
|
<span |
||||||
|
v-for="i in item.statusArr" |
||||||
|
class="status" |
||||||
|
:class="!item.openFlg? '': i === '偏热'? 'hot': i === '偏冷'? 'cold': ''"> |
||||||
|
{{ i }} |
||||||
|
</span> |
||||||
|
<span v-for="i in item.unitArr" class="unit">{{ i }}</span> |
||||||
|
</div> |
||||||
|
<div class="close-btn" @click="switchDevice(item)"> |
||||||
|
<img src="@/assets/imgs/device-control/power_on@2x.png" v-show="item.openFlg"> |
||||||
|
<img src="@/assets/imgs/device-control/shutdown@2x.png" v-show="!item.openFlg"> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<!-- 空气盒子 --> |
||||||
|
<div v-if="item.deviceType === '02'"> |
||||||
|
<div :class="!item.openFlg? 'shutdown': 'powerOn'" class="box-btm"> |
||||||
|
<div v-for="(j, i) in item.statusArr"> |
||||||
|
<span class="status">{{ j }}</span><span class="unit" style="margin-right: 8px;">{{ item.unitArr[i] }}</span> |
||||||
|
</div> |
||||||
|
<div class="air-quality">{{ item.airQuality }}</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
</template> |
</template> |
||||||
|
|
||||||
<script lang="ts" setup></script> |
<script lang="ts" setup> |
||||||
|
import { ref, onMounted } from 'vue'; |
||||||
|
|
||||||
|
const deviceList: any = ref<any[]>([]); |
||||||
|
|
||||||
|
onMounted(() => { |
||||||
|
deviceList.value = [ |
||||||
|
{ |
||||||
|
name: 'Q5全热', |
||||||
|
openFlg: true, |
||||||
|
deviceType: '4D', |
||||||
|
self_clean: 0, |
||||||
|
statusArr: ['34'], |
||||||
|
unitArr: ['ug/m³'] |
||||||
|
}, { |
||||||
|
name: '书房空调', |
||||||
|
openFlg: false, |
||||||
|
deviceType: '01', |
||||||
|
self_clean: 1, |
||||||
|
statusArr: ['24'], |
||||||
|
unitArr: ['℃'] |
||||||
|
}, { |
||||||
|
name: '厨房空调', |
||||||
|
openFlg: true, |
||||||
|
deviceType: '01', |
||||||
|
self_clean: 2, |
||||||
|
statusArr: ['偏热'], |
||||||
|
unitArr: [] |
||||||
|
}, { |
||||||
|
name: '主卧空调', |
||||||
|
openFlg: true, |
||||||
|
deviceType: '01', |
||||||
|
self_clean: 0, |
||||||
|
statusArr: ['偏冷'], |
||||||
|
unitArr: [] |
||||||
|
}, { |
||||||
|
name: '餐厅空调', |
||||||
|
openFlg: true, |
||||||
|
deviceType: '01', |
||||||
|
self_clean: 0, |
||||||
|
statusArr: ['24'], |
||||||
|
unitArr: ['℃ 设定'] |
||||||
|
}, { |
||||||
|
name: '客厅空气盒子', |
||||||
|
openFlg: true, |
||||||
|
deviceType: '02', |
||||||
|
self_clean: 0, |
||||||
|
statusArr: ['25', '68'], |
||||||
|
unitArr: ['℃', '%'], |
||||||
|
airQuality: '良' |
||||||
|
} |
||||||
|
] |
||||||
|
}) |
||||||
|
|
||||||
|
/** 设备开关 */ |
||||||
|
const switchDevice = (item: any) => { |
||||||
|
item.openFlg = !item.openFlg; |
||||||
|
} |
||||||
|
|
||||||
|
/** 一键全关 */ |
||||||
|
const allShutDown = () => { |
||||||
|
deviceList.value.forEach((item: any) => { |
||||||
|
if (item.deviceType !== '02') { |
||||||
|
item.openFlg = false; |
||||||
|
} |
||||||
|
}) |
||||||
|
} |
||||||
|
</script> |
||||||
|
|
||||||
<style lang="scss" scoped> |
<style lang="scss" scoped> |
||||||
#device-control-wrapper { |
#device-control-wrapper { |
||||||
width: 100vw; |
width: 100vw; |
||||||
height: 100vh; |
height: 100vh; |
||||||
background: rgb(5, 154, 200); |
background: #000; |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
font-family: SourceHanSansCN-Regular, SourceHanSansCN; |
||||||
|
|
||||||
|
.title { |
||||||
|
width: 100%; |
||||||
|
padding: 35px 0; |
||||||
|
position: relative; |
||||||
|
flex-shrink: 0; |
||||||
|
|
||||||
|
.title-name { |
||||||
|
text-align: center; |
||||||
|
color: #FFF; |
||||||
|
font-weight: 400; |
||||||
|
font-size: 40px; |
||||||
|
} |
||||||
|
|
||||||
|
.all-close-btn { |
||||||
|
color: #FFF; |
||||||
|
font-size: 32px; |
||||||
|
padding: 14px 18px; |
||||||
|
background: #394457; |
||||||
|
border-radius: 16px; |
||||||
|
position: absolute; |
||||||
|
top: 25px; |
||||||
|
right: 24px; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.container { |
||||||
|
flex: 1; |
||||||
|
overflow: auto; |
||||||
|
} |
||||||
|
|
||||||
|
.content { |
||||||
|
display: flex; |
||||||
|
flex-wrap: wrap; |
||||||
|
justify-content: space-between; |
||||||
|
padding: 0 24px; |
||||||
|
|
||||||
|
.device-card { |
||||||
|
width: 326px; |
||||||
|
height: 146px; |
||||||
|
box-sizing: border-box; |
||||||
|
background: #20252E; |
||||||
|
border-radius: 16px; |
||||||
|
padding: 22px 24px 10px 24px; |
||||||
|
margin-bottom: 20px; |
||||||
|
|
||||||
|
.content-top { |
||||||
|
display: flex; |
||||||
|
align-items: center; |
||||||
|
|
||||||
|
.device-name { |
||||||
|
color: #FFF; |
||||||
|
font-size: 24px; |
||||||
|
margin-right: 10px; |
||||||
|
padding: 6px 0; |
||||||
|
} |
||||||
|
|
||||||
|
.status-border { |
||||||
|
font-size: 20px; |
||||||
|
padding: 6px 10px; |
||||||
|
border-radius: 16px; |
||||||
|
|
||||||
|
span { |
||||||
|
display: inline-block; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.need-clean-bg { |
||||||
|
background: rgba($color: #FF8F4D, $alpha: 0.3); |
||||||
|
color: #FF853D; |
||||||
|
} |
||||||
|
|
||||||
|
.cleaning-bg { |
||||||
|
background: rgba($color: #4382FF, $alpha: 0.3); |
||||||
|
color: #5991FF; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.content-btm { |
||||||
|
margin-top: 18px; |
||||||
|
font-family: Roboto-Light, Roboto; |
||||||
|
|
||||||
|
// 关机 |
||||||
|
.shutdown { |
||||||
|
color: #999; |
||||||
|
} |
||||||
|
|
||||||
|
// 开机 |
||||||
|
.powerOn { |
||||||
|
color: #FFF; |
||||||
|
} |
||||||
|
|
||||||
|
.status { |
||||||
|
font-size: 40px; |
||||||
|
font-weight: 300; |
||||||
|
margin-right: 4px; |
||||||
|
} |
||||||
|
|
||||||
|
.hot { |
||||||
|
color: #FF8F4D; |
||||||
|
} |
||||||
|
|
||||||
|
.cold { |
||||||
|
color: #507FDD; |
||||||
|
} |
||||||
|
|
||||||
|
.unit { |
||||||
|
font-size: 18px; |
||||||
|
font-weight: 400; |
||||||
|
} |
||||||
|
|
||||||
|
.air-quality { |
||||||
|
font-size: 40px; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// 空调设备底部 |
||||||
|
.device-btm { |
||||||
|
display: flex; |
||||||
|
justify-content: space-between; |
||||||
|
|
||||||
|
.close-btn { |
||||||
|
width: 60px; |
||||||
|
height: 60px; |
||||||
|
|
||||||
|
img { |
||||||
|
width: 100%; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// 空气盒子底部 |
||||||
|
.box-btm { |
||||||
|
display: flex; |
||||||
|
justify-content: space-between; |
||||||
|
align-items: flex-end; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.air-quality-you { |
||||||
|
background: url('@/assets/imgs/device-control/air_quality_you@2x.png') no-repeat; |
||||||
|
background-size: cover; |
||||||
|
} |
||||||
|
|
||||||
|
.air-quality-liang { |
||||||
|
background: url('@/assets/imgs/device-control/air_quality_liang@2x.png') no-repeat; |
||||||
|
background-size: cover; |
||||||
|
} |
||||||
|
|
||||||
|
.air-quality-cha { |
||||||
|
background: url('@/assets/imgs/device-control/air_quality_cha@2x.png') no-repeat; |
||||||
|
background-size: cover; |
||||||
|
} |
||||||
|
} |
||||||
} |
} |
||||||
</style> |
</style> |
Loading…
Reference in new issue