生成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. length
for ( 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. message
break ;
}
}
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 || / ^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+ / ;
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;
}