|
@@ -1,9 +1,9 @@
|
|
|
export const forEach = (arr, fn) => {
|
|
|
if (!arr.length || !fn) return
|
|
|
let i = -1
|
|
|
- let len = arr.length
|
|
|
+ const len = arr.length
|
|
|
while (++i < len) {
|
|
|
- let item = arr[i]
|
|
|
+ const item = arr[i]
|
|
|
fn(item, i, arr)
|
|
|
}
|
|
|
}
|
|
@@ -14,9 +14,9 @@ export const forEach = (arr, fn) => {
|
|
|
* @description 得到两个数组的交集, 两个数组的元素为数值或字符串
|
|
|
*/
|
|
|
export const getIntersection = (arr1, arr2) => {
|
|
|
- let len = Math.min(arr1.length, arr2.length)
|
|
|
+ const len = Math.min(arr1.length, arr2.length)
|
|
|
let i = -1
|
|
|
- let res = []
|
|
|
+ const res = []
|
|
|
while (++i < len) {
|
|
|
const item = arr2[i]
|
|
|
if (arr1.indexOf(item) > -1) res.push(item)
|
|
@@ -108,17 +108,17 @@ const getDate = (timeStamp, startType) => {
|
|
|
export const formtDate = (timeStamp, fmt) => {
|
|
|
const d = new Date(timeStamp)
|
|
|
var o = {
|
|
|
- 'M+': d.getMonth() + 1, // 月份
|
|
|
- 'd+': d.getDate(), // 日
|
|
|
- 'h+': d.getHours(), // 小时
|
|
|
- 'm+': d.getMinutes(), // 分
|
|
|
- 's+': d.getSeconds(), // 秒
|
|
|
- 'q+': Math.floor((d.getMonth() + 3) / 3), // 季度
|
|
|
- 'S': d.getMilliseconds() // 毫秒
|
|
|
- }
|
|
|
- if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (d.getFullYear() + '').substr(4 - RegExp.$1.length))
|
|
|
- for (var k in o) { if (new RegExp('(' + k + ')').test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length))) }
|
|
|
- return fmt
|
|
|
+ 'M+': d.getMonth() + 1, // 月份
|
|
|
+ 'd+': d.getDate(), // 日
|
|
|
+ 'h+': d.getHours(), // 小时
|
|
|
+ 'm+': d.getMinutes(), // 分
|
|
|
+ 's+': d.getSeconds(), // 秒
|
|
|
+ 'q+': Math.floor((d.getMonth() + 3) / 3), // 季度
|
|
|
+ 'S': d.getMilliseconds() // 毫秒
|
|
|
+ }
|
|
|
+ if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (d.getFullYear() + '').substr(4 - RegExp.$1.length))
|
|
|
+ for (var k in o) { if (new RegExp('(' + k + ')').test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length))) }
|
|
|
+ return fmt
|
|
|
}
|
|
|
/**
|
|
|
* @param {String|Number} timeStamp 时间戳
|
|
@@ -160,22 +160,46 @@ export const formatSubmitDate = (val, type) => {
|
|
|
if (val == null || val == '' || val == undefined) {
|
|
|
return ''
|
|
|
} else {
|
|
|
- let _date = new Date(val)
|
|
|
- let _year = _date.getFullYear()
|
|
|
- let _montn = (_date.getMonth() + 1) < 10 ? '0' + (_date.getMonth() + 1) : (_date.getMonth() + 1)
|
|
|
- let _day = _date.getDate() < 10 ? '0' + _date.getDate() : _date.getDate()
|
|
|
- let _hour = _date.getHours() < 10 ? '0' + _date.getHours() : _date.getHours()
|
|
|
- let _minutes = _date.getMinutes() < 10 ? '0' + _date.getMinutes() : _date.getMinutes()
|
|
|
- let _seconds = _date.getSeconds() < 10 ? '0' + _date.getSeconds() : _date.getSeconds()
|
|
|
+ const _date = new Date(val)
|
|
|
+ const _year = _date.getFullYear()
|
|
|
+ const _montn = (_date.getMonth() + 1) < 10 ? '0' + (_date.getMonth() + 1) : (_date.getMonth() + 1)
|
|
|
+ const _day = _date.getDate() < 10 ? '0' + _date.getDate() : _date.getDate()
|
|
|
+ const _hour = _date.getHours() < 10 ? '0' + _date.getHours() : _date.getHours()
|
|
|
+ const _minutes = _date.getMinutes() < 10 ? '0' + _date.getMinutes() : _date.getMinutes()
|
|
|
+ const _seconds = _date.getSeconds() < 10 ? '0' + _date.getSeconds() : _date.getSeconds()
|
|
|
|
|
|
if (type == 'minutes') return _year + '-' + _montn + '-' + _day + ' ' + _hour + ':' + _minutes
|
|
|
else if (type == 'seconds') return _year + '-' + _montn + '-' + _day + ' ' + _hour + ':' + _minutes + ':' + _seconds
|
|
|
else return _year + '-' + _montn + '-' + _day
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+// 判断两个时间段是否相差m个月 time1,time2均为日期类型,time1为前时间,time2为后时间
|
|
|
+export const completeDate = function (times1, times2, m) {
|
|
|
+ const time1 = new Date(times1)
|
|
|
+ const time2 = new Date(times2)
|
|
|
+ var diffyear = time2.getFullYear() - time1.getFullYear()
|
|
|
+ var diffmonth = diffyear * 12 + time2.getMonth() - time1.getMonth()
|
|
|
+ if (diffmonth < 0) {
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ var diffDay = time2.getDate() - time1.getDate()
|
|
|
+ if (diffmonth < m || (diffmonth == m && diffDay <= 0)) {
|
|
|
+ if (diffmonth == m && diffDay == 0) {
|
|
|
+ var timeA = time1.getHours() * 3600 + 60 * time1.getMinutes() + time1.getSeconds()
|
|
|
+ var timeB = time2.getHours() * 3600 + 60 * time2.getMinutes() + time2.getSeconds()
|
|
|
+ if (timeB - timeA > 0) {
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return true
|
|
|
+ }
|
|
|
+ return false
|
|
|
+}
|
|
|
+
|
|
|
// 正则验证车牌,验证通过返回true,不通过返回false
|
|
|
export const isLicensePlate = function (str) {
|
|
|
- return /^(([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z](([0-9]{5}[DF])|([DF]([A-HJ-NP-Z0-9])[0-9]{4})))|([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z][A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳使领]))$/.test(str)
|
|
|
+ return /^(([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z](([0-9]{5}[DF])|([DF]([A-HJ-NP-Z0-9])[0-9]{4})))|([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z][A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳使领]))$/.test(str)
|
|
|
}
|
|
|
// 车牌可输入字符
|
|
|
export const isCarNumber = function (str) {
|
|
@@ -184,6 +208,12 @@ export const isCarNumber = function (str) {
|
|
|
|
|
|
return _value
|
|
|
}
|
|
|
+
|
|
|
+// 校验手机号
|
|
|
+export const isMobile = function (str) {
|
|
|
+ return /^[0-9]{11}$/.test(str)
|
|
|
+}
|
|
|
+
|
|
|
// 小数点后两位
|
|
|
export const numberToFixed = function (val, num) {
|
|
|
let _value = val + ''
|
|
@@ -267,7 +297,7 @@ export const off = (function () {
|
|
|
export const hasKey = (obj, key) => {
|
|
|
if (key) return key in obj
|
|
|
else {
|
|
|
- let keysArr = Object.keys(obj)
|
|
|
+ const keysArr = Object.keys(obj)
|
|
|
return keysArr.length
|
|
|
}
|
|
|
}
|
|
@@ -301,7 +331,7 @@ export const removeListById = (id, list) => {
|
|
|
* @description 遍历赋值
|
|
|
*/
|
|
|
export const objExtend = (obj1, obj2) => {
|
|
|
- for (var a in obj1){
|
|
|
+ for (var a in obj1) {
|
|
|
obj2[a] = obj1[a]
|
|
|
}
|
|
|
return obj2
|
|
@@ -311,8 +341,8 @@ export const objExtend = (obj1, obj2) => {
|
|
|
* @description 浅拷贝
|
|
|
*/
|
|
|
export const cloneObj = (obj) => {
|
|
|
- let ret = {}
|
|
|
- for (var a in obj){
|
|
|
+ const ret = {}
|
|
|
+ for (var a in obj) {
|
|
|
ret[a] = obj[a]
|
|
|
}
|
|
|
return ret
|
|
@@ -322,98 +352,98 @@ export const cloneObj = (obj) => {
|
|
|
* 校验身份证号合法性
|
|
|
*/
|
|
|
export const checkIdNumberValid = (tex) => {
|
|
|
- // var tip = '输入的身份证号有误,请检查后重新输入!'
|
|
|
- let num = tex
|
|
|
- num = num.toUpperCase()
|
|
|
+ // var tip = '输入的身份证号有误,请检查后重新输入!'
|
|
|
+ let num = tex
|
|
|
+ num = num.toUpperCase()
|
|
|
|
|
|
- let len = num.length
|
|
|
- let re
|
|
|
- if (len == 0) return true
|
|
|
+ const len = num.length
|
|
|
+ let re
|
|
|
+ if (len == 0) return true
|
|
|
|
|
|
- // 身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X。
|
|
|
- if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num))){
|
|
|
- return false
|
|
|
- }
|
|
|
+ // 身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X。
|
|
|
+ if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num))) {
|
|
|
+ return false
|
|
|
+ }
|
|
|
|
|
|
- // 验证前两位地区是否有效
|
|
|
- let aCity = {11: '北京',
|
|
|
-12: '天津',
|
|
|
-13: '河北',
|
|
|
-14: '山西',
|
|
|
-15: '内蒙古',
|
|
|
-21: '辽宁',
|
|
|
-22: '吉林',
|
|
|
-23: '黑龙江',
|
|
|
-31: '上海',
|
|
|
-32: '江苏',
|
|
|
-33: '浙江',
|
|
|
-34: '安徽',
|
|
|
-35: '福建',
|
|
|
-36: '江西',
|
|
|
-37: '山东',
|
|
|
-41: '河南',
|
|
|
-42: '湖北',
|
|
|
-43: '湖南',
|
|
|
-44: '广东',
|
|
|
-45: '广西',
|
|
|
-46: '海南',
|
|
|
-50: '重庆',
|
|
|
-51: '四川',
|
|
|
-52: '贵州',
|
|
|
-53: '云南',
|
|
|
-54: '西藏',
|
|
|
-61: '陕西',
|
|
|
-62: '甘肃',
|
|
|
-63: '青海',
|
|
|
-64: '宁夏',
|
|
|
-65: '新疆',
|
|
|
-71: '台湾',
|
|
|
-81: '香港',
|
|
|
-82: '澳门',
|
|
|
-91: '国外'}
|
|
|
-
|
|
|
- if (aCity[parseInt(num.substr(0, 2))] == null){
|
|
|
- return false
|
|
|
- }
|
|
|
+ // 验证前两位地区是否有效
|
|
|
+ const aCity = { 11: '北京',
|
|
|
+ 12: '天津',
|
|
|
+ 13: '河北',
|
|
|
+ 14: '山西',
|
|
|
+ 15: '内蒙古',
|
|
|
+ 21: '辽宁',
|
|
|
+ 22: '吉林',
|
|
|
+ 23: '黑龙江',
|
|
|
+ 31: '上海',
|
|
|
+ 32: '江苏',
|
|
|
+ 33: '浙江',
|
|
|
+ 34: '安徽',
|
|
|
+ 35: '福建',
|
|
|
+ 36: '江西',
|
|
|
+ 37: '山东',
|
|
|
+ 41: '河南',
|
|
|
+ 42: '湖北',
|
|
|
+ 43: '湖南',
|
|
|
+ 44: '广东',
|
|
|
+ 45: '广西',
|
|
|
+ 46: '海南',
|
|
|
+ 50: '重庆',
|
|
|
+ 51: '四川',
|
|
|
+ 52: '贵州',
|
|
|
+ 53: '云南',
|
|
|
+ 54: '西藏',
|
|
|
+ 61: '陕西',
|
|
|
+ 62: '甘肃',
|
|
|
+ 63: '青海',
|
|
|
+ 64: '宁夏',
|
|
|
+ 65: '新疆',
|
|
|
+ 71: '台湾',
|
|
|
+ 81: '香港',
|
|
|
+ 82: '澳门',
|
|
|
+ 91: '国外' }
|
|
|
+
|
|
|
+ if (aCity[parseInt(num.substr(0, 2))] == null) {
|
|
|
+ return false
|
|
|
+ }
|
|
|
|
|
|
- // 当身份证为15位时的验证出生日期。
|
|
|
- if (len == 15){
|
|
|
- re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/)
|
|
|
- let arrSplit = num.match(re)
|
|
|
-
|
|
|
- // 检查生日日期是否正确
|
|
|
- let dtmBirth = new Date('19' + arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4])
|
|
|
- let bGoodDay = (dtmBirth.getYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]))
|
|
|
- if (!bGoodDay){
|
|
|
- return false
|
|
|
- }
|
|
|
+ // 当身份证为15位时的验证出生日期。
|
|
|
+ if (len == 15) {
|
|
|
+ re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/)
|
|
|
+ const arrSplit = num.match(re)
|
|
|
+
|
|
|
+ // 检查生日日期是否正确
|
|
|
+ const dtmBirth = new Date('19' + arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4])
|
|
|
+ const bGoodDay = (dtmBirth.getYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]))
|
|
|
+ if (!bGoodDay) {
|
|
|
+ return false
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
- // 当身份证号为18位时,校验出生日期和校验位。
|
|
|
- if (len == 18){
|
|
|
- re = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/)
|
|
|
- let arrSplit = num.match(re)
|
|
|
- // 检查生日日期是否正确
|
|
|
- let dtmBirth = new Date(arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4])
|
|
|
- let bGoodDay = (dtmBirth.getFullYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]))
|
|
|
- if (!bGoodDay){
|
|
|
- return false
|
|
|
- } else {
|
|
|
- // 检验18位身份证的校验码是否正确。
|
|
|
- // 校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
|
|
|
- let valnum
|
|
|
- let arrInt = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
|
|
|
- let arrCh = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
|
|
|
- let nTemp = 0
|
|
|
- let i
|
|
|
- for (i = 0; i < 17; i++){
|
|
|
- nTemp += num.substr(i, 1) * arrInt[i]
|
|
|
- }
|
|
|
- valnum = arrCh[nTemp % 11]
|
|
|
- if (valnum != num.substr(17, 1)){
|
|
|
- return false
|
|
|
- }
|
|
|
- }
|
|
|
+ // 当身份证号为18位时,校验出生日期和校验位。
|
|
|
+ if (len == 18) {
|
|
|
+ re = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/)
|
|
|
+ const arrSplit = num.match(re)
|
|
|
+ // 检查生日日期是否正确
|
|
|
+ const dtmBirth = new Date(arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4])
|
|
|
+ const bGoodDay = (dtmBirth.getFullYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]))
|
|
|
+ if (!bGoodDay) {
|
|
|
+ return false
|
|
|
+ } else {
|
|
|
+ // 检验18位身份证的校验码是否正确。
|
|
|
+ // 校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
|
|
|
+ let valnum
|
|
|
+ const arrInt = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
|
|
|
+ const arrCh = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
|
|
|
+ let nTemp = 0
|
|
|
+ let i
|
|
|
+ for (i = 0; i < 17; i++) {
|
|
|
+ nTemp += num.substr(i, 1) * arrInt[i]
|
|
|
+ }
|
|
|
+ valnum = arrCh[nTemp % 11]
|
|
|
+ if (valnum != num.substr(17, 1)) {
|
|
|
+ return false
|
|
|
+ }
|
|
|
}
|
|
|
- return true
|
|
|
+ }
|
|
|
+ return true
|
|
|
}
|