Files
cmanager/src/util/util.js
2024-03-19 17:23:29 +08:00

410 lines
10 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
export function debounce(fn, delay) {
let timer = null
return function() {
const context = this
const args = arguments
clearTimeout(timer)
timer = setTimeout(function() {
fn.apply(context, args)
}, delay)
}
}