gaoluyang
15 小时以前 cb9cd49627b65a4c0e137e08063271a8cefe1826
src/views/wls/itemreceipt/modules/form.vue
@@ -5,8 +5,8 @@
import { computed, ref } from 'vue';
import { confirm, useVbenModal } from '../../../../packages/effects/common-ui/src';
import { MesWmItemReceiptStatusEnum } from '../../../../packages/constants/src';
import { confirm, useVbenModal } from '@vben/common-ui';
import { MesWmItemReceiptStatusEnum } from '@vben/constants';
import { Button, Divider, message, Popconfirm } from 'ant-design-vue';
@@ -27,16 +27,14 @@
const emit = defineEmits(['success']);
const formType = ref<FormType>('create');
const formData = ref<MesWmItemReceiptApi.ItemReceipt>();
const originalSnapshot = ref(''); // 表单原始数据快照,用于提交时跳过未变更的保存请求
const originalSnapshot = ref('');
const isEditable = computed(() =>
  // 是否为编辑模式(可保存)
  ['create', 'update'].includes(formType.value),
);
const isStock = computed(() => formType.value === 'stock'); // 是否为上架模式
const isFinish = computed(() => formType.value === 'finish'); // 是否为执行入库模式
const isStock = computed(() => formType.value === 'stock');
const isFinish = computed(() => formType.value === 'finish');
const canSubmit = computed(
  () =>
    // 是否可提交
    formType.value === 'update' &&
    formData.value?.status === MesWmItemReceiptStatusEnum.PREPARE,
);
@@ -69,7 +67,7 @@
  wrapperClass: 'grid-cols-3',
});
/** 提交入库单:表单有修改时先保存,再调用提交接口 */
/** 提交入库单 */
async function handleSubmit() {
  const { valid } = await formApi.validate();
  if (!valid || !formData.value?.id) {
@@ -95,9 +93,7 @@
/** 执行上架 */
async function handleStock() {
  if (!formData.value?.id) {
    return;
  }
  if (!formData.value?.id) return;
  modalApi.lock();
  try {
    await stockItemReceipt(formData.value.id);
@@ -111,9 +107,7 @@
/** 执行入库 */
async function handleFinish() {
  if (!formData.value?.id) {
    return;
  }
  if (!formData.value?.id) return;
  modalApi.lock();
  try {
    await finishItemReceipt(formData.value.id);
@@ -132,27 +126,28 @@
      return;
    }
    const { valid } = await formApi.validate();
    if (!valid) {
      return;
    }
    if (!valid) return;
    modalApi.lock();
    // 提交表单
    const data = (await formApi.getValues()) as MesWmItemReceiptApi.ItemReceipt;
    try {
      if (formData.value?.id) {
        await updateItemReceipt({ ...formData.value, ...data });
        formData.value = { ...formData.value, ...data };
      } else {
        const id = await createItemReceipt(data);
        formData.value = {
          ...data,
          id,
          status: MesWmItemReceiptStatusEnum.PREPARE,
        };
        await formApi.setFieldValue('id', id);
        await formApi.setFieldValue('status', formData.value.status);
        formType.value = 'update';
        emit('success');
        message.success($t('ui.actionMessage.operationSuccess'));
        await modalApi.close();
        return;
      }
      // 新增:保持弹窗打开,切换到编辑模式
      const id = await createItemReceipt(data);
      formData.value = {
        ...data,
        id,
        status: MesWmItemReceiptStatusEnum.PREPARE,
      };
      await formApi.setFieldValue('id', id);
      await formApi.setFieldValue('status', formData.value.status);
      formType.value = 'update';
      originalSnapshot.value = JSON.stringify(await formApi.getValues());
      emit('success');
      message.success($t('ui.actionMessage.operationSuccess'));
@@ -166,7 +161,6 @@
      originalSnapshot.value = '';
      return;
    }
    // 加载数据
    const data = modalApi.getData<{ formType: FormType; id?: number }>();
    formType.value = data.formType;
    formApi.setState({ schema: useFormSchema(formType.value, formApi) });
@@ -176,7 +170,6 @@
      modalApi.lock();
      try {
        formData.value = await getItemReceipt(data.id);
        // 设置到 values
        await formApi.setValues(formData.value);
      } finally {
        modalApi.unlock();
@@ -210,7 +203,6 @@
<template>
  <Modal :title="getTitle" class="w-3/5">
    <Form class="mx-4" />
    <!-- 非新建模式展示物料信息 -->
    <template v-if="formData?.id">
      <Divider>物料信息</Divider>
      <div class="mx-4">