emis-sapp/common/util.js

241 lines
5.4 KiB
JavaScript
Raw Normal View History

2024-05-31 10:42:15 +00:00
import { addressNameCodeMap } from "./enum"
2023-11-25 16:29:44 +00:00
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]);
}
};
2023-12-10 05:53:38 +00:00
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;
}
2024-05-31 10:42:15 +00:00
// - 获取地址详情
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]
2024-08-02 07:59:04 +00:00
if(name && code) {
regIds[index] = code
regNames[index] = name
}
2024-05-31 10:42:15 +00:00
})
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])));
}
2024-07-16 13:25:55 +00:00
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;
}
2024-05-31 10:42:15 +00:00
2024-07-17 16:02:14 +00:00
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
}
2023-11-25 16:29:44 +00:00
export {
2024-05-31 10:42:15 +00:00
getAddressDetail,
setAddresModalParam,
2023-12-10 05:53:38 +00:00
numberToChinese,
2023-11-25 16:29:44 +00:00
formatTime,
formatLocation,
2024-05-31 10:42:15 +00:00
dateUtils,
transListKeyTitle,
debounce,
throttle,
textEncoder,
textDecoder,
2024-07-16 13:25:55 +00:00
getQueryObject,
2023-11-25 16:29:44 +00:00
}