// import service from '../services' import CryptoJS from 'crypto-js' import moment from 'moment' console.log(moment().startOf('day'), moment().endOf('day')) let isDebug = process.env.NODE_ENV !== 'production' ? true : false const util = { log: (mes, ...params) => { if (isDebug) { console.log(mes, ...params); } }, /** 下载文件 * @param data {blob} 文件流 * @param filename {String} 文件名称 */ downloadFileByBlob: (data, filename) => { // console.log(111111) if (!data) { // console.log(123) return false; } if (!!window.ActiveXObject || "ActiveXObject" in window) { window.navigator.msSaveOrOpenBlob(new Blob([data]), filename); console.log(22222) } else { console.log(33333) const url = window.URL.createObjectURL(new Blob([data])); // console.log('下载',url) const link = document.createElement("a"); link.style.display = "none"; link.href = url; link.setAttribute("download", filename); document.body.appendChild(link); link.click(); document.body.removeChild(link); } }, /** 下载文件 * @param url {String} 文件下载地址 * @param filename {String} 文件名称 */ downloadFileByUrl: (url, filename) => { if (!!window.ActiveXObject || "ActiveXObject" in window) { window.navigator.msSaveOrOpenBlob(url, filename); } else { const link = document.createElement("a"); link.style.display = "none"; link.href = url; link.setAttribute("download", filename); document.body.appendChild(link); link.click(); document.body.removeChild(link); } }, // 处理base64数据 dealBase64ToBlob(base64Url) { // 截取base64的数据内容(去掉前面的描述信息,类似这样的一段:data:image/png;base64,)并解码为2进制数据 let bstr = atob(base64Url.split(",")[1]); // 获取解码后的二进制数据的长度,用于后面创建二进制数据容器 let olength = bstr.length; // 创建一个Uint8Array类型的数组以存放二进制数据 var u8arr = new Uint8Array(olength); // 将二进制数据存入Uint8Array类型的数组中 while (olength--) { u8arr[olength] = bstr.charCodeAt(olength); } // 创建blob对象 let blob = new Blob([u8arr]); return blob; }, // 获取文件扩展名 getFileExtension: (fileName) => { const fileNameSplited = fileName.split("."); return fileNameSplited[fileNameSplited.length - 1].toLowerCase(); }, // 获取文件名 getFileName: (fileName) => { return fileName.substring(0, fileName.lastIndexOf(".")); }, /** * 判断文件类型 */ getFileType(fileName) { // 获取文件拓展名,统一取小写判断 const fileExtension = this.getFileExtension(fileName) // 通过文件拓展名判断文件类型 switch (fileExtension) { case 'jpg': case 'jpeg': case 'png': case 'bmp': return 'image' case 'mp4': case 'avi': case 'm3u8': return 'video' case 'mp3': case 'amr': case 'm4a': return 'audio' case 'doc': case 'docx': case 'xls': case 'xlsx': case 'ppt': case 'pptx': case 'pdf': return 'pdf' case 'txt': return 'txt' case 'zip': case 'rar': return 'zip' default: return '' } }, /* 常用方法 */ isEmptyObject(value) { if (!value) { return true; } if (!(value instanceof Object)) { return true; } return Object.keys(value).length < 1; }, isEmptyString(string) { if (!string) { return true; } if (!(string instanceof String)) { return true; } return string.length < 1; }, isEmptyArray(array) { if (!array) { return true; } if (!(array instanceof Array)) { return true; } return array.length < 1; }, // DES加密 encryptByDES(key, message) { let keyHex = CryptoJS.enc.Utf8.parse(key); let encrypted = CryptoJS.DES.encrypt(message, keyHex, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); return encrypted.toString(); }, //DES 解密 decryptByDES(ciphertext, key) { let keyHex = CryptoJS.enc.Utf8.parse(key); // direct decrypt ciphertext let decrypted = CryptoJS.DES.decrypt({ ciphertext: CryptoJS.enc.Base64.parse(ciphertext) }, keyHex, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); return decrypted.toString(CryptoJS.enc.Utf8); }, // 验证图片类型 reg_img(fileUrl) { console.log(fileUrl,'---fileUrl') if(fileUrl==null||fileUrl=='') { // return fileUrl return require('../assets/image/util/word_img.jpg') } if(/.(pdf)$/.test(fileUrl.toLowerCase())) { return require('../assets/image/util/pdf_img.jpg') } else if(/.(xls|xlsx)$/.test(fileUrl.toLowerCase())) { return require('../assets/image/util/excel_img.jpg') } else if(/.(doc|docx)$/.test(fileUrl.toLowerCase())) { return require('../assets/image/util/word_img.jpg') } else if(/.(zip|rar)$/.test(fileUrl.toLowerCase())) { return require('../assets/image/util/yswj.jpg') } else { // return service.service.serviceurl+fileUrl return fileUrl } }, /** * 根据不同的数据返回相关的icon-目前返回图片 */ getIcon(data) { switch (data.fileType) { case 'jpg': case 'jpeg': case 'png': case 'bmp': return require('../assets/image/util/pdf_img.jpg'); case 'pdf': return require('../assets/image/util/pdf_img.jpg'); case 'doc': case 'docx': return require('../assets/image/util/word_img.jpg'); case 'xls': case 'xlsx': return require('../assets/image/util/excel_img.jpg'); case 'mp3': return require('../assets/image/util/audio_img.jpg'); case 'm3u8': case 'mp4': return require('../assets/image/util/video_img.jpg'); default: return require('../assets/image/util/pdf_img.jpg') } }, /** * 格式化日期/时间 * type: YYYY-MM-DD / YYYY-MM-DD HH:mm:ss / HH:mm:ss / hh:mm:ss am / hh:mm:ss pm(12小时制下午) 等 * time: 时间 * */ formatDate(time, type) { return time ? moment(time).format(type) : '' }, // 将日期/时间转换为时间戳,ms formatDateToTimestamp(time) { return time ? moment(time).valueOf() : '' }, // 获取时间戳 getTimestamp() { let timestamp = Date.parse(new Date()); return timestamp }, // 获取昨日 getYesterday(){ let beginTime = moment().subtract(1, "days").format("YYYY-MM-DD 00:00:00"); let endTime = moment().subtract(1, "days").format("YYYY-MM-DD 23:59:59"); return {beginTime, endTime} }, // 获取当天日期/时间 getToday() { let todayStart = moment().startOf('day').format('YYYY-MM-DD HH:mm:ss') let todayEnd = moment().endOf('day').format('YYYY-MM-DD HH:mm:ss') let todayDate = moment().format('YYYY-MM-DD') return {todayStart, todayEnd, todayDate} }, /** * 获取本月, 日期/时间范围 * @param type {String} 格式化时间的类型 YYYY-MM-DD/ YYYY-MM-DD HH:mm:ss等 * x-格式化为时间戳ms, X-格式化为时间戳,单位s */ getCurrentMonth(type='YYYY-MM-DD HH:mm:ss') { let monthStart = moment().startOf('month').format(type) let monthEnd = moment().endOf('month').format(type) // console.log('monthStart:', monthStart, 'monthEnd:', monthEnd) return {monthStart, monthEnd} }, /** * 获取近几周, 日期/时间范围 * @param num {Number} 数量,默认值为1,取近1周的时间。 如果需要近2周,则num = 2 * @param type {String} 格式化时间的类型 YYYY-MM-DD/ YYYY-MM-DD HH:mm:ss等 * x-格式化为时间戳ms, X-格式化为时间戳,单位s */ getRecentWeeks(num = 1, type= 'YYYY-MM-DD HH:mm:ss') { let amount = 7 * num // 近几周的开始时间 let recentWeekStart = moment().subtract(amount, 'days').startOf('day').format(type) // 获取当天结束时间 let todayEnd = moment().endOf('day').format(type) return {recentWeekStart, todayEnd} }, /** * 获取近几月, 日期/时间范围 * @param num {Number} 数量,默认值为1,取近1月的时间。如果需要近3月,则num = 3,近半年,则num = 6 * @param type {String} 格式化时间的类型 YYYY-MM-DD/ YYYY-MM-DD HH:mm:ss等 * x-格式化为时间戳ms, X-格式化为时间戳,单位s */ getRecentMonths(num = 1, type= 'YYYY-MM-DD HH:mm:ss') { // 近几月的开始时间 let recentMonthStart = moment().subtract(num, 'months').startOf('day').format(type) // 获取当天结束时间 let todayEnd = moment().endOf('day').format(type) console.log(recentMonthStart, todayEnd) // console.log('近1月', recentMonthStart, todayEnd) return {recentMonthStart, todayEnd} }, /** * 获取近几年, 日期/时间范围 * @param num {Number} 数量,默认值为1,取近1年的时间。如果需要近3年,则num = 3 * @param type {String} 格式化时间的类型 YYYY-MM-DD / YYYY-MM-DD HH:mm:ss等 * x-格式化为时间戳ms, X-格式化为时间戳,单位s */ getRecentYears(num = 1, type= 'YYYY-MM-DD HH:mm:ss') { // 近几月的开始时间 let recentYearStart = moment().subtract(num, 'years').startOf('day').format(type) // 获取当天结束时间 let todayEnd = moment().endOf('day').format(type) // console.log('近1年', recentYearStart, todayEnd) return {recentYearStart, todayEnd} }, /** * 处理日期, 获取某天的开始时间 * @param time {String, Number} 传入的时间 * @param type {String} 格式化时间的类型 YYYY-MM-DD / YYYY-MM-DD HH:mm:ss等 * x-格式化为时间戳ms, X-格式化为时间戳,单位s */ getDayStart(time, type = 'YYYY-MM-DD HH:mm:ss') { return time ? moment(time).startOf('day').format(type) : '' }, /** * 处理日期, 获取某天的结束时间 * @param time {String, Number} 传入的时间 * @param type {String} 格式化时间的类型 YYYY-MM-DD / YYYY-MM-DD HH:mm:ss等 * x-格式化为时间戳ms, X-格式化为时间戳,单位s */ getDayEnd(time, type = 'YYYY-MM-DD HH:mm:ss') { return time ? moment(time).endOf('day').format(type) : '' }, /* * 点击按钮后,去掉按钮的焦点 * @param evt 事件 * */ removeButtonFocus(evt) { let target = evt.target; if(target.nodeName.toLocaleLowerCase() == "span"){ target = evt.target.parentNode; } target.blur(); }, getDatetimeValue(){ // 获取当前时间 const now = new Date(); // 格式化时间 const year = now.getFullYear(); const month = now.getMonth() + 1; const day = now.getDate(); const hour = now.getHours(); const minute = now.getMinutes(); const second = now.getSeconds(); const currentTime = `${year}-${month >= 10 ? month : '0' + month}-${day >= 10 ? day : '0' + day} ${hour >= 10 ? hour : '0' + hour}:${minute >= 10 ? minute : '0' + minute}:${second >= 10 ? second : '0' + second}`; // 将格式化后的时间存入 data 中 return currentTime; }, //获取本月天数 mGetDate(){ var date = new Date(); var year = date.getFullYear(); var month = date.getMonth()+1; var d = new Date(year, month, 0); return d.getDate(); }, // 获取当前年 getToyear() { const time = new Date(); const toyearStart = time.getFullYear(); return toyearStart }, // 获取当前年月日 getTimesDate() { const date = new Date(); const year = date.getFullYear(); const month = (date.getMonth() + 1).toString().padStart(2, '0'); // 月份前面补0 const day = date.getDate().toString().padStart(2, '0'); // 日期前面补0 return `${year}-${month}-${day}`; }, // 和当前时间对比,判断是否大于当前时间 getTimeContrast(timeString) { const timedate = moment(timeString); console.log(timedate > new Date(),'timedate > new Date()') return timedate > new Date() }, // 和当前时间对比,判断是否小于当前时间 getTimeContrastLess(timeString) { const timedate = moment(timeString); console.log(timedate > new Date(),'timedate > new Date()') return timedate < new Date() }, // {{scope.row.linkedSituation == 2 ?'':''}} // {{scope.row.linkedSituation == 3 ?'':''}} // {{scope.row.linkedSituation == 4 ?'':''}} // {{scope.row.linkedSituation == 5 ?'':''}} // {{scope.row.linkedSituation == 8 ?'':''}} // {{scope.row.linkedSituation == 9 ?'':''}} // {{scope.row.linkedSituation == 10 ?'':''}} --> /** * 电话情况 */ getTelephoneType() { return [{label:'已接',value:0},{label:'未接',value:1},{label:'拒接',value:2}, {label:'关机',value:3},{label:'停机',value:4},{label:'暂时无法接通',value:5}, {label:'空号',value:7},{label:'设置',value:8},{label:'正在通话中',value:9}] }, /** * 根据不同的类型返回不同的电话情况 this.$util.getTelephoneTypeData */ getTelephoneTypeData(value) { switch (value) { case 0: // 常规 return {key:0,label:this.getTelephoneType().find(item => item.value == value).label}; case 1: case 2: case 3: case 5: case 10: // 预警 return {key:2,label:this.getTelephoneType().find(item => item.value == value).label}; case 4: case 8: case 9: // 高预警 return {key:1,label:this.getTelephoneType().find(item => item.value == value).label}; // case 5: // // 成功 // return {key:3,label:this.getMediationType().find(item => item.value == value).label}; default: return {key:0,label:''}; } }, /** * 调解状态 */ getMediationType() { return [{label:'未触达',value:0},{label:'调解中',value:1},{label:'已达成方案',value:2}, {label:'已签署协议',value:3},{label:'协议已签章',value:4},{label:'调解成功',value:5}, {label:'调解失败',value:6}] }, /** * 根据不同的类型返回不同的调解状态 this.$util.getMediationprogressData */ getMediationTypeData(value) { switch (value) { case 1: case 2: case 3: // 常规 return {key:0,label:this.getMediationType().find(item => item.value == value).label}; case 0: // 预警 return {key:2,label:this.getMediationType().find(item => item.value == value).label}; case 6: // 高预警 return {key:1,label:this.getMediationType().find(item => item.value == value).label}; case 4: case 5: // 成功 return {key:3,label:this.getMediationType().find(item => item.value == value).label}; default: return {key:0,label:this.getMediationType().find(item => item.value == value).label}; } }, /** * 调解进度枚举 */ getMediationprogress() { return [ {label:'承诺账户',value:1},{label:'重点账户',value:2},{label:'拒联账户',value:3},{label:'已结清客户',value:4}, {label:'疑难账户',value:5},{label:'失联账户',value:6},{label:'半失联账户',value:7},{label:'部分还款账户',value:8}, {label:'适诉案件',value:9},{label:'可联账户',value:10},{label:'投诉倾向客户',value:11},{label:'分期客户',value:12}, {label:'其他/无标签',value:13} ] }, /** * 根据不同的类型返回不同的调解进度 this.$util.getMediationprogressData */ getMediationprogressData(value) { switch (value) { case 1: case 2: case 4: case 8: case 12: // 常规 return {key:0,label:this.getMediationprogress().find(item => item.value == value).label}; case 7: case 9: case 10: case 13: // 预警 return {key:2,label:this.getMediationprogress().find(item => item.value == value).label}; case 3: case 5: case 6: case 11: // 高预警 return {key:1,label:this.getMediationprogress().find(item => item.value == value).label}; default: return {key:0,label:this.getMediationprogress().find(item => item.value == value).label}; } }, // 阿拉伯转中文 changeNumToHan(num) { var arr1 = new Array('零', '一', '二', '三', '四', '五', '六', '七', '八', '九'); var arr2 = new Array('', '十', '百', '千', '万', '十', '百', '千', '亿', '十', '百', '千','万', '十', '百', '千','亿');//可继续追加更高位转换值 if(!num || isNaN(num)){ return "零"; } var english = num.toString().split("") var result = ""; for (var i = 0; i < english.length; i++) { var des_i = english.length - 1 - i;//倒序排列设值 result = arr2[i] + result; var arr1_index = english[des_i]; result = arr1[arr1_index] + result; } //将【零千、零百】换成【零】 【十零】换成【十】 result = result.replace(/零(千|百|十)/g, '零').replace(/十零/g, '十'); //合并中间多个零为一个零 result = result.replace(/零+/g, '零'); //将【零亿】换成【亿】【零万】换成【万】 result = result.replace(/零亿/g, '亿').replace(/零万/g, '万'); //将【亿万】换成【亿】 result = result.replace(/亿万/g, '亿'); //移除末尾的零 result = result.replace(/零+$/, '') //将【零一十】换成【零十】 //result = result.replace(/零一十/g, '零十');//貌似正规读法是零一十 //将【一十】换成【十】 result = result.replace(/^一十/g, '十') return result; }, } export default util;