excel.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import axios from 'axios'
  2. import XLSX from 'xlsx'
  3. import store from '@/store'
  4. import {startLoading, endLoading} from "./loading";
  5. import {ElMessage} from "element-plus";
  6. const apiUrl = import.meta.env.VITE_BASE_URL
  7. export function writeExcelFile(workSheet, fileName) {
  8. const workBook = XLSX.utils.book_new()
  9. XLSX.utils.book_append_sheet(workBook, workSheet, 'sheet1')
  10. XLSX.writeFile(workBook, fileName)
  11. store.commit('app/setLoading', false)
  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. export function downloadExcel(data) {
  24. startLoading()
  25. axios({
  26. method: 'post',
  27. url: apiUrl + data.url,
  28. data: data.param,
  29. responseType: 'blob',
  30. headers: {
  31. token: store.state.user.token,
  32. },
  33. })
  34. .then((res) => {
  35. const link = document.createElement('a')
  36. let blob = new Blob([res.data], {type: 'application/vnd.ms-excel'})
  37. link.style.display = 'none'
  38. link.href = URL.createObjectURL(blob)
  39. link.download = data.fileName //下载的文件名
  40. document.body.appendChild(link)
  41. link.click()
  42. document.body.removeChild(link)
  43. endLoading()
  44. store.commit('app/setLoading', false)
  45. })
  46. .catch((error) => {
  47. ElMessage.error('网络连接错误', '错误')
  48. console.error(error)
  49. endLoading()
  50. store.commit('app/setLoading', false)
  51. })
  52. }