gaoluyang
2026-08-10 3e2716a38896c86f85c7d3a125fa38488b1d2fea
src/views/crm/receivable/data.ts
@@ -6,6 +6,7 @@
import { useUserStore } from '@vben/stores';
import { getContractSimpleList } from '#/api/crm/contract';
import { getInvoiceSimpleList } from '#/api/crm/invoice';
import {
  getReceivablePlan,
  getReceivablePlanSimpleList,
@@ -63,6 +64,7 @@
        placeholder: '请选择客户',
        onChange: () => {
          form.setFieldValue('contractId', undefined);
          form.setFieldValue('invoiceId', undefined);
          form.setFieldValue('planId', undefined);
          form.setFieldValue('price', undefined);
          form.setFieldValue('returnTime', undefined);
@@ -97,6 +99,7 @@
            })),
            placeholder: '请选择合同',
            onChange: (value: number) => {
              form.setFieldValue('invoiceId', undefined);
              form.setFieldValue('planId', undefined);
              form.setFieldValue('returnTime', undefined);
              form.setFieldValue('returnType', undefined);
@@ -113,10 +116,53 @@
      },
    },
    {
      fieldName: 'invoiceId',
      label: '关联开票',
      component: 'Select',
      rules: 'required',
      dependencies: {
        triggerFields: ['contractId', 'invoiceId'],
        disabled: (values) => !values.contractId || !!values.id,
        async componentProps(values, form) {
          if (!values.contractId) {
            return {
              options: [],
              placeholder: '请先选择合同',
            };
          }
          const invoices = await getInvoiceSimpleList(values.contractId);
          return {
            options: invoices.map((item) => {
              const remain = item.remainingInvoicePrice ?? item.price ?? 0;
              return {
                label: `${item.no} / ${item.invoiceNo ?? '-'} / ¥${item.price ?? 0} / 剩余可回款 ¥${remain.toFixed(2)}`,
                value: item.id,
              };
            }),
            placeholder: '请选择关联开票',
            onChange: (value: number) => {
              form.setFieldValue('planId', undefined);
              form.setFieldValue('returnTime', undefined);
              form.setFieldValue('returnType', undefined);
              const invoice = invoices.find((item) => item.id === value);
              if (invoice) {
                form.setFieldValue(
                  'price',
                  invoice.remainingInvoicePrice ?? invoice.price ?? undefined,
                );
                form.setFieldValue('customerId', invoice.customerId);
              }
            },
          } as any;
        },
      },
    },
    {
      fieldName: 'planId',
      label: '回款期数',
      component: 'Select',
      rules: 'required',
      help: '此参数可在回款计划配置',
      dependencies: {
        triggerFields: ['contractId'],
        disabled: (values) => !values.contractId || values.id,
@@ -183,7 +229,7 @@
      componentProps: {
        placeholder: '请选择回款日期',
        showTime: false,
        valueFormat: 'x',
        valueFormat: 'YYYY-MM-DD',
        format: 'YYYY-MM-DD',
      },
    },
@@ -246,6 +292,12 @@
      slots: { default: 'contractNo' },
    },
    {
      title: '关联开票',
      field: 'invoice',
      minWidth: 200,
      slots: { default: 'invoiceNo' },
    },
    {
      title: '回款日期',
      field: 'returnTime',
      minWidth: 150,