190 lines
7.2 KiB
JavaScript
190 lines
7.2 KiB
JavaScript
|
import httpConfig from "@/common/http/config"
|
|||
|
export default {
|
|||
|
//时间格式化
|
|||
|
formatDate (formats, timestamp) {
|
|||
|
var formats = formats || 'Y-M-D';
|
|||
|
var myDate = timestamp ? new Date(timestamp) : new Date();
|
|||
|
var year = myDate.getFullYear();
|
|||
|
var month = formatDigit(myDate.getMonth() + 1);
|
|||
|
var day = formatDigit(myDate.getDate());
|
|||
|
var hour = formatDigit(myDate.getHours());
|
|||
|
var minute = formatDigit(myDate.getMinutes());
|
|||
|
var second = formatDigit(myDate.getSeconds());
|
|||
|
return formats.replace(/Y|M|D|h|m|s/g, function(matches) {
|
|||
|
return ({
|
|||
|
Y: year,
|
|||
|
M: month,
|
|||
|
D: day,
|
|||
|
h: hour,
|
|||
|
m: minute,
|
|||
|
s: second
|
|||
|
})[matches];
|
|||
|
});
|
|||
|
// 小于10补0
|
|||
|
function formatDigit (n) {
|
|||
|
return n.toString().replace(/^(\d)$/, '0$1');
|
|||
|
}
|
|||
|
},
|
|||
|
// 正则验证
|
|||
|
checkStr(str,type) {
|
|||
|
switch (type){
|
|||
|
case 'mobile': //电话
|
|||
|
return /^1[3|4|5|6|7|8|9][0-9]\d{8}$/.test(str)
|
|||
|
case 'card': //身份证
|
|||
|
return /^[\d]{6}(19|20)?[\d]{2}(0[1-9]|1[0-2])(0[1-9]|1[0-9]|2[0-9]|3[0-1])[0-9]{3}[xX\d]$/.test(str)
|
|||
|
case 'email': //邮箱
|
|||
|
return /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/.test(str)
|
|||
|
case 'qq': //qq
|
|||
|
return /^[1-9][0-9]{4,10}$/.test(str)
|
|||
|
case 'postcode': //邮编
|
|||
|
return /^(0[1-7]|1[0-356]|2[0-7]|3[0-6]|4[0-7]|5[1-7]|6[1-7]|7[0-5]|8[013-6])\d{4}$/.test(str)
|
|||
|
case 'int': //整数
|
|||
|
return /^-?\d+$/.test(str)
|
|||
|
case 'posint': //正整数
|
|||
|
return /^\d+$/.test(str)
|
|||
|
case 'negint': //负整数
|
|||
|
return /^-\d+$/.test(str)
|
|||
|
case 'num': //数字
|
|||
|
return /^-?\d*\.?\d+$/.test(str)
|
|||
|
case 'posnum': //正数
|
|||
|
return /^\d*\.?\d+$/.test(str)
|
|||
|
case 'negnum': //负数
|
|||
|
return /^-\d*\.?\d+$/.test(str)
|
|||
|
case 'nposint': //非0正整数
|
|||
|
return /^\+?[1-9][0-9]*$/.test(str)
|
|||
|
case 'nnegint': //非0负整数
|
|||
|
return /^\-?[1-9][0-9]*$/.test(str)
|
|||
|
case 'price': //价格
|
|||
|
return /(^[1-9]\d*(\.\d{1,2})?$)|(^0(\.\d{1,2})?$)/.test(str)
|
|||
|
case 'money': //金额(小数点2位)
|
|||
|
return /^\d*(?:\.\d{0,2})?$/.test(str);
|
|||
|
default:
|
|||
|
return true
|
|||
|
}
|
|||
|
},
|
|||
|
// 当前日期加固定天数
|
|||
|
getNumDay (num) {
|
|||
|
const currentDate = new Date();
|
|||
|
currentDate.setDate(currentDate.getDate() + num);
|
|||
|
return currentDate.toISOString();
|
|||
|
},
|
|||
|
// 判断是否再有效期
|
|||
|
isDateValid (startDate, endDate, date) {
|
|||
|
var currentDate = new Date();
|
|||
|
if (date) currentDate = new Date(date);
|
|||
|
return currentDate > new Date(startDate + ' 00:00:00') && currentDate < new Date(endDate + ' 23:59:59');
|
|||
|
},
|
|||
|
// 判断指定日期是否小于今天
|
|||
|
isDateLessThanToday (date, nowDate) {
|
|||
|
var currentDate = new Date();
|
|||
|
if (nowDate) currentDate = new Date(nowDate);
|
|||
|
return currentDate < new Date(date + ' 23:59:59');
|
|||
|
},
|
|||
|
// 获取指定日期为周几
|
|||
|
getDayOfWeek (dateString) {
|
|||
|
const days = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];
|
|||
|
const date = new Date(dateString);
|
|||
|
return days[date.getDay()];
|
|||
|
},
|
|||
|
// 获取指定日期的三天
|
|||
|
getDateList (dateStr) {
|
|||
|
const date = new Date(dateStr);
|
|||
|
let nextThreeDays = [];
|
|||
|
for (let i = 0; i < 3; i++) {
|
|||
|
const day = new Date(date);
|
|||
|
day.setDate(day.getDate() + i);
|
|||
|
nextThreeDays.push(day.toISOString().split('T')[0]);
|
|||
|
}
|
|||
|
return nextThreeDays;
|
|||
|
},
|
|||
|
// 获取指定日期的上一天几下一天
|
|||
|
getNewDate (str, isPurchaseDate, beforeDay) {
|
|||
|
const date = new Date(str);
|
|||
|
let day = '';
|
|||
|
if (isPurchaseDate == '1') {
|
|||
|
let now = new Date();
|
|||
|
day = new Date(now.setDate(now.getDate() + beforeDay))
|
|||
|
} else day = new Date();
|
|||
|
if (date.toISOString().split('T')[0] == day.toISOString().split('T')[0]) {// 选择的当天
|
|||
|
return this.getDateList(date)
|
|||
|
} else {// 选择的之后日期
|
|||
|
let arr = [];
|
|||
|
const res = new Date(date);
|
|||
|
let prev = new Date(res.setDate(res.getDate() - 1));
|
|||
|
let next = new Date(res.setDate(res.getDate() + 2));
|
|||
|
arr = [prev.toISOString().split('T')[0], date.toISOString().split('T')[0], next.toISOString().split('T')[0]]
|
|||
|
return arr;
|
|||
|
}
|
|||
|
},
|
|||
|
// 截取年月日
|
|||
|
splitDate (str) {
|
|||
|
let newstr = str.substr(0, 10);
|
|||
|
let arr = newstr.split('-');
|
|||
|
return arr[0] + '年' + arr[1] + '月' + arr[2] + '日 ' + str.substr(11, str.length - 1);
|
|||
|
},
|
|||
|
// 截取年月
|
|||
|
splitDates (str) {
|
|||
|
let newstr = str.substr(0, 10);
|
|||
|
let arr = newstr.split('-');
|
|||
|
return arr[0] + '年' + arr[1] + '月';
|
|||
|
},
|
|||
|
// 数组分类
|
|||
|
resetArr (arr, key) {
|
|||
|
let tempArr = [];// 分类属性项
|
|||
|
var newArr = [];
|
|||
|
arr.forEach((i, index) => {
|
|||
|
if (tempArr.indexOf(i[key]) === -1) {
|
|||
|
newArr.push({
|
|||
|
time: i[key],
|
|||
|
data: [i]
|
|||
|
});
|
|||
|
tempArr.push(i[key]);
|
|||
|
} else {
|
|||
|
newArr[tempArr.indexOf(i[key])].data.push(i)
|
|||
|
}
|
|||
|
});
|
|||
|
return newArr;
|
|||
|
},
|
|||
|
setImgUrl (image) {
|
|||
|
return image ? (httpConfig.url + image) : ''
|
|||
|
},
|
|||
|
replaceImg (a) {
|
|||
|
let returnstr = a;
|
|||
|
if (a) {
|
|||
|
// a 为富文本的字符串内容,为了测试,只写了img标签
|
|||
|
var b = /<img [^>]*src=['"]([^'"]+)[^>]*>/g;// img 标签取src里面内容的正则
|
|||
|
var s = a.match(b);// 取到所有img标签 放到数组 s里面
|
|||
|
if (s) {
|
|||
|
for (var i = 0; i < s.length; i++) {
|
|||
|
var srcImg = s[i].replace(b, '$1');//取src面的内容
|
|||
|
if (srcImg.slice(0, 4) == 'http' || srcImg.slice(0, 5) == 'https' || srcImg.slice(0, 10) == 'data:image') {
|
|||
|
//若src前4位置或者前5位是http、https则不做任何修改
|
|||
|
} else {
|
|||
|
//修改富文本字符串内容 img标签src 相对路径改为绝对路径
|
|||
|
let str = srcImg.substr(9, srcImg.length - 1);
|
|||
|
returnstr = returnstr.replace(new RegExp(srcImg, 'g'), httpConfig.url + str);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
console.log(returnstr)
|
|||
|
return returnstr;
|
|||
|
},
|
|||
|
getDistance(lat1, lng1, lat2, lng2) {
|
|||
|
var radLat1 = toRadians(lat1);
|
|||
|
var radLat2 = toRadians(lat2);
|
|||
|
var deltaLat = radLat1 - radLat2;
|
|||
|
var deltaLng = toRadians(lng1) - toRadians(lng2);
|
|||
|
var dis = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(deltaLat / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(deltaLng / 2), 2)));
|
|||
|
let dd = (dis * 6378137).toFixed(0);
|
|||
|
if(+dd>1000){
|
|||
|
return (dd/1000).toFixed(2)+'km';
|
|||
|
}else{
|
|||
|
return dd+'m';
|
|||
|
}
|
|||
|
function toRadians(d) {
|
|||
|
return d * Math.PI / 180;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|