Files
sentcms/public/static/common/js/sent.js

320 lines
8.2 KiB
JavaScript

define(['jquery', 'layer', 'message'], function ($, layer) {
var sent = {
config: {
keyName: 'sent_'
},
init: function () {
if ($("form[role=form]").length > 0) {
require(['form'], function (form) {
form.api.bindevent($("form[role=form]"));
})
}
sent.api.bindButtonAction(); //绑定元素get/post请求操作
//全选的实现
$(".check-all").click(function() {
$(this).parents('table').find('tbody td input[type=checkbox]').prop("checked", this.checked);
});
$("table tbody td input[type=checkbox]").click(function() {
var checked = true;
$("table tbody td input[type=checkbox]").each(function(i) {
if (!this.checked) {
checked = false;
}
});
$(".check-all").prop("checked", checked);
});
},
msg: function (text, type) {
text = (type == 'success') ? text + ' 页面即将自动跳转~' : text;
if (typeof type != 'undefined') {
var message = $.messager.show(text, {
placement: 'bottom',
type: type
});
} else {
var message = $.messager.show(text, {
placement: 'bottom'
})
}
message.show();
},
parseUrl: function (url) {
if (url.indexOf("?") === -1) {
return {};
}
url = decodeURIComponent(url);
var query = url.split("?")[1];
var queryArr = query.split("&");
var obj = {};
queryArr.forEach(function (item) {
var key = item.split("=")[0];
var value = item.split("=")[1];
obj[key] = decodeURIComponent(value);
});
return obj;
},
store: {
set: function (params = {}) {
var {
name,
content,
type
} = params;
name = sent.config.keyName + name
var obj = {
dataType: typeof (content),
content: content,
type: type,
datetime: new Date().getTime()
}
if (type) window.sessionStorage.setItem(name, JSON.stringify(obj));
else window.localStorage.setItem(name, JSON.stringify(obj));
},
get: function (params = {}) {
var {
name,
debug
} = params;
name = sent.config.keyName + name
var obj = {},
content;
obj = window.sessionStorage.getItem(name);
if (sent.utils.validatenull(obj)) obj = window.localStorage.getItem(name);
if (sent.utils.validatenull(obj)) return;
try {
obj = JSON.parse(obj);
} catch (error) {
return obj;
}
if (debug) {
return obj;
}
if (obj.dataType == 'string') {
content = obj.content;
} else if (obj.dataType == 'number') {
content = Number(obj.content);
} else if (obj.dataType == 'boolean') {
content = eval(obj.content);
} else if (obj.dataType == 'object') {
content = obj.content;
}
return content;
},
remove: function (params = {}) {
let {
name,
type
} = params;
name = sent.config.keyName + name
if (type) {
window.sessionStorage.removeItem(name);
} else {
window.localStorage.removeItem(name);
}
},
all: function (params = {}) {
let list = [];
let {
type
} = params;
if (type) {
for (let i = 0; i <= window.sessionStorage.length; i++) {
list.push({
name: window.sessionStorage.key(i),
content: getStore({
name: window.sessionStorage.key(i),
type: 'session'
})
})
}
} else {
for (let i = 0; i <= window.localStorage.length; i++) {
list.push({
name: window.localStorage.key(i),
content: getStore({
name: window.localStorage.key(i),
})
})
}
}
return list;
},
clear: function (params = {}) {
let {
type
} = params;
if (type) {
window.sessionStorage.clear();
} else {
window.localStorage.clear()
}
}
},
events: {
//请求成功的回调
onAjaxSuccess: function (ret, onAjaxSuccess) {
var data = typeof ret.data !== 'undefined' ? ret.data : null;
var msg = typeof ret.msg !== 'undefined' && ret.msg ? ret.msg : __('Operation completed');
if (typeof onAjaxSuccess === 'function') {
var result = onAjaxSuccess.call(this, data, ret);
if (result === false)
return;
}
sent.msg(msg, 'success');
},
//请求错误的回调
onAjaxError: function (ret, onAjaxError) {
var data = typeof ret.data !== 'undefined' ? ret.data : null;
if (typeof onAjaxError === 'function') {
var result = onAjaxError.call(this, data, ret);
if (result === false) {
return;
}
}
sent.msg(ret.msg, 'error');
},
//服务器响应数据后
onAjaxResponse: function (response) {
try {
var ret = typeof response === 'object' ? response : JSON.parse(response);
if (!ret.hasOwnProperty('code')) {
$.extend(ret, {
code: -2,
msg: response,
data: null
});
}
} catch (e) {
var ret = {
code: -1,
msg: e.message,
data: null
};
}
return ret;
}
},
api: {
//发送Ajax请求
ajax: function (options, success, error) {
options = typeof options === 'string' ? {
url: options
} : options;
var index;
if (typeof options.loading === 'undefined' || options.loading) {
index = layer.load(options.loading || 0);
}
options = $.extend({
type: "POST",
dataType: "json",
success: function (ret) {
index && layer.close(index);
ret = sent.events.onAjaxResponse(ret);
if (ret.code === 1) {
sent.events.onAjaxSuccess(ret, success);
if (ret.url) {
setTimeout(function() {
location.href = ret.url;
}, 1500);
}
} else {
sent.events.onAjaxError(ret, error);
}
},
error: function (xhr) {
index && layer.close(index);
var ret = {
code: xhr.status,
msg: xhr.statusText,
data: null
};
sent.events.onAjaxError(ret, error);
}
}, options);
return $.ajax(options);
},
bindButtonAction: function(){
if($('a.ajax-get, button.ajax-get, a.ajax-post, button.ajax-post').length > 0){
$('a.ajax-get, button.ajax-get, a.ajax-post, button.ajax-post').click(function(e){
e.preventDefault();
var target, type, form, query;
var nead_confirm = false;
if ($(this).hasClass('confirm')) {
if (!confirm('确认要执行该操作吗?')) {
return false;
}
}
if ($(this).hasClass('ajax-post')) {
type = "post";
form = $('.' + $(this).data('form'));
if ($(this).attr('hide-data') === 'true') { //无数据时也可以使用的功能
form = $('.hide-data');
query = form.serialize();
} else if (form.get(0) == undefined) {
return false;
} else if (form.get(0).nodeName == 'FORM') {
if ($(this).attr('url') !== undefined) {
target = $(this).attr('url');
} else {
target = form.get(0).action;
}
query = form.serialize();
} else if (form.get(0).nodeName == 'INPUT' || form.get(0).nodeName == 'SELECT' || form.get(0).nodeName == 'TEXTAREA') {
query = form.serialize();
} else {
query = form.find('input,select,textarea').serialize();
}
}else{
type = "get";
}
if ((target = $(this).attr('href')) || (target = $(this).attr('url'))) {
sent.api.ajax({url: target, type: type, data: query})
}
})
}
}
},
utils: {
//比较2个对象是否相同
isObjEqual:function(o1,o2){
var props1 = Object.getOwnPropertyNames(o1);
var props2 = Object.getOwnPropertyNames(o2);
if (props1.length != props2.length) {
return false;
}
for (var i = 0,max = props1.length; i < max; i++) {
var propName = props1[i];
if (o1[propName] !== o2[propName]) {
return false;
}
}
return true;
},
validatenull: function (val) {
if (typeof val == 'boolean') {
return false;
}
if (typeof val == 'number') {
return false;
}
if (val instanceof Array) {
if (val.length == 0) return true;
} else if (val instanceof Object) {
if (JSON.stringify(val) === '{}') return true;
} else {
if (val == 'null' || val == null || val == 'undefined' || val == undefined || val == '') return true;
return false;
}
return false;
}
}
};
window.sent = sent;
window.layer = layer;
sent.init();
return sent;
});