From 91c82965b2d987452ca276e3a03b48c8dcda2ae9 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期三, 19 八月 2026 11:47:26 +0800
Subject: [PATCH] config(env): 更新生产环境配置和公司名称

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

diff --git a/src/views/mes/pro/pallet/index.vue b/src/views/mes/pro/pallet/index.vue
new file mode 100644
index 0000000..403a339
--- /dev/null
+++ b/src/views/mes/pro/pallet/index.vue
@@ -0,0 +1,169 @@
+<script lang="ts" setup>
+  import type { VxeTableGridOptions } from "#/adapter/vxe-table";
+  import type { MesProPalletApi } from "#/api/mes/pro/pallet";
+
+  import { Page, useVbenModal } from "@vben/common-ui";
+  import { downloadFileFromBlobPart } from "@vben/utils";
+
+  import { message } from "ant-design-vue";
+
+  import { ACTION_ICON, TableAction, useVbenVxeGrid } from "#/adapter/vxe-table";
+  import {
+    deletePallet,
+    exportPalletExcel,
+    exportPalletQr,
+    getPalletPage,
+  } from "#/api/mes/pro/pallet";
+  import { $t } from "#/locales";
+
+  import { useGridColumns, useGridFormSchema } from "./data";
+  import GenerateModal from "./modules/generate-form.vue";
+  import QrTraceModal from "../components/qr-trace-modal.vue";
+
+  defineOptions({ name: "MesProPallet" });
+
+  const [GenerateFormModal, generateFormModalApi] = useVbenModal({
+    connectedComponent: GenerateModal,
+    destroyOnClose: true,
+  });
+
+  const [QrTraceQueryModal, qrTraceQueryModalApi] = useVbenModal({
+    connectedComponent: QrTraceModal,
+    destroyOnClose: true,
+  });
+
+  /** 鍒锋柊琛ㄦ牸 */
+  function handleRefresh() {
+    gridApi.query();
+  }
+
+  /** 鎵归噺鐢熸垚鎵樼洏鐮� */
+  function handleCreate() {
+    generateFormModalApi.open();
+  }
+
+  /** 鎵爜杩芥函 */
+  function handleTrace() {
+    qrTraceQueryModalApi.open();
+  }
+
+  /** 鏌ョ湅浜岀淮鐮侊紙琛屽唴棰勫~鐮佸�硷級 */
+  function handleViewQr(row: MesProPalletApi.Pallet) {
+    qrTraceQueryModalApi.setData({ code: row.code }).open();
+  }
+
+  /** 瀵煎嚭浜岀淮鐮� ZIP锛堟寜褰撳墠鏌ヨ鏉′欢鐨勬壒娆★級 */
+  async function handleExportQr() {
+    const values = await gridApi.formApi.getValues();
+    if (!values.batchId) {
+      message.warning("璇峰厛鎸夋壒娆$瓫閫夊悗鍐嶅鍑轰簩缁寸爜");
+      return;
+    }
+    const data = await exportPalletQr(values.batchId);
+    downloadFileFromBlobPart({ fileName: "鎵樼洏鐮佷簩缁寸爜.zip", source: data });
+  }
+
+  /** 鍒犻櫎鎵樼洏鐮� */
+  async function handleDelete(row: MesProPalletApi.Pallet) {
+    await deletePallet(row.id!);
+    message.success($t("ui.actionMessage.deleteSuccess", [row.code]));
+    handleRefresh();
+  }
+
+  /** 瀵煎嚭琛ㄦ牸 */
+  async function handleExport() {
+    const data = await exportPalletExcel(await gridApi.formApi.getValues());
+    downloadFileFromBlobPart({ fileName: "鎵樼洏鐮�.xls", source: data });
+  }
+
+  const [Grid, gridApi] = useVbenVxeGrid({
+    formOptions: {
+      schema: useGridFormSchema(),
+    },
+    gridOptions: {
+      columns: useGridColumns(),
+      height: "auto",
+      keepSource: true,
+      proxyConfig: {
+        ajax: {
+          query: async ({ page }, formValues) => {
+            return await getPalletPage({
+              pageNo: page.currentPage,
+              pageSize: page.pageSize,
+              ...formValues,
+            });
+          },
+        },
+      },
+      rowConfig: {
+        keyField: "id",
+        isHover: true,
+      },
+      toolbarConfig: {
+        refresh: true,
+        search: true,
+      },
+    } as VxeTableGridOptions<MesProPalletApi.Pallet>,
+  });
+</script>
+
+<template>
+  <Page auto-content-height>
+    <GenerateFormModal @success="handleRefresh" />
+    <QrTraceQueryModal />
+    <Grid table-title="鎵樼洏鐮佸垪琛�">
+      <template #toolbar-tools>
+        <TableAction :actions="[
+            {
+              label: '鎵归噺鐢熸垚',
+              type: 'primary',
+              icon: ACTION_ICON.ADD,
+              auth: ['mes:pro-pallet:create'],
+              onClick: handleCreate,
+            },
+            {
+              label: '鎵爜杩芥函',
+              icon: ACTION_ICON.SEARCH,
+              auth: ['mes:pro-pallet:query'],
+              onClick: handleTrace,
+            },
+            {
+              label: '瀵煎嚭浜岀淮鐮�',
+              icon: ACTION_ICON.DOWNLOAD,
+              auth: ['mes:pro-pallet:export'],
+              onClick: handleExportQr,
+            },
+            {
+              label: $t('ui.actionTitle.export'),
+              type: 'primary',
+              icon: ACTION_ICON.DOWNLOAD,
+              auth: ['mes:pro-pallet:export'],
+              onClick: handleExport,
+            },
+          ]" />
+      </template>
+      <template #actions="{ row }">
+        <TableAction :actions="[
+            {
+              label: '鏌ョ湅浜岀淮鐮�',
+              type: 'link',
+              auth: ['mes:pro-pallet:query'],
+              onClick: handleViewQr.bind(null, row),
+            },
+            {
+              label: $t('common.delete'),
+              type: 'link',
+              danger: true,
+              icon: ACTION_ICON.DELETE,
+              auth: ['mes:pro-pallet:delete'],
+              ifShow: !row.bagCount,
+              popConfirm: {
+                title: $t('ui.actionMessage.deleteConfirm', [row.code]),
+                confirm: handleDelete.bind(null, row),
+              },
+            },
+          ]" />
+      </template>
+    </Grid>
+  </Page>
+</template>

--
Gitblit v1.9.3