diff --git a/src/api/crm/statistics/funnel.ts b/src/api/crm/statistics/funnel.ts
index 0ba322b8..574a5f4f 100644
--- a/src/api/crm/statistics/funnel.ts
+++ b/src/api/crm/statistics/funnel.ts
@@ -3,13 +3,19 @@ import request from '@/config/axios'
export interface CrmStatisticFunnelRespVO {
customerCount: number // 客户数
businessCount: number // 商机数
- winCount: number // 赢单数
+ businessWinCount: number // 赢单数
}
export interface CrmStatisticsBusinessSummaryByDateRespVO {
time: string // 时间
businessCreateCount: number // 商机数
- businessDealCount: number // 商机金额
+ totalPrice: number | string // 商机金额
+}
+
+export interface CrmStatisticsBusinessInversionRateSummaryByDateRespVO {
+ time: string // 时间
+ businessCount: number // 商机数量
+ businessWinCount: number // 赢单商机数
}
// 客户分析 API
@@ -22,9 +28,9 @@ export const StatisticFunnelApi = {
})
},
// 2. 获取商机结束状态统计
- getBusinessEndStatusSummary: (params: any) => {
+ getBusinessSummaryByEndStatus: (params: any) => {
return request.get({
- url: '/crm/statistics-funnel/get-business-end-status-summary',
+ url: '/crm/statistics-funnel/get-business-summary-by-end-status',
params
})
},
@@ -35,7 +41,14 @@ export const StatisticFunnelApi = {
params
})
},
- // 4. 获取商机列表(按日期)
+ // 4. 获取商机转化率分析(按日期)
+ getBusinessInversionRateSummaryByDate: (params: any) => {
+ return request.get({
+ url: '/crm/statistics-funnel/get-business-inversion-rate-summary-by-date',
+ params
+ })
+ },
+ // 5. 获取商机列表(按日期)
getBusinessPageByDate: (params: any) => {
return request.get({
url: '/crm/statistics-funnel/get-business-page-by-date',
diff --git a/src/views/crm/statistics/funnel/components/BusinessInversionRateSummary.vue b/src/views/crm/statistics/funnel/components/BusinessInversionRateSummary.vue
new file mode 100644
index 00000000..541d6fc4
--- /dev/null
+++ b/src/views/crm/statistics/funnel/components/BusinessInversionRateSummary.vue
@@ -0,0 +1,307 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.name }}
+
+
+
+
+
+
+ {{ scope.row.customerName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/crm/statistics/funnel/components/BusinessSummary.vue b/src/views/crm/statistics/funnel/components/BusinessSummary.vue
index 60dd8198..942a7128 100644
--- a/src/views/crm/statistics/funnel/components/BusinessSummary.vue
+++ b/src/views/crm/statistics/funnel/components/BusinessSummary.vue
@@ -118,7 +118,7 @@ const queryParams0 = reactive({
const loading = ref(false) // 加载中
const list = ref([]) // 列表的数据
const total = ref(0)
-/** 将传进来的值赋值给 formData */
+/** 将传进来的值赋值给 queryParams0 */
watch(
() => props.queryParams,
(data) => {
@@ -163,7 +163,7 @@ const echartsOption = reactive({
brush: {
type: ['lineX', 'clear'] // 区域缩放按钮、还原按钮
},
- saveAsImage: { show: true, name: '客户总量分析' } // 保存为图片
+ saveAsImage: { show: true, name: '新增商机分析' } // 保存为图片
}
},
tooltip: {
@@ -216,7 +216,7 @@ const fetchAndFill = async () => {
}
if (echartsOption.series && echartsOption.series[1] && echartsOption.series[1]['data']) {
echartsOption.series[1]['data'] = businessSummaryByDate.map(
- (s: CrmStatisticsBusinessSummaryByDateRespVO) => s.businessDealCount
+ (s: CrmStatisticsBusinessSummaryByDateRespVO) => s.totalPrice
)
}
diff --git a/src/views/crm/statistics/funnel/components/FunnelBusiness.vue b/src/views/crm/statistics/funnel/components/FunnelBusiness.vue
index 2be24e8d..9b7b08ae 100644
--- a/src/views/crm/statistics/funnel/components/FunnelBusiness.vue
+++ b/src/views/crm/statistics/funnel/components/FunnelBusiness.vue
@@ -4,6 +4,10 @@
+
+ 客户视角
+ 动态视角
+
@@ -35,6 +39,7 @@ import { FunnelChart } from 'echarts/charts'
defineOptions({ name: 'FunnelBusiness' })
const props = defineProps<{ queryParams: any }>() // 搜索参数
+const active = ref(true)
const loading = ref(false) // 加载中
const list = ref([]) // 列表的数据
@@ -101,6 +106,11 @@ const echartsOption = reactive({
]
}) as EChartsOption
+const handleActive = async (val: boolean) => {
+ active.value = val
+ await loadData()
+}
+
/** 获取统计数据 */
const loadData = async () => {
loading.value = true
@@ -117,13 +127,20 @@ const loadData = async () => {
) {
// tips:写死 value 值是为了保持漏斗顺序不变
const list: { value: number; name: string }[] = []
- list.push({ value: 60, name: `客户-${data.customerCount || 0}个` })
- list.push({ value: 40, name: `商机-${data.businessCount || 0}个` })
- list.push({ value: 20, name: `赢单-${data.winCount || 0}个` })
+ if (active.value) {
+ list.push({ value: 60, name: `客户-${data.customerCount || 0}个` })
+ list.push({ value: 40, name: `商机-${data.businessCount || 0}个` })
+ list.push({ value: 20, name: `赢单-${data.businessWinCount || 0}个` })
+ } else {
+ list.push({ value: data.customerCount || 0, name: `客户-${data.customerCount || 0}个` })
+ list.push({ value: data.businessCount || 0, name: `商机-${data.businessCount || 0}个` })
+ list.push({ value: data.businessWinCount || 0, name: `赢单-${data.businessWinCount || 0}个` })
+ }
+
echartsOption.series[0]['data'] = list
}
// 2.2 获取商机结束状态统计
- list.value = await StatisticFunnelApi.getBusinessEndStatusSummary(props.queryParams)
+ list.value = await StatisticFunnelApi.getBusinessSummaryByEndStatus(props.queryParams)
loading.value = false
}
defineExpose({ loadData })
diff --git a/src/views/crm/statistics/funnel/index.vue b/src/views/crm/statistics/funnel/index.vue
index b8cddf8d..804cb49b 100644
--- a/src/views/crm/statistics/funnel/index.vue
+++ b/src/views/crm/statistics/funnel/index.vue
@@ -87,7 +87,12 @@
-
+
+
+
@@ -100,6 +105,7 @@ import { beginOfDay, defaultShortcuts, endOfDay, formatDate } from '@/utils/form
import { defaultProps, handleTree } from '@/utils/tree'
import FunnelBusiness from './components/FunnelBusiness.vue'
import BusinessSummary from './components/BusinessSummary.vue'
+import BusinessInversionRateSummary from './components/BusinessInversionRateSummary.vue'
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
defineOptions({ name: 'CrmStatisticsFunnel' })
@@ -129,7 +135,7 @@ const userListByDeptId = computed(() =>
const activeTab = ref('funnelRef') // 活跃标签
const funnelRef = ref() // 销售漏斗
const businessSummaryRef = ref() // 新增商机分析
-const sourceRef = ref() // 客户来源
+const businessInversionRateSummaryRef = ref() // 商机转化率分析
/** 搜索按钮操作 */
const handleQuery = () => {
@@ -140,8 +146,8 @@ const handleQuery = () => {
case 'businessSummaryRef':
businessSummaryRef.value?.loadData?.()
break
- case 'sourceRef':
- sourceRef.value?.loadData?.()
+ case 'businessInversionRateSummaryRef':
+ businessInversionRateSummaryRef.value?.loadData?.()
break
}
}
diff --git a/src/views/crm/statistics/portrait/components/PortraitCustomerArea.vue b/src/views/crm/statistics/portrait/components/PortraitCustomerArea.vue
index 8ccd52c8..112e6090 100644
--- a/src/views/crm/statistics/portrait/components/PortraitCustomerArea.vue
+++ b/src/views/crm/statistics/portrait/components/PortraitCustomerArea.vue
@@ -106,7 +106,7 @@ const loadData = async () => {
areaStatisticsList.value = areaList.map((item: CrmStatisticCustomerAreaRespVO) => {
return {
...item,
- areaName: item.areaName // TODO @puhui999:这里最好注释下原因哈, 🤣 我从 mall copy 过来的
+ areaName: item.areaName
// .replace('维吾尔自治区', '')
// .replace('壮族自治区', '')
// .replace('回族自治区', '')