Browse Source

add air contral

organize
刘嘉炜 3 years ago
parent
commit
38c05dd475
  1. 2
      src/manifest.json
  2. 6
      src/pages.json
  3. 459
      src/subpackage/device/pages/air_conditioner/detail/detail.vue
  4. 191
      src/subpackage/device/pages/switch_manage/switch_manage.vue
  5. BIN
      src/subpackage/device/static/images/air_conditioner/close.png
  6. BIN
      src/subpackage/device/static/images/air_conditioner/heating.png
  7. BIN
      src/subpackage/device/static/images/air_conditioner/in_under_heating.png
  8. BIN
      src/subpackage/device/static/images/air_conditioner/lock.png
  9. BIN
      src/subpackage/device/static/images/air_conditioner/normal.png
  10. BIN
      src/subpackage/device/static/images/air_conditioner/open.png
  11. BIN
      src/subpackage/device/static/images/air_conditioner/refrigeration.png
  12. BIN
      src/subpackage/device/static/images/air_conditioner/switch.png
  13. BIN
      src/subpackage/device/static/images/air_conditioner/temp_add.png
  14. BIN
      src/subpackage/device/static/images/air_conditioner/temp_reduce.png
  15. BIN
      src/subpackage/device/static/images/air_conditioner/under_heating.png
  16. BIN
      src/subpackage/device/static/images/air_conditioner/ventilate.png
  17. BIN
      src/subpackage/device/static/images/air_conditioner/wind_0.png
  18. BIN
      src/subpackage/device/static/images/air_conditioner/wind_1.png
  19. BIN
      src/subpackage/device/static/images/air_conditioner/wind_2.png
  20. BIN
      src/subpackage/device/static/images/air_conditioner/wind_3.png

2
src/manifest.json

