import XLSX from 'xlsx' import {validatenull} from './validate' //表单序列化 export const serialize = data => { let list = []; Object.keys(data).forEach(ele => {list.push(`${ele}=${data[ele]}`)}) return list.join('&'); }; export const getObjType = obj => { var toString = Object.prototype.toString; var map = { '[object Boolean]': 'boolean', '[object Number]': 'number', '[object String]': 'string', '[object Function]': 'function', '[object Array]': 'array', '[object Date]': 'date', '[object RegExp]': 'regExp', '[object Undefined]': 'undefined', '[object Null]': 'null', '[object Object]': 'object' }; if (obj instanceof Element) { return 'element'; } return map[toString.call(obj)]; }; export const getViewDom = () => { return window.document.getElementById('avue-view') .getElementsByClassName('el-scrollbar__wrap')[0] } /** * 对象深拷贝 */ export const deepClone = data => { var type = getObjType(data); var obj; if (type === 'array') { obj = []; } else if (type === 'object') { obj = {}; } else { //不再具有下一层次 return data; } if (type === 'array') { for (var i = 0, len = data.length; i < len; i++) { obj.push(deepClone(data[i])); } } else if (type === 'object') { for (var key in data) { obj[key] = deepClone(data[key]); } } return obj; }; /** * 设置灰度模式 */ export const toggleGrayMode = (status) => { if (status) { document.body.className = document.body.className + ' grayMode'; } else { document.body.className = document.body.className.replace(' grayMode', ''); } }; /** * 设置主题 */ export const setTheme = (name) => { document.body.className = name; } /** * 加密处理 */ export const encryption = (params) => { let {data, type, param, key} = params; let result = JSON.parse(JSON.stringify(data)); if (type == 'Base64') { param.forEach(ele => { result[ele] = btoa(result[ele]); }) } else if (type == 'Aes') { param.forEach(ele => { result[ele] = window.CryptoJS.AES.encrypt(result[ele], key).toString(); }) } return result; }; /** * 浏览器判断是否全屏 */ export const fullscreenToggel = () => { if (fullscreenEnable()) { exitFullScreen(); } else { reqFullScreen(); } }; /** * esc监听全屏 */ export const listenfullscreen = (callback) => { function listen() { callback() } document.addEventListener('fullscreenchange', function() { listen(); }); document.addEventListener('mozfullscreenchange', function() { listen(); }); document.addEventListener('webkitfullscreenchange', function() { listen(); }); document.addEventListener('msfullscreenchange', function() { listen(); }); }; /** * 浏览器判断是否全屏 */ export const fullscreenEnable = () => { var isFullscreen = document.isFullScreen || document.mozIsFullScreen || document.webkitIsFullScreen return isFullscreen; } /** * 浏览器全屏 */ export const reqFullScreen = () => { if (document.documentElement.requestFullScreen) { document.documentElement.requestFullScreen(); } else if (document.documentElement.webkitRequestFullScreen) { document.documentElement.webkitRequestFullScreen(); } else if (document.documentElement.mozRequestFullScreen) { document.documentElement.mozRequestFullScreen(); } }; /** * 浏览器退出全屏 */ export const exitFullScreen = () => { if (document.documentElement.requestFullScreen) { document.exitFullScreen(); } else if (document.documentElement.webkitRequestFullScreen) { document.webkitCancelFullScreen(); } else if (document.documentElement.mozRequestFullScreen) { document.mozCancelFullScreen(); } }; /** * 递归寻找子类的父类 */ export const findParent = (menu, id) => { for (let i = 0; i < menu.length; i++) { if (menu[i].children.length != 0) { for (let j = 0; j < menu[i].children.length; j++) { if (menu[i].children[j].id == id) { return menu[i]; } else { if (menu[i].children[j].children.length != 0) { return findParent(menu[i].children[j].children, id); } } } } } }; /** * 判断2个对象属性和值是否相等 */ /** * 动态插入css */ export const loadStyle = url => { const link = document.createElement('link'); link.type = 'text/css'; link.rel = 'stylesheet'; link.href = url; const head = document.getElementsByTagName('head')[0]; head.appendChild(link); }; /** * 判断路由是否相等 */ export const diff = (obj1, obj2) => { delete obj1.close; var o1 = obj1 instanceof Object; var o2 = obj2 instanceof Object; if (!o1 || !o2) { /* 判断不是对象 */ return obj1 === obj2; } if (Object.keys(obj1).length !== Object.keys(obj2).length) { return false; // Object.keys() // 返回一个由对象的自身可枚举属性(key值)组成的数组,例如:数组返回下表:let // arr = ["a", "b", "c"];console.log(Object.keys(arr))->0,1,2; } for (var attr in obj1) { var t1 = obj1[attr] instanceof Object; var t2 = obj2[attr] instanceof Object; if (t1 && t2) { return diff(obj1[attr], obj2[attr]); } else if (obj1[attr] !== obj2[attr]) { return false; } } return true; } /** * 根据字典的value显示label */ export const findByvalue = (dic, value) => { let result = ''; if (validatenull(dic)) return value; if (typeof (value) == 'string' || typeof (value) == 'number' || typeof (value) == 'boolean') { let index = 0; index = findArray(dic, value); if (index != -1) { result = dic[index].label; } else { result = value; } } else if (value instanceof Array) { result = []; let index = 0; value.forEach(ele => { index = findArray(dic, ele); if (index != -1) { result.push(dic[index].label); } else { result.push(value); } }); result = result.toString(); } return result; }; /** * 根据字典的value查找对应的index */ export const findArray = (dic, value) => { for (let i = 0; i < dic.length; i++) { if (dic[i].value == value) { return i; } } return -1; }; /** * 生成随机len位数字 */ export const randomLenNum = (len, date) => { let random = ''; random = Math.ceil(Math.random() * 100000000000000) .toString() .substr(0, len ? len : 4); if (date) random = random + Date.now(); return random; }; /** * 打开小窗口 */ export const openWindow = (url, title, w, h) => { // Fixes dual-screen position Most browsers // Firefox const dualScreenLeft = window.screenLeft !== undefined ? window.screenLeft : screen.left const dualScreenTop = window.screenTop !== undefined ? window.screenTop : screen.top const width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width const height = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : screen.height const left = ((width / 2) - (w / 2)) + dualScreenLeft const top = ((height / 2) - (h / 2)) + dualScreenTop const newWindow = window.open( url, title, 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=yes, copyhistory=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left) // Puts focus on the newWindow if (window.focus) { newWindow.focus() } } /** * 导出excel */ export const exportFunc = (title, data, fileName) => { const aoa = [title] data.forEach(item => {aoa.push(item)}) const sheet = XLSX.utils.aoa_to_sheet(aoa) const book = XLSX.utils.book_new() XLSX.utils.book_append_sheet(book, sheet, 'sheet1') XLSX.writeFile(book, fileName) } /** * 下载文件 */ export const download = (fileName, data) => { if (!data) { return; } let url = window.URL.createObjectURL(new Blob([data])); let link = document.createElement('a'); link.style.display = 'none'; link.href = url; link.setAttribute('download', fileName); document.body.appendChild(link); link.click(); } /** * 数据分页 */ export const pagination = (arr, currentPage, pageSize) => { const res = []; const start = (currentPage - 1) * pageSize; const end = start + pageSize; for (let index = start; index < end && index < arr.length; index++) { res.push(arr[index]); } return res; } /** * 通过身份证获取年龄 */ export const getAgeByIdNumber = (idNumber) => { const year = idNumber.substring(6, 10) const month = idNumber.substring(10, 12) const day = idNumber.substring(12, 14) const now = new Date() let age = now.getFullYear() - year if (now.getMonth() < month || (now.getMonth() == month && day < now.getDay())) { age--; } return age } /** * 通过身份证获取性别 */ export const getGenderByIdNumber = (idNumber) => { if (idNumber.substring(16, 17) % 2) { return '男' } else { return '女' } } /** * 通过身份证号脱敏显示 */ export const idNumberDDesensitization = (idNumber) => { if (!idNumber) return ''; let str = idNumber; str = str.toString().replace(/^(.{6})(?:\d+)(.{4})$/, "$1****$2") return str; } /** * 通过姓名脱敏显示 */ export const nameDesensitization = (name) => { if (!name) return ''; let str = name; str = str.substring(0,1) + new Array(str.length).join('*') return str; }