import { defHttp } from '/@/utils/http/axios'; import { useMessage } from '/@/hooks/web/useMessage'; import { useGlobSetting } from '/@/hooks/setting'; const { createMessage, createWarningModal } = useMessage(); const glob = useGlobSetting(); /** * 导出文件xlsx的mime-type */ export const XLSX_MIME_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; /** * 导出文件xlsx的文件后缀 */ export const XLSX_FILE_SUFFIX = '.xlsx'; export function useMethods() { /** * 导出xls * @param name * @param url */ async function exportXls(name, url, params, isXlsx = false) { //update-begin---author:wangshuai---date:2024-01-25---for:【QQYUN-8118】导出超时时间设置长点--- const data = await defHttp.get({ url: url, params: params, responseType: 'blob', timeout: 60000 }, { isTransformResponse: false }); //update-end---author:wangshuai---date:2024-01-25---for:【QQYUN-8118】导出超时时间设置长点--- if (!data) { createMessage.warning('文件下载失败'); return; } //update-begin---author:wangshuai---date:2024-04-18---for: 导出excel失败提示,不进行导出--- let reader = new FileReader() reader.readAsText(data, 'utf-8') reader.onload = async () => { if(reader.result){ if(reader.result.toString().indexOf("success") !=-1){ // update-begin---author:liaozhiyang---date:2025-02-11---for:【issues/7738】文件中带"success"导出报错 --- try { const { success, message } = JSON.parse(reader.result.toString()); if (!success) { createMessage.warning('导出失败,失败原因:' + message); } else { exportExcel(name, isXlsx, data); } return; } catch (error) { exportExcel(name, isXlsx, data); } // update-end---author:liaozhiyang---date:2025-02-11---for:【issues/7738】文件中带"success"导出报错 --- } } exportExcel(name, isXlsx, data); //update-end---author:wangshuai---date:2024-04-18---for: 导出excel失败提示,不进行导出--- } } /** * 导入xls * @param data 导入的数据 * @param url * @param success 成功后的回调 */ async function importXls(data, url, success) { const isReturn = (fileInfo) => { try { if (fileInfo.code === 201) { let { message, result: { msg, fileUrl, fileName }, } = fileInfo; let href = glob.uploadUrl + fileUrl; createWarningModal({ title: message, centered: false, content: `
${msg}
具体详情请 点击下载
`, }); //update-begin---author:wangshuai ---date:20221121 for:[VUEN-2827]导入无权限,提示图标错误------------ } else if (fileInfo.code === 500 || fileInfo.code === 510) { createMessage.error(fileInfo.message || `${data.file.name} 导入失败`); //update-end---author:wangshuai ---date:20221121 for:[VUEN-2827]导入无权限,提示图标错误------------ } else { createMessage.success(fileInfo.message || `${data.file.name} 文件上传成功`); } } catch (error) { console.log('导入的数据异常', error); } finally { typeof success === 'function' ? success(fileInfo) : ''; } }; await defHttp.uploadFile({ url }, { file: data.file }, { success: isReturn }); } return { handleExportXls: (name: string, url: string, params?: object) => exportXls(name, url, params), handleImportXls: (data, url, success) => importXls(data, url, success), handleExportXlsx: (name: string, url: string, params?: object) => exportXls(name, url, params, true), }; /** * 导出excel * @param name * @param isXlsx * @param data */ function exportExcel(name, isXlsx, data) { if (!name || typeof name != 'string') { name = '导出文件'; } let blobOptions = { type: 'application/vnd.ms-excel' }; let fileSuffix = '.xls'; if (isXlsx) { blobOptions['type'] = XLSX_MIME_TYPE; fileSuffix = XLSX_FILE_SUFFIX; } if (typeof window.navigator.msSaveBlob !== 'undefined') { window.navigator.msSaveBlob(new Blob([data], blobOptions), name + fileSuffix); } else { let url = window.URL.createObjectURL(new Blob([data], blobOptions)); let link = document.createElement('a'); link.style.display = 'none'; link.href = url; link.setAttribute('download', name + fileSuffix); document.body.appendChild(link); link.click(); document.body.removeChild(link); //下载完成移除元素 window.URL.revokeObjectURL(url); //释放掉blob对象 } } }