/** * @file Describe the file */ import element from 'element-ui'; import api from '../request/api.js'; import globalVariable from '../components/Menu/globalVariable.js'; export default class myUtils { /** * @param {String} 两个日期相差天数(sDate1, sDate2),时间格式【2020-05-10】 * @returns {Number} 返回相差天数数值 */ static dateDiff(sDate1, sDate2) { let aDate = sDate1.split('-'); let oDate1 = new Date(aDate[0], aDate[1], aDate[2]); // 转换为12-18-2006格式 aDate = sDate2.split('-'); let oDate2 = new Date(aDate[0], aDate[1], aDate[2]); let iDays = parseInt(Math.abs(oDate1 - oDate2) / 1000 / 60 / 60 / 24); // 把相差的毫秒数转换为天数 return iDays; } /** * @param {Number} timeStamp 传入的时间戳 * @returns {string} startType 要返回的时间字符串的格式类型,传入'year'则返回年开头的完整时间 */ static getTimeStampToTime(timeStamp) { let date = new Date(Number(timeStamp)); // 时间戳为10位需*1000,时间戳为13位的话不需乘1000 let Y = date.getFullYear() + '-'; let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'; let D = date.getDate() + 'T'; let h = date.getHours(); let m = date.getMinutes(); let s = date.getSeconds(); if (h < 10) { h = '0' + h; } if (m < 10) { m = '0' + m; } return Y + M + D + h + ':' + m + ':' + '00'; } /** * @param 数组去重 * @returns {Obj} * 传参:数组 */ static unique(arr) { return Array.from(new Set(arr)); } /** * 获取当前时间---年月日时分秒 * @param * @returns {number} */ static getCurrentDate(format, type) { let now = new Date(); let year = now.getFullYear(); // 得到年份 let month = now.getMonth(); // 得到月份 let date = now.getDate(); // 得到日期 // let day = now.getDay();// 得到周几 let hour = now.getHours(); // 得到小时 let minu = now.getMinutes(); // 得到分钟 let sec = now.getSeconds(); // 得到秒 month = month + 1; if (month < 10) { month = '0' + month; } if (date < 10) { date = '0' + date; } if (hour < 10) { hour = '0' + hour; } if (minu < 10) { minu = '0' + minu; } if (sec < 10) { sec = '0' + sec; } let time = ''; // 精确到天 if (format === 1) { time = year + type + month + type + date; } else { // 精确到分 time = year + type + month + type + date + ' ' + hour + ':' + minu + ':' + sec; } return time; } /* eslint-disable */ /** * @param * @returns {String} * 全局消息提醒 * 传参:弹窗类型、提示文字 */ static messageType(type, msg) { // 警告 warning // 成功 success // 消息 info // 错误 error if (type === 'error') { element.Message.error(msg); } else { element.Message({ type: type, message: msg }); } } /** * @param * @returns {obj} * 文件导出功能 * 文件格式:.xlsx * data:【必传】文件下载接口返回的数据流 * name:导出的文件命名,不传默认为时间命名,(字符串,一般为中文+年月日时分秒,配合getCurrentDate方法) * 例:平台设备统计明细2020-10-30 15_30_56.xlsx */ static downloadFile(data, name) { let fileName = ''; if (String(name) !== 'undefined') { fileName = String(name); } else { fileName = this.getCurrentDate(); } let blob = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }); let url = window.URL.createObjectURL(blob); const link = document.createElement('a'); // 创建a标签 link.href = url; link.download = fileName; // 重命名文件 link.click(); URL.revokeObjectURL(url); // 释放内存 } /** * 应用于图表插件---获取日的时间数据 * @param * @returns {obj} */ static getChartDay() { let dataTimes = ['00:00', '01:00', '02:00', '03:00', '04:00', '05:00', '06:00', '07:00', '08:00', '09:00', '10:00', '11:00', '12:00', '13:00', '14:00', '15:00', '16:00', '17:00', '18:00', '19:00', '20:00', '21:00', '22:00', '23:00' ]; return dataTimes; } /** * 应用于图表插件---获取随机图表数据 * @param * @returns {obj} */ static getChartDayObjList() { let dataList = []; for (var i = 1; i < this.getCurrentMonthDays() + 1; i++) { // for (var i = 1; i < 4+1; i++) { dataList.push(+this.getRandomNumber(2)); } return dataList; } /** * 应用于图表插件---获取周的时间数据 * @param * @returns {obj} */ static getChartWeek() { let dataTimes = this.$t('myUtils.msg.dataTimes'); return dataTimes; } /** * 应用于图表插件---获取当前月天数数组 * @param * @returns {obj} */ static getChartMonth() { let dataTimes = []; let date = new Date(); let year = date.getFullYear(); let month = date.getMonth() + 1; let d = new Date(year, month, 0); let n = +d.getDate(); for (var i = 1; i < n + 1; i++) { dataTimes.push(i + ' 号'); } return dataTimes; //返回天数数组 } /** * 获取当前月有多少天 * @param * @returns {number} */ static getCurrentMonthDays() { let date = new Date(); let year = date.getFullYear(); let month = date.getMonth() + 1; let d = new Date(year, month, 0); return +d.getDate(); } /** * 获取随机数 * @param n * @returns {number} */ static getRandomNumber(n) { var rnd = ''; for (var i = 0; i < n; i++) rnd += Math.floor(Math.random() * 10); return rnd; } /** * 判断字符串是否为空 * @param str * @returns {boolean} */ static isNull(str) { return str === null || str.length == 0 || str === ''; } /** * * @desc 判断是否为身份证号 * @param {String|Number} str * @return {Boolean} */ static isIdCard(str) { return /^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[Xx])$)$/ .test(str) } /** * * @desc 判断邮箱 * @param {String} str * @return {Boolean} */ static emails(str) { return /^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/.test(str); } /** * * @desc 判断是否为座机号 * @param {String|Number} str * @return {Boolean} */ static landlineNumber(str) { return /^(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}$/.test(str); } /** * * @desc 判断是否为手机号 * @param {String|Number} str * @return {Boolean} */ static isPhoneNum(str) { return /^(0|86|17951)?(1[3-9][0-9])[0-9]{8}$/.test(str); } /** * @description 日期格式化 * @param {Date} date 日期 * @param {String} fmt 日期格式 eg: yyyy-MM-dd hh:mm:ss */ static dateFormat(date, fmt) { let o = { 'M+': date.getMonth() + 1, // 月份 'd+': date.getDate(), // 日 'h+': date.getHours(), // 小时 'm+': date.getMinutes(), // 分 's+': date.getSeconds(), // 秒 'q+': Math.floor((date.getMonth() + 3) / 3), // 季度 'S': date.getMilliseconds() // 毫秒 }; if (/(y+)/.test(fmt)) { fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length)); } for (let k in o) { if (new RegExp('(' + k + ')').test(fmt)) { fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length))); } } return fmt; } /** * @description 文件下载 * @param {Object} data 数据 * @param {String} fileName 下载文件名 */ static download(data, fileName) { // 创建一个blob对象,file的一种 let blob = new Blob([data], { type: 'application/x-xls' }); if ('download' in document.createElement('a')) { // 非IE下载 let link = document.createElement('a'); if (window.URL) { link.href = window.URL.createObjectURL(blob); } else { link.href = window.webkitURL.createObjectURL(blob); } link.download = fileName; document.body.appendChild(link); link.click(); link.remove(); } else { // IE10+下载 navigator.msSaveBlob(blob, fileName); } } /** * @description 校验导入execl格式 * @param {file} file 导入文件对象 */ static validateExecl(file) { const isXLS = file.type === 'application/vnd.ms-excel'; const isXLSX = file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; if (!isXLS && !isXLSX) { this.$message.error(this.$t('myUtils.msg.validateExecl')); return false; } } /** * @description 校验上传图片格式和大小 * @param {file} file 导入文件对象 */ static validateImage(file) { const isPNG = file.type.toLowerCase() === 'image/png'; const isJPG = file.type.toLowerCase() === 'image/jpeg'; const isLt2M = file.size / 1024 / 1024 < 2; if (!isJPG && !isPNG) { this.$message.error(this.$t('myUtils.msg.validateImage[0]')); return false; } if (!isLt2M) { this.$message.error(this.$t('myUtils.msg.validateImage[1]')); return false; } }; static debounce(func, wait) { let timeout; return function(event) { let _this = this let args = arguments; if (timeout) { clearTimeout(timeout) } timeout = setTimeout(() => { timeout = null func.call(_this, args) }, wait) } } static rollImg(e, element, zoomNum) { try { zoomNum += event.wheelDelta / 12; } catch (e) {} if (zoomNum >= 60 && zoomNum < 2000) { element.style.zoom = zoomNum + '%'; } return false; } static move(e, element) { let odiv = element; // 获取目标元素 // 算出鼠标相对元素的位置 let disX = e.clientX - odiv.offsetLeft; let disY = e.clientY - odiv.offsetTop; document.onmousemove = (e) => { // 鼠标按下并移动的事件 // 用鼠标的位置减去鼠标相对元素的位置,得到元素的位置 let left = e.clientX - disX; let top = e.clientY - disY; // 绑定元素位置到positionX和positionY上面 // this.positionX = top; // this.positionY = left; // 移动当前元素 odiv.style.left = left + 'px'; odiv.style.top = top + 'px'; }; document.onmouseup = (e) => { document.onmousemove = null; document.onmouseup = null; }; } static downloadTXTFile(data, name) { let fileName = ''; if (String(name) !== 'undefined') { fileName = String(name); } else { fileName = this.getCurrentDate(); } let blob = new Blob([data], { type: 'application/octet-stream' }); let url = window.URL.createObjectURL(blob); const link = document.createElement('a'); // 创建a标签 link.href = url; link.download = fileName; // 重命名文件 link.click(); URL.revokeObjectURL(url); // 释放内存 } static connectServer(equipNo, messageType) { if (!this.signalr_connection) { // 如果有连接就断开连接 return false; } this.signalr_connection.stop(); // 开始连接this.signalr_connection this.signalr_connection.start().then(() => { this.signalr_connection.invoke('OnConnect', localStorage.SRToken, equipNo); }).catch(function(ex) { console.log('connectServer' + this.$t('myUtils.msg.connectionFailed') + ex); }); } static connectHub(equipNo, type) { this.signalr_connection = null; this.signalr_connection = new signalRAll.HubConnectionBuilder() .withUrl(this.$api.getSignalrHttp() + '/monitor', {}) .build() let that = this; // 开始连接this.signalr_connectionr that.signalr_connection.start().then(() => { that.signalr_connection.invoke('OnConnect', localStorage.SRToken, equipNo); }).catch(function(ex) { console.log('connectHub' + this.$t('myUtils.msg.connectionFailed') + ex); }); that.signalr_connection.off('EquipDataChanged'); that.signalr_connection.on('EquipDataChanged', res => { let data = JSON.parse(res); if (data.length > 0) { console.log(data); } }) that.signalr_connection.onclose(() => { that.signalr_connection.stop(); }) } static signalRaddeventlistener(arry) { } /** * @description 生成唯一Id * @param {} 不用传参 * @return {string} */ static generateUUID() { let d = new Date().getTime(); if (window.performance && typeof window.performance.now === 'function') { d += performance.now(); // use high-precision timer if available } let uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { let r = (d + Math.random() * 16) % 16 | 0; d = Math.floor(d / 16); return (c === 'x' ? r : (r & 0x3) | 0x8).toString(16); }); return uuid; } static fontSize(num, echartId) { let clientWidth = document.getElementById(echartId).clientWidth; if (!clientWidth) { return; } let fontSize = clientWidth / 400; return num * fontSize; }; /* eslint-disable */ /** * @param * @returns {String} * 全局消息提醒 * 传参:弹窗类型、提示文字 */ static messageType(type, msg) { // 警告 warning // 成功 success // 消息 info // 错误 error if (type === 'error') { element.Message.error(msg); } else { element.Message({ type: type, message: msg }); } } /** * @param * @returns {obj} * 文件导出功能 * 文件格式:.xlsx * data:【必传】文件下载接口返回的数据流 * name:导出的文件命名,不传默认为时间命名,(字符串,一般为中文+年月日时分秒,配合getCurrentDate方法) * 例:平台设备统计明细2020-10-30 15_30_56.xlsx */ static downloadFile(data, name) { let fileName = ''; if (String(name) !== 'undefined') { fileName = String(name); } else { fileName = this.getCurrentDate(); } let blob = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }); let url = window.URL.createObjectURL(blob); const link = document.createElement('a'); // 创建a标签 link.href = url; link.download = fileName; // 重命名文件 link.click(); URL.revokeObjectURL(url); // 释放内存 } // 补零 num:要改变的值,len补零后数字的长度 static addZero(num, len) { return String(num).length > len ? num : (Array(len).join(0) + num).slice(-len); } /** * @pageNo 页数 * @SearchName 搜索名称 * @systemName 首页跳转携带子系统字段 * * 获取公共左侧列表 * 文件格式:.xlsx */ static getEquipListCache(pageNo, SearchName, systemName) { let data = { pageNo: pageNo, pageSize: 40, SearchName: SearchName, systemName: systemName }, result; api.getEquipLists(data) .then((rt) => { if (rt.data.code === 200) { result = rt.data.data; try { localStorage.initsEquipAList = JSON.stringify(result); } catch (e) { localStorage.initsEquipAList = JSON.stringify({}); } globalVariable.initsEquipAList = JSON.parse(localStorage.initsEquipAList); } else { } }) .catch((err) => { console.log('err---', err); }); } }
© 版权声明
文章版权归作者所有,未经允许请勿转载。