excel.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import axios from "axios";
  2. import XLSX from "xlsx";
  3. import { startLoading, endLoading } from "./loading";
  4. import { ElMessage } from "element-plus";
  5. import { useProgressBarStore } from "@/pinia/progress-bar-store";
  6. import env from "@/utils/setting";
  7. const apiUrl = env.VITE_BASE_URL;
  8. export function writeExcelFile(workSheet, fileName) {
  9. const workBook = XLSX.utils.book_new();
  10. XLSX.utils.book_append_sheet(workBook, workSheet, "sheet1");
  11. XLSX.writeFile(workBook, fileName);
  12. endLoading();
  13. }
  14. export function createWorkSheet(data, fields, titles) {
  15. const workSheet = XLSX.utils.json_to_sheet(data, { header: fields });
  16. const range = XLSX.utils.decode_range(workSheet["!ref"]);
  17. for (let c = range.s.c; c <= range.e.c; c++) {
  18. const header = XLSX.utils.encode_col(c) + "1";
  19. workSheet[header].v = titles[workSheet[header].v];
  20. }
  21. return workSheet;
  22. }
  23. const progressBarStore = useProgressBarStore();
  24. export function downloadExcel(data) {
  25. if (data.jdt) {
  26. progressBarStore.initialize({
  27. title: "正在导出 Excel",
  28. isOpen: true,
  29. closeButton: false,
  30. });
  31. } else {
  32. startLoading();
  33. }
  34. axios({
  35. method: data.method || "post",
  36. url: apiUrl + data.url,
  37. data: data.param,
  38. responseType: "blob",
  39. headers: {
  40. token: localStorage.token,
  41. },
  42. })
  43. .then(res => {
  44. const link = document.createElement("a");
  45. let blob = new Blob([res.data], { type: "application/vnd.ms-excel" });
  46. link.style.display = "none";
  47. link.href = URL.createObjectURL(blob);
  48. link.download = data.fileName; //下载的文件名
  49. document.body.appendChild(link);
  50. link.click();
  51. document.body.removeChild(link);
  52. endLoading();
  53. progressBarStore.closeProgressBar();
  54. })
  55. .catch(error => {
  56. ElMessage.error("网络连接错误", "错误");
  57. console.error(error);
  58. endLoading();
  59. progressBarStore.closeProgressBar();
  60. });
  61. }