403 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			403 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
import { ID_NUMBER } from "../regular";
 | 
						|
 | 
						|
/**
 | 
						|
 * 计算序号
 | 
						|
 */
 | 
						|
export function serialNumber(pagination, index) {
 | 
						|
  return (pagination.current - 1) * pagination.pageSize + (index + 1);
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * 字符串数组转数组
 | 
						|
 */
 | 
						|
export function toArrayString(value) {
 | 
						|
  // eslint-disable-next-line no-eval
 | 
						|
  return value ? eval(value).map(String) : [];
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * 判断文件后缀名是否符合
 | 
						|
 */
 | 
						|
export function interceptTheSuffix(name, suffix) {
 | 
						|
  return (
 | 
						|
    name.substring(name.lastIndexOf("."), name.length).toLowerCase()
 | 
						|
    === suffix.toLowerCase()
 | 
						|
  );
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * 图片转base64
 | 
						|
 */
 | 
						|
export function image2Base64(imgUrl) {
 | 
						|
  return new Promise((resolve) => {
 | 
						|
    const img = new Image();
 | 
						|
    img.src = imgUrl;
 | 
						|
    img.crossOrigin = "Anonymous";
 | 
						|
    img.onload = function () {
 | 
						|
      const canvas = document.createElement("canvas");
 | 
						|
      canvas.width = img.width;
 | 
						|
      canvas.height = img.height;
 | 
						|
      const ctx = canvas.getContext("2d");
 | 
						|
      ctx.drawImage(img, 0, 0, img.width, img.height);
 | 
						|
      const ext = img.src.substring(img.src.lastIndexOf(".") + 1).toLowerCase();
 | 
						|
      resolve(canvas.toDataURL(`image/${ext}`));
 | 
						|
    };
 | 
						|
  });
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 图片转base64 (File对象版本)
 | 
						|
 */
 | 
						|
export function image2Base642(file) {
 | 
						|
  return new Promise((resolve, reject) => {
 | 
						|
    const reader = new FileReader();
 | 
						|
    reader.readAsDataURL(file);
 | 
						|
    reader.onload = (e) => {
 | 
						|
      resolve(e.target.result); // 返回 base64
 | 
						|
    };
 | 
						|
    reader.onerror = (error) => {
 | 
						|
      reject(error); // 处理错误
 | 
						|
    };
 | 
						|
  });
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * 判断图片是否可访问成功
 | 
						|
 */
 | 
						|
export function checkImgExists(imgUrl) {
 | 
						|
  return new Promise((resolve, reject) => {
 | 
						|
    const ImgObj = new Image();
 | 
						|
    ImgObj.src = imgUrl;
 | 
						|
    ImgObj.onload = function (res) {
 | 
						|
      resolve(res);
 | 
						|
    };
 | 
						|
    ImgObj.onerror = function (err) {
 | 
						|
      reject(err);
 | 
						|
    };
 | 
						|
  });
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * 获取数据类型
 | 
						|
 */
 | 
						|
export function getDataType(data) {
 | 
						|
  return Object.prototype.toString.call(data).slice(8, -1);
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * 数组去重
 | 
						|
 */
 | 
						|
export function ArrayDeduplication(arr) {
 | 
						|
  return [...new Set(arr)];
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * 数组对象去重
 | 
						|
 */
 | 
						|
export function arrayObjectDeduplication(arr, key) {
 | 
						|
  const obj = {};
 | 
						|
  arr = arr.reduce((previousValue, currentValue) => {
 | 
						|
    if (!obj[currentValue[key]]) {
 | 
						|
      obj[currentValue[key]] = true;
 | 
						|
      previousValue.push(currentValue);
 | 
						|
    }
 | 
						|
    return previousValue;
 | 
						|
  }, []);
 | 
						|
  return arr;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * 查找字符串中指定的值第几次出现的位置
 | 
						|
 */
 | 
						|
export function findCharIndex(options) {
 | 
						|
  const { str, char, num } = options;
 | 
						|
  let index = str.indexOf(char);
 | 
						|
  if (index === -1)
 | 
						|
    return -1;
 | 
						|
  for (let i = 0; i < num - 1; i++) {
 | 
						|
    index = str.indexOf(char, index + 1);
 | 
						|
    if (index === -1)
 | 
						|
      return -1;
 | 
						|
  }
 | 
						|
  return index;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * 生成指定两个值之间的随机数
 | 
						|
 */
 | 
						|
export function randoms(min, max) {
 | 
						|
  return Math.random() * (max - min + 1) + min;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * 千位分隔符
 | 
						|
 */
 | 
						|
export function numFormat(num) {
 | 
						|
  if (num) {
 | 
						|
    const numArr = num.toString().split(".");
 | 
						|
    const arr = numArr[0].split("").reverse();
 | 
						|
    let res = [];
 | 
						|
    for (let i = 0; i < arr.length; i++) {
 | 
						|
      if (i % 3 === 0 && i !== 0) {
 | 
						|
        res.push(",");
 | 
						|
      }
 | 
						|
      res.push(arr[i]);
 | 
						|
    }
 | 
						|
    res.reverse();
 | 
						|
    if (numArr[1]) {
 | 
						|
      res = res.join("").concat(`.${numArr[1]}`);
 | 
						|
    }
 | 
						|
    else {
 | 
						|
      res = res.join("");
 | 
						|
    }
 | 
						|
    return res;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * 验证是否为空
 | 
						|
 */
 | 
						|
export function isEmpty(value) {
 | 
						|
  return (
 | 
						|
    value === undefined
 | 
						|
    || value === null
 | 
						|
    || (typeof value === "object" && Object.keys(value).length === 0)
 | 
						|
    || (typeof value === "string" && value.trim().length === 0)
 | 
						|
  );
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * 获取url参数
 | 
						|
 */
 | 
						|
export function getUrlParam(key) {
 | 
						|
  const reg = new RegExp(`(^|&)${key}=([^&]*)(&|$)`);
 | 
						|
  const r = window.location.search.substr(1).match(reg);
 | 
						|
  if (r != null)
 | 
						|
    return decodeURI(r[2]);
 | 
						|
  return "";
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * 数据分页
 | 
						|
 */
 | 
						|
export function paging(options) {
 | 
						|
  const { list, currentPage, pageSize } = options;
 | 
						|
  return list.filter((item, index) => {
 | 
						|
    return (
 | 
						|
      index < +currentPage * +pageSize
 | 
						|
      && index >= (+currentPage - 1) * +pageSize
 | 
						|
    );
 | 
						|
  });
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * 获取文件后缀
 | 
						|
 */
 | 
						|
export function getFileSuffix(name) {
 | 
						|
  return name.substring(name.lastIndexOf(".") + 1);
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * 获取文件名称
 | 
						|
 */
 | 
						|
export function getFileName(name) {
 | 
						|
  if (!name)
 | 
						|
    return "";
 | 
						|
  return name.substring(name.lastIndexOf("/") + 1);
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * 读取txt文档
 | 
						|
 */
 | 
						|
export function readTxtDocument(filePah) {
 | 
						|
  return new Promise((resolve) => {
 | 
						|
    const FILE_URL = getFileUrl();
 | 
						|
    const file_url = FILE_URL + filePah;
 | 
						|
    const xhr = new XMLHttpRequest();
 | 
						|
    xhr.open("get", file_url, true);
 | 
						|
    xhr.responseType = "blob";
 | 
						|
    xhr.onload = function (event) {
 | 
						|
      const reader = new FileReader();
 | 
						|
      reader.readAsText(event.target.response, "GB2312");
 | 
						|
      reader.onload = function () {
 | 
						|
        resolve(reader.result);
 | 
						|
      };
 | 
						|
    };
 | 
						|
    xhr.send();
 | 
						|
  });
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * 将秒转换成时分秒
 | 
						|
 */
 | 
						|
export function secondConversion(second) {
 | 
						|
  if (!second)
 | 
						|
    return 0;
 | 
						|
  const h = Number.parseInt(second / 60 / 60, 10);
 | 
						|
  const m = Number.parseInt((second / 60) % 60, 10);
 | 
						|
  const s = Number.parseInt(second % 60, 10);
 | 
						|
  if (h) {
 | 
						|
    return `${h}小时${m}分钟${s}秒`;
 | 
						|
  }
 | 
						|
  else {
 | 
						|
    if (m) {
 | 
						|
      return `${m}分钟${s}秒`;
 | 
						|
    }
 | 
						|
    else {
 | 
						|
      return `${s}秒`;
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * 附件添加前缀
 | 
						|
 */
 | 
						|
export function addingPrefixToFile(list, options = {}) {
 | 
						|
  if (!list)
 | 
						|
    return [];
 | 
						|
  const {
 | 
						|
    pathKey = "filePath",
 | 
						|
    nameKey = "fileName",
 | 
						|
    idKey = "imgFilesId",
 | 
						|
  } = options;
 | 
						|
  const FILE_URL = getFileUrl();
 | 
						|
  for (let i = 0; i < list.length; i++) {
 | 
						|
    list[i].url = FILE_URL + list[i][pathKey];
 | 
						|
    list[i].name = list[i][nameKey] || getFileName(list[i][pathKey]);
 | 
						|
    list[i].imgFilesId = list[i][idKey];
 | 
						|
  }
 | 
						|
  return list;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * 翻译状态
 | 
						|
 */
 | 
						|
export function getLabelName(options) {
 | 
						|
  const { status, list, idKey = "id", nameKey = "name" } = options;
 | 
						|
  for (let i = 0; i < list.length; i++) {
 | 
						|
    if (status?.toString() === list[i][idKey]?.toString()) {
 | 
						|
      return list[i][nameKey];
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * 计算文件大小
 | 
						|
 */
 | 
						|
export function calculateFileSize(size) {
 | 
						|
  return size > 1024
 | 
						|
    ? `${(`${size / 1024}`).substring(0, (`${size / 1024}`).lastIndexOf(".") + 3)
 | 
						|
    }MB`
 | 
						|
    : `${size}KB`;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * 根据身份证号获取出生日期和性别
 | 
						|
 */
 | 
						|
export function idCardGetDateAndGender(idCard) {
 | 
						|
  let sex = "";
 | 
						|
  let date = "";
 | 
						|
  if (ID_NUMBER.test(idCard)) {
 | 
						|
    const org_birthday = idCard.substring(6, 14);
 | 
						|
    const org_gender = idCard.substring(16, 17);
 | 
						|
    const birthday
 | 
						|
      = `${org_birthday.substring(0, 4)
 | 
						|
      }-${
 | 
						|
        org_birthday.substring(4, 6)
 | 
						|
      }-${
 | 
						|
        org_birthday.substring(6, 8)}`;
 | 
						|
    const birthdays = new Date(birthday.replace(/-/g, "/"));
 | 
						|
    const Month = birthdays.getMonth() + 1;
 | 
						|
    let MonthDate;
 | 
						|
    const DayDate = birthdays.getDate();
 | 
						|
    let Day;
 | 
						|
    if (Month < 10)
 | 
						|
      MonthDate = `0${Month}`;
 | 
						|
    else MonthDate = Month;
 | 
						|
    if (DayDate < 10)
 | 
						|
      Day = `0${DayDate}`;
 | 
						|
    else Day = DayDate;
 | 
						|
    sex = org_gender % 2 === 1 ? "1" : "0";
 | 
						|
    date = `${birthdays.getFullYear()}-${MonthDate}-${Day}`;
 | 
						|
  }
 | 
						|
  return { sex, date };
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * 获取select中指定项组成的数组
 | 
						|
 */
 | 
						|
export function getSelectAppointItemList(options) {
 | 
						|
  const { list, value, idKey = "id" } = options;
 | 
						|
  return list.filter(item => value.includes(item[idKey]));
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * json转换为树形结构
 | 
						|
 */
 | 
						|
export function listTransTree(options) {
 | 
						|
  const { json, idKey, parentIdKey, childrenKey } = options;
 | 
						|
  const r = [];
 | 
						|
  const hash = {};
 | 
						|
  let i = 0;
 | 
						|
  let j = 0;
 | 
						|
  const len = json.length;
 | 
						|
  for (; i < len; i++) {
 | 
						|
    hash[json[i][idKey]] = json[i];
 | 
						|
  }
 | 
						|
  for (; j < len; j++) {
 | 
						|
    const aVal = json[j];
 | 
						|
    const hashVP = hash[aVal[parentIdKey]];
 | 
						|
    if (hashVP) {
 | 
						|
      !hashVP[childrenKey] && (hashVP[childrenKey] = []);
 | 
						|
      hashVP[childrenKey].push(aVal);
 | 
						|
    }
 | 
						|
    else {
 | 
						|
      r.push(aVal);
 | 
						|
    }
 | 
						|
  }
 | 
						|
  return r;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * 将值转换为"是"/"否"显示文本
 | 
						|
 */
 | 
						|
export function isEmptyToWhether(value, options = {}) {
 | 
						|
  const { yesText = "是", noText = "否", yesValue = "1" } = options;
 | 
						|
  return !isEmpty(value)
 | 
						|
    ? value.toString() === yesValue.toString()
 | 
						|
      ? yesText
 | 
						|
      : noText
 | 
						|
    : "";
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * 生成指定长度的guid
 | 
						|
 */
 | 
						|
export function createGuid(len = 32) {
 | 
						|
  const chars = "abcdefghijklmnopqrstuvwxyz0123456789";
 | 
						|
  let result = "";
 | 
						|
  for (let i = 0; i < len; i++) {
 | 
						|
    result += chars.charAt(Math.floor(Math.random() * chars.length));
 | 
						|
  }
 | 
						|
  return result;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * 获取序号列
 | 
						|
 */
 | 
						|
export function getIndexColumn(pagination) {
 | 
						|
  return {
 | 
						|
    title: "序号",
 | 
						|
    key: "index",
 | 
						|
    width: 70,
 | 
						|
    render: (_, __, index) => pagination === false ? index + 1 : serialNumber(pagination, index),
 | 
						|
  };
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * 获取文件url
 | 
						|
 */
 | 
						|
export function getFileUrl() {
 | 
						|
  return process.env.app["fileUrl"];
 | 
						|
}
 |