index.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. <script setup lang="ts">
  2. import { ref } from "vue";
  3. import contentConfig from "./config/content.config";
  4. import searchConfig from "./config/search.config";
  5. import { usePageSearch, type PageHooks, type PageEvents } from "/@/hooks/page";
  6. import InvoiceModal from "./components/invoice-modal.vue";
  7. import { useRenderIcon } from "/@/components/ReIcon/src/hooks";
  8. import { useRouter } from "vue-router";
  9. // import { useUserInfo } from "/@/hooks/core/useUser";
  10. import { httpRequsetExport } from "/@/utils/export";
  11. import { useCompany } from "/@/hooks/core/useCompany";
  12. import { PageContent } from "/@/components/PageContent";
  13. import { utils, writeFile } from "xlsx";
  14. import { template } from "./config/xls-template";
  15. import ExeclUpoad from "./components/execl-files-upload/index.vue";
  16. import { usePermission } from "/@/hooks/core/usePermission";
  17. import { useUserInfo } from "/@/hooks/core/useUser";
  18. const PageName = "buyInvoiceQuery";
  19. const baseUrl = "/purchase/ticketReturnDetail";
  20. const invStatus = ["4", "10"];
  21. // { code: "017", name: "导出回票数据" },
  22. // { code: "018", name: "批量导入认证结果" },
  23. // { code: "019", name: "下载回票批量申请模板" },
  24. const { hasPermissionWithCode } = usePermission(PageName);
  25. const { isSuperUser } = useUserInfo();
  26. const pageContentRef = ref<InstanceType<typeof PageContent> | null>(null);
  27. const { push } = useRouter();
  28. const { currentCompany } = useCompany();
  29. const loading = ref(false);
  30. const invoiceModalRef = ref<InstanceType<typeof InvoiceModal>>(null);
  31. const execelUploadRef = ref<InstanceType<typeof ExeclUpoad>>(null);
  32. async function handleDownload() {
  33. await httpRequsetExport({
  34. url: "ile",
  35. name: "回票数据表",
  36. onStart: () => (loading.value = true),
  37. onSuccess: () => (loading.value = false),
  38. onFail: () => (loading.value = false),
  39. params: {
  40. companyNo: currentCompany.value.companyNo,
  41. ...(pageContentRef.value as any).getBasicParams()
  42. }
  43. });
  44. }
  45. const hooks: PageHooks = {
  46. pageSearchHook: () => usePageSearch(undefined, undefined, searchConfig)
  47. };
  48. const events: PageEvents = {
  49. content: {
  50. preview: ({ hpNo }) => push(`${baseUrl}?id=${hpNo}`),
  51. create: () => push(baseUrl)
  52. }
  53. };
  54. //导出模板
  55. function onDownloadTemplate() {
  56. //创建数据表
  57. const workBook = utils.book_new();
  58. const workSheet = utils.json_to_sheet([template]);
  59. utils.book_append_sheet(workBook, workSheet, "sheet");
  60. //导出模板
  61. writeFile(workBook, "回票批量导入模板.xlsx", {
  62. bookType: "xlsx"
  63. });
  64. }
  65. </script>
  66. <template>
  67. <PageAuth :pageName="PageName">
  68. <PageContainer
  69. :hooks="hooks"
  70. :events="events"
  71. :contentConfig="contentConfig"
  72. :search-config="searchConfig"
  73. :get-content-ref="(ref:any) => (pageContentRef = ref)"
  74. >
  75. <template #content_header>
  76. <ElButton
  77. size="small"
  78. v-if="hasPermissionWithCode('017')"
  79. :icon="useRenderIcon('arrow-down-line')"
  80. :loading="loading"
  81. @click="() => handleDownload()"
  82. >导出回票数据</ElButton
  83. >
  84. <ElButton
  85. size="small"
  86. v-if="hasPermissionWithCode('018') && !isSuperUser"
  87. :icon="useRenderIcon('arrow-up-line')"
  88. @click="() => execelUploadRef.onDisplay()"
  89. >批量导入认证结果</ElButton
  90. >
  91. <ElButton
  92. size="small"
  93. v-if="hasPermissionWithCode('019')"
  94. :icon="useRenderIcon('arrow-down-line')"
  95. @click="() => onDownloadTemplate()"
  96. >下载回票批量申请模板</ElButton
  97. >
  98. </template>
  99. <template #content_action="row">
  100. <ElButton
  101. v-if="invStatus.includes(String(row.status))"
  102. link
  103. type="primary"
  104. :icon="useRenderIcon('scaletooriginal')"
  105. @click="() => invoiceModalRef.onDisplay(row)"
  106. />
  107. </template>
  108. </PageContainer>
  109. <InvoiceModal ref="invoiceModalRef" />
  110. <ExeclUpoad ref="execelUploadRef" />
  111. </PageAuth>
  112. </template>