|  | @ -5,76 +5,76 @@ | 
		
	
		
			
				|  |  |  * @returns {string} |  |  |  * @returns {string} | 
		
	
		
			
				|  |  |  */ |  |  |  */ | 
		
	
		
			
				|  |  | export function parseTime(time, cFormat) { |  |  | export function parseTime(time, cFormat) { | 
		
	
		
			
				|  |  |     if (arguments.length === 0) { |  |  |  | 
		
	
		
			
				|  |  |         return null |  |  |  | 
		
	
		
			
				|  |  |  |  |  |   if (arguments.length === 0) { | 
		
	
		
			
				|  |  |  |  |  |     return null | 
		
	
		
			
				|  |  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |  |   const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}' | 
		
	
		
			
				|  |  |  |  |  |   let date | 
		
	
		
			
				|  |  |  |  |  |   if (typeof time === 'undefined' || time === null || time === 'null') { | 
		
	
		
			
				|  |  |  |  |  |     return '' | 
		
	
		
			
				|  |  |  |  |  |   } else if (typeof time === 'object') { | 
		
	
		
			
				|  |  |  |  |  |     date = time | 
		
	
		
			
				|  |  |  |  |  |   } else { | 
		
	
		
			
				|  |  |  |  |  |     if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) { | 
		
	
		
			
				|  |  |  |  |  |       time = parseInt(time) | 
		
	
		
			
				|  |  |     } |  |  |     } | 
		
	
		
			
				|  |  |     const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}' |  |  |  | 
		
	
		
			
				|  |  |     let date |  |  |  | 
		
	
		
			
				|  |  |     if (typeof time === 'undefined' || time === null || time === 'null') { |  |  |  | 
		
	
		
			
				|  |  |         return '' |  |  |  | 
		
	
		
			
				|  |  |     } else if (typeof time === 'object') { |  |  |  | 
		
	
		
			
				|  |  |         date = time |  |  |  | 
		
	
		
			
				|  |  |     } else { |  |  |  | 
		
	
		
			
				|  |  |         if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) { |  |  |  | 
		
	
		
			
				|  |  |             time = parseInt(time) |  |  |  | 
		
	
		
			
				|  |  |         } |  |  |  | 
		
	
		
			
				|  |  |         if ((typeof time === 'number') && (time.toString().length === 10)) { |  |  |  | 
		
	
		
			
				|  |  |             time = time * 1000 |  |  |  | 
		
	
		
			
				|  |  |         } |  |  |  | 
		
	
		
			
				|  |  |         date = new Date(time) |  |  |  | 
		
	
		
			
				|  |  |  |  |  |     if ((typeof time === 'number') && (time.toString().length === 10)) { | 
		
	
		
			
				|  |  |  |  |  |       time = time * 1000 | 
		
	
		
			
				|  |  |     } |  |  |     } | 
		
	
		
			
				|  |  |     const formatObj = { |  |  |  | 
		
	
		
			
				|  |  |         y: date.getFullYear(), |  |  |  | 
		
	
		
			
				|  |  |         m: date.getMonth() + 1, |  |  |  | 
		
	
		
			
				|  |  |         d: date.getDate(), |  |  |  | 
		
	
		
			
				|  |  |         h: date.getHours(), |  |  |  | 
		
	
		
			
				|  |  |         i: date.getMinutes(), |  |  |  | 
		
	
		
			
				|  |  |         s: date.getSeconds(), |  |  |  | 
		
	
		
			
				|  |  |         a: date.getDay() |  |  |  | 
		
	
		
			
				|  |  |  |  |  |     date = new Date(time) | 
		
	
		
			
				|  |  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |  |   const formatObj = { | 
		
	
		
			
				|  |  |  |  |  |     y: date.getFullYear(), | 
		
	
		
			
				|  |  |  |  |  |     m: date.getMonth() + 1, | 
		
	
		
			
				|  |  |  |  |  |     d: date.getDate(), | 
		
	
		
			
				|  |  |  |  |  |     h: date.getHours(), | 
		
	
		
			
				|  |  |  |  |  |     i: date.getMinutes(), | 
		
	
		
			
				|  |  |  |  |  |     s: date.getSeconds(), | 
		
	
		
			
				|  |  |  |  |  |     a: date.getDay() | 
		
	
		
			
				|  |  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |  |   const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => { | 
		
	
		
			
				|  |  |  |  |  |     let value = formatObj[key] | 
		
	
		
			
				|  |  |  |  |  |     // Note: getDay() returns 0 on Sunday
 | 
		
	
		
			
				|  |  |  |  |  |     if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] } | 
		
	
		
			
				|  |  |  |  |  |     if (result.length > 0 && value < 10) { | 
		
	
		
			
				|  |  |  |  |  |       value = '0' + value | 
		
	
		
			
				|  |  |     } |  |  |     } | 
		
	
		
			
				|  |  |     const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => { |  |  |  | 
		
	
		
			
				|  |  |         let value = formatObj[key] |  |  |  | 
		
	
		
			
				|  |  |             // Note: getDay() returns 0 on Sunday
 |  |  |  | 
		
	
		
			
				|  |  |         if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] } |  |  |  | 
		
	
		
			
				|  |  |         if (result.length > 0 && value < 10) { |  |  |  | 
		
	
		
			
				|  |  |             value = '0' + value |  |  |  | 
		
	
		
			
				|  |  |         } |  |  |  | 
		
	
		
			
				|  |  |         return value || 0 |  |  |  | 
		
	
		
			
				|  |  |     }) |  |  |  | 
		
	
		
			
				|  |  |     return time_str |  |  |  | 
		
	
		
			
				|  |  |  |  |  |     return value || 0 | 
		
	
		
			
				|  |  |  |  |  |   }) | 
		
	
		
			
				|  |  |  |  |  |   return time_str | 
		
	
		
			
				|  |  | } |  |  | } | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  | /**   |  |  |  | 
		
	
		
			
				|  |  |  |  |  | /** | 
		
	
		
			
				|  |  |  * @param {number} time |  |  |  * @param {number} time | 
		
	
		
			
				|  |  |  * @param {string} option |  |  |  * @param {string} option | 
		
	
		
			
				|  |  |  * @returns {string} |  |  |  * @returns {string} | 
		
	
		
			
				|  |  |  */ |  |  |  */ | 
		
	
		
			
				|  |  | export function formatTime(time, option) { |  |  | export function formatTime(time, option) { | 
		
	
		
			
				|  |  |     if (('' + time).length === 10) { |  |  |  | 
		
	
		
			
				|  |  |         time = parseInt(time) * 1000 |  |  |  | 
		
	
		
			
				|  |  |     } else { |  |  |  | 
		
	
		
			
				|  |  |         time = +time |  |  |  | 
		
	
		
			
				|  |  |     } |  |  |  | 
		
	
		
			
				|  |  |     const d = new Date(time) |  |  |  | 
		
	
		
			
				|  |  |     const now = Date.now() |  |  |  | 
		
	
		
			
				|  |  |  |  |  |   if (('' + time).length === 10) { | 
		
	
		
			
				|  |  |  |  |  |     time = parseInt(time) * 1000 | 
		
	
		
			
				|  |  |  |  |  |   } else { | 
		
	
		
			
				|  |  |  |  |  |     time = +time | 
		
	
		
			
				|  |  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |  |   const d = new Date(time) | 
		
	
		
			
				|  |  |  |  |  |   const now = Date.now() | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  |     const diff = (now - d) / 1000 |  |  |  | 
		
	
		
			
				|  |  |  |  |  |   const diff = (now - d) / 1000 | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  |     if (diff < 30) { |  |  |  | 
		
	
		
			
				|  |  |         return '刚刚' |  |  |  | 
		
	
		
			
				|  |  |     } else if (diff < 3600) { |  |  |  | 
		
	
		
			
				|  |  |         // less 1 hour
 |  |  |  | 
		
	
		
			
				|  |  |         return Math.ceil(diff / 60) + '分钟前' |  |  |  | 
		
	
		
			
				|  |  |     } else if (diff < 3600 * 24) { |  |  |  | 
		
	
		
			
				|  |  |         return Math.ceil(diff / 3600) + '小时前' |  |  |  | 
		
	
		
			
				|  |  |     } else if (diff < 3600 * 24 * 2) { |  |  |  | 
		
	
		
			
				|  |  |         return '1天前' |  |  |  | 
		
	
		
			
				|  |  |     } |  |  |  | 
		
	
		
			
				|  |  |     if (option) { |  |  |  | 
		
	
		
			
				|  |  |         return parseTime(time, option) |  |  |  | 
		
	
		
			
				|  |  |     } else { |  |  |  | 
		
	
		
			
				|  |  |         return ( |  |  |  | 
		
	
		
			
				|  |  |             d.getMonth() + |  |  |  | 
		
	
		
			
				|  |  |  |  |  |   if (diff < 30) { | 
		
	
		
			
				|  |  |  |  |  |     return '刚刚' | 
		
	
		
			
				|  |  |  |  |  |   } else if (diff < 3600) { | 
		
	
		
			
				|  |  |  |  |  |     // less 1 hour
 | 
		
	
		
			
				|  |  |  |  |  |     return Math.ceil(diff / 60) + '分钟前' | 
		
	
		
			
				|  |  |  |  |  |   } else if (diff < 3600 * 24) { | 
		
	
		
			
				|  |  |  |  |  |     return Math.ceil(diff / 3600) + '小时前' | 
		
	
		
			
				|  |  |  |  |  |   } else if (diff < 3600 * 24 * 2) { | 
		
	
		
			
				|  |  |  |  |  |     return '1天前' | 
		
	
		
			
				|  |  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |  |   if (option) { | 
		
	
		
			
				|  |  |  |  |  |     return parseTime(time, option) | 
		
	
		
			
				|  |  |  |  |  |   } else { | 
		
	
		
			
				|  |  |  |  |  |     return ( | 
		
	
		
			
				|  |  |  |  |  |       d.getMonth() + | 
		
	
		
			
				|  |  |             1 + |  |  |             1 + | 
		
	
		
			
				|  |  |             '月' + |  |  |             '月' + | 
		
	
		
			
				|  |  |             d.getDate() + |  |  |             d.getDate() + | 
		
	
	
		
			
				|  | @ -83,8 +83,8 @@ export function formatTime(time, option) { | 
		
	
		
			
				|  |  |             '时' + |  |  |             '时' + | 
		
	
		
			
				|  |  |             d.getMinutes() + |  |  |             d.getMinutes() + | 
		
	
		
			
				|  |  |             '分' |  |  |             '分' | 
		
	
		
			
				|  |  |         ) |  |  |  | 
		
	
		
			
				|  |  |     } |  |  |  | 
		
	
		
			
				|  |  |  |  |  |     ) | 
		
	
		
			
				|  |  |  |  |  |   } | 
		
	
		
			
				|  |  | } |  |  | } | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  | /** |  |  | /** | 
		
	
	
		
			
				|  | @ -92,18 +92,18 @@ export function formatTime(time, option) { | 
		
	
		
			
				|  |  |  * @returns {Object} |  |  |  * @returns {Object} | 
		
	
		
			
				|  |  |  */ |  |  |  */ | 
		
	
		
			
				|  |  | export function getQueryObject(url) { |  |  | export function getQueryObject(url) { | 
		
	
		
			
				|  |  |     url = url == null ? window.location.href : url |  |  |  | 
		
	
		
			
				|  |  |     const search = url.substring(url.lastIndexOf('?') + 1) |  |  |  | 
		
	
		
			
				|  |  |     const obj = {} |  |  |  | 
		
	
		
			
				|  |  |     const reg = /([^?&=]+)=([^?&=]*)/g |  |  |  | 
		
	
		
			
				|  |  |     search.replace(reg, (rs, $1, $2) => { |  |  |  | 
		
	
		
			
				|  |  |         const name = decodeURIComponent($1) |  |  |  | 
		
	
		
			
				|  |  |         let val = decodeURIComponent($2) |  |  |  | 
		
	
		
			
				|  |  |         val = String(val) |  |  |  | 
		
	
		
			
				|  |  |         obj[name] = val |  |  |  | 
		
	
		
			
				|  |  |         return rs |  |  |  | 
		
	
		
			
				|  |  |     }) |  |  |  | 
		
	
		
			
				|  |  |     return obj |  |  |  | 
		
	
		
			
				|  |  |  |  |  |   url = url == null ? window.location.href : url | 
		
	
		
			
				|  |  |  |  |  |   const search = url.substring(url.lastIndexOf('?') + 1) | 
		
	
		
			
				|  |  |  |  |  |   const obj = {} | 
		
	
		
			
				|  |  |  |  |  |   const reg = /([^?&=]+)=([^?&=]*)/g | 
		
	
		
			
				|  |  |  |  |  |   search.replace(reg, (rs, $1, $2) => { | 
		
	
		
			
				|  |  |  |  |  |     const name = decodeURIComponent($1) | 
		
	
		
			
				|  |  |  |  |  |     let val = decodeURIComponent($2) | 
		
	
		
			
				|  |  |  |  |  |     val = String(val) | 
		
	
		
			
				|  |  |  |  |  |     obj[name] = val | 
		
	
		
			
				|  |  |  |  |  |     return rs | 
		
	
		
			
				|  |  |  |  |  |   }) | 
		
	
		
			
				|  |  |  |  |  |   return obj | 
		
	
		
			
				|  |  | } |  |  | } | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  | /** |  |  | /** | 
		
	
	
		
			
				|  | @ -111,15 +111,15 @@ export function getQueryObject(url) { | 
		
	
		
			
				|  |  |  * @returns {number} output value |  |  |  * @returns {number} output value | 
		
	
		
			
				|  |  |  */ |  |  |  */ | 
		
	
		
			
				|  |  | export function byteLength(str) { |  |  | export function byteLength(str) { | 
		
	
		
			
				|  |  |     // returns the byte length of an utf8 string
 |  |  |  | 
		
	
		
			
				|  |  |     let s = str.length |  |  |  | 
		
	
		
			
				|  |  |     for (var i = str.length - 1; i >= 0; i--) { |  |  |  | 
		
	
		
			
				|  |  |         const code = str.charCodeAt(i) |  |  |  | 
		
	
		
			
				|  |  |         if (code > 0x7f && code <= 0x7ff) s++ |  |  |  | 
		
	
		
			
				|  |  |             else if (code > 0x7ff && code <= 0xffff) s += 2 |  |  |  | 
		
	
		
			
				|  |  |         if (code >= 0xDC00 && code <= 0xDFFF) i-- |  |  |  | 
		
	
		
			
				|  |  |     } |  |  |  | 
		
	
		
			
				|  |  |     return s |  |  |  | 
		
	
		
			
				|  |  |  |  |  |   // returns the byte length of an utf8 string
 | 
		
	
		
			
				|  |  |  |  |  |   let s = str.length | 
		
	
		
			
				|  |  |  |  |  |   for (var i = str.length - 1; i >= 0; i--) { | 
		
	
		
			
				|  |  |  |  |  |     const code = str.charCodeAt(i) | 
		
	
		
			
				|  |  |  |  |  |     if (code > 0x7f && code <= 0x7ff) s++ | 
		
	
		
			
				|  |  |  |  |  |     else if (code > 0x7ff && code <= 0xffff) s += 2 | 
		
	
		
			
				|  |  |  |  |  |     if (code >= 0xDC00 && code <= 0xDFFF) i-- | 
		
	
		
			
				|  |  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |  |   return s | 
		
	
		
			
				|  |  | } |  |  | } | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  | /** |  |  | /** | 
		
	
	
		
			
				|  | @ -127,13 +127,13 @@ export function byteLength(str) { | 
		
	
		
			
				|  |  |  * @returns {Array} |  |  |  * @returns {Array} | 
		
	
		
			
				|  |  |  */ |  |  |  */ | 
		
	
		
			
				|  |  | export function cleanArray(actual) { |  |  | export function cleanArray(actual) { | 
		
	
		
			
				|  |  |     const newArray = [] |  |  |  | 
		
	
		
			
				|  |  |     for (let i = 0; i < actual.length; i++) { |  |  |  | 
		
	
		
			
				|  |  |         if (actual[i]) { |  |  |  | 
		
	
		
			
				|  |  |             newArray.push(actual[i]) |  |  |  | 
		
	
		
			
				|  |  |         } |  |  |  | 
		
	
		
			
				|  |  |  |  |  |   const newArray = [] | 
		
	
		
			
				|  |  |  |  |  |   for (let i = 0; i < actual.length; i++) { | 
		
	
		
			
				|  |  |  |  |  |     if (actual[i]) { | 
		
	
		
			
				|  |  |  |  |  |       newArray.push(actual[i]) | 
		
	
		
			
				|  |  |     } |  |  |     } | 
		
	
		
			
				|  |  |     return newArray |  |  |  | 
		
	
		
			
				|  |  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |  |   return newArray | 
		
	
		
			
				|  |  | } |  |  | } | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  | /** |  |  | /** | 
		
	
	
		
			
				|  | @ -141,13 +141,13 @@ export function cleanArray(actual) { | 
		
	
		
			
				|  |  |  * @returns {Array} |  |  |  * @returns {Array} | 
		
	
		
			
				|  |  |  */ |  |  |  */ | 
		
	
		
			
				|  |  | export function param(json) { |  |  | export function param(json) { | 
		
	
		
			
				|  |  |     if (!json) return '' |  |  |  | 
		
	
		
			
				|  |  |     return cleanArray( |  |  |  | 
		
	
		
			
				|  |  |         Object.keys(json).map(key => { |  |  |  | 
		
	
		
			
				|  |  |             if (json[key] === undefined) return '' |  |  |  | 
		
	
		
			
				|  |  |             return encodeURIComponent(key) + '=' + encodeURIComponent(json[key]) |  |  |  | 
		
	
		
			
				|  |  |         }) |  |  |  | 
		
	
		
			
				|  |  |     ).join('&') |  |  |  | 
		
	
		
			
				|  |  |  |  |  |   if (!json) return '' | 
		
	
		
			
				|  |  |  |  |  |   return cleanArray( | 
		
	
		
			
				|  |  |  |  |  |     Object.keys(json).map(key => { | 
		
	
		
			
				|  |  |  |  |  |       if (json[key] === undefined) return '' | 
		
	
		
			
				|  |  |  |  |  |       return encodeURIComponent(key) + '=' + encodeURIComponent(json[key]) | 
		
	
		
			
				|  |  |  |  |  |     }) | 
		
	
		
			
				|  |  |  |  |  |   ).join('&') | 
		
	
		
			
				|  |  | } |  |  | } | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  | /** |  |  | /** | 
		
	
	
		
			
				|  | @ -155,19 +155,19 @@ export function param(json) { | 
		
	
		
			
				|  |  |  * @returns {Object} |  |  |  * @returns {Object} | 
		
	
		
			
				|  |  |  */ |  |  |  */ | 
		
	
		
			
				|  |  | export function param2Obj(url) { |  |  | export function param2Obj(url) { | 
		
	
		
			
				|  |  |     const search = url.split('?')[1] |  |  |  | 
		
	
		
			
				|  |  |     if (!search) { |  |  |  | 
		
	
		
			
				|  |  |         return {} |  |  |  | 
		
	
		
			
				|  |  |     } |  |  |  | 
		
	
		
			
				|  |  |     return JSON.parse( |  |  |  | 
		
	
		
			
				|  |  |         '{"' + |  |  |  | 
		
	
		
			
				|  |  |  |  |  |   const search = url.split('?')[1] | 
		
	
		
			
				|  |  |  |  |  |   if (!search) { | 
		
	
		
			
				|  |  |  |  |  |     return {} | 
		
	
		
			
				|  |  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |  |   return JSON.parse( | 
		
	
		
			
				|  |  |  |  |  |     '{"' + | 
		
	
		
			
				|  |  |         decodeURIComponent(search) |  |  |         decodeURIComponent(search) | 
		
	
		
			
				|  |  |         .replace(/"/g, '\\"') |  |  |  | 
		
	
		
			
				|  |  |         .replace(/&/g, '","') |  |  |  | 
		
	
		
			
				|  |  |         .replace(/=/g, '":"') |  |  |  | 
		
	
		
			
				|  |  |         .replace(/\+/g, ' ') + |  |  |  | 
		
	
		
			
				|  |  |  |  |  |           .replace(/"/g, '\\"') | 
		
	
		
			
				|  |  |  |  |  |           .replace(/&/g, '","') | 
		
	
		
			
				|  |  |  |  |  |           .replace(/=/g, '":"') | 
		
	
		
			
				|  |  |  |  |  |           .replace(/\+/g, ' ') + | 
		
	
		
			
				|  |  |         '"}' |  |  |         '"}' | 
		
	
		
			
				|  |  |     ) |  |  |  | 
		
	
		
			
				|  |  |  |  |  |   ) | 
		
	
		
			
				|  |  | } |  |  | } | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  | /** |  |  | /** | 
		
	
	
		
			
				|  | @ -175,9 +175,9 @@ export function param2Obj(url) { | 
		
	
		
			
				|  |  |  * @returns {string} |  |  |  * @returns {string} | 
		
	
		
			
				|  |  |  */ |  |  |  */ | 
		
	
		
			
				|  |  | export function html2Text(val) { |  |  | export function html2Text(val) { | 
		
	
		
			
				|  |  |     const div = document.createElement('div') |  |  |  | 
		
	
		
			
				|  |  |     div.innerHTML = val |  |  |  | 
		
	
		
			
				|  |  |     return div.textContent || div.innerText |  |  |  | 
		
	
		
			
				|  |  |  |  |  |   const div = document.createElement('div') | 
		
	
		
			
				|  |  |  |  |  |   div.innerHTML = val | 
		
	
		
			
				|  |  |  |  |  |   return div.textContent || div.innerText | 
		
	
		
			
				|  |  | } |  |  | } | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  | /** |  |  | /** | 
		
	
	
		
			
				|  | @ -187,21 +187,21 @@ export function html2Text(val) { | 
		
	
		
			
				|  |  |  * @returns {Object} |  |  |  * @returns {Object} | 
		
	
		
			
				|  |  |  */ |  |  |  */ | 
		
	
		
			
				|  |  | export function objectMerge(target, source) { |  |  | export function objectMerge(target, source) { | 
		
	
		
			
				|  |  |     if (typeof target !== 'object') { |  |  |  | 
		
	
		
			
				|  |  |         target = {} |  |  |  | 
		
	
		
			
				|  |  |     } |  |  |  | 
		
	
		
			
				|  |  |     if (Array.isArray(source)) { |  |  |  | 
		
	
		
			
				|  |  |         return source.slice() |  |  |  | 
		
	
		
			
				|  |  |  |  |  |   if (typeof target !== 'object') { | 
		
	
		
			
				|  |  |  |  |  |     target = {} | 
		
	
		
			
				|  |  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |  |   if (Array.isArray(source)) { | 
		
	
		
			
				|  |  |  |  |  |     return source.slice() | 
		
	
		
			
				|  |  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |  |   Object.keys(source).forEach(property => { | 
		
	
		
			
				|  |  |  |  |  |     const sourceProperty = source[property] | 
		
	
		
			
				|  |  |  |  |  |     if (typeof sourceProperty === 'object') { | 
		
	
		
			
				|  |  |  |  |  |       target[property] = objectMerge(target[property], sourceProperty) | 
		
	
		
			
				|  |  |  |  |  |     } else { | 
		
	
		
			
				|  |  |  |  |  |       target[property] = sourceProperty | 
		
	
		
			
				|  |  |     } |  |  |     } | 
		
	
		
			
				|  |  |     Object.keys(source).forEach(property => { |  |  |  | 
		
	
		
			
				|  |  |         const sourceProperty = source[property] |  |  |  | 
		
	
		
			
				|  |  |         if (typeof sourceProperty === 'object') { |  |  |  | 
		
	
		
			
				|  |  |             target[property] = objectMerge(target[property], sourceProperty) |  |  |  | 
		
	
		
			
				|  |  |         } else { |  |  |  | 
		
	
		
			
				|  |  |             target[property] = sourceProperty |  |  |  | 
		
	
		
			
				|  |  |         } |  |  |  | 
		
	
		
			
				|  |  |     }) |  |  |  | 
		
	
		
			
				|  |  |     return target |  |  |  | 
		
	
		
			
				|  |  |  |  |  |   }) | 
		
	
		
			
				|  |  |  |  |  |   return target | 
		
	
		
			
				|  |  | } |  |  | } | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  | /** |  |  | /** | 
		
	
	
		
			
				|  | @ -209,19 +209,19 @@ export function objectMerge(target, source) { | 
		
	
		
			
				|  |  |  * @param {string} className |  |  |  * @param {string} className | 
		
	
		
			
				|  |  |  */ |  |  |  */ | 
		
	
		
			
				|  |  | export function toggleClass(element, className) { |  |  | export function toggleClass(element, className) { | 
		
	
		
			
				|  |  |     if (!element || !className) { |  |  |  | 
		
	
		
			
				|  |  |         return |  |  |  | 
		
	
		
			
				|  |  |     } |  |  |  | 
		
	
		
			
				|  |  |     let classString = element.className |  |  |  | 
		
	
		
			
				|  |  |     const nameIndex = classString.indexOf(className) |  |  |  | 
		
	
		
			
				|  |  |     if (nameIndex === -1) { |  |  |  | 
		
	
		
			
				|  |  |         classString += '' + className |  |  |  | 
		
	
		
			
				|  |  |     } else { |  |  |  | 
		
	
		
			
				|  |  |         classString = |  |  |  | 
		
	
		
			
				|  |  |  |  |  |   if (!element || !className) { | 
		
	
		
			
				|  |  |  |  |  |     return | 
		
	
		
			
				|  |  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |  |   let classString = element.className | 
		
	
		
			
				|  |  |  |  |  |   const nameIndex = classString.indexOf(className) | 
		
	
		
			
				|  |  |  |  |  |   if (nameIndex === -1) { | 
		
	
		
			
				|  |  |  |  |  |     classString += '' + className | 
		
	
		
			
				|  |  |  |  |  |   } else { | 
		
	
		
			
				|  |  |  |  |  |     classString = | 
		
	
		
			
				|  |  |             classString.substr(0, nameIndex) + |  |  |             classString.substr(0, nameIndex) + | 
		
	
		
			
				|  |  |             classString.substr(nameIndex + className.length) |  |  |             classString.substr(nameIndex + className.length) | 
		
	
		
			
				|  |  |     } |  |  |  | 
		
	
		
			
				|  |  |     element.className = classString |  |  |  | 
		
	
		
			
				|  |  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |  |   element.className = classString | 
		
	
		
			
				|  |  | } |  |  | } | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  | /** |  |  | /** | 
		
	
	
		
			
				|  | @ -229,11 +229,11 @@ export function toggleClass(element, className) { | 
		
	
		
			
				|  |  |  * @returns {Date} |  |  |  * @returns {Date} | 
		
	
		
			
				|  |  |  */ |  |  |  */ | 
		
	
		
			
				|  |  | export function getTime(type) { |  |  | export function getTime(type) { | 
		
	
		
			
				|  |  |     if (type === 'start') { |  |  |  | 
		
	
		
			
				|  |  |         return new Date().getTime() - 3600 * 1000 * 24 * 90 |  |  |  | 
		
	
		
			
				|  |  |     } else { |  |  |  | 
		
	
		
			
				|  |  |         return new Date(new Date().toDateString()) |  |  |  | 
		
	
		
			
				|  |  |     } |  |  |  | 
		
	
		
			
				|  |  |  |  |  |   if (type === 'start') { | 
		
	
		
			
				|  |  |  |  |  |     return new Date().getTime() - 3600 * 1000 * 24 * 90 | 
		
	
		
			
				|  |  |  |  |  |   } else { | 
		
	
		
			
				|  |  |  |  |  |     return new Date(new Date().toDateString()) | 
		
	
		
			
				|  |  |  |  |  |   } | 
		
	
		
			
				|  |  | } |  |  | } | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  | /** |  |  | /** | 
		
	
	
		
			
				|  | @ -243,38 +243,38 @@ export function getTime(type) { | 
		
	
		
			
				|  |  |  * @return {*} |  |  |  * @return {*} | 
		
	
		
			
				|  |  |  */ |  |  |  */ | 
		
	
		
			
				|  |  | export function debounce(func, wait, immediate) { |  |  | export function debounce(func, wait, immediate) { | 
		
	
		
			
				|  |  |     let timeout, args, context, timestamp, result |  |  |  | 
		
	
		
			
				|  |  |  |  |  |   let timeout, args, context, timestamp, result | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  |     const later = function() { |  |  |  | 
		
	
		
			
				|  |  |         // 据上一次触发时间间隔
 |  |  |  | 
		
	
		
			
				|  |  |         const last = +new Date() - timestamp |  |  |  | 
		
	
		
			
				|  |  |  |  |  |   const later = function() { | 
		
	
		
			
				|  |  |  |  |  |     // 据上一次触发时间间隔
 | 
		
	
		
			
				|  |  |  |  |  |     const last = +new Date() - timestamp | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  |         // 上次被包装函数被调用时间间隔 last 小于设定时间间隔 wait
 |  |  |  | 
		
	
		
			
				|  |  |         if (last < wait && last > 0) { |  |  |  | 
		
	
		
			
				|  |  |             timeout = setTimeout(later, wait - last) |  |  |  | 
		
	
		
			
				|  |  |         } else { |  |  |  | 
		
	
		
			
				|  |  |             timeout = null |  |  |  | 
		
	
		
			
				|  |  |                 // 如果设定为immediate===true,因为开始边界已经调用过了此处无需调用
 |  |  |  | 
		
	
		
			
				|  |  |             if (!immediate) { |  |  |  | 
		
	
		
			
				|  |  |                 result = func.apply(context, args) |  |  |  | 
		
	
		
			
				|  |  |                 if (!timeout) context = args = null |  |  |  | 
		
	
		
			
				|  |  |             } |  |  |  | 
		
	
		
			
				|  |  |         } |  |  |  | 
		
	
		
			
				|  |  |  |  |  |     // 上次被包装函数被调用时间间隔 last 小于设定时间间隔 wait
 | 
		
	
		
			
				|  |  |  |  |  |     if (last < wait && last > 0) { | 
		
	
		
			
				|  |  |  |  |  |       timeout = setTimeout(later, wait - last) | 
		
	
		
			
				|  |  |  |  |  |     } else { | 
		
	
		
			
				|  |  |  |  |  |       timeout = null | 
		
	
		
			
				|  |  |  |  |  |       // 如果设定为immediate===true,因为开始边界已经调用过了此处无需调用
 | 
		
	
		
			
				|  |  |  |  |  |       if (!immediate) { | 
		
	
		
			
				|  |  |  |  |  |         result = func.apply(context, args) | 
		
	
		
			
				|  |  |  |  |  |         if (!timeout) context = args = null | 
		
	
		
			
				|  |  |  |  |  |       } | 
		
	
		
			
				|  |  |     } |  |  |     } | 
		
	
		
			
				|  |  |  |  |  |   } | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  |     return function(...args) { |  |  |  | 
		
	
		
			
				|  |  |         context = this |  |  |  | 
		
	
		
			
				|  |  |         timestamp = +new Date() |  |  |  | 
		
	
		
			
				|  |  |         const callNow = immediate && !timeout |  |  |  | 
		
	
		
			
				|  |  |             // 如果延时不存在,重新设定延时
 |  |  |  | 
		
	
		
			
				|  |  |         if (!timeout) timeout = setTimeout(later, wait) |  |  |  | 
		
	
		
			
				|  |  |         if (callNow) { |  |  |  | 
		
	
		
			
				|  |  |             result = func.apply(context, args) |  |  |  | 
		
	
		
			
				|  |  |             context = args = null |  |  |  | 
		
	
		
			
				|  |  |         } |  |  |  | 
		
	
		
			
				|  |  | 
 |  |  |  | 
		
	
		
			
				|  |  |         return result |  |  |  | 
		
	
		
			
				|  |  |  |  |  |   return function(...args) { | 
		
	
		
			
				|  |  |  |  |  |     context = this | 
		
	
		
			
				|  |  |  |  |  |     timestamp = +new Date() | 
		
	
		
			
				|  |  |  |  |  |     const callNow = immediate && !timeout | 
		
	
		
			
				|  |  |  |  |  |     // 如果延时不存在,重新设定延时
 | 
		
	
		
			
				|  |  |  |  |  |     if (!timeout) timeout = setTimeout(later, wait) | 
		
	
		
			
				|  |  |  |  |  |     if (callNow) { | 
		
	
		
			
				|  |  |  |  |  |       result = func.apply(context, args) | 
		
	
		
			
				|  |  |  |  |  |       context = args = null | 
		
	
		
			
				|  |  |     } |  |  |     } | 
		
	
		
			
				|  |  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |  |     return result | 
		
	
		
			
				|  |  |  |  |  |   } | 
		
	
		
			
				|  |  | } |  |  | } | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  | /** |  |  | /** | 
		
	
	
		
			
				|  | @ -285,18 +285,18 @@ export function debounce(func, wait, immediate) { | 
		
	
		
			
				|  |  |  * @returns {Object} |  |  |  * @returns {Object} | 
		
	
		
			
				|  |  |  */ |  |  |  */ | 
		
	
		
			
				|  |  | export function deepClone(source) { |  |  | export function deepClone(source) { | 
		
	
		
			
				|  |  |     if (!source && typeof source !== 'object') { |  |  |  | 
		
	
		
			
				|  |  |         throw new Error('error arguments', 'deepClone') |  |  |  | 
		
	
		
			
				|  |  |  |  |  |   if (!source && typeof source !== 'object') { | 
		
	
		
			
				|  |  |  |  |  |     throw new Error('error arguments', 'deepClone') | 
		
	
		
			
				|  |  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |  |   const targetObj = source.constructor === Array ? [] : {} | 
		
	
		
			
				|  |  |  |  |  |   Object.keys(source).forEach(keys => { | 
		
	
		
			
				|  |  |  |  |  |     if (source[keys] && typeof source[keys] === 'object') { | 
		
	
		
			
				|  |  |  |  |  |       targetObj[keys] = deepClone(source[keys]) | 
		
	
		
			
				|  |  |  |  |  |     } else { | 
		
	
		
			
				|  |  |  |  |  |       targetObj[keys] = source[keys] | 
		
	
		
			
				|  |  |     } |  |  |     } | 
		
	
		
			
				|  |  |     const targetObj = source.constructor === Array ? [] : {} |  |  |  | 
		
	
		
			
				|  |  |     Object.keys(source).forEach(keys => { |  |  |  | 
		
	
		
			
				|  |  |         if (source[keys] && typeof source[keys] === 'object') { |  |  |  | 
		
	
		
			
				|  |  |             targetObj[keys] = deepClone(source[keys]) |  |  |  | 
		
	
		
			
				|  |  |         } else { |  |  |  | 
		
	
		
			
				|  |  |             targetObj[keys] = source[keys] |  |  |  | 
		
	
		
			
				|  |  |         } |  |  |  | 
		
	
		
			
				|  |  |     }) |  |  |  | 
		
	
		
			
				|  |  |     return targetObj |  |  |  | 
		
	
		
			
				|  |  |  |  |  |   }) | 
		
	
		
			
				|  |  |  |  |  |   return targetObj | 
		
	
		
			
				|  |  | } |  |  | } | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  | /** |  |  | /** | 
		
	
	
		
			
				|  | @ -304,16 +304,16 @@ export function deepClone(source) { | 
		
	
		
			
				|  |  |  * @returns {Array} |  |  |  * @returns {Array} | 
		
	
		
			
				|  |  |  */ |  |  |  */ | 
		
	
		
			
				|  |  | export function uniqueArr(arr) { |  |  | export function uniqueArr(arr) { | 
		
	
		
			
				|  |  |     return Array.from(new Set(arr)) |  |  |  | 
		
	
		
			
				|  |  |  |  |  |   return Array.from(new Set(arr)) | 
		
	
		
			
				|  |  | } |  |  | } | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  | /** |  |  | /** | 
		
	
		
			
				|  |  |  * @returns {string} |  |  |  * @returns {string} | 
		
	
		
			
				|  |  |  */ |  |  |  */ | 
		
	
		
			
				|  |  | export function createUniqueString() { |  |  | export function createUniqueString() { | 
		
	
		
			
				|  |  |     const timestamp = +new Date() + '' |  |  |  | 
		
	
		
			
				|  |  |     const randomNum = parseInt((1 + Math.random()) * 65536) + '' |  |  |  | 
		
	
		
			
				|  |  |     return (+(randomNum + timestamp)).toString(32) |  |  |  | 
		
	
		
			
				|  |  |  |  |  |   const timestamp = +new Date() + '' | 
		
	
		
			
				|  |  |  |  |  |   const randomNum = parseInt((1 + Math.random()) * 65536) + '' | 
		
	
		
			
				|  |  |  |  |  |   return (+(randomNum + timestamp)).toString(32) | 
		
	
		
			
				|  |  | } |  |  | } | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  | /** |  |  | /** | 
		
	
	
		
			
				|  | @ -323,7 +323,7 @@ export function createUniqueString() { | 
		
	
		
			
				|  |  |  * @returns {boolean} |  |  |  * @returns {boolean} | 
		
	
		
			
				|  |  |  */ |  |  |  */ | 
		
	
		
			
				|  |  | export function hasClass(ele, cls) { |  |  | export function hasClass(ele, cls) { | 
		
	
		
			
				|  |  |     return !!ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)')) |  |  |  | 
		
	
		
			
				|  |  |  |  |  |   return !!ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)')) | 
		
	
		
			
				|  |  | } |  |  | } | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  | /** |  |  | /** | 
		
	
	
		
			
				|  | @ -332,7 +332,7 @@ export function hasClass(ele, cls) { | 
		
	
		
			
				|  |  |  * @param {string} cls |  |  |  * @param {string} cls | 
		
	
		
			
				|  |  |  */ |  |  |  */ | 
		
	
		
			
				|  |  | export function addClass(ele, cls) { |  |  | export function addClass(ele, cls) { | 
		
	
		
			
				|  |  |     if (!hasClass(ele, cls)) ele.className += ' ' + cls |  |  |  | 
		
	
		
			
				|  |  |  |  |  |   if (!hasClass(ele, cls)) ele.className += ' ' + cls | 
		
	
		
			
				|  |  | } |  |  | } | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  | /** |  |  | /** | 
		
	
	
		
			
				|  | @ -341,44 +341,44 @@ export function addClass(ele, cls) { | 
		
	
		
			
				|  |  |  * @param {string} cls |  |  |  * @param {string} cls | 
		
	
		
			
				|  |  |  */ |  |  |  */ | 
		
	
		
			
				|  |  | export function removeClass(ele, cls) { |  |  | export function removeClass(ele, cls) { | 
		
	
		
			
				|  |  |     if (hasClass(ele, cls)) { |  |  |  | 
		
	
		
			
				|  |  |         const reg = new RegExp('(\\s|^)' + cls + '(\\s|$)') |  |  |  | 
		
	
		
			
				|  |  |         ele.className = ele.className.replace(reg, ' ') |  |  |  | 
		
	
		
			
				|  |  |     } |  |  |  | 
		
	
		
			
				|  |  |  |  |  |   if (hasClass(ele, cls)) { | 
		
	
		
			
				|  |  |  |  |  |     const reg = new RegExp('(\\s|^)' + cls + '(\\s|$)') | 
		
	
		
			
				|  |  |  |  |  |     ele.className = ele.className.replace(reg, ' ') | 
		
	
		
			
				|  |  |  |  |  |   } | 
		
	
		
			
				|  |  | } |  |  | } | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  | // 替换邮箱字符
 |  |  | // 替换邮箱字符
 | 
		
	
		
			
				|  |  | export function regEmail(email) { |  |  | export function regEmail(email) { | 
		
	
		
			
				|  |  |     if (String(email).indexOf('@') > 0) { |  |  |  | 
		
	
		
			
				|  |  |         const str = email.split('@') |  |  |  | 
		
	
		
			
				|  |  |         let _s = '' |  |  |  | 
		
	
		
			
				|  |  |         if (str[0].length > 3) { |  |  |  | 
		
	
		
			
				|  |  |             for (var i = 0; i < str[0].length - 3; i++) { |  |  |  | 
		
	
		
			
				|  |  |                 _s += '*' |  |  |  | 
		
	
		
			
				|  |  |             } |  |  |  | 
		
	
		
			
				|  |  |         } |  |  |  | 
		
	
		
			
				|  |  |         var new_email = str[0].substr(0, 3) + _s + '@' + str[1] |  |  |  | 
		
	
		
			
				|  |  |  |  |  |   if (String(email).indexOf('@') > 0) { | 
		
	
		
			
				|  |  |  |  |  |     const str = email.split('@') | 
		
	
		
			
				|  |  |  |  |  |     let _s = '' | 
		
	
		
			
				|  |  |  |  |  |     if (str[0].length > 3) { | 
		
	
		
			
				|  |  |  |  |  |       for (var i = 0; i < str[0].length - 3; i++) { | 
		
	
		
			
				|  |  |  |  |  |         _s += '*' | 
		
	
		
			
				|  |  |  |  |  |       } | 
		
	
		
			
				|  |  |     } |  |  |     } | 
		
	
		
			
				|  |  |     return new_email |  |  |  | 
		
	
		
			
				|  |  |  |  |  |     var new_email = str[0].substr(0, 3) + _s + '@' + str[1] | 
		
	
		
			
				|  |  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |  |   return new_email | 
		
	
		
			
				|  |  | } |  |  | } | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  | // 替换手机字符
 |  |  | // 替换手机字符
 | 
		
	
		
			
				|  |  | export function regMobile(mobile) { |  |  | export function regMobile(mobile) { | 
		
	
		
			
				|  |  |     if (mobile.length > 7) { |  |  |  | 
		
	
		
			
				|  |  |         var new_mobile = mobile.substr(0, 3) + '****' + mobile.substr(7) |  |  |  | 
		
	
		
			
				|  |  |     } |  |  |  | 
		
	
		
			
				|  |  |     return new_mobile |  |  |  | 
		
	
		
			
				|  |  |  |  |  |   if (mobile.length > 7) { | 
		
	
		
			
				|  |  |  |  |  |     var new_mobile = mobile.substr(0, 3) + '****' + mobile.substr(7) | 
		
	
		
			
				|  |  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |  |   return new_mobile | 
		
	
		
			
				|  |  | } |  |  | } | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  | // 下载文件
 |  |  | // 下载文件
 | 
		
	
		
			
				|  |  | export function downloadFile(obj, name, suffix) { |  |  | export function downloadFile(obj, name, suffix) { | 
		
	
		
			
				|  |  |     const url = window.URL.createObjectURL(new Blob([obj])) |  |  |  | 
		
	
		
			
				|  |  |     const link = document.createElement('a') |  |  |  | 
		
	
		
			
				|  |  |     link.style.display = 'none' |  |  |  | 
		
	
		
			
				|  |  |     link.href = url |  |  |  | 
		
	
		
			
				|  |  |     const fileName = parseTime(new Date()) + '-' + name + '.' + suffix |  |  |  | 
		
	
		
			
				|  |  |     link.setAttribute('download', fileName) |  |  |  | 
		
	
		
			
				|  |  |     document.body.appendChild(link) |  |  |  | 
		
	
		
			
				|  |  |     link.click() |  |  |  | 
		
	
		
			
				|  |  |     document.body.removeChild(link) |  |  |  | 
		
	
		
			
				|  |  | } |  |  |  | 
		
	
		
			
				|  |  |  |  |  |   const url = window.URL.createObjectURL(new Blob([obj])) | 
		
	
		
			
				|  |  |  |  |  |   const link = document.createElement('a') | 
		
	
		
			
				|  |  |  |  |  |   link.style.display = 'none' | 
		
	
		
			
				|  |  |  |  |  |   link.href = url | 
		
	
		
			
				|  |  |  |  |  |   const fileName = parseTime(new Date()) + '-' + name + '.' + suffix | 
		
	
		
			
				|  |  |  |  |  |   link.setAttribute('download', fileName) | 
		
	
		
			
				|  |  |  |  |  |   document.body.appendChild(link) | 
		
	
		
			
				|  |  |  |  |  |   link.click() | 
		
	
		
			
				|  |  |  |  |  |   document.body.removeChild(link) | 
		
	
		
			
				|  |  |  |  |  | } |