Former-commit-id: 2b604ceda78bec3f9f06e84636239d14c8b4dbe3
TangShanKaiPing
wanggang 6 years ago
parent 14fe0d9711
commit e7ac760dab

@ -54,9 +54,9 @@ namespace IoTCenter.Controllers
return View();
}
public IActionResult Device()
public IActionResult Device(string productNumber)
{
return View();
return View(model: productNumber);
}
public IActionResult Nodes()

@ -1,6 +1,10 @@
@{
@model string
@{
HtmlTitle = "设备详情";
}
@section bread{
<li class="breadcrumb-item"><a href="@Url.Action("Product","Home",new { number=Model})">产品</a></li>
}
<div id="template">
<style>
h3 img {
@ -185,49 +189,7 @@
</div>
</div>
</div>
<template v-if="model.Name!=='摄像头'">
<div class="row" v-if="GetSimpleApis().length>0">
<div class="col-md-12">
<div class="card">
<div class="card-body">
<button class="btn btn-success" v-for="api in GetSimpleApis()" v-on:click="CallApi(model.Number,api.Path+api.Command)">{{api.Name}}</button>
</div>
</div>
</div>
</div>
<div class="=row" v-for="api in Enumerable.from(model.Product.Apis).orderBy('o=>o.Name')" v-if="api.Parameters.length>1">
<div class="card">
<div class="card-header">
<h3 class="card-title">{{api.Name}}</h3>
</div>
<div class="card-body">
<form class="form-horizontal">
<input type="hidden" name="Number" :value="model.Number" />
<input type="hidden" name="Method" :value="api.Method" />
<div class="form-group" v-for="parameter in api.Parameters" v-if="parameter.Name!=='number'">
<label :for="parameter.Name">{{parameter.Description}}:</label>
<template v-if="model.Name==='网关'&&api.Name==='删掉制定设备'&&parameter.Name==='设备编号'">
</template>
<template v-else>
<template v-if="parameter.Type==='string'">
<input type="text" class="form-control" :name="parameter.Name" :value="GetDataValueByKey(parameter.Name)" />
</template>
<template v-else>
<input type="text" class="form-control" :name="parameter.Name" :value="GetDataValueByKey(parameter.Name)" />
</template>
</template>
</div>
<div class="row">
<div class="col-sm-12">
<button class="btn btn-success">确定</button>
</div>
</div>
</form>
</div>
</div>
</div>
</template>
<template v-else-if="model.Name==='摄像头'">
<template v-if="model.Name==='摄像头'">
<div class="row">
<div class="col-md-12">
<div class="card">
@ -280,6 +242,284 @@
</div>
</div>
</template>
<template v-else-if="model.Name==='调色灯'">
<div class="row">
<div class="col-md-12">
<div class="card">
<div class="card-header">
<h3 class="card-title">
<img src="/images/light.png" />{{model.DisplayName}}
</h3>
<div class="card-tools">
<img v-if="GetDataValue('状态')=='开'" v-on:click="CallApi(model.Number,'/ColorLight/Off')" src="/images/on.png" />
<img v-if="GetDataValue('状态')=='关'" v-on:click="CallApi(model.Number,'/ColorLight/On')" src="/images/off.png" />
</div>
</div>
<div class="card-body">
<form method="get" action="/App/ExecApi">
<input type="hidden" name="Number" :value="model.Number" />
<input type="hidden" name="Method" value="/ColorLight/SetColor" />
<div class="row">
<div class="col-md-3 col-xs-4">
<label class="btn">色调</label>
</div>
<div class="col-md-9 col-xs-8">
<input v-on:change="AjaxSubmit($event,model.Number,'色调')" type="range" min="0" step="1" max="255" name="Hue" class="hue" :value="GetDataValue('色调')" />
</div>
</div>
<div class="row">
<div class="col-md-3 col-xs-4">
<label class="btn">饱和度</label>
</div>
<div class="col-md-9 col-xs-8">
<input v-on:change="AjaxSubmit($event,model.Number,'饱和度')" type="range" min="0" step="1" max="254" name="Saturation" class="saturation" :value="GetDataValue('饱和度')" />
</div>
</div>
</form>
<form method="get" action="/App/ExecApi">
<input type="hidden" name="Number" :value="model.Number" />
<input type="hidden" name="Method" value="/ColorLight/SetBrightness" />
<div class="row">
<div class="col-md-3 col-xs-4">
<label class="btn">亮度</label>
</div>
<div class="col-md-9 col-xs-8">
<input v-on:change="AjaxSubmit($event,model.Number,'亮度')" type="range" min="0" step="1" max="254" name="Brightness" class="brightness" :value="GetDataValue('亮度')" />
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</template>
<template v-if="model.Name==='红外转发器'">
<div class="row">
<div class="col-md-12">
<div class="card">
<div class="card-header" style="padding-bottom:0;">
<h3 class="card-title">
<img src="/images/control.png" />
{{model.DisplayName}}
</h3>
<ul class="nav nav-tabs card-tools" role="tablist">
<li class="nav-item"><a class="nav-link active" :href="'#tab_1'+model.Number" data-toggle="tab">空调</a></li>
<li class="nav-item"><a class="nav-link" :href="'#tab_2'+model.Number" data-toggle="tab">电视</a></li>
<li class="nav-item"><a class="nav-link" :href="'#tab_3'+model.Number" data-toggle="tab">图影仪</a></li>
<li class="nav-item"><a class="nav-link" :href="'#tab_4'+model.Number" data-toggle="tab">自定义</a></li>
</ul>
</div>
<div class="card-body">
<div class="tab-content" style="min-height:176px;">
<div class="tab-pane active" :id="'tab_1'+model.Number">
<form class="ir type1" method="get" action="/App/ExecApi">
<input type="hidden" name="Number" :value="model.Number" />
<input type="hidden" name="Method" value="/Ir/Send" />
<input type="hidden" name="Type" value="1" />
<input type="hidden" name="Code" :value="GetDataValue('按键')" />
<div class="row">
<div class="col-md-12">
<label class="btn">电源</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="power" type="radio" value="2" v-model="getCode1(GetDataValue('按键')).power" />开</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="power" type="radio" value="1" v-model="getCode1(GetDataValue('按键')).power" />关</label>
<label class="btn">模式</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="pattern" type="radio" value="0" v-model="getCode1(GetDataValue('按键')).pattern" />制冷</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="pattern" type="radio" value="120" v-model="getCode1(GetDataValue('按键')).pattern" />自动</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="pattern" type="radio" value="240" v-model="getCode1(GetDataValue('按键')).pattern" />制热</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="pattern" type="radio" value="360" v-model="getCode1(GetDataValue('按键')).pattern" />抽湿</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="pattern" type="radio" value="480" v-model="getCode1(GetDataValue('按键')).pattern" />送风</label>
</div>
</div>
<div class="row">
<div class="col-md-2">
<span class="btn">温度</span>
</div>
<div class="col-md-10">
<input v-on:click="SendCode1($event)" name="temperature" type="range" step="1" min="1" max="15" :value="getCode1(GetDataValue('按键')).temperature" />
</div>
</div>
<div class="row">
<div class="col-md-12">
<lable class="btn">风向</lable>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="direction" type="radio" value="0" v-model="getCode1(GetDataValue('按键')).direction" />任意</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="direction" type="radio" value="60" v-model="getCode1(GetDataValue('按键')).direction" />手动</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="direction" type="radio" value="75" v-model="getCode1(GetDataValue('按键')).direction" />自动</label>
<lable class="btn">风量</lable>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="wind" type="radio" value="0" v-model="getCode1(GetDataValue('按键')).wind" />自动</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="wind" type="radio" value="15" v-model="getCode1(GetDataValue('按键')).wind" />高</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="wind" type="radio" value="30" v-model="getCode1(GetDataValue('按键')).wind" />中</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="wind" type="radio" value="45" v-model="getCode1(GetDataValue('按键')).wind" />低</label>
</div>
</div>
</form>
</div>
<div class="tab-pane" :id="'tab_2'+model.Number">
<form class="ir type2" method="get" action="/App/ExecApi">
<input type="hidden" name="Number" :value="model.Number" />
<input type="hidden" name="Method" value="/Ir/Send" />
<input type="hidden" name="Type" value="2" />
<div class="row">
<div class="col-md-12 col-xs-12">
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="1" />POWR</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="2" />AV</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="3" />1</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="4" />2</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="5" />3</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="6" />4</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="7" />5</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="8" />6</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="9" />7</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="10" />8</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="11" />9</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="12" />0</label>
</div>
</div>
<div class="row">
<div class="col-md-12 col-xs-12">
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="13" />返回</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="14" />退出</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="15" />静音</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="16" />菜单</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="17" />音量+</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="18" />音量-</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="19" />上</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="20" />下</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="21" />左</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="22" />右</label>
</div>
</div>
<div class="row">
<div class="col-md-12 col-xs-12">
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="26" />快退</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="27" />播放</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="28" />快进</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="29" />录像</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="30" />暂停</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="31" />停止</label>
</div>
</div>
<div class="row">
<div class="col-md-12 col-xs-12">
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="23" />OK</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="24" />ch+</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="25" />ch-</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="32" />A</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="33" />B</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="34" />C</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="35" />D</label>
</div>
</div>
</form>
</div>
<div class="tab-pane" :id="'tab_3'+model.Number">
<form class="ir type3" method="get" action="/App/ExecApi">
<input type="hidden" name="Number" :value="model.Number" />
<input type="hidden" name="Method" value="/Ir/Send" />
<input type="hidden" name="Type" value="3" />
<div class="row">
<div class="col-md-12 col-xs-12">
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="1" />PW-ON</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="2" />PW-OFF</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="3" />1</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="4" />2</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="5" />3</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="6" />4</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="7" />5</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="8" />6</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="9" />7</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="10" />8</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="11" />9</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="12" />0</label>
</div>
</div>
<div class="row">
<div class="col-md-12 col-xs-12">
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="13" />CLEAR</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="14" />退出</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="15" />静音</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="16" />菜单</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="17" />音量+</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="18" />音量-</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="19" />上</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="20" />下</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="21" />左</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="22" />右</label>
</div>
</div>
<div class="row">
<div class="col-md-12 col-xs-12">
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="26" />鼠标L</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="27" />节能</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="28" />鼠标R</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="29" />局部放大+</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="30" />局部放大-</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="31" />冻结</label>
</div>
</div>
<div class="row">
<div class="col-md-12 col-xs-12">
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="23" />ENTER</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="24" />page+</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="25" />page-</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="32" />梯形修正</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="33" />图像</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="34" />ID SET</label>
<label class="btn btn-sm btn-success"><input v-on:click="SendCode1($event)" name="Code" type="radio" value="35" />自动调整</label>
</div>
</div>
</form>
</div>
<div class="tab-pane" :id="'tab_4'+model.Number">
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<!--通用-->
<template v-else>
<div class="row" v-if="GetSimpleApis().length>0">
<div class="col-md-12">
<div class="card">
<div class="card-body">
<button class="btn btn-success" v-for="api in GetSimpleApis()" v-on:click="CallApi(model.Number,api.Path+api.Command)">{{api.Name}}</button>
</div>
</div>
</div>
</div>
<div class="=row" v-for="api in Enumerable.from(model.Product.Apis).orderBy('o=>o.Name')" v-if="api.Parameters.length>1">
<div class="card">
<div class="card-header">
<h3 class="card-title">{{api.Name}}</h3>
</div>
<div class="card-body">
<form class="form-horizontal">
<input type="hidden" name="Number" :value="model.Number" />
<input type="hidden" name="Method" :value="api.Method" />
<div class="form-group" v-for="parameter in api.Parameters" v-if="parameter.Name!=='number'">
<label :for="parameter.Name">{{parameter.Description}}:</label>
<template v-if="model.Name==='网关'&&api.Name==='删掉制定设备'&&parameter.Name==='设备编号'">
</template>
<template v-else>
<template v-if="parameter.Type==='string'">
<input type="text" class="form-control" :name="parameter.Name" :value="GetDataValueByKey(parameter.Name)" />
</template>
<template v-else>
<input type="text" class="form-control" :name="parameter.Name" :value="GetDataValueByKey(parameter.Name)" />
</template>
</template>
</div>
<div class="row">
<div class="col-sm-12">
<button class="btn btn-success">确定</button>
</div>
</div>
</form>
</div>
</div>
</div>
</template>
</template>
</div>
@section scripts{

@ -41,7 +41,7 @@
<div class="card-tools"> {{GetDataValue(item.Number,'状态')}}</div>
</template>
</div>
<a class="card-body" :href="'/Home/Device?number='+item.Number" style="display:block;text-align:center;">
<a class="card-body" :href="'/Home/Device?number='+item.Number+'&productNumber='+model.Number" style="display:block;text-align:center;">
<img :alt="item.Name" :src="server+'/IoTCenter'+model.Image" style="margin:0 auto;max-width:64px;" />
</a>
<div class="card-footer">

@ -26,6 +26,16 @@ methods = {
GetDevice(nameOrNumber) {
return this.model;
},
GetDeviceDataAttr(name, attr) {
var data = Enumerable.from(this.model.Data).where(o => o.Name === name).firstOrDefault();
if (data != null) {
return data[attr];
}
return null;
},
GetDataValue(name) {
return this.GetDeviceDataAttr(name, 'Value');
},
GetDataValueByKey(key) {
var data = Enumerable.from(this.model.Data)
.where(function (o) { return o.Key.toLowerCase() === key; })
@ -47,7 +57,48 @@ methods = {
CallApi(number, method, query) {
ajax('/App/ExecApi', { token: token, connectionId: connectionId, number: number, method: method, query: query }, 'post');
},
AjaxSubmit(event, deviceNumber, dataName) {
var data = Enumerable.from(this.model.Data)
.where(function (o) { return o.Name == dataName })
.firstOrDefault();
if (data != null) {
data.Value = $(event.target).val();
}
var form = $(event.target).parents('form');
var url = form.attr('action') + '?' + form.serialize() + "&token=" + token + "&connectionId=" + connectionId;
Vue.nextTick(function () {
ajax(url, null, 'get');
});
},
SendCode1(event) {
console.log(event.target + ',' + event.type + ',' + event.target.checked);
var form = $(event.target).parents('form');
var url = form.attr('action') + '?' + form.serialize();
var code = form.find('#Code').val();
if (form.hasClass('type1')) {
if (event.target.name == "power" && event.target.value == "1") {
code = 1;
}
else {
var list = {};
list['power'] = form.find("[name = 'power']:checked").val();
list['pattern'] = form.find("[name = 'pattern']:checked").val();
list['direction'] = form.find("[name = 'direction']:checked").val();
list['wind'] = form.find("[name = 'wind']:checked").val();
list['temperature'] = form.find("[name = 'temperature']").val();
list[event.target.name] = event.target.value;
code = 0;
for (var name in list) {
code += parseInt(list[name]);
}
}
url = new URI(url).setQuery('Code', code).toString() + "&token=" + token + "&connectionId=" + connectionId;
}
form.find('#Code').val(code);
Vue.nextTick(function () {
ajax(url, null, 'get');
});
}
};
function onMessage(method, json, to, from) {
debug(method + ':' + json);

@ -44,13 +44,13 @@ namespace IoTNode.Controllers
});
}
[HttpGet, Route("/[controller]/[action]"), SwaggerOperation("")]
public ApiResponse X95([SwaggerParameter("网关编号")]string gateway, [SwaggerParameter("设备编号")]string number)
{
return this.AsyncAction(() =>
{
this._deviceService.X95(gateway, number);
});
}
//[HttpGet, Route("/[controller]/[action]"), SwaggerOperation("删除指定设备")]
//public ApiResponse X95([SwaggerParameter("网关编号")]string gateway, [SwaggerParameter("设备编号")]string number)
//{
// return this.AsyncAction(() =>
// {
// this._deviceService.X95(gateway, number);
// });
//}
}
}
Loading…
Cancel
Save