useMethods.ts 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. import { defHttp } from '/@/utils/http/axios';
  2. import { useMessage } from '/@/hooks/web/useMessage';
  3. import { useGlobSetting } from '/@/hooks/setting';
  4. const { createMessage, createWarningModal } = useMessage();
  5. const glob = useGlobSetting();
  6. /**
  7. * 导出文件xlsx的mime-type
  8. */
  9. export const XLSX_MIME_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
  10. /**
  11. * 导出文件xlsx的文件后缀
  12. */
  13. export const XLSX_FILE_SUFFIX = '.xlsx';
  14. export function useMethods() {
  15. /**
  16. * 导出xls
  17. * @param name
  18. * @param url
  19. */
  20. async function exportXls(name, url, params, isXlsx = false) {
  21. //update-begin---author:wangshuai---date:2024-01-25---for:【QQYUN-8118】导出超时时间设置长点---
  22. const data = await defHttp.get({ url: url, params: params, responseType: 'blob', timeout: 60000 }, { isTransformResponse: false });
  23. //update-end---author:wangshuai---date:2024-01-25---for:【QQYUN-8118】导出超时时间设置长点---
  24. if (!data) {
  25. createMessage.warning('文件下载失败');
  26. return;
  27. }
  28. //update-begin---author:wangshuai---date:2024-04-18---for: 导出excel失败提示,不进行导出---
  29. let reader = new FileReader()
  30. reader.readAsText(data, 'utf-8')
  31. reader.onload = async () => {
  32. if(reader.result){
  33. if(reader.result.toString().indexOf("success") !=-1){
  34. // update-begin---author:liaozhiyang---date:2025-02-11---for:【issues/7738】文件中带"success"导出报错 ---
  35. try {
  36. const { success, message } = JSON.parse(reader.result.toString());
  37. if (!success) {
  38. createMessage.warning('导出失败,失败原因:' + message);
  39. } else {
  40. exportExcel(name, isXlsx, data);
  41. }
  42. return;
  43. } catch (error) {
  44. exportExcel(name, isXlsx, data);
  45. }
  46. // update-end---author:liaozhiyang---date:2025-02-11---for:【issues/7738】文件中带"success"导出报错 ---
  47. }
  48. }
  49. exportExcel(name, isXlsx, data);
  50. //update-end---author:wangshuai---date:2024-04-18---for: 导出excel失败提示,不进行导出---
  51. }
  52. }
  53. /**
  54. * 导入xls
  55. * @param data 导入的数据
  56. * @param url
  57. * @param success 成功后的回调
  58. */
  59. async function importXls(data, url, success) {
  60. const isReturn = (fileInfo) => {
  61. try {
  62. if (fileInfo.code === 201) {
  63. let {
  64. message,
  65. result: { msg, fileUrl, fileName },
  66. } = fileInfo;
  67. let href = glob.uploadUrl + fileUrl;
  68. createWarningModal({
  69. title: message,
  70. centered: false,
  71. content: `<div>
  72. <span>${msg}</span><br/>
  73. <span>具体详情请<a href = ${href} download = ${fileName}> 点击下载 </a> </span>
  74. </div>`,
  75. });
  76. //update-begin---author:wangshuai ---date:20221121 for:[VUEN-2827]导入无权限,提示图标错误------------
  77. } else if (fileInfo.code === 500 || fileInfo.code === 510) {
  78. createMessage.error(fileInfo.message || `${data.file.name} 导入失败`);
  79. //update-end---author:wangshuai ---date:20221121 for:[VUEN-2827]导入无权限,提示图标错误------------
  80. } else {
  81. createMessage.success(fileInfo.message || `${data.file.name} 文件上传成功`);
  82. }
  83. } catch (error) {
  84. console.log('导入的数据异常', error);
  85. } finally {
  86. typeof success === 'function' ? success(fileInfo) : '';
  87. }
  88. };
  89. await defHttp.uploadFile({ url }, { file: data.file }, { success: isReturn });
  90. }
  91. return {
  92. handleExportXls: (name: string, url: string, params?: object) => exportXls(name, url, params),
  93. handleImportXls: (data, url, success) => importXls(data, url, success),
  94. handleExportXlsx: (name: string, url: string, params?: object) => exportXls(name, url, params, true),
  95. };
  96. /**
  97. * 导出excel
  98. * @param name
  99. * @param isXlsx
  100. * @param data
  101. */
  102. function exportExcel(name, isXlsx, data) {
  103. if (!name || typeof name != 'string') {
  104. name = '导出文件';
  105. }
  106. let blobOptions = { type: 'application/vnd.ms-excel' };
  107. let fileSuffix = '.xls';
  108. if (isXlsx) {
  109. blobOptions['type'] = XLSX_MIME_TYPE;
  110. fileSuffix = XLSX_FILE_SUFFIX;
  111. }
  112. if (typeof window.navigator.msSaveBlob !== 'undefined') {
  113. window.navigator.msSaveBlob(new Blob([data], blobOptions), name + fileSuffix);
  114. } else {
  115. let url = window.URL.createObjectURL(new Blob([data], blobOptions));
  116. let link = document.createElement('a');
  117. link.style.display = 'none';
  118. link.href = url;
  119. link.setAttribute('download', name + fileSuffix);
  120. document.body.appendChild(link);
  121. link.click();
  122. document.body.removeChild(link); //下载完成移除元素
  123. window.URL.revokeObjectURL(url); //释放掉blob对象
  124. }
  125. }
  126. }