var logListTable = null;
var otaListTable = null;
var table = layui.table;
var systemVersion = '';
var version_content;
function reloadLogList() {
var type = $('#log-type').val();
var device = $('#dev-type').val();
var name = $('#systelog-name-search-text').val()
var from = parseInt(getDateFromString($('input[type="text"][id="logListStartDate"]').val() + " 00:00:00"));
var to = parseInt(getDateFromString($('input[type="text"][id="logListEndDate"]').val() + " 23:59:59"));
var where = '';
if (type > 0 || device > 0 || to > 0 || from > 0 || name.length > 0) {
where += '?';
if (type > 0) where += 'type=' + type + '&';
if (device > 0) where += 'device=' + device + '&';
if (from > 0) where += 'from=' + from + '&';
if (to > 0) where += 'to=' + to + '&';
if (name.length > 0) where += 'name=' + name + '&';
where = where.substr(0, where.length - 1);
}
table.reload('loglist', {
url: httpAddress() + 'system/log/list' + where
, headers: getLayuiHttpReqHeaders()
, page: { curr: 1 }
});
layui.laydate.render({
elem: '#date-select'
, range: ['#logListStartDate', '#logListEndDate']
, btns: ['now', 'confirm']
, page: { curr: 1 }
});
$('#dev-type').html(getDevTypeSelectHtml());
$('#log-type').val(type);
$('#dev-type').val(device);
$('#systelog-name-search-text').val(name)
if (from > 0 && to > 0) {
$('input[type="text"][id="logListStartDate"]').val(timestampToTime(from, 0));
$('input[type="text"][id="logListEndDate"]').val(timestampToTime(to, 0));
}
}
function systemLogListRefresh() {
logListTable = table.render({
elem: '#logListTable'
, id: 'loglist'
, defaultToolbar: ['']
, toolbar: '#logListToolbar'
, url: httpAddress() + 'system/log/list'
, headers: getLayuiHttpReqHeaders()
, cellMinwidth: 90
, page: true
, limits: [10, 30, 50, 80, 100, 200, 500]
, cols: [[
{ type: 'checkbox', fixed: 'left' }
, { type: 'numbers', align: 'center', title: '序号', width: 60, sort: true }
, {
align: 'center', field: 'time', width: 200, title: '时间', sort: true, templet: function (d) {
return timestampToTime(d.time);
}
}
, {
align: 'center', field: 'type', width: 150, title: '日志类型', sort: true, templet: function (d) {
return getlogTypeName(d.type);
}
}
, {
align: 'center', field: 'device', width: 150, title: '设备类型', sort: true, templet: function (d) {
return getDevTypeName(d.device);
}
}
, { align: 'center', field: 'name', width: 360, title: '来源名称' }
, { align: 'center', field: 'content', minWidth: 300, title: '内容' }
]]
, parseData: function (res) {
if (res.code === 200) {
// for (var i = res.data.list.length - 1; i >= 0; i--) {
// // res.data.list[i].num = i+1;
// res.data.list[i].timestr = timestampToTime(res.data.list[i].time);
// res.data.list[i].typestr = getlogTypeName(res.data.list[i].type);
// res.data.list[i].devstr = getDevTypeName(res.data.list[i].device);
// };
}
return {
"code": res.code === 200 ? 0 : res.code //解析接口状态
, "count": res.data.count//res.data.list.length
, "data": res.data.list
};
}
});
layui.form.render();
$('#dev-type').html(getDevTypeSelectHtml());
//日期范围
layui.laydate.render({
elem: '#date-select'
, btns: ['now', 'confirm']
//设置开始日期、日期日期的 input 选择器
//数组格式为 2.6.6 开始新增,之前版本直接配置 true 或任意分割字符即可
, range: ['#logListStartDate', '#logListEndDate']
});
layui.table.on('toolbar(logListTable)', function (obj) {
switch (obj.event) {
case 'refresh':
reloadLogList();
break;
case 'query':
reloadLogList();
break;
case 'delete':
var checkStatus = layui.table.checkStatus(obj.config.id);
var ids = [];
checkStatus.data.forEach(function (e) {
ids.push(e.id);
});
if (ids.length > 0) {
layer.confirm('确定删除已选的 <span style="color: #1E9FFF;">' + ids.length + '</span> 项记录?', function (index) {
httpPOST('system/log/delete', { list: ids, all: 0 }, function (rsp) {
layer.msg('成功删除 <span style="color: #1E9FFF;">' + rsp.count + '</span> 条记录!', { icon: 1, time: 800 }, function () {
reloadLogList();
});
});
});
} else {
layer.msg('请先选择日志记录');
}
break;
case 'delall':
layer.confirm('确定删除所有日志记录?', function (index) {
httpPOST('system/log/delete', { list: [], all: 1 }, function (rsp) {
layer.msg('删除成功!', { icon: 1, time: 800 }, function () {
reloadLogList();
});
});
});
break;
};
});
}
function reloadDevLogList() {
var type = $('#dev-log-type').val();
var from = parseInt(getDateFromString($('input[type="text"][id="devlogListStartDate"]').val() + " 00:00:00"));
var to = parseInt(getDateFromString($('input[type="text"][id="devlogListEndDate"]').val() + " 23:59:59"));
var device = parseInt($('#dev-log-devid').val());
var where = '';
if (type > 0 || to > 0 || device > 0 || from > 0) {
where += '?';
if (type > 0) where += 'devt=' + type + '&';
if (device > 0) where += 'did=' + device + '&';
if (from > 0) where += 'from=' + from + '&';
if (to > 0) where += 'to=' + to + '&';
where = where.substr(0, where.length - 1);
}
table.reload('devloglist', {
url: httpAddress() + 'device/log/list' + where
, headers: getLayuiHttpReqHeaders()
, page: { curr: 1 }
});
layui.laydate.render({
elem: '#dev-log-date-select'
, btns: ['now', 'confirm']
, range: ['#devlogListStartDate', '#devlogListEndDate']
, page: { curr: 1 }
});
$('#dev-log-type').html(getDevTypeSelectHtml());
$('#dev-log-type').val(type);
$('#dev-log-devid').val(device > 0 ? device : '');
if (from > 0 && to > 0) {
$('input[type="text"][id="devlogListStartDate"]').val(timestampToTime(from, 0));
$('input[type="text"][id="devlogListEndDate"]').val(timestampToTime(to, 0));
}
}
function deviceLogListRefresh() {
table.render({
elem: '#devLogListTable'
, id: 'devloglist'
, defaultToolbar: ['']
, toolbar: '#devLogListToolbar'
, url: httpAddress() + 'device/log/list'
, headers: getLayuiHttpReqHeaders()
, cellMinwidth: 90
, page: true
, limits: [10, 30, 50, 80, 100, 200, 500]
, cols: [[
{ type: 'checkbox', fixed: 'left' }
, { type: 'numbers', align: 'center', title: '序号', width: 60, sort: true }
, { align: 'center', field: 'did', width: 150, title: '设备ID', sort: true }
, { align: 'center', field: 'mac', width: 220, title: '设备MAC', sort: true }
, { align: 'center', field: 'devstr', width: 180, title: '设备类型', sort: true }
, { align: 'center', field: 'timestr', width: 200, title: '上传时间' }
, { align: 'center', field: '_size', width: 150, title: '文件大小' }
, { align: 'center', field: 'file', width: 300, title: '文件名' }
, { fixed: 'right', title: '操作', toolbar: '#devLogOptbar', minWidth: 150, center: true }
]]
, parseData: function (res) {
if (res.code === 200) {
for (var i = res.data.list.length - 1; i >= 0; i--) {
res.data.list[i].timestr = timestampToTime(res.data.list[i].time);
res.data.list[i].devstr = getDevTypeName(res.data.list[i].devt);
res.data.list[i]._size = byteToString(res.data.list[i].size);
}
}
return {
"code": res.code === 200 ? 0 : res.code //解析接口状态
, "count": res.data.count//res.data.list.length
, "data": res.data.list
};
}
});
$('#dev-log-type').html(getDevTypeSelectHtml());
layui.form.render();
//日期范围
layui.laydate.render({
elem: '#dev-log-date-select'
, btns: ['now', 'confirm']
//设置开始日期、日期日期的 input 选择器
//数组格式为 2.6.6 开始新增,之前版本直接配置 true 或任意分割字符即可
, range: ['#devlogListStartDate', '#devlogListEndDate']
});
layui.table.on('toolbar(devLogListTable)', function (obj) {
switch (obj.event) {
case 'refresh':
reloadDevLogList();
break;
case 'query':
reloadDevLogList();
break;
case 'delete':
var checkStatus = layui.table.checkStatus(obj.config.id);
var ids = [];
checkStatus.data.forEach(function (e) {
ids.push(e.id);
});
if (ids.length > 0) {
layer.confirm('确定删除已选的 <span style="color: #1E9FFF;">' + ids.length + '</span> 项记录?', function (index) {
httpPOST('device/log/delete', { list: ids, all: 0 }, function (rsp) {
layer.msg('成功删除 <span style="color: #1E9FFF;">' + rsp.count + '</span> 条记录!', { icon: 1, time: 800 }, function () {
reloadDevLogList();
});
});
});
} else {
layer.msg('请先选择日志记录');
}
break;
case 'delall':
layer.confirm('确定删除所有日志记录?', function (index) {
httpPOST('device/log/delete', { list: [], all: 1 }, function (rsp) {
layer.msg('删除成功!', { icon: 1, time: 800 }, function () {
reloadDevLogList();
});
});
});
break;
};
});
layui.table.on('tool(devLogListTable)', function (obj) {
var data = obj.data;
if (obj.event === 'download') {
downloadFile(getLogDownloadUrl() + data.did + '/', data.file, 'D' + data.did + '-' + data.file)
} else if (obj.event === 'del') {
layer.confirm('确定删除日志文件 <span style="color: #1E9FFF;">' + data.file + '</span> ?', function (index) {
var ids = [];
ids.push(data.id);
httpPOST('device/log/delete', { list: ids, all: 0 }, function (r) {
reloadDevLogList();
});
layer.close(index);
});
}
});
}
function uploadFunctionRender() {
layui.upload.render({
elem: '#upload-ota-file'
, url: httpAddress() + 'upgrade/upload'
, headers: getLayuiHttpReqHeaders()
, auto: true
, accept: 'file'
, acceptMime: ".upg"
, before: function (obj) {
layer.msg('上传中', { icon: 16, time: 0 });
return true;
}
, done: function (res) {
if (res.code == 200) {
layer.msg('上传成功', { icon: 1 });
reloadOtaList();
} else if (res.code == 604) {
layer.msg('上传失败,升级包已存在', { icon: 2 });
}
}
, error: function () {
layer.msg('上传失败', { icon: 2 });
}
});
layui.form.on('select(ota-dev-type)', function (data) {
reloadOtaList()
})
}
function reloadOtaList() {
var type = $('#ota-dev-type').val();
var url = httpAddress() + 'upgrade/list'
if (type > 0) {
url = url + "?type=" + type
}
table.reload('loglist', {
url: url
, headers: getLayuiHttpReqHeaders()
, page: { curr: 1 }
});
$('#ota-dev-type').html(getDevTypeSelectHtml())
$('#ota-dev-type').val(type);
uploadFunctionRender();
layui.form.render();
}
function otaListRefresh() {
otaListTable = table.render({
elem: '#otaListTable'
, id: 'loglist'
, defaultToolbar: ['']
, toolbar: '#otaListToolbar'
, url: httpAddress() + 'upgrade/list'
, headers: getLayuiHttpReqHeaders()
, cellMinwidth: 90
, page: true
, cols: [[
{ type: 'checkbox', fixed: 'left' }
, { type: 'numbers', align: 'center', title: '序号', width: 60 }
, { align: 'center', field: 'name', width: 150, title: '版本号', sort: true }
, { align: 'center', field: 'updateTime', width: 200, title: '更新时间', sort: true }
, { align: 'center', field: 'uploadTime', width: 200, title: '上传时间', sort: true }
, {
align: 'center', field: 'type', width: 150, title: '设备类型', sort: true, templet: function (d) {
return getDevTypeName(d.type);
}
}
, { align: 'center', field: 'text', minWidth: 300, title: '更新内容' }
]]
, parseData: function (res) {
return {
"code": res.code === 200 ? 0 : res.code //解析接口状态
, "count": res.data.local_total //res.data.list.length
, "data": res.data.local
};
}
});
$('#ota-dev-type').html(getDevTypeSelectHtml())
layui.form.render();
uploadFunctionRender();
layui.table.on('toolbar(otaListTable)', function (obj) {
switch (obj.event) {
case 'delete':
var checkStatus = layui.table.checkStatus(obj.config.id);
var ids = [];
checkStatus.data.forEach(function (e) {
ids.push(e.id);
});
if (ids.length > 0) {
layer.confirm('确定删除已选的 <span style="color: #1E9FFF;">' + ids.length + '</span> 项记录?', function (index) {
httpPOST('upgrade/delete', { list: ids, all: 0 }, function (rsp) {
layer.msg('成功删除 <span style="color: #1E9FFF;">' + rsp.count + '</span> 条记录!', { icon: 1, time: 800 }, function () {
reloadOtaList();
});
});
});
} else {
layer.msg('请先选择升级包记录');
}
break;
case 'delall':
layer.confirm('确定删除所有升级包记录?', function (index) {
httpPOST('upgrade/delete', { list: [], all: 1 }, function (rsp) {
layer.msg('删除成功!', { icon: 1, time: 800 }, function () {
reloadOtaList();
});
});
});
break;
};
});
}
function licenseActiaveResult(r) {
if (-7 === r) {
layer.msg('许可证激活时间过期!', { icon: 2 });
} else if (-6 === r) {
layer.msg('许可证已经被使用!', { icon: 2 });
} else if (-5 === r) {
layer.msg('许可证激活失败!', { icon: 2 });
} else if (-4 === r) {
layer.msg('主机ID不匹配', { icon: 2 });
} else if (-3 === r) {
layer.msg('许可证无效!', { icon: 2 });
} else if (-2 === r) {
layer.msg('系统时间异常!', { icon: 2 });
} else if (-1 === r) {
layer.msg('许可证过期!', { icon: 2 });
} else if (0 === r) {
layer.msg('试用许可证激活成功!', { icon: 1 });
systemStatusRefresh();
} else if (1 === r) {
layer.msg('永久许可证激活成功!', { icon: 1 });
systemStatusRefresh();
}
}
function current_version_info(sysVer) {
return get_ui_version() + '-' + sysVer + get_ui_customID();
}
function systemStatusRefresh() {
httpGet('system/status', function (r) {
if (r.system.os === 'linux') {
// $('.v-settings-datetime').removeClass('element-hidden')
$('.v-settings-upgrade').removeClass('element-hidden')
}
currentSysRuntimeSec = r.system.runtime;
currentSysSec = r.system.currentSec;
$("#sysMode").html(r.system.product);
systemVersion = current_version_info(r.system.version);
let verhtml = 'V' + systemVersion + '_' + get_version_date();
if (r.system.regInfo !== undefined) {
verhtml += '<div class="layui-inline">'
if (r.system.regInfo.activate === 2) {
verhtml += '<button class="layui-btn layui-btn-primary sys-status-actived layui-btn-sm">已注册</button>'
verhtml += '<button id="btn-clear-activate" class="layui-btn layui-btn-primary sys-status-actived layui-btn-sm">清除信息</button>'
} else if (r.system.regInfo.activate === 3) {
verhtml += '<button class="layui-btn layui-btn-primary layui-btn-sm sys-status-actived">加密狗已激活</button>'
} else if (r.system.regInfo.activate === 1) {
verhtml += '<button id="btn-tryout-version" class="layui-btn layui-btn-primary sys-status-not-actived layui-btn-sm">试用版</button>'
verhtml += '<button id="btn-clear-activate" class="layui-btn layui-btn-primary sys-status-actived layui-btn-sm">清除信息</button>'
} else if (r.system.regInfo.state === -8) {
verhtml += '<button class="layui-btn layui-btn-primary layui-btn-sm sys-status-not-actived">检测加密狗已过有效期</button>'
} else {
verhtml += '<button class="layui-btn layui-btn-primary sys-status-not-actived layui-btn-sm">未注册</button>'
verhtml += '<button id="btn-offline-activate" class="layui-btn layui-btn-primary sys-status-actived layui-btn-sm">离线激活</button>'
verhtml += '<button id="btn-online-activate" class="layui-btn layui-btn-primary sys-status-actived layui-btn-sm">在线激活</button>'
}
verhtml += '</div>';
}
$("#sysVer").html(verhtml);
$("#hostname").html(r.system.regInfo.machineID);
// $("#hostname").html(r.system.hostname);
$("#boottime").html(timesecToString(currentSysRuntimeSec));
$("#curTime").html(timestampToTime(currentSysSec));
if (r.network.length) {
$("#net-mac").html(r.network[0].mac);
$("#net-auto").html(r.network[0].auto === 1 ? "是" : "否");
$("#net-ip").html(r.network[0].ip);
$("#net-mask").html(r.network[0].mask);
$("#net-gw").html(r.network[0].gw);
$('#ping-address').val(r.network[0].gw)
}
$("#cpu").attr("lay-percent", r.cpu.percent + '%');
if (r.cpu.percent >= 80) {
if (!$("#cpu").hasClass('layui-bg-red')) {
!$("#cpu").addClass('layui-bg-red');
}
}
$("#memory").attr("lay-percent", r.memory.percent + '%');
if (r.memory.percent >= 80) {
if (!$("#memory").hasClass('layui-bg-red')) {
!$("#memory").addClass('layui-bg-red');
}
}
$("#memUse").html(byteToString(r.memory.use, 1) + '/' + byteToString(r.memory.size, 1));
$("#disk").attr("lay-percent", r.storage.percent + '%');
$("#diskUse").html(byteToString(r.storage.use, 1) + '/' + byteToString(r.storage.size, 1));
if (r.storage.percent >= 80) {
if (!$("#disk").hasClass('layui-bg-red')) {
!$("#disk").addClass('layui-bg-red');
}
}
layui.element.init();
layui.upload.render({
elem: '#btn-offline-activate'
, url: httpAddress() + 'system/activate/offline'
, headers: getLayuiHttpReqHeaders()
, auto: true
, accept: 'file'
, acceptMime: ".lic"
, before: function (obj) {
layer.msg('上传中', { icon: 16, time: 0 });
return true;
}
, done: function (res) {
if (res.code == 200) {
licenseActiaveResult(res.data.result);
} else {
layer.msg('上传失败 :' + res.code, { icon: 2 });
}
}
, error: function () {
layer.msg('上传失败', { icon: 2 });
}
});
$('#btn-clear-activate').click(function () {
layer.confirm('确定清除许可证?<br><label class="netCfg-notice-label">注:清除许可证后需重新申请许可证,并重新激活系统。</label>', function () {
httpPOST('system/activate/clear', {}, function (r) {
layer.msg('清除成功', { icon: 1 });
systemStatusRefresh();
});
});
})
$('#btn-online-activate').click(function (e) {
layer.confirm('确定在线申请许可证?<br><label class="netCfg-notice-label">注:申请提交到线上服务器后等待管理员审核<br>确定可激活系统后再次提交申请操作即可获取许可证并激活系统。</label>', function () {
layer.msg('请稍后...', { icon: 16, time: 0 });
httpPOST('system/activate/online', {}, function (r) {
if (r.result === 1) {
layer.msg('申请提交成功', { icon: 1 });
} else if (r.result === 2) {
layer.msg('许可证未生成', { icon: 1 });
} else if (r.result === 0) {
licenseActiaveResult(r.lic_result);
} else {
layer.msg('未知结果:' + r.result, { icon: 2 });
}
}, function (r) {
if (r.code === 417) {
layer.msg('操作未成功,请确保服务器联网,且网络时间已同步!', { icon: 0 });
return 0;
}
return 1;
});
});
})
$('#btn-tryout-version').click(function (e) {
layer.confirm('当前系统为试用版,试用期内所有功能可正常使用。<br><label class="netCfg-notice-label">注:试用结束时间:' + timestampToTime(r.system.regInfo.endTimestamp) + '</label>', function (index) {
layer.close(index)
})
})
});
}
function resetDate() {
httpGet('system/date/info', function (r) {
layui.laydate.render({
elem: '#current-date'
, type: 'datetime'
, btns: ['now', 'confirm']
, value: timestampToTime(r.timesec)
});
var en;
if (r.ntpEnable === 1) en = true;
else en = false;
$("input[type='checkbox'][name='auto-set']").prop("checked", en);
$('input[type="text"][name="sync-address"]').val(r.ntpServer)
layui.form.render();
});
}
function dateCommit() {
layer.confirm('确定修改?', function () {
var j = {
timesec: parseInt(getDateFromString($('input[type="text"][id="current-date"]').val()))
, ntpEnable: $("input[type='checkbox'][name='auto-set']").prop("checked") === false ? 0 : 1
, ntpServer: $("input[name='sync-address']").val()
, zone: 74
, daylightTime: 0
};
httpPOST('system/date/update', j, function (r) {
layer.msg('修改成功', { icon: 1 });
});
});
}
function timeSync() {
httpPOST('system/date/sync/ntp', {}, function (r) {
layer.msg('同步成功', { icon: 1, time: 800 }, function () {
resetDate();
});
});
}
function reloadBackupTable() {
table.reload('backList', {
url: httpAddress() + 'system/backup/list'
, headers: getLayuiHttpReqHeaders()
});
}
function backupCreate() {
var item = [];
let s = '';
$('input[type="checkbox"][name="back"]:checked').each(function () {
item.push($(this).val());
if (s !== '') s += ',' + $(this).attr('title');
else s += $(this).attr('title');
});
if (item.length === 0) {
layer.msg('未选择备份参数');
return;
}
layer.confirm('确定备份当前数据 <span style="color: #1E9FFF;">' + s + '</span> ?', function (index) {
httpPOST('system/backup/create', { items: item }, function (r) {
layer.msg('备份成功!', { icon: 1, time: 800 }, function (i) {
layer.close(i);
reloadBackupTable();
});
});
layer.close(index);
});
}
function waitSystemRestart() {
layer.alert('操作成功<br>系统重启中,请稍后重新登录', {
time: 30 * 1000
, success: function (layero, index) {
var timeNum = this.time / 1000, setText = function (start) {
layer.title((start ? timeNum : --timeNum) + ' 秒后重新登录', index);
};
setText(!0);
this.timer = setInterval(setText, 1000);
if (timeNum <= 0) clearInterval(this.timer);
}
, end: function () {
clearInterval(this.timer);
}
}, function (i) {
layer.close(i);
});
}
function restoreBackup(b) {
layer.confirm('确定恢复备份文件 <span style="color: #1E9FFF;">' + b.filename + '</span> ?<br><label class="netCfg-notice-label">注: 恢复备份文件将覆盖当前数据,并重启系统!</label>', function (index) {
httpPOST('system/backup/restore', { id: b.id }, function (r) {
waitSystemRestart();
});
});
}
function backupDelete() {
var checkStatus = layui.table.checkStatus('backList');
if (checkStatus.data.length === 0) {
layer.msg("请选择备份项");
return;
}
layer.confirm('确定删除已选的 <span style="color: #1E9FFF;">' + checkStatus.data.length + '</span> 项?', function (index) {
var ids = [];
checkStatus.data.forEach(function (i) {
ids.push(i.id);
});
httpPOST('system/backup/delete', { list: ids }, function (r) {
layer.msg('删除成功', { icon: 1, time: 800 }, function (i) {
reloadBackupTable();
});
});
layer.close(index);
});
}
function backupListRefresh() {
$("input[id='back1']").prop("checked", true);
$("input[id='back2']").prop("checked", true);
$("input[id='back3']").prop("checked", true);
$("input[id='back4']").prop("checked", true);
$("input[id='resetItem1']").prop("checked", false);
$("input[id='resetItem2']").prop("checked", false);
$("input[id='resetItem3']").prop("checked", false);
$("input[id='resetItem4']").prop("checked", false);
layui.form.render();
layui.table.render({
elem: '#restoreInfo'
, id: 'backList'
, defaultToolbar: ['']
// ,toolbar: '#backToolbar'
, url: httpAddress() + 'system/backup/list'
, headers: getLayuiHttpReqHeaders()
, cellMinwidth: 90
, page: true
, limit: 10
, limits: [10, 30, 50, 80, 100, 200, 500]
, cols: [[
{ type: 'checkbox', fixed: 'left' }
, { type: 'numbers', title: '序号', width: 80, sort: true }
, { align: 'center', field: '_backtime', width: 200, title: '备份时间' }
, { align: 'center', field: '_items', minWidth: 400, title: '备份数据' }
, { align: 'center', field: 'filename', width: 300, title: '文件名' }
, { fixed: 'right', title: '操作', toolbar: '#backupOptbar', minWidth: 150, center: true }
]]
, parseData: function (res) {
if (res.code === 200) {
let list = res.data.list;
for (var i = list.length - 1; i >= 0; i--) {
list[i]._items = '';
$('input[name="back"]').each(function (idx, v) {
if (list[i].items.indexOf($(v).attr("value")) >= 0) {
if (list[i]._items === '') list[i]._items += $(v).attr("title");
else list[i]._items += ',' + $(v).attr("title");
}
})
list[i]._backtime = timestampToTime(list[i].backtime);
};
}
return {
"code": res.code === 200 ? 0 : res.code //解析接口状态
, "count": res.data.count
, "data": res.data.list
};
}
});
layui.table.on('tool(restoreInfo)', function (obj) {
var data = obj.data;
if (obj.event === 'download') {
downloadFile(getBackupDownloadUrl(), data.filename);
} else if (obj.event === 'restore') {
restoreBackup(data);
} else if (obj.event === 'del') {
layer.confirm('确定删除备份文件 <span style="color: #1E9FFF;">' + data.filename + '</span> ?', function (index) {
var ids = [];
ids.push(data.id);
httpPOST('system/backup/delete', { list: ids }, function (r) {
reloadBackupTable();
});
layer.close(index);
});
}
});
var backup_upload = layui.upload.render({
elem: '#upload-backup-file'
, url: httpAddress() + 'system/backup/upload'
, headers: getLayuiHttpReqHeaders()
, auto: true
, accept: 'file'
, acceptMime: ".back"
, before: function (obj) {
layer.msg('上传中', { icon: 16, time: 0 });
return true;
}
, done: function (res) {
if (res.code == 200) {
layer.msg('上传成功', { icon: 1 });
backupListRefresh();
} else if (res.code == 604) {
layer.msg('上传失败,备份文件已存在', { icon: 2 });
} else {
layer.msg('上传失败 :' + res.code, { icon: 2 });
}
backup_upload.reload();
}
, error: function () {
layer.msg('上传失败', { icon: 2, time: 800 });
}
});
}
function render_upgrade_info(cfg) {
var c = cfg.config;
$('input[type="radio"][name="upgrade-server"][value=' + c.servType + ']').attr("checked", true);
$("input[type='checkbox'][name='force-upgrade']").prop("checked", c.force ? true : false);
var vslt = '';
var vs;
if (c.servType) vs = c.remote;
else vs = c.local;
let len = vs.length;
let vsltID = c.vsltID;
let idx = -1;
for (var i = 0; i < len; i++) {
vslt += '<option value="' + vs[i].id + '">' + vs[i].name + '</option>';
if (c.vsltID === 0 && vs[i].id > vsltID) {
vsltID = vs[i].id;
idx = i;
c.currentName = vs[i].name;
}
if (vs[i].id === c.vsltID) {
idx = i;
c.currentName = vs[i].name;
}
};
$('#sys-version-select').html(vslt);
if (vsltID > 0 && idx >= 0) {
$('#ota-update-text').val(vs[idx].text);
$('#sys-version-select').val(vsltID);
} else {
$('#ota-update-text').val('');
}
layui.upload.render({
elem: '#v-upload-ota-file'
, url: httpAddress() + 'upgrade/upload'
, headers: getLayuiHttpReqHeaders()
, auto: true
, accept: 'file'
, acceptMime: ".upg"
, before: function (obj) {
layer.msg('上传中', { icon: 16, time: 0 });
return true;
}
, done: function (res) {
if (res.code == 200) {
layer.msg('上传成功', { icon: 1 });
sysUpgradeVersionRefresh();
} else if (res.code == 604) {
layer.msg('上传失败,升级包已存在', { icon: 2 });
} else {
layer.msg('上传失败 :' + res.code, { icon: 2 });
}
}
, error: function () {
layer.msg('上传失败', { icon: 2 });
}
});
layui.form.render();
}
function system_upgrade_update() {
$('.v-system-upgrade').html($('#system-upgrade-html').html());
$('.upload-select-file').removeClass('text-color-master');
$('.upgrade-system-version').html('V' + systemVersion);
$('#btnUpgradeStart').click(function () {
var data = {
verID: parseInt($('#sys-version-select').val())
, force: $("input[type='checkbox'][name='force-upgrade']").prop("checked") ? 1 : 0
};
var title = '';
if (isNaN(data.verID)) {
layer.msg("请先选择版本")
return;
}
if (data.force == 1) {
title = '确定强制升级系统至版本: <span style="color: #1E9FFF;"> ' + version_content.config.currentName + ' </span>';
title = title + '<br><label class="netCfg-notice-label">注: 强制升级系统,将忽略版本的兼容性,可能导致系统功能异常,请谨慎操作!</label>'
} else {
title = '确定升级系统至版本: <span style="color: #1E9FFF;"> ' + version_content.config.currentName + ' </span>';
}
layer.confirm(title, function (index1) {
httpPOST('system/service/upgrade', data, function (r) {
waitSystemRestart();
});
});
})
}
function sysUpgradeVersionRefresh() {
system_upgrade_update();
layui.form.on('radio(upgrade-server)', function (data) {
if (data.value === '1') {
$('#v-upload-ota-file').addClass('element-hidden');
} else {
$('#v-upload-ota-file').removeClass('element-hidden');
}
version_content.config.servType = parseInt(data.value);
version_content.config.vsltID = 0;
system_upgrade_update();
render_upgrade_info(version_content);
});
layui.form.on("select(sys-version-select)", function (data) {
version_content.config.vsltID = parseInt(data.value);
system_upgrade_update();
render_upgrade_info(version_content);
})
httpGet('upgrade/list?type=1', function (j) {
j.local.sort(sortID);
j.remote.sort(sortID);
version_content = {
config: {
servType: 0,
vsltID: 0,
force: 0,
local: j.local,
remote: j.remote
}
}
render_upgrade_info(version_content)
});
}
function resetSystemData() {
var item = [];
let s = '';
$('input[type="checkbox"][name="resetItem"]:checked').each(function () {
item.push($(this).val());
if (s !== '') s += ',' + $(this).attr('title');
else s += $(this).attr('title');
});
if (item.length === 0) {
layer.msg('请先选择重置参数');
return;
}
layer.confirm('确定重置当前数据 <span style="color: #1E9FFF;">' + s + '</span> ?', { title: '提示' }, function (index) {
httpPOST('system/reset/data', { items: item }, function (r) {
waitSystemRestart();
});
layer.close(index);
});
}
function resetFactorySettings() {
layer.confirm('<label class="netCfg-notice-label">注: 恢复出厂设置会永久清除所有数据,并重启系统,请谨慎操作!</label>',
{ title: '恢复出厂设置' }, function (index) {
httpPOST('system/service/factory', { delay: 1000 }, function (r) {
waitSystemRestart();
});
});
}
function systemUpgradeInit() {
$('#btnSystemRestart').click(function () {
layer.confirm('确定重启系统?<br><label class="netCfg-notice-label">注:重启系统将停止当前所有播放任务,并断开所有设备连接。</label>',
{ title: '重启系统' }, function (idx) {
httpPOST('system/service/restart', { delay: 1000 }, function (r) {
waitSystemRestart();
});
layer.close(idx);
});
})
}
function autoHeight(elem) {
elem.style.height = 'auto';
elem.scrollTop = 0; //防抖动
elem.scrollHeight = elem.scrollHeight
elem.style.height = elem.scrollHeight + 'px';
}
function remoteFixRefresh() {
httpGet('system/service/remote/info', function (r) {
if (r.remote) $('#remote-connect').prop("checked", true);
else $('#remote-connect').prop("checked", false);
// $('#remote-service-address').val(r.proxyServer);
if (r.connect) {
$('#remote-connect-status').html('已连接');
$('#remote-connect-status').addClass('text-color-master');
} else {
$('#remote-connect-status').html('未连接');
$('#remote-connect-status').removeClass('text-color-master');
}
if (r.support !== 1) {
$('.v-remote-connect-box').addClass('element-hidden');
} else if (r.rustdeskID !== undefined && r.rustdeskID.length > 0) {
$('.v-rustdesk-box').removeClass('element-hidden')
$('#rustdesk-id').html(r.rustdeskID)
}
layui.form.render('checkbox');
})
$('#ping-out-text').text('');
autoHeight(document.getElementById("ping-out-text"));
}
function remoteFixCommit() {
layer.confirm('确定提交修改?', function (idx) {
var b = {};
b.remote = typeof $('input[type="checkbox"][name="remote-connect"]:checked').val() !== "undefined" ? 1 : 0;
// b.proxyServer = $('#remote-service-address').val();
httpPOST('system/service/remote/update', b, function (r) {
layer.msg('修改成功', { icon: 1, time: 800 }, function () {
remoteFixRefresh();
});
});
layer.close(idx);
});
}
function sourceUpdateCommit() {
}
function sourceRefresh() {
$('.v-source-pri-box').html('');
httpGet('system/source/list', function (r) {
r.list.sort((a, b) => { return a.priority - b.priority });
table.render({
elem: '#source-list-table'
, id: 'sourceListTable'
, defaultToolbar: ['']
, toolbar: '#source-table-Toolbar'
, cellMinwidth: 90
, page: false
, limit: 100
, cols: [[
{ type: 'numbers', align: 'center', title: '序号', width: 60 }
, { align: 'center', field: 'name', minWidth: 150, title: '音源名称', sort: true }
, { align: 'center', field: 'priority', width: 120, title: '优先级', sort: true }
, {
align: 'center', field: 'follow', width: 120, title: '独立音量', templet: function (d) {
if (d.follow === 0) return '是';
else return '否';
}
}
, { align: 'center', field: 'vol', width: 120, title: '音源音量' }
, {
align: 'center', field: 'mixer', width: 120, title: '混音', templet: function (d) {
if (d.mixer === 0) return '否';
else return '是';
}
}
, {
align: 'center', field: 'mixerVol', width: 120, title: '混音音量', templet: function (d) {
if (d.mixerVol === -1) return '未设置';
return d.mixerVol
}
}
, { fixed: 'right', title: '操作', toolbar: '#source-table-optbar', align: 'center', width: 150 }
]]
, data: r.list
});
})
}
function sourceEdit(src) {
function onClose(idx) {
layer.close(idx);
}
function onSubmit(idx) {
let source = {
id: parseInt($('.v-source-edit').attr('srcid')),
priority: parseInt($('#v-source-priority').val()),
follow: typeof $('#v-vol-follow:checked').val() !== "undefined" ? 0 : 1,
vol: parseInt($('#v-source-vol').val()),
mixer: typeof $('#v-source-mixer:checked').val() !== "undefined" ? 1 : 0,
mixerVol: parseInt($('#v-source-mixer-vol').val())
}
httpPOST('system/source/update', source, function (r) {
layer.close(idx);
if (r.change === 1) {
layer.msg('音源属性修改成功', { icon: 1, time: 800 });
sourceRefresh()
} else {
layer.msg('音源属性未修改', { icon: 1, time: 800 });
}
})
}
layer.open({
type: 1 //Page层类型
, area: ['800px', '500px']
, title: '音源属性编辑'
, shade: 0.6 //遮罩透明度
, anim: 0 //0-6的动画形式,-1不开启
, btn: ['确认', '取消']
, closeBtn: 0
, btnAlign: 'c'
, moveType: 1 //拖拽模式,0或者1
, id: "source-edit"
, content: $('.v-source-edit')
, btn1: onSubmit
, btn2: onClose
, end: onClose
, success: function (layero) {
$('.v-source-edit').html($('#v-source-edit-html').html())
let s = '';
for (var i = 1; i <= 32; i++) {
s += '<option value="' + i + '">' + i + '</option>';
}
$('#v-source-priority').html(s);
s = '<option value="0">0</option>';
for (var i = 10; i <= 100; i += 5) {
s += '<option value="' + i + '">' + i + '</option>';
}
$('#v-source-vol').html(s);
$('.v-source-edit').attr('srcid', src.id);
$('#v-source-priority').val(src.priority);
if (src.follow === 0) $('#v-vol-follow').prop("checked", true);
else $('#v-vol-follow').prop("checked", false);
$('#source-name').val(src.name);
$('#v-source-vol').val(src.vol);
if (src.mixer === 1) $('#v-source-mixer').prop("checked", true);
else $('#v-source-mixer').prop("checked", false);
s = '<option value="-1">未设置</option>' + s;
$('#v-source-mixer-vol').html(s);
$('#v-source-mixer-vol').val(src.mixerVol);
layui.form.render();
}
});
}
function pingAddress() {
var address = $('#ping-address').val();
if (address.length === 0) {
layer.msg('请输入地址');
return;
}
var sockID = null;
$('#ping-out-text').text('connecting: ' + address);
autoHeight(document.getElementById("ping-out-text"));
if (typeof (parent.ws) !== 'undefined' && parent.ws !== null) {
sockID = parent.ws.sockID;
}
httpPOST('system/service/ping', { address: address, sockID: sockID });
}
function serverConfigRefresh(obj) {
$('#public-address').val(obj.publicAddres)
$('#system-language').val(obj.lang)
$('#audio-encode-type').val(obj.audioType)
$('#audio-quality-type').val(obj.audioQuality)
$('#audio-transport-type').val(obj.transportType)
}
function serverSyslogLevelRefresh(obj) {
if (obj === undefined || obj.savelog === undefined) return;
if (obj.savelog === 0) {
$('#system-logger-level').val(0);
} else {
$('#system-logger-level').val(obj.savelevel);
}
}
function localPortConfigRefresh(obj) {
$('#local-port-http').val(obj.http)
$('#local-port-ws').val(obj.ws)
$('#local-port-udp').val(obj.udp)
$('#local-port-audio').val(obj.audioStart + '-' + obj.audioEnd)
}
function natPortConfigRefresh(obj) {
$('#nat-port-http').val(obj.http)
$('#nat-port-ws').val(obj.ws)
$('#nat-port-udp').val(obj.udp)
$('#nat-port-audio').val(obj.audioStart + '-' + obj.audioEnd)
}
function getSyncName(s) {
switch (s) {
case 0: return '空闲';
case 1: return '初始化';
case 2: return '同步中';
case 3: return '下载数据';
case 4: return '同步完成';
case 5: return '同步失败';
}
return '未知';
}
function getSyncStateInfo(state) {
let str = getSyncName(state.gstate);
switch (state.gstate) {
case 1: break;
case 2:
if (state.indexState == 3) {
str += "," + state.dataNames[state.syncIndex] + " 下载进度(" + state.workers.downCnt + "/" + state.workers.totalCnt + ")";
} else {
str += "," + state.dataNames[state.syncIndex] + " (" + getSyncName(state.indexState) + ")";
}
break;
case 4: break;
case 5:
str += ", 当前: ";
str += state.dataNames[state.syncIndex] + "(" + getSyncName(state.indexState) + ")";
break;
}
return str;
}
function mssConfigRefresh(obj) {
$('#server-role').val(obj.role);
if (obj.role === 0) {
$('#master-server-address').val('');
$('#master-server-address').attr('disabled', true)
} else {
$('#master-server-address').val(obj.host);
$('#master-server-address').attr('disabled', false)
}
if (obj.connected === 1) {
$('#slave-server-state').val(obj.connected === 1 ? ("已连接(" + obj.connHost + ')') : "未连接")
if (obj.state.gstate !== undefined) {
$('#slave-server-sync-state').html(getSyncStateInfo(obj.state))
} else {
$('#slave-server-sync-state').html('无状态')
}
} else {
$('#slave-server-state').val("未连接")
$('#slave-server-sync-state').html("未连接")
}
layui.form.render();
}
function cascadeConfigRefresh(obj) {
}
function systemConfigGet(filters) {
let url = "system/config/list"
if (filters !== undefined) url = url + '?' + filters
httpGet(url, function (r) {
if (r.server !== undefined) {
serverConfigRefresh(r.server)
serverSyslogLevelRefresh(r.logger)
}
if (r.port !== undefined) {
localPortConfigRefresh(r.port)
}
if (r.natPort !== undefined) {
natPortConfigRefresh(r.natPort)
}
if (r.mss !== undefined) {
mssConfigRefresh(r.mss)
}
if (r.cascade !== undefined) {
cascadeConfigRefresh(r.cascade)
}
layui.form.render();
})
}
function getServerConfig() {
let server = {
publicAddres: $('#public-address').val(),
lang: parseInt($('#system-language').val()),
audioType: parseInt($('#audio-encode-type').val()),
audioQuality: parseInt($('#audio-quality-type').val()),
transportType: parseInt($('#audio-transport-type').val()),
}
let v = parseInt($('#system-logger-level').val());
let logger = {}
if (v === 0) {
logger['savelog'] = 0;
} else {
logger['savelog'] = 1;
if (v > 5 || v < 0) v = 4;
logger['savelevel'] = v;
}
if (isValidIP(server.publicAddres) === false || isNaN(server.lang)
|| isNaN(server.audioType) || isNaN(server.audioQuality) || isNaN(server.transportType)) {
layer.msg('数据无效', { icon: 2 });
return null;
}
return { server: server, logger: logger };
}
function getLocalPortConfig() {
let port = {
http: parseInt($('#local-port-http').val()),
ws: parseInt($('#local-port-ws').val()),
udp: parseInt($('#local-port-udp').val()),
}
const regex = /^(\d{1,5})-(\d{1,5})$/;
const match = regex.exec($('#local-port-audio').val());
if (match) {
port.audioStart = parseInt(match[1]);
port.audioEnd = parseInt(match[2]);
if (isValidRangePort(port.audioStart) === false
|| isValidRangePort(port.audioEnd) === false
|| port.audioEnd - port.audioStart < 100
) {
layer.msg('端口号无效', { icon: 2 });
return null;
}
} else {
layer.msg('端口号无效', { icon: 2 });
return null;
}
if (isNaN(port.http) || isNaN(port.ws) || isNaN(port.udp)) {
layer.msg('数据无效', { icon: 2 });
return null;
}
return { port: port };
}
function getNatPortConfig() {
let port = {
http: parseInt($('#nat-port-http').val()),
ws: parseInt($('#nat-port-ws').val()),
udp: parseInt($('#nat-port-udp').val()),
}
const regex = /^(\d{1,5})-(\d{1,5})$/;
const match = regex.exec($('#nat-port-audio').val());
if (match) {
port.audioStart = match[1];
port.audioEnd = match[2];
if (port.audioStart >= 0 && port.audioStart <= 65535 && port.audioEnd >= 0 && port.audioEnd <= 65535 && port.audioStart <= port.audioEnd) {
} else {
layer.msg('端口号无效', { icon: 2 });
return null;
}
} else {
layer.msg('端口号无效', { icon: 2 });
return null;
}
if (isNaN(port.http) || isNaN(port.ws) || isNaN(port.udp)) {
layer.msg('数据无效', { icon: 2 });
return null;
}
return { natPort: port };
}
function getMssConfig() {
let mss = {
role: parseInt($('#server-role').val()),
host: $('#master-server-address').val(),
}
if ((mss.host.length > 0 || mss.role !== 0) && !isValidAddress(mss.host)) {
layer.msg('服务器地址无效', { icon: 2 });
return null;
}
return { mss: mss };
}
function systemConfigSet(data, ok_todo) {
if (data === null) return;
layer.confirm('确认修改当前配置?', function () {
httpPOST('system/config/update', data, function (r) {
layer.msg('修改成功', { icon: 1 });
if (ok_todo) ok_todo();
})
});
}
function systemConfigRefresh() {
systemConfigGet();
$('.cfg-refresh').click(function (e) {
let dataType = $(this).attr('data-type');
switch (dataType) {
case 'server': systemConfigGet('server=1&logger=1'); break;
case 'local-port': systemConfigGet('port=1'); break;
case 'nat-port': systemConfigGet('natPort=1'); break;
case 'master-server': systemConfigGet('mss=1'); break;
}
})
$('.cfg-save').click(function (e) {
let dataType = $(this).attr('data-type');
switch (dataType) {
case 'server': systemConfigSet(getServerConfig(), function () { systemConfigGet('server=1&logger=1') }); break;
case 'local-port': systemConfigSet(getLocalPortConfig(), function () { systemConfigGet('port=1') }); break;
case 'nat-port': systemConfigSet(getNatPortConfig(), function () { systemConfigGet('natPort=1') }); break;
case 'master-server': systemConfigSet(getMssConfig(), function () { systemConfigGet('mss=1') }); break;
}
})
layui.form.on('select(server-role)', function (data) {
var elem = data.elem; // 获得 select 原始 DOM 对象
var value = parseInt(elem.value); // 获得被选中的值
if (value === 0) $('#master-server-address').attr('disabled', true)
else $('#master-server-address').attr('disabled', false)
});
}
function inputNumber(e) {
let v = e.value.replace(/\D/g, '')
if (parseInt(v) > 50) {
e.value = v.charAt(0);
} else {
e.value = v;
}
}
$(document).ready(function () {
systemStatusRefresh();
if (typeof (parent.ws) !== 'undefined' && parent.ws !== null) parent.ws.iframeCb['system/service/ping'] = function (rsp) {
var cur = $('#ping-out-text').text();
$('#ping-out-text').text(cur + rsp.content);
autoHeight(document.getElementById("ping-out-text"));
}
if (typeof (parent.ws) !== 'undefined' && parent.ws !== null) parent.ws.iframeCb['system/sync/refresh'] = function (rsp) {
$('#slave-server-sync-state').html(getSyncStateInfo(rsp))
}
device_type_list_update();
systemUpgradeInit();
layui.element.on('tab(docDemoTabBrief)', function (data) {
switch (data.index) {
case 0: systemStatusRefresh(); break;
case 1:
userListInit();
userListRefresh();
break;
case 2: systemNetworkRefresh(); break;
case 3: sourceRefresh(); break;
case 4: systemLogListRefresh(); break;
case 5: deviceLogListRefresh(); break;
case 6: otaListRefresh(); break;
case 7: resetDate(); break;
case 8: backupListRefresh(); break;
case 9: sysUpgradeVersionRefresh(); break;
case 10: systemConfigRefresh(); break;
case 11: remoteFixRefresh(); break;
}
});
layui.table.on('tool(source-list-table)', function (obj) {
var data = obj.data;
if (obj.event === 'edit') {
sourceEdit(data);
}
});
layui.table.on('toolbar(source-list-table)', function (obj) {
var data = obj.data;
if (obj.event === 'reset') {
layer.confirm('确定重置系统音源优先级配置?', function (idx) {
httpPOST('system/source/update', { factory: 1 }, function (r) {
layer.msg('重置成功', { icon: 1, time: 800 });
sourceRefresh();
})
layer.close(idx);
});
}
});
// $('#ping-address').on('input',
// function(){
// var remain = $(this).val();
// console.log(remain);
// }
// );
})帮我看一下为什么还是无法在浏览器显示表格?