zy-react-library/utils/index.js

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"];
}