CTLELE/html/batch2.html

603 lines
18 KiB
HTML
Raw Normal View History

2023-08-10 10:39:56 +08:00
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
<title>唐庄变屏位图</title>
<link rel="stylesheet" type="text/css" href="../css/mui_min.css" />
<link rel="stylesheet" type="text/css" href="../css/font_awesome_min.css" />
<link rel="stylesheet" href="../css/bootstrap_min.css">
<link rel="stylesheet" type="text/css" href="../css/api.css" />
<script type="text/javascript" src="../script/api.js"></script>
<style>
/* 唐庄变频位图 */
.tick {
/* position: relative; */
position: absolute;
display: block;
top: 10px;
left: 83px;
width: 30px;
height: 30px;
}
.bj {
width: 1335px;
height: 100%;
background: rgb(3, 154, 219);
background-size: 100%;
}
.groove_dark {
position: relative;
background: rgb(31, 110, 160);
height: 130px;
border: 1px solid #fff;
float: left;
text-align: center;
padding-top: 20px;
}
.mui-btn {
background-color: #31D295FF;
width: 115px;
height: 45px;
margin-left: 50px;
margin-top: 10px;
border: none;
border-radius: 5px;
}
.mui-btn2 {
background-color: rgb(250, 85, 85);
width: 115px;
height: 45px;
margin-left: 36px;
margin-top: 10px;
border: none;
border-radius: 5px;
}
.mui-btn3 {
background-color: rgb(240, 143, 46);
width: 115px;
height: 45px;
margin-left: 36px;
margin-top: 10px;
border: none;
border-radius: 5px;
}
.row {
width: 1230px;
margin: 0 auto;
padding-top: 10px;
}
.cn_light {
padding-top: 18px;
color: #fff;
}
.btn {
background-color: rgb(134, 155, 182);
color: #fff;
width: 115px;
height: 45px;
border-radius: 5px;
margin-top: 10px;
float: right;
margin-right: 60px;
border: none;
}
.text1 {
display: inline-block;
margin-top: 69px;
margin-bottom: 33px;
color: #fff;
}
.text2 {
display: inline-block;
margin-top: 69px;
margin-bottom: 33px;
margin-left: 50px;
color: #fff;
}
</style>
</head>
<body class="bj">
<div class="" id="content1">
<div class="row" id="row">
<div class="col-sm-4 col-xs-3 col-md-2 groove_dark" id="1" onclick="choose()">
<input id="v1" type="hidden" value="0">
<!-- 蒙版 -->
<div class="masking" id="masking1" style="display: none;"></div>
<!-- 对钩 -->
<div class="tick" id="tickAc1" style="display: none;">
<img src="../icon/tickActive.png" style="width: 100%;height: 100%;">
</div>
<div class="tick" id="tickun1">
<img src="../icon/tick.png" style="width: 100%;height: 100%;">
</div>
<p id="n" class="cn_light">综合配线屏</p>
<p id="s" class="cn_light">当前状态:未知</p>
</div>
</div>
</div>
<button class="mui-btn mui-btn-success mui-btn-loading" onclick="chooseall()">全选</button>
<button class="mui-btn2 mui-btn-success mui-btn-loading" onclick="protection()">布防</button>
<span class="text1">点击后除选择的为布防,其余的改为撤防</span>
<span class="text2">点击之后除选择的为撤防,其余的为布防</span>
<button class="mui-btn3 mui-btn-success mui-btn-loading" onclick="removal()">撤防</button>
<button class="mui-btn3 mui-btn-success mui-btn-loading" onclick="back()" style="width:50px;height:50px;">
<img src="../image/back.png" style="width:100%;height:100%;">
</button>
</body>
<script type="text/javascript" src="../script/mui.min.js"></script>
<script type="text/javascript" src="../script/jquery-1.8.3.js"></script>
<script type="text/javascript" src="../script/command.js"></script>
<script type="text/javascript" src="../script/common.js"></script>
<script type="text/javascript" src="../script/crc.js"></script>
<script type="text/javascript" src="../script/cache.js"></script>
<script type="text/javascript">
var SocketServerClient = null;
var db = null;
var socketManager = null;
var ipadd = '';
var port = 0;
//全选第一次初始化判断,目的只执行一次
var cfflag = true;
apiready = function () {
db = api.require('db');
socketManager = api.require('socketManager');
initSB();
jian();
ipconfig();
};
function initSB(){
select(db, 'SELECT * FROM Sb WHERE Slt = "2"', function (ret, err) {
if(ret.status && ret.data.length > 0){
//需要根据设备图片,对设备名称进行完善
var arr = ret.data;
var html = "";
for(var index = 0; index < arr.length; index ++){
html += '<div class="col-sm-4 col-xs-3 col-md-2 groove_dark" id="'+arr[index].Code+'" onclick="choose()">';
html += ' <input id="v'+arr[index].Code+'" type="hidden" value="0"> ';
html += ' <!-- 蒙版 --> ';
html += ' <div class="masking" id="masking'+arr[index].Code+'" style="display: none;"></div> ';
html += ' <!-- 对钩 --> ';
html += ' <div class="tick" id="tickAc'+arr[index].Code+'" style="display: none;"> ';
html += ' <img src="../icon/tickActive.png" style="width: 100%;height: 100%;"> ';
html += ' </div> ';
html += ' <div class="tick" id="tickun'+arr[index].Code+'"> ';
html += ' <img src="../icon/tick.png" style="width: 100%;height: 100%;"> ';
html += ' </div> ';
html += ' <p id="n'+arr[index].Code+'" class="cn_light">'+arr[index].Name+'</p> ';
if(arr[index].Status == "0"){
html += ' <p id="s'+arr[index].Code+'" class="cn_light">当前状态:未知</p> ';
}else if(arr[index].Status == "1"){
html += ' <p id="s'+arr[index].Code+'" class="cn_light">当前状态:升<i class="fa fa-arrow-up" style="color: red;" aria-hidden="true"></i></p> ';
}else if(arr[index].Status == "2"){
html += ' <p id="s'+arr[index].Code+'" class="cn_light">当前状态:降<i class="fa fa-arrow-down" style="color: green;" aria-hidden="true"></i></p> ';
}
html += '</div> ';
}
$("#row").html(html);
}
});
}
//返回
function back() {
openHtml('frame1', 'frame1.html');
}
function ipconfig() {
//查询ip数据库
select(db, 'SELECT * FROM Ipconfig;', function (ret, err) {
var iparray = ret.data;
if (iparray != '' && iparray != null) {
ipadd = iparray[0].ipadd;
port = iparray[0].port;
}else{
alert("未初始化配置,请先用管理员账号登录进行初始化配置")
}
})
}
//监听
function jian() {
api.addEventListener({
name: 'myEvent'
}, function (ret, err) {
if (ret.value.state == 'no') {
abc();
}
}); //放的位置无限制写在apiready最开始即可
}
function abc() {
window.location.reload();//刷新页面
}
function openHtml(name, url, params) {
api.openWin({
name: name,
reload: true,
url: url,
pageParam: params
});
}
//全选
function chooseall() {
if(cfflag){
$('#row>div').each(function(){
$(this).css("background","rgb(31, 110, 160)")
$(this).children("div:eq(0)").css('display', 'none');
$(this).children("div:eq(1)").css('display', 'none');
$(this).children("div:eq(2)").css('display', 'block');
});
cfflag = false;
}
$('#row>div').each(function(){
//未选中
if($(this).children('div:eq(1)').css('display')=='none'){
$(this).css("background","#07b32c")
$(this).children("div:eq(0)").css('display', 'block');
$(this).children("div:eq(1)").css('display', 'block');
$(this).children("div:eq(2)").css('display', 'none');
}else{
$(this).css("background","rgb(31, 110, 160)")
$(this).children("div:eq(0)").css('display', 'none');
$(this).children("div:eq(1)").css('display', 'none');
$(this).children("div:eq(2)").css('display', 'block');
}
});
}
//单独选择
function choose() {
cfflag = true;
var flag = $(event.currentTarget).children("div:eq(2)").css("display");
if(flag == 'none'){
$(event.currentTarget).css("background","rgb(31, 110, 160)")
$(event.currentTarget).children("div:eq(0)").css('display', 'none');
$(event.currentTarget).children("div:eq(1)").css('display', 'none');
$(event.currentTarget).children("div:eq(2)").css('display', 'block');
}else{
$(event.currentTarget).css("background","#07b32c")
$(event.currentTarget).children("div:eq(0)").css('display', 'block');
$(event.currentTarget).children("div:eq(1)").css('display', 'block');
$(event.currentTarget).children("div:eq(2)").css('display', 'none');
}
}
var bytes = new Array();
//字符串转byte数组
function stringToByte(str) {
var len, c;
bytes.length = 0;
len = str.length / 2;
for (var i = 0; i < len; i++) {
c = str.charCodeAt(i);
var num1, num2, num3;
num1 = str.charCodeAt(2 * i);
num2 = str.charCodeAt(2 * i + 1);
if ((num1 >= 65) & (num1 <= 70)) {
num1 = num1 - 65 + 10
} else if ((num1 >= 48) & (num1 <= 57)) {
num1 = num1 - 48
}
if ((num2 >= 65) & (num2 <= 70)) {
num2 = num2 - 65 + 10
} else if ((num2 >= 48) & (num2 <= 57)) {
num2 = num2 - 48
}
num3 = num1 * 16 + num2;
bytes.push(num3);
}
return bytes;
}
//字符串转base64
function encode(str) {
// 对字符串进行编码
var encode = encodeURI(str);
// 对编码的字符串转化base64
var base64 = btoa(encode);
return base64;
}
//解码
var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
function base64_decode(input) {
var output = new Array();
var chr1, chr2, chr3;
var enc1, enc2, enc3, enc4;
var i = 0;
var orig_input = input;
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
if (orig_input != input)
alert("Warning! Characters outside Base64 range in input string ignored.");
if (input.length % 4) {
alert("Error: Input length is not a multiple of 4 bytes.");
return "";
}
var j = 0;
while (i < input.length) {
enc1 = keyStr.indexOf(input.charAt(i++));
enc2 = keyStr.indexOf(input.charAt(i++));
enc3 = keyStr.indexOf(input.charAt(i++));
enc4 = keyStr.indexOf(input.charAt(i++));
chr1 = (enc1 << 2) | (enc2 >> 4);
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
chr3 = ((enc3 & 3) << 6) | enc4;
output[j++] = chr1;
if (enc3 != 64)
output[j++] = chr2;
if (enc4 != 64)
output[j++] = chr3;
}
return output;
}
var hD = '0123456789ABCDEF';
function dec2hex(d) {
var h = hD.substr(d & 15, 1);
while (d > 15) {
d >>= 4;
h = hD.substr(d & 15, 1) + h;
}
return h;
}
const replaceStr1 = (str, index, char) => {
const strAry = str.split('');
strAry[index] = char;
return strAry.join('');
}
//修改状态表数据库
function updatastate(ide, str) {
select(db, 'SELECT * FROM Sb WHERE Slt="2" and Code ="' + ide + '"', function (ret, err) {
//如果查到
if (ret.data.length > 0) {
//插入数据库
execute(db, "update Sb set Status = '"+str+"' where Slt = '2' and Code = '"+ret.data[0].Code+"'", function (ret, err) { })
}
})
}
/*
* 显示loading遮罩层
*/
function loading() {
var mask_bg = document.createElement("div");
mask_bg.id = "mask_bg";
mask_bg.style.position = "absolute";
mask_bg.style.top = "0px";
mask_bg.style.left = "0px";
mask_bg.style.width = "100%";
mask_bg.style.height = "130%";
mask_bg.style.backgroundColor = "#777";
mask_bg.style.opacity = 0.6;
mask_bg.style.zIndex = 10001;
document.body.appendChild(mask_bg);
var mask_msg = document.createElement("div");
mask_msg.style.position = "absolute";
mask_msg.style.top = "45%";
mask_msg.style.left = "40%";
mask_msg.style.backgroundColor = "white";
mask_msg.style.border = "#336699 1px solid";
mask_msg.style.textAlign = "center";
mask_msg.style.fontSize = "1.1em";
mask_msg.style.fontWeight = "bold";
mask_msg.style.padding = "0.5em 3em 0.5em 3em";
mask_msg.style.zIndex = 10002;
mask_msg.innerText = "正在执行,请稍后...";
mask_bg.appendChild(mask_msg);
}
/*
* 关闭遮罩层
*/
function loaded() {
var mask_bg = document.getElementById("mask_bg");
if (mask_bg != null){
mask_bg.parentNode.removeChild(mask_bg);
}
}
//布防
function protection() {
loading();
var str2 = '11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111';
//根据选择替换字符
$('#row>div').each(function(index){
var temp = $(this).attr("id");
//未选中
if($(this).children('div:eq(1)').css('display')=='none'){
$("#s"+temp).html("当前状态:升" + "<i class='fa fa-arrow-up' style='color: red;' aria-hidden='true'></i>");
updatastate(temp, 1);
}else{
str2 = replaceStr1(str2, index, '0')
$("#s"+temp).html("当前状态:降" + "<i class='fa fa-arrow-down' style='color: green;' aria-hidden='true'></i>");
updatastate(temp, 2);
}
});
console.log(str2)
//sendStr为要发送的数据
var sendStr = bin_to_hex(str2).slice(0, 2) + " "
+ bin_to_hex(str2).slice(2, 4) + ' '
+ bin_to_hex(str2).slice(4, 6) + ' '
+ bin_to_hex(str2).slice(6, 8) + ' '
+ bin_to_hex(str2).slice(8, 10) + ' '
+ bin_to_hex(str2).slice(10, 12) + ' '
+ bin_to_hex(str2).slice(12, 14) + ' '
+ bin_to_hex(str2).slice(14, 16) + ' '
+ bin_to_hex(str2).slice(16, 18) + ' '
+ bin_to_hex(str2).slice(18, 20) + ' '
+ bin_to_hex(str2).slice(20, 22) + ' '
+ bin_to_hex(str2).slice(22, 24) + ' '
+ bin_to_hex(str2).slice(24, 26) + ' '
+ bin_to_hex(str2).slice(16, 18) + ' '
+ bin_to_hex(str2).slice(28, 30) + ' '
+ bin_to_hex(str2).slice(30, 32);
//需要效验的数据
var intended = '00 17 03 00 01 ' + sendStr + ' 01 00 00 00 ';
//组装数据
var sendmess = 'FE FE FE 7C 00 17 03 00 01 ' + sendStr + '01 00 00 00' + CRCdata(intended) + ' 16';
var v4 = sendmess.replace(/\s*/g, "");
createTcp(socketManager, ipadd, port, function (ret, err) {
if (ret.state == 102) {
var sid1 = ret.sid;
var Cr1 = '00 17 03 00 01 ' + sendStr + ' 01 00 00 00 ';
var v1 = 'FE FE FE 7C 00 17 03 00 01 ' + sendStr + ' 01 00 00 00 ' + CRCdata(intended) + ' 16';
var v4 = v1.replace(/\s*/g, "").toUpperCase();
stringToByte(v4);
var v5 = window.btoa(String.fromCharCode(...new Uint8Array(bytes)))
witeTcp(socketManager, sid1, v5, function (ret, err) { })
}
if (ret.state == 103) {
var sid1 = ret.sid;
var output = base64_decode(ret.data).toString();
var m = output.split(",");
var v22 = ''
for (var u = 0; u <= m.length; u++) {
if (m[u] != undefined) {
var v20 = Number(m[u])
var v21 = v20.toString(16).toUpperCase()
v22 += v21
}
}
close(socketManager, sid1, function (ret, err) { });
loaded();
}
})
}
//撤防
function removal() {
loading();
var str2 = '00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000';
//根据选择替换字符
$('#row>div').each(function(index){
var temp = $(this).attr("id");
//未选中
if($(this).children('div:eq(1)').css('display')=='none'){
$("#s"+temp).html("当前状态:降" + "<i class='fa fa-arrow-down' style='color: green;' aria-hidden='true'></i>");
updatastate(temp, 2);
}else{
str2 = replaceStr1(str2, index, '1')
$("#s"+temp).html("当前状态:升" + "<i class='fa fa-arrow-up' style='color: red;' aria-hidden='true'></i>");
updatastate(temp, 1);
}
});
console.log(str2)
//sendStr为要发送的数据
var sendStr = bin_to_hex(str2).slice(0, 2) + " "
+ bin_to_hex(str2).slice(2, 4) + ' '
+ bin_to_hex(str2).slice(4, 6) + ' '
+ bin_to_hex(str2).slice(6, 8) + ' '
+ bin_to_hex(str2).slice(8, 10) + ' '
+ bin_to_hex(str2).slice(10, 12) + ' '
+ bin_to_hex(str2).slice(12, 14) + ' '
+ bin_to_hex(str2).slice(14, 16) + ' '
+ bin_to_hex(str2).slice(16, 18) + ' '
+ bin_to_hex(str2).slice(18, 20) + ' '
+ bin_to_hex(str2).slice(20, 22) + ' '
+ bin_to_hex(str2).slice(22, 24) + ' '
+ bin_to_hex(str2).slice(24, 26) + ' '
+ bin_to_hex(str2).slice(16, 18) + ' '
+ bin_to_hex(str2).slice(28, 30) + ' '
+ bin_to_hex(str2).slice(30, 32);
//需要效验的数据
var intended = '00 17 03 00 01 ' + sendStr + ' 00 00 00 00 ';
//组装数据
var sendmess = 'FE FE FE 7C 00 17 03 00 01 ' + sendStr + '00 00 00 00' + CRCdata(intended) + ' 16';
var v4 = sendmess.replace(/\s*/g, "");
createTcp(socketManager, ipadd, port, function (ret, err) {
if (ret.state == 102) {
var sid1 = ret.sid;
var Cr1 = '00 17 03 00 01 ' + sendStr + ' 00 00 00 00 ';
var v1 = 'FE FE FE 7C 00 17 03 00 01 ' + sendStr + ' 00 00 00 00 ' + CRCdata(intended) + ' 16';
var v4 = v1.replace(/\s*/g, "").toUpperCase();
stringToByte(v4);
var v5 = window.btoa(String.fromCharCode(...new Uint8Array(bytes)))
witeTcp(socketManager, sid1, v5, function (ret, err) { })
}
if (ret.state == 103) {
var sid1 = ret.sid;
var output = base64_decode(ret.data).toString();
var m = output.split(",");
var v22 = ''
for (var u = 0; u <= m.length; u++) {
if (m[u] != undefined) {
var v20 = Number(m[u])
var v21 = v20.toString(16).toUpperCase()
v22 += v21
}
}
close(socketManager, sid1, function (ret, err) { });
loaded();
}
})
}
//二进制转为十六进制
function bin_to_hex(str) {
let hex_array = [{ key: 0, val: "0000" }, { key: 1, val: "0001" }, { key: 2, val: "0010" }, { key: 3, val: "0011" }, { key: 4, val: "0100" }, { key: 5, val: "0101" }, { key: 6, val: "0110" }, { key: 7, val: "0111" },
{ key: 8, val: "1000" }, { key: 9, val: "1001" }, { key: 'a', val: "1010" }, { key: 'b', val: "1011" }, { key: 'c', val: "1100" }, { key: 'd', val: "1101" }, { key: 'e', val: "1110" }, { key: 'f', val: "1111" }]
let value = ''
let list = []
if (str.length % 4 !== 0) {
let a = "0000"
let b = a.substring(0, 4 - str.length % 4)
str = b.concat(str)
}
while (str.length > 4) {
list.push(str.substring(0, 4))
str = str.substring(4);
}
list.push(str)
for (let i = 0; i < list.length; i++) {
for (let j = 0; j < hex_array.length; j++) {
if (list[i] == hex_array[j].val) {
value = value.concat(hex_array[j].key)
break
}
}
}
return value
}
</script>
</html>