12 小时以前 08bb5d242135e2c1f0fc17d2b5f7ae548275a3a2
src/views/mes/pro/batch/index.vue
@@ -6,7 +6,7 @@
  import { MesProBatchStatusEnum } from "@vben/constants";
  import { downloadFileFromBlobPart } from "@vben/utils";
  import { Button, message } from "ant-design-vue";
  import { Button, message, Modal, Tag } from "ant-design-vue";
  import { ACTION_ICON, TableAction, useVbenVxeGrid } from "#/adapter/vxe-table";
  import {
@@ -20,10 +20,16 @@
  import { useGridColumns, useGridFormSchema } from "./data";
  import Form from "./modules/form.vue";
  import PreGenerateModal from "./modules/pre-generate.vue";
  import QrTraceModal from "../components/qr-trace-modal.vue";
  const [FormModal, formModalApi] = useVbenModal({
    connectedComponent: Form,
    destroyOnClose: true,
  });
  const [PreGenerateModalApi, preGenerateModalApi] = useVbenModal({
    connectedComponent: PreGenerateModal,
    destroyOnClose: true,
  });
@@ -42,23 +48,47 @@
    qrTraceQueryModalApi.open();
  }
  /** 查看二维码(行内预填码值) */
  /** 获取批次显示用的码值(正式批次号优先,其次临时批次码) */
  function getDisplayCode(row: MesProBatchApi.Batch) {
    return row.code || row.tempCode || "";
  }
  /** 查看二维码(行内预填码值,临时批次用临时批次码) */
  function handleViewQr(row: MesProBatchApi.Batch) {
    qrTraceQueryModalApi.setData({ code: row.code }).open();
    qrTraceQueryModalApi.setData({ code: getDisplayCode(row) }).open();
  }
  /** 打印整套二维码(批次图 + 全部托盘图 ZIP) */
  async function handlePrintQrSet(row: MesProBatchApi.Batch) {
    const data = await exportBatchQr(row.id!);
    downloadFileFromBlobPart({
      fileName: `批次二维码-${row.code}.zip`,
      fileName: `批次二维码-${getDisplayCode(row)}.zip`,
      source: data,
    });
  }
  /** 预生成批次二维码成功:展示生成的临时批次码 */
  function handlePreGenerateSuccess(result: { id: number; tempCode: string }[]) {
    Modal.success({
      title: "预生成临时批次码成功",
      content: result.map((item) => item.tempCode).join("\n"),
      centered: true,
    });
  }
  /** 新增批次 */
  function handleCreate() {
    formModalApi.setData({ formType: "create" }).open();
  }
  /** 临时批次补录正式信息 */
  function handleFillInfo(row: MesProBatchApi.Batch) {
    formModalApi.setData({ formType: "fill", id: row.id }).open();
  }
  /** 预生成批次二维码 */
  function handlePreGenerate() {
    preGenerateModalApi.open();
  }
  /** 查看详情 */
@@ -74,7 +104,7 @@
  /** 删除批次 */
  async function handleDelete(row: MesProBatchApi.Batch) {
    await deleteBatch(row.id!);
    message.success($t("ui.actionMessage.deleteSuccess", [row.code]));
    message.success($t("ui.actionMessage.deleteSuccess", [getDisplayCode(row)]));
    handleRefresh();
  }
@@ -129,10 +159,17 @@
<template>
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <PreGenerateModalApi @success="handlePreGenerateSuccess" />
    <QrTraceQueryModal />
    <Grid table-title="生产批次列表">
      <template #toolbar-tools>
        <TableAction :actions="[
            {
              label: '预生成二维码',
              icon: ACTION_ICON.ADD,
              auth: ['mes:pro-batch:create'],
              onClick: handlePreGenerate,
            },
            {
              label: $t('ui.actionTitle.create', ['批次']),
              type: 'primary',
@@ -157,8 +194,9 @@
      </template>
      <template #code="{ row }">
        <Button type="link" @click="handleDetail(row)">
          {{ row.code }}
          {{ getDisplayCode(row) }}
        </Button>
        <Tag v-if="!row.code" color="warning">待补录</Tag>
      </template>
      <template #actions="{ row }">
        <TableAction :actions="[
@@ -169,13 +207,22 @@
              onClick: handleViewQr.bind(null, row),
            },
            {
              label: '补录信息',
              type: 'link',
              icon: ACTION_ICON.EDIT,
              auth: ['mes:pro-batch:update'],
              ifShow: !row.code,
              onClick: handleFillInfo.bind(null, row),
            },
            {
              label: $t('common.edit'),
              type: 'link',
              icon: ACTION_ICON.EDIT,
              auth: ['mes:pro-batch:update'],
              ifShow:
                row.status === MesProBatchStatusEnum.DRAFT ||
                row.status === MesProBatchStatusEnum.PRODUCING,
                (row.status === MesProBatchStatusEnum.DRAFT ||
                  row.status === MesProBatchStatusEnum.PRODUCING) &&
                !!row.code,
              onClick: handleEdit.bind(null, row),
            },
            {
@@ -188,7 +235,7 @@
                row.status === MesProBatchStatusEnum.DRAFT ||
                row.status === MesProBatchStatusEnum.CANCELED,
              popConfirm: {
                title: $t('ui.actionMessage.deleteConfirm', [row.code]),
                title: $t('ui.actionMessage.deleteConfirm', [getDisplayCode(row)]),
                confirm: handleDelete.bind(null, row),
              },
            },
@@ -197,7 +244,7 @@
            {
              label: '开始生产',
              auth: ['mes:pro-batch:update'],
              ifShow: row.status === MesProBatchStatusEnum.DRAFT,
              ifShow: row.status === MesProBatchStatusEnum.DRAFT && !!row.code,
              popConfirm: {
                title: '确认开始生产该批次吗?',
                confirm: () =>