// import http from '@/api/http.js' // import { downloadXlsx } from "../utils/xlsx"; import { saveAs } from 'file-saver' import {apiGetExportMsg, apiGetModel,} from '../api/api' // import XLSXD from 'xlsx-style' // import Papa from 'papaparse' // import { isObject } from "xe-utils" //检查空 const checkNull = val => val === undefined || val === null const until = { // 计算比率 ratioCalculation(a, b) { let num = null if (a !== '-' && b !== '-') { if (a === '0.00' || a === 0) { num = 0 } else if (b === '0.00' || b === 0) { num = '-' } else { num = Math.round((Number(a)/Number(b)*100))+'%' } } else { num = '-' } return num }, // 导出所有 downloadPer(url,fileName, idss, idsmo) { let params = null if (!idsmo) { params = { ids: idss ? idss.join(',') : '' } } else { params = { idsMv: idss ? idss.join(',') : '', idsBcr: idsmo ? idsmo.join(',') : '', } } apiGetExportMsg(url,params).then(datas =>{ let blob = new Blob([datas]) saveAs(blob, fileName) }).catch((r) => { console.error(r) }) }, // 下载模板 downloadTemplate(url, params, proName) { apiGetModel(url,params).then(datas =>{ let blob = new Blob([datas]) saveAs(blob, proName) }).catch((r) => { console.error(r) }) }, getTime(date){ var y = date.getFullYear(); var m = date.getMonth() + 1; m = m < 10 ? ('0' + m) : m; var d = date.getDate(); d = d < 10 ? ('0' + d) : d; var h = date.getHours(); h=h < 10 ? ('0' + h) : h; var minute = date.getMinutes(); minute = minute < 10 ? ('0' + minute) : minute; var second=date.getSeconds(); second=second < 10 ? ('0' + second) : second; return y + '-' + m + '-' + d+' '+h+':'+minute+':'+second; // timeF = y + '-' + m + '-' + d // return timeF }, changePowerPickDate(val) { let endss = val.substring(val.length-2, val.length) * 1 let startTime = val.substring(0, val.length-2) let allTime = '' if (0 <= endss && endss < 15) { allTime = startTime + '00' } else if (15 <= endss && endss < 30) { allTime = startTime + '15' } else if (30 <= endss && endss < 45) { allTime = startTime + '30' } else if (45 <= endss && endss < 60) { allTime = startTime + '45' } return allTime }, changeElectricPickDate(val) { let endss = val.substring(val.length-2, val.length) * 1 let startTime = val.substring(0, val.length-2) let allTime = '' if (0 <= endss && endss < 10) { allTime = startTime + '00' } else if (10 <= endss && endss < 20) { allTime = startTime + '10' } else if (20 <= endss && endss < 30) { allTime = startTime + '20' } else if (30 <= endss && endss < 40) { allTime = startTime + '30' } else if (40 <= endss && endss < 50) { allTime = startTime + '40' } else if (50 <= endss && endss < 60) { allTime = startTime + '50' } return allTime }, oninput(str, limit, type, zero) { if (zero) { if (str.substr(0, 1) === '.' || str.substr(0, 1) === '-') { str = '' } } else { if (str.substr(0, 1) === '.' || str.substr(0, 1) === '-' || str.substr(0, 1) === '0') { str = '' } } if (type === 'float') { str = str.replace(/[^\d^\.]+/g, '') // 保留数字和小数点 if (limit === 1) { str = str.replace(/^\D*([0-9]\d*\.?\d{0,1})?.*$/, '$1') // 小数点后只能输 1 位 } else if (limit === 2) { str = str.replace(/^\D*([0-9]\d*\.?\d{0,2})?.*$/, '$1') // 小数点后只能输 2 位 } else if (limit === 3) { str = str.replace(/^\D*([0-9]\d*\.?\d{0,3})?.*$/, '$1') // 小数点后只能输 3 位 } else if (limit === 4) { str = str.replace(/^\D*([0-9]\d*\.?\d{0,4})?.*$/, '$1') // 小数点后只能输 4 位 } else if (limit === 6) { str = str.replace(/^\D*([0-9]\d*\.?\d{0,6})?.*$/, '$1') // 小数点后只能输 6 位 } } else { str = str.replace(/[^\d^]+/g, '') str = str.substring(0, limit) } return str }, sortBy(attr,rev){ //第二个参数没有传递 默认升序排列 if(rev == undefined){ rev = 1; }else{ rev = (rev) ? 1 : -1; } return function(a,b){ a = a[attr]; b = b[attr]; if(a < b){ return rev * -1; } if(a > b){ return rev * 1; } return 0; } }, /** * 字母大小写切换 * @param str 要处理的字符串 * @param type 1:首字母大写其余小写 2:首子母小写其余大写 3:大小写转换 4:全部大写 5:全部小写 */ strChangeCase(str, type) { function ToggleCase(str) { var itemText = "" str.split("").forEach( function (item) { if (/^([a-z]+)/.test(item)) { itemText += item.toUpperCase(); } else if (/^([A-Z]+)/.test(item)) { itemText += item.toLowerCase(); } else { itemText += item; } }); return itemText; } switch (type) { case 1: return str.replace(/^(\w)(\w+)/, function (v, v1, v2) { return v1.toUpperCase() + v2.toLowerCase(); }); case 2: return str.replace(/^(\w)(\w+)/, function (v, v1, v2) { return v1.toLowerCase() + v2.toUpperCase(); }); case 3: return ToggleCase(str); case 4: return str.toUpperCase(); case 5: return str.toLowerCase(); default: return str; } }, /* *数字每千位加逗号 * */ commafy(num) { return num && num.toString() .replace(/\d+/, function(s){ return s.replace(/(\d)(?=(\d{3})+$)/g, '$1,') }) }, /* *手机号码中间4位隐藏花号(*)显示 * */ hideMobile(mobile) { return mobile && mobile.toString().replace(/^(\d{3})\d{4}(\d{4})$/, "$1****$2") }, /* * 验证是否为数字 */ isNumber(n) { return !isNaN(parseFloat(n)) && isFinite(n); }, /* * 是否为数组 */ isArray(obj) { return Object.prototype.toString.call(obj) === '[object Array]'; }, /* * 递归深拷贝 */ deepCopy(obj) { let result = Array.isArray(obj) ? [] : {}; for (let key in obj) { if (obj.hasOwnProperty(key)) { if (typeof obj[key] === 'object' && obj[key] !== null) { result[key] = deepCopy(obj[key]); } else { result[key] = obj[key]; } } } return result; }, exportTable(name, columnData, tableDatas) { let datalist = []; //表头数据 let cluData = '' for(let i=0; i{ URL.createObjectURL(obj) }, 2000) }, s2ab(s) { if (typeof ArrayBuffer !== 'undefined') { const buf = new ArrayBuffer(s.length) const view = new Uint8Array(buf) for(let i =0; i != s.length; ++i) { view[i] = s.charCodeAt(i) & 0xff } return buf } else { const buf = new Array(s.length) for(let i =0; i != s.length; ++i) { buf[i] = s.charCodeAt(i) & 0xff } return buf } }, setTooltip(myChart1, myChart2, num) { // const myChart1 = this.$echarts.init(document.getElementById(name1)) // const myChart2 = this.$echarts.init(document.getElementById(name2)) myChart1.getZr().on('mousemove', (params) => { const pointInPixel = [params.offsetX, params.offsetY]; // 判断当前鼠标移动的位置是否在图表中 if (myChart1.containPixel('grid', pointInPixel)) { //使用 convertFromPixel方法 转换像素坐标值到逻辑坐标系上的点。获取点击位置对应的x轴数据的索引值 const pointInGrid = myChart1.convertFromPixel({ seriesIndex: 0 }, pointInPixel); // x轴数据的索引值 const xIndex = pointInGrid[0]; // 使用getOption() 获取图表的option const op = myChart1.getOption(); // 获取当前点击位置要的数据 const xDate = op.xAxis[0].data[xIndex]; // 这里不直接用params.dataIndex是因为可能两个图表X轴的月份数据点不一致 const dataIndex = op.xAxis[0].data.findIndex(x => x === xDate); myChart2.dispatchAction({ type: 'showTip', seriesIndex: num, // 我用的echarts版本是4.8.0,用name而不用dataIndex时,不知道为什么tooltip不显示,所以这里用dataIndex // name: params.name dataIndex: dataIndex, position: '15%' }); } else { myChart2.dispatchAction({ type: 'hideTip' }); } }) myChart2.getZr().on('mousemove', (params) => { const pointInPixel = [params.offsetX, params.offsetY]; // 判断当前鼠标移动的位置是否在图表中 if (myChart2.containPixel('grid', pointInPixel)) { //使用 convertFromPixel方法 转换像素坐标值到逻辑坐标系上的点。获取点击位置对应的x轴数据的索引值 const pointInGrid = myChart2.convertFromPixel({ seriesIndex: 0 }, pointInPixel); // x轴数据的索引值 const xIndex = pointInGrid[0]; // 使用getOption() 获取图表的option const op = myChart2.getOption(); // 获取当前点击位置要的数据 const xDate = op.xAxis[0].data[xIndex]; // 这里不直接用params.dataIndex是因为可能两个图表X轴的月份数据点不一致 const dataIndex = op.xAxis[0].data.findIndex(x => x === xDate); myChart1.dispatchAction({ type: 'showTip', seriesIndex: num, // 我用的echarts版本是4.8.0,用name而不用dataIndex时,不知道为什么tooltip不显示,所以这里用dataIndex // name: params.name dataIndex: dataIndex, position: '15%' }); } else { myChart1.dispatchAction({ type: 'hideTip' }); } }) }, // 数据是否为null,NaN,0的判断 isHasNum(data) { let num = null if (data && data !== 0) { if (data !== 'NaN' && data !== null) { num = Number(data).toFixed(2) } else { num = '-' } } else if(data === 0) { num = 0 } else { num = '-' } return num }, //获取当前月天数 hasYearMonthDate(a, b) { let d = new Date(a, b, 0) let de = d.getDate() return de }, // ------------------------------------------------------------------------ // 冒泡排序 sortBubble(arr) { for(let i=0; i arr[j+1]) { let temp = arr[j] arr[j] = arr[j+1] arr[j+1] = temp } } } return arr }, //数组去重 // 方法一 //利用for 循环 搭配 indexOf 去重 unique(arr) { let newArr = [] for(let i=0; i