/**
* 截取URL参数
* @param {string} name 截取的key
* @param {string} [url] 被截取的url
* @returns {string} 截取的val
*/
let urlParam = (name, url) => {
let reg = new RegExp(".*[&?]" + name + "=([^&]*)(&|$)");
let r;
if (!url) {
r = window.location.search.match(reg);
} else {
r = url.match(reg);
}
if (r) return decodeURIComponent(r[1]);
return '';
};
/**
* 跳转
* @param {string} address 跳转地址
*/
let redirect = (address) => {
window.location.href = address;
};
/**
* 登录后跳转
*/
let loginReturnUrl = () => {
window.location.href = 'loginReg.html?returnUrl=' + encodeURIComponent(window.location.href);
};
/**
* 统计中英文数量
* @param {string} str 统计的字符串 1个汉字 等于两个字母
* @returns {number} 统计的数量
*/
let getBytesCount = (str) => {
let bytesCount = 0;
for (let i = 0; i < str.length; i++) {
let c = str.charAt(i);
if (/^[\u0000-\u00ff]$/.test(c)) //匹配双字节
{
bytesCount += 0.5;
}
else {
bytesCount += 1;
}
}
return bytesCount;
};
/**
* 截取长度
* @param {string} str 被截取的字符串
* @param {number} num 需要截取的长度
* @returns {string} 统计的数量
*/
let txtIntercept = (str, num) => {
if (getBytesCount(str) > num) {
return str.substring(0, num) + '...'
} else {
return str
}
};
/**
* 判断是手机端还是电脑端
*/
let isPhone = () => {
if ((navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i))) {
return true;
} else {
return false;
}
};
/**
* 验证身份证
* @param {string} str 传进来的字符串
*/
let isCardId = (str) => {
let reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
if (reg.test(str)) {
return true;
} else {
return false;
}
};
/**
* 判断是否是手机号
* @param {string} val 传进来的字符串
*/
let isMobile = (val) => {
let reg = /^1[3|4|5|7|8][0-9]\d{8}$/;
return reg.test(val);
};
/**
* 判断价格是否合法
* @param {string} price 传进来的价格
*/
let priceIsOk = (price) => {
let reg = /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/;
if (reg.test(price)) {
return true;
} else {
return false
}
};
/**
* 页面title
* @param {string/Array} arr 需要设置的标题
*/
let documentTitle = (arr) => {
let title = document.title;
let str = '';
if (typeof arr === 'object') {
str = arr.join('_');
} else {
str = arr;
}
document.title = str + '_' + title;
};
/**
* 只能输入数字 替换后 光标在原来位置
* @param {object} e 传进来的字符串
*/
let inputNum = (e) => {
e.target.value.replace(/\D/g, function (char, index, val) {
e.target.value = val.replace(/\D/g, "");
let rTextRange = null;
if (e.target.setSelectionRange) {
e.target.setSelectionRange(index, index);
} else {//支持ie
rTextRange = e.target.createTextRange();
rTextRange.moveStart('character', index);
rTextRange.collapse(true);
rTextRange.select();
}
});
};
/**
* 替换字符串中的URL
* @param {string} str 传进来的字符串
*/
let strURLReplace = (str) => {
let strRegex = '((https|http)://)[A-Za-z0-9-_]+\\.[A-Za-z0-9-_%&?/.=]+';
/*let strRegex = '((https|http)://)[A-Za-z0-9-_]+\\.[A-Za-z0-9-_%&\?\/.=]+';*/
let regex = new RegExp(strRegex, "gi");
let replaceReg = (reg, str) => {
return str.replace(reg, function (m) {
return '<a href="' + m + '" target="_blank">' + m + '</a>';
});
};
str = replaceReg(regex, str);
return str;
};
/**
* 星号生成
* @param {number} num 需要几个星号
*/
let asterisk = (num) => {
let returnVal = '';
for (let i = 0; i < num; i++) {
returnVal += '*'
}
return returnVal;
};
/**
* 转价格
* @param {string/object} num 价格
* @param {number} start 开始位置
*/
let toFixedNumPriceOne = (num, start) => {
let returnVal = '<span class="no">暂无报价</span>';
let startStr = '';
if (start) {
startStr = '<b>起</b>';
}
if (num) {
returnVal = '<i class="sub">¥</i>' + Math.abs(num.toFixed(2)) + startStr;
}
return returnVal;
};
/**
* 保留两位价格
* @param {string} num 价格
*/
let toFixedNumPriceTwo = (num) => {
if (num) {
return '<i class="sub">¥</i>' + Math.abs(num.toFixed(2));
}
return '<i class="sub">¥</i>' + 0;
};
/**
* 个人账户
* @param {number} x 价格
*/
let toDecimal2 = (x) => {
let f = parseFloat(x);
if (isNaN(f)) {
return false;
}
let f2 = Math.round(x * 100) / 100;
let s = f2.toString();
let rs = s.indexOf('.');
if (rs < 0) {
rs = s.length;
s += '.';
}
while (s.length <= rs + 2) {
s += '0';
}
return s;
};
/**
* 好评率
* @param {number} g 好评数量
* @param {number} m 中评数量
* @param {number} b 差评数量
*/
let getGoodNum = (g, m, b) => {
let total = g + m + b;
if (Number(g) === 0) {
return 0 + "%"
} else {
return ((g / total) * 100).toFixed(0) + "%"
}
};
/**
* 几天前
* @param {string} now 当前时间戳
* @param {string} time 需要算的时间戳
*/
let timeBefore = (now, time) => {
let minute = 1000 * 60;
let hour = minute * 60;
let day = hour * 24;
/*let halfamonth = day * 15;*/
let month = day * 30;
let diffValue = now - time;
if (diffValue < 0) {
//若日期不符则弹出窗口告之
//alert("结束日期不能小于开始日期!");
}
let monthC = diffValue / month;
let weekC = diffValue / (7 * day);
let dayC = diffValue / day;
let hourC = diffValue / hour;
let minC = diffValue / minute;
let result = '';
/*下面的空字符串 是发表于 */
if (monthC >= 1) {
result = "" + parseInt(monthC, 10) + "个月前";
}
else if (weekC >= 1) {
result = "" + parseInt(weekC, 10) + "周前";
}
else if (dayC >= 1) {
result = "" + parseInt(dayC, 10) + "天前";
}
else if (hourC >= 1) {
result = "" + parseInt(hourC, 10) + "个小时前";
}
else if (minC >= 1) {
result = "" + parseInt(minC, 10) + "分钟前";
} else
result = "刚刚";
return result;
};
/**
* 价格控制
* @param {object} e 格式化价格
*/
let priceOnKeyUp = (e) => {
let val = e.target;
let regStr = [
['^0(\\d+)$', '$1'], //禁止录入整数部分两位以上,但首位为0
['[^\\d\\.]+$', ''], //禁止录入任何非数字和点
['\\.(\\d?)\\.+', '.$1'], //禁止录入两个以上的点
['^(\\d+\\.\\d{2}).+', '$1'] //禁止录入小数点后两位以上
];
for (let i = 0; i < regStr.length; i++) {
let reg = new RegExp(regStr[i][0]);
val.value = val.value.replace(reg, regStr[i][1]);
}
/*48 - 57 数字键 , 8删除键,37-40 上下左右键 , 13 回车键*/
/*
let val = e.target;
console.log(e.keyCode);
let keyCode = Number(e.keyCode);
if (keyCode >= 48 || keyCode <= 57 || keyCode === 8 || keyCode >= 37 || keyCode <= 40 || keyCode === 13){
}else{
}*/
};
/**
* 价格表单离开
* @param {object} e 格式化价格
*/
let priceOnBlur = (e) => {
let th = e.target;
let v = th.value;
if (v === '') {
v = '0.00';
} else if (v === '0') {
v = '0.00';
} else if (v === '0.') {
v = '0.00';
} else if (/^0+\d+\.?\d*.*$/.test(v)) {
v = v.replace(/^0+(\d+\.?\d*).*$/, '$1');
//v = inp.getRightPriceFormat(v).val;
} else if (/^0\.\d$/.test(v)) {
v = v + '0';
} else if (!/^\d+\.\d{2}$/.test(v)) {
if (/^\d+\.\d{2}.+/.test(v)) {
v = v.replace(/^(\d+\.\d{2}).*$/, '$1');
} else if (/^\d+$/.test(v)) {
v = v + '.00';
} else if (/^\d+\.$/.test(v)) {
v = v + '00';
} else if (/^\d+\.\d$/.test(v)) {
v = v + '0';
} else if (/^[^\d]+\d+\.?\d*$/.test(v)) {
v = v.replace(/^[^\d]+(\d+\.?\d*)$/, '$1');
} else if (/\d+/.test(v)) {
v = v.replace(/^[^\d]*(\d+\.?\d*).*$/, '$1');
//ty = false;
} else if (/^0+\d+\.?\d*$/.test(v)) {
v = v.replace(/^0+(\d+\.?\d*)$/, '$1');
//ty = false;
} else {
v = '0.00';
}
}
th.value = v;
};
/**
* 价格转成 分
* @param {string/number} val 格式化价格
*/
let priceCents = (val) => {
if ((val === 0 || val === '0.00' || val !== '') && val !== undefined) {
return val * 100
} else {
return '';
}
};
let priceDollars = (val) => {
if ((val === 0 || val === '0.00' || val !== '') && val !== undefined) {
return (val / 100).toFixed(2)
} else {
return ''
}
};
let parent = window.parent;
parent.imgSrc = {};
/**
* 防盗链iframe
* @param {string} url 传进去url
* @param {string} width 宽度
* @param {string} height 高度
* @param {string} key 可变ID
*/
let showImg = (url, width, height, key) => {
let id = 'imgIfr' + key;
parent.imgSrc[id] = '<img src=\'' + url + '\' style="width:100%;height:100%; display:block;position:absolute;left:0;top:0;"/>';
return '<iframe src="javascript:parent.imgSrc[\'' + id + '\'];" frameBorder="0" scrolling="no" style="width:' + width + ';height:' + height + ';overflow: hidden;"></iframe>';
};
let cookie = {
/**
*
* @desc 设置Cookie
* @param {String} name
* @param {String} value
* @param {Number} days
*/
save: (name, value, days) => {
let date = new Date();
date.setDate(date.getDate() + days);
document.cookie = name + '=' + value + ';expires=' + date;
},
/**
* 根据name读取cookie
* @param {String} name
* @return {String}
*/
load: (name) => {
let arr = document.cookie.replace(/\s/g, "").split(';');
for (let i = 0; i < arr.length; i++) {
let tempArr = arr[i].split('=');
if (tempArr[0] === name) {
return decodeURIComponent(tempArr[1]);
}
}
return '';
},
/**
*
* @desc 根据name删除cookie
* @param {String} name
*/
remove: (name) => {
// 设置已过期,系统会立刻删除cookie
this.save(name, '1', -1);
}
};
/**
* 批量删除cookie
* @param {Array} nameArray 被删除的cookie 名称 数组
* @param {object} opt 被删除的cookie 参数
*/
/*let cookieDel = (nameArray, opt) => {
nameArray.map((data) => {
cookie.remove(data, opt,-1);
return false
})
};*/
/**
* Base64->Blob
* @param {Object} dataUrl Base64 图片数据
* @returns {string} 返回Blob图片地址
*/
let dataURLtoBlob = (dataUrl) => {
let arr = dataUrl.split(','), mime = arr[0].match(/:(.*?);/)[1],
bsTr = atob(arr[1]), n = bsTr.length, u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bsTr.charCodeAt(n);
}
return new Blob([u8arr], {type: mime});
};
/**
* html -> txt
* @param {string} str html字符串
* @returns {string} 返回纯文本
*/
let delHtmlTag = (str) => {
return str.replace(/<[^>]+>/g, "");//去掉所有的html标记
};
/**
* 获取分页数值 pageOn
*/
let getPageOn = () => {
return Number(window.location.href.substring(window.location.href.indexOf('pageOn=') + 7, window.location.href.length) || 0)
};
export default {
"urlParam": urlParam,
"redirect": redirect,
"loginReturnUrl": loginReturnUrl,
"getBytesCount": getBytesCount,
"txtIntercept": txtIntercept,
"isPhone": isPhone,
"isCardId": isCardId,
"isMobile": isMobile,
"priceIsOk": priceIsOk,
"documentTitle": documentTitle,
"inputNum": inputNum,
"asterisk": asterisk,
"toFixedNumPriceOne": toFixedNumPriceOne,
"toFixedNumPriceTwo": toFixedNumPriceTwo,
"strURLReplace": strURLReplace,
"toDecimal2": toDecimal2,
"getGoodNum": getGoodNum,
"timeBefore": timeBefore,
"priceOnKeyUp": priceOnKeyUp,
"priceOnBlur": priceOnBlur,
"priceCents": priceCents,
"priceDollars": priceDollars,
"cookie": cookie,
"showImg": showImg,
"dataURLtoBlob": dataURLtoBlob,
"delHtmlTag": delHtmlTag,
"getPageOn": getPageOn
}