try { /** pjax相关 */ //超时3秒(可选) $.pjax.defaults.timeout = 3000; $.pjax.defaults.type = 'GET'; //存储容器id $.pjax.defaults.container = '#pjax-container'; //目标id $.pjax.defaults.fragment = '#pjax-container'; //最大缓存长度(可选) $.pjax.defaults.maxCacheLength = 0; $(document).pjax('a:not(a[target="_blank"])', { //存储容器id container: '#pjax-container', //目标id fragment: '#pjax-container' }); //ajax请求开始时执行 $(document).ajaxStart(function () { //启动进度条 NProgress.start(); }).ajaxStop(function () { //ajax请求结束后执行 //关闭进度条 NProgress.done(); }); } catch (e) { if (adminDebug) { console.log(e.message); } } $(document).on('pjax:timeout', function (event) { event.preventDefault(); }); $(document).on('pjax:send', function (xhr) { NProgress.start(); }); $(document).on('pjax:complete', function (xhr) { $('[data-toggle="tooltip"]').tooltip(); NProgress.done(); }); //列表页搜索pjax $(document).on('submit', '.searchForm', function (event) { $.pjax.submit(event, '#pjax-container'); }); //菜单搜索 $(function () { $('#sidebar-form').on('submit', function (e) { e.preventDefault(); }); $('.sidebar-menu li.active').data('lte.pushmenu.active', true); $('#search-input').on('keyup', function () { let term = $('#search-input').val().trim(); if (term.length === 0) { $('.sidebar-menu li').each(function () { $(this).show(0); $(this).removeClass('active'); if ($(this).data('lte.pushmenu.active')) { $(this).addClass('active'); } }); return; } $('.sidebar-menu li').each(function () { if ($(this).text().toLowerCase().indexOf(term.toLowerCase()) === -1) { $(this).hide(0); $(this).removeClass('pushmenu-search-found', false); if ($(this).is('.treeview')) { $(this).removeClass('active'); } } else { $(this).show(0); $(this).addClass('pushmenu-search-found'); if ($(this).is('.treeview')) { $(this).addClass('active'); } var parent = $(this).parents('li').first(); if (parent.is('.treeview')) { parent.show(0); } } if ($(this).is('.header')) { $(this).show(); } }); $('.sidebar-menu li.pushmenu-search-found.treeview').each(function () { $(this).find('.pushmenu-search-found').show(0); }); }); }); //点击菜单高亮 $(function () { $('.sidebar-menu li:not(.treeview) > a').on('click', function () { let $parent = $(this).parent().addClass('active'); $parent.siblings('.treeview.active').find('> a').trigger('click'); $parent.siblings().removeClass('active').find('li').removeClass('active'); }); $('[data-toggle="popover"]').popover(); }); // bootstrap提示 $(function () { $('[data-toggle="tooltip"]').tooltip(); }); /** 表单验证错误展示 */ $.validator.setDefaults({ errorElement: "span", errorClass: "help-block error", submitHandler: function (form) { formSubmit(form); return false; } }); /** 边栏菜单 */ try { $('.sidebar-menu').tree(); } catch (e) { if (adminDebug) { console.log(e.message); } } /* 清除搜索表单 */ function clearSearchForm() { let url_all = window.location.href; let arr = url_all.split('?'); let url = arr[0]; $.pjax({url: url, container: '#pjax-container'}); } $(function () { let $body = $('body'); /* 返回按钮 */ $body.on('click', '.BackButton', function (event) { event.preventDefault(); history.back(1); }); /* 刷新按钮 */ $body.on('click', '.ReloadButton', function (event) { event.preventDefault(); $.pjax.reload(); }); }); /*列表中单个选择和取消*/ function checkThis(obj) { let id = $(obj).attr('value'); if ($(obj).is(':checked')) { if ($.inArray(id, dataSelectIds) < 0) { dataSelectIds.push(id); } } else { if ($.inArray(id, dataSelectIds) > -1) { dataSelectIds.splice($.inArray(id, dataSelectIds), 1); } } let all_length = $("input[name='data-checkbox']").length; let checked_length = $("input[name='data-checkbox']:checked").length; if (all_length === checked_length) { $("#dataCheckAll").prop("checked", true); } else { $("#dataCheckAll").prop("checked", false); } console.log(dataSelectIds); } /*全部选择/取消*/ function checkAll(obj) { dataSelectIds = []; let all_check = $("input[name='data-checkbox']"); if ($(obj).is(':checked')) { all_check.prop("checked", true); $(all_check).each(function () { dataSelectIds.push(this.value); }); } else { all_check.prop("checked", false); } } /** * 表单提交 */ function formSubmit(form, successCallback, failCallback, errorCallback, showMsg = true) { let loadT = layer.msg('正在提交,请稍候…', {icon: 16, time: 0, shade: [0.3, "#000"], scrollbar: false,}); let action = $(form).attr('action'); let method = $(form).attr('method'); let data = new FormData($(form)[0]); if (adminDebug) { console.log('%cajax submit start!', ';color:#333333'); console.log('action:' + action); console.log('method:' + method); console.log('data:' + data); } $.ajax({ url: action, dataType: 'json', type: method, data: data, contentType: false, processData: false, success: function (result) { layer.close(loadT); if (showMsg) { layer.msg(result.msg, { icon: result.code ? 1 : 2, scrollbar: false, }); } // 调试信息 if (adminDebug) { console.log('submit success!'); result.code === 1 ? console.log('%cresult success', ';color:#00a65a') : console.log('%cresult fail', ';color:#f39c12'); } if(result.code === 1){ if (successCallback) { successCallback(result); } else { goUrl(result.url); } }else{ if (failCallback) { failCallback(result); } else { goUrl(result.url); } } }, error: function (xhr, type, errorThrown) { layer.close(loadT); //异常处理; if (adminDebug) { console.log('%csubmit fail!', ';color:#dd4b39'); console.log(); console.log("type:" + type + ",readyState:" + xhr.readyState + ",status:" + xhr.status); console.log("url:" + action); console.log("data:" + data); } if(showMsg){ layer.msg('访问错误,代码' + xhr.status, {icon: 2, scrollbar: false,}); } if(errorCallback){ errorCallback(xhr) } } } ); return false; } /** 跳转到指定url */ function goUrl(url = 1) { console.log(url); //清除列表页选择的ID if (url !== 'url://current' && url !== 1) { dataSelectIds = []; } if (url === 'url://current' || url === 1) { console.log('Stay current page.'); } else if (url === 'url://reload' || url === 2) { console.log('Reload current page.'); $.pjax.reload(); } else if (url === 'url://back' || url === 3) { console.log('Return to the last page.'); history.back(1); } else if (url === 4 || url === 'url://close-refresh') { console.log('Close this layer page and refresh parent page.'); let indexWindow = parent.layer.getFrameIndex(window.name); //先刷新父级页面 parent.goUrl(2); //再关闭当前layer弹窗 parent.layer.close(indexWindow); } else if (url === 5 || url === 'url://close-layer') { console.log('Close this layer page.'); let indexWindow = parent.layer.getFrameIndex(window.name); parent.layer.close(indexWindow); } else { console.log('Go to ' + url); try { $.pjax({ url: url, container: '#pjax-container' }); } catch (e) { window.location.href = url; } } } /** * ajax访问按钮 * 例如元素为 * data-confirm为是否弹出提示,1为是,2为否。比如删除某条数据,data-confirm="1"就会弹出来提示 * data-type为访问方式,1为直接ajax访问,例如删除操作。2是为打开layer窗口展示数据,例如查看操作日志详情 * data-url为要访问的url * data-id为要操作的数据ID,可以填写正常的数据ID,例如data-id="2", * 或者填写checked表示获取当前数据列表选择的ID,也就是取的变量dataSelectIds的值 * data-go为操作完成后的跳转url,不设置此参数默认根据后台返回的url跳转 * data-confirm-title为确认提示弹窗的标题 例如data-confirm-title="删除警告" * data-confirm-content为确认提示的内容 例如data-confirm-content="您确定要删除此数据吗?" * data-title 窗口显示的标题 * */ $(function () { $('body').on('click', '.AjaxButton', function (event) { event.preventDefault(); if (adminDebug) { console.log('AjaxButton clicked.'); } //是否弹出提示 let layerConfirm = $(this).data("confirm") || 1; //访问方式,1为直接访问,2为layer窗口显示 let layerType = parseInt($(this).data("type") || 1); //访问的url let url = $(this).data("url"); //访问方式,默认post let layerMethod = $(this).data("method") || 'post'; //访问成功后跳转的页面,不设置此参数默认根据后台返回的url跳转 let go = $(this).data("go") || 'url://reload'; //当为窗口显示时可定义宽度和高度 let layerWith = $(this).data("width") || '80%'; let layerHeight = $(this).data("height") || '60%'; //窗口的标题 let layerTitle = $(this).data('title'); //当前操作数据的ID let dataId = $(this).data("id"); let dataData; //如果没有定义ID去查询data-data属性 if (dataId === undefined) { dataData = $(this).data("data") || {}; } else { if (dataId === 'checked') { if (dataSelectIds.length === 0) { layer.msg('请选择要操作的数据', {icon: 2, scrollbar: false,}); return false; } dataId = dataSelectIds; } dataData = {"id": dataId}; } if (typeof (dataData) != 'object') { dataData = JSON.parse(dataData); } /*需要确认操作*/ if (parseInt(layerConfirm) === 1) { //提示窗口的标题 let confirmTitle = $(this).data("confirmTitle") || '操作确认'; //提示窗口的内容 let confirmContent = $(this).data("confirmContent") || '您确定要执行此操作吗?'; layer.confirm(confirmContent, {title: confirmTitle, closeBtn: 1, icon: 3}, function () { //如果为直接访问 if (layerType === 1) { ajaxRequest(url, layerMethod, dataData, go); } else if (layerType === 2) { //如果为打开窗口 //先进行权限查询 if (checkAuth(url)) { layer.open({ type: 1, area: [layerWith, layerHeight], title: layerTitle, closeBtn: 1, shift: 0, content: url + "?request_type=layer_open&" + parseParam(dataData), scrollbar: false, }); } } }); } else { //不需要操作确认 if (layerType === 1) { //直接请求 ajaxRequest(url, layerMethod, dataData, go); } else if (layerType === 2) { //弹出窗口 //检查权限 if (checkAuth(url)) { //用窗口打开 layer.open({ type: 2, area: [layerWith, layerHeight], title: layerTitle, closeBtn: 1, shift: 0, content: url + "?request_type=layer_open&" + parseParam(dataData), scrollbar: false, }); } } } }); }); //ajax请求封装 /** * * @param url 访问的url * @param method 访问方式 * @param data data数据 * @param go 要跳转的url */ function ajaxRequest(url, method, data, go) { let loadT = layer.msg('正在请求,请稍候…', {icon: 16, time: 0, shade: [0.3, '#000'], scrollbar: false,}); $.ajax({ url: url, dataType: 'json', type: method, data: data, success: function (result) { layer.close(loadT); layer.msg(result.msg, { icon: result.code ? 1 : 2, scrollbar: false, }); if (adminDebug) { console.log('request success!'); if (result.code === 1) { console.log('%cresult success', ';color:#00a65a'); } else { go = 'url://current'; console.log('%cresult fail', ';color:#f39c12'); } } goUrl(go); }, error: function (xhr, type, errorThrown) { //异常处理; if (adminDebug) { console.log('%crequest fail!', ';color:#dd4b39'); console.log(); console.log("type:" + type + ",readyState:" + xhr.readyState + ",status:" + xhr.status); console.log("url:" + url); console.log("data:"); console.log(data); layer.close(loadT); } layer.msg('访问错误,代码' + xhr.status, {icon: 2, scrollbar: false,}); } } ); } //改变每页数量 function changePerPage(obj) { if (adminDebug) { console.log('当前每页数量' + Cookies.get(cookiePrefix + 'admin_per_page')); } Cookies.set(cookiePrefix + 'admin_per_page', obj.value, {expires: 30}); $.pjax.reload(); } /** * 检查授权 */ function checkAuth(url) { let hasAuth = false; let loadT = layer.msg('正在请求,请稍候…', {icon: 16, time: 0, shade: [0.3, '#000'], scrollbar: false,}); $.post({ url: url, data: {"check_auth": 1}, dataType: 'json', async: false, success: function (result) { layer.close(loadT); if (result.code === 1) { hasAuth = true; } else { layer.msg(result.msg, { icon: 2, scrollbar: false, }); } }, error: function (xhr, type, errorThrown) { layer.msg('访问错误,代码' + xhr.status, {icon: 2, scrollbar: false,}); } }); return hasAuth; } /** 处理url参数 **/ function parseParam(param, key) { let paramStr = ""; if (param instanceof String || param instanceof Number || param instanceof Boolean) { paramStr += "&" + key + "=" + encodeURIComponent(param); } else { $.each(param, function (i) { let k = key == null ? i : key + (param instanceof Array ? "[" + i + "]" : "." + i); paramStr += '&' + parseParam(this, k); }); } return paramStr.substr(1); } /** 导出excel **/ function exportData(url) { let exportUrl = url || 'index.html'; let openUrl = exportUrl + '?export_data=1&' + $("#searchForm").serialize(); window.open(openUrl); }