var testList=[{"id":"1","name":"温湿度#1","type":"2001","port":"1","address":"1","libname":"abc","libnamezh":"测试","vld":"0"},{"id":"6","name":"配电#1","type":"1004","port":"1","address":"1","libname":"abc","libnamezh":"测试","vld":"0"},{"id":"7","name":"电表#1","type":"1003","port":"1","address":"1","libname":"abc","libnamezh":"测试","vld":"0"},{"id":"8","name":"精密空调#1","type":"2002","port":"1","address":"1","libname":"abc","libnamezh":"测试","vld":"0"},{"id":"9","name":"UPS#1","type":"1001","port":"1","address":"1","libname":"abc","libnamezh":"测试","vld":"0"},{"id":"10","name":"UPS#2","type":"1002","port":"1","address":"1","libname":"abc","libnamezh":"测试","vld":"0"},{"id":"11","name":"电池组#1","type":"1005","port":"1","address":"1","libname":"abc","libnamezh":"测试","vld":"0"},{"id":"12","name":"普通空调#1","type":"2003","port":"1","address":"1","libname":"abc","libnamezh":"测试","vld":"0"}];
|
var testPassCodeData=[
|
{"id":"001","passcode":"1","name":"测试","type":"Int","alarmFlag":"0","val1":"10","val2":"20","operation":"1","operValue":"0","uploadFlag":"0","note":"测试"},
|
{"id":"001","passcode":"2","name":"测试","type":"Float","alarmFlag":"2","val1":"5","val2":"15","operation":"2","operValue":"10","uploadFlag":"1","note":"测试"},
|
{"id":"001","passcode":"3","name":"测试","type":"String","alarmFlag":"5","val1":"0","val2":"40","operation":"3","operValue":"10","uploadFlag":"0","note":"测试"}
|
];
|
|
var layer;
|
var deviceList = [];
|
var listPassCodeData = [];
|
var deviceMap = [];
|
|
layui.use(['layer'], function () {
|
layer = layui.layer;
|
});
|
|
|
if (TEST_TAG) {
|
deviceList = testList;
|
deviceMap = listSetMap(deviceList);
|
listPassCodeData = testPassCodeData;
|
|
renderDeviceData();
|
}else{
|
//查询设备信息并渲染
|
queryDeviceList();
|
}
|
|
//初始化协议库列表
|
initLibname();
|
initDevLibname();
|
|
$(document).ready(function () {
|
//添加协议库下拉监听
|
$("#device-libname").change(function () {
|
var val = $(this).children('option:selected').val();
|
flushPassCodeDataByLibname(val);
|
});
|
|
//添加协议库下拉监听
|
$("#dev-libname").change(function () {
|
var val = $(this).children('option:selected').val();
|
//根据协议获取通道信息
|
flushPassCodeDataByLibnameCustom(val);
|
|
});
|
});
|
|
function listSetMap(list) {
|
var map = [];
|
$.each(list, function (index, item) {
|
map[item.id] = item;
|
});
|
return map;
|
}
|
|
|
//查询设备信息
|
function queryDeviceList() {
|
$.get("./cgi-bin/device-common/query", function (data, status) {
|
if ("success" == status) {
|
deviceList = data;
|
deviceMap = listSetMap(deviceList);
|
renderDeviceData();
|
} else {
|
window.parent.notify("系统获取基础设备列表出错!");
|
}
|
}, "json");
|
}
|
|
//渲染设备列表
|
function renderDeviceData() {
|
var html = '';
|
$.each(deviceList, function (index, item) {
|
html += '<tr><td>' + item.name + '</td>';
|
html += '<td>' + item.id + '</td>';
|
html += '<td>' + item.address + '</td>';
|
html += '<td>' + item.port + '</td>';
|
// html += '<td>' + item.libnamezh + '</td>';
|
html += '<td>' + (item.vld == 0 ? '启用' : '停用') + '</td>';
|
|
html += '<td><button style="height: 29px;line-height: 29px;" ' +
|
'class="layui-btn layui-btn-normal" onclick="edit(\'' + index + '\')">编辑</button>';
|
html += '<button style="height: 29px;line-height: 29px;" ' +
|
'class="layui-btn layui-btn-normal" onclick="copy(\'' + item.id + '\')">复制</button>';
|
if (item.vld == 0) {
|
html += '<button style="height: 29px;line-height: 29px;" ' +
|
'class="layui-btn layui-btn-warm" onclick="changeStatus(\'' + index + '\')">停用</button>';
|
} else {
|
html += '<button style="height: 29px;line-height: 29px;" ' +
|
'class="layui-btn" onclick="changeStatus(\'' + index + '\')">启用</button>';
|
}
|
html += '<button style="height: 29px;line-height: 29px;" ' +
|
'class="layui-btn layui-btn-danger" onclick="del(\'' + index + '\')">删除</button>';
|
|
html += '</td></tr>';
|
});
|
|
$("#deviceList").html(html);
|
}
|
|
|
//新增设备
|
function add() {
|
$(".pop-btn").hide();
|
$("#add").show();
|
//表单重置
|
$("#device-id").attr("readOnly",false);
|
$("#device-id").val(null);
|
$("#device-name").val("新增设备");
|
$("#device-port").val(1);
|
$("#device-address").val(1);
|
$("#device-libname").val("");
|
$("#dev-libname").val("");
|
$("#device-vld").val(0);
|
|
//弹出框
|
layer.open({
|
skin: 'mypop',
|
type: 1,
|
title: false,
|
area: ['85%', '92%'],
|
closeBtn: 0,
|
shade: 0,
|
scrollbar: false,
|
content: $('#dialog-device')
|
});
|
|
};
|
|
//新增设备
|
function copy(id) {
|
$(".pop-btn").hide();
|
$("#add").show();
|
//赋值 -表单
|
var data = deviceMap[id];
|
$("#device-id").attr("readOnly",false);
|
$("#device-id").val(data.id);
|
$("#device-name").val(data.name);
|
$("#device-port").val(data.port);
|
$("#device-address").val(data.address);
|
$("#device-libname").val(data.libname);
|
$("#dev-libname").val(data.userName);
|
$("#device-type").val(data.type);
|
$("#device-vld").val(data.vld);
|
|
//根据ID获取当前设备的PASSCODE数据 -同步获取
|
flushPassCodeDataByDeviceId(data.id);
|
|
//弹出框
|
layer.open({
|
skin: 'mypop',
|
type: 1,
|
title: false,
|
area: ['85%', '92%'],
|
closeBtn: 0,
|
shade: 0,
|
scrollbar: false,
|
content: $('#dialog-device')
|
});
|
|
};
|
|
//设备编辑
|
function edit(index) {
|
$(".pop-btn").hide();
|
$("#edit").show();
|
//赋值 -表单
|
var data = deviceList[index];
|
$("#device-id").attr("readOnly",true);
|
$("#device-id").val(data.id);
|
$("#device-name").val(data.name);
|
$("#device-port").val(data.port);
|
$("#device-address").val(data.address);
|
$("#device-libname").val(data.libname);
|
$("#dev-libname").val(data.userName);
|
$("#device-type").val(data.type);
|
$("#device-vld").val(data.vld);
|
|
//根据ID获取当前设备的PASSCODE数据 -同步获取
|
flushPassCodeDataByDeviceId(data.id);
|
|
layer.open({
|
skin: 'mypop',
|
type: 1,
|
// title: '警报信息',
|
title: false,
|
area: ['85%', '92%'],
|
closeBtn: 0,
|
shade: 0,
|
scrollbar: false,
|
content: $('#dialog-device')
|
});
|
};
|
|
//数据删除
|
function del(index) {
|
var data = deviceList[index];
|
var param = {"id": data.id};
|
layer.confirm('确定删除此条数据吗?', function (index) {
|
$.post("./cgi-bin/device-common/delete", JSON.stringify(param), function (data, status) {
|
if ("success" == status && "success" == data.code) {
|
layer.close(index);
|
window.parent.notify("数据删除成功,页面自动刷新!");
|
|
queryDeviceList();
|
} else {
|
layer.close(index);
|
window.parent.notify("数据删除失败");
|
}
|
}, "json");
|
});
|
}
|
|
//状态设置
|
function changeStatus(index) {
|
var data = deviceList[index];
|
var param = {"id": data.id};
|
var msg = "确定要停用么?", url = "./cgi-bin/device-common/val-1";
|
if (1 == data.vld) {
|
msg = "确定启用用么?";
|
url = "./cgi-bin/device-common/val-0";
|
}
|
layer.confirm(msg, function (index) {
|
$.post(url, JSON.stringify(param), function (data, status) {
|
if ("success" == status && "success" == data.code) {
|
layer.close(index);
|
window.parent.notify("操作成功,页面自动刷新!");
|
queryDeviceList();
|
} else {
|
layer.close(index);
|
window.parent.notify("数据操作失败,请重新尝试!");
|
}
|
}, "json");
|
});
|
}
|
|
//关闭
|
function closeBtn() {
|
layer.closeAll();
|
}
|
|
//数据提交保存
|
function save(btn) {
|
//获取设备信息
|
var data = {
|
id: $("#device-id").val(),
|
name: $("#device-name").val(),
|
port: $("#device-port").val(),
|
address: $("#device-address").val(),
|
libname: $("#device-libname").val(),
|
libnamezh: $("#device-libname option[value='"+ $("#device-libname").val() +"']").text(),
|
userName: $("#dev-libname").val(),
|
type: $("#device-type").val(),
|
vld: $("#device-vld").val()
|
};
|
|
//获取设备通道配置信息
|
var valueList = new Array();
|
var obj = {};
|
for (var i = 1; i <= listPassCodeData.length; i++) {
|
obj.id = data.id;
|
obj.passcode = $("#passcode-" + i).text();
|
obj.name = $("#name-" + i).val();
|
obj.type = $("#type-" + i).val();
|
obj.alarmFlag = $("#alarmFlag-" + i).val();
|
obj.val1 = $("#val1-" + i).val();
|
obj.val2 = $("#val2-" + i).val();
|
|
obj.operation = $("#operation-" + i).val();
|
obj.operValue = $("#operValue-" + i).val();
|
obj.uploadFlag = $("#uploadFlag-" + i).val();
|
|
obj.note = $("#note-" + i).val();
|
valueList.push(obj);
|
obj = {};
|
}
|
data.value = valueList;
|
|
console.log("----------需要执行保存的数据信息--------");
|
console.log(JSON.stringify(data));
|
|
if (!data.id) {
|
window.parent.notify("设备ID不能为空!");
|
return;
|
}
|
var r = /^\d{1,3}$/;
|
if(!r.test(data.id)){
|
window.parent.notify("您输入的ID不符合要求!设备ID设置范围为0~999的正整数!");
|
return;
|
}
|
if (data.id<0 || data.id>999) {
|
window.parent.notify("设备ID设置范围为0~999!");
|
return;
|
}
|
if (valueList.length == 0) {
|
window.parent.notify("设备通道不能为空!");
|
return;
|
}
|
|
var url = "./cgi-bin/device-common/add";
|
if ("edit" == btn) {
|
url = "./cgi-bin/device-common/edit";
|
}
|
//执行保存
|
$.post(url, JSON.stringify(data), function (data, status) {
|
if (data.code == "success") {
|
closeBtn();
|
window.parent.notify("数据保存成功,页面自动刷新!");
|
queryDeviceList();
|
} else {
|
window.parent.notify("数据保存出错,请重新操作!"+data.msg+"!");
|
}
|
}, "json");
|
}
|
|
//根据协议库更新passCode数据
|
function flushPassCodeDataByLibname(libname) {
|
if(TEST_TAG){
|
renderPassCode();
|
return;
|
}
|
if ("" == libname) return;
|
var param = {"libname": libname};
|
|
$.post("./cgi-bin/libname/passcode-by-libname", JSON.stringify(param), function (data, status) {
|
if ("success" == status) {
|
console.log(data);
|
//为设备类型赋值
|
$("#device-type").val(data.type);
|
console.log($("#device-type").val());
|
//通道信息
|
listPassCodeData = data.passcode;
|
renderPassCodeByLibName(libname);
|
} else {
|
window.parent.notify("根据协议" + libname + "获取通道信息失败!");
|
}
|
}, "json");
|
};
|
|
//根据协议库更新passCode数据
|
function flushPassCodeDataByLibnameCustom(libname) {
|
console.log("===========自定义协议获取通道信息=============");
|
if(TEST_TAG){
|
renderPassCode();
|
return;
|
}
|
if ("" == libname) return;
|
var param = {"code":"1","libname":libname};
|
$.post("./cgi-bin/do/query_debug", JSON.stringify(param), function (data, status) {
|
console.log("data");
|
if (data != null) {
|
$("#device-type").val(data.devTemplate);
|
$("#device-port").val(data.port);
|
//通道信息
|
listPassCodeData = data.pass;
|
renderPassCodeByLibName(libname);
|
} else {
|
window.parent.notify("根据模板获取通道信息失败!");
|
}
|
}, "json");
|
};
|
|
//根据设备ID获取通道信息列表 -设置为同步请求
|
function flushPassCodeDataByDeviceId(id) {
|
if(TEST_TAG){
|
renderPassCode();
|
return;
|
}
|
$.ajaxSettings.async = false;
|
var param = {"id": id};
|
$.post("./cgi-bin/libname/passcode-by-id", JSON.stringify(param), function (data, status) {
|
if ("success" == status) {
|
listPassCodeData = data;
|
renderPassCode();
|
} else {
|
window.parent.notify("根据设备ID=" + id + "获取通道信息失败!");
|
}
|
}, "json");
|
};
|
|
|
//根据返回的通道信息渲染页面
|
function renderPassCode() {
|
//清除通道信息,重新加载
|
$("#table-passcode").empty();
|
var html = "<tr><td id='passcode-'></td>" +
|
"<td><input id='name-' class='f1'></td>" +
|
"<td style='display: none;'><select id='type-' class='f1'>" +
|
"<option value='Int'>Int</option>" +
|
"<option value='Float'>Float</option>" +
|
"<option value='Byte'>Byte</option>" +
|
"<option value='String'>String</option>" +
|
"</select></td>" +
|
"<td><select id='alarmFlag-'class='f1'>" +
|
"<option value='0'>不检测</option>" +
|
"<option value='1'>小于下限</option>" +
|
"<option value='2'>等于下限</option>" +
|
"<option value='3'>大于下限</option>" +
|
// "<option value='4'>不等于</option>" +
|
"<option value='5'>范围内</option>" +
|
"<option value='6'>范围外</option>" +
|
"</select></td>" +
|
"<td><input id='val1-' class='f1'></td>" +
|
"<td><input id='val2-' class='f1'></td>" +
|
|
"<td><select id='operation-' class='f1'>" +
|
"<option value='0'>不运算</option>" +
|
"<option value='1'>加</option>" +
|
"<option value='2'>减</option>" +
|
"<option value='3'>乘</option>" +
|
"<option value='4'>除</option>" +
|
"</select></td>" +
|
"<td><input id='operValue-'class='f1'></td>" +
|
"<td><select id='uploadFlag-' class='f1'>" +
|
"<option value='0'>启用</option>" +
|
"<option value='1'>不启用</option>" +
|
"</select></td>" +
|
|
"<td ><input id='note-' class='f1'></td></tr>";
|
var temp;
|
for (var i = 1; i <= listPassCodeData.length; i++) {
|
temp = html
|
.replace("passcode-", "passcode-" + i)
|
.replace("name-", "name-" + i)
|
.replace("type-", "type-" + i)
|
.replace("alarmFlag-", "alarmFlag-" + i)
|
.replace("val1-", "val1-" + i)
|
.replace("val2-", "val2-" + i)
|
.replace("operation-", "operation-" + i)
|
.replace("operValue-", "operValue-" + i)
|
.replace("uploadFlag-", "uploadFlag-" + i)
|
.replace("note-", "note-" + i);
|
|
$("#table-passcode").append(temp);
|
}
|
|
//赋值
|
var cur;
|
for (var i = 1; i <= listPassCodeData.length; i++) {
|
cur = listPassCodeData[i - 1];
|
$("#passcode-" + i).text(cur.passcode);
|
$("#name-" + i).val(cur.name);
|
$("#type-" + i).val(cur.type);
|
$("#alarmFlag-" + i).val(cur.alarmFlag);
|
$("#val1-" + i).val(cur.val1);
|
$("#val2-" + i).val(cur.val2);
|
|
$("#operation-" + i).val(cur.operation);
|
$("#operValue-" + i).val(cur.operValue);
|
$("#uploadFlag-" + i).val(cur.uploadFlag);
|
$("#note-" + i).val(cur.note);
|
}
|
};
|
|
//根据返回的通道信息渲染页面
|
function renderPassCodeByLibName(libname) {
|
//清除通道信息,重新加载
|
$("#table-passcode").empty();
|
var html = "<tr><td id='passcode-'></td>" +
|
"<td><input id='name-' class='f1'></td>" +
|
"<td style='display: none;'><select id='type-' class='f1'>" +
|
"<option value='Int'>Int</option>" +
|
"<option value='Float'>Float</option>" +
|
"<option value='Byte'>Byte</option>" +
|
"<option value='String'>String</option>" +
|
"</select></td>" +
|
"<td><select id='alarmFlag-'class='f1'>" +
|
"<option value='0'>不检测</option>" +
|
"<option value='1'>小于下限</option>" +
|
"<option value='2'>等于下限</option>" +
|
"<option value='3'>大于下限</option>" +
|
// "<option value='4'>不等于</option>" +
|
"<option value='5'>范围内</option>" +
|
"<option value='6'>范围外</option>" +
|
"</select></td>" +
|
"<td><input id='val1-' class='f1'></td>" +
|
"<td><input id='val2-' class='f1'></td>" +
|
|
"<td><select id='operation-' class='f1'>" +
|
"<option value='0'>不运算</option>" +
|
"<option value='1'>加</option>" +
|
"<option value='2'>减</option>" +
|
"<option value='3'>乘</option>" +
|
"<option value='4'>除</option>" +
|
"</select></td>" +
|
"<td><input id='operValue-'class='f1'></td>" +
|
"<td><select id='uploadFlag-' class='f1'>" +
|
"<option value='0'>启用</option>" +
|
"<option value='1'>不启用</option>" +
|
"</select></td>" +
|
|
"<td ><input id='note-' class='f1'></td></tr>";
|
var temp;
|
for (var i = 1; i <= listPassCodeData.length; i++) {
|
temp = html
|
.replace("passcode-", "passcode-" + i)
|
.replace("name-", "name-" + i)
|
.replace("type-", "type-" + i)
|
.replace("alarmFlag-", "alarmFlag-" + i)
|
.replace("val1-", "val1-" + i)
|
.replace("val2-", "val2-" + i)
|
.replace("operation-", "operation-" + i)
|
.replace("operValue-", "operValue-" + i)
|
.replace("uploadFlag-", "uploadFlag-" + i)
|
.replace("note-", "note-" + i);
|
|
$("#table-passcode").append(temp);
|
}
|
|
//赋值
|
var cur;
|
if(libname.endsWith(".json")){
|
for (var i = 1; i <= listPassCodeData.length; i++) {
|
cur = listPassCodeData[i - 1];
|
$("#passcode-" + i).text(cur.passcode);
|
$("#name-" + i).val(cur.name);
|
$("#type-" + i).val(cur.type);
|
$("#alarmFlag-" + i).val("0");
|
$("#val1-" + i).val("0");
|
$("#val2-" + i).val("0");
|
|
$("#operation-" + i).val("0");
|
$("#operValue-" + i).val("0");
|
$("#uploadFlag-" + i).val("0");
|
$("#note-" + i).val(cur.unit);
|
}
|
}else{
|
for (var i = 1; i <= listPassCodeData.length; i++) {
|
cur = listPassCodeData[i - 1];
|
$("#passcode-" + i).text(cur.passcode);
|
$("#name-" + i).val(cur.name);
|
$("#type-" + i).val(cur.type);
|
$("#alarmFlag-" + i).val(cur.alarmFlag);
|
$("#val1-" + i).val(cur.val1);
|
$("#val2-" + i).val(cur.val2);
|
|
$("#operation-" + i).val(cur.operation);
|
$("#operValue-" + i).val(cur.operValue);
|
$("#uploadFlag-" + i).val(cur.uploadFlag);
|
$("#note-" + i).val(cur.note);
|
}
|
}
|
|
|
};
|
|
function initLibname() {
|
$.get("./cgi-bin/libname/libname-list", function (data, status) {
|
if ("success" == status) {
|
renderLibname(data);
|
} else {
|
window.parent.notify("系统后期协议库列表失败!");
|
}
|
}, "json");
|
}
|
|
function renderLibname(list) {
|
$.each(list, function (index, item) {
|
$("#device-libname").append("<option value='"+item.libname+"'>"+item.libnamezh+"</option>");
|
});
|
};
|
|
function initDevLibname() {
|
|
$.get("./cgi-bin/do/find_debug_libname", function (data, status) {
|
if (data != null) {
|
renderDevLibname(data);
|
} else {
|
window.parent.notify("系统后期协议库列表失败!");
|
}
|
}, "json");
|
}
|
|
function renderDevLibname(list) {
|
$.each(list, function (index, item) {
|
$("#dev-libname").append("<option value='"+item.libname+"'>"+item.libname+"</option>");
|
});
|
};
|