From a1d7e81859f554f3a53680cc35f0f49bf1f77098 Mon Sep 17 00:00:00 2001
From: wwf <1971391498@qq.com>
Date: 星期四, 14 五月 2026 14:37:02 +0800
Subject: [PATCH] 导入项目
---
src/views/crm/statistics/customer/components/CustomerFollowUpType.vue | 120 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 120 insertions(+), 0 deletions(-)
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 0000000..3d8d873
--- /dev/null
+++ b/src/views/crm/statistics/customer/components/CustomerFollowUpType.vue
@@ -0,0 +1,120 @@
+<!-- 瀹㈡埛璺熻繘鏂瑰紡鍒嗘瀽 -->
+<template>
+ <!-- Echarts鍥� -->
+ <el-card shadow="never">
+ <el-skeleton :loading="loading" animated>
+ <Echart :height="500" :options="echartsOption" />
+ </el-skeleton>
+ </el-card>
+
+ <!-- 缁熻鍒楄〃 -->
+ <el-card shadow="never" class="mt-16px">
+ <el-table v-loading="loading" :data="list">
+ <el-table-column label="搴忓彿" align="center" type="index" width="80" />
+ <el-table-column label="璺熻繘鏂瑰紡" align="center" prop="followUpType" min-width="200">
+ <template #default="scope">
+ <dict-tag :type="DICT_TYPE.CRM_FOLLOW_UP_TYPE" :value="scope.row.followUpType" />
+ </template>
+ </el-table-column>
+ <el-table-column label="涓暟" align="center" prop="followUpRecordCount" min-width="200" />
+ <el-table-column label="鍗犳瘮(%)" align="center" prop="portion" min-width="200" />
+ </el-table>
+ </el-card>
+</template>
+<script setup lang="ts">
+import {
+ StatisticsCustomerApi,
+ CrmStatisticsFollowUpSummaryByTypeRespVO
+} from '@/api/crm/statistics/customer'
+import { EChartsOption } from 'echarts'
+import { sumBy } from 'lodash-es'
+import { DICT_TYPE, getDictLabel } from '@/utils/dict'
+import { erpCalculatePercentage } from '@/utils'
+
+defineOptions({ name: 'CustomerFollowupType' })
+
+const props = defineProps<{ queryParams: any }>() // 鎼滅储鍙傛暟
+
+const loading = ref(false) // 鍔犺浇涓�
+const list = ref<CrmStatisticsFollowUpSummaryByTypeRespVO[]>([]) // 鍒楄〃鐨勬暟鎹�
+
+/** 楗煎浘閰嶇疆 */
+const echartsOption = reactive<EChartsOption>({
+ title: {
+ text: '瀹㈡埛璺熻繘鏂瑰紡鍒嗘瀽',
+ left: 'center'
+ },
+ legend: {
+ orient: 'vertical',
+ left: 'left'
+ },
+ tooltip: {
+ trigger: 'item',
+ formatter: '{b} : {c}% '
+ },
+ toolbox: {
+ feature: {
+ saveAsImage: { show: true, name: '瀹㈡埛璺熻繘鏂瑰紡鍒嗘瀽' } // 淇濆瓨涓哄浘鐗�
+ }
+ },
+ series: [
+ {
+ name: '璺熻繘鏂瑰紡',
+ type: 'pie',
+ radius: '50%',
+ data: [],
+ emphasis: {
+ itemStyle: {
+ shadowBlur: 10,
+ shadowOffsetX: 0,
+ shadowColor: 'rgba(0, 0, 0, 0.5)'
+ }
+ }
+ }
+ ]
+}) as EChartsOption
+
+/** 鑾峰彇鏁版嵁骞跺~鍏呭浘琛� */
+const fetchAndFill = async () => {
+ // 1. 鍔犺浇缁熻鏁版嵁
+ const followUpSummaryByType = await StatisticsCustomerApi.getFollowUpSummaryByType(
+ props.queryParams
+ )
+ // 2.1 鏇存柊 Echarts 鏁版嵁
+ if (echartsOption.series && echartsOption.series[0] && echartsOption.series[0]['data']) {
+ echartsOption.series[0]['data'] = followUpSummaryByType.map(
+ (row: CrmStatisticsFollowUpSummaryByTypeRespVO) => {
+ return {
+ name: getDictLabel(DICT_TYPE.CRM_FOLLOW_UP_TYPE, row.followUpType),
+ value: row.followUpRecordCount
+ }
+ }
+ )
+ }
+ // 2.2 鏇存柊鍒楄〃鏁版嵁
+ const totalCount = sumBy(followUpSummaryByType, 'followUpRecordCount')
+ list.value = followUpSummaryByType.map((row: CrmStatisticsFollowUpSummaryByTypeRespVO) => {
+ return {
+ ...row,
+ portion: erpCalculatePercentage(row.followUpRecordCount, totalCount)
+ }
+ })
+}
+
+/** 鑾峰彇缁熻鏁版嵁 */
+const loadData = async () => {
+ loading.value = true
+ try {
+ await fetchAndFill()
+ } finally {
+ loading.value = false
+ }
+}
+
+defineExpose({ loadData })
+
+/** 鍒濆鍖� */
+onMounted(() => {
+ loadData()
+})
+</script>
--
Gitblit v1.8.0