liu
6 天以前 5c124cdf26e4d749eae1e7fc9df366e9a5f4d259
src/views/crm/receivable/data.ts
@@ -1,17 +1,20 @@
import type { VbenFormSchema } from '#/adapter/form';
import type { VxeTableGridOptions } from '#/adapter/vxe-table';
import { DICT_TYPE } from '../../../packages/constants/src';
import { getDictOptions } from '../../../packages/effects/hooks/src';
import { useUserStore } from '../../../packages/stores/src';
import { DICT_TYPE } from '@vben/constants';
import { getDictOptions } from '@vben/hooks';
import { useUserStore } from '@vben/stores';
import { getContractSimpleList } from '#/api/crm/contract';
import { getCustomerSimpleList } from '#/api/crm/customer';
import { getInvoiceSimpleList } from '#/api/crm/invoice';
import {
  getReceivablePlan,
  getReceivablePlanSimpleList,
} from '#/api/crm/receivable/plan';
import { getSimpleUserList } from '#/api/system/user';
import CrmCustomerSelect from '#/components/crm-customer-select.vue';
import { markRaw } from 'vue';
/** 新增/修改的表单 */
export function useFormSchema(): VbenFormSchema[] {
@@ -55,15 +58,13 @@
    {
      fieldName: 'customerId',
      label: '客户名称',
      component: 'ApiSelect',
      component: markRaw(CrmCustomerSelect),
      rules: 'required',
      componentProps: (_values, form) => ({
        api: getCustomerSimpleList,
        labelField: 'name',
        valueField: 'id',
        placeholder: '请选择客户',
        onChange: () => {
          form.setFieldValue('contractId', undefined);
          form.setFieldValue('invoiceId', undefined);
          form.setFieldValue('planId', undefined);
          form.setFieldValue('price', undefined);
          form.setFieldValue('returnTime', undefined);
@@ -98,6 +99,7 @@
            })),
            placeholder: '请选择合同',
            onChange: (value: number) => {
              form.setFieldValue('invoiceId', undefined);
              form.setFieldValue('planId', undefined);
              form.setFieldValue('returnTime', undefined);
              form.setFieldValue('returnType', undefined);
@@ -114,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,
@@ -184,7 +229,7 @@
      componentProps: {
        placeholder: '请选择回款日期',
        showTime: false,
        valueFormat: 'x',
        valueFormat: 'YYYY-MM-DD',
        format: 'YYYY-MM-DD',
      },
    },
@@ -216,11 +261,8 @@
    {
      fieldName: 'customerId',
      label: '客户',
      component: 'ApiSelect',
      component: markRaw(CrmCustomerSelect),
      componentProps: {
        api: getCustomerSimpleList,
        labelField: 'name',
        valueField: 'id',
        placeholder: '请选择客户',
        allowClear: true,
      },
@@ -248,6 +290,12 @@
      field: 'contract',
      minWidth: 160,
      slots: { default: 'contractNo' },
    },
    {
      title: '关联开票',
      field: 'invoice',
      minWidth: 200,
      slots: { default: 'invoiceNo' },
    },
    {
      title: '回款日期',
@@ -307,16 +355,6 @@
      title: '创建人',
      field: 'creatorName',
      minWidth: 150,
    },
    {
      title: '回款状态',
      field: 'auditStatus',
      minWidth: 100,
      fixed: 'right',
      cellRender: {
        name: 'CellDict',
        props: { type: DICT_TYPE.CRM_AUDIT_STATUS },
      },
    },
    {
      title: '操作',