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();
|
}
|
};
|
|
/**
|
* 获取顶部地址栏地址
|
*/
|
export const getTopUrl = () => {
|
return window.location.href.split("/#/")[0];
|
};
|
|
/**
|
* 获取url参数
|
* @param name 参数名
|
*/
|
export const getQueryString = (name) => {
|
let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
|
let r = window.location.search.substr(1).match(reg);
|
if (r != null) return unescape(decodeURI(r[2]));
|
return null;
|
};
|
|
/**
|
* 下载文件
|
* @param {String} path - 文件地址
|
* @param {String} name - 文件名,eg: test.png
|
*/
|
export const downloadFileBlob = (path, name) => {
|
const xhr = new XMLHttpRequest();
|
xhr.open("get", path);
|
xhr.responseType = "blob";
|
xhr.send();
|
xhr.onload = function () {
|
if (this.status === 200 || this.status === 304) {
|
// 如果是IE10及以上,不支持download属性,采用msSaveOrOpenBlob方法,但是IE10以下也不支持msSaveOrOpenBlob
|
if ("msSaveOrOpenBlob" in navigator) {
|
navigator.msSaveOrOpenBlob(this.response, name);
|
return;
|
}
|
const url = URL.createObjectURL(this.response);
|
const a = document.createElement("a");
|
a.style.display = "none";
|
a.href = url;
|
a.download = name;
|
document.body.appendChild(a);
|
a.click();
|
document.body.removeChild(a);
|
URL.revokeObjectURL(url);
|
}
|
};
|
};
|
|
/**
|
* 下载文件
|
* @param {String} path - 文件地址
|
* @param {String} name - 文件名,eg: test.png
|
*/
|
export const downloadFileBase64 = (path, name) => {
|
const xhr = new XMLHttpRequest();
|
xhr.open("get", path);
|
xhr.responseType = "blob";
|
xhr.send();
|
xhr.onload = function () {
|
if (this.status === 200 || this.status === 304) {
|
const fileReader = new FileReader();
|
fileReader.readAsDataURL(this.response);
|
fileReader.onload = function () {
|
const a = document.createElement("a");
|
a.style.display = "none";
|
a.href = this.result;
|
a.download = name;
|
document.body.appendChild(a);
|
a.click();
|
document.body.removeChild(a);
|
};
|
}
|
};
|
};
|
|
/**
|
* 下载excel
|
* @param {blob} fileArrayBuffer 文件流
|
* @param {String} filename 文件名称
|
*/
|
export const downloadXls = (fileArrayBuffer, filename) => {
|
let data = new Blob([fileArrayBuffer], {
|
type: "application/vnd.ms-excel,charset=utf-8",
|
});
|
if (typeof window.chrome !== "undefined") {
|
// Chrome
|
var link = document.createElement("a");
|
link.href = window.URL.createObjectURL(data);
|
link.download = filename;
|
link.click();
|
} else if (typeof window.navigator.msSaveBlob !== "undefined") {
|
// IE
|
var blob = new Blob([data], { type: "application/force-download" });
|
window.navigator.msSaveBlob(blob, filename);
|
} else {
|
// Firefox
|
var file = new File([data], filename, {
|
type: "application/force-download",
|
});
|
window.open(URL.createObjectURL(file));
|
}
|
};
|
|
export const processArray = (arr) => {
|
arr.forEach((item) => {
|
if ("children" in item && item.children.length > 0) {
|
item.children = processArray(item.children);
|
} else {
|
if ("children" in item) {
|
delete item.children;
|
}
|
}
|
});
|
|
return arr;
|
};
|
|
export const findParentOrCur = (data, targetId) => {
|
function traverse(node, path) {
|
if (node.id === targetId) {
|
return path.concat(node.name);
|
}
|
if (node.children) {
|
for (let child of node.children) {
|
let result = traverse(child, path.concat(node.name));
|
if (result) {
|
return result;
|
}
|
}
|
}
|
}
|
|
for (let node of data) {
|
let result = traverse(node, []);
|
if (result) {
|
return result.join("-");
|
}
|
}
|
|
return null; // 如果找不到目标id,返回null
|
};
|
|
//转换标签颜色
|
export const setLabelColor = (color) => {
|
let obj = {
|
red: "#EA1F1F",
|
yellow: "#FFB42B",
|
green: "#30D17C",
|
};
|
|
for (let i in obj) {
|
if (color == i) {
|
return obj[i];
|
}
|
}
|
};
|