1.日期时间格式化
export function parseTime(time, pattern) {
if (arguments.length === 0 || !time) {
return null;
}
time = time.replace("T", " ");
const format = pattern || "{y}-{m}-{d} {h}:{i}:{s}";
let date;
if (typeof time === "object") {
date = time;
} else {
if ((typeof time === "string") && (/^[0-9]+$/.test(time))) {
time = parseInt(time);
} else if (typeof time === "string") {
time = time.replace(new RegExp(/-/gm), "/");
}
if ((typeof time === "number") && (time.toString().length === 10)) {
time = time * 1000;
}
date = new Date(time);
}
const formatObj = {
y: date.getFullYear(),
m: date.getMonth() + 1,
d: date.getDate(),
h: date.getHours(),
i: date.getMinutes(),
s: date.getSeconds(),
a: date.getDay()
};
const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
let value = formatObj[key];
if (key === "a") { return ["日", "一", "二", "三", "四", "五", "六"][value]; }
if (result.length > 0 && value < 10) {
value = "0" + value;
}
return value || 0;
});
return time_str;
}
export function formatDate(cellValue) {
if (cellValue == null || cellValue == "") return "";
var date = new Date(cellValue);
var year = date.getFullYear();
var month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
var hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
var minutes = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
var seconds = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
return year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;
}
export function formatTime(time, option) {
if (("" + time).length === 10) {
time = parseInt(time) * 1000;
} else {
time = +time;
}
const d = new Date(time);
const now = Date.now();
const diff = (now - d) / 1000;
if (diff < 30) {
return "刚刚";
} else if (diff < 3600) {
return Math.ceil(diff / 60) + "分钟前";
} else if (diff < 3600 * 24) {
return Math.ceil(diff / 3600) + "小时前";
} else if (diff < 3600 * 24 * 2) {
return "1天前";
}
if (option) {
return parseTime(time, option);
} else {
return (
d.getMonth() +
1 +
"月" +
d.getDate() +
"日" +
d.getHours() +
"时" +
d.getMinutes() +
"分"
);
}
}
export function getTime(type) {
if (type === "start") {
return new Date().getTime() - 3600 * 1000 * 24 * 90;
} else {
return new Date(new Date().toDateString());
}
}
export function getCurrentDate() {
var date = new Date();
return date.toLocaleDateString();
}
2.表单重置
export function resetForm(refName) {
if (this.$refs[refName]) {
this.$refs[refName].resetFields();
}
}
3.添加日期范围
export function addDateRange(params, dateRange, propName) {
const search = JSON.parse(JSON.stringify(params));
if (dateRange != null && dateRange !== "" && dateRange.length !== 0) {
search.as = JSON.stringify({ create_datetime__range: dateRange });
}
return search;
}
4.数据字典
export function selectDictLabel(datas, value) {
var actions = [];
Object.keys(datas).some((key) => {
if (String(datas[key].dictValue) === ("" + String(value))) {
actions.push(datas[key].dictLabel);
return true;
}
});
return actions.join("");
}
export function selectDictDefault(datas) {
var actions = [];
Object.keys(datas).some((key) => {
if (datas[key].is_default === true) {
actions.push(datas[key].dictValue);
return true;
}
});
if (!actions[0] && datas[0]) {
actions.push(datas[0].dictValue);
}
return actions.join("");
}
export function selectDictLabels(datas, value, separator) {
var actions = [];
var currentSeparator = undefined === separator ? "," : separator;
var temp = value.split(currentSeparator);
Object.keys(value.split(currentSeparator)).some((val) => {
Object.keys(datas).some((key) => {
if (datas[key].dictValue == ("" + temp[val])) {
actions.push(datas[key].dictLabel + currentSeparator);
}
});
});
return actions.join("").substring(0, actions.join("").length - 1);
}
5.文件保存 下载
function saveAs(blob, filename) {
if (window.navigator.msSaveOrOpenBlob) {
navigator.msSaveBlob(blob, filename);
} else {
var link = document.createElement("a");
var body = document.querySelector("body");
link.href = window.URL.createObjectURL(blob);
link.download = filename;
link.style.display = "none";
body.appendChild(link);
link.click();
body.removeChild(link);
window.URL.revokeObjectURL(link.href);
}
}
function getBlob(url, cb) {
var xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
xhr.responseType = "blob";
xhr.onload = function() {
if (xhr.status === 200) {
cb(xhr.response);
}
};
xhr.send();
}
export function download(file_url, fileName) {
getBlob(process.env.VUE_APP_BASE_API + file_url, function(blob) {
saveAs(blob, fileName);
});
}
6.字符串格式化
export function sprintf(str) {
var args = arguments; var flag = true; var i = 1;
str = str.replace(/%s/g, function() {
var arg = args[i++];
if (typeof arg === "undefined") {
flag = false;
return "";
}
return arg;
});
return flag ? str : "";
}
export function praseStrEmpty(str) {
if (!str || str == "undefined" || str == "null") {
return "";
}
return str;
}
7.构造树型结构数据
export function treeToArr (arr) {
let result = []
let node = []
node = node.concat(arr)
while (node.length) {
let first = node.shift()
if (first.children) {
node = node.concat(first.children)
delete first.children
}
result.push(first)
}
return result
}
export function handleTree(data, id, parentId, children, rootId) {
id = id || "id";
parentId = parentId || "parentId";
children = children || "children";
function NumCompare(a, b) {
return a.orderNum - b.orderNum;
}
rootId = rootId || Math.min.apply(Math, data.map(item => { return item[parentId]; })) || 0;
const cloneData = JSON.parse(JSON.stringify(data));
const treeData = cloneData.filter(father => {
const branchArr = cloneData.filter(child => {
return father[id] === child[parentId];
});
branchArr.sort(NumCompare);
branchArr.length > 0 ? father.children = branchArr : "";
return father[parentId] === rootId || !father[parentId];
});
treeData.sort(NumCompare);
return treeData !== "" ? treeData : data;
}
8.防抖
export function debounce(func, wait, immediate) {
let timeout, args, context, timestamp, result;
const later = function() {
const last = +new Date() - timestamp;
if (last < wait && last > 0) {
timeout = setTimeout(later, wait - last);
} else {
timeout = null;
if (!immediate) {
result = func.apply(context, args);
if (!timeout) context = args = null;
}
}
};
return function(...args) {
context = this;
timestamp = +new Date();
const callNow = immediate && !timeout;
if (!timeout) timeout = setTimeout(later, wait);
if (callNow) {
result = func.apply(context, args);
context = args = null;
}
return result;
};
}
9.深拷贝
export function deepClone(source) {
if (!source && typeof source !== "object") {
throw new Error("error arguments", "deepClone");
}
const targetObj = source.constructor === Array ? [] : {};
Object.keys(source).forEach(keys => {
if (source[keys] && typeof source[keys] === "object") {
targetObj[keys] = deepClone(source[keys]);
} else {
targetObj[keys] = source[keys];
}
});
return targetObj;
}
10.动态增加class
export function hasClass(ele, cls) {
return !!ele.className.match(new RegExp("(\\s|^)" + cls + "(\\s|$)"));
}
export function addClass(ele, cls) {
if (!hasClass(ele, cls)) ele.className += " " + cls;
}
export function removeClass(ele, cls) {
if (hasClass(ele, cls)) {
const reg = new RegExp("(\\s|^)" + cls + "(\\s|$)");
ele.className = ele.className.replace(reg, " ");
}
}
11.函数
/ 首字母大小
export function titleCase(str) {
return str.replace(/( |^)[a-z]/g, L => L.toUpperCase());
}
export function camelCase(str) {
return str.replace(/-[a-z]/g, str1 => str1.substr(-1).toUpperCase());
}
export function isNumberStr(str) {
return /^[+-]?(0|([1-9]\d*))(\.\d+)?$/g.test(str);
}
export const isFunction = (o) => {
return Object.prototype.toString.call(o).slice(8, -1) === "Function";
};
export const isArray = (o) => {
return Object.prototype.toString.call(o).slice(8, -1) === "Array";
};
export const isObj = (o) => {
return Object.prototype.toString.call(o).slice(8, -1) === "Object";
};
12.比对两个对象中的不同项并返回
diffObject(obj1, obj2) {
if (!obj1 || this.isEmptyObject(obj1) || !obj2 || this.isEmptyObject(obj2)) {
return null;
}
const diffRes = {
old_val: {},
new_val: {}
};
for (const k in obj2) {
if (this.getTypeByObj(obj2[k]) === this.getTypeByObj(obj1[k])) {
if (this.getTypeByObj(obj2[k]) === "Array" || this.getTypeByObj(obj2[k]) === "Object") {
const diffData = this.diffObject(obj1[k], obj2[k]);
if (!this.isEmptyObject(diffData)) {
diffRes.old_val[k] = diffData.old_val;
diffRes.new_val[k] = diffData.new_val;
}
} else if (obj1[k] !== obj2[k]) {
diffRes.old_val[k] = obj1[k];
diffRes.new_val[k] = obj2[k];
}
} else {
diffRes.old_val[k] = obj1[k];
diffRes.new_val[k] = obj2[k];
}
}
if (this.isEmptyObject(diffRes.old_val) || this.isEmptyObject(diffRes.new_val)) {
return null;
}
return diffRes;
},
getTypeByObj(obj) {
return Object.prototype.toString.call(obj).match(/^\[object ([a-zA-Z]*)\]$/)[1];
},
isEmptyObject(obj) {
for (var key in obj) {
return false;
}
return true;
}