|
|
|
import cookies from "./util.cookies";
|
|
|
|
import { _local, _session } from "./util.db";
|
|
|
|
import { Message } from "element-ui";
|
|
|
|
import store from "@/store";
|
|
|
|
import axios from "axios";
|
|
|
|
import api from "@/api";
|
|
|
|
import Setting from "@/setting";
|
|
|
|
|
|
|
|
let logout = false;
|
|
|
|
// 文件后缀集合
|
|
|
|
const exts = {
|
|
|
|
video: 'mp4,3gp,mov,m4v,avi,dat,mkv,flv,vob,rmvb,rm,qlv',
|
|
|
|
audio: 'mp3,aac,ape,flac,wav,wma,amr,mid',
|
|
|
|
img: 'jpg,jpeg,png,gif,svg,psd',
|
|
|
|
doc: 'doc,docx,txt,xls,xlsx,csv,xml,ppt,pptx'
|
|
|
|
}
|
|
|
|
const util = {
|
|
|
|
cookies,
|
|
|
|
local: _local,
|
|
|
|
session: _session,
|
|
|
|
// 传入身份证获取生日
|
|
|
|
getBirth(idCard) {
|
|
|
|
var birthday = "";
|
|
|
|
if (idCard != null && idCard != "") {
|
|
|
|
if (idCard.length == 15) {
|
|
|
|
birthday = "19" + idCard.slice(6, 12);
|
|
|
|
} else if (idCard.length == 18) {
|
|
|
|
birthday = idCard.slice(6, 14);
|
|
|
|
}
|
|
|
|
birthday = birthday.replace(/(.{4})(.{2})/, "$1-$2-");
|
|
|
|
//通过正则表达式来指定输出格式为:1990-01-01
|
|
|
|
}
|
|
|
|
return birthday;
|
|
|
|
},
|
|
|
|
// new Date('2020-11-12 00:00:00') 在IE下失效,因此把-替换成/
|
|
|
|
dateCompatible(date) {
|
|
|
|
return date.replace(/\-/g, "/");
|
|
|
|
},
|
|
|
|
// 日期时间前面补零
|
|
|
|
formateTime(num) {
|
|
|
|
return num < 10 ? `0${num}` : num;
|
|
|
|
},
|
|
|
|
//返回格式化时间,传参例如:"yyyy-MM-dd hh:mm:ss"
|
|
|
|
formatDate(fmt, date) {
|
|
|
|
var date = date ? date : new Date();
|
|
|
|
var 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 (var 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;
|
|
|
|
},
|
|
|
|
// 移除数组中指定值
|
|
|
|
removeByValue(arr, val) {
|
|
|
|
for (var i = 0; i < arr.length; i++) {
|
|
|
|
if (arr[i] == val) {
|
|
|
|
arr.splice(i, 1);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
// 传入文件后缀判断是否是视频
|
|
|
|
isVideo(ext) {
|
|
|
|
if (exts.video.includes(ext)) return true;
|
|
|
|
return false;
|
|
|
|
},
|
|
|
|
// 传入文件后缀判断是否是音频
|
|
|
|
isAudio(ext) {
|
|
|
|
if (exts.audio.includes(ext)) return true;
|
|
|
|
return false;
|
|
|
|
},
|
|
|
|
// 传入文件后缀判断是否是图片
|
|
|
|
isImg(ext) {
|
|
|
|
if (exts.img.includes(ext)) return true;
|
|
|
|
return false;
|
|
|
|
},
|
|
|
|
// 传入文件后缀判断是否是pdf以外的文档
|
|
|
|
isDoc(ext) {
|
|
|
|
if (exts.doc.includes(ext)) return true;
|
|
|
|
return false;
|
|
|
|
},
|
|
|
|
// 判断是否能够预览
|
|
|
|
canPreview(ext) {
|
|
|
|
if (!util.isVideo(ext) && !util.isAudio(ext) && !util.isImg(ext) && !util.isDoc(ext)) return false
|
|
|
|
return true
|
|
|
|
},
|
|
|
|
// 循环去除html标签
|
|
|
|
removeHtmlTag(list, attr) {
|
|
|
|
list.map(n => {
|
|
|
|
n[attr] = n[attr].replace(/<\/?.+?>/gi, "");
|
|
|
|
});
|
|
|
|
return list;
|
|
|
|
},
|
|
|
|
// 传入文件名获取文件后缀
|
|
|
|
getFileExt(fileName) {
|
|
|
|
return fileName.substring(fileName.lastIndexOf(".") + 1);
|
|
|
|
},
|
|
|
|
// 传入文件名和路径,下载图片视频,支持跨域,a标签加download不支持跨域
|
|
|
|
downloadFile(fileName, url) {
|
|
|
|
var x = new XMLHttpRequest();
|
|
|
|
x.open("GET", url, true);
|
|
|
|
x.responseType = "blob";
|
|
|
|
x.onload = function(e) {
|
|
|
|
var url = window.URL.createObjectURL(x.response);
|
|
|
|
var a = document.createElement("a");
|
|
|
|
a.href = url;
|
|
|
|
a.download = fileName;
|
|
|
|
a.click();
|
|
|
|
};
|
|
|
|
x.send();
|
|
|
|
},
|
|
|
|
// 传入文件名和数据,下载文件
|
|
|
|
downloadFileDirect(fileName,data) {
|
|
|
|
if ('download' in document.createElement('a')) { // 非IE下载
|
|
|
|
const elink = document.createElement('a')
|
|
|
|
elink.download = fileName
|
|
|
|
elink.style.display = 'none'
|
|
|
|
elink.href = URL.createObjectURL(data)
|
|
|
|
document.body.appendChild(elink)
|
|
|
|
elink.click()
|
|
|
|
URL.revokeObjectURL(elink.href) // 释放URL 对象
|
|
|
|
document.body.removeChild(elink)
|
|
|
|
} else { // IE10+下载
|
|
|
|
navigator.msSaveBlob(data, fileName)
|
|
|
|
}
|
|
|
|
},
|
|
|
|
// 成功提示
|
|
|
|
successMsg(message, duration = 3000) {
|
|
|
|
Message.closeAll();
|
|
|
|
return Message.success({
|
|
|
|
message,
|
|
|
|
showClose: true,
|
|
|
|
duration
|
|
|
|
});
|
|
|
|
},
|
|
|
|
// 警告提示
|
|
|
|
warningMsg(message, duration = 3000) {
|
|
|
|
Message.closeAll();
|
|
|
|
return Message.warning({
|
|
|
|
message,
|
|
|
|
showClose: true,
|
|
|
|
duration
|
|
|
|
});
|
|
|
|
},
|
|
|
|
// 错误提示
|
|
|
|
errorMsg(message, duration = 3000) {
|
|
|
|
Message.closeAll();
|
|
|
|
return Message.error({
|
|
|
|
message,
|
|
|
|
showClose: true,
|
|
|
|
duration
|
|
|
|
});
|
|
|
|
},
|
|
|
|
// 登录互踢
|
|
|
|
getToken() {
|
|
|
|
if (process.env.NODE_ENV == "production") {
|
|
|
|
if (store.state.user.dataTime && !logout) {
|
|
|
|
axios.get(`${api.queryToken}?token=${_local.get(Setting.tokenKey)}`).then(res => {
|
|
|
|
if (store.state.user.dataTime && (res.data.message != store.state.user.dataTime)) {
|
|
|
|
logout || Message.error("您已在另一台设备登录,本次登录已下线!");
|
|
|
|
logout = true;
|
|
|
|
setTimeout(() => {
|
|
|
|
_local.remove(Setting.storeKey);
|
|
|
|
_local.remove(Setting.tokenKey);
|
|
|
|
location.reload();
|
|
|
|
}, 1500);
|
|
|
|
}
|
|
|
|
}).catch(err => {
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
export default util;
|