| 1 |
- {"remainingRequest":"/usr/local/develop/php/www/waibao/NN2022100801/NN2022100801/addons/admin/node_modules/babel-loader/lib/index.js!/usr/local/develop/php/www/waibao/NN2022100801/NN2022100801/addons/admin/src/libs/tools.js","dependencies":[{"path":"/usr/local/develop/php/www/waibao/NN2022100801/NN2022100801/addons/admin/src/libs/tools.js","mtime":1618306924000},{"path":"/usr/local/develop/php/www/waibao/NN2022100801/NN2022100801/addons/admin/node_modules/cache-loader/dist/cjs.js","mtime":1665684022107},{"path":"/usr/local/develop/php/www/waibao/NN2022100801/NN2022100801/addons/admin/node_modules/babel-loader/lib/index.js","mtime":1665684010704}],"contextDependencies":[],"result":["export const forEach = (arr, fn) => {\n if (!arr.length || !fn) return;\n let i = -1;\n let len = arr.length;\n\n while (++i < len) {\n let item = arr[i];\n fn(item, i, arr);\n }\n};\n/**\n * @param {Array} arr1\n * @param {Array} arr2\n * @description 得到两个数组的交集, 两个数组的元素为数值或字符串\n */\n\nexport const getIntersection = (arr1, arr2) => {\n let len = Math.min(arr1.length, arr2.length);\n let i = -1;\n let res = [];\n\n while (++i < len) {\n const item = arr2[i];\n if (arr1.indexOf(item) > -1) res.push(item);\n }\n\n return res;\n};\n/**\n * @param {Array} arr1\n * @param {Array} arr2\n * @description 得到两个数组的并集, 两个数组的元素为数值或字符串\n */\n\nexport const getUnion = (arr1, arr2) => {\n return Array.from(new Set([...arr1, ...arr2]));\n};\n/**\n * @param {Array} target 目标数组\n * @param {Array} arr 需要查询的数组\n * @description 判断要查询的数组是否至少有一个元素包含在目标数组中\n */\n\nexport const hasOneOf = (targetarr, arr) => {\n return targetarr.some(_ => arr.indexOf(_) > -1);\n};\n/**\n * @param {String|Number} value 要验证的字符串或数值\n * @param {*} validList 用来验证的列表\n */\n\nexport function oneOf(value, validList) {\n for (let i = 0; i < validList.length; i++) {\n if (value === validList[i]) {\n return true;\n }\n }\n\n return false;\n}\n/**\n * @param {Number} timeStamp 判断时间戳格式是否是毫秒\n * @returns {Boolean}\n */\n\nconst isMillisecond = timeStamp => {\n const timeStr = String(timeStamp);\n return timeStr.length > 10;\n};\n/**\n * @param {Number} timeStamp 传入的时间戳\n * @param {Number} currentTime 当前时间时间戳\n * @returns {Boolean} 传入的时间戳是否早于当前时间戳\n */\n\n\nconst isEarly = (timeStamp, currentTime) => {\n return timeStamp < currentTime;\n};\n/**\n * @param {Number} num 数值\n * @returns {String} 处理后的字符串\n * @description 如果传入的数值小于10,即位数只有1位,则在前面补充0\n */\n\n\nconst getHandledValue = num => {\n return num < 10 ? '0' + num : num;\n};\n/**\n * @param {Number} timeStamp 传入的时间戳\n * @param {Number} startType 要返回的时间字符串的格式类型,传入'year'则返回年开头的完整时间\n */\n\n\nconst getDate = (timeStamp, startType) => {\n const d = new Date(timeStamp * 1000);\n const year = d.getFullYear();\n const month = getHandledValue(d.getMonth() + 1);\n const date = getHandledValue(d.getDate());\n const hours = getHandledValue(d.getHours());\n const minutes = getHandledValue(d.getMinutes());\n const second = getHandledValue(d.getSeconds());\n let resStr = '';\n if (startType === 'year') resStr = year + '-' + month + '-' + date + ' ' + hours + ':' + minutes + ':' + second;else resStr = month + '-' + date + ' ' + hours + ':' + minutes;\n return resStr;\n};\n/**\n * @param {String|Number} timeStamp 时间戳\n * @returns {String} 相对时间字符串\n */\n\n\nexport const getRelativeTime = timeStamp => {\n // 判断当前传入的时间戳是秒格式还是毫秒\n const IS_MILLISECOND = isMillisecond(timeStamp); // 如果是毫秒格式则转为秒格式\n\n if (IS_MILLISECOND) Math.floor(timeStamp /= 1000); // 传入的时间戳可以是数值或字符串类型,这里统一转为数值类型\n\n timeStamp = Number(timeStamp); // 获取当前时间时间戳\n\n const currentTime = Math.floor(Date.parse(new Date()) / 1000); // 判断传入时间戳是否早于当前时间戳\n\n const IS_EARLY = isEarly(timeStamp, currentTime); // 获取两个时间戳差值\n\n let diff = currentTime - timeStamp; // 如果IS_EARLY为false则差值取反\n\n if (!IS_EARLY) diff = -diff;\n let resStr = '';\n const dirStr = IS_EARLY ? '前' : '后'; // 少于等于59秒\n\n if (diff <= 59) resStr = diff + '秒' + dirStr; // 多于59秒,少于等于59分钟59秒\n else if (diff > 59 && diff <= 3599) resStr = Math.floor(diff / 60) + '分钟' + dirStr; // 多于59分钟59秒,少于等于23小时59分钟59秒\n else if (diff > 3599 && diff <= 86399) resStr = Math.floor(diff / 3600) + '小时' + dirStr; // 多于23小时59分钟59秒,少于等于29天59分钟59秒\n else if (diff > 86399 && diff <= 2623859) resStr = Math.floor(diff / 86400) + '天' + dirStr; // 多于29天59分钟59秒,少于364天23小时59分钟59秒,且传入的时间戳早于当前\n else if (diff > 2623859 && diff <= 31567859 && IS_EARLY) resStr = getDate(timeStamp);else resStr = getDate(timeStamp, 'year');\n return resStr;\n};\n/**\n * @returns {String} 当前浏览器名称\n */\n\nexport const getExplorer = () => {\n const ua = window.navigator.userAgent;\n\n const isExplorer = exp => {\n return ua.indexOf(exp) > -1;\n };\n\n if (isExplorer('MSIE')) return 'IE';else if (isExplorer('Firefox')) return 'Firefox';else if (isExplorer('Chrome')) return 'Chrome';else if (isExplorer('Opera')) return 'Opera';else if (isExplorer('Safari')) return 'Safari';\n};\n/**\n * @description 绑定事件 on(element, event, handler)\n */\n\nexport const on = function () {\n if (document.addEventListener) {\n return function (element, event, handler) {\n if (element && event && handler) {\n element.addEventListener(event, handler, false);\n }\n };\n } else {\n return function (element, event, handler) {\n if (element && event && handler) {\n element.attachEvent('on' + event, handler);\n }\n };\n }\n}();\n/**\n * @description 解绑事件 off(element, event, handler)\n */\n\nexport const off = function () {\n if (document.removeEventListener) {\n return function (element, event, handler) {\n if (element && event) {\n element.removeEventListener(event, handler, false);\n }\n };\n } else {\n return function (element, event, handler) {\n if (element && event) {\n element.detachEvent('on' + event, handler);\n }\n };\n }\n}();\n/**\n * 判断一个对象是否存在key,如果传入第二个参数key,则是判断这个obj对象是否存在key这个属性\n * 如果没有传入key这个参数,则判断obj对象是否有键值对\n */\n\nexport const hasKey = (obj, key) => {\n if (key) return key in obj;else {\n let keysArr = Object.keys(obj);\n return keysArr.length;\n }\n};\n/**\n * @param {*} obj1 对象\n * @param {*} obj2 对象\n * @description 判断两个对象是否相等,这两个对象的值只能是数字或字符串\n */\n\nexport const objEqual = (obj1, obj2) => {\n const keysArr1 = Object.keys(obj1);\n const keysArr2 = Object.keys(obj2);\n if (keysArr1.length !== keysArr2.length) return false;else if (keysArr1.length === 0 && keysArr2.length === 0) return true;\n /* eslint-disable-next-line */\n else return !keysArr1.some(key => obj1[key] != obj2[key]);\n};",{"version":3,"sources":["/usr/local/develop/php/www/waibao/NN2022100801/NN2022100801/addons/admin/src/libs/tools.js"],"names":["forEach","arr","fn","length","i","len","item","getIntersection","arr1","arr2","Math","min","res","indexOf","push","getUnion","Array","from","Set","hasOneOf","targetarr","some","_","oneOf","value","validList","isMillisecond","timeStamp","timeStr","String","isEarly","currentTime","getHandledValue","num","getDate","startType","d","Date","year","getFullYear","month","getMonth","date","hours","getHours","minutes","getMinutes","second","getSeconds","resStr","getRelativeTime","IS_MILLISECOND","floor","Number","parse","IS_EARLY","diff","dirStr","getExplorer","ua","window","navigator","userAgent","isExplorer","exp","on","document","addEventListener","element","event","handler","attachEvent","off","removeEventListener","detachEvent","hasKey","obj","key","keysArr","Object","keys","objEqual","obj1","obj2","keysArr1","keysArr2"],"mappings":"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","sourcesContent":["export const forEach = (arr, fn) => {\n if (!arr.length || !fn) return\n let i = -1\n let len = arr.length\n while (++i < len) {\n let item = arr[i]\n fn(item, i, arr)\n }\n}\n\n/**\n * @param {Array} arr1\n * @param {Array} arr2\n * @description 得到两个数组的交集, 两个数组的元素为数值或字符串\n */\nexport const getIntersection = (arr1, arr2) => {\n let len = Math.min(arr1.length, arr2.length)\n let i = -1\n let res = []\n while (++i < len) {\n const item = arr2[i]\n if (arr1.indexOf(item) > -1) res.push(item)\n }\n return res\n}\n\n/**\n * @param {Array} arr1\n * @param {Array} arr2\n * @description 得到两个数组的并集, 两个数组的元素为数值或字符串\n */\nexport const getUnion = (arr1, arr2) => {\n return Array.from(new Set([...arr1, ...arr2]))\n}\n\n/**\n * @param {Array} target 目标数组\n * @param {Array} arr 需要查询的数组\n * @description 判断要查询的数组是否至少有一个元素包含在目标数组中\n */\nexport const hasOneOf = (targetarr, arr) => {\n return targetarr.some(_ => arr.indexOf(_) > -1)\n}\n\n/**\n * @param {String|Number} value 要验证的字符串或数值\n * @param {*} validList 用来验证的列表\n */\nexport function oneOf (value, validList) {\n for (let i = 0; i < validList.length; i++) {\n if (value === validList[i]) {\n return true\n }\n }\n return false\n}\n\n/**\n * @param {Number} timeStamp 判断时间戳格式是否是毫秒\n * @returns {Boolean}\n */\nconst isMillisecond = timeStamp => {\n const timeStr = String(timeStamp)\n return timeStr.length > 10\n}\n\n/**\n * @param {Number} timeStamp 传入的时间戳\n * @param {Number} currentTime 当前时间时间戳\n * @returns {Boolean} 传入的时间戳是否早于当前时间戳\n */\nconst isEarly = (timeStamp, currentTime) => {\n return timeStamp < currentTime\n}\n\n/**\n * @param {Number} num 数值\n * @returns {String} 处理后的字符串\n * @description 如果传入的数值小于10,即位数只有1位,则在前面补充0\n */\nconst getHandledValue = num => {\n return num < 10 ? '0' + num : num\n}\n\n/**\n * @param {Number} timeStamp 传入的时间戳\n * @param {Number} startType 要返回的时间字符串的格式类型,传入'year'则返回年开头的完整时间\n */\nconst getDate = (timeStamp, startType) => {\n const d = new Date(timeStamp * 1000)\n const year = d.getFullYear()\n const month = getHandledValue(d.getMonth() + 1)\n const date = getHandledValue(d.getDate())\n const hours = getHandledValue(d.getHours())\n const minutes = getHandledValue(d.getMinutes())\n const second = getHandledValue(d.getSeconds())\n let resStr = ''\n if (startType === 'year') resStr = year + '-' + month + '-' + date + ' ' + hours + ':' + minutes + ':' + second\n else resStr = month + '-' + date + ' ' + hours + ':' + minutes\n return resStr\n}\n\n/**\n * @param {String|Number} timeStamp 时间戳\n * @returns {String} 相对时间字符串\n */\nexport const getRelativeTime = timeStamp => {\n // 判断当前传入的时间戳是秒格式还是毫秒\n const IS_MILLISECOND = isMillisecond(timeStamp)\n // 如果是毫秒格式则转为秒格式\n if (IS_MILLISECOND) Math.floor(timeStamp /= 1000)\n // 传入的时间戳可以是数值或字符串类型,这里统一转为数值类型\n timeStamp = Number(timeStamp)\n // 获取当前时间时间戳\n const currentTime = Math.floor(Date.parse(new Date()) / 1000)\n // 判断传入时间戳是否早于当前时间戳\n const IS_EARLY = isEarly(timeStamp, currentTime)\n // 获取两个时间戳差值\n let diff = currentTime - timeStamp\n // 如果IS_EARLY为false则差值取反\n if (!IS_EARLY) diff = -diff\n let resStr = ''\n const dirStr = IS_EARLY ? '前' : '后'\n // 少于等于59秒\n if (diff <= 59) resStr = diff + '秒' + dirStr\n // 多于59秒,少于等于59分钟59秒\n else if (diff > 59 && diff <= 3599) resStr = Math.floor(diff / 60) + '分钟' + dirStr\n // 多于59分钟59秒,少于等于23小时59分钟59秒\n else if (diff > 3599 && diff <= 86399) resStr = Math.floor(diff / 3600) + '小时' + dirStr\n // 多于23小时59分钟59秒,少于等于29天59分钟59秒\n else if (diff > 86399 && diff <= 2623859) resStr = Math.floor(diff / 86400) + '天' + dirStr\n // 多于29天59分钟59秒,少于364天23小时59分钟59秒,且传入的时间戳早于当前\n else if (diff > 2623859 && diff <= 31567859 && IS_EARLY) resStr = getDate(timeStamp)\n else resStr = getDate(timeStamp, 'year')\n return resStr\n}\n\n/**\n * @returns {String} 当前浏览器名称\n */\nexport const getExplorer = () => {\n const ua = window.navigator.userAgent\n const isExplorer = (exp) => {\n return ua.indexOf(exp) > -1\n }\n if (isExplorer('MSIE')) return 'IE'\n else if (isExplorer('Firefox')) return 'Firefox'\n else if (isExplorer('Chrome')) return 'Chrome'\n else if (isExplorer('Opera')) return 'Opera'\n else if (isExplorer('Safari')) return 'Safari'\n}\n\n/**\n * @description 绑定事件 on(element, event, handler)\n */\nexport const on = (function () {\n if (document.addEventListener) {\n return function (element, event, handler) {\n if (element && event && handler) {\n element.addEventListener(event, handler, false)\n }\n }\n } else {\n return function (element, event, handler) {\n if (element && event && handler) {\n element.attachEvent('on' + event, handler)\n }\n }\n }\n})()\n\n/**\n * @description 解绑事件 off(element, event, handler)\n */\nexport const off = (function () {\n if (document.removeEventListener) {\n return function (element, event, handler) {\n if (element && event) {\n element.removeEventListener(event, handler, false)\n }\n }\n } else {\n return function (element, event, handler) {\n if (element && event) {\n element.detachEvent('on' + event, handler)\n }\n }\n }\n})()\n\n/**\n * 判断一个对象是否存在key,如果传入第二个参数key,则是判断这个obj对象是否存在key这个属性\n * 如果没有传入key这个参数,则判断obj对象是否有键值对\n */\nexport const hasKey = (obj, key) => {\n if (key) return key in obj\n else {\n let keysArr = Object.keys(obj)\n return keysArr.length\n }\n}\n\n/**\n * @param {*} obj1 对象\n * @param {*} obj2 对象\n * @description 判断两个对象是否相等,这两个对象的值只能是数字或字符串\n */\nexport const objEqual = (obj1, obj2) => {\n const keysArr1 = Object.keys(obj1)\n const keysArr2 = Object.keys(obj2)\n if (keysArr1.length !== keysArr2.length) return false\n else if (keysArr1.length === 0 && keysArr2.length === 0) return true\n /* eslint-disable-next-line */\n else return !keysArr1.some(key => obj1[key] != obj2[key])\n}\n"]}]}
|