| | |
| | | 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[] { |
| | |
| | | { |
| | | 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); |
| | |
| | | })), |
| | | placeholder: '请选择合同', |
| | | onChange: (value: number) => { |
| | | form.setFieldValue('invoiceId', undefined); |
| | | form.setFieldValue('planId', undefined); |
| | | form.setFieldValue('returnTime', undefined); |
| | | form.setFieldValue('returnType', undefined); |
| | |
| | | }, |
| | | }, |
| | | { |
| | | 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, |
| | |
| | | componentProps: { |
| | | placeholder: '请选择回款日期', |
| | | showTime: false, |
| | | valueFormat: 'x', |
| | | valueFormat: 'YYYY-MM-DD', |
| | | format: 'YYYY-MM-DD', |
| | | }, |
| | | }, |
| | |
| | | { |
| | | fieldName: 'customerId', |
| | | label: '客户', |
| | | component: 'ApiSelect', |
| | | component: markRaw(CrmCustomerSelect), |
| | | componentProps: { |
| | | api: getCustomerSimpleList, |
| | | labelField: 'name', |
| | | valueField: 'id', |
| | | placeholder: '请选择客户', |
| | | allowClear: true, |
| | | }, |
| | |
| | | field: 'contract', |
| | | minWidth: 160, |
| | | slots: { default: 'contractNo' }, |
| | | }, |
| | | { |
| | | title: '关联开票', |
| | | field: 'invoice', |
| | | minWidth: 200, |
| | | slots: { default: 'invoiceNo' }, |
| | | }, |
| | | { |
| | | title: '回款日期', |
| | |
| | | title: '创建人', |
| | | field: 'creatorName', |
| | | minWidth: 150, |
| | | }, |
| | | { |
| | | title: '回款状态', |
| | | field: 'auditStatus', |
| | | minWidth: 100, |
| | | fixed: 'right', |
| | | cellRender: { |
| | | name: 'CellDict', |
| | | props: { type: DICT_TYPE.CRM_AUDIT_STATUS }, |
| | | }, |
| | | }, |
| | | { |
| | | title: '操作', |