生成UUID
export function getUid ( ) { return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx' . replace ( / [xy] / g , ( c ) => { const r = ( Math. random ( ) * 16 ) | 0 ; const v = c === 'x' ? r : ( r & 0x3 ) | 0x8 ; return v. toString ( 16 ) ; } ) ;
}
计算时间差
export function dealTime ( beginTime, endTime ) { let dateBegin = beginTime ? new Date ( beginTime) : new Date ( ) ; let dateEnd = endTime ? new Date ( endTime) : new Date ( ) ; let dateDiff = dateEnd. getTime ( ) - dateBegin. getTime ( ) ; let day = Math. floor ( dateDiff / ( 24 * 3600 * 1000 ) ) ; let leave1 = dateDiff % ( 24 * 3600 * 1000 ) ; let hours = Math. floor ( leave1 / ( 3600 * 1000 ) ) ; let leave2 = leave1 % ( 3600 * 1000 ) ; let minutes = Math. floor ( leave2 / ( 60 * 1000 ) ) ; let leave3 = leave2 % ( 60 * 1000 ) ; let seconds = Math. round ( leave3 / 1000 ) ; return { day, hours, minutes, seconds}
}
获取当天时间
export function getCurDay ( ) { let datetime = new Date ( ) ; let year = datetime. getFullYear ( ) ; let month = datetime. getMonth ( ) + 1 < 10 ? "0" + ( datetime. getMonth ( ) + 1 ) : datetime. getMonth ( ) + 1 ; let date = datetime. getDate ( ) < 10 ? "0" + datetime. getDate ( ) : datetime. getDate ( ) ; return ` ${ year} - ${ month} - ${ date} `
}
日期格式处理
export function formatDate ( date ) { let year = date. getFullYear ( ) ; let months = date. getMonth ( ) + 1 ; let month = ( months < 10 ? '0' + months : months) . toString ( ) ; let day = ( date. getDate ( ) < 10 ? '0' + date. getDate ( ) : date. getDate ( ) ) . toString ( ) ; return { year : year. toString ( ) , month, day}
}
获取当前天时间
export function getCurrentDate ( target, param = 's' ) { let now = target ? new Date ( target) : new Date ( ) ; let year = now. getFullYear ( ) ; let month = now. getMonth ( ) ; let date = now. getDate ( ) ; let day = now. getDay ( ) ; let hour = now. getHours ( ) ; let minu = now. getMinutes ( ) ; let sec = now. getSeconds ( ) ; month = month + 1 ; if ( month < 10 ) month = "0" + month; if ( date < 10 ) date = "0" + date; if ( hour < 10 ) hour = "0" + hour; if ( minu < 10 ) minu = "0" + minu; if ( sec < 10 ) sec = "0" + sec; const arr = { 'Y' : year, 'M' : year + "-" + month, 'D' : year + "-" + month + "-" + date, 'h' : year + "-" + month + "-" + date + " " + hour, 'm' : year + "-" + month + "-" + date + " " + hour + ":" + minu, 's' : year + "-" + month + "-" + date + " " + hour + ":" + minu + ":" + sec} return arr[ param] ;
}
获取当天时间前后七天时间
export function getRecentDate ( day ) { let date1 = new Date ( ) , time1 = date1. getFullYear ( ) + "-" + ( date1. getMonth ( ) + 1 ) + "-" + date1. getDate ( ) ; let date2 = new Date ( date1) ; date2. setDate ( date1. getDate ( ) + day) ; const y = date2. getFullYear ( ) ; const m = ( date2. getMonth ( ) + 1 ) > 9 ? ( date2. getMonth ( ) + 1 ) : '0' + ( date2. getMonth ( ) + 1 ) const d = date2. getDate ( ) > 9 ? date2. getDate ( ) : '0' + date2. getDate ( ) return y + "-" + m + "-" + d;
}
数组中,某个属性相同的数据放在一块,如把某个日期相同的相连一起
export function margePropData ( list = [ ] , prop ) { let arr = [ ] , tempArr = { } ; list. forEach ( item => { if ( ! tempArr[ item[ prop] ] ) { tempArr[ item[ prop] ] = [ item] } else { tempArr[ item[ prop] ] . push ( item) } } ) for ( const tempArrKey in tempArr) { arr = [ ... arr, ... tempArr[ tempArrKey] ] } return arr
}
合并行
export function mergeRows ( list = [ ] , prop ) { list. forEach ( ele => { ele. rowspan = 1 } ) const len = list. lengthfor ( let i = 0 ; i < len; i++ ) { for ( let j = i + 1 ; j < len; j++ ) { if ( list[ i] [ prop] === list[ j] [ prop] ) { list[ i] . rowspan++ list[ j] . rowspan-- } } i = i + list[ i] . rowspan - 1 } return list
}
根据当前数据的位置,在数组中插入数据
export function insertArrPositionOfIndex ( list = [ ] , index = 0 , target = { } ) { const leftList = list. filter ( ( t, i ) => i < index) ; const rightList = list. filter ( ( t, i ) => i >= index) ; return [ ... leftList, target, ... rightList]
}
获取元素下标
export function findArrIndex ( dir = 1 ) { return function ( array, cb, context ) { let length = array. length; let index = dir >= 0 ? 0 : length - 1 ; for ( ; index >= 0 && index <= length - 1 ; index += dir) { if ( cb . call ( context, array[ index] , index) ) return index} return - 1 }
}
map转换成数组
export function MapConvertArr ( target = { } ) { let list = [ ] ; for ( let key in target) { list. push ( target[ key] ) ; } return list;
}
对象数组去重
export function arrayDeduplication ( arr, prop ) { let map = new Map ( ) ; return arr. filter ( item => ! map. has ( item[ prop] ) && map. set ( item[ prop] , 1 ) ) ;
}
防抖
export function MyDebounce ( fn, duration = 100 ) { let timer = null return ( ... args) => { clearTimeout ( timer) timer = setTimeout ( ( ) => { fn ( ... args) ; } , duration) }
}
节流
export function MyThrottle ( fn, duration = 100 ) { let target = true ; return ( ... arg) => { if ( ! target) { return false ; } target = false ; setTimeout ( ( ) => { fn ( ... arg) ; target = true } , duration) }
}
单例模式
export function singleton ( className ) { let ins; return new Proxy ( className, { construct ( target, args ) { if ( ! ins) { ins = new target ( ... args) } return ins; } } )
}
校验规则 表单提交校验
export function verifyRules ( list = [ ] , require = [ ] ) { let message = null for ( const key of require) { const isEmpty = list. every ( it => ! it[ key. prop] ) if ( isEmpty) { message = key. messagebreak ; } } return message
}
输入框校验
校验输入最大数字长度 校验保留几位小数 校验手机号 校验邮箱 校验身份证
export function regInput ( target, rule = 'num_5' , reg) { if ( rule. includes ( 'num_' ) ) { const endNum = rule. split ( "_" ) [ 1 ] ; target = target. replace ( / [^\d.] / g , "" ) . replace ( "." , "" ) ; if ( endNum < 1 ) { throw new Error ( ` 规则: ${ rule} 最小为1 ` ) } reg = reg || new RegExp ( ` ^[1-9]\\d{0, ${ ( + endNum - 1 ) } }$ ` ) ; if ( reg. test ( target) ) { return target; } return target. slice ( 0 , endNum) ; } else if ( rule. includes ( 'decimal_' ) ) { target = target. replace ( / [^\d.] / g , "" ) ; target = target. replace ( / \.{2,} / g , "" ) . replace ( "." , "$#$" ) . replace ( / \. / g , "" ) . replace ( "$#$" , "." ) ; const endDecimal = rule. split ( "_" ) [ 1 ] ; let regStr = '' for ( let i = 0 ; i < endDecimal; i++ ) { regStr += '\\d' ; } reg = reg || new RegExp ( ` ^(\\-)*(\\d+)\\.( ${ regStr} ).*$ ` ) if ( endDecimal > 0 ) { return target. replace ( reg, '$1$2.$3' ) } else { return target. replace ( / ^(\-)*(\d+).*$ / , '$1$2' ) ; } } else if ( rule. includes ( 'phone' ) ) { reg = reg || / ^1[3456789]\d{9}$ / ; return reg. test ( target) ; } else if ( rule. includes ( 'email' ) ) { reg = reg || / ^\w+[@]\w{2,5}([.]\w{2,3}){1,3}$ / i ; return reg. test ( target) ; } else if ( rule. includes ( 'IDCard' ) ) { reg = reg || / ^[1-9]\d{5}(19\d{2}|20\d{2})(0[1-9]|1[0-2])(0[1-9]|[1-2]\d|3[0-1])\d{3}(\d|x|X)$ / ; if ( reg. test ( target) ) { let idCard_array = target. split ( "" ) ; let factor = [ 7 , 9 , 10 , 5 , 8 , 4 , 2 , 1 , 6 , 3 , 7 , 9 , 10 , 5 , 8 , 4 , 2 ] ; let checkCode = [ "1" , "0" , "X" , "9" , "8" , "7" , "6" , "5" , "4" , "3" , "2" ] ; let checkSum = 0 ; for ( let i = 0 ; i < factor. length; i++ ) { checkSum += factor[ i] * parseInt ( idCard_array[ i] ) ; } let mod = checkSum % 11 ; return checkCode[ mod] === idCard_array[ 17 ] . toLowerCase ( ) ; } return false ; } return target; }