314 lines
9.4 KiB
JavaScript
Executable File
314 lines
9.4 KiB
JavaScript
Executable File
//系统工具[不含业务]
|
||
|
||
var Tools = {
|
||
/**
|
||
* 获取选中的值
|
||
* @param isArray 返回 array | string
|
||
* @returns {any}
|
||
*/
|
||
getCheckedBoxListVal: function (obj, isArray) {
|
||
var ids = '';
|
||
$(obj?obj:'.list-check-box').each(function(a, b){
|
||
if($(b).is(":checked")){
|
||
if(ids == ''){
|
||
ids += ''+$(b).val();
|
||
}else{
|
||
ids += ','+$(b).val();
|
||
}
|
||
}
|
||
});
|
||
return true===isArray?ids.split(','):ids;
|
||
},
|
||
/**
|
||
* 弹出带计算规则的验证码对话框
|
||
* @param callBack
|
||
*/
|
||
showValidatePrompt: function (callBack) {
|
||
var start_num = Math.floor(Math.random() * 10);
|
||
var end_num = Math.floor(Math.random() * 10);
|
||
|
||
layer.prompt({
|
||
title: start_num+'*'+end_num+'=? 请输入计算结果。',
|
||
formType: 0, //输入框类型,支持0(文本)默认1(密码)2(多行文本)
|
||
value: '', //初始时的值,默认空字符
|
||
maxlength: 10, //可输入文本的最大长度,默认500
|
||
}, function (value, index, elem) {
|
||
if(start_num*end_num != 1*value){
|
||
return layer.alert('输入错误');
|
||
}
|
||
if(typeof callBack == 'function'){
|
||
callBack();
|
||
}
|
||
layer.close(index);
|
||
});
|
||
},
|
||
/**
|
||
* 常规请求
|
||
* @param url
|
||
* @param data
|
||
* @param callBack
|
||
*/
|
||
request: function (url, data, callBack) {
|
||
$.post(url, data, function (res) {
|
||
if(typeof callBack == 'function'){
|
||
return callBack(res);
|
||
}
|
||
if(res.code == 1){
|
||
return $.msg.error(res.msg);
|
||
}
|
||
$.msg.success(res.msg);
|
||
return $.form.reload();
|
||
}, 'json');
|
||
},
|
||
|
||
/**
|
||
* 验证身份证
|
||
* @param card
|
||
* @returns {boolean}
|
||
*/
|
||
isCardNo : function(card) {
|
||
var pattern = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
|
||
return pattern.test(card);
|
||
},
|
||
/**
|
||
* 验证手机
|
||
* @param mobile
|
||
* @returns {*|boolean}
|
||
*/
|
||
isMobile:function(mobile){
|
||
var mobreg = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1})|(17[0-9]{1}))+\d{8})$/;
|
||
return mobreg.test(mobile)
|
||
},
|
||
/**
|
||
* 回车键按下确认
|
||
*/
|
||
enterKeydown: function(ele){
|
||
if (event.keyCode == 13){
|
||
$(ele).submit();
|
||
}
|
||
},
|
||
/**
|
||
* 自写验证邮箱
|
||
* @param p
|
||
* @returns {*|boolean}
|
||
*/
|
||
isEmail:function (p) {
|
||
return /^([A-Z|a-z|0-9|\D]*)@([a-z|A-Z|0-9]*).[a-z|A-Z]*$/.test(p);
|
||
},
|
||
/**
|
||
* 检查是否是字母或(和)数字
|
||
* @param p
|
||
* @param type 为 true 则包含特殊字符 否则不包含
|
||
* @returns {*|boolean}
|
||
*/
|
||
isTxtNum:function (p, type) {
|
||
return type?/^[A-Z|a-z|0-9]|[.~@#%&_-]+$/.test(p):/^([A-Z|a-z|0-9])+$/.test(p);
|
||
},
|
||
isNum:function (p) {
|
||
return /^\d+$/.test(p);
|
||
},
|
||
//提示
|
||
tips:function (msg, ele) {
|
||
layer.tips(msg, ele);
|
||
$(ele).css({'border':'1px solid red'});
|
||
},
|
||
//失去焦点提示
|
||
blur:function (o, ele) {
|
||
$(o).bind('blur',function () {
|
||
//元素警告样式
|
||
if($(ele).val()!='')$(ele).css({'border':0});
|
||
else {
|
||
wh.tips('这里必须哦', ele);
|
||
$(ele).css({'border':'1px solid red'});
|
||
}
|
||
});
|
||
},
|
||
/**
|
||
* 将key=val;key1=val1 或 key=val&key1=val1格式的字符串转换为二维数组
|
||
**/
|
||
strToArray : function(uri, str){
|
||
if(!str)str = ';';//拆分符号
|
||
var spl_arr = uri.split(str);
|
||
|
||
var res_arr = [];//存储结果
|
||
for(var i=0; i<spl_arr.length; i++){
|
||
var tmparr = spl_arr[i].split('=');
|
||
res_arr[i] = tmparr;
|
||
}
|
||
return res_arr;
|
||
},
|
||
/**
|
||
* 设置cookie
|
||
**/
|
||
setCookie : function(key, val){
|
||
document.cookie = key+'='+encodeURIComponent(val);
|
||
return true;
|
||
},
|
||
/**
|
||
* 获取cookie[仅返回有效数据]
|
||
**/
|
||
getCookie : function(key){
|
||
//假设存储格式是:key=val;key1=val1
|
||
var cook_arr = document.cookie.split(';');
|
||
|
||
//验证一下,没有值就返回false,不进入下一个流程
|
||
if(!cook_arr)return false;
|
||
|
||
var res_arr = [];//存储解析结果
|
||
for(var i=0; i<cook_arr.length; i++){
|
||
//这里要再解析一次
|
||
var arr = cook_arr[i].split('=');
|
||
//这里表示满足key=val格式
|
||
if(arr && arr.length==2)res_arr.push ([arr[0].trim(),decodeURIComponent(arr[1].trim())]);//存储
|
||
}
|
||
if(key){
|
||
for(var j=0; j<res_arr.length; j++){
|
||
if(key == res_arr[j][0])return res_arr[j][1];//返回正确val
|
||
}
|
||
}else{
|
||
return res_arr;//key不存在就返回所有,有时候还是想看看所有的值
|
||
}
|
||
//默认返回false 表示没有取到值
|
||
return false;
|
||
},
|
||
|
||
/**
|
||
* [公共]表单验证
|
||
* @param form
|
||
* @returns {boolean}
|
||
*/
|
||
formValidate:function (form) {
|
||
var r = true;
|
||
$(form).find('*').each(function (k, o) {
|
||
var ele_val = $(o).val();
|
||
var attr = $(o).attr('data-validate');
|
||
if(attr){
|
||
$(o).addClass('tips_'+k);//临时class
|
||
var ele = '.tips_'+k;
|
||
if(attr == 'require'){
|
||
if(ele_val == ''){
|
||
wh.tips('这里必须哦', ele);//根据临时class处理后续css逻辑
|
||
wh.blur(o, ele);
|
||
r = false;//指定返回结果
|
||
return false;//退出循环
|
||
}
|
||
}else if(attr == 'mobile'){
|
||
if(false === wh.isMobile(ele_val)){
|
||
wh.tips('这里是手机号哦', ele);
|
||
wh.blur(o, ele);
|
||
r = false;//指定返回结果
|
||
return false;
|
||
}
|
||
|
||
}else if(attr == 'number'){
|
||
if(false === /^\d*$/.test(ele_val)){
|
||
wh.tips('这里是数字哦', ele);
|
||
wh.blur(o, ele);
|
||
r = false;//指定返回结果
|
||
return false;
|
||
}
|
||
}else if(attr == 'birthday'){
|
||
//todo ...
|
||
|
||
}else if(attr == 'date'){
|
||
//验证日期格式
|
||
//todo...
|
||
|
||
}else if(attr == 'email'){
|
||
if(false === wh.isEmail(ele_val)){
|
||
wh.tips('这里是邮箱哦', ele);
|
||
wh.blur(o, ele);
|
||
r = false;//指定返回结果
|
||
return false;
|
||
}
|
||
}else if(attr == 'txtnum'){
|
||
//字母+数字
|
||
if(false === wh.isTxtNum(ele_val)){
|
||
wh.tips('这里是字母和(或)数字哦', ele);
|
||
wh.blur(o, ele);
|
||
r = false;//指定返回结果
|
||
return false;
|
||
}
|
||
}else if(attr == 'card'){
|
||
if(false === wh.isCardNo(ele_val)){
|
||
wh.tips('这里是身份证哦', ele);
|
||
wh.blur(o, ele);
|
||
r = false;//指定返回结果
|
||
return false;
|
||
}
|
||
}
|
||
}
|
||
});
|
||
return r;
|
||
},
|
||
/**
|
||
* 转换下载地址,把完整文件下载地址分割为前缀和文件名
|
||
* @param file_download_url eg:http://www.down.com/file/abc.mp4
|
||
* @returns {[string, string]} ['http://www.down.com/file/', 'abc.mp4']
|
||
*/
|
||
revertDownloadUrl: function (file_download_url) {
|
||
var last_index = file_download_url.lastIndexOf('/');
|
||
//前缀
|
||
var frefix = file_download_url.substr(0, last_index+1);
|
||
//资源文件名称
|
||
var file_name = file_download_url.substr(last_index+1);
|
||
return [frefix, file_name];
|
||
},
|
||
};
|
||
|
||
var Submit = {
|
||
is_debug: true,
|
||
is_layer_load: true,//显示加载层
|
||
//单表单
|
||
saveData: function(obj, fn){
|
||
var form = $(obj).parents('form');
|
||
if(form.length !== 1){
|
||
return Console.error('表单不存在');
|
||
}
|
||
|
||
var url = $(form).attr('action');
|
||
if(!url){
|
||
return Console.error('请求url不存在');
|
||
}
|
||
var data = $(form).serializeArray();
|
||
if(this.is_debug){
|
||
Console.info(data);
|
||
}
|
||
|
||
if(data.length === 0){
|
||
return Console.error('提交空数据');
|
||
}
|
||
var that = this;
|
||
|
||
|
||
//遮罩
|
||
if(that.is_layer_load){
|
||
var load_index = layer.load(1);
|
||
}
|
||
$.post(url, data, function (res) {
|
||
if(that.is_debug){
|
||
Console.info(res);
|
||
}
|
||
//取消遮罩
|
||
if(that.is_layer_load){
|
||
layer.close(load_index);
|
||
}
|
||
//处理
|
||
if(fn) fn(res);
|
||
}, 'json');
|
||
|
||
|
||
},
|
||
//多表单
|
||
//todoing
|
||
};
|
||
|
||
//控制台
|
||
var Console = {
|
||
error: function(msg){
|
||
return console.error(msg);
|
||
},
|
||
info: function (msg) {
|
||
return console.log(msg);
|
||
}
|
||
}; |