Former-commit-id: 61e29af0fecb621557d341bab81d1b89e87a1bfb
Former-commit-id: dee533e8aa46c86f6913884e2b74085feb8d2596
TSXN
wanggang 5 years ago
parent 543cc69a38
commit b212b740ac

@ -0,0 +1,442 @@
<template>
<div id="ir">
<div class="card" style="box-sizing:border-box;margin:10px;">
<div class="card-body" style="padding:10px;">
<div id="air" v-if="type==='空调'">
<table style="margin: 50px auto;">
<tr>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" :value="power.value" v-on:click="changePower($event.target.value)">电源</button>
</td>
<td></td>
<td>{{power.name}}</td>
</tr>
<tr>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" :value="pattern.value" v-on:click="changePattern($event.target.value)">模式</button>
</td>
<td></td>
<td>{{pattern.name}}</td>
</tr>
<tr>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" :value="wind.value" v-on:click="changeWind($event.target.value)">风速</button>
</td>
<td></td>
<td>{{wind.name}}</td>
</tr>
<tr>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" :value="direction.value" v-on:click="changeDirection($event.target.value)">风向</button>
</td>
<td></td>
<td>{{direction.name}}</td>
</tr>
<tr>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" :value="temperature.value" v-on:click="changeTemperature($event.target.value,-1)">-</button>
</td>
<td>
{{temperature.name}}
</td>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" :value="temperature.value" v-on:click="changeTemperature($event.target.value,1)">+</button>
</td>
</tr>
</table>
</div>
<div id="tv" v-else-if="type==='电视'">
<table style="margin: 20px auto;">
<tr>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="1" v-on:click="send($event.target.value,2)">电源</button>
</td>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="2" v-on:click="send($event.target.value,2)">AV</button>
</td>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="15" v-on:click="send($event.target.value,2)">静音</button>
</td>
</tr>
<tr>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="1" v-on:click="send($event.target.value,2)">1</button>
</td>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="2" v-on:click="send($event.target.value,2)">2</button>
</td>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="3" v-on:click="send($event.target.value,2)">3</button>
</td>
</tr>
<tr>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="4" v-on:click="send($event.target.value,2)">4</button>
</td>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="5" v-on:click="send($event.target.value,2)">5</button>
</td>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="6" v-on:click="send($event.target.value,2)">6</button>
</td>
</tr>
<tr>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="7" v-on:click="send($event.target.value,2)">7</button>
</td>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="8" v-on:click="send($event.target.value,2)">8</button>
</td>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="9" v-on:click="send($event.target.value,2)">9</button>
</td>
</tr>
<tr>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="13" v-on:click="send($event.target.value,2)">返回</button>
</td>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="0" v-on:click="send($event.target.value,2)">0</button>
</td>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="14" v-on:click="send($event.target.value,2)">退出</button>
</td>
</tr>
<tr>
<td>
</td>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="19" v-on:click="send($event.target.value,2)"></button>
</td>
<td>
</td>
</tr>
<tr>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="21" v-on:click="send($event.target.value,2)"></button>
</td>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="23" v-on:click="send($event.target.value,2)">OK</button>
</td>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="22" v-on:click="send($event.target.value,2)"></button>
</td>
</tr>
<tr>
<td>
</td>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="8" v-on:click="send($event.target.value,2)"></button>
</td>
<td>
</td>
</tr>
<tr>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="17" v-on:click="send($event.target.value,2)">+</button>
</td>
<td>
</td>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="24" v-on:click="send($event.target.value,2)"></button>
</td>
</tr>
<tr>
<td style="text-align: center;">
音量
</td>
<td style="text-align: center;">
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="16" v-on:click="send($event.target.value,2)">菜单</button>
</td>
<td style="text-align: center;">
频道
</td>
</tr>
<tr>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="18" v-on:click="send($event.target.value,2)">-</button>
</td>
<td>
</td>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="25" v-on:click="send($event.target.value,2)"></button>
</td>
</tr>
<tr>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="26" v-on:click="send($event.target.value,2)">快退</button>
</td>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="28" v-on:click="send($event.target.value,2)">播放</button>
</td>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="28" v-on:click="send($event.target.value,2)">快进</button>
</td>
</tr>
</table>
</div>
<div id="box" v-else-if="type==='机顶盒'">
<table style="margin: 20px auto;">
<tr>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="1" v-on:click="send($event.target.value,3)">电源</button>
</td>
<td></td>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="15" v-on:click="send($event.target.value,3)">静音</button>
</td>
</tr>
<tr>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="1" v-on:click="send($event.target.value,3)">1</button>
</td>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="2" v-on:click="send($event.target.value,3)">2</button>
</td>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="3" v-on:click="send($event.target.value,3)">3</button>
</td>
</tr>
<tr>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="4" v-on:click="send($event.target.value,3)">4</button>
</td>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="5" v-on:click="send($event.target.value,3)">5</button>
</td>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="6" v-on:click="send($event.target.value,3)">6</button>
</td>
</tr>
<tr>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="7" v-on:click="send($event.target.value,3)">7</button>
</td>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="8" v-on:click="send($event.target.value,3)">8</button>
</td>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="9" v-on:click="send($event.target.value,3)">9</button>
</td>
</tr>
<tr>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="13" v-on:click="send($event.target.value,3)">返回</button>
</td>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="0" v-on:click="send($event.target.value,3)">0</button>
</td>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="14" v-on:click="send($event.target.value,3)">退出</button>
</td>
</tr>
<tr>
<td>
</td>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="19" v-on:click="send($event.target.value,3)"></button>
</td>
<td>
</td>
</tr>
<tr>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="21" v-on:click="send($event.target.value,3)"></button>
</td>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="23" v-on:click="send($event.target.value,3)">OK</button>
</td>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="22" v-on:click="send($event.target.value,3)"></button>
</td>
</tr>
<tr>
<td>
</td>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="8" v-on:click="send($event.target.value,3)"></button>
</td>
<td>
</td>
</tr>
<tr>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="17" v-on:click="send($event.target.value,3)">+</button>
</td>
<td>
</td>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="24" v-on:click="send($event.target.value,3)"></button>
</td>
</tr>
<tr>
<td>
音量
</td>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="16" v-on:click="send($event.target.value,3)">菜单</button>
</td>
<td>
频道
</td>
</tr>
<tr>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="18" v-on:click="send($event.target.value,3)">-</button>
</td>
<td>
</td>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="25" v-on:click="send($event.target.value,3)"></button>
</td>
</tr>
<tr>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="26" v-on:click="send($event.target.value,3)">快退</button>
</td>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="28" v-on:click="send($event.target.value,3)">播放</button>
</td>
<td>
<button type="button" class="btn btn-block btn-default btn-sm" style="padding:0 10px" value="28" v-on:click="send($event.target.value,3)">快进</button>
</td>
</tr>
</table>
</div>
<div id="diy" v-else>
<div class="button-sp-area cell" style="width:100%;height:100%;overflow:auto;">
<button v-for="button in buttons" type="button" class="btn btn-default px-2 m-2 btn-sm" :value="button.value" v-on:click="send($event.target.value,5)">{{button.name}}</button>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
name: 'iot-ir-command',
props: ['type', 'value', 'buttons'],
data: function () {
return {
currentType: this.type,
code: this.value || 0
};
},
watch: {
code(val) {
this.$emit('update:value', val);
//this.$emit('change', this.name);
}
},
methods: {
changePattern: function (v) {
this.change(v, 0, 480, 120);
},
changeDirection(v) {
this.change(v, 0, 60, 60);
},
changeWind(v) {
this.change(v, 0, 45, 15);
},
changePower: function (v) {
var oldValue = parseInt(v);
if (oldValue === 1) {
this.send(3);
//getData(this.device, '按键').value = 3;
}
else if (oldValue === 2) {
this.send(1);
//getData(this.device, '按键').value = 1;
}
},
changeTemperature: function (v, step) {
var oldValue = parseInt(v);
var min = 1;
var max = 15;
var newValue = oldValue + step;
if (step > 0 && newValue > max) {
newValue = max;
}
else if (step < 0 && newValue < min) {
newValue = min;
}
var newCode = this.code - oldValue + newValue;
this.send(newCode, 1);
//getData(this.device, '按键').value = newCode;
},
change: function (v, min, max, step) {
var oldValue = parseInt(v);
var newValue = oldValue + step;
if (newValue > max) {
newValue = min;
}
var newCode = this.code - oldValue + newValue;
this.send(newCode);
//this.getData(this.device, '按键').value = newCode;
},
send: function (value, type) {
this.code = value;
this.$emit('update:value', value);
},
},
computed: {
pattern: function () {
var code = this.code;
var pattern = { name: '制冷', value: 0 };
if (code > 480 + 2) {
pattern = { name: '通风', value: 480 };
}
else if (code > 360 + 2) {
pattern = { name: '抽湿', value: 360 };
}
else if (code > 240 + 2) {
pattern = { name: '制热', value: 240 };
}
else if (code > 120 + 2) {
pattern = { name: '自动', value: 120 };
}
return pattern;
},
direction: function () {
var code = this.code - this.pattern.value;
var direction = { name: '自动', value: 0 };;
if (code > 60 + 2) {
direction = { name: '手动', value: 60 };
}
return direction;
},
wind: function () {
var code = this.code - this.pattern.value - this.direction.value;
var wind = { name: '自动', value: 0 };
if (code > 45 + 2) {
wind = { name: '低', value: 45 };
}
else if (code > 30 + 2) {
wind = { name: '中', value: 30 };
}
else if (code > 15 + 2) {
wind = { name: '高', value: 15 };
}
return wind;
},
power: function () {
var code = this.code - this.pattern.value - this.direction.value - this.wind.value;
var power = { name: '关', value: 1 };
if (code > 1) {
power = { name: '开', value: 2 };
}
return power;
},
temperature: function () {
var code = this.code - this.pattern.value - this.direction.value - this.wind.value - this.power.value;
var temperature = { name: '16℃', value: 1 };
if (code > 1) {
temperature = { name: parseInt(code + 15) + '℃', value: code };
}
return temperature;
}
}
};
</script>

