// 使用说明查看 README.md let commonJs = {} // 1、深拷贝 commonJs.deepMerge = (target, source) => { // 判断被拷贝对象是Object // 陷阱!!typeof(null) === 'object' true if (typeof (target) !== 'object' || target === null) { target = {} } // 开始拷贝 // 拷贝者需要为一个Object if (source !== null && typeof (source) === 'object') { for (var name in source) { // 获取被拷贝对象的同名键值 var src = target[name] // 拷贝对象的键值 var copy = source[name] // 防止环引用 // 如果拷贝对象的键值===被拷贝对象 // 被拷贝对象可以通过自身的键不停的去找到自身,形成死循环 if (target === copy) { continue } if (typeof (copy) === 'object' && copy !== null) { if (Array.isArray(copy)) { src = src && Array.isArray(src) ? src : [] } else { src = src && typeof (src) === 'object' && !Array.isArray(src) ? src : {} } target[name] = commonJs.deepMerge(src, copy) } else { target[name] = copy } } } return target } ///2、获取地址栏参数 commonJs.getUrl = (obj, bool) => { let urlObj = {} let str = location.href if (str.indexOf('?') != -1) { // 获取地址栏参数 let num = str.indexOf("?") str = str.substr(num + 1) let arr = str.split("&") arr.forEach(item => { let query = item.split("=") if (query[0]) { urlObj[query[0]] = JSON.parse(decodeURI(query[1])) } }) // 设置回调值 if (!obj) { return urlObj } if (typeof(obj) == 'string') { // obj为字符串时,bool表示希望得到的值类型:Number(数字类型)、String(字符串类型),默认 String if (bool) { return bool(urlObj[obj]) } else { return urlObj[obj] } } else { if (bool) { // 仅return传递的参数 let onlyObj = {} obj.forEach(key => { if (typeof(key.name) == 'string') { // name为字符串 if (urlObj[key.name] !== undefined) { if (key.type) { onlyObj[key.name] = key.type(urlObj[key.name]) } else { onlyObj[key.name] = urlObj[key.name] } } } else { // name为数组 onlyObj[key.concat] = [] key.name.forEach(item => { if (urlObj[item]) { onlyObj[key.concat].push(urlObj[item]) } }) } }) return onlyObj } else { // 非仅return传递的参数 obj.forEach(key => { if (typeof(key.name) == 'string') { // name为string if (urlObj[key.name] !== undefined) { if (key.type) { urlObj[key.name] = key.type(urlObj[key.name]) } else { urlObj[key.name] = urlObj[key.name] } if (key.delete) { delete urlObj[key.name] } } } else { // name为数组 urlObj[key.concat] = [] key.name.forEach(item => { if (urlObj[item]){ if (key.type) { urlObj[key.concat].push(key.type(urlObj[item])) } else { urlObj[key.concat].push(urlObj[item]) } } }) } }) return urlObj } } } else { if (typeof(obj) == 'string') { return '' } else { return {} } } } // 3、删除空字段 commonJs.deleteEmpty = (obj, config) => { let objKey = JSON.parse(JSON.stringify(obj)) Object.keys(objKey).forEach((key) => { if (objKey[key] === '' || objKey[key] === null) { delete objKey[key] } }) return objKey } ///4、拼接地址栏参数 commonJs.queryConcat = (obj, config) => { let query = '' let reg = new RegExp("[\\u4E00-\\u9FFF]+","g") for (let key in obj) { if (reg.test(obj[key])) { if (!config || config[key].isJSON) { obj[key] = JSON.stringify(obj[key]) } } query += `&${key}=${obj[key]}` } if (query) query = query.replace(/&/, '?') return query } // 5、页面回到顶部 commonJs.backTop = (obj, config) => { obj = obj || {} window.parent.scrollTo({ top: obj.top || 0, behavior: obj.behavior || 'smooth' }) } ///6、获取当前日期时间 commonJs.getDate = (config) => { let obj = config || {} if (!obj.symbol) obj.symbol = '-' // 分隔符 if (obj.zero === undefined) obj.zero = true // 加 0 if (!obj.month) obj.month = 1 // 前n月,默认 1 if (!obj.day) obj.day = 1 // 前n天,默认 1 if(!obj.week) obj.week = 1 // 前n周,默认 1 obj.zero = obj.zero ? '0' : '' const dateObj = ['nowTime', 'beforeDayTime', 'beforeWeekTime', 'beforeTime'] // 设置时间 const formatTime = () => { let timeObj = {} dateObj.forEach((item, index) => { let date = new Date() switch(index) { case 1: // 前n天时间获取 date = new Date(date.getTime() - obj.day * 24 * 3600 * 1000) break; case 2: // 前n周时间获取 date = new Date(date.getTime() - (obj.week * 7) * 24 * 3600 * 1000) break; case 3: // 前n月时间获取 date.setMonth(date.getMonth() - obj.month) break; } let year = date.getFullYear() let month = date.getMonth() + 1 let day = date.getDate() let hour = date.getHours() let minute = date.getMinutes() let second = date.getSeconds() let dateMonth = [year, month].map(formatNumber).join(obj.symbol) let datePicker = [year, month, day].map(formatNumber).join(obj.symbol) let timePicker = [hour, minute, second].map(formatNumber).join(':') timeObj[item] = { year: year, // 年 month: month, // 月 day: day, // 日 hour: hour, // 时 minute: minute, // 分 second: second, // 秒 dateMonth: dateMonth, // 年月 datePicker: datePicker, // 日期 timePicker: timePicker, // 时间 dateTimePicker: `${datePicker} ${timePicker}`, // 日期时间 dateStamp: new Date(datePicker).getTime() / 1000, // 日期时间戳 dateTimeStamp: new Date(`${datePicker} ${timePicker}`).getTime() / 1000, // 日期时间时间戳 } }) return timeObj } // 小于10时是否加0 const formatNumber = n => { n = n.toString() return n[1] ? n : obj.zero + n } return formatTime() } export default commonJs