| | |
| | | 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 { |
| | |
| | | |
| | | 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, |
| | | }); |
| | | |
| | |
| | | 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(); |
| | | } |
| | | |
| | | /** 查看详情 */ |
| | |
| | | /** 删除批次 */ |
| | | 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(); |
| | | } |
| | | |
| | |
| | | <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', |
| | |
| | | </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="[ |
| | |
| | | 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), |
| | | }, |
| | | { |
| | |
| | | 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), |
| | | }, |
| | | }, |
| | |
| | | { |
| | | label: '开始生产', |
| | | auth: ['mes:pro-batch:update'], |
| | | ifShow: row.status === MesProBatchStatusEnum.DRAFT, |
| | | ifShow: row.status === MesProBatchStatusEnum.DRAFT && !!row.code, |
| | | popConfirm: { |
| | | title: '确认开始生产该批次吗?', |
| | | confirm: () => |