@ -54,7 +54,7 @@
}, },
"mp-weixin": { /* */ "mp-weixin": { /* */
"appid": "wxf1294b279ad1b845",
"appid": "wx7106e84614cf0060",
"setting": { "setting": {
"urlCheck": false "urlCheck": false
}, },

6
src/pages.json

@ -226,6 +226,12 @@
{ {
"root": "subpackage/device", "root": "subpackage/device",
"pages": [ "pages": [
{
"path": "pages/air_conditioner/detail/detail",
"style" : {
"navigationBarTitleText": "空调管理"
}
},
{ {
"path": "pages/index/index", "path": "pages/index/index",
"style" : { "style" : {

459
src/subpackage/device/pages/air_conditioner/detail/detail.vue

@ -0,0 +1,459 @@
<template>
<view class="air-conditioner-detail">
<view class="acd-tit">{{ airName || '-' }}</view>
<view class="acd-panel">
<view class="ap-top-info">
<view class="ati-box ati-temp">
<view class="ab-tit">温度</view>
<view class="at-info">
<view class="ai-btn">
<image mode="aspectFit" :src="getIconPath('temp_add')" @click="tempBtn('add')"></image>
</view>
<view class="ai-temp">
<view class="at-num">{{ pageInfo.temperature || 0 }}</view>
<view class="at-unit"></view>
</view>
<view class="ai-btn">
<image mode="aspectFit" :src="getIconPath('temp_reduce')" @click="tempBtn('reduce')"></image>
</view>
</view>
</view>
<view class="ati-box ati-wind">
<view class="ab-tit">风速</view>
<!-- 1: 低速 234自动 -->
<view class="aw-txt">{{ getSpeedName(pageInfo.speed || 0) }}</view>
</view>
</view>
<view class="ap-btns">
<view class="ab-item" @click="operateBtn({ op: 'on' })">
<image mode="aspectFit" :src="getIconPath('open')"></image>
<view></view>
</view>
<view class="ab-item" @click="operateBtn({ op: 'off' })">
<image mode="aspectFit" :src="getIconPath('close')"></image>
<view></view>
</view>
</view>
</view>
<view class="acd-btn-ls">
<view class="abl-tit">模式</view>
<view class="abl-ls">
<view class="al-item" v-for="(e, i) in modelLs" :key="i" @click="operateBtn({ op: 'mode', ext: e.mode })">
<view class="ai-icon">
<image mode="aspectFit" :src="getIconPath(e.icon)"></image>
</view>
<view class="ai-txt">{{ e.name || '-' }}</view>
</view>
</view>
</view>
<view class="acd-btn-ls">
<view class="abl-tit">风速</view>
<view class="abl-ls">
<view class="al-item" v-for="(e, i) in airSpeedLs" :key="i" @click="operateBtn({ op: 'speed', ext: e.speed })">
<view class="ai-icon">
<image mode="aspectFit" :src="getIconPath(e.icon)"></image>
</view>
<view class="ai-txt">{{ e.name || '-' }}</view>
</view>
</view>
</view>
<!-- 后台水阀的不管 隐藏掉 -->
<!-- <view class="acd-btn-ls">
<view class="abl-tit">水阀</view>
<view class="abl-ls">
<view class="al-item" v-for="(e, i) in hydrovalveLs" :key="i">
<view class="ai-icon">
<image mode="aspectFit" :src="getIconPath(e.icon)"></image>
</view>
<view class="ai-txt">{{ e.name || '-' }}</view>
</view>
</view>
</view> -->
<view class="acd-btn-ls">
<view class="abl-tit">允许使用按钮</view>
<view class="abl-ls">
<view class="al-item" v-for="(e, i) in allowLs" :key="i" @click="operateBtn({ op: e.op })">
<view class="ai-icon">
<image mode="aspectFit" :src="getIconPath(e.icon)"></image>
</view>
<view class="ai-txt">{{ e.name || '-' }}</view>
</view>
</view>
</view>
</view>
</template>
<script>
import deviceServer from '../../../js/device_server';
import deviceApi from '../../../js/device_api';
import util from '../../../../../utils/util';
/*
+ info 获取信息状态
+ st 设置温度(value:{op:"st",ext:"24"}) 10 - 50
+ mode 模式设置(value:{op:"mode",ext:"1"}) // 0 1() 239
+ speed 风速设置(value:{op:"speed",ext:"1"}) // 1: 234
+ lock
+ unlock 解锁
+ on
+ off
*/
export default {
computed: {
modelLs(){
return ([
{
id: 1,
name: '内机制热',
icon: 'heating',
mode: 0,
},
{
id: 2,
name: '内机地暖 制热',
icon: 'in_under_heating',
mode: 1,
},
{
id: 3,
name: '地暖制热',
icon: 'under_heating',
mode: 2,
},
{
id: 4,
name: '制冷',
icon: 'refrigeration',
mode: 3,
},
{
id: 5,
name: '通风',
icon: 'ventilate',
mode: 9,
},
])
},
airSpeedLs(){
return ([
{
id: 1,
name: '高',
icon: 'wind_3',
speed: 3,
},
{
id: 2,
name: '中',
icon: 'wind_2',
speed: 2,
},
{
id: 3,
name: '低',
icon: 'wind_1',
speed: 1,
},
{
id: 4,
name: '自动',
icon: 'wind_0',
speed: 4,
},
])
},
hydrovalveLs(){
return ([
{
id: 1,
name: '开',
icon: 'open'
},
{
id: 2,
name: '关',
icon: 'close'
},
])
},
allowLs(){
return ([
{
id: 2,
name: '开机',
icon: 'switch',
op: 'on',
},
{
id: 3,
name: '关机',
icon: 'close',
op: 'off',
},
{
id: 1,
name: '解锁',
icon: 'normal',
op: 'unlock',
},
{
id: 4,
name: '全锁',
icon: 'lock',
op: 'lock',
},
])
},
},
data(){
return {
subpackInfo: {},
pageInfo: {},
airName: ''
}
},
onLoad(options){
console.warn('qrstr', options.qrstr);
if(options.name)this.airName = options.name;
let _qyObj = null;
try{
_qyObj = util.jsonPar(options.qrstr);
}catch(err){
console.warn('json ERR', err);
}
if(!_qyObj)return;
console.warn('_qyObj', _qyObj);
_qyObj = this.setExt({ query: _qyObj, value: '', });
this.subpackInfo = _qyObj;
this.operateReq({ data: _qyObj, isTip: false });
},
methods: {
tempBtn: util.debounce(function(type){
let { pageInfo } = this;
let _num = pageInfo.temperature || 0;
_num = type == 'add' ? _num++ : type == 'reduce' ? _num-- : _num;
this.operateReq({ data: this.getOperateData({ op: 'st', ext: _num }), isTip: false });
}, 300, true),
operateBtn: util.debounce(function({ op='', ext='' }){
let { subpackInfo } = this;
this.operateReq({
data: this.getOperateData({ op, ext })
})
.then(res=>{
if(res == 'success'){
setTimeout(_=>{
this.operateReq({ data: this.getOperateData({ op: 'st', }), isTip: false });
}, 1200)
}
})
}, 300, true),
getOperateData({ op='', ext='' }){
let { subpackInfo } = this;
let _obj = null;
_obj = this.setOp({ query: subpackInfo, value: op, });
_obj = this.setExt({ query: subpackInfo, value: ext, });
return _obj;
},
getSpeedName(speed){
switch(+speed){
case 1:
return '低速'
case 2:
return '中速'
case 3:
return '高速'
case 4:
return '自动'
default:
return '-'
}
},
setExt({query, value}){
if(query.data.toString() !== '[object Object]')query.data = {};
if(query.data.value.toString() !== '[object Object]')query.data.value = {};
query.data&&query.data.value&&(query.data.value.ext = value);
return query;
},
setOp({query, value}){
if(query.data.toString() !== '[object Object]')query.data = {};
if(query.data.value.toString() !== '[object Object]')query.data.value = {};
query.data&&query.data.value&&(query.data.value.op = value);
return query;
},
getIconPath(iconName){
if(!iconName)return '';
return `/subpackage/device/static/images/air_conditioner/${iconName}.png`
},
//
operateReq({data, isTip=true, isLoad=true}){
if(isLoad)util.showLoad();
return deviceServer.post({
url: deviceApi.ouxuanac,
data: data,
isDefaultGet: false,
})
.then(res=>{
if(isLoad)util.hideLoad();
if(res.data.code == 0){
if(isTip)util.showNone(res.data.message || '操作成功!');
if(data.data&&data.data.value&&data.data.value.op === 'info')this.pageInfo = res.data.data || {};
return 'success'
}else{
if(isTip)util.showNone(res.data.message || '操作失败!');
return 'fail';
}
})
.catch(err=>{if(isLoad)util.hideLoad()})
},
}
}
</script>
<style lang="scss">
@import '~style/public.scss';
.air-conditioner-detail{
padding: 40upx;
.acd-tit{
margin-bottom: 40upx;
font-size: 44upx;
font-weight: 500;
color: #333;
}
.acd-panel{
margin-bottom: 60upx;
padding: 24upx 14upx 50upx;
border-radius: 10upx;
background-color: #fff;
.ap-top-info{
margin-bottom: 64upx;
flex-wrap: nowrap;
@include centerFlex(center);
.ati-box{
flex-shrink: 0;
max-width: 50%;
margin: 0 10upx;
padding: 12upx 20upx;
flex-grow: 1;
height: 178upx;
border-radius: 4upx;
background-color: #f2f2f7;
.ab-tit{
font-size: 28upx;
line-height: 40upx;
color: #9c9c9f;
}
}
.ati-temp{
.at-info{
@include centerFlex(space-between);
.ai-btn{
flex-shrink: 0;
width: 24upx;
height: 24upx;
>image{
width: 100%;
height: 100%;
}
}
.ai-temp{
display: flex;
justify-content: center;
align-items: center;
.at-num{
line-height: 112upx;
font-weight: 500;
font-size: 80upx;
color: $themeColor;
@include textHide(1);
}
.at-unit{
flex-shrink: 0;
padding-top: 10upx;
align-self: flex-start;
font-size: 28upx;
line-height: 40upx;
color: $themeColor;
}
}
}
}
.ati-wind{
.aw-txt{
line-height: 90upx;
text-align: center;
font-weight: 500;
font-size: 64upx;
color: $themeColor;
}
}
}
.ap-btns{
@include centerFlex(center);
.ab-item{
margin: 0 60upx;
>image{
margin: 0 auto 20upx;
display: block;
width: 100upx;
height: 100upx;
}
>view{
margin: 0 auto;
text-align: center;
font-size: 24upx;
line-height: 34upx;
color: #9a9a9d;
}
}
}
}
.acd-btn-ls{
width: 100%;
margin-bottom: 50upx;
.abl-tit{
margin-bottom: 28upx;
line-height: 40upx;
font-size: 28upx;
color: #9c9c9f;
}
.abl-ls{
display: flex;
flex-wrap: wrap;
.al-item{
margin-bottom: 24upx;
width: 116upx;
flex-shrink: 0;
flex-grow: 0;
&:not(:nth-child(5n)){
margin-right: 20upx;
}
.ai-icon{
margin: 0 auto 14upx;
width: 116upx;
height: 116upx;
border-radius: 10upx;
background-color: #fff;
@include centerFlex(center);
>image{
width: 60upx;
height: 60upx;
}
}
.ai-txt{
text-align: center;
text-align: center;
line-height: 40upx;
font-size: 28upx;
color: #1a1a1a;
@include textHide(2);
}
}
}
}
}
</style>

191
src/subpackage/device/pages/switch_manage/switch_manage.vue

@ -46,6 +46,10 @@
<view >{{pageInfo.detailName || '-'}}</view> <view >{{pageInfo.detailName || '-'}}</view>
</view> </view>
</view> </view>
<view class="si-detail-btn" v-if="pageInfo.isDetailBtn" @click="toDeviceDetail(e)">
<text>详情</text>
<image mode="aspectFit" src="/subpackage/device/static/images/arrow_b2.png"></image>
</view>
</view> </view>
</view> </view>
</view> </view>
@ -58,84 +62,7 @@
import store_name from '../../components/store_name/store_name'; import store_name from '../../components/store_name/store_name';
import deviceServer from '../../js/device_server'; import deviceServer from '../../js/device_server';
import deviceApi from '../../js/device_api'; import deviceApi from '../../js/device_api';
const showArr = {
's1': {
id: 1, name: '照明管理', isOpen: true, isClose: true, isLongOpen:true, isTiming:true,
openIcon: '/subpackage/device/static/images/open.png',closeIcon: '/subpackage/device/static/images/close.png',
longOpenIcon: '/subpackage/device/static/images/longOpen.png',timingIcon: '/subpackage/device/static/images/timing.png',
openName: '开', closeName: '关', longOpenName: '长开', timingName: '定时', hardware_type: 'Light',iconNum:4
},
's2': {
id: 2, name: '空调管理', isOpen: true, isClose: true,
openIcon: '/subpackage/device/static/images/open.png',
closeIcon: '/subpackage/device/static/images/close.png',
openName: '开', closeName: '关', hardware_type: 'Air',iconNum:2
},
's3': {
id: 3, name: '风扇管理', isOpen: true, isClose: true, isLongOpen:true, isTiming:true,
openIcon: '/subpackage/device/static/images/open.png',
closeIcon: '/subpackage/device/static/images/close.png',
longOpenIcon: '/subpackage/device/static/images/longOpen.png',timingIcon: '/subpackage/device/static/images/timing.png',
openName: '开', closeName: '关', hardware_type: 'Fan',longOpenName: '长开', timingName: '定时',iconNum:4,
},
's4': {
id: 4, name: '门禁管理', isOpen: true, isClose: false,
openIcon: '/subpackage/device/static/images/open.png',
closeIcon: '/subpackage/device/static/images/close.png',
openName: '开', closeName: '关', hardware_type: 'AccessControl',iconNum:2
},
's5': {
id: 5, name: '门闸管理', isOpen: true, isClose: true,
openIcon: '/subpackage/device/static/images/in.png',
closeIcon: '/subpackage/device/static/images/out.png',
openName: '进', closeName: '出', hardware_type: 'GateControl',iconNum:2
},
's6': {//TODO
id: 6, name: '平板管理', isOpen: false, isClose: false,
openIcon: '/subpackage/device/static/images/open.png',
closeIcon: '/subpackage/device/static/images/close.png',
openName: '开', closeName: '关', hardware_type: 'Router4G',iconNum:2
},
's11': {
id: 11, name: '水阀管理', isOpen: true, isClose: true,isLongOpen:true, isTiming:true,
openIcon: '/subpackage/device/static/images/open.png',
closeIcon: '/subpackage/device/static/images/close.png',
longOpenIcon: '/subpackage/device/static/images/longOpen.png',timingIcon: '/subpackage/device/static/images/timing.png',
openName: '开', closeName: '关', hardware_type: 'WaterValve',longOpenName: '长开', timingName: '定时',iconNum:4,
},
's12': {
id: 12, name: '互动设备管理', isOpen: true, isClose: true,
openIcon: '/subpackage/device/static/images/open.png',
closeIcon: '/subpackage/device/static/images/close.png',
openName: '开', closeName: '关', hardware_type: '',iconNum:2
},
's13': {//TODO
id: 13, name: '监控管理', isOpen: false, isClose: false, isDetail:true,
openIcon: '/subpackage/device/static/images/open.png',
closeIcon: '/subpackage/device/static/images/close.png',
openName: '开', closeName: '关',detailName:"详情", hardware_type: 'IotSim',iconNum:2
},
's17': {//TODO
id: 17, name: '窗帘管理', isOpen: false, isClose: false, isDetail:true,
openIcon: '/subpackage/device/static/images/open.png',
closeIcon: '/subpackage/device/static/images/close.png',
openName: '开', closeName: '关',detailName:"详情", hardware_type: 'Router4G',iconNum:2
},
's18': {
id: 18, name: '路由器管理', isOpen: false, isClose: false, isDetail:true,
openIcon: '/subpackage/device/static/images/open.png',
closeIcon: '/subpackage/device/static/images/close.png',
openName: '开', closeName: '关',detailName:"详情", hardware_type: 'Router4G',iconNum:2
},
's19': {
id: 19, name: '物联卡管理', isOpen: false, isClose: false, isDetail:true,
openIcon: '/subpackage/device/static/images/open.png',
closeIcon: '/subpackage/device/static/images/close.png',
openName: '开', closeName: '关',detailName:"详情", hardware_type: 'IotSim',iconNum:2
},
}
import { mapState } from 'vuex'; import { mapState } from 'vuex';
import util from '../../../../utils/util'; import util from '../../../../utils/util';
@ -180,7 +107,7 @@ export default {
} }
}, },
onLoad(options){ onLoad(options){
let _pageInfo = showArr[`s${options.sid}`] || {};
let _pageInfo = getShowArr(`s${options.sid}`) || {};
this.pageInfo = _pageInfo; this.pageInfo = _pageInfo;
uni.setNavigationBarTitle({ title: _pageInfo.name }); uni.setNavigationBarTitle({ title: _pageInfo.name });
@ -190,7 +117,15 @@ export default {
}) })
}, },
methods: { methods: {
toDeviceDetail(e){
console.warn(e);
console.warn(this.getSwitchStatusQuery(e));
let _queryObj = this.getSwitchStatusQuery(e) || {};
if(!_queryObj.data || !_queryObj.data.name || !_queryObj.data.value)return;
_queryObj.data.value&&_queryObj.data.value.op&&(_queryObj.data.value.op = 'info');
let _qrStr = util.jsonStr(_queryObj);
if(e.hardware_type == "Air")return util.routeTo(`/subpackage/device/pages/air_conditioner/detail/detail?qrstr=${_qrStr}&name=${e.hardware_name || '-'}`, 'nT');
},
getDeviceList({ getDeviceList({
stadium_id, stadium_id,
hardware_type, hardware_type,
@ -405,7 +340,7 @@ export default {
// status -> 0 -> 1 -> // status -> 0 -> 1 ->
// src\subpackage\device\js\ouxuanac.md // src\subpackage\device\js\ouxuanac.md
// hardware_type === 'Air' // hardware_type === 'Air'
getSwitchQuery({ switchInfo, status }){
getSwitchQuery({ switchInfo, status = '' }){
let { let {
hardware_connect_method, hardware_connect_method,
hardware_type, hardware_type,
@ -498,6 +433,88 @@ export default {
} }
} }
} }
function getShowArr(key){
let _obj = {
's1': {
id: 1, name: '照明管理', isOpen: true, isClose: true, isLongOpen:true, isTiming:true,
openIcon: '/subpackage/device/static/images/open.png',closeIcon: '/subpackage/device/static/images/close.png',
longOpenIcon: '/subpackage/device/static/images/longOpen.png',timingIcon: '/subpackage/device/static/images/timing.png',
openName: '开', closeName: '关', longOpenName: '长开', timingName: '定时', hardware_type: 'Light',iconNum:4
},
's2': {
id: 2, name: '空调管理', isOpen: true, isClose: true, isDetailBtn: true,
openIcon: '/subpackage/device/static/images/open.png',
closeIcon: '/subpackage/device/static/images/close.png',
openName: '开', closeName: '关', hardware_type: 'Air',iconNum:2
},
's3': {
id: 3, name: '风扇管理', isOpen: true, isClose: true, isLongOpen:true, isTiming:true,
openIcon: '/subpackage/device/static/images/open.png',
closeIcon: '/subpackage/device/static/images/close.png',
longOpenIcon: '/subpackage/device/static/images/longOpen.png',timingIcon: '/subpackage/device/static/images/timing.png',
openName: '开', closeName: '关', hardware_type: 'Fan',longOpenName: '长开', timingName: '定时',iconNum:4,
},
's4': {
id: 4, name: '门禁管理', isOpen: true, isClose: false,
openIcon: '/subpackage/device/static/images/open.png',
closeIcon: '/subpackage/device/static/images/close.png',
openName: '开', closeName: '关', hardware_type: 'AccessControl',iconNum:2
},
's5': {
id: 5, name: '门闸管理', isOpen: true, isClose: true,
openIcon: '/subpackage/device/static/images/in.png',
closeIcon: '/subpackage/device/static/images/out.png',
openName: '进', closeName: '出', hardware_type: 'GateControl',iconNum:2
},
's6': {//TODO
id: 6, name: '平板管理', isOpen: false, isClose: false,
openIcon: '/subpackage/device/static/images/open.png',
closeIcon: '/subpackage/device/static/images/close.png',
openName: '开', closeName: '关', hardware_type: 'Router4G',iconNum:2
},
's11': {
id: 11, name: '水阀管理', isOpen: true, isClose: true,isLongOpen:true, isTiming:true,
openIcon: '/subpackage/device/static/images/open.png',
closeIcon: '/subpackage/device/static/images/close.png',
longOpenIcon: '/subpackage/device/static/images/longOpen.png',timingIcon: '/subpackage/device/static/images/timing.png',
openName: '开', closeName: '关', hardware_type: 'WaterValve',longOpenName: '长开', timingName: '定时',iconNum:4,
},
's12': {
id: 12, name: '互动设备管理', isOpen: true, isClose: true,
openIcon: '/subpackage/device/static/images/open.png',
closeIcon: '/subpackage/device/static/images/close.png',
openName: '开', closeName: '关', hardware_type: '',iconNum:2
},
's13': {//TODO
id: 13, name: '监控管理', isOpen: false, isClose: false, isDetail:true,
openIcon: '/subpackage/device/static/images/open.png',
closeIcon: '/subpackage/device/static/images/close.png',
openName: '开', closeName: '关',detailName:"详情", hardware_type: 'IotSim',iconNum:2
},
's17': {//TODO
id: 17, name: '窗帘管理', isOpen: false, isClose: false, isDetail:true,
openIcon: '/subpackage/device/static/images/open.png',
closeIcon: '/subpackage/device/static/images/close.png',
openName: '开', closeName: '关',detailName:"详情", hardware_type: 'Router4G',iconNum:2
},
's18': {
id: 18, name: '路由器管理', isOpen: false, isClose: false, isDetail:true,
openIcon: '/subpackage/device/static/images/open.png',
closeIcon: '/subpackage/device/static/images/close.png',
openName: '开', closeName: '关',detailName:"详情", hardware_type: 'Router4G',iconNum:2
},
's19': {
id: 19, name: '物联卡管理', isOpen: false, isClose: false, isDetail:true,
openIcon: '/subpackage/device/static/images/open.png',
closeIcon: '/subpackage/device/static/images/close.png',
openName: '开', closeName: '关',detailName:"详情", hardware_type: 'IotSim',iconNum:2
},
}
return _obj[key] || {}
}
</script> </script>
<style lang="scss"> <style lang="scss">
@ -631,6 +648,20 @@ export default {
} }
} }
.si-detail-btn{
height: 82upx;
line-height: 82upx;
text-align: center;
font-size: 28upx;
color: #333;
border-top: 2upx solid #F2F2F7;
>image{
margin-left: 10upx;
width: 24upx;
height: 24upx;
vertical-align: middle;
}
}
} }
} }
</style> </style>

BIN
src/subpackage/device/static/images/air_conditioner/close.png

After

Width: 200  |  Height: 200  |  Size: 4.2 KiB

BIN
src/subpackage/device/static/images/air_conditioner/heating.png

After

Width: 120  |  Height: 120  |  Size: 1.8 KiB

BIN
src/subpackage/device/static/images/air_conditioner/in_under_heating.png

After

Width: 120  |  Height: 120  |  Size: 2.1 KiB

BIN
src/subpackage/device/static/images/air_conditioner/lock.png

After

Width: 120  |  Height: 120  |  Size: 1.1 KiB

BIN
src/subpackage/device/static/images/air_conditioner/normal.png

After

Width: 120  |  Height: 120  |  Size: 2.4 KiB

BIN
src/subpackage/device/static/images/air_conditioner/open.png

After

Width: 200  |  Height: 200  |  Size: 3.1 KiB

BIN
src/subpackage/device/static/images/air_conditioner/refrigeration.png

After

Width: 120  |  Height: 120  |  Size: 1.4 KiB

BIN
src/subpackage/device/static/images/air_conditioner/switch.png

After

Width: 120  |  Height: 120  |  Size: 1.1 KiB

BIN
src/subpackage/device/static/images/air_conditioner/temp_add.png

After

Width: 56  |  Height: 56  |  Size: 291 B

BIN
src/subpackage/device/static/images/air_conditioner/temp_reduce.png

After

Width: 48  |  Height: 48  |  Size: 193 B

BIN
src/subpackage/device/static/images/air_conditioner/under_heating.png

After

Width: 120  |  Height: 120  |  Size: 920 B

BIN
src/subpackage/device/static/images/air_conditioner/ventilate.png

After

Width: 120  |  Height: 120  |  Size: 940 B

BIN
src/subpackage/device/static/images/air_conditioner/wind_0.png

After

Width: 120  |  Height: 120  |  Size: 719 B

BIN
src/subpackage/device/static/images/air_conditioner/wind_1.png

After

Width: 120  |  Height: 120  |  Size: 656 B

BIN
src/subpackage/device/static/images/air_conditioner/wind_2.png

After

Width: 120  |  Height: 120  |  Size: 795 B

BIN
src/subpackage/device/static/images/air_conditioner/wind_3.png

After

Width: 120  |  Height: 120  |  Size: 691 B

Loading…
Cancel
Save