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.
289 lines
9.5 KiB
289 lines
9.5 KiB
<!DOCTYPE html>
|
|
<html lang="en">
|
|
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
|
<link rel="shortcut icon" href="../../image/oss/iot/favicon2.ico" type="image/x-icon" />
|
|
<link rel="stylesheet" href="../../lib/element-ui/index.css" />
|
|
<link rel="stylesheet" href="./css/index.css" />
|
|
<script src="../common/util.js"></script>
|
|
<script src="../../lib/bigscreen/js/vue.min.js"></script>
|
|
<script src="../../lib/bigscreen/lib/jquery/jquery-1.9.1.min.js"></script>
|
|
<script type="text/javascript" src="../../lib/layer/layer.js"></script>
|
|
<script src="../../lib/element-ui/index.js"></script>
|
|
<title>子设备管理</title>
|
|
</head>
|
|
<body>
|
|
<el-container id="app" v-cloak v-loading.fullscreen.lock="fullscreenLoading">
|
|
<el-aside width="170px" :height="aheight">
|
|
<div class="prolist">
|
|
<span>项目列表</span>
|
|
</div>
|
|
<ul class="dashboard-menu">
|
|
<li v-for="(item,index) in sceneData" @click="selectScene(index,item.id)" :class="{'active':(oindex==index)}">
|
|
<i class="el-icon-box"></i><span class="pro-name" v-text="item.name"></span>
|
|
</li>
|
|
</ul>
|
|
</el-aside>
|
|
<el-container class="sub-el-container">
|
|
<el-header>
|
|
<div class="search">
|
|
<el-form :inline="true" :model="param" class="demo-form-inline">
|
|
<el-form-item label="名称">
|
|
<el-input v-model="param.name" size="medium" placeholder="名称" clearable ></el-input>
|
|
</el-form-item>
|
|
<el-form-item label="网关">
|
|
<el-select v-model="param.node_id" size="medium" placeholder="请选择">
|
|
<el-option
|
|
v-for="item in nodeData"
|
|
:key="item.id"
|
|
:label="item.name"
|
|
:value="item.id">
|
|
</el-option>
|
|
</el-select>
|
|
</el-form-item>
|
|
<el-form-item>
|
|
<el-button type="info" size="small" icon="el-icon-search" @click="search" >查询</el-button>
|
|
<el-button type="primary" size="small" icon="el-icon-circle-plus-outline" @click="add" >新增</el-button>
|
|
</el-form-item>
|
|
</el-form>
|
|
</div>
|
|
</el-header>
|
|
<el-main>
|
|
<el-table :data="deviceData" :height="height" style="width: 100%">
|
|
<el-table-column type="index" label="序号" width="100"></el-table-column>
|
|
<el-table-column prop="name" label="设备名称" >
|
|
</el-table-column>
|
|
<el-table-column prop="node_name" label="网关名称" >
|
|
</el-table-column>
|
|
<el-table-column prop="address" label="设备ID" >
|
|
</el-table-column>
|
|
<el-table-column label="属性设置" >
|
|
<template slot-scope="scope">
|
|
<el-button type="primary" @click="detailInfo(scope.row)" size="mini" icon="el-icon-document" circle></el-button>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column label="操作">
|
|
<template slot-scope="scope">
|
|
<el-button type="primary" @click="editDevice(scope.row)" size="mini" icon="el-icon-edit" circle></el-button>
|
|
<el-button type="danger" @click="deleteDevice(scope.row.id)" size="mini" icon="el-icon-delete" circle></el-button>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
</el-main>
|
|
</el-container>
|
|
|
|
<el-dialog :title="titleName" :visible.sync="dialogFormVisible" width="50%" >
|
|
<el-form :model="postparam" size="medium" class="postparam" >
|
|
<el-form-item label="名称" :label-width="formLabelWidth" :rules="[{required: true}]" >
|
|
<el-input v-model="postparam.name" autocomplete="off" placeholder="请输入" ></el-input>
|
|
</el-form-item>
|
|
<el-form-item label="设备ID" :label-width="formLabelWidth" :rules="[{required: true}]">
|
|
<el-input v-model="postparam.address" placeholder="请输入" autocomplete="off"></el-input>
|
|
</el-form-item>
|
|
<el-form-item label="网关" :label-width="formLabelWidth" :rules="[{required: true}]">
|
|
<el-select v-model="postparam.node_id" size="medium" placeholder="请选择">
|
|
<el-option
|
|
v-for="item in nodeData"
|
|
:key="item.id"
|
|
:label="item.name"
|
|
:value="item.id">
|
|
</el-option>
|
|
</el-select>
|
|
</el-form-item>
|
|
<el-form-item label="排序" :label-width="formLabelWidth">
|
|
<el-input v-model="postparam.seq" type="number" placeholder="请输入" autocomplete="off"></el-input>
|
|
</el-form-item>
|
|
</el-form>
|
|
<div slot="footer" class="dialog-footer">
|
|
<el-button @click="dialogFormVisible = false">取 消</el-button>
|
|
<el-button type="primary" @click="saveDeviceData" >确 定</el-button>
|
|
</div>
|
|
</el-dialog>
|
|
|
|
</el-container>
|
|
|
|
<script type="text/javascript">
|
|
var app = new Vue({
|
|
el: '#app' ,
|
|
data: function(){
|
|
return {
|
|
fullscreenLoading :true , // 加载提示
|
|
param: {
|
|
name: '' ,
|
|
node_id: ''
|
|
} ,
|
|
postparam:{ // 提交数据
|
|
},
|
|
formLabelWidth: '120px' ,
|
|
height: '' ,
|
|
dialogFormVisible: false , // 新增弹窗
|
|
scene_id: '' , // 项目id
|
|
aheight:'' ,
|
|
sceneData: '' , // 项目信息
|
|
oindex: 0, // 项目选中
|
|
nodeData: '' , // 网关信息
|
|
deviceData : '' ,// 设备信息
|
|
titleName: '新增设备', // 操作栏名字
|
|
}
|
|
},
|
|
methods: {
|
|
getSceneInfo(data){
|
|
commonAjax('POST',baseurl+"/service/page/scene?paged=1&pageSize=100", data ,function(res){
|
|
if(res.status == 2){
|
|
var dt = res.data.data ;
|
|
app.sceneData = dt ;
|
|
app.scene_id = dt[0].id ;
|
|
// 查询第一个场景下网关信息
|
|
app.getNodeData( {scene_id: dt[0].id } );
|
|
// 查询网关下的设备信息
|
|
app.getDeviceData( {scene_id: dt[0].id } );
|
|
}
|
|
});
|
|
},
|
|
add(){
|
|
this.titleName = '新增设备' ;
|
|
this.dialogFormVisible=true ;
|
|
app.postparam = {} ;
|
|
},
|
|
getNodeData(data){
|
|
commonAjax('POST',baseurl+"/service/page/node?paged=1&pageSize=100", data ,function(res){
|
|
if(res.status == 2){
|
|
var dt = res.data.data ;
|
|
app.nodeData = dt ;
|
|
}else{
|
|
app.nodeData = [] ;
|
|
}
|
|
// 清空
|
|
app.param.node_id = '' ;
|
|
});
|
|
},
|
|
getDeviceData(data){
|
|
commonAjax('POST',baseurl+"/service/page/sensor/device?paged=1&pageSize=100", data ,function(res){
|
|
if(res.status == 2){
|
|
var dt = res.data.data ;
|
|
app.deviceData = dt ;
|
|
}else{
|
|
app.deviceData = [] ;
|
|
}
|
|
});
|
|
},
|
|
search(){
|
|
app.getDeviceData( {scene_id:this.scene_id, node_id: this.param.node_id } );
|
|
},
|
|
selectScene(i,id){
|
|
this.scene_id = id ;
|
|
this.oindex = i ;
|
|
this.getNodeData( {scene_id: id } );
|
|
// 回调查询
|
|
app.search() ;
|
|
},
|
|
detailInfo(obj){
|
|
layer.open({
|
|
type: 2,
|
|
title: '传感器列表',
|
|
shadeClose: true,
|
|
shade: 0.7,
|
|
maxmin: true, //开启最大化最小化按钮
|
|
area: ['900px', '90%'],
|
|
content: baseurl + "/service/iot/sensors_manger?node_id=" + obj.node_id+"&sensor_device_id="+obj.address
|
|
});
|
|
},
|
|
saveDeviceData(){
|
|
if(util.isEmpty(this.postparam.name)){
|
|
app.$message({
|
|
message: '名称不能为空',
|
|
type: 'warning',
|
|
duration:1500
|
|
});
|
|
return ;
|
|
}
|
|
if(util.isEmpty(this.postparam.address)){
|
|
app.$message({
|
|
message: '设备ID不能为空',
|
|
type: 'warning',
|
|
duration:1500
|
|
});
|
|
return ;
|
|
}
|
|
|
|
if( this.postparam.id != null ){
|
|
commonAjax('PUT',baseurl+"/service/sensor/device.json" , this.postparam ,function(res){
|
|
if(res.status == 2){
|
|
app.$message({
|
|
message: '编辑成功',
|
|
type: 'success',
|
|
duration:1000
|
|
});
|
|
|
|
// 回调查询
|
|
app.search() ;
|
|
}else{
|
|
app.$message.error(res.statusMsg);
|
|
}
|
|
app.postparam = {} ;
|
|
app.dialogFormVisible = false ;
|
|
});
|
|
}else{
|
|
// 保存设备
|
|
commonAjax('POST',baseurl+"/service/sensor/device.json" , this.postparam ,function(res){
|
|
if(res.status == 2){
|
|
app.$message({
|
|
message: '添加成功',
|
|
type: 'success'
|
|
});
|
|
|
|
// 回调查询
|
|
app.search() ;
|
|
}else{
|
|
app.$message.error(res.statusMsg);
|
|
}
|
|
app.postparam = {} ;
|
|
app.dialogFormVisible = false ;
|
|
});
|
|
}
|
|
},
|
|
editDevice(obj){
|
|
this.postparam = obj ;
|
|
this.titleName = '编辑设备' ;
|
|
app.dialogFormVisible = true ;
|
|
},
|
|
deleteDevice(id){
|
|
this.$confirm('是否删除该条信息?', '信息确认', {
|
|
confirmButtonText: '确定',
|
|
cancelButtonText: '取消',
|
|
type: 'warning'
|
|
}).then(() => {
|
|
commonAjax('DELETE',baseurl+"/service/sensor/device.json?id="+id , "" ,function(res){
|
|
if(res.status == 2){
|
|
app.$message({
|
|
message: '删除成功',
|
|
type: 'success'
|
|
});
|
|
|
|
// 回调查询
|
|
app.search() ;
|
|
}else{
|
|
app.$message.error(res.statusMsg);
|
|
}
|
|
});
|
|
|
|
}).catch(()=>{} ) ;
|
|
}
|
|
},
|
|
created(){
|
|
this.height = window.innerHeight - 60; ;
|
|
this.aheight = window.innerHeight ;
|
|
this.getSceneInfo({}) ;
|
|
},
|
|
mounted(){
|
|
setTimeout(() => {
|
|
this.fullscreenLoading = false ;
|
|
}, 300);
|
|
}
|
|
});
|
|
</script>
|
|
</body>
|
|
|