// 通用工具类,定义通用函数及常用接口 import { mapValues } from 'lodash' import { encryptByAes } from '@/utils/encrypt' // import { preview } from '@/business/platform/form/utils/custom/preview' import request from './joinCURD' // import getRequest from './general' import pinyin4js from 'pinyin4js' // import { snapshoot } from "@/api/platform/file/attachment"; import { getNextIdByAlias } from '@/api/platform/system/identity' import { save as sendMsg } from '@/api/platform/message/innerMessage' import { save as saveNews } from '@/api/platform/system/news' import { bpmTaskSave } from '@/api/platform/bpmn/bpmTask' // import { onlyOfficeToPdf } from '@/api/platform/form/seal' import { downloadFile as download } from '@/business/platform/file/utils' // import { removeFormData } from '@/api/platform/data/dataTemplate' // 引入工具类 import Utils from '@/utils/util' import ActionUtils from '@/utils/action' // base64解码 const decode = str => decodeURIComponent( window .atob(str) .split('') .map(c => `%${`00${c.charCodeAt(0).toString(16)}`.slice(-2)}`) .join('') ) // 下载 export const downloadByBlob = (o, name) => { if (!(o instanceof Blob)) { return } if (window.navigator.msSaveBlob) { window.navigator.msSaveBlob(o, name) } else { const URL = window.URL || window.webkitURL || window const e = document.createElementNS('http://www.w3.org/1999/xhtml', 'a') e.href = URL.createObjectURL(o) e.download = name if (document.all) { e.click() } else { const ev = document.createEvent('MouseEvents') ev.initMouseEvent( 'click', true, false, window, 0, 0, 0, 0, false, false, false, false, 0, null ) e.dispatchEvent(ev) } } } // 获取当前时间 export const getDateNow = (length = 10, formatType) => { if (formatType === 'string') { return new Date(new Date().getTime() + 28800000) .toJSON() .slice(0, length) .replace(/[-:T]/g, '') } return new Date(new Date().getTime() + 28800000) .toJSON() .slice(0, length) .replace('T', ' ') } // 获取指定值后的日期 export const getDate = (type, value, date) => { const d = date || getDateNow(19) if ( typeof type !== 'string' || !Number.isInteger(value) || typeof d !== 'string' ) { console.log('参数类型错误') return null } const now = new Date(d) const D = { day: value * 24 * 60 * 60 * 1000, hour: value * 60 * 60 * 1000, minute: value * 60 * 1000, second: value * 1000 } const year = now.getFullYear() const month = now.getMonth() const day = now.getDate() const hour = now.getHours() const minute = now.getMinutes() const second = now.getSeconds() switch (type) { case 'year': { const isLeapYear = new Date(year + value, 1, 29).getDate() === 29 return new Date( year + value, isLeapYear && month === 1 && day === 29 ? 1 : month, isLeapYear && month === 1 && day === 29 ? 29 : day, hour, minute, second ) } case 'month': { let newYear = year let newMonth = month + value if (newMonth < 0) { newYear -= Math.ceil(Math.abs(newMonth) / 12) newMonth = 12 - (Math.abs(newMonth) % 12) } else if (newMonth > 11) { newYear += Math.floor(newMonth / 12) newMonth = newMonth % 12 } const isLeapMonth = new Date(newYear, newMonth + 1, 0).getDate() === 29 return new Date( newYear, isLeapMonth && month === 1 && day === 29 ? 1 : newMonth, isLeapMonth && month === 1 && day === 29 ? 29 : day, hour, minute, second ) } case 'day': case 'hour': case 'minute': case 'second': return new Date(now.getTime() + D[type]) default: console.log('无效的日期类型') return null } } // 时间格式化 export const getFormatDate = (type, length, date = new Date()) => { const now = new Date(new Date(date).getTime()) // eslint-disable-next-line if (now == 'Invalid Date') { console.log('非法日期,无法格式化') return date } const year = now.getFullYear() const month = now.getMonth() + 1 const day = now.getDate() const hours = now.getHours() const minutes = now.getMinutes() const seconds = now.getSeconds() // 补零 const padZero = num => { return num.toString().padStart(2, '0') } // 默认返回String类型 let result = `${year}-${padZero(month)}-${padZero(day)} ${padZero( hours )}:${padZero(minutes)}:${padZero(seconds)}` switch (type) { case 'string': result = `${year}-${padZero(month)}-${padZero(day)} ${padZero( hours )}:${padZero(minutes)}:${padZero(seconds)}` break case 'cn': result = `${year}年${padZero(month)}月${padZero(day)}日 ${padZero( hours )}时${padZero(minutes)}分${padZero(seconds)}秒` break case 'number': result = `${year}${padZero(month)}${padZero(day)}${padZero( hours )}${padZero(minutes)}${padZero(seconds)}` break default: break } return result.slice(0, length || result.length) } /** * 替换对象中的null为空字符串 * @param {Object} obj 目标对象 */ export const replaceNullWithEmpty = obj => { function replaceValue(value) { if (value === null) { return '' } else if (typeof value === 'object') { if (Array.isArray(value)) { return value.map(item => replaceValue(item)) } else { return mapValues(value, v => replaceValue(v)) } } else { return value } } return replaceValue(obj) } export default { // preview, request, pinyin4js, // snapshoot, getNextIdByAlias, decode, encryptByAes, downloadByBlob, sendMsg, saveNews, bpmTaskSave, getDate, getDateNow, getFormatDate, // onlyOfficeToPdf, generateUUID: Utils.guid, download, // removeFormData, replaceNullWithEmpty, Utils, ActionUtils // getRequest }