From 6540316952969ed21230c0f92c3bc57e88f58142 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期五, 16 十月 2026 20:15:15 +0800
Subject: [PATCH] feat(mes): 新增二维码后台导出功能

---
 src/views/mes/pro/batch/index.vue |   21 +++++++++++++++++++++
 1 files changed, 21 insertions(+), 0 deletions(-)

diff --git a/src/views/mes/pro/batch/index.vue b/src/views/mes/pro/batch/index.vue
index 49e137d..7200a27 100644
--- a/src/views/mes/pro/batch/index.vue
+++ b/src/views/mes/pro/batch/index.vue
@@ -1,4 +1,5 @@
 <script lang="ts" setup>
+  import { ref } from 'vue';
   import type { VxeTableGridOptions } from "#/adapter/vxe-table";
   import type { MesProBatchApi } from "#/api/mes/pro/batch";
 
@@ -19,6 +20,7 @@
     updateBatchStatus,
   } from "#/api/mes/pro/batch";
   import { IconifyIcon } from "@vben/icons";
+  import { countQrExport, submitQrExport } from '#/api/mes/pro/qrExport';
   import { $t } from "#/locales";
 
   import { useGridColumns, useGridFormSchema } from "./data";
@@ -26,6 +28,9 @@
   import PreGenerateModal from "./modules/pre-generate.vue";
   import QrTraceModal from "../components/qr-trace-modal.vue";
   import BusinessQrModal from "../components/business-qr.vue";
+  import QrExportTaskModal from '../components/qr-export-task-modal.vue';
+
+  const qrExportTaskModal = ref<InstanceType<typeof QrExportTaskModal>>();
 
   const [FormModal, formModalApi] = useVbenModal({
     connectedComponent: Form,
@@ -54,6 +59,13 @@
   }
   async function handleExportBusiness(row: MesProBatchApi.Batch) {
     if (row.id == null) return;
+    const params = { bizType: 'BATCH_BUSINESS' as const, batchId: row.id };
+    const count = await countQrExport(params);
+    if (count.mode === 'ASYNC') {
+      qrExportTaskModal.value?.show(await submitQrExport(params));
+      message.success(`宸叉彁浜� ${count.totalCount} 寮犱簩缁寸爜鐨勫悗鍙板鍑轰换鍔);
+      return;
+    }
     const data = await exportBatchBusinessQr(row.id);
     downloadFileFromBlobPart({ fileName: '鎵规涓庢墭鐩樹笟鍔′簩缁寸爜.zip', source: data });
   }
@@ -79,6 +91,13 @@
 
   /** 鎵撳嵃鏁村浜岀淮鐮侊紙鎵规鍥� + 鍏ㄩ儴鎵樼洏鍥� ZIP锛� */
   async function handlePrintQrSet(row: MesProBatchApi.Batch) {
+    const params = { bizType: 'BATCH_LABEL' as const, batchId: row.id! };
+    const count = await countQrExport(params);
+    if (count.mode === 'ASYNC') {
+      qrExportTaskModal.value?.show(await submitQrExport(params));
+      message.success(`宸叉彁浜� ${count.totalCount} 寮犱簩缁寸爜鐨勫悗鍙板鍑轰换鍔);
+      return;
+    }
     const data = await exportBatchQr(row.id!);
     downloadFileFromBlobPart({
       fileName: `鎵规浜岀淮鐮�-${getDisplayCode(row)}.zip`,
@@ -182,6 +201,7 @@
     <PreGenerateModalApi @success="handlePreGenerateSuccess" />
     <QrTraceQueryModal />
     <BusinessQrViewModal />
+    <QrExportTaskModal ref="qrExportTaskModal" />
     <Grid table-title="鐢熶骇鎵规鍒楄〃">
       <template #table-title><span class="text-[1rem] font-bold" style="white-space:nowrap">鐢熶骇鎵规鍒楄〃</span></template>
       <template #toolbar-tools>
@@ -192,6 +212,7 @@
           <TableAction :dropdown-trigger="['click']" :drop-down-actions="[{ label: 'Excel 鏁版嵁', auth: ['mes:pro-batch:export'], onClick: handleExport }]">
             <template #more><Button>瀵煎嚭 <IconifyIcon icon="lucide:chevron-down" /></Button></template>
           </TableAction>
+          <Button @click="qrExportTaskModal?.showLast()">鍚庡彴瀵煎嚭浠诲姟</Button>
         </div>
       </template>
       <template #code="{ row }">

--
Gitblit v1.9.3