diff --git a/src/api/crm/statistics/customer.ts b/src/api/crm/statistics/customer.ts
new file mode 100644
index 00000000..4358db77
--- /dev/null
+++ b/src/api/crm/statistics/customer.ts
@@ -0,0 +1,116 @@
+import request from '@/config/axios'
+
+export interface CrmStatisticsCustomerSummaryByDateRespVO {
+ time: string
+ customerCreateCount: number
+ customerDealCount: number
+}
+
+export interface CrmStatisticsCustomerSummaryByUserRespVO {
+ ownerUserName: string
+ customerCreateCount: number
+ customerDealCount: number
+ contractPrice: number
+ receivablePrice: number
+}
+
+export interface CrmStatisticsFollowupSummaryByDateRespVO {
+ time: string
+ followupRecordCount: number
+ followupCustomerCount: number
+}
+
+export interface CrmStatisticsFollowupSummaryByUserRespVO {
+ ownerUserName: string
+ followupRecordCount: number
+ followupCustomerCount: number
+}
+
+export interface CrmStatisticsFollowupSummaryByTypeRespVO {
+ followupType: string
+ followupRecordCount: number
+}
+
+export interface CrmStatisticsCustomerContractSummaryRespVO {
+ customerName: string
+ contractName: string
+ totalPrice: number
+ receivablePrice: number
+ customerType: string
+ customerSource: string
+ ownerUserName: string
+ creatorUserName: string
+ createTime: Date
+ orderDate: Date
+}
+
+export interface CrmStatisticsCustomerDealCycleByDateRespVO {
+ time: string
+ customerDealCycle: number
+}
+
+export interface CrmStatisticsCustomerDealCycleByUserRespVO {
+ ownerUserName: string
+ customerDealCycle: number
+ customerDealCount: number
+}
+
+// 客户分析 API
+export const StatisticsCustomerApi = {
+ // 1.1 客户总量分析(按日期)
+ getCustomerSummaryByDate: (params: any) => {
+ return request.get({
+ url: '/crm/statistics-customer/get-customer-summary-by-date',
+ params
+ })
+ },
+ // 1.2 客户总量分析(按用户)
+ getCustomerSummaryByUser: (params: any) => {
+ return request.get({
+ url: '/crm/statistics-customer/get-customer-summary-by-user',
+ params
+ })
+ },
+ // 2.1 客户跟进次数分析(按日期)
+ getFollowupSummaryByDate: (params: any) => {
+ return request.get({
+ url: '/crm/statistics-customer/get-followup-summary-by-date',
+ params
+ })
+ },
+ // 2.2 客户跟进次数分析(按用户)
+ getFollowupSummaryByUser: (params: any) => {
+ return request.get({
+ url: '/crm/statistics-customer/get-followup-summary-by-user',
+ params
+ })
+ },
+ // 3.1 获取客户跟进方式统计数
+ getFollowupSummaryByType: (params: any) => {
+ return request.get({
+ url: '/crm/statistics-customer/get-followup-summary-by-type',
+ params
+ })
+ },
+ // 4.1 合同摘要信息(客户转化率页面)
+ getContractSummary: (params: any) => {
+ return request.get({
+ url: '/crm/statistics-customer/get-contract-summary',
+ params
+ })
+ },
+ // 5.1 获取客户成交周期(按日期)
+ getCustomerDealCycleByDate: (params: any) => {
+ return request.get({
+ url: '/crm/statistics-customer/get-customer-deal-cycle-by-date',
+ params
+ })
+ },
+ // 5.2 获取客户成交周期(按用户)
+ getCustomerDealCycleByUser: (params: any) => {
+ return request.get({
+ url: '/crm/statistics-customer/get-customer-deal-cycle-by-user',
+ params
+ })
+ }
+}
diff --git a/src/views/crm/statistics/customer/components/CustomerConversionStat.vue b/src/views/crm/statistics/customer/components/CustomerConversionStat.vue
new file mode 100644
index 00000000..fbef26b8
--- /dev/null
+++ b/src/views/crm/statistics/customer/components/CustomerConversionStat.vue
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/crm/statistics/customer/components/CustomerDealCycle.vue b/src/views/crm/statistics/customer/components/CustomerDealCycle.vue
new file mode 100644
index 00000000..9243e6a3
--- /dev/null
+++ b/src/views/crm/statistics/customer/components/CustomerDealCycle.vue
@@ -0,0 +1,127 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/crm/statistics/customer/components/CustomerFollowupSummary.vue b/src/views/crm/statistics/customer/components/CustomerFollowupSummary.vue
new file mode 100644
index 00000000..cfb025f5
--- /dev/null
+++ b/src/views/crm/statistics/customer/components/CustomerFollowupSummary.vue
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/crm/statistics/customer/components/CustomerFollowupType.vue b/src/views/crm/statistics/customer/components/CustomerFollowupType.vue
new file mode 100644
index 00000000..87510054
--- /dev/null
+++ b/src/views/crm/statistics/customer/components/CustomerFollowupType.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/crm/statistics/customer/components/CustomerSummary.vue b/src/views/crm/statistics/customer/components/CustomerSummary.vue
new file mode 100644
index 00000000..da50b30b
--- /dev/null
+++ b/src/views/crm/statistics/customer/components/CustomerSummary.vue
@@ -0,0 +1,150 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ scope.row.customerCreateCount !== 0
+ ? round((scope.row.customerDealCount / scope.row.customerCreateCount) * 100, 2)
+ : 0
+ }}
+
+
+
+
+
+
+ {{ round(scope.row.contractPrice - scope.row.receivablePrice, 2) }}
+
+
+
+
+ {{
+ scope.row.contractPrice !== 0
+ ? round((scope.row.receivablePrice / scope.row.contractPrice) * 100, 2)
+ : 0
+ }}
+
+
+
+
+
+
diff --git a/src/views/crm/statistics/customer/index.vue b/src/views/crm/statistics/customer/index.vue
new file mode 100644
index 00000000..8096814f
--- /dev/null
+++ b/src/views/crm/statistics/customer/index.vue
@@ -0,0 +1,165 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+