5 天以前 91c82965b2d987452ca276e3a03b48c8dcda2ae9
src/views/erp/finance/payment/modules/form.vue
@@ -5,8 +5,8 @@
import { computed, ref } from 'vue';
import { useVbenModal } from '../../../../../packages/effects/common-ui/src';
import { $t } from '../../../../../packages/locales/src';
import { useVbenModal } from '@vben/common-ui';
import { $t } from '@vben/locales';
import { message } from 'ant-design-vue';
@@ -17,15 +17,14 @@
  getFinancePayment,
  updateFinancePayment,
} from '#/api/erp/finance/payment';
import { getPurchaseInvoiceSimpleList } from '#/api/erp/purchase/invoice';
import { useFormSchema } from '../data';
import ItemForm from './item-form.vue';
const emit = defineEmits(['success']);
const formData = ref<
  ErpFinancePaymentApi.FinancePayment & {
    fileUrl?: string;
  }
  ErpFinancePaymentApi.FinancePayment
>({
  id: undefined,
  no: '',
@@ -34,7 +33,6 @@
  financeUserId: undefined,
  paymentTime: undefined,
  remark: '',
  fileUrl: undefined,
  totalPrice: 0,
  discountPrice: 0,
  paymentPrice: 0,
@@ -71,6 +69,11 @@
      if (changedFields.includes('supplierId')) {
        formData.value.supplierId = values.supplierId;
      }
      // 关联来票变化时,加载来票信息供明细自动生成
      if (changedFields.includes('invoiceId')) {
        formData.value.invoiceId = values.invoiceId;
        handleInvoiceChange(values.invoiceId);
      }
      // 目的:同步到 item-form 组件,触发整体的价格计算
      if (changedFields.includes('discountPrice')) {
        formData.value.discountPrice = values.discountPrice;
@@ -83,6 +86,27 @@
    }
  },
});
/** 关联来票变化时,加载来票信息,供付款明细自动生成 */
async function handleInvoiceChange(invoiceId: number | undefined) {
  if (formType.value === 'detail' || !invoiceId) {
    if (!invoiceId) {
      formData.value.invoice = undefined;
    }
    return;
  }
  const supplierId = formData.value.supplierId;
  if (!supplierId) {
    return;
  }
  const invoices = await getPurchaseInvoiceSimpleList(supplierId);
  // 请求期间来票已再次切换时,丢弃过期结果,避免回显错乱
  if (formData.value.invoiceId !== invoiceId) {
    return;
  }
  const invoice = invoices.find((item) => item.id === invoiceId);
  formData.value.invoice = invoice;
}
/** 更新付款项 */
function handleUpdateItems(items: ErpFinancePaymentApi.FinancePaymentItem[]) {
@@ -165,6 +189,20 @@
      formData.value = await getFinancePayment(data.id);
      // 设置到 values
      await formApi.setValues(formData.value, false);
      // 详情模式下,关联来票字段用 Input 展示来票编号
      if (formType.value === 'detail' && formData.value?.invoice) {
        await formApi.setFieldValue('invoiceId', formData.value.invoice.no);
      }
      if (formData.value?.attachmentList?.length) {
        const blobIds = formData.value.attachmentList.map((item) => ({
          uid: String(item.id),
          name: item.name || '',
          url: item.url || '',
          status: 'done',
          id: item.id,
        }));
        await formApi.setFieldValue('blobIds', blobIds);
      }
    } finally {
      modalApi.unlock();
    }
@@ -187,6 +225,7 @@
          :supplier-id="formData?.supplierId"
          :disabled="formType === 'detail'"
          :discount-price="formData?.discountPrice ?? 0"
          :invoice="formData?.invoice"
          @update:items="handleUpdateItems"
          @update:total-price="handleUpdateTotalPrice"
          @update:payment-price="handleUpdatePaymentPrice"