zhangwencui
16 小时以前 19550aed9e2babd1a719aaa45904fad96d0fcfc1
生产订单两个确认按钮问题
已修改1个文件
133 ■■■■ 文件已修改
src/views/mes/pro/workorder/modules/form.vue 133 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/pro/workorder/modules/form.vue
@@ -6,13 +6,13 @@
  import { computed, ref } from "vue";
  import { useVbenModal } from "@vben/common-ui";
  import { confirm, useVbenModal } from "@vben/common-ui";
  import {
    BarcodeBizTypeEnum,
    MesProWorkOrderStatusEnum,
  } from "@vben/constants";
  import { Button, message, Popconfirm, Tabs } from "ant-design-vue";
  import { Button, message, Tabs } from "ant-design-vue";
  import { useVbenForm } from "#/adapter/form";
  import {
@@ -83,10 +83,18 @@
    wrapperClass: "grid-cols-3",
  });
  /** 重新挂载 schema 并按表单态控制底部确认按钮 */
  /** 重新挂载 schema 并按表单态控制底部按钮 */
  function applySchema() {
    formApi.setState({ schema: useFormSchema(formType.value, formApi) });
    modalApi.setState({ showConfirmButton: isEditable.value });
    const showBtn = isEditable.value || isConfirm.value || isFinish.value;
    modalApi.setState({
      showConfirmButton: showBtn,
      confirmText: isConfirm.value || canConfirm.value
        ? '确认'
        : isFinish.value
          ? '完成'
          : undefined,
    });
  }
  /** 查看订单条码 */
@@ -100,48 +108,6 @@
      formData.value.code,
      formData.value.name
    );
  }
  /** 确认订单:编辑态有修改时先保存,再确认 */
  async function handleConfirm() {
    const { valid } = await formApi.validate();
    if (!valid || !formData.value?.id) {
      return;
    }
    modalApi.lock();
    try {
      if (isEditable.value) {
        const current = JSON.stringify(await formApi.getValues());
        if (current !== originalSnapshot.value) {
          const data =
            (await formApi.getValues()) as MesProWorkOrderApi.WorkOrder;
          await updateWorkOrder({ ...formData.value, ...data });
          originalSnapshot.value = current;
        }
      }
      await confirmWorkOrder(formData.value.id);
      message.success("订单已确认");
      await modalApi.close();
      emit("success");
    } finally {
      modalApi.unlock();
    }
  }
  /** 完成订单 */
  async function handleFinish() {
    if (!formData.value?.id) {
      return;
    }
    modalApi.lock();
    try {
      await finishWorkOrder(formData.value.id);
      message.success("订单已完成");
      await modalApi.close();
      emit("success");
    } finally {
      modalApi.unlock();
    }
  }
  /** 从 BOM 物料行预填子订单:复用当前订单上下文,进入新增态 */
@@ -177,16 +143,62 @@
  const [Modal, modalApi] = useVbenModal({
    async onConfirm() {
      // ---- 确认订单模式 ----
      if (isConfirm.value || canConfirm.value) {
        const { valid } = await formApi.validate();
        if (!valid || !formData.value?.id) return;
        try {
          await confirm('确认要完成订单编制吗?确认后将不能更改。');
        } catch {
          return;
        }
        modalApi.lock();
        try {
          // 编辑态有修改时先保存
          if (isEditable.value) {
            const current = JSON.stringify(await formApi.getValues());
            if (current !== originalSnapshot.value) {
              const data = (await formApi.getValues()) as MesProWorkOrderApi.WorkOrder;
              await updateWorkOrder({ ...formData.value, ...data });
              originalSnapshot.value = current;
            }
          }
          await confirmWorkOrder(formData.value.id);
          message.success('订单已确认');
          await modalApi.close();
          emit('success');
        } finally {
          modalApi.unlock();
        }
        return;
      }
      // ---- 完成订单模式 ----
      if (isFinish.value) {
        if (!formData.value?.id) return;
        try {
          await confirm('确认要完成该订单吗?');
        } catch {
          return;
        }
        modalApi.lock();
        try {
          await finishWorkOrder(formData.value.id);
          message.success('订单已完成');
          await modalApi.close();
          emit('success');
        } finally {
          modalApi.unlock();
        }
        return;
      }
      // ---- 保存(新增 / 编辑)----
      if (!isEditable.value) {
        await modalApi.close();
        return;
      }
      const { valid } = await formApi.validate();
      if (!valid) {
        return;
      }
      if (!valid) return;
      modalApi.lock();
      // 提交表单
      const data = (await formApi.getValues()) as MesProWorkOrderApi.WorkOrder;
      try {
        if (formData.value?.id) {
@@ -200,7 +212,6 @@
            status: MesProWorkOrderStatusEnum.PREPARE,
          };
          formType.value = "update";
          // 创建成功后切换编辑态,重挂 schema 让「订单状态」字段显现
          applySchema();
          await formApi.setValues(formData.value);
        }
@@ -275,22 +286,10 @@
      </Tabs>
    </template>
    <template #prepend-footer>
      <div class="flex flex-auto items-center gap-2">
        <Popconfirm v-if="canConfirm || isConfirm"
                    title="确认要完成订单编制吗?确认后将不能更改。"
                    @confirm="handleConfirm">
          <Button type="primary">确认</Button>
        </Popconfirm>
        <Popconfirm v-if="isFinish"
                    title="确认要完成该订单吗?"
                    @confirm="handleFinish">
          <Button type="primary">完成</Button>
        </Popconfirm>
        <Button v-if="formType === 'detail' && formData?.id"
                @click="handleBarcode">
          查看条码
        </Button>
      </div>
      <Button v-if="formType === 'detail' && formData?.id"
              @click="handleBarcode">
        查看条码
      </Button>
    </template>
  </Modal>
  <BarcodeDetail ref="barcodeDetailRef" />