// 封装方法合集
// 对象复制
export function copy(targetObj) {
targetObj = targetObj || {};
let tempObj = {};
for (let key in targetObj) {
tempObj[key] = targetObj[key];
}
return tempObj;
}
// 对象深拷贝
export function deepClone(targetObj) {
let tempObj;
if (typeof targetObj === "object") {
if (targetObj === null) {
tempObj = null;
} else {
if (targetObj instanceof Date) {
tempObj = targetObj;
} else if (targetObj instanceof Array) {
tempObj = [];
for (let i = 0, len = targetObj.length; i < len; i++) {
tempObj.push(deepClone(targetObj[i]));
}
} else {
tempObj = {};
for (let j in targetObj) {
tempObj[j] = deepClone(targetObj[j]);
}
}
}
} else {
tempObj = targetObj;
}
return tempObj;
}
// 对象合并
export function utilExtend(target, source) {
if (source === null || typeof source !== "object") return target;
let keys = Object.keys(source);
let i = keys.length;
while (i--) {
target[keys[i]] = source[keys[i]];
}
return target;
}
// 去掉对象空值
export function trimObjEmptyValue(obj) {
for (let key in obj) {
if (!obj[key]) {
delete obj[key];
}
}
}
// 判断是否为空对象
export function isEmptyObj(obj) {
for (let key in obj) {
return false;
}
return true;
}
// 校验数组是否有重复数据
export function isRepeat(arr) {
let hash = {};
for (let i in arr) {
if (hash[arr[i]]) {
return true;
}
// 不存在该元素,则赋值为true,可以赋任意值,相应的修改if判断条件即可
hash[arr[i]] = true;
}
return false;
}
// 去掉字符串中所有“-”中划线
export function strLineAll(str) {
let result;
result = str.replace(/(^-+)|(-+$)/g, "");
result = result.replace(/-/g, "");
return result;
}
// 日期时间格式化
export function getFormatDateTime(date, flag) {
if (typeof date === "string") {
date = new Date(date);
}
let year = date.getFullYear();
let month = date.getMonth();
let day = date.getDate();
let hour = date.getHours();
let minites = date.getMinutes();
let second = date.getSeconds();
month = month + 1 > 9 ? month + 1 : "0" + (month + 1);
day = day > 9 ? day : "0" + day;
hour = hour > 9 ? hour : "0" + hour;
minites = minites > 9 ? minites : "0" + minites;
second = second > 9 ? second : "0" + second;
if (flag === "monitor") {
return (
year + "/" + month + "/" + day + " " + hour + ":" + minites + ":" + second
);
} else if (flag) {
return "" + year + month + day + hour + minites + second;
} else {
return (
year + "-" + month + "-" + day + " " + hour + ":" + minites + ":" + second
);
}
}
// (86401, true) --> 1天0小时0分1秒
// (86401, false) --> 24:00:01
export function getCallTimeLength(second, format) {
if (second) {
let d;
let h;
let m;
let s;
if (second === null || second < 0) {
return;
}
d = Math.floor(second / (24 * 3600 * 1000));
h = (second / 3600) | 0;
second = parseFloat(second) - h * 3600;
if (parseInt(h) < 10) {
h = "0" + h;
}
m = (second / 60) | 0;
s = (parseFloat(second) - m * 60).toFixed(0);
if (parseInt(m) < 10) {
m = "0" + m;
}
if (s < 10) {
s = "0" + s;
}
if (format) {
let time;
if (d > 0) {
time += d + m7Language("public.day2");
}
if (h > 0) {
time += h + m7Language("public.hours2");
}
if (m > 0) {
time += m + m7Language("public.minutes2");
}
if (s > 0) {
time += s + m7Language("public.seconds");
}
return time;
} else {
return h + ":" + m + ":" + s;
}
} else {
return "00:00:00";
}
}
// 年月日
export function dateParse(date) {
let year = date.getFullYear();
let month = date.getMonth() + 1;
let day = date.getDate();
let str =
year +
"-" +
(month > 9 ? month : "0" + month) +
"-" +
(day > 9 ? day : "0" + day);
return str;
}
// 2017-2-17 16:40:40 --> 2017-2-17
// 2017-2-17 16:40:40 --> 16:40
export function getDateTimeByStr(dateTimeStr, type) {
if (!dateTimeStr || !type) {
return "";
}
let result = "";
let datetime = dateTimeStr.split(" ");
if (type === "date") {
result = datetime[0].substring(0, 11);
} else if (type === "time") {
result = datetime[1].substring(0, 5);
}
return result;
}
// 规范时间差
export function formatTimestamp(timelength) {
var formatTime = "";
var day = Math.floor(timelength / (24 * 3600 * 1000));
var restTime = timelength % (24 * 3600 * 1000);
var hour = 0;
var minutes = 0;
var seconds = 0;
if (restTime > 0) {
hour = Math.floor(restTime / (3600 * 1000));
restTime = restTime % (3600 * 1000);
}
if (restTime > 0) {
minutes = Math.floor(restTime / (60 * 1000));
restTime = restTime % (60 * 1000);
}
if (restTime > 0) {
seconds = Math.floor(restTime / 1000);
}
if (day > 0) {
formatTime += day + m7Language("public.day2");
}
if (hour > 0) {
formatTime += hour + m7Language("public.hours2");
}
if (minutes > 0) {
formatTime += minutes + m7Language("public.minutes2");
}
if (seconds > 0) {
formatTime += seconds + m7Language("public.seconds");
}
return formatTime;
}
// 时间
export function timeFormat(value, flag) {
let now = new Date();
let today = now.setHours(0, 0, 0, 0);
let yestoday = new Date(today - 24 * 60 * 60 * 1000).setHours(0, 0, 0, 0);
let years = now.getFullYear();
if (value) {
let dataTimeArr = value.split(" ");
let day = dataTimeArr[0].split("-");
day[1] = Number(day[1]);
day[2] = Number(day[2]);
let dayTimeArr = dataTimeArr[1].split(":");
let dayTime = dayTimeArr[0] + ":" + dayTimeArr[1];
let valueDate = new Date(value);
let currentDay = valueDate.setHours(0, 0, 0, 0);
let currentYear = valueDate.getFullYear();
let time = "";
// let day = new Date(value).toLocaleDateString().split('/')
// let dayTime = new Date(value).toTimeString().substr(0, 5)
if (today === currentDay) {
time = timeFormatM7Language("customer.today") + " " + dayTime;
} else if (yestoday === currentDay) {
time = timeFormatM7Language("customer.yesterday") + " " + dayTime;
} else if (currentYear === years) {
if (flag === "card") {
time = `${day[1]}${timeFormatM7Language("business.timeLine.month")}${
day[2]
}${timeFormatM7Language("business.timeLine.day")}`;
} else {
time = `${day[1]}${timeFormatM7Language("business.timeLine.month")}${
day[2]
}${timeFormatM7Language("business.timeLine.day")} ${dayTime}`;
}
} else {
if (flag === "card") {
time = `${day[0].substr(2)}${timeFormatM7Language(
"business.timeLine.year"
)}${day[1]}${timeFormatM7Language("business.timeLine.month")}${
day[2]
}${timeFormatM7Language("business.timeLine.day")}`;
} else {
time = `${day[0].substr(2)}${timeFormatM7Language(
"business.timeLine.year"
)}${day[1]}${timeFormatM7Language("business.timeLine.month")}${
day[2]
}${timeFormatM7Language("business.timeLine.day")} ${dayTime}`;
}
}
return time;
}
}
// 获取单多标签
export function getAllUseSingleCallLabel(singleLabels, search) {
if (!singleLabels) {
return [];
}
singleLabels = deepClone(singleLabels);
let useLabel = [];
let searchLabel = [];
for (let i = 0; i < singleLabels.length; i++) {
if (!singleLabels[i].type) {
// 有些脏数据没有type,默认是单标签
singleLabels[i].type = "single";
}
if (singleLabels[i].type === "multi") {
continue;
}
if (singleLabels[i].enable && singleLabels[i].type === "single") {
useLabel.push(singleLabels[i]);
if (search) {
// 判断是搜索
// singleLabels[i].level = 1
singleLabels[i].name =
singleLabels[i].name + "[" + m7Language("call.singleLabel") + "]";
const obj = {
value: {
_id: singleLabels[i]._id,
name: singleLabels[i].name,
type: singleLabels[i].type,
},
label: singleLabels[i].name,
disabled: singleLabels[i].disabled,
};
searchLabel.push(obj);
}
}
}
let obj = {
singleLabel: useLabel,
searchSingleLabel: searchLabel,
};
return obj;
}
export function getAllUseMultiCallLabel(multiLabels, singleArr, search) {
if (!multiLabels) {
return "";
}
multiLabels = deepClone(multiLabels);
let multiLabelsArr = [];
let searchFirstLabel = [];
for (let i = 0; i < multiLabels.length; i++) {
if (!multiLabels[i].type) {
// 有些脏数据没有type,默认是单标签
multiLabels[i].type = "single";
}
if (multiLabels[i].type === "single") {
// 若是单标签跳出循环
continue;
}
const item = multiLabels[i];
if (search) {
let name = item.name + "[" + m7Language("call.multiLabel") + "]";
item.name = name;
}
const obj = {
value: { _id: item._id, name: item.name, type: item.type },
label: item.name,
disabled: item.disabled,
};
if (item.child && item.child.length > 0) {
obj.children = [];
const twoChilds = item.child || [];
for (let j = 0; j < twoChilds.length; j++) {
const item2 = twoChilds[j];
const obj2 = {
value: { _id: item2._id, name: item2.name },
label: item2.name,
disabled: item2.disabled,
};
if (item2.child && item2.child.length > 0) {
obj2.children = [];
const threeChilds = item2.child || [];
for (let k = 0; k < threeChilds.length; k++) {
const item3 = threeChilds[k];
const obj3 = {
value: { _id: item3._id, name: item3.name },
label: item3.name,
disabled: item3.disabled,
};
if (item3.child && item3.child.length > 0) {
obj3.children = [];
const fourChilds = item3.child || [];
for (let l = 0; l < fourChilds.length; l++) {
const item4 = fourChilds[l];
const obj4 = {
value: { _id: item4._id, name: item4.name },
label: item4.name,
disabled: item4.disabled,
};
if (item4.child && item4.child.length > 0) {
obj4.children = [];
const fiveChilds = item4.child || [];
for (let m = 0; m < fiveChilds.length; m++) {
const item5 = fiveChilds[m];
const obj5 = {
value: { _id: item5._id, name: item5.name },
label: item5.name,
disabled: item5.disabled,
};
if (item5.enable) {
obj4.children.push(obj5); // 搜索条件的第四级
}
}
}
if (item4.enable) {
if (obj4.children && obj4.children.length <= 0) {
delete obj4.children;
}
obj3.children.push(obj4); // 搜索条件的第四级
}
}
}
if (item3.enable) {
if (obj3.children && obj3.children.length <= 0) {
delete obj3.children;
}
obj2.children.push(obj3); // 搜索条件的第三级
}
}
}
if (item2.enable) {
if (obj2.children && obj2.children.length <= 0) {
delete obj2.children;
}
obj.children.push(obj2);
}
}
}
if (item.enable) {
if (obj.children && obj.children.length <= 0) {
delete obj.children;
}
multiLabelsArr.push(obj);
searchFirstLabel.push(obj); // 搜索条件第一级
}
}
if (singleArr) {
// 搜索的时候把单标签也合到一级标签里面
searchFirstLabel = searchFirstLabel.concat(singleArr);
}
let obj = {
multiLabels: multiLabelsArr,
searchFirstLabel: searchFirstLabel,
};
return obj;
}
// 标签名
export function getSingleOrMultiLabelNameById(allLables, _id) {
if (!allLables) {
return "";
}
if (_id) {
_id = _id.replace(",", "");
}
for (let i = 0; i < allLables.length; i++) {
if (allLables[i]._id === _id) {
return allLables[i].name || "";
}
}
return "";
}
// 获取标签名
export function getLabelName(multiLabel, item, labelStr) {
let childItem = null;
for (let m in item) {
if (multiLabel.indexOf(item[m]._id) > -1) {
labelStr += `${item[m].name} >`;
if (item[m].child && item[m].child.length >= 0) {
childItem = item[m].child;
}
}
}
if (childItem) {
return getLabelName(multiLabel, childItem, labelStr);
} else {
return labelStr;
}
}
// 当前年月日
export function getCurrentDate() {
let date = new Date();
let year = date.getFullYear();
let month = date.getMonth();
let day = date.getDate();
month = month + 1 > 9 ? month + 1 : "0" + (month + 1);
day = day > 9 ? day : "0" + day;
return year + "-" + month + "-" + day;
}
// 当前年月日时分秒
export function getCurrentDateTime() {
let date = new Date();
let year = date.getFullYear();
let month = date.getMonth();
let day = date.getDate();
let h = date.getHours();
let m = date.getMinutes();
let s = date.getSeconds();
month = month + 1 > 9 ? month + 1 : "0" + (month + 1);
day = day > 9 ? day : "0" + day;
h = h > 9 ? h : "0" + h;
m = m > 9 ? m : "0" + m;
s = s > 9 ? s : "0" + s;
return year + "-" + month + "-" + day + " " + h + ":" + m + ":" + s;
}
// 日期差
export function getDateMonthSub(startDate, endDate) {
if (
startDate === null ||
startDate === undefined ||
startDate === "" ||
endDate === null ||
endDate === undefined ||
endDate === ""
) {
return 0;
}
endDate = new Date(endDate);
startDate = new Date(startDate);
let renNumber = 0;
let yearToMonth = (endDate.getFullYear() - startDate.getFullYear()) * 12;
renNumber += yearToMonth;
let startYear = startDate.getFullYear();
let endYear = endDate.getFullYear();
let startMon = startDate.getMonth();
let endMon = endDate.getMonth();
let startDay = startDate.getDate();
let endDay = endDate.getDate();
let monthToMonth = endDate.getMonth() - startDate.getMonth();
renNumber += monthToMonth;
if (
isLastDay(startYear, startMon, startDay) &&
!isLastDay(endYear, endMon, endDay)
) {
renNumber -= 1;
return renNumber;
} else {
if (
!isLastDay(startYear, startMon, startDay) &&
!isLastDay(endYear, endMon, endDay)
) {
let startLast = getLastDayAway(startYear, startMon, startDay);
let endLast = getLastDayAway(endYear, endMon, endDay);
if (endLast > startLast) {
renNumber -= 1;
return renNumber;
} else {
return renNumber;
}
} else {
return renNumber;
}
}
}
// 判断是否为当年当月的最后一天
export function isLastDay(yearV, monthV, dayV) {
let newYear = yearV;
let newMonth = monthV + 1;
if (newMonth > 12) {
newMonth -= 12;
newYear++;
}
let newDate = new Date(newYear, newMonth, 1);
let lastDay = new Date(newDate.getTime() - 1000 * 60 * 60 * 24).getDate();
if (lastDay === dayV) {
return true;
} else {
return false;
}
}
// 计算距离月底还有几天
export function getLastDayAway(yearV, monthV, dayV) {
let newYear = yearV;
let newMonth = monthV + 1;
if (newMonth > 12) {
newMonth -= 12;
newYear++;
}
let newDate = new Date(newYear, newMonth, 1);
let lastDay = new Date(newDate.getTime() - 1000 * 60 * 60 * 24).getDate();
let awayDay = lastDay - dayV;
return awayDay;
}
// 时期中间差
export function getBetweenDays(end, begin) {
begin = begin || getCurrentDate();
let diffent = Date.parse(end) - Date.parse(begin);
return Math.floor(diffent / (1000 * 60 * 60 * 24));
}
// 对html符号进行编码
export function escapeHtml(str) {
str = String(str)
.replace(/&/gm, "&")
.replace(/</gm, "<")
.replace(/>/gm, ">")
.replace(/'/gm, """)
.replace(/'/gm, "'");
return str;
}
// 解码程html符号
export function unescapeHtml(str) {
return str
.replace(/&/gm, "&")
.replace(/</gm, "<")
.replace(/>/gm, ">")
.replace(/"/gm, '"')
.replace(/'/gm, "'");
}
// 将html片段转化为文字
export function htmlToText(str) {
if (str) {
str = str.replace(/(\n)/g, "");
str = str.replace(/(\t)/g, "");
str = str.replace(/(\r)/g, "");
str = str.replace(/<\/?[^>]*>/g, "");
str = str.replace(/\s*/g, "");
}
return str;
}
// 模糊搜索处理方法
// 参数依次为:搜索内容 搜索的key值 被搜索数组
export function filterAct(val, type, arrList) {
// 如果搜索条件为空 返回全部
if (!val || !type) {
return arrList;
}
let arr = [];
arr = arrList.filter((item) => {
if (item[type].indexOf(val) >= 0) {
return item;
}
});
return arr;
}
// 删除option里面的停用项
export function deleteDisabledOption(option) {
// let options = option.options || []
if (option.options && option.options.length) {
option.options = option.options.filter((item) => {
// state为1 则停用该项
if (item.state !== "1") {
deleteDisabledOption(item);
return true;
}
});
}
}
// 去除字符串中的html
export function replaceHtmlToStr(str) {
let reg1 = new RegExp("<[^<]*>", "gi");
str = str.replace(reg1, "");
let reg2 = new RegExp("</", "gi");
str = str.replace(reg2, "");
return str;
}
// 加密解密
export function encrypt(secretKey, plaintText) {
var plaintText = plaintText;
var options = {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7,
};
var key = CryptoJS.enc.Utf8.parse(secretKey);
var encryptedData = CryptoJS.AES.encrypt(plaintText, key, options);
var encryptedBase64Str = encryptedData.toString().replace(/\//g, "_");
encryptedBase64Str = encryptedBase64Str.replace(/\+/g, "-");
return encryptedBase64Str;
}
export function decrypt(secretKey, encryptedBase64Str) {
var vals = encryptedBase64Str.replace(/\-/g, "+").replace(/_/g, "/");
var options = {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7,
};
var key = CryptoJS.enc.Utf8.parse(secretKey);
var decryptedData = CryptoJS.AES.decrypt(vals, key, options);
var decryptedStr = CryptoJS.enc.Utf8.stringify(decryptedData);
return decryptedStr;
}
export function aesEncrypt(data) {
let key = CryptoJS.enc.Utf8.parse("7moor1234567891234567890"); // 十六位十六进制数作为密钥
let iv = CryptoJS.enc.Utf8.parse("88f875ce0e9b4884"); // 十六位十六进制数作为密钥偏移量
let options = {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7,
};
var encrypted = CryptoJS.AES.encrypt(data, key, options);
var enHex = encrypted.ciphertext.toString();
return enHex;
}
export function getAesEncrypt(key, iv, content) {
// 敏感数据加密 - aes加密方式(AES/CBC/PKCS5Padding)
key = CryptoJS.enc.Utf8.parse(key);
let srcs = CryptoJS.enc.Utf8.parse(content);
// 加密模式为CBC,补码方式为PKCS5Padding(也就是PKCS7)
let option = { mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 };
if (iv) {
// iv如果有传递
iv = CryptoJS.enc.Utf8.parse(iv);
option.iv = iv;
}
let encrypted = CryptoJS.AES.encrypt(srcs, key, option);
let result = encrypted.ciphertext.toString();
console.log(result, "==========");
//返回base64
return result.toLocaleUpperCase();
}
// 公共action
export function commonAction(actionObj) {
return request({
url: actionObj.url,
method: actionObj.method,
params: actionObj.data,
data: actionObj.data,
hideLoading: actionObj.hideLoading,
});
}
//js金额转大写
// n为数字
function rmbUpper(n) {
var fraction = ["角", "分"];
var digit = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"];
var unit = [
["元", "万", "亿"],
["", "拾", "佰", "仟"]
];
var head = n < 0 ? "欠" : "";
n = Math.abs(n);
var s = "";
for (var i = 0; i < fraction.length; i++) {
s += (
digit[Math.floor(n * 10 * Math.pow(10, i)) % 10] + fraction[i]
).replace(/零./, "");
}
s = s || "整";
n = Math.floor(n);
for (var i = 0; i < unit[0].length && n > 0; i++) {
var p = "";
for (var j = 0; j < unit[1].length && n > 0; j++) {
p = digit[n % 10] + unit[1][j] + p;
n = Math.floor(n / 10);
}
s = p.replace(/(零.)*零$/, "").replace(/^$/, "零") + unit[0][i] + s;
}
return (
head +
s
.replace(/(零.)*零元/, "元")
.replace(/(零.)+/g, "零")
.replace(/^整$/, "零元整")
);
}
常用方法集合
于 2022-07-13 17:49:05 首次发布