ThinkAdmin/public/static/plugs/jquery/jquery.admin.js
2017-02-10 01:23:47 -05:00

474 lines
19 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* global layer, ZeroClipboard, Pace */
(function ($) {
/*!
* jQuery placeholder, fix for IE6,7,8,9
*/
var JPlaceHolder = {
_check: function () {
return 'placeholder' in document.createElement('input');
},
init: function () {
!this._check() && this.fix();
},
fix: function () {
$(':input[placeholder]').map(function () {
var self = $(this), txt = self.attr('placeholder');
self.wrap($('<div></div>').css({position: 'relative', zoom: '1', border: 'none', background: 'none', padding: 'none', margin: 'none'}));
var pos = self.position(), h = self.outerHeight(true), paddingleft = self.css('padding-left');
var holder = $('<span></span>').text(txt).css({position: 'absolute', left: pos.left, top: pos.top, height: h, lineHeight: h + 'px', paddingLeft: paddingleft, color: '#aaa'}).appendTo(self.parent());
self.on('focusin focusout change keyup', function () {
self.val() ? holder.hide() : holder.show();
});
holder.click(function () {
self.get(0).focus();
});
self.val() && holder.hide();
});
}
};
JPlaceHolder.init();
/**
* 定义消息处理构造方法
* @returns {common_L11._msg}
*/
function msg() {
this.version = '2.0';
this.shade = [0.01, '#0f0'];
}
/**
* 关闭消息框
*/
msg.prototype.close = function () {
return layer.close(this.index);
};
/**
* 弹出警告消息框
* @param {type} msg
* @param {type} callback
* @returns {undefined}
*/
msg.prototype.alert = function (msg, callback) {
layer.close(this.index);
return this.index = layer.alert(msg, {
end: callback,
scrollbar: false
});
};
/**
* 确认对话框
* @param {type} msg 提示消息内容
* @param {type} ok 确认的回调函数
* @param {type} no 取消的回调函数
* @returns {undefined}
*/
msg.prototype.confirm = function (msg, ok, no) {
layer.close(this.index);
return this.index = layer.confirm(msg, {
btn: ['确认', '取消']
}, ok, no);
};
/**
* 显示成功类型的消息
* @param {type} msg 消息内容
* @param {type} time 延迟关闭时间
* @param {type} callback 回调函数
*/
msg.prototype.success = function (msg, time, callback) {
layer.close(this.index);
return this.index = layer.msg(msg, {icon: 1, shade: this.shade, scrollbar: false, end: callback, time: (time || 2) * 1000});
};
/**
* 显示失败类型的消息
* @param {type} msg 消息内容
* @param {type} time 延迟关闭时间
* @param {type} callback 回调函数
*/
msg.prototype.error = function (msg, time, callback) {
layer.close(this.index);
return this.index = layer.msg(msg, {icon: 2, shade: this.shade, scrollbar: false, time: (time || 3) * 1000, end: callback});
};
/**
* 状态消息提示
* @param {type} msg
* @param {type} time
* @param {type} callback
* @returns {unresolved}
*/
msg.prototype.tips = function (msg, time, callback) {
layer.close(this.index);
return layer.msg(msg, {time: (time || 3) * 1000, shade: this.shade, end: callback});
};
/**
* 显示正在加载中的提示
* @param {type} msg 提示内容
* @param {type} callback 回调方法
*/
msg.prototype.loading = function (msg, callback) {
layer.close(this.index);
if (msg) {
return this.index = layer.msg(msg, {icon: 16, scrollbar: false, shade: this.shade, time: 0, end: callback});
}
return this.index = layer.load(2, {time: 0, scrollbar: false, shade: this.shade, end: callback});
};
/**
* 自动处理显示Think返回的Json数据
* @param {type} data JSON数据对象
* @param {type} time 延迟关闭时间
*/
msg.prototype.auto = function (data, time) {
if (data.code === 'SUCCESS') {
$.msg.success(data.info, time, function () {
if (data.referer === 'back') {
window.history.back();
} else if (data.referer === 'reload') {
$.form.reload();
} else if (data.referer) {
window.location.href = data.referer;
} else {
$.form.reload();
}
});
} else {
$.msg.error(data.info, 3, function () {
if (data.code === 'FAILD_LOGIN') {
if (data.referer.indexOf('http') === 0) {
window.location.href = data.referer;
}
}
});
}
};
/**
* 将消息对象挂载到Jq
*/
$.msg = new msg();
/**
* 表单构造函数
* @returns {common_L11._form}
*/
function _form() {
this.version = '2.0';
this._model = null;
this.errMsg = '{status}服务器繁忙,请稍候再试!';
}
/**
* 异步加载的数据
* @param {type} url 请求的地址
* @param {json|form|$form} data 额外请求数据
* @param {type} type 提交的类型 GET|POST
* @param {type} callback 成功后的回调方法
* @param {type} loading 是否显示加载层
* @param {type} tips 提示消息
* @param {type} time 消息提示时间
*/
_form.prototype.load = function (url, data, type, callback, loading, tips, time) {
var self = this;
if (loading !== false) {
var index = $.msg.loading(tips);
}
var send_data = data;
if (typeof data === 'object' && data.tagName === 'FORM') {
send_data = $(data).serialize();
}
Pace && Pace.restart();
$.ajax({
type: type || 'GET',
url: url,
data: send_data || {},
statusCode: {
404: function () {
$.msg.tips(self.errMsg.replace('{status}', 'E404 - '));
},
500: function () {
$.msg.tips(self.errMsg.replace('{status}', 'E500 - '));
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
$.msg.tips(self.errMsg.replace('{status}', 'E' + textStatus + ' - '));
},
success: function (res) {
if (loading !== false) {
$.msg.close(index);
}
if (typeof callback === 'function' && callback.call(self, res) === false) {
return false;
}
if (typeof (res) === 'object') {
return $.msg.auto(res, time);
}
if (res.indexOf('A PHP Error was encountered') !== -1) {
return $.msg.tips(self.errMsg.replace('{status}', 'E505 - '));
}
self.show(res);
}
});
};
/**
* 加载HTML到目标位置
* @param {type} url
* @param {type} data
* @param {type} target
* @param {type} callback
* @param {type} loading
* @param {type} tips
* @returns {undefined}
*/
_form.prototype.open = function (url, data, target, callback, loading, tips) {
data && (typeof (data) === 'object') && (data = $.param(data));
data && (url += (url.indexOf('?') === -1 ? '?' : '&') + data);
this.load(url, data, 'GET', function (res) {
if (typeof (res) === 'object') {
return $.msg.auto(res);
}
var $container = $('.layer-main-container').html(res);
if (url !== $container.attr('data-location')) {
$container.attr('data-backurl', $container.attr('data-location')).attr('data-location', url);
}
function reinit() {
$.validate.listen.call(this);
$('[data-copy]').map(function () {
var client = new ZeroClipboard(this);
client.on("ready", function () {
client.on("copy", function (event) {
event.clipboardData.setData("text/plain", event.target.getAttribute('data-copy'));
});
client.on("aftercopy", function () {
$.msg.tips('内容复制成功!');
});
});
});
JPlaceHolder.init();
/* 自动给必填字符加上样式 @zoujingli @by 2016-05-11 */
$container.find('[required]').parent().prevAll('label').addClass('label-required');
}
reinit.call(this), setTimeout(reinit, 500), setTimeout(reinit, 1000);
return (typeof callback === 'function') && callback.call(this);
}, loading, tips);
};
/**
* 显示HTML到中主内容区
* @param {type} html
* @returns {undefined}
*/
_form.prototype.show = function (html) {
var $container = $('.layer-main-container').html(html);
function reinit() {
$.validate.listen.call(this);
$container.find('h3').addClass('animated fadeIn container-animated');
}
reinit.call(this), setTimeout(reinit, 500), setTimeout(reinit, 1000);
};
/**
* 打开一个iframe窗口
* @param {type} url
* @returns {unresolved}
*/
_form.prototype.iframe = function (url, title) {
return layer.open({title: title || '窗口', type: 2, area: ['800px', '530px'], fix: true, maxmin: false, content: url});
};
/**
* 关闭FORM框
* @returns {undefined}
*/
_form.prototype.close = function () {
return $(this._modal).modal('hide');
};
/*刷新当前页面*/
_form.prototype.reload = function () {
window.onhashchange.call(this);
};
/*!表单实例挂载*/
$.form = new _form();
/** URL转URI */
function _parse_uri(url, obj) {
url = url.indexOf(window.location.hostname) !== -1 ? url.split(window.location.hostname)[1] : url;
url = url.replace(/spm=[\d\-m]+/ig, '');
if (obj && (node = obj.getAttribute('data-menu-node'))) {
url += ((url.indexOf('?') === -1 ? '?' : '&') + 'spm=' + node);
} else {
window.location.href.replace(/spm=([\d\-m]+)/ig, function (str, node) {
url += ((url.indexOf('?') === -1 ? '?' : '&') + 'spm=' + node);
});
}
return url;
}
/** 事件委派 */
$('body').on('click', '[data-load]', function () {
$.form.load($(this).attr('data-load'), {}, 'GET', null, true, $(this).attr('data-tips'));
}).on('click', '[data-open]', function () {
var url = $(this).attr('data-open');
window.location.href = '#' + _parse_uri(url, this);
}).on('click', 'a[data-page-href]', function () {
window.location.href = '#' + _parse_uri(this.href, this);
}).on('submit', 'form[data-form-href]', function () {
return $.form.open(this.action, $(this).serialize(), 'main'), false;
}).on('click', '[data-back]', function () {
window.history.back();
}).on('click', '[data-reload]', function () {
$.form.reload();
}).on('click', '[data-check-target]', function () {
var checked = !!this.checked;
$($(this).attr('data-check-target')).map(function () {
this.checked = checked;
});
}).on('click', '[data-update]', function () {
var id = $(this).attr('data-update') || (function () {
var data = [];
return $($(this).attr('data-list-target') || 'input.list-check-box').map(function () {
(this.checked) && data.push(this.value);
}), data.join(',');
}).call(this);
if (id.length < 1) {
return $.msg.tips('请选择需要操作的数据!');
}
var action = $(this).attr('data-action') || $(this).parents('[data-location]').attr('data-location');
var value = $(this).attr('data-value') || 0, field = $(this).attr('data-field') || 'status';
$.msg.confirm('确定要操作这些数据吗?', function () {
$.form.load(action, {field: field, value: value, id: id}, 'POST');
});
}).on('click', '[data-href]', function () {
var href = $(this).attr('data-href');
if (href && href.indexOf('#') !== 0) {
window.location.href = href;
}
}).on('click', '[data-file]', function () {
var type = $(this).attr('data-type') || 'image'; //jpg,png
var field = $(this).attr('data-field') || type;
var method = $(this).attr('data-one') ? 'one' : 'index';
var title = $(this).attr('data-title') || '文件管理';
var uptype = $(this).attr('data-uptype') || 'qiniu';
var url = window.APP_URL + '/plugs/file/' + method + '.html?uptype=' + uptype + '&type=' + type + '&field=' + field;
$.form.iframe(url, title || '文件管理');
}).on('click', '[data-iframe]', function () {
$.form.iframe($(this).attr('data-iframe'), $(this).attr('data-title') || '窗口');
}).on('click', '[data-icon]', function () {
var field = $(this).attr('data-field') || 'iconv';
var url = window.APP_URL + '/plugs/icon.html?field=' + field;
$.form.iframe(url, '图标选择');
}).on('click', '[data-tips-image]', function () {
var src = this.getAttribute('data-tips-image') || this.src, img = new Image(), index;
img.onload = function () {
index = layer.open({
type: 1, area: '480px', title: false, closeBtn: 1, skin: 'layui-layer-nobg', shadeClose: true,
content: $(img).appendTo('body').css({background: '#fff', width: '480px', height: 'auto'}),
end: function () {
$(img).remove();
}
});
};
img.src = src;
}).on('mouseenter', '[data-tips-text]', function () {
var text = $(this).attr('data-tips-text');
var placement = $(this).attr('data-tips-placement') || 'auto';
$(this).tooltip({title: text, placement: placement}).tooltip('show');
}).on('click', '[data-phone-view]', function () {
var src = this.getAttribute('data-phone-view') || this.href;
var $container = $('<div class="phone-container hide"><img src="http://static.cdn.cuci.cc/mobile_head.png" style="width:100%"/><div class="phone-screen"><iframe frameborder="0" marginheight="0" marginwidth="0"></iframe></div></div>').appendTo('body');
var $iframe = $container.find('iframe').attr('src', src);
$container.find('img').on('click', function () {
$iframe.attr('src', src);
});
var index = layer.open({
type: 1, scrollbar: false, area: ['320px', '600px'], title: false, closeBtn: 1, skin: 'layui-layer-nobg', shadeClose: true,
content: $container.removeClass('hide'),
end: function () {
$container.remove();
}
});
layer.style(index, {boxShadow: 'none'});
});
/**
* 后台页面初始化操作
* @returns {undefined}
*/
$(function () {
/*! 左侧菜单状态切换 */
$('ul.sidebar-trans .nav-item a').on('click', function () {
$(this).parents('.sidebar-nav.main-nav').addClass('open').find('ul.sidebar-trans').show();
$('.sidebar-trans .nav-item').not($(this).parent().addClass('active')).removeClass('active');
});
$('body').on('click', '.framework-sidebar-full .sidebar-title', function () {
var $trans = $(this).next('ul.sidebar-trans'), node = $trans.attr('data-menu-node') || false;
node && $.cookie(node, $(this).parent().toggleClass('open').hasClass('open') ? 2 : 1);
$(this).parent().hasClass('open') ? $trans.show() : $trans.hide();
});
$('ul.sidebar-trans').map(function () {
var node = this.getAttribute('data-menu-node') || false;
node && (parseInt($.cookie(node) || 2) === 2) && $(this).show().parent().addClass('open');
});
/*! Mini Tips 显示*/
$('body').on('mouseenter mouseleave', '.framework-sidebar-mini .sidebar-trans .nav-item,.framework-sidebar-mini .sidebar-title', function (e) {
$(this).tooltip({
template: '<div class="console-sidebar-tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
title: $(this).text(), placement: 'right', container: 'body'
}).tooltip('show');
(e.type === 'mouseleave') && $(this).tooltip('destroy');
});
/*! 切换左侧菜单 */
function showLeftMenu(menuNode, $openNode) {
var $leftmenu = $('[data-menu-box=' + menuNode + ']').removeClass('hide');
$("[data-menu-box]").not($leftmenu).addClass('hide');
$openNode ? $openNode.trigger('click') : $leftmenu.find('[data-open]:first').trigger('click');
}
var $menutarget = $('[data-menu-target]').on('click', function () {
$menutarget.not($(this).addClass('active')).removeClass('active');
showLeftMenu($(this).attr('data-menu-target'));
});
/*! 左侧菜单样式切换 */
var $targetmenu = $('.sidebar-fold').on('click', function () {
var $body = $('.framework-body').toggleClass('framework-sidebar-mini framework-sidebar-full');
$.cookie('menu-style', $body.hasClass('framework-sidebar-mini') ? 'mini' : 'full');
});
($.cookie('menu-style') !== 'mini') && $targetmenu.trigger('click');
/*! URI路由处理 */
window.onhashchange = function () {
var hash = (window.location.hash || '').substring(1);
if (hash.length < 1) {
return $('.topbar-home-link:first').trigger('click')
}
$.form.open(hash);
function _get_menu_by_spm() {
window.location.href.replace(/spm=([\d\-m]+)/ig, function (str, node) {
$menu = $('[data-menu-node="' + node + '"]');
});
if ($menu && $menu.size() > 0) {
return $menu;
} else {
return null;
}
}
var uris = hash.split('?')[0].split('/'), $menu = null;
for (var i = uris.length; i > 0; i--) {
if ($('.framework-sidebar [data-open*="' + uris.join('/') + '"]').size() < 1) {
delete uris[uris.length - 1];
} else {
$menu = $('.framework-sidebar [data-open*="' + uris.join('/') + '"]');
if ($menu.size() > 1 && /spm=/ig.test(window.location.href)) {
$menu = _get_menu_by_spm();
}
break;
}
}
if ($menu) {
$menu.parent('li').addClass('active');
$menu.parents('.sidebar-trans').removeClass('hide').show();
$menu.parents('.main-nav').addClass('open');
$menu.parents('[data-menu-box]').removeClass('hide').siblings('[data-menu-box]').addClass('hide');
}
};
window.onhashchange.call(this);
});
})(jQuery);