index.vue 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <script setup lang="ts">
  2. import { ref } from "vue";
  3. import { useRouter } from "vue-router";
  4. import { utils, writeFile } from "xlsx";
  5. import { template } from "./config/xls-template";
  6. import contentConfig from "./config/content.config";
  7. import searchConfig from "./config/search.config";
  8. import { useRenderIcon } from "/@/components/ReIcon/src/hooks";
  9. import { usePageSearch, type PageHooks, type PageEvents } from "/@/hooks/page";
  10. import { ElMessage } from "element-plus";
  11. const PageName = "supplyOrderRecord";
  12. const baseUrl = "/supply/supplyOrderRecordDetail";
  13. const { push } = useRouter();
  14. const selectlist = ref<any[]>([]);
  15. const hooks: PageHooks = {
  16. pageSearchHook: () => usePageSearch(undefined, undefined, searchConfig)
  17. };
  18. const events: PageEvents = {
  19. content: {
  20. preview: ({ payNo }) => push(`${baseUrl}?id=${payNo}`),
  21. create: () => push(baseUrl)
  22. }
  23. };
  24. //导出模板
  25. function onDownloadTemplate() {
  26. if (selectlist.value.length === 0) {
  27. ElMessage.error("至少勾选一条对账单");
  28. return;
  29. }
  30. const _data: any = [];
  31. for (const { status, payNo, supplierNo } of selectlist.value) {
  32. if (String(status) !== "2") {
  33. ElMessage.error(`对账单 ${payNo},未通过审核`);
  34. return;
  35. } else {
  36. _data.push({
  37. ...template,
  38. ["卖方公司编码"]: supplierNo,
  39. ["对账编号"]: payNo
  40. });
  41. }
  42. }
  43. //创建数据表
  44. const workBook = utils.book_new();
  45. const workSheet = utils.json_to_sheet(_data);
  46. utils.book_append_sheet(workBook, workSheet, "sheet");
  47. //导出模板
  48. writeFile(workBook, "批量开票申请模板.xlsx", {
  49. bookType: "xlsx"
  50. });
  51. }
  52. </script>
  53. <template>
  54. <PageAuth :pageName="PageName">
  55. <PageContainer
  56. :hooks="hooks"
  57. :events="events"
  58. :contentConfig="contentConfig"
  59. :search-config="searchConfig"
  60. @content-select-change="items => (selectlist = items)"
  61. >
  62. <template #content_header>
  63. <ElButton
  64. size="small"
  65. :icon="useRenderIcon('arrow-down-line')"
  66. @click="() => onDownloadTemplate()"
  67. >下载批量开票模板</ElButton
  68. >
  69. </template>
  70. </PageContainer>
  71. </PageAuth>
  72. </template>