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.
iot/projects/WebMVC/wwwroot/router/nodes.html

92 lines
3.9 KiB

<template>
<layout v-bind:title="title">
<div class="row overlay-wrapper">
<div class="col-md-12" v-if="nodes.length">
<div class="card">
<div class="card-header">
<div class="card-title">
<input type="checkbox" id="All" class="checkall" v-on:change="SelectNode($event)" />
<label for="All" class="btn btn-sm btn-info" style="height:31px;margin-bottom:0;">全选</label>
<button class="btn btn-sm btn-info uncheck" v-on:click="SelectNode($event)">反选</button>
</div>
<div class="card-tools">
<button class="btn btn-success" v-on:click="Power('On')"></button>
<button class="btn btn-success" v-on:click="Power('Off')"></button>
</div>
</div>
</div>
</div>
<div class="col-md-2 col-sm-4 col-xs-6" v-for="item in nodes">
<div class="card">
<div class="card-header">
<h3 class="card-title">
<input type="checkbox" name="numbers[]" class="item" :value="item.number" v-on:change="SelectNode($event)">
<span v-if="item.isOnline" style="color:green;">{{item.name}}</span>
<span v-else style="color:red;">{{item.name}}</span>
</h3>
<div class="card-tools"><span data-toggle="tooltip" class="badge bg-green">{{item.count}}</span></div>
</div>
<router-link :to="{path:'/router/node.html',query:{number:item.number}}" class="card-body" style="display: block; text-align: center;">
<img :src="config.baseUrl+item.image" style="margin: 0px auto; width: 64px;">
</router-link>
<div class="card-footer text-center">
<button class="btn btn-success" v-on:click="nodePower(item.number,'On')"></button>
<button class="btn btn-success" v-on:click="nodePower(item.number,'Off')"></button>
</div>
</div>
</div>
</div>
</layout>
</template>
<script>
export default {
data: function () {
return {
title: '节点列表',
url: '/IoTCenter/api/v1/node/getNodes',
nodes: [],
events: ['NodeEntityInserted', 'NodeEntityUpdated', 'NodeEntityDeleted']
}
},
mounted: function () {
this.subscribe();
this.load();
},
methods: {
load() {
var url = config.baseUrl + this.url;
var vm = this;
axios.post(url).then(function (response) {
vm.nodes = response.data;
});
},
SelectNode: selectNode,
Power(method) {
var numbers = [];
$('.item:checked').each(function () {
numbers.push($(this).val());
});
if (numbers.length) {
for (var i = 0; i < numbers.length; i++) {
nodePower(numbers[i], method);
}
}
else {
Swal.fire('没有选中任何项');
}
},
subscribe() {
var vm = this;
subscribe(this.events, function (method, data) {
vm.load();
});
},
unsubscribe() {
this.unsubscribe(this.events);
}
},
beforeDestroy: function () {
unsubscribe();
}
}
</script>