@ -71,6 +71,7 @@ var iotComponents = [
'door',
'camera',
'serial-port',
'ir-command'
];
for (var i = 0; i < iotComponents.length; i++) {
var name = 'iot-'+iotComponents[i];

@ -94,25 +94,50 @@
</div>
<template v-if="data.model&&data.model.apiId&&data.model.parameters.length">
<hr />
<template v-if="deviceName==='红外转发器'">
<template v-if="(deviceName==='红外转发器'&&apiName()==='发送指令')">
<template v-for="(param,index) in data.model.parameters">
<div class="form-group row" v-if="param.description==='按键类型'">
<label class="col-sm-2 col-form-label">{{param.description}}:</label>
<div class="col-sm-6 form-control" style="border-color:transparent;height:auto;min-height:calc(2.25rem + 2px);">
<select id="irType" class="form-control" v-model="param.value" @input="change2(index)">
<option value="null">请选择</option>
<option v-for="item in getIrTypeList()" :value="item.value">{{item.text}}</option>
</select>
<div style="height:1em;">
<span v-if="hasErrors2(index)" class="field-validation-error text-danger">{{getPropertyErrors2(index)}}</span>
<span v-else class="text-danger field-validation-valid"></span>
</div>
</div>
</div>
<div class="form-group row" v-if="param.description==='键值'&&getIrType()!=='请选择'">
<label class="col-sm-2 col-form-label">{{param.description}}:</label>
<div class="col-sm-6 form-control" style="border-color:transparent;height:auto;min-height:calc(2.25rem + 2px);">
<iot-ir-command :type="getIrType()" :value.sync="param.value" :buttons="getIrButtons()" />
<div style="height:1em;">
<span v-if="hasErrors2(index)" class="field-validation-error text-danger">{{getPropertyErrors2(index)}}</span>
<span v-else class="text-danger field-validation-valid"></span>
</div>
</div>
</div>
</template>
</template>
<template v-else-if="deviceName==='串口控制器'">
<div class="form-group row">
<label class="col-sm-2 col-form-label">{{data.model.parameters[0].description}}:</label>
<template v-else-if="(deviceName==='串口控制器'&&apiName()==='发送指令')">
<div class="form-group row" v-for="(param,index) in data.model.parameters" v-if="param.description==='命令'">
<label class="col-sm-2 col-form-label">{{param.description}}:</label>
<div class="col-sm-6 form-control" style="border-color:transparent;height:auto;min-height:calc(2.25rem + 2px);">
<select class="form-control" v-model="data.model.parameters[0].value" @input="change2(0)">
<option value="null">请选择</option>
<select class="form-control" v-model="param.value" @input="change2(index)">
<option value="'null'">请选择</option>
<option v-for="item in getSPCommands()" :value="item.name">{{item.name}}</option>
</select>
<div style="height:1em;">
<span v-if="hasErrors2(0)" class="field-validation-error text-danger">{{getPropertyErrors2(0)}}</span>
<span v-if="hasErrors2(index)" class="field-validation-error text-danger">{{getPropertyErrors2(index)}}</span>
<span v-else class="text-danger field-validation-valid"></span>
</div>
</div>
</div>
</template>
<template v-else v-for="(param,index) in data.model.parameters">
<div class="form-group row">
<template v-else>
<div class="form-group row" v-for="(param,index) in data.model.parameters">
<label class="col-sm-2 col-form-label">{{param.description}}:</label>
<div class="col-sm-6 form-control" style="border-color:transparent;height:auto;min-height:calc(2.25rem + 2px);">
<input type="text" class="form-control" v-model="param.value" @input="change2(index)" />
@ -236,6 +261,9 @@
}
}
},
apiName: function () {
return $('#apiId option:selected').text();
},
change2: function (index) {
var item = this.data.model.parameters[index];
var value = item.value;
@ -292,6 +320,27 @@
}
return [];
},
getIrButtons: function () {
var commandData = Enumerable.from(this.data.data.device.data).where(o => o.name === '指令').firstOrDefault();
if (commandData) {
return Enumerable.from(JSON.parse(commandData.value))
.orderBy(function (o) { return o.order; })
.toArray();
}
return [];
},
getIrTypeList: function () {
return [
{ value: "1", text: "空调" },
{ value: "2", text: "电视" },
{ value: "3", text: "机顶盒" },
{ value: "5", text: "自定义" }
];
},
getIrType: function () {
return $('#irType option:selected').text();
},
getEditComponent: function (key) {
var property = this.data.schema.properties[key];
var template = 'edit-' + (property.ui || property.format || property.type);
@ -308,7 +357,7 @@
onSubmit: function (e) {
var vm = this;
Promise.all([vm.$valid(), vm.valid2()]).then(function () {
if (vm.data.errors.length === 0 && vm.errors.length === 0) {
if (vm.data.errors.length === 0 && !Enumerable.from(vm.errors).any(o => o.length > 0)) {
axios.post(e.target.action, vm.data.model).then(function (response) {
if (response.status === 204) {
var url = vm.base + 'index.html?area=' + vm.area + '&entity=' + vm.entity + '&model=' + vm.model;

Loading…
Cancel
Save