let base = {
|
isPhone(val) {
|
return /^[1][3,4,5,6,7,8,9][0-9]{9}$/.test(val)
|
},
|
isDecimal(val) {
|
return /(^[\-0-9][0-9]*(.[0-9]+)?)$/.test(val);
|
},
|
isNumber(val) {
|
return /(^[\-0-9][0-9]*([0-9]+)?)$/.test(val);
|
},
|
isMail(val) {
|
return /^(\w-*\.*)+@(\w-?)+(\.\w{2,})+$/.test(val);
|
},
|
isUrl(url) {
|
return this.checkUrl(url);
|
},
|
checkUrl(url) {
|
//url= 协议://(ftp的登录信息)[IP|域名](:端口号)(/或?请求参数)
|
var strRegex =
|
"^((https|http|ftp)://)?" + //(https或http或ftp):// 可有可无
|
"(([\\w_!~*'()\\.&=+$%-]+: )?[\\w_!~*'()\\.&=+$%-]+@)?" + //ftp的user@ 可有可无
|
"(([0-9]{1,3}\\.){3}[0-9]{1,3}" + // IP形式的URL- 3位数字.3位数字.3位数字.3位数字
|
"|" + // 允许IP和DOMAIN(域名)
|
"(localhost)|" + //匹配localhost
|
"([\\w_!~*'()-]+\\.)*" + // 域名- 至少一个[英文或数字_!~*\'()-]加上.
|
"\\w+\\." + // 一级域名 -英文或数字 加上.
|
"[a-zA-Z]{1,6})" + // 顶级域名- 1-6位英文
|
"(:[0-9]{1,5})?" + // 端口- :80 ,1-5位数字
|
"((/?)|" + // url无参数结尾 - 斜杆或这没有
|
"(/[\\w_!~*'()\\.;?:@&=+$,%#-]+)+/?)$"; //请求参数结尾- 英文或数字和[]内的各种字符
|
var re = new RegExp(strRegex, "i"); //i不区分大小写
|
//将url做uri转码后再匹配,解除请求参数中的中文和空字符影响
|
if (re.test(encodeURI(url))) {
|
return true;
|
}
|
return false;
|
},
|
matchUrlIp(url, ip) { //url使用是否使用的当前ip
|
if (!url || !ip) {
|
return false;
|
}
|
return url.indexOf(ip.replace('https://', '').replace('http://', '')) >= 0
|
},
|
getImgSrc(src, httpUrl) {
|
if (this.isUrl(src)) {
|
return src;
|
}
|
if (httpUrl) {
|
return httpUrl + src;
|
}
|
return src;
|
},
|
previewImg(src, httpUrl) { //图片预览,目前只支持单图片预览
|
if (src && !this.isUrl(src) && httpUrl) {
|
if (src.substr(0, 1) == "/" && httpUrl.substr(httpUrl.length - 1, 1) == "/") {
|
src = src.substr(1)
|
}
|
src = (httpUrl + src);
|
}
|
let id = "vol-preview";
|
let $div = document.getElementById(id);
|
if (!$div) {
|
$div = document.createElement("div");
|
$div.setAttribute("id", "vol-preview");
|
let $mask = document.createElement("div");
|
$mask.style.position = "absolute";
|
$mask.style.width = "100%";
|
$mask.style.height = "100%";
|
$mask.style.background = "black"
|
$mask.style.opacity = "0.6";
|
$div.appendChild($mask);
|
$div.style.position = "fixed";
|
$div.style.width = "100%";
|
$div.style.height = "100%";
|
// $div.style.overflow = "scroll";
|
$div.style.top = 0;
|
$div.style['z-index'] = 9999999;
|
let $img = document.createElement("img");
|
$img.setAttribute("class", "vol-preview-img");
|
$img.style.position = "absolute";
|
$img.style.top = "50%";
|
$img.style.left = "50%";
|
$img.style['max-width'] = "90%";
|
$img.style['max-height'] = "90%";
|
$img.style.transform = "translate(-50%,-50%)";
|
// $img.src = src;
|
$img.setAttribute("src", src);
|
$div.appendChild($img);
|
$div.addEventListener("click", function () {
|
this.style.display = "none";
|
})
|
document.body.appendChild($div);
|
return;
|
}
|
let $img1 = document.body.appendChild($div).querySelector(".vol-preview-img");
|
// img.src = src;
|
$img1.setAttribute("src", src);
|
$div.style.display = "block";
|
},
|
//下载文件 $element 标签, url完整url, fileName 文件名, header 以key/value传值
|
//backGroundUrl 后台url,如果后台url直接从后台下载,其他全部通过点击a标签下载
|
dowloadFile(url, fileName, header, backGroundUrl) {
|
if (!url) {
|
alert('此文件没有url不能下载')
|
return;
|
}
|
let $element = document.getElementById('dowonloadfile-a');
|
if (!$element) {
|
$element = document.createElement('a');
|
$element.setAttribute("id", "dowonloadfile-a");
|
document.body.append($element);
|
}
|
//url为一个完整的地址,并且不是后台api的地址,直接点击a标签下载
|
// if (this.isUrl(url) && !this.matchUrlIp(url, backGroundUrl)) {
|
// $element.href = url;
|
// $element.click();
|
// return;
|
// }
|
|
if (!this.isUrl(url)) {
|
if (!this.isUrl(backGroundUrl + url)) {
|
console.log("文件路径不正确");
|
alert('文件路径不正确')
|
return;
|
}
|
url = backGroundUrl + url;
|
}
|
$element.href = url;
|
$element.click();
|
return;
|
|
//通过后台api服务器下载
|
if (!this.isUrl(url)) {
|
if (!this.isUrl(backGroundUrl + url)) {
|
alert('当前下载的文件url【' + url + '】不正确')
|
return;
|
}
|
url = backGroundUrl + url;
|
}
|
let xmlResquest = new XMLHttpRequest();
|
xmlResquest.open("GET", url, true);
|
xmlResquest.setRequestHeader("Content-type", "application/json");
|
if (header && typeof header == 'object') {
|
for (const key in header) {
|
xmlResquest.setRequestHeader(
|
key,
|
header[key]
|
);
|
}
|
}
|
|
xmlResquest.responseType = "blob";
|
xmlResquest.onload = function (oEvent) {
|
if (xmlResquest.status != 200) {
|
return alert('没有下载到此文件的信息')
|
}
|
let content = xmlResquest.response;
|
$element.download = fileName;
|
let blob = new Blob([content]);
|
$element.href = URL.createObjectURL(blob);
|
$element.click();
|
};
|
xmlResquest.send();
|
},
|
downloadImg(data) {
|
if (!data.url || !data.callback || typeof data.callback != 'function') {
|
return;
|
}
|
//url, backGroundUrl, header, callback
|
if (this.isUrl(data.url) && !this.matchUrlIp(data.url, data.backGroundUrl)) {
|
return data.url;
|
}
|
//通过后台api服务器下载
|
if (!this.isUrl(data.url)) {
|
if (!this.isUrl(data.backGroundUrl + data.url)) {
|
return;
|
}
|
data.url = data.backGroundUrl + data.url;
|
}
|
var xmlResquest = new XMLHttpRequest();
|
xmlResquest.open("get", data.url, true);
|
xmlResquest.responseType = "blob";
|
xmlResquest.setRequestHeader("Content-Type", "application/json");
|
if (data.header && typeof data.header == 'object') {
|
for (const key in data.header) {
|
xmlResquest.setRequestHeader(
|
key,
|
data.header[key]
|
);
|
}
|
}
|
xmlResquest.onload = function () {
|
if (this.status == 200) {
|
var blob = this.response;
|
callback(window.URL.createObjectURL(blob));
|
}
|
};
|
xmlResquest.send();
|
},
|
//2020.06.01增加通用方法,将普通对象转换为tree结构
|
//data数据格式[
|
// { name: 'tree1', id: 1, parentId: 0 },
|
// { name: 'tree2', id: 2, parentId: 0 }]
|
|
//1、id与parentId这两个字段必须有
|
//2、树形tree需要注意Id与parentId循环依赖的问题
|
//3、callback每次生成一新的节点的时回调的方法
|
convertTree(data, callback) {
|
var root_data = [];
|
data.forEach(x => {
|
if (!x.hidden && (x.id === x.parentId || !data.some(s => { return x.parentId == s.id }))) {
|
x.children = [];
|
x.isRoot = true;
|
callback && callback(x, data, true);
|
root_data.push(x);
|
getTree(x.id, x, data, callback);
|
}
|
});
|
return root_data;
|
}
|
|
}
|
export default base;
|
|
//2020.06.01增加通用方法,将普通对象转换为tree结构
|
function getTree(id, node, data, callback) {
|
data.forEach(x => {
|
if (!x.hidden && x.parentId == id) {
|
if (!node.children) node.children = [];
|
callback && callback(x, node, false);
|
node.children.push(x);
|
getTree(x.id, x, data,callback);
|
}
|
});
|
}
|