123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- function batchFindObjctValue (obj = {}, keys = []) {
- const values = {}
- for (let i = 0; i < keys.length; i++) {
- const key = keys[i]
- const keyPath = key.split('.')
- let currentKey = keyPath.shift()
- let result = obj
- while (currentKey) {
- if (!result) {
- break
- }
- result = result[currentKey]
- currentKey = keyPath.shift()
- }
- values[key] = result
- }
- return values
- }
- function getType (val) {
- return Object.prototype.toString.call(val).slice(8, -1).toLowerCase()
- }
- function hasOwn (obj, key) {
- return Object.prototype.hasOwnProperty.call(obj, key)
- }
- function isValidString (val) {
- return val && getType(val) === 'string'
- }
- function isPlainObject (obj) {
- return getType(obj) === 'object'
- }
- function isFn (fn) {
- // 务必注意AsyncFunction
- return typeof fn === 'function'
- }
- // 获取文件后缀,只添加几种图片类型供客服消息接口使用
- const mime2ext = {
- 'image/png': 'png',
- 'image/jpeg': 'jpg',
- 'image/gif': 'gif',
- 'image/svg+xml': 'svg',
- 'image/bmp': 'bmp',
- 'image/webp': 'webp'
- }
- function getExtension (contentType) {
- return mime2ext[contentType]
- }
- const isSnakeCase = /_(\w)/g
- const isCamelCase = /[A-Z]/g
- function snake2camel (value) {
- return value.replace(isSnakeCase, (_, c) => (c ? c.toUpperCase() : ''))
- }
- function camel2snake (value) {
- return value.replace(isCamelCase, str => '_' + str.toLowerCase())
- }
- function parseObjectKeys (obj, type) {
- let parserReg, parser
- switch (type) {
- case 'snake2camel':
- parser = snake2camel
- parserReg = isSnakeCase
- break
- case 'camel2snake':
- parser = camel2snake
- parserReg = isCamelCase
- break
- }
- for (const key in obj) {
- if (hasOwn(obj, key)) {
- if (parserReg.test(key)) {
- const keyCopy = parser(key)
- obj[keyCopy] = obj[key]
- delete obj[key]
- if (isPlainObject(obj[keyCopy])) {
- obj[keyCopy] = parseObjectKeys(obj[keyCopy], type)
- } else if (Array.isArray(obj[keyCopy])) {
- obj[keyCopy] = obj[keyCopy].map((item) => {
- return parseObjectKeys(item, type)
- })
- }
- }
- }
- }
- return obj
- }
- function snake2camelJson (obj) {
- return parseObjectKeys(obj, 'snake2camel')
- }
- function camel2snakeJson (obj) {
- return parseObjectKeys(obj, 'camel2snake')
- }
- function getOffsetDate (offset) {
- return new Date(
- Date.now() + (new Date().getTimezoneOffset() + (offset || 0) * 60) * 60000
- )
- }
- function getDateStr (date, separator = '-') {
- date = date || new Date()
- const dateArr = []
- dateArr.push(date.getFullYear())
- dateArr.push(('00' + (date.getMonth() + 1)).substr(-2))
- dateArr.push(('00' + date.getDate()).substr(-2))
- return dateArr.join(separator)
- }
- function getTimeStr (date, separator = ':') {
- date = date || new Date()
- const timeArr = []
- timeArr.push(('00' + date.getHours()).substr(-2))
- timeArr.push(('00' + date.getMinutes()).substr(-2))
- timeArr.push(('00' + date.getSeconds()).substr(-2))
- return timeArr.join(separator)
- }
- function getFullTimeStr (date) {
- date = date || new Date()
- return getDateStr(date) + ' ' + getTimeStr(date)
- }
- function getDistinctArray (arr) {
- return Array.from(new Set(arr))
- }
- /**
- * 拼接url
- * @param {string} base 基础路径
- * @param {string} path 在基础路径上拼接的路径
- * @returns
- */
- function resolveUrl (base, path) {
- if (/^https?:/.test(path)) {
- return path
- }
- return base + path
- }
- function getVerifyCode (len = 6) {
- let code = ''
- for (let i = 0; i < len; i++) {
- code += Math.floor(Math.random() * 10)
- }
- return code
- }
- function coverMobile (mobile) {
- if (typeof mobile !== 'string') {
- return mobile
- }
- return mobile.slice(0, 3) + '****' + mobile.slice(7)
- }
- function getNonceStr (length = 16) {
- let str = ''
- while (str.length < length) {
- str += Math.random().toString(32).substring(2)
- }
- return str.substring(0, length)
- }
- module.exports = {
- getType,
- isValidString,
- batchFindObjctValue,
- isPlainObject,
- isFn,
- getDistinctArray,
- getFullTimeStr,
- resolveUrl,
- getOffsetDate,
- camel2snakeJson,
- snake2camelJson,
- getExtension,
- getVerifyCode,
- coverMobile,
- getNonceStr
- }
|