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