常用方法集合

// 封装方法合集

// 对象复制
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, "&amp;")
    .replace(/</gm, "&lt;")
    .replace(/>/gm, "&gt;")
    .replace(/'/gm, "&quot;")
    .replace(/'/gm, "&#39;");
  return str;
}

// 解码程html符号
export function unescapeHtml(str) {
  return str
    .replace(/&amp;/gm, "&")
    .replace(/&lt;/gm, "<")
    .replace(/&gt;/gm, ">")
    .replace(/&quot;/gm, '"')
    .replace(/&#39;/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(/^整$/, "零元整")
    );
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值