241 lines
5.4 KiB
JavaScript
241 lines
5.4 KiB
JavaScript
import { addressNameCodeMap } from "./enum"
|
||
|
||
function formatTime(time) {
|
||
if (typeof time !== 'number' || time < 0) {
|
||
return time
|
||
}
|
||
|
||
var hour = parseInt(time / 3600)
|
||
time = time % 3600
|
||
var minute = parseInt(time / 60)
|
||
time = time % 60
|
||
var second = time
|
||
|
||
return ([hour, minute, second]).map(function(n) {
|
||
n = n.toString()
|
||
return n[1] ? n : '0' + n
|
||
}).join(':')
|
||
}
|
||
|
||
function formatLocation(longitude, latitude) {
|
||
if (typeof longitude === 'string' && typeof latitude === 'string') {
|
||
longitude = parseFloat(longitude)
|
||
latitude = parseFloat(latitude)
|
||
}
|
||
|
||
longitude = longitude.toFixed(2)
|
||
latitude = latitude.toFixed(2)
|
||
|
||
return {
|
||
longitude: longitude.toString().split('.'),
|
||
latitude: latitude.toString().split('.')
|
||
}
|
||
}
|
||
var dateUtils = {
|
||
UNITS: {
|
||
'年': 31557600000,
|
||
'月': 2629800000,
|
||
'天': 86400000,
|
||
'小时': 3600000,
|
||
'分钟': 60000,
|
||
'秒': 1000
|
||
},
|
||
humanize: function(milliseconds) {
|
||
var humanize = '';
|
||
for (var key in this.UNITS) {
|
||
if (milliseconds >= this.UNITS[key]) {
|
||
humanize = Math.floor(milliseconds / this.UNITS[key]) + key + '前';
|
||
break;
|
||
}
|
||
}
|
||
return humanize || '刚刚';
|
||
},
|
||
format: function(dateStr) {
|
||
var date = this.parse(dateStr)
|
||
var diff = Date.now() - date.getTime();
|
||
if (diff < this.UNITS['天']) {
|
||
return this.humanize(diff);
|
||
}
|
||
var _format = function(number) {
|
||
return (number < 10 ? ('0' + number) : number);
|
||
};
|
||
return date.getFullYear() + '/' + _format(date.getMonth() + 1) + '/' + _format(date.getDate()) + '-' +
|
||
_format(date.getHours()) + ':' + _format(date.getMinutes());
|
||
},
|
||
parse: function(str) { //将"yyyy-mm-dd HH:MM:ss"格式的字符串,转化为一个Date对象
|
||
var a = str.split(/[^0-9]/);
|
||
return new Date(a[0], a[1] - 1, a[2], a[3], a[4], a[5]);
|
||
}
|
||
};
|
||
|
||
const numberToChinese = (num)=> {
|
||
const chineseNums = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
|
||
const chineseUnits = ['', '十', '百', '千', '万', '亿', '兆'];
|
||
|
||
if (num === 0) {
|
||
return chineseNums[0];
|
||
}
|
||
|
||
const digits = Math.floor(num).toString().split('');
|
||
const len = digits.length;
|
||
|
||
let result = '';
|
||
|
||
for (let i = 0; i < len; i++) {
|
||
const digit = parseInt(digits[i]);
|
||
const unit = chineseUnits[len - 1 - i];
|
||
|
||
if (digit !== 0) {
|
||
result += chineseNums[digit] + unit;
|
||
} else {
|
||
if (result[result.length - 1] !== chineseNums[0]) {
|
||
result += chineseNums[digit]
|
||
}
|
||
}
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|
||
// - 获取地址详情
|
||
const getAddressDetail = (item= {}, showDetail = true)=> {
|
||
let ary = []
|
||
addressNameCodeMap.map((t)=> {
|
||
ary.push(item[t.nameKey])
|
||
})
|
||
if(showDetail) {
|
||
ary.push(item.address)
|
||
}
|
||
return ary.join("")
|
||
}
|
||
|
||
const setAddresModalParam = (data = {})=> {
|
||
let regIds = []
|
||
let regNames = []
|
||
addressNameCodeMap.map((t, index)=> {
|
||
let name = data[t.nameKey]
|
||
let code = data[t.codeKey]
|
||
if(name && code) {
|
||
regIds[index] = code
|
||
regNames[index] = name
|
||
}
|
||
})
|
||
return {
|
||
regIds,
|
||
regNames
|
||
}
|
||
}
|
||
|
||
// - 转换list的key val
|
||
const transListKeyTitle = ({ valKey = '', titleKey = '', list = [] })=> {
|
||
list.map(t=> {
|
||
t.title = t[titleKey] || t.title
|
||
t.val = t[valKey] || t.val
|
||
})
|
||
return list
|
||
}
|
||
|
||
// -防抖
|
||
const debounce = (fn, wait) => {
|
||
let delay = wait || 500
|
||
let timer
|
||
return function() {
|
||
let args = arguments;
|
||
if (timer) {
|
||
clearTimeout(timer)
|
||
console.log('拦截')
|
||
}
|
||
let callNow = !timer
|
||
timer = setTimeout(() => {
|
||
console.log('发送')
|
||
fn.apply(this, args)
|
||
timer = null
|
||
}, delay)
|
||
}
|
||
}
|
||
|
||
// -节流
|
||
const throttle = (fn, wait) => {
|
||
let delay = wait || 500
|
||
let timer = null
|
||
return function() {
|
||
if (timer) {
|
||
console.log('拦截');
|
||
return
|
||
}
|
||
timer = setTimeout(() => {
|
||
console.log('发送');
|
||
fn.apply(this, arguments)
|
||
timer = null
|
||
}, delay)
|
||
}
|
||
}
|
||
|
||
//TextEncoder
|
||
const textEncoder = (input)=> {
|
||
return unescape(encodeURIComponent(input)).split("").map(val => val.charCodeAt());
|
||
}
|
||
|
||
//TextDecoder
|
||
const textDecoder = (input)=> {
|
||
return decodeURIComponent(escape(String.fromCharCode(...[input])));
|
||
}
|
||
|
||
const getQueryObject = (url)=> {
|
||
var query = url.split('?')[1];
|
||
var obj = {};
|
||
|
||
query = query.split('&');
|
||
query.forEach(query => {
|
||
var item = query.split('=');
|
||
obj[item[0]] = item[1]; // 当然如果有中文/Unicode字符可以在这里用URIencode方法转码一下
|
||
});
|
||
return obj;
|
||
}
|
||
|
||
export function isPlainObject(obj){
|
||
return typeof obj === 'object' && Object.prototype.toString.call(obj) === '[object Object]'
|
||
}
|
||
|
||
export function isPlainArray(obj){
|
||
return typeof obj === 'object' && Object.prototype.toString.call(obj) === '[object Array]'
|
||
}
|
||
|
||
export function deepAssign() {
|
||
let len = arguments.length, target = arguments[0]
|
||
if (!isPlainObject(target)) {
|
||
target = {}
|
||
}
|
||
for (let i = 1; i < len; i++) {
|
||
let source = arguments[i]
|
||
if (isPlainObject(source)) {
|
||
for (let s in source) {
|
||
if (s === '__proto__' || target === source[s]) {
|
||
continue
|
||
}
|
||
if (isPlainObject(source[s])) {
|
||
target[s] = deepAssign(target[s], source[s])
|
||
} else {
|
||
target[s] = source[s]
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return target
|
||
}
|
||
|
||
export {
|
||
getAddressDetail,
|
||
setAddresModalParam,
|
||
numberToChinese,
|
||
formatTime,
|
||
formatLocation,
|
||
dateUtils,
|
||
transListKeyTitle,
|
||
debounce,
|
||
throttle,
|
||
textEncoder,
|
||
textDecoder,
|
||
getQueryObject,
|
||
}
|