diff --git a/apps/web-antd/src/views/crm/business/modules/detail.vue b/apps/web-antd/src/views/crm/business/modules/detail.vue
index e3f66cea1..d7289dcd9 100644
--- a/apps/web-antd/src/views/crm/business/modules/detail.vue
+++ b/apps/web-antd/src/views/crm/business/modules/detail.vue
@@ -25,6 +25,10 @@ const ContactDetailsList = defineAsyncComponent(
() => import('#/views/crm/contact/modules/detail-list.vue'),
);
+const ContractDetailsList = defineAsyncComponent(
+ () => import('#/views/crm/contract/modules/detail-list.vue'),
+);
+
const FollowUp = defineAsyncComponent(
() => import('#/views/crm/followup/index.vue'),
);
@@ -177,7 +181,10 @@ onMounted(async () => {
产品
- 合同
+
erpPriceInputFormatter(data?.totalPrice) as string,
+ },
+ {
+ field: 'orderDate',
+ label: '下单时间',
+ content: (data) => formatDateTime(data?.orderDate) as string,
+ },
+ {
+ field: 'totalReceivablePrice',
+ label: '回款金额(元)',
+ content: (data) =>
+ erpPriceInputFormatter(data?.totalReceivablePrice) as string,
+ },
+ {
+ field: 'ownerUserName',
+ label: '负责人',
+ },
+ ];
+}
+
+/** 详情基本信息的配置 */
+export function useDetailBaseSchema(): DescriptionItemSchema[] {
+ return [
+ {
+ field: 'no',
+ label: '合同编号',
+ },
+ {
+ field: 'name',
+ label: '合同名称',
+ },
+ {
+ field: 'customerName',
+ label: '客户名称',
+ },
+ {
+ field: 'businessName',
+ label: '商机名称',
+ },
+ {
+ field: 'totalPrice',
+ label: '合同金额(元)',
+ content: (data) => erpPriceInputFormatter(data?.totalPrice) as string,
+ },
+ {
+ field: 'orderDate',
+ label: '下单时间',
+ content: (data) => formatDateTime(data?.orderDate) as string,
+ },
+ {
+ field: 'startTime',
+ label: '合同开始时间',
+ content: (data) => formatDateTime(data?.startTime) as string,
+ },
+ {
+ field: 'endTime',
+ label: '合同结束时间',
+ content: (data) => formatDateTime(data?.endTime) as string,
+ },
+ {
+ field: 'signContactName',
+ label: '客户签约人',
+ },
+ {
+ field: 'signUserName',
+ label: '公司签约人',
+ },
+ {
+ field: 'remark',
+ label: '备注',
+ },
+ {
+ field: 'auditStatus',
+ label: '合同状态',
+ content: (data) =>
+ h(DictTag, {
+ type: DICT_TYPE.CRM_AUDIT_STATUS,
+ value: data?.auditStatus,
+ }),
+ },
+ ];
+}
+
+export function useDetailListColumns(): VxeTableGridOptions['columns'] {
+ return [
+ {
+ title: '合同编号',
+ field: 'no',
+ minWidth: 150,
+ fixed: 'left',
+ },
+ {
+ title: '合同名称',
+ field: 'name',
+ minWidth: 150,
+ fixed: 'left',
+ slots: { default: 'name' },
+ },
+ {
+ title: '合同金额(元)',
+ field: 'totalPrice',
+ minWidth: 150,
+ formatter: 'formatNumber',
+ },
+ {
+ title: '合同开始时间',
+ field: 'startTime',
+ minWidth: 150,
+ formatter: 'formatDateTime',
+ },
+ {
+ title: '合同结束时间',
+ field: 'endTime',
+ minWidth: 150,
+ formatter: 'formatDateTime',
+ },
+ {
+ title: '已回款金额(元)',
+ field: 'totalReceivablePrice',
+ minWidth: 150,
+ formatter: 'formatNumber',
+ },
+ {
+ title: '未回款金额(元)',
+ field: 'unpaidPrice',
+ minWidth: 150,
+ formatter: ({ row }) => {
+ return floatToFixed2(row.totalPrice - row.totalReceivablePrice);
+ },
+ },
+ {
+ title: '负责人',
+ field: 'ownerUserName',
+ minWidth: 150,
+ },
+ {
+ title: '所属部门',
+ field: 'ownerUserDeptName',
+ minWidth: 150,
+ },
+ {
+ title: '创建时间',
+ field: 'createTime',
+ minWidth: 150,
+ formatter: 'formatDateTime',
+ },
+ {
+ title: '创建人',
+ field: 'creatorName',
+ minWidth: 150,
+ },
+ {
+ title: '备注',
+ field: 'remark',
+ minWidth: 150,
+ },
+ {
+ title: '合同状态',
+ field: 'auditStatus',
+ fixed: 'right',
+ minWidth: 100,
+ cellRender: {
+ name: 'CellDict',
+ props: { type: DICT_TYPE.CRM_AUDIT_STATUS },
+ },
+ },
+ ];
+}
diff --git a/apps/web-antd/src/views/crm/contract/modules/detail-info.vue b/apps/web-antd/src/views/crm/contract/modules/detail-info.vue
index f952e7f2f..da17394b4 100644
--- a/apps/web-antd/src/views/crm/contract/modules/detail-info.vue
+++ b/apps/web-antd/src/views/crm/contract/modules/detail-info.vue
@@ -1,4 +1,44 @@
-
+
+
- contractInfo
+
diff --git a/apps/web-antd/src/views/crm/contract/modules/detail-list.vue b/apps/web-antd/src/views/crm/contract/modules/detail-list.vue
index 3114fe4bc..ee8637eb5 100644
--- a/apps/web-antd/src/views/crm/contract/modules/detail-list.vue
+++ b/apps/web-antd/src/views/crm/contract/modules/detail-list.vue
@@ -1,4 +1,123 @@
-
+
+
- contractList
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/web-antd/src/views/crm/contract/modules/detail.vue b/apps/web-antd/src/views/crm/contract/modules/detail.vue
index 99ad6b6f9..72335ca22 100644
--- a/apps/web-antd/src/views/crm/contract/modules/detail.vue
+++ b/apps/web-antd/src/views/crm/contract/modules/detail.vue
@@ -1,7 +1,167 @@
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/web-antd/src/views/crm/customer/modules/detail.vue b/apps/web-antd/src/views/crm/customer/modules/detail.vue
index 6537f2447..9a945705b 100644
--- a/apps/web-antd/src/views/crm/customer/modules/detail.vue
+++ b/apps/web-antd/src/views/crm/customer/modules/detail.vue
@@ -25,6 +25,10 @@ const ContactDetailsList = defineAsyncComponent(
() => import('#/views/crm/contact/modules/detail-list.vue'),
);
+const ContractDetailsList = defineAsyncComponent(
+ () => import('#/views/crm/contract/modules/detail-list.vue'),
+);
+
const CustomerForm = defineAsyncComponent(
() => import('#/views/crm/customer/modules/form.vue'),
);
@@ -255,7 +259,10 @@ onMounted(async () => {
/>
- 合同
+
回款