成都SKP导视横版
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

140 lines
3.9 KiB

/**
*随机数
* @param {number} max
* @param {number} min
* @returns {number}
*/
export const randomNumber = (min: number, max: number): number => Math.floor(min + Math.random() * (max - min + 1))
/**
*手机号
* @param {string} phone
* @returns {boolean}
*/
export const checkPhoneNumber = (phone: string): boolean => /^(?:(?:\+|00)86)?1[3-9]\d{9}$/.test(phone)
/**
* 大写字母
* @param {string} str
* @returns {boolean}
*/
export const isUppercaseWord = (str: string): boolean => /^[A-Z]+$/.test(str)
/**
* 中文
* @param {string} str
* @returns {boolean}
*/
export const isZhWord = (str: string): boolean => {
return /^(?:[\u3400-\u4DB5\u4E00-\u9FEA\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0])+$/.test(
str
)
}
/**
* 数字
* @param {string} str
* @returns {boolean}
*/
export const isNumber = (str: string): boolean => {
return /^\d+$/.test(str)
}
/**
*车牌
* @param {string} str
* @returns {boolean}
*/
export const isLicensePlate = (str: string): boolean => {
return /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-HJ-NP-Z][A-HJ-NP-Z0-9]{4,5}[A-HJ-NP-Z0-9挂学警港澳]$/.test(
str
)
}
/**
*数组对象去重
* @param {Array} array
* @param {string} key
* @returns {Array<{}>}
*/
export const uniqBy = <T extends object, K extends keyof T>(array: T[], key: K): T[] => {
const obj: any = {}
const arraySet = array.reduce<T[]>((item, next) => {
obj[next[key]] ? '' : (obj[next[key]] = true && item.push(next))
return item
}, [])
return arraySet
}
/**
*未来几天的时间 默认一周
* @param {number} len 时间长度
* @returns {Array<{ week: string; customDate: string }>}
*/
export const futureDate = (len = 7): Array<{ week: string; customDate: string }> => {
const threeDay = ['今天', '明天', '后天']
//获取系统当前时间
const now = new Date()
const nowTime = now.getTime()
const oneDayTime = 24 * 60 * 60 * 1000
const timeArr = []
for (let i = 0; i < len; i++) {
//显示星期
const showTime = nowTime + i * oneDayTime
//初始化日期时间
const myDate = new Date(showTime)
const month = myDate.getMonth() + 1
const date = myDate.getDate()
const str = '周' + '日一二三四五六'.charAt(myDate.getDay())
const _date = `${month.toString().padStart(2, '0')}-${date.toString().padStart(2, '0')}`
timeArr.push({
week: i < 3 ? threeDay[i] : str,
customDate: _date
})
}
return timeArr
}
/**
*格式化日期
* @param {Date} date
* @param {string} format y.m.d y/m/d y-m-d
* @returns {string}
*/
export const formatDay = (date: Date, format: 'y.m.d' | 'y/m/d' | 'y-m-d' = 'y-m-d'): string => {
const year = date.getFullYear()
const month = String(date.getMonth() + 1).padStart(2, '0')
const week = String(date.getDate()).padStart(2, '0')
if (format === 'y.m.d') {
return `${year}.${month}.${week}`
}
if (format === 'y/m/d') {
return `${year}/${month}/${week}`
}
return `${year}-${month}-${week}`
}
//判断当前系统
export const isAndroid = () => {
const userAgent = navigator.userAgent
const agents = ['Android', 'iPhone', 'iPad'] as const
return agents.some(item => userAgent.includes(item))
}
//指定key的图片类型加上前缀
export const addPrefixByRecursive = (data: any[], prefix = '/static/offline', exp = /\.(png|jpg|jpeg|JPG|PNG|MP4|mp4)$/) => {
if (data && typeof data === 'object') {
for (const key in data) {
if (typeof data[key] === 'string' && exp.test(data[key])) {
data[key] = prefix + data[key].replace(/\\/g, '/')
}
if (data[key] && typeof data[key] === 'object') {
addPrefixByRecursive(data[key])
}
}
}
return data
}