/** * Created by jiachenpan on 16/11/18. */ 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 (('' + time).length === 10) time = parseInt(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(/{(y|m|d|h|i|s|a)+}/g, (result, key) => { let value = formatObj[key] // Note: getDay() returns 0 on Sunday if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] } if (result.length > 0 && value < 10) { value = '0' + value } return value || 0 }) return time_str } export function formatTime (time, option) { time = +time * 1000 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 isExternal (path) { return /^(https?:|mailto:|tel:)/.test(path) } export function deepClone (source) { if (!source && typeof source !== 'object') { throw new Error('error arguments', 'shallowClone') } 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 } function padLeftZero (str) { return ('00' + str).substr(str.length) } /** * 生成uuid */ export function getUUID () { var d = new Date().getTime() if (window.performance && typeof window.performance.now === 'function') { d += performance.now() // use high-precision timer if available } var uuid = 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function (c) { var r = (d + Math.random() * 16) % 16 | 0 d = Math.floor(d / 16) return (c == 'x' ? r : (r & 0x3) | 0x8).toString(16) }) return uuid } // crypto 加解密 const CryptoJS = require('crypto-js') // 引用AES源码js const key = CryptoJS.enc.Utf8.parse('1234123412ABCDEF') // 十六位十六进制数作为密钥 const iv = CryptoJS.enc.Utf8.parse('ABCDEF1234123412') // 十六位十六进制数作为密钥偏移量 // 解密方法 export function Decrypt (word) { const encryptedHexStr = CryptoJS.enc.Hex.parse(word) const srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr) const decrypt = CryptoJS.AES.decrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }) const decryptedStr = decrypt.toString(CryptoJS.enc.Utf8) const inside = decryptedStr.toString() const i = inside.substr(-32) return inside.split(i)[0] } // 加密方法 export function Encrypt (word) { const srcs = CryptoJS.enc.Utf8.parse(word + getUUID()) const encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }) return encrypted.ciphertext.toString().toUpperCase() } /** * 导出文件接口请求后的的公用方法 * res 请求后返回的response * fileName 文件名 */ export function downloadBlob (res, fileName) { const blob = new Blob([res.data], { type: 'application/vnd.ms-excel;charset=utf-8', }) if (window.navigator && window.navigator.msSaveOrOpenBlob) { // ie navigator.msSaveBlob(blob, fileName || '文件' + '.xlsx') } else { const link = document.createElement('a') // let blob = new Blob([res.data], {type: 'application/vnd.ms-excel'}) link.style.display = 'none' link.href = URL.createObjectURL(blob) fileName && (link.download = fileName + '.xlsx') // 下载的文件名 document.body.appendChild(link) link.click() document.body.removeChild(link) } } // 下载文件 export function downloadFile (obj, name, suffix) { const url = window.URL.createObjectURL(new Blob([obj])) const link = document.createElement('a') link.style.display = 'none' link.href = url const fileName = parseTime(new Date()) + '-' + name + '.' + suffix link.setAttribute('download', fileName) document.body.appendChild(link) link.click() document.body.removeChild(link) }