海信彩屏线控器展会demo项目,20230515
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

294 lines
8.7 KiB

<template>
<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>
<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>
#device-control-wrapper {
width: 100vw;
height: 100vh;
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>