emis-app/common/util.js
2024-08-02 15:55:53 +08:00

241 lines
5.4 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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,
}