7 小时以前 08bb5d242135e2c1f0fc17d2b5f7ae548275a3a2
src/views/mes/pro/pallet/modules/generate-form.vue
@@ -1,69 +1,16 @@
<script lang="ts" setup>
  import type { VbenFormSchema } from "#/adapter/form";
  import type { MesProPalletApi } from "#/api/mes/pro/pallet";
  import { useVbenModal } from "@vben/common-ui";
  import { MesProBatchStatusEnum } from "@vben/constants";
  import { message } from "ant-design-vue";
  import { useVbenForm } from "#/adapter/form";
  import { getBatchSimpleList } from "#/api/mes/pro/batch";
  import { batchCreatePallet } from "#/api/mes/pro/pallet";
  import { preGeneratePallet } from "#/api/mes/pro/pallet";
  defineOptions({ name: "MesProPalletGenerateForm" });
  const emit = defineEmits(["success"]);
  /** 构建表单(批次下拉选项由外部加载注入) */
  function buildSchema(batchOptions: { label: string; value: number }[]): VbenFormSchema[] {
    return [
      {
        fieldName: "batchId",
        label: "生产批次",
        component: "Select",
        componentProps: {
          options: batchOptions,
          optionFilterProp: "label",
          placeholder: "请选择生产中的批次",
          showSearch: true,
        },
        rules: "selectRequired",
      },
      {
        fieldName: "count",
        label: "生成数量",
        component: "InputNumber",
        componentProps: {
          class: "!w-full",
          min: 1,
          placeholder: "请输入需要生成的托盘数量",
          precision: 0,
        },
        rules: "required",
      },
      {
        fieldName: "capacity",
        label: "可装袋数",
        component: "InputNumber",
        componentProps: {
          class: "!w-full",
          min: 1,
          placeholder: "请输入每托盘可装袋数(袋/托盘)",
          precision: 0,
        },
      },
      {
        fieldName: "remark",
        label: "备注",
        component: "Textarea",
        componentProps: {
          placeholder: "请输入备注",
          rows: 2,
        },
      },
    ];
  }
  const [Form, formApi] = useVbenForm({
    commonConfig: {
@@ -83,40 +30,62 @@
      if (!valid) return;
      modalApi.lock();
      try {
        const values =
          (await formApi.getValues()) as MesProPalletApi.BatchCreateParams;
        const ids = await batchCreatePallet(values);
        message.success(`已成功生成 ${ids.length} 个托盘码`);
        emit("success");
        const values = await formApi.getValues();
        const result = await preGeneratePallet({
          count: values.count,
          capacity: values.capacity,
          remark: values.remark,
        });
        message.success(`已生成 ${result.length} 个临时托盘码`);
        emit("success", result);
        await modalApi.close();
      } finally {
        modalApi.unlock();
      }
    },
    async onOpenChange(isOpen: boolean) {
    onOpenChange(isOpen: boolean) {
      if (!isOpen) return;
      modalApi.lock();
      try {
        // 仅生产中的批次允许生成托盘码
        const batches = await getBatchSimpleList();
        const options = batches
          .filter(
            (batch) => batch.status === MesProBatchStatusEnum.PRODUCING
          )
          .map((batch) => ({
            label: batch.code!,
            value: batch.id!,
          }));
        await formApi.setState({ schema: buildSchema(options) });
      } finally {
        modalApi.unlock();
      }
      const schema: VbenFormSchema[] = [
        {
          fieldName: "count",
          label: "生成数量",
          component: "InputNumber",
          componentProps: {
            class: "!w-full",
            min: 1,
            placeholder: "请输入需要生成的托盘数量",
            precision: 0,
          },
          rules: "required",
        },
        {
          fieldName: "capacity",
          label: "可装袋数",
          component: "InputNumber",
          componentProps: {
            class: "!w-full",
            min: 1,
            placeholder: "请输入每托盘可装袋数(袋/托盘)",
            precision: 0,
          },
        },
        {
          fieldName: "remark",
          label: "备注",
          component: "Textarea",
          componentProps: {
            placeholder: "请输入备注",
            rows: 2,
          },
        },
      ];
      formApi.setState({ schema });
    },
  });
</script>
<template>
  <Modal title="批量生成托盘码" class="w-2/5">
  <Modal title="预生成托盘二维码" class="w-2/5">
    <Form class="mx-4" />
  </Modal>
</template>
</template>