import customMessage from './message'; //将enum转换为{label:"",value:""}形式 function enumToSelect(data: any) { const keys = Object.keys(data); return keys.map((value) => { return { label: data[value], value: value }; }); } export function enum2ReverseSelect(data: any) { const keys = Object.keys(data); return keys.map((value) => { return { label: data[value], value: value }; }); } //将枚举的value值转换为label function enumValueToLabel(value: any, enumObj: any) { if (enumObj !== undefined) { return enumObj[value]; } return ''; } //从缓存中获取用户信息 function getUserInfo() { let userInfoString = localStorage.getItem('userInfo'); if (userInfoString === null) { return {}; } return JSON.parse(userInfoString); } //将状态枚举值转换为ProTable的enumValue格式 function enumToProTableEnumValue(enumConstants: any) { const result = {}; for (const key in enumConstants) { if (enumConstants.hasOwnProperty(key)) { result[key] = { text: enumConstants[key], status: enumValueToLabel(key, enumConstants), }; } } return result; } function formatDateTime(inputDateTime: string) { const parsedDateTime = new Date(inputDateTime); const year = parsedDateTime.getFullYear(); const month = String(parsedDateTime.getMonth() + 1).padStart(2, '0'); const day = String(parsedDateTime.getDate()).padStart(2, '0'); const hour = String(parsedDateTime.getHours()).padStart(2, '0'); const minute = String(parsedDateTime.getMinutes()).padStart(2, '0'); const second = String(parsedDateTime.getSeconds()).padStart(2, '0'); const formattedDateTime = `${year}-${month}-${day} ${hour}:${minute}:${second}`; return formattedDateTime; } // const resize = () => { // // 计算元素底部到视口顶部的距离 // let bottomDistance = document // .getElementById('mainTable') // ?.getElementsByClassName('ant-table-thead')[0] // .getBoundingClientRect().bottom; // // 获取屏幕高度 // let screenHeight = // window.innerHeight || document.documentElement.clientHeight; // // 计算元素底部到屏幕底部的距离 // let bottomToScreenBottomDistance = screenHeight - bottomDistance; // // //底部分页元素的高度 // // var pH = screenHeight - document.getElementById("main-table").getElementsByClassName('ant-table-body')[0].getBoundingClientRect().bottom; // setTableHeight(bottomToScreenBottomDistance - 88); // }; function formatdate(inputDateTime: string) { const parsedDateTime = new Date(inputDateTime); const year = parsedDateTime.getFullYear(); const month = String(parsedDateTime.getMonth() + 1).padStart(2, '0'); const day = String(parsedDateTime.getDate()).padStart(2, '0'); const formattedDate = `${year}-${month}-${day}`; return formattedDate; } function formatSalesCode(salesCode: any) { let newSalesCode = salesCode; if (newSalesCode.indexOf('_')) { newSalesCode = newSalesCode.split('_'); if (newSalesCode?.length === 2) { newSalesCode = newSalesCode[1] + '(' + newSalesCode[0] + ')'; } } return newSalesCode; } // 将二进制流的字符串转换成 Blob 对象 function dataURItoBlob(dataURI: any) { const byteString = atob(dataURI.split(',')[1]); const mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0]; const ab = new ArrayBuffer(byteString.length); const ia = new Uint8Array(ab); for (let i = 0; i < byteString.length; i++) { ia[i] = byteString.charCodeAt(i); } return new Blob([ab], { type: mimeString }); } // 将 Blob 对象转换成 File 对象 function blobToFile(blob: any, fileName: any) { return new File([blob], fileName, { type: blob.type }); } function appendFormData(formData: any, data: any, parentKey = null) { for (const key in data) { if (data.hasOwnProperty(key)) { const value = data[key]; const formKey = parentKey ? `${parentKey}[${key}]` : key; if (Array.isArray(value)) { // 处理数组 value.forEach((item, index) => { const arrayKey = `${formKey}[${index}]`; if (typeof item === 'object' && !Array.isArray(item)) { // 递归处理对象 appendFormData(formData, item, arrayKey); } else { // 直接添加到 FormData formData.append(arrayKey, item); } }); } else if (typeof value === 'object' && !Array.isArray(value)) { // 递归处理对象 appendFormData(formData, value, formKey); } else { // 直接添加到 FormData formData.append(formKey, value); } } } } function getName(str: string) { let parts = str.split('-'); if (parts.length < 2) { return null; // 字符串不包含'-' } let namePart = parts.slice(2).join('-') || parts[1]; let name = namePart.replace(/^\d+/, ''); // 移除名字前的数字 return name; } function getAliYunOSSFileNameFromUrl(url: string) { try { // 使用URL对象解析链接 let urlObject = new URL(url); // 从路径中获取最后一个斜杠后的部分,即文件名 let pathParts = urlObject.pathname.split('/'); let fileName = pathParts[pathParts.length - 1]; // 检查文件名是否包含至少一个点(.)以确保是一个合法的文件名 if (fileName.includes('.')) { let originName = getName(fileName); if ( originName === '' || originName === undefined || originName === null ) { return url; } return decodeURIComponent(originName); } else { throw new Error('Invalid file name in the URL'); } } catch (error: any) { // 如果解析失败或文件名不符合预期,返回原始链接 console.error('Error extracting file name:', error.message); return url; } } function transImageFile(base64Image: any) { // 将Base64字符串解码为二进制数据 const binaryData = atob(base64Image.split(',')[1]); // 创建一个Uint8Array来存储二进制数据 const arrayBuffer = new ArrayBuffer(binaryData.length); const uint8Array = new Uint8Array(arrayBuffer); for (let i = 0; i < binaryData.length; i++) { uint8Array[i] = binaryData.charCodeAt(i); } // 创建Blob对象 return new Blob([uint8Array], { type: 'image/png' }); } /** * 复制文本到剪贴板 * @param text */ function copyToClipboard(text: string) { // 创建一个临时的textarea元素 const textarea = document.createElement('textarea'); textarea.value = text; // 将textarea元素添加到DOM中 document.body.appendChild(textarea); // 选中textarea中的文本 textarea.select(); try { // 尝试执行复制命令 document.execCommand('copy'); return true; } catch (err) { return false; } finally { // 移除临时的textarea元素 document.body.removeChild(textarea); } } /** * 按照前两个-,分割为数组 * @param str 字符串处理 * @returns */ function splitByFirstTwoDashes(str: string) { let index1 = str.indexOf('-'); if (index1 === -1) { return [str]; } let index2 = str.indexOf('-', index1 + 1); if (index2 === -1) { return [str.slice(0, index1), str.slice(index1 + 1)]; } return [ str.slice(0, index1), str.slice(index1 + 1, index2), str.slice(index2 + 1), ]; } //浮点数加法运算 function FloatAdd(arg1: any, arg2: any) { let r1, r2, m; try { r1 = arg1.toString().split('.')[1].length; } catch (e) { r1 = 0; } try { r2 = arg2.toString().split('.')[1].length; } catch (e) { r2 = 0; } m = Math.pow(10, Math.max(r1, r2)); return (arg1 * m + arg2 * m) / m; } //浮点数减法运算 function FloatSub(arg1: any, arg2: any) { let r1, r2, m, n; try { r1 = arg1.toString().split('.')[1].length; } catch (e) { r1 = 0; } try { r2 = arg2.toString().split('.')[1].length; } catch (e) { r2 = 0; } m = Math.pow(10, Math.max(r1, r2)); //动态控制精度长度 n = (r1 = r2) ? r1 : r2; return ((arg1 * m - arg2 * m) / m).toFixed(n); } //浮点数乘法运算 function FloatMul(arg1: any, arg2: any) { let m = 0, s1 = arg1.toString(), s2 = arg2.toString(); try { m += s1.split('.')[1].length; } catch (e) {} try { m += s2.split('.')[1].length; } catch (e) {} return ( (Number(s1.replace('.', '')) * Number(s2.replace('.', ''))) / Math.pow(10, m) ); } //浮点数除法运算 function FloatDiv(arg1: any, arg2: any) { let t1 = 0, t2 = 0, r1, r2; try { t1 = arg1.toString().split('.')[1].length; } catch (e) {} try { t2 = arg2.toString().split('.')[1].length; } catch (e) {} if (Math) { r1 = Number(arg1.toString().replace('.', '')); r2 = Number(arg2.toString().replace('.', '')); return (r1 / r2) * Math.pow(10, t2 - t1); } } async function blobToJson(blob: any) { return new Promise((resolve, reject) => { const reader = new FileReader(); // 设置读取完成的事件处理程序 reader.onload = function (event) { try { const jsonString = event?.target?.result; const jsonObject = JSON.parse(jsonString); resolve(jsonObject); } catch (error) { reject(error); } }; // 设置读取出错的事件处理程序 reader.onerror = function (error) { reject(error); }; // 开始读取Blob对象 reader.readAsText(blob, 'UTF-8'); }); } /** * 判断文件名是否为图片 * @param name */ function isImageName(name: any) { if (name === undefined || name === null) { return false; } // 获取文件后缀 let suffix = ''; try { const fileArr = name.split('.'); suffix = fileArr[fileArr.length - 1]; } catch (err) { suffix = ''; } // 如果文件名无后缀,返回 false if (!suffix) { return false; } // 图片格式 const imglist = ['png', 'jpg', 'jpeg', 'bmp', 'gif', 'webp']; // 进行图片匹配 const isImage = imglist.some((item) => item === suffix); if (isImage) { return true; } } export { FloatAdd, FloatDiv, FloatMul, FloatSub, appendFormData, blobToFile, blobToJson, copyToClipboard, customMessage, dataURItoBlob, enumToProTableEnumValue, enumToSelect, enumValueToLabel, formatDateTime, formatSalesCode, formatdate, getAliYunOSSFileNameFromUrl, getUserInfo, isImageName, splitByFirstTwoDashes, transImageFile, };