1. 深拷贝
export function cloneDeep(obj) {
// 当null NaN undefined number string等基本数据类型时直接返回
if (obj === null || typeof obj !== 'object') {
return obj
}
// Date类型
if (obj instanceof Date) {
console.log(obj);
const copy = new Date()
copy.setTime(obj.getTime())
return copy
}
// 正则类型类型
if (obj instanceof RegExp) {
const Constructor = obj.constructor
return new Constructor(obj)
}
// 如果是数组等引用数据类型
if (obj instanceof Array || obj instanceof Object) {
const copyObj = Array.isArray(obj) ? [] : {}
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
copyObj[key] = cloneDeep(obj[key])
}
}
return copyObj
}
}
2. 获取label值
//根据常量value获取常量label
/**
* 获取label值
* @param {string} str
* @param {Array} arr
* @param {string} label
* @param {string | number} value
*/
export function getLabel(str, arr, label = 'label', value = 'value') {
if (!String(str)) return ''
const newObj = arr.find(item => String(item[value]) === String(str))
const returnValue = newObj ? newObj[label] : ''
return returnValue
}
3. 下载文件
export function downFile(url, name) {
const link = document.createElement('a')
link.href = url
link.target = '_blank'
link.setAttribute('download', name) // 下载文件的名称及文件类型后缀
document.body.appendChild(link)
link.click()
document.body.removeChild(link) // 下载完成移除元素
}
4. 验证身份证是否有效
// 验证身份证
export const validateIdCard = (rule, value, callback) => {
const reg = /^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[X])$)$/;
if (value == '' || value == undefined || value == null) {
callback();
} else {
if ((!reg.test(value)) && value != '') {
callback(new Error('请输入正确的身份证号码'));
} else {
callback();
}
}
}
5. 各种验证
// 正整数
export const isInteger = (rule, value, callback) => {
if (!value) {
return callback(new Error('输入不可以为空'));
}
if (!Number(value)) {
callback(new Error('请输入正整数'));
} else {
const re = /^[0-9]*[1-9][0-9]*$/;
const rsCheck = re.test(value);
if (!rsCheck) {
callback(new Error('请输入正整数'));
} else {
callback();
}
}
}
// 数字能为小数
export const decimal = (rule, value, callback) => {
if (!/(^[1-9]([0-9]+)?(.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9].[0-9]([0-9])?$)/.test(value)) {
callback(new Error('最多两位小数'));
} else if(Number(value) < 0) {
callback(new Error('需要大于0'));
} else {
callback();
}
}
// 验证手机号
export const validatePhone = (rule, value, callback) => {
const reg = /^1[3|4|5|6|7|8|9]\d{9}$/;
if (value == '' || value == undefined || value == null) {
callback();
} else {
if ((!reg.test(value)) && value != '') {
callback(new Error('请输入正确的电话号码'));
} else {
callback();
}
}
}