让Layer.tab每次点击都进行刷新

本文描述了一个使用层对象和iframe实现的用户界面,针对角色进行菜单授权树的增删改查操作,通过AJAX动态更新URL参数以保持数据新鲜度。
   var tabs = [{
        title: "新增",
        content: "<iframe src='route/role/menu-auth-tree?businessType=save&roleId=" + data.roleId + "' width='100%' height='500px' frameborder='0'></iframe>"
    },{
        title: "删除",
        content: "<iframe src='route/role/menu-auth-tree?businessType=delete&roleId=" + data.roleId + "' width='100%' height='500px' frameborder='0'></iframe>"
    },{
        title: "修改",
        content: "<iframe src='route/role/menu-auth-tree?businessType=update&roleId=" + data.roleId + "' width='100%' height='500px' frameborder='0'></iframe>"
    },
    {
        title: "查看",
        content: "<iframe src='route/role/menu-auth-tree?businessType=query&roleId=" + data.roleId + "' width='100%' height='500px' frameborder='0'></iframe>"
    }];
    top.layer.tab({
        area: ['600px','80%'],
        tab: tabs,
        scrollbar: true,
        maxmin: false,// 最大最小化
        anim: 1,// 弹出方式1-6
        end:function() {// cancel执行完毕后执行
        },
        cancel: function (layero, index) {// 关闭按钮后执行
        },success: function (layero, index) {
            $(layero).find('.layui-layer-title').find("span").each(function(i,domEle){
                $(domEle).click(function() {
                    var urlSrc = $(layero).find('li').eq(i).find('iframe').attr('urlSrc');
                    var src = $(layero).find('li').eq(i).find('iframe').attr('src');
                    var name = $(layero).find('li').eq(i).find('iframe').attr('name');
                    // urlSrc不存在的时候
                    var time = new Date().getTime();
                    if(!urlSrc) {
                        $(layero).find('li').eq(i).find('iframe').attr('src', src+"&time="+time);
                        $(layero).find('li').eq(i).find('iframe').attr('urlSrc', src);
                    }else {
                        $(layero).find('li').eq(i).find('iframe').attr('src', urlSrc+"&time="+time);
                    }
                });
            });
        },error:function (layero, index) {
        },
        change:function(index) {
        }
    });

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); // } // ); })帮我看一下为什么还是无法在浏览器显示表格?
10-22
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> <title>后台管理</title> <link rel="shortcut icon" href="https://ceepsp-1251007425.cos.ap-shanghai.myqcloud.com/20220609113851230946420220609113851"> <link rel="stylesheet" href="{$Think.config.homepagenoindex}public/layui/css/layui.css" media="all" /> <link rel="stylesheet" href="{$Think.config.homepagenoindex}public/css/admin.css" media="all" /> <link rel="stylesheet" href="{$Think.config.homepagenoindex}public/iconfont/iconfont.css" media="all" /> <script type="text/javascript" src="{$Think.config.homepagenoindex}public/js/jquery-1.12.4-min.js"></script> <script type="text/javascript" src="{$Think.config.homepagenoindex}public/js/shuiyin.js"></script> <script type="text/javascript" src="{$Think.config.homepagenoindex}public/layui/layui.js"></script> <script src="{$Think.config.homepagenoindex}public/js/cos-js-sdk-v5.min.js"></script> <style> ol li a { background-color: rgba(0, 0, 0, 1) !important; } .three_this { background-color: #ebba92 !important; } .layui-form { margin-top: 15px !important; } /* 关键修改:无下级菜单靠左样式 + 覆盖Layui默认缩进 */ .menu-type1 { padding-left: 20px !important; } .menu-type1 a { padding-left: 20px !important; margin-left: 0 !important; } .layui-nav-tree .layui-nav-child a { padding-left: 20px !important; } .layui-nav-tree { padding-left: 0 !important; } /* 新增:Tab容器样式,填满右侧区域 */ .layui-tab-admin { position: absolute; top: 60px; right: 0; bottom: 0; left: 200px; margin: 0; box-sizing: border-box; } .layui-tab-content-admin { height: calc(100% - 40px); padding: 0; } .layui-tab-item-admin { height: 100%; overflow: hidden; } .layui-tab-item-admin iframe { width: 100%; height: 100%; border: none; } </style> <!-- 定义全局变量,供JS使用 --> <script> var currentAction = "{$(string)request()->action()}"; var homePage = "{$Think.config.homepage}"; var homePageNoIndex = "{$Think.config.homepagenoindex}"; </script> </head> <body class="layui-layout-body"> <div id="LAY_app" class="layadmin-tabspage-none"> <div class="layui-layout layui-layout-admin"> <div class="layui-header"> <!-- 头部区域(保留原有代码) --> <ul class="layui-nav layui-layout-left"> <li class="layui-nav-item layui-hide-xs" lay-unselect=""> <a href="" target="_blank" title="前台"> <i class="layui-icon layui-icon-website"></i> </a> </li> <li class="layui-nav-item"> <a href=""> <i class="layui-icon layui-icon-notice"></i> </a> </li> </ul> <ul class="layui-nav layui-layout-right"> <li class="layui-nav-item"> <a href="javascript:void(0);" class="phone">{$Think.session.loupan.name}-{$Think.session.loupan.phone}</a> <dl class="layui-nav-child layui-anim layui-anim-upbit"> <dd><a href="javascript:open1();">修改密码</a></dd> <hr> <dd><a href="javascript:logout();">退    出</a></dd> </dl> </li> </ul> </div> <div class="layui-side layui-side-menu"> <div class="layui-side-scroll"> <div class="layui-logo" lay-href=""> <span>后台管理</span> </div> <!-- 菜单容器:清空原有静态内容,仅保留空的UL --> <ul class="layui-nav layui-nav-tree ul00" lay-filter="test"></ul> </div> </div> <!-- 关键修改:替换原{__CONTENT__}为Layui选项卡容器 --> <div class="layui-tab layui-tab-card layui-tab-admin" lay-filter="adminTab"> <ul class="layui-tab-title"></ul> <div class="layui-tab-content layui-tab-content-admin"> </div> </div> </div> </div> <script> // 全局存储Layui的element和layer对象 var element, layer; /** * 动态渲染左侧菜单(适配新接口返回结构) */ function list() { $.ajax({ type: 'post', url: homePage + "Admin/juese/juese", dataType: "json", success: function (res) { if (res.code !== 0) { layer.msg(res.msg || '菜单加载失败', {icon: 2}); return; } var menuList = res.menuList || []; if (menuList.length === 0) { layer.msg('暂无可用菜单', {icon: 0}); return; } var $menuContainer = $('.ul00'); $menuContainer.empty(); // 遍历菜单数据,分类型渲染 menuList.forEach(menu => { if (menu.type === 1) { renderType1Menu($menuContainer, menu); } else if (menu.type === 2) { renderType2Menu($menuContainer, menu); } }); // 重新渲染Layui导航组件 element.render('nav'); }, error: function (xhr, status, error) { console.error('菜单加载失败:', error); layer.msg('菜单加载失败,请刷新页面', {icon: 2}); } }); } /** * 渲染类型1菜单(无子集)- 移除href跳转,添加自定义属性 * @param $container 父容器 * @param menu 菜单数据 */ function renderType1Menu($container, menu) { var menuAction = menu.url.split('/').pop(); var isActive = menuAction === currentAction ? 'layui-this' : ''; // 关键修改:href改为javascript:void(0),添加data-url/data-title存储跳转信息 var menuHtml = ` <li id="${menu.id}" class="layui-nav-item ${isActive} menu-type1"> <a href="javascript:void(0);" data-url="${homePage + menu.url}" data-title="${menu.name}"> <i class="layui-icon "></i><cite>${menu.name}</cite> </a> </li> `; $container.append(menuHtml); } /** * 渲染类型2菜单(有子集)- 同样移除href跳转 * @param $container 父容器 * @param menu 菜单数据 */ function renderType2Menu($container, menu) { var childActions = (menu.data || []).map(item => item.url.split('/').pop()); var isExpanded = childActions.includes(currentAction) ? 'layui-nav-itemed' : ''; var childMenuHtml = ''; (menu.data || []).forEach(child => { var childAction = child.url.split('/').pop(); var isChildActive = childAction === currentAction ? 'layui-this' : ''; // 关键修改:子菜单同样添加自定义属性 childMenuHtml += ` <dl class="layui-nav-child"> <dd class="${isChildActive}"> <a href="javascript:void(0);" data-url="${homePage + child.url}" data-title="${child.name}"> <i class="layui-icon "></i><cite style="margin-left: 20px">${child.name}</cite> </a> </dd> </dl> `; }); var menuHtml = ` <li id="${menu.id}" class="layui-nav-item ${isExpanded}"> <a href="javascript:void(0);"> <i class="layui-icon layui-icon-release"></i><cite>${menu.name}</cite> </a> ${childMenuHtml} </li> `; $container.append(menuHtml); } /** * 新增:添加/切换Tab面板 * @param title Tab标题 * @param url 页面链接 * @param id Tab唯一标识(默认用url的哈希值) */ function addTab(title, url, id) { // 生成唯一ID(避免重复) var tabId = id || 'tab_' + url.replace(/\//g, '_').replace(/\:/g, '_'); // 判断Tab是否已存在 if ($('.layui-tab-title li[lay-id="' + tabId + '"]').length > 0) { // 存在则切换Tab element.tabChange('adminTab', tabId); } else { // 不存在则新增Tab element.tabAdd('adminTab', { title: title, content: `<div class="layui-tab-item-admin"><iframe src="${url}"></iframe></div>`, id: tabId }); // 切换到新Tab element.tabChange('adminTab', tabId); } } // 初始化Layui组件 layui.use(['element', 'layer'], function () { element = layui.element; layer = layui.layer; // 关键修改:菜单点击事件委托(动态生成的菜单需用事件委托) $('.ul00').on('click', 'a[data-url]', function (e) { // 阻止默认跳转行为 e.preventDefault(); // 获取自定义属性中的标题和链接 var title = $(this).data('title'); var url = $(this).data('url'); // 添加/切换Tab addTab(title, url); }); // 原有事件绑定逻辑保留 $(".menu_three").on("click", function () { $(this).next().toggle(); }); $("ol").on("click", "li a", function () { $.each($(this).parent().siblings(), function (i, e) { $(e).find("a").removeClass('three_this') }); $(this).addClass('three_this'); }); // 加载并渲染菜单 list(); }); // 窗口大小调整逻辑(保留原有) $(window).resize(function () { if (document.body.clientWidth < 1200) { window.resizeTo(document.body.clientWidth); } }()); // 退出登录逻辑(保留原有) function logout() { $.ajax({ type: 'post', url: homePage + "Admin/login/logout", dataType: "json", success: function (data) { layer.msg(data.msg, { time: 2000 }, function () { if (data.code == '0') { window.location.href = homePage + "Admin/login/index"; } else { window.location.reload(); } }); }, }) } // 修改密码逻辑(保留原有) function open1() { layer.open({ type: 2, content: [homePage + "Admin/login/editpass", 'no'], area: ['500px', '300px'], btn: ['确定', '取消'], yes: function (index, layero) { var res = window["layui-layer-iframe" + index].callbackdata(); $.ajax({ type: 'post', url: homePage + "Admin/login/editpassword", data: { id: "{$Think.session.loupan.uid}", oldpass: res.oldpass, newpass: res.newpass, repass: res.repass }, dataType: "json", success: function (data) { layer.msg(data.msg, { time: 2000 }, function () { if (data.code == 0) { layer.close(index); } }); }, }) } }); } </script> </body> </html> 解决点击左侧菜单栏页面整体刷新 不要重新渲染左侧菜单栏选择的时候
最新发布
11-27
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值