var UI = { maxDeptDepth: 5, stepSize: 500, lockvalue: 0, listSize: 20, listOffset: function(pageNum) { pageNum = pageNum > 1 ? pageNum : 1; return (pageNum - 1) * this.listSize; }, listLimit: function() { return this.listSize; }, listTotalPage: function(totalSize) { var totalPage = 0; if (totalSize) { totalPage = Math.ceil(parseInt(totalSize) / this.listSize); } return totalPage; }, getValue: function(elem) { return C.trim(elem.val()); }, setTreeNav: function(nodes, name_key, container) { if (!container) { container = $('#tree-nav'); } if (!name_key) { name_key = 'domain_name'; } var html = ''; for (var i in nodes) { html += '
  • '; html += C.htmlEncode(nodes[i][name_key]) + '
  • '; } container.html(html); }, toggleTab: function(e) { if (e.target.tagName.toUpperCase() === 'A') { var $this = $(this); $this.parent().siblings().removeClass('active'); $this.parent().addClass('active'); var tab = $this.attr('data-tab-toggle'); UI.showTab(tab); return false; } }, showTab: function(tab) { $('[data-tab]').hide(); $('[data-tab="' + tab + '"]').show(); this.resetContainer($('[data-tab="' + tab + '"]')); }, showFrame: function(frame) { var frames = $('div.page'); frames.filter(':not([data-content="' + frame + '"])').hide(); frames.filter('[data-content="' + frame + '"]').show(); this.resetContainer(frames.filter('[data-content="' + frame + '"]')); }, resetContainer: function(container) { this.uncheckChecker(this.getChecker(container)); }, checkerHtml: function(value, status_class) { var html = '
    0) { // $('[data-target="' + targetContainer.attr('id') + '"]').find('.btn').removeClass('disabled'); // } else { // $('[data-target="' + targetContainer.attr('id') + '"]').find('.btn').addClass('disabled'); // } //dialog内 if (targetContainer.parents('div.modal').length && $('.tools-text').length) { if (valueLength > 0) { $('.tools-text').html('已选 : ' + valueLength + '', targetContainer.parents('div.modal'), 0); } else { $('.tools-text').html(''); } } }, tableCheckedValue: function(table, attrName) { var checked = this.getChecked(table), values = []; if (!attrName) { attrName = 'data-value'; } for (var i = 0, n = checked.length; i < n; i ++) { values.push(checked.eq(i).parents('tr').attr(attrName)); } return values; }, tableValue: function(table, attrName) { var checker = this.getChecker(table), values = []; if (!attrName) { attrName = 'data-value'; } for (var i = 0, n = checker.length; i < n; i ++) { values.push(checker.eq(i).parents('tr').attr(attrName)); } return values; }, tableCheckedTr: function(table) { var checked = this.getChecked(table); var checkedTrs = checked.parents('tr'); return checkedTrs; }, isChecker: function(elem) { if (elem.hasClass('checker')) { return true; } return false; }, isCheckerWrap: function(elem) { if (elem.hasClass('checker-wrap')) { return true; } return false; }, radioHtml: function(value, name) { var html = '
    '); parent.append(msgElem); } msgElem.html(msg); } }, itError: function(elem, msg) { if (elem.parents('div.text').length) { var parent = elem.parents('div.text').eq(0); } else { var parent = elem.parents('.field').eq(0); } UI.clearError(parent); elem.addClass('has-error'); if (msg) { var msgElem = parent.find('.feedback'); if (!msgElem.length) { msgElem = $('
    '); parent.append(msgElem); } msgElem.html(msg); } }, itWarning: function(elem, msg) { var parent = elem.parents('.field').eq(0); UI.clearError(parent); elem.addClass('has-warning'); if (msg) { var msgElem = parent.find('.feedback'); if (!msgElem.length) { msgElem = $('
    '); parent.append(msgElem); } msgElem.html(msg); } }, removeError: function(e) { if ($(this).parents('div.text').length) { var parent = $(this).parents('div.text').eq(0); } else { var parent = $(this).parents('.field').eq(0); } $(this).removeClass('has-error'); $(this).removeClass('has-warning'); parent.find('.feedback').remove(); }, clearError: function(container) { container.find('.has-error').removeClass('has-error'); container.find('.has-warning').removeClass('has-warning'); container.find('.feedback').remove(); }, resetForm: function(form) { form[0].reset(); }, setFocus: function(container){ var input = container.find('input[type!="file"][type!="submit"]'); var n = input.length; for (var i = 0; i < n; i ++) { if (input.eq(i).val() === '') { input.eq(i).focus(); break; } } if (n === 0) { container.find('textarea').eq(0).focus(); } }, setRightCursor: function(inputElem) { if (inputElem.length) { var value = trim(inputElem.val()); inputElem.focus(); inputElem.val(''); inputElem.val(value); } }, toolbarEvent: function(e) { var elem = $(e.target); var optype = elem.attr('data-optype'); if (optype) { if (elem.attr('data-event')) { var callback = UI.getCallback(elem.attr('data-event')); } else { var callback = UI.getCallback(elem.parents('[data-event]').attr('data-event')); } var target; var targetId = elem.parents('[data-target]').attr('data-target'); if (targetId) { target = $('#' + targetId); } else { target = elem.parents('.toolbar').next('.box').find('table'); } var values = UI.tableCheckedValue(target); if (!values.length) { UI.msg.error('未选择操作对象'); return; } callback(optype, values); } }, formEvent: function(e) { var elem = $(e.target); var eventType = elem.attr('data-event-type'); if (eventType) { if (elem.attr('data-form-event')) { var callback = UI.getCallback(elem.attr('data-form-event')); } else { var callback = UI.getCallback(elem.parents('[data-form-event]').attr('data-form-event')); } e.preventDefault(); callback(e, eventType); } }, getCallback: function(callbackStr) { var callbackLocation = callbackStr.split('-'), callback = window; for (var i in callbackLocation) { callback = callback[callbackLocation[i]]; } return callback; }, msgFormatter: function(msg1, msg2, url) { if (!msg1 || !msg2 || !url) { msg = C.htmlEncode('无数据'); } else { msg = '' + C.htmlEncode(msg1) + '' + '' + C.htmlEncode(msg2) + ''; return msg; } }, showEmptyMsg: function(table, msg) { if (!msg) { msg = '无数据'; } var div = table.siblings('.table-empty'); if (!div.length) { div = $('
    '); div.insertAfter(table); } div.html(msg); }, removeEmptyMsg: function(table) { table.siblings('.table-empty').remove(); }, setContainerHeight: function() { var container = $('.container').filter(':visible').eq(0); if (container.length) { container.height($(document).height() - container.offset().top - 40); } }, download: function(url, callback) { var frame = $('#frame1'); if (frame.length !== 0) { frame.remove(); } var html = ''; frame = $(html); frame.attr('src', url); frame.bind('load', function() { var msg = $('#frame1').contents().find('body').text(); if (callback !== undefined) { callback(msg); } }); $('body').append(frame); return false; }, htmlHighlight: function(str, keyword) { // case-insensitive highlighting if (keyword === '') { return C.htmlEncode(str); } var reg = new RegExp(keyword, 'i'); var html = ''; var index; while ((index = str.search(reg)) !== -1) { html += C.htmlEncode(str.substr(0, index)); html += '' + C.htmlEncode(str.substr(index, keyword.length)) + ''; str = str.substr(index + keyword.length); } html += C.htmlEncode(str); return html; }, dropItemSwitch: function(e, container) { if (e.keyCode == 38) { // up arrow var itemactive = $('.active:eq(0)', container); var prev = itemactive.prev('li'); itemactive.removeClass('active'); if (prev.length > 0){ prev.addClass('active'); } else { $('li', container).last().addClass('active'); } var targetElem = $(e.target); targetElem.val(targetElem.val()); // To prevent changing the cursor position in the search box e.cancelable = true; e.preventDefault(); } else if (e.keyCode == 40) { // down arrow var itemactive = $('.active:eq(0)', container); var next = itemactive.next('li'); itemactive.removeClass('active'); if (next.length > 0) { next.addClass('active'); } else { $('li:eq(0)', container).addClass('active'); } } }, togglePwdShow: function(e) { var $this = $(this); var input = $('#' + $this.attr('data-toggle-pwd')); // var input = $this.parents('.field').find('input:text'); // if (input.length == 0) { // input = $this.parents('.field').find('input:password'); // } var inputId = input.attr('id'); var cssClass = input.attr('class'); var maxlength = input.attr('maxlength'); var placeholder = input.attr('placeholder'); var autocomplete = input.attr('autocomplete'); var disabled = input.attr('disabled'); var readonly = input.attr('readonly'); var val = input.val(); var elem = null; // if ($this.attr('checked') == 'checked') { if (input.attr('type') === 'password') { elem = $(''); } else { elem = $(''); } elem.val(val).attr('id', inputId).addClass(cssClass).focus(UI.removeError); if (cssClass != undefined) { elem.addClass(cssClass); } if (maxlength != undefined) { elem.attr('maxlength', maxlength); } if (placeholder != undefined) { elem.attr('placeholder', placeholder); } if (autocomplete != undefined) { elem.attr('autocomplete', autocomplete); } if (disabled != undefined) { elem.attr('disabled', disabled); } if (readonly != undefined) { elem.attr('readonly', readonly); } elem.insertBefore(input); input.remove(); return true; }, deptDropTree: function(container, settings) { var data = []; if (settings && settings.data) { data = settings.data; delete settings.data; } else { data = AC.getMyDepts(); } settings = settings || {}; if (!settings.title) { settings.title = '按部门过滤'; } settings.keys = { value: 'id', name: 'deptname', }; if (typeof settings.callback !== 'undefined') { settings.callback.select = settings.callback; } var dropTree = UI.DropTree(container, data, settings); return dropTree; }, roleDropSelect: function(container, settings) { settings = settings || {}; if (!settings.title) { settings.title = '按角色过滤'; } settings.keys = { value: 'id', name: 'rolename' }; if (typeof settings.callback !== 'undefined') { settings.callback.select = settings.callback; } settings.enableCount = false; var data = []; if (settings && settings.data) { data = settings.data; delete settings.data; } else { data = AC.getMyRoles(); } var dropSelect = UI.DropSelect(container, data, settings); return dropSelect; }, assetGroupSelect: function(container, settings) { settings = settings || {}; if (!settings.title) { settings.title = '按主机组过滤'; } settings.keys = { value: 'id', name: 'groupname' }; if (typeof settings.callback !== 'undefined') { settings.callback.select = settings.callback; } settings.enableCount = false; var data = []; if (settings && settings.data) { data = settings.data; delete settings.data; } var dropSelect = UI.DropSelect(container, data, settings); return dropSelect; }, assetVpcSelect: function(container, settings) { settings = settings || {}; if (!settings.title) { settings.title = '按主机网络过滤'; } settings.keys = { value: 'id', name: 'vpcname' }; if (typeof settings.callback !== 'undefined') { settings.callback.select = settings.callback; } settings.enableCount = false; var data = []; if (settings && settings.data) { data = settings.data; delete settings.data; } else { data = AC.getMyVpcs(); } var dropSelect = UI.DropSelect(container, data, settings); return dropSelect; }, assetOsSelect: function(container, settings) { settings = settings || {}; settings.keys = { groupname: 'major', list: 'list', value: 'id', name: 'minor' }; if (typeof settings.callback !== 'undefined') { settings.callback.select = settings.callback; } var data = []; if (settings && settings.data) { data = settings.data; delete settings.data; } else { data = AC.getAssetOs(); } var dropGroupSelect = UI.DropGroupSelect(container, data, settings); return dropGroupSelect; }, aliNetworkSelect: function(container, settings) { settings = settings || {}; if (!settings.title) { settings.title = '按网络类型过滤'; } settings.keys = { value: 'value', name: 'name' }; if (typeof settings.callback !== 'undefined') { settings.callback.select = settings.callback; } settings.enableCount = false; var data = []; if (settings && settings.data) { data = settings.data; delete settings.data; } else { data = AC.getAliNetwork(); } var dropSelect = UI.DropSelect(container, data, settings); return dropSelect; }, aliRegionSelect: function(container, settings) { settings = settings || {}; if (!settings.title) { settings.title = '按区域过滤'; } settings.keys = { value: 'value', name: 'name' }; if (typeof settings.callback !== 'undefined') { settings.callback.select = settings.callback; } settings.enableCount = false; var data = []; if (settings && settings.data) { data = settings.data; delete settings.data; } var dropSelect = UI.DropSelect(container, data, settings); return dropSelect; }, aliZoneSelect: function(container, settings) { settings = settings || {}; if (!settings.title) { settings.title = '按可用区过滤'; } settings.keys = { value: 'value', name: 'name' }; if (typeof settings.callback !== 'undefined') { settings.callback.select = settings.callback; } settings.enableCount = false; var data = []; if (settings && settings.data) { data = settings.data; delete settings.data; } var dropSelect = UI.DropSelect(container, data, settings); return dropSelect; }, protSelect: function(container, settings) { settings = settings || {}; if (!settings.title) { settings.title = '按协议过滤'; } settings.keys = { value: 'id', name: 'prot' }; if (typeof settings.callback !== 'undefined') { settings.callback.select = settings.callback; } settings.enableCount = false; if (!settings.size) { settings.size = 'full'; } var includeSysdef = true; if (typeof settings.includeSysdef !== 'undefined') { includeSysdef = settings.includeSysdef; } // data var data = []; if (settings && settings.data) { data = settings.data; delete settings.data; } else if (settings && settings.protids) { var prots = AC.getAllProtocol(); for (var protid in prots) { for (var i in settings.protids) { if (String(protid) == String(settings.protids[i])) { data.push({id: protid, prot: prots[protid]}); break; } } } } else { if (includeSysdef) { var prots = AC.getAllProtocol(); } else { var prots = AC.getProtocol(); } for (var protid in prots) { data.push({id: protid, prot: prots[protid]}); } } var dropSelect = UI.DropSelect(container, data, settings); return dropSelect; }, appAccountSelect: function(container, settings) { settings = settings || {}; if (!settings.title) { settings.title = '按应用服务器帐户过滤'; } settings.keys = { value: 'id', name: 'acctname' }; if (typeof settings.callback !== 'undefined') { settings.callback.select = settings.callback; } settings.size = 'full'; settings.enableCount = false; settings.nameFormatter = function(row) { var html = C.htmlEncode(row.acctname) + '@' + C.htmlEncode(row.astname); return html; }; var data = []; if (settings && settings.data) { data = settings.data; delete settings.data; } else { data = AC.getObjectFromUrl('/index.php/common/server_accounts', null, [[], 0])[0]; } var dropSelect = UI.DropSelect(container, data, settings); return dropSelect; }, accountTypeSelect: function(container, settings) { settings = settings || {}; if (!settings.title) { settings.title = '按帐户类型过滤'; } settings.keys = { value: 'value', name: 'name' }; if (typeof settings.callback !== 'undefied') { settings.callback.select = settings.callback; } settings.enableCount = false; var data = []; if (settings && settings.data) { data = settings.data; delete settings.data; } else { data = AC.getAccountType(); } var dropSelect = UI.DropSelect(container, data, settings); return dropSelect; }, authtypeSelect: function(container, settings) { settings = settings || {}; if (!settings.title) { settings.title = '按认证类型过滤'; } settings.keys = { value: 'value', name: 'name' }; if (typeof settings.callback !== 'undefied') { settings.callback.select = settings.callback; } settings.enableCount = false; var data = []; if (settings && settings.data) { data = settings.data; delete settings.data; } else { data = AC.getAuthtypeData(); } var dropSelect = UI.DropSelect(container, data, settings); return dropSelect; }, authmodeSelect: function(container, settings) { settings = settings || {}; if (!settings.title) { settings.title = '按认证模式过滤'; } settings.keys = { value: 'value', name: 'name' }; if (typeof settings.callback !== 'undefined') { settings.callback.select = settings.callback; } settings.enableCount = false; var data = []; if (settings && settings.data) { data = settings.data; delete settings.data; } else { data = AC.getUserAuthMode(); } var dropSelect = UI.DropSelect(container, data, settings); return dropSelect; }, bindPagination: function() { var elem = $('[data-optype="pagination"]'); if (!elem.length) { return; } var curPage = Number(elem.find('[data-type="cur-page"]').text()); var totalPage = Number(elem.find('[data-type="total-page"]').text()); function goPage(pageNum) { pageNum = pageNum <= 0 ? 1 : pageNum; pageNum = pageNum > totalPage ? totalPage : pageNum; var url = C.urlParse(); url[1].page = pageNum; window.location.href = url[0][0] + '?' + C.queryStr(url[1]); } elem.find('[data-optype="first-page"]').click(function(){ goPage(1); }); elem.find('[data-optype="prev-page"]').click(function(){ var pageNum = curPage - 1; goPage(pageNum); }); elem.find('[data-optype="next-page"]').click(function(){ var pageNum = curPage + 1; goPage(pageNum); }); elem.find('[data-optype="last-page"]').click(function(){ goPage(totalPage); }); elem.find('form').submit(function() { var pageNum = $(this).find('input:text').val(); pageNum = parseInt(pageNum); if (isNaN(pageNum)) { alert('页码输入错误'); return false; } if (pageNum < 1) pageNum = 1; goPage(pageNum); // Hide the dropdown menu // $this.find('div.dropdown-toggle').click(); return false; }); }, subFormToggle: function() { $('*[data-subname]').each(function() { var subname = $(this).attr('data-subname'); if ($('[data-sub-form="' + subname + '"]').prop('checked')) { $(this).find('input').removeAttr('disabled'); } else { $(this).find('input').attr('disabled', 'disabled'); } }); }, dataEventBind: function(){ // Bind submit callback for forms $('form[data-callback]').unbind('submit').bind('submit', function(e) { var formData = C.parseForm($(this)), callback = UI.getCallback($(this).attr('data-callback')); callback(e, formData); return false; }).find('input').focus(UI.removeError); $('form[data-callback]').find('select').focus(UI.removeError); $('form[data-callback]').find('textarea').focus(UI.removeError); $('form[data-callback]').on('click', 'div.btn.dropdown-toggle', UI.removeError); // Bind other callback $('*[data-callback]').filter(':not(form)').unbind('click').bind('click', function(e){ var callback = UI.getCallback($(this).attr('data-callback')); callback(e); if (e.target.tagName.toUpperCase() == 'A') { e.preventDefault(); } }); $('form[data-form-event]').find('input').focus(UI.removeError); //Bind input select $('*[data-select]').unbind('change').on('change', function(e){ $("."+ $(this).attr('data-select')).hide(); $("."+ $(this).attr('data-select') +".is" + this.value).show() }); //Bind input select $('*[data-select-active]').unbind('change').on('change', function(e){ $("."+ $(this).attr('data-select-active')).attr('disabled', 'disabled'); $("."+ $(this).attr('data-select-active') +".is_a_" + this.value).removeAttr('disabled'); }); $('*[data-optype="clear-filter"]').click(function() { window.location.href = C.urlParse()[0][0]; }); $('*[data-focusout]').unbind('focusout').bind('focusout', function(e) { var callback = UI.getCallback($(this).attr('data-focusout')); var value = C.getValue($(this)); callback(e, value); }); $('*[data-sub-form]').bind('click', function() { UI.subFormToggle(); }); $('input[data-switch]').focus(function() { if ($(this).attr('data-switch') !== '') { if ($(this).prop('type') !== 'password') { $(this).prop('type', 'password').val(''); } } }) $('input[data-switch]').blur(function() { if ($(this).attr('data-switch') !== '') { if ($(this).val() == '') { $(this).prop('type', 'text').val($(this).attr('data-switch')); } } }) }, menuToggle: function() { var menus = $('.nav-primary').children('li'); var tog = menus.has('.nav-secondary').children('a'); tog.on('click', function(event) { event.preventDefault(); var $this = $(this); menus.not($this.parent('li')).removeClass('active').children('.nav-secondary').slideUp(200); $this.parent('li').toggleClass('active').children('.nav-secondary').slideToggle(200); }); }, formRequst: function(settings) { var method = settings.method === undefined ? 'POST' : settings.method; var action = settings.action === undefined ? '' : settings.action; var target = settings.target === undefined ? '_self' : settings.target; var inputs = ''; for (var i in settings.data) { inputs += ''; } if (method === 'POST') { inputs += ''; } var form = $('
    '); form.attr('method', method); form.attr('action', action); form.attr('target', target); form.html(inputs); $('body').append(form); form.submit(); form.remove() } }; $(document).ready(function() { UI.dataEventBind(); UI.menuToggle(); $(document).click(function(e) { var target = $(e.target); // handle checker click event if (UI.isChecker(target)) { UI.checkerClick(target); } if (UI.isCheckerWrap(target)) { UI.checkerClick(UI.getChecker(target)); } if (UI.isRadio(target)) { UI.radioClick(target); } }); $('div[data-event]').click(UI.toolbarEvent); $('form[data-form-event]').click(UI.formEvent); UI.bindPagination(); $('[data-optype="language-switch"]').click(function(e){ e.preventDefault(); // 阻止标签的默认行为 var val = $(this).attr('data-value'); C.setCookie('LANG', val); window.location.reload(); }); var msg = C.getCookie('msg1'); if (msg !== '') { msg = C.jsonDecode(msg); UI.msg.show(msg[0], msg[1]); C.delCookie('msg1', '/'); } //消息展示隐藏 $('.msg-trigger-open').click(function() { var msglist = $(this).attr('data-target'); $('.' + msglist).show(); $(this).hide(); $('.msg-trigger-close[data-target="' + msglist + '"]').show(); }); $('.msg-trigger-close').click(function() { var msglist = $(this).attr('data-target'); $('.' + msglist).hide(); $(this).hide(); $('.msg-trigger-open[data-target="' + msglist + '"]').show(); }); if (typeof login == 'undefined') { check_login_id = setInterval(function() { $.ajax({ url: '/index.php/extend/check_login', data: {t: Math.random()}, success: function(msg) { if (msg == -1) { DG.createComfirmDialog({ msg: '登录已失效,是否返回主界面重新登录?', submit: function() { document.location.href = '/index.php/login/login_redirect'; } }); clearInterval(check_login_id); } } }); }, 60000) } }); $(document).on('click.toggle.pwd', '*[data-toggle-pwd]', UI.togglePwdShow); $(document).on('click.toggle.tab', 'a[data-tab-toggle]', UI.toggleTab);