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