Skip to content

Commit 3cdcd67

Browse files
committed
新增:CRM 商业智能,其他排名接口
1 parent 4549f8e commit 3cdcd67

10 files changed

+700
-26
lines changed

src/api/crm/bi/rank.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,47 @@ export const RankApi = {
2121
url: '/crm/bi-rank/get-receivable-price-rank',
2222
params
2323
})
24+
},
25+
// 签约合同排行
26+
getContractCountRank: (params: any) => {
27+
return request.get({
28+
url: '/crm/bi-rank/get-contract-count-rank',
29+
params
30+
})
31+
},
32+
// 产品销量排行
33+
getProductSalesRank: (params: any) => {
34+
return request.get({
35+
url: '/crm/bi-rank/get-product-sales-rank',
36+
params
37+
})
38+
},
39+
// 新增客户数排行
40+
getCustomerCountRank: (params: any) => {
41+
return request.get({
42+
url: '/crm/bi-rank/get-customer-count-rank',
43+
params
44+
})
45+
},
46+
// 新增联系人数排行
47+
getContactsCountRank: (params: any) => {
48+
return request.get({
49+
url: '/crm/bi-rank/get-contacts-count-rank',
50+
params
51+
})
52+
},
53+
// 跟进次数排行
54+
getFollowCountRank: (params: any) => {
55+
return request.get({
56+
url: '/crm/bi-rank/get-follow-count-rank',
57+
params
58+
})
59+
},
60+
// 跟进客户数排行
61+
getFollowCustomerCountRank: (params: any) => {
62+
return request.get({
63+
url: '/crm/bi-rank/get-follow-customer-count-rank',
64+
params
65+
})
2466
}
2567
}
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
<!-- 新增联系人数排行 -->
2+
<template>
3+
<!-- 柱状图 -->
4+
<el-card shadow="never">
5+
<el-skeleton :loading="loading" animated>
6+
<Echart :height="500" :options="echartsOption" />
7+
</el-skeleton>
8+
</el-card>
9+
10+
<!-- 排行列表 -->
11+
<el-card shadow="never" class="mt-16px">
12+
<el-table v-loading="loading" :data="list">
13+
<el-table-column label="公司排名" align="center" type="index" width="80" />
14+
<el-table-column label="创建人" align="center" prop="nickname" min-width="200" />
15+
<el-table-column label="部门" align="center" prop="deptName" min-width="200" />
16+
<el-table-column label="新增联系人数(个)" align="center" prop="count" min-width="200" />
17+
</el-table>
18+
</el-card>
19+
</template>
20+
<script setup lang="ts">
21+
import { RankApi, BiRankRespVO } from '@/api/crm/bi/rank'
22+
import { EChartsOption } from 'echarts'
23+
import { clone } from 'unocss'
24+
25+
defineOptions({ name: 'ContactsCountRank' })
26+
const props = defineProps<{ queryParams: any }>() // 搜索参数
27+
28+
const loading = ref(false) // 加载中
29+
const list = ref<BiRankRespVO[]>([]) // 列表的数据
30+
31+
/** 柱状图配置:横向 */
32+
const echartsOption = reactive<EChartsOption>({
33+
dataset: {
34+
dimensions: ['nickname', 'count'],
35+
source: []
36+
},
37+
grid: {
38+
left: 20,
39+
right: 20,
40+
bottom: 20,
41+
containLabel: true
42+
},
43+
legend: {
44+
top: 50
45+
},
46+
series: [
47+
{
48+
name: '新增联系人数排行',
49+
type: 'bar'
50+
}
51+
],
52+
toolbox: {
53+
feature: {
54+
dataZoom: {
55+
yAxisIndex: false // 数据区域缩放:Y 轴不缩放
56+
},
57+
brush: {
58+
type: ['lineX', 'clear'] // 区域缩放按钮、还原按钮
59+
},
60+
saveAsImage: { show: true, name: '新增联系人数排行' } // 保存为图片
61+
}
62+
},
63+
tooltip: {
64+
trigger: 'axis',
65+
axisPointer: {
66+
type: 'shadow'
67+
}
68+
},
69+
xAxis: {
70+
type: 'value',
71+
name: '新增联系人数(个)'
72+
},
73+
yAxis: {
74+
type: 'category',
75+
name: '创建人'
76+
}
77+
}) as EChartsOption
78+
79+
/** 获取新增联系人数排行 */
80+
const loadData = async () => {
81+
// 1. 加载排行数据
82+
loading.value = true
83+
const rankingList = await RankApi.getContactsCountRank(props.queryParams)
84+
// 2.1 更新 Echarts 数据
85+
if (echartsOption.dataset && echartsOption.dataset['source']) {
86+
echartsOption.dataset['source'] = clone(rankingList).reverse()
87+
}
88+
// 2.2 更新列表数据
89+
list.value = rankingList
90+
loading.value = false
91+
}
92+
defineExpose({ loadData })
93+
94+
/** 初始化 */
95+
onMounted(() => {
96+
loadData()
97+
})
98+
</script>
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
<!-- 签约合同排行 -->
2+
<template>
3+
<!-- 柱状图 -->
4+
<el-card shadow="never">
5+
<el-skeleton :loading="loading" animated>
6+
<Echart :height="500" :options="echartsOption" />
7+
</el-skeleton>
8+
</el-card>
9+
10+
<!-- 排行列表 -->
11+
<el-card shadow="never" class="mt-16px">
12+
<el-table v-loading="loading" :data="list">
13+
<el-table-column label="公司排名" align="center" type="index" width="80" />
14+
<el-table-column label="签订人" align="center" prop="nickname" min-width="200" />
15+
<el-table-column label="部门" align="center" prop="deptName" min-width="200" />
16+
<el-table-column label="签约合同数(个)" align="center" prop="count" min-width="200" />
17+
</el-table>
18+
</el-card>
19+
</template>
20+
<script setup lang="ts">
21+
import { RankApi, BiRankRespVO } from '@/api/crm/bi/rank'
22+
import { EChartsOption } from 'echarts'
23+
import { clone } from 'unocss'
24+
25+
defineOptions({ name: 'ContractCountRank' })
26+
const props = defineProps<{ queryParams: any }>() // 搜索参数
27+
28+
const loading = ref(false) // 加载中
29+
const list = ref<BiRankRespVO[]>([]) // 列表的数据
30+
31+
/** 柱状图配置:横向 */
32+
const echartsOption = reactive<EChartsOption>({
33+
dataset: {
34+
dimensions: ['nickname', 'count'],
35+
source: []
36+
},
37+
grid: {
38+
left: 20,
39+
right: 20,
40+
bottom: 20,
41+
containLabel: true
42+
},
43+
legend: {
44+
top: 50
45+
},
46+
series: [
47+
{
48+
name: '签约合同排行',
49+
type: 'bar'
50+
}
51+
],
52+
toolbox: {
53+
feature: {
54+
dataZoom: {
55+
yAxisIndex: false // 数据区域缩放:Y 轴不缩放
56+
},
57+
brush: {
58+
type: ['lineX', 'clear'] // 区域缩放按钮、还原按钮
59+
},
60+
saveAsImage: { show: true, name: '签约合同排行' } // 保存为图片
61+
}
62+
},
63+
tooltip: {
64+
trigger: 'axis',
65+
axisPointer: {
66+
type: 'shadow'
67+
}
68+
},
69+
xAxis: {
70+
type: 'value',
71+
name: '签约合同数(个)'
72+
},
73+
yAxis: {
74+
type: 'category',
75+
name: '签订人'
76+
}
77+
}) as EChartsOption
78+
79+
/** 获取签约合同排行 */
80+
const loadData = async () => {
81+
// 1. 加载排行数据
82+
loading.value = true
83+
const rankingList = await RankApi.getContractCountRank(props.queryParams)
84+
// 2.1 更新 Echarts 数据
85+
if (echartsOption.dataset && echartsOption.dataset['source']) {
86+
echartsOption.dataset['source'] = clone(rankingList).reverse()
87+
}
88+
// 2.2 更新列表数据
89+
list.value = rankingList
90+
loading.value = false
91+
}
92+
defineExpose({ loadData })
93+
94+
/** 初始化 */
95+
onMounted(() => {
96+
loadData()
97+
})
98+
</script>

src/views/crm/bi/rank/ContractPriceRank.vue

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,13 @@
1313
<el-table-column label="公司排名" align="center" type="index" width="80" />
1414
<el-table-column label="签订人" align="center" prop="nickname" min-width="200" />
1515
<el-table-column label="部门" align="center" prop="deptName" min-width="200" />
16-
<el-table-column
17-
label="合同金额(元)"
18-
align="center"
19-
prop="count"
20-
min-width="200"
21-
:formatter="fenToYuanFormat"
22-
/>
16+
<el-table-column label="合同金额(元)" align="center" prop="count" min-width="200" />
2317
</el-table>
2418
</el-card>
2519
</template>
2620
<script setup lang="ts">
2721
import { RankApi, BiRankRespVO } from '@/api/crm/bi/rank'
2822
import { EChartsOption } from 'echarts'
29-
import { fenToYuanFormat } from '@/utils/formatter'
30-
import { fenToYuan } from '@/utils'
3123
import { clone } from 'unocss'
3224
3325
defineOptions({ name: 'ContractPriceRank' })
@@ -72,8 +64,7 @@ const echartsOption = reactive<EChartsOption>({
7264
trigger: 'axis',
7365
axisPointer: {
7466
type: 'shadow'
75-
},
76-
valueFormatter: fenToYuan
67+
}
7768
},
7869
xAxis: {
7970
type: 'value',
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
<!-- 新增客户数排行 -->
2+
<template>
3+
<!-- 柱状图 -->
4+
<el-card shadow="never">
5+
<el-skeleton :loading="loading" animated>
6+
<Echart :height="500" :options="echartsOption" />
7+
</el-skeleton>
8+
</el-card>
9+
10+
<!-- 排行列表 -->
11+
<el-card shadow="never" class="mt-16px">
12+
<el-table v-loading="loading" :data="list">
13+
<el-table-column label="公司排名" align="center" type="index" width="80" />
14+
<el-table-column label="创建人" align="center" prop="nickname" min-width="200" />
15+
<el-table-column label="部门" align="center" prop="deptName" min-width="200" />
16+
<el-table-column label="新增客户数(个)" align="center" prop="count" min-width="200" />
17+
</el-table>
18+
</el-card>
19+
</template>
20+
<script setup lang="ts">
21+
import { RankApi, BiRankRespVO } from '@/api/crm/bi/rank'
22+
import { EChartsOption } from 'echarts'
23+
import { clone } from 'unocss'
24+
25+
defineOptions({ name: 'CustomerCountRank' })
26+
const props = defineProps<{ queryParams: any }>() // 搜索参数
27+
28+
const loading = ref(false) // 加载中
29+
const list = ref<BiRankRespVO[]>([]) // 列表的数据
30+
31+
/** 柱状图配置:横向 */
32+
const echartsOption = reactive<EChartsOption>({
33+
dataset: {
34+
dimensions: ['nickname', 'count'],
35+
source: []
36+
},
37+
grid: {
38+
left: 20,
39+
right: 20,
40+
bottom: 20,
41+
containLabel: true
42+
},
43+
legend: {
44+
top: 50
45+
},
46+
series: [
47+
{
48+
name: '新增客户数排行',
49+
type: 'bar'
50+
}
51+
],
52+
toolbox: {
53+
feature: {
54+
dataZoom: {
55+
yAxisIndex: false // 数据区域缩放:Y 轴不缩放
56+
},
57+
brush: {
58+
type: ['lineX', 'clear'] // 区域缩放按钮、还原按钮
59+
},
60+
saveAsImage: { show: true, name: '新增客户数排行' } // 保存为图片
61+
}
62+
},
63+
tooltip: {
64+
trigger: 'axis',
65+
axisPointer: {
66+
type: 'shadow'
67+
}
68+
},
69+
xAxis: {
70+
type: 'value',
71+
name: '新增客户数(个)'
72+
},
73+
yAxis: {
74+
type: 'category',
75+
name: '创建人'
76+
}
77+
}) as EChartsOption
78+
79+
/** 获取新增客户数排行 */
80+
const loadData = async () => {
81+
// 1. 加载排行数据
82+
loading.value = true
83+
const rankingList = await RankApi.getCustomerCountRank(props.queryParams)
84+
// 2.1 更新 Echarts 数据
85+
if (echartsOption.dataset && echartsOption.dataset['source']) {
86+
echartsOption.dataset['source'] = clone(rankingList).reverse()
87+
}
88+
// 2.2 更新列表数据
89+
list.value = rankingList
90+
loading.value = false
91+
}
92+
defineExpose({ loadData })
93+
94+
/** 初始化 */
95+
onMounted(() => {
96+
loadData()
97+
})
98+
</script>

0 commit comments

Comments
 (0)