Files
xzlz_jbWeb/src/utils/index.js
13684185576 46fb5f3ce5 警报
2025-07-16 19:44:39 +08:00

604 lines
17 KiB
JavaScript
Raw 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.

/* eslint-disable */
/**
* Created by PanJiaChen on 16/11/18.
*/
// import defaultSettings from '@/settings'
import dictData from './dicts'
/**
* Parse the time to string
* @param {(Object|string|number)} time
* @param {string} cFormat
* @returns {string | null}
*/
export function parseTime(time, cFormat) {
if (arguments.length === 0) {
return null
}
const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'
let date
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)
}
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(/{([ymdhisa])+}/g, (result, key) => {
const value = formatObj[key]
// Note: getDay() returns 0 on Sunday
if (key === 'a') {
return ['日', '一', '二', '三', '四', '五', '六'][value]
}
return value.toString().padStart(2, '0')
})
return time_str
}
/**
* @param {number} time
* @param {string} option
* @returns {string}
*/
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()
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() +
1 +
'月' +
d.getDate() +
'日' +
d.getHours() +
'时' +
d.getMinutes() +
'分'
)
}
}
// 毫秒转时长
export function formatDuring(mss) {
var days = parseInt(mss / (1000 * 60 * 60 * 24));
var hours = parseInt((mss % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
var minutes = parseInt((mss % (1000 * 60 * 60)) / (1000 * 60));
var seconds = (mss % (1000 * 60)) / 1000;
if (days) {
return days + "天" + hours + "小时" + minutes + "分钟" + seconds + "秒";
} else if (hours) {
return hours + "小时" + minutes + "分钟" + seconds + "秒";
} else if (minutes) {
return minutes + "分钟" + seconds + "秒";
} else {
return seconds + "秒";
}
}
/**
* @param {string} url
* @returns {Object}
*/
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
}
/**
* @param {string} input value
* @returns {number} output value
*/
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
}
/**
* @param {Array} actual
* @returns {Array}
*/
export function cleanArray(actual) {
const newArray = []
for (let i = 0; i < actual.length; i++) {
if (actual[i]) {
newArray.push(actual[i])
}
}
return newArray
}
/**
* @param {Object} json
* @returns {Array}
*/
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('&')
}
/**
* @param {string} url
* @returns {Object}
*/
export function param2Obj(url) {
const search = url.split('?')[1]
if (!search) {
return {}
}
return JSON.parse(
'{"' +
decodeURIComponent(search)
.replace(/"/g, '\\"')
.replace(/&/g, '","')
.replace(/=/g, '":"')
.replace(/\+/g, ' ') +
'"}'
)
}
/**
* @param {string} val
* @returns {string}
*/
export function html2Text(val) {
const div = document.createElement('div')
div.innerHTML = val
return div.textContent || div.innerText
}
/**
* Merges two objects, giving the last one precedence
* @param {Object} target
* @param {(Object|Array)} source
* @returns {Object}
*/
export function objectMerge(target, source) {
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
}
})
return target
}
/**
* @param {HTMLElement} element
* @param {string} 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 =
classString.substr(0, nameIndex) +
classString.substr(nameIndex + className.length)
}
element.className = classString
}
/**
* @param {string} type
* @returns {Date}
*/
export function getTime(type) {
if (type === 'start') {
return new Date().getTime() - 3600 * 1000 * 24 * 90
} else {
return new Date(new Date().toDateString())
}
}
/**
* @param {Function} func
* @param {number} wait
* @param {boolean} immediate
* @return {*}
*/
export function debounce(func, wait, immediate) {
let timeout, args, context, timestamp, result
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
}
}
}
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
}
}
/**
* This is just a simple version of deep copy
* Has a lot of edge cases bug
* If you want to use a perfect deep copy, use lodash's _.cloneDeep
* @param {Object} source
* @returns {Object}
*/
export function deepClone(source) {
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]
}
})
return targetObj
}
/**
* @param {Array} arr
* @returns {Array}
*/
export function uniqueArr(arr) {
return Array.from(new Set(arr))
}
/**
* @returns {string}
*/
export function createUniqueString() {
const timestamp = +new Date() + ''
const randomNum = parseInt((1 + Math.random()) * 65536) + ''
return (+(randomNum + timestamp)).toString(32)
}
/**
* Check if an element has a class
* @param {HTMLElement} elm
* @param {string} cls
* @returns {boolean}
*/
export function hasClass(ele, cls) {
return !!ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)'))
}
/**
* Add class to element
* @param {HTMLElement} elm
* @param {string} cls
*/
export function addClass(ele, cls) {
if (!hasClass(ele, cls)) ele.className += ' ' + cls
}
/**
* Remove class from element
* @param {HTMLElement} elm
* @param {string} cls
*/
export function removeClass(ele, cls) {
if (hasClass(ele, cls)) {
const reg = new RegExp('(\\s|^)' + cls + '(\\s|$)')
ele.className = ele.className.replace(reg, ' ')
}
}
// 拖动
/**
* 拖动div
* @param event // mouse event
* @param {HTMLElement} selectElement
*/
export function dargMove(event, selectElement) {
var div1 = selectElement
selectElement.style.cursor = 'move'
// this.isDowm = true
var distanceX = event.clientX - selectElement.offsetLeft
var distanceY = event.clientY - selectElement.offsetTop
document.onmousemove = function (ev) {
var oevent = ev || event
div1.style.left = oevent.clientX - distanceX + 'px'
div1.style.top = oevent.clientY - distanceY + 'px'
}
document.onmouseup = function () {
document.onmousemove = null
document.onmouseup = null
div1.style.cursor = 'default'
}
}
/* 时间戳 转换为 指定格式的日期字符串默认格式yyyy-mm-dd hh:mi:ss */
export function timestampToStr(timestamp, format) {
var dateStr = ''
// timestamp 为空
if (timestamp === null || timestamp === '') {
timestamp = new Date().getTime()
}
// timestamp string类型
if (typeof timestamp === 'string') {
timestamp = new Date(timestamp.replace(/-/g, '/')).getTime()
}
var d = new Date(Number(timestamp))
var year = d.getFullYear()
var month = (d.getMonth() + 1) < 10 ? '0' + (d.getMonth() + 1) : d.getMonth() + 1
var date = d.getDate() < 10 ? '0' + (d.getDate()) : d.getDate()
var hours = d.getHours() < 10 ? '0' + (d.getHours()) : d.getHours()
var minutes = d.getMinutes() < 10 ? '0' + (d.getMinutes()) : d.getMinutes()
var seconds = d.getSeconds() < 10 ? '0' + (d.getSeconds()) : d.getSeconds()
if (format === '' || format === null || format === undefined) {
dateStr = year + '-' + month + '-' + date + ' ' + hours + ':' + minutes + ':' + seconds
}
if (format === 'yyyy') {
dateStr = year
} else if (format === 'yyyy-mm') {
dateStr = year + '-' + month
} else if (format === 'yyyy-mm-dd') {
dateStr = year + '-' + month + '-' + date
} else if (format === 'mm-dd') {
dateStr = month + '-' + date
} else if (format === 'hh') {
dateStr = hours
} else if (format === 'hh:mi') {
dateStr = hours + ':' + minutes
} else if (format === 'hh:mi:ss') {
dateStr = hours + ':' + minutes + ':' + seconds
} else if (format === 'yyyy-mm-dd hh:mi') {
dateStr = year + '-' + month + '-' + date + ' ' + hours + ':' + minutes
} else if (format === 'yyyy-mm-dd hh:mi:ss') {
dateStr = year + '-' + month + '-' + date + ' ' + hours + ':' + minutes + ':' + seconds
} else if (format === 'mm-dd hh:mi') {
dateStr = month + '-' + date + ' ' + hours + ':' + minutes
}
return dateStr
}
export function objectToFormData(obj, form, namespace) {
let fd = form || new FormData()
let formKey
if (obj instanceof Array) {
for (let item of obj) {
if (typeof item === 'object' && !(item instanceof File)) {
this.objectToFormData(item, fd, namespace + '[]')
} else {
// 若是数组则在关键字后面加上[]
fd.append(namespace + '[]', item)
}
}
} else {
for (let property in obj) {
if (obj.hasOwnProperty(property) && obj[property]) {
if (namespace) {
// 若是对象,则这样
formKey = namespace + '[' + property + ']'
} else {
formKey = property
}
// if the property is an object, but not a File,
// use recursivity.
if (typeof obj[property] === 'object' && !(obj[property] instanceof File)) {
// 此处将formKey递归下去很重要因为数据结构会出现嵌套的情况
this.objectToFormData(obj[property], fd, formKey)
} else {
// if it's a string or a File object
fd.append(formKey, obj[property])
}
}
}
}
return fd
}
export function getNextDate(startDate, nextType, nextStep) {
var dateStr = "";
//startDate string类型
if (typeof startDate == 'string') {
startDate = new Date(startDate);
}
if (nextType == 'Y') {
startDate.setFullYear(startDate.getFullYear() + Number(nextStep));
} else if (nextType == 'M') {
startDate.setMonth(startDate.getMonth() + Number(nextStep));
} else if (nextType == 'D') {
startDate.setDate(startDate.getDate() + Number(nextStep));
} else if (nextType == 'H') {
startDate.setHours(startDate.getHours() + Number(nextStep));
} else if (nextType == 'm') {
startDate.setMinutes(startDate.getMinutes() + Number(nextStep));
} else if (nextType == 'S') {
startDate.setSeconds(startDate.getSeconds() + Number(nextStep));
}
var year = startDate.getFullYear();
var month = (startDate.getMonth() + 1) < 10 ? "0" + (startDate.getMonth() + 1) : startDate.getMonth() + 1;
var date = startDate.getDate() < 10 ? "0" + (startDate.getDate()) : startDate.getDate();
var hours = startDate.getHours() < 10 ? "0" + (startDate.getHours()) : startDate.getHours();
var minutes = startDate.getMinutes() < 10 ? "0" + (startDate.getMinutes()) : startDate.getMinutes();
var seconds = startDate.getSeconds() < 10 ? "0" + (startDate.getSeconds()) : startDate.getSeconds();
dateStr = year + "-" + month + "-" + date + " " + hours + ":" + minutes + ":" + seconds;
return dateStr;
}
//大数据综合档案
export function getZhdaList(data, type) {
// if (type === 'RY') window.open(`${defaultSettings.zhdanRd_URL}/${data}`);
// if (type === 'CL') window.open(`${defaultSettings.zhdanCd_URL}/${data}`);
}
// 加载本地字典格式化
export function fromartBqDict(dict, key,yjlyjb) {
let html = ''
for (const x in dictData[dict]) {
if (x === key) {
if (dict === 'ZLYJRCBQ') {
if (x === '01' || x === '05' || x === '80') {
html = `<span class="list-tips tips-zl bg-red">${dictData[dict][x]}</span>`
} else {
let color = "";
if (yjlyjb== "10") {
color = "bg-red";
} else if (yjlyjb == "15") {
color = "bg-org";
} else if (yjlyjb == "20") {
color = "bg-yellow";
} else if (yjlyjb == "30") {
color = "bg-blue1";
} else {
color = "bg-yellow";
}
html = `<span class="list-tips tips-zl `+color+`">${dictData[dict][x]}</span>`
}
} else if (dict === 'ZLYJRCBQDM') {
if (x === 'ZT' || x === 'LKRY' || x === 'LKCL' || x === 'DQ') {
html = `<span class="list-tips tips-zl bg-red">${dictData[dict][x]}</span>`
} else {
html = `<span class="list-tips tips-zl bg-yellow">${dictData[dict][x]}</span>`
}
} else if (dict === 'ZLZTDM') {
switch (x) {
case '01':
html = `<span class="bold blue">${dictData[dict][x]}</span>`
break
case '02':
html = `<span class="bold blue">${dictData[dict][x]}</span>`
break
case '03':
html = `<span class="bold blue">${dictData[dict][x]}</span>`
break
case '04':
html = `<span class="bold blue">${dictData[dict][x]}</span>`
break
case '05':
html = `<span class="bold green">${dictData[dict][x]}</span>`
break
case '99':
html = `<span class="bold gray">${dictData[dict][x]}</span>`
break
default:
html = `<span class="bold white">${dictData[dict][x]}</span>`
break
}
} else if (dict === 'JQZTDM') {
switch (x) {
case '01':
html = `<span class="bold red">${dictData[dict][x]}</span>`
break
case '02':
html = `<span class="bold green">${dictData[dict][x]}</span>`
break
default:
html = `<span class="bold green">${dictData[dict][x]}</span>`
break
}
} else {
html = dictData[dict][x]
}
return html
}
}
}
// 格式化地址
export function fromartAdress(str) {
if (!str) return ''
if (str === '四川省泸州市公安局') return '市公安局'
let s = str.replace(/四川省/g, '')
s = s.replace(/泸州市公安局/g, '... ')
s = s.replace(/泸州市/g, '... ')
return s
}