|
@@ -39,14 +39,34 @@
|
|
|
<div class="statistics flex items-center">
|
|
|
<div class="num-box flex h-full items-center">
|
|
|
<span class="title">派单累计</span>
|
|
|
- <div class="num num1">{{ result9?.crm }}</div>
|
|
|
+ <div class="num num1">
|
|
|
+ <span
|
|
|
+ :class="{
|
|
|
+ num: item.type === 'num',
|
|
|
+ split: item.type === 'split',
|
|
|
+ }"
|
|
|
+ v-for="(item, index) in crmArr"
|
|
|
+ :key="index"
|
|
|
+ >{{ item.num }}</span
|
|
|
+ >
|
|
|
+ </div>
|
|
|
</div>
|
|
|
<div class="num-box flex h-full items-center">
|
|
|
<span class="title">服务人次累计</span>
|
|
|
- <div class="num num2">{{ result9?.person }}</div>
|
|
|
+ <div class="num num2">
|
|
|
+ <span
|
|
|
+ :class="{
|
|
|
+ num: item.type === 'num',
|
|
|
+ split: item.type === 'split',
|
|
|
+ }"
|
|
|
+ v-for="(item, index) in personArr"
|
|
|
+ :key="index"
|
|
|
+ >{{ item.num }}</span
|
|
|
+ ></div
|
|
|
+ >
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div class="china-box">
|
|
|
+ <div class="china-box card">
|
|
|
<ChinaPointChart
|
|
|
:data="chinaDataHandle(result5, result8)"
|
|
|
></ChinaPointChart>
|
|
@@ -194,6 +214,7 @@ import {
|
|
|
dispatchStatisticsAnalysis,
|
|
|
dispatchProjectCount,
|
|
|
} from '@/api/report';
|
|
|
+import { groupSeparator } from '@/utils/tool';
|
|
|
const chart2 = ref();
|
|
|
const chart3 = ref();
|
|
|
const showCustomTypeDrill = ref(false);
|
|
@@ -265,16 +286,36 @@ const {
|
|
|
loading: loading9,
|
|
|
run: run9,
|
|
|
} = useRequest(dispatchProjectCount);
|
|
|
+const crmArr = computed(() => {
|
|
|
+ let num = result9.value?.crm || '';
|
|
|
+ let numStr = groupSeparator(num);
|
|
|
+ return numStr.split('').map((item) => {
|
|
|
+ return {
|
|
|
+ num: item,
|
|
|
+ type: Number(item) ? 'num' : 'split',
|
|
|
+ };
|
|
|
+ });
|
|
|
+});
|
|
|
|
|
|
+const personArr = computed(() => {
|
|
|
+ let num = result9.value?.person || '';
|
|
|
+ let numStr = groupSeparator(num);
|
|
|
+ return numStr.split('').map((item) => {
|
|
|
+ return {
|
|
|
+ num: item,
|
|
|
+ type: Number(item) ? 'num' : 'split',
|
|
|
+ };
|
|
|
+ });
|
|
|
+});
|
|
|
const chinaDataHandle = (result5, result8) => {
|
|
|
if (!result5 || !result8) {
|
|
|
return null;
|
|
|
} else {
|
|
|
- let arr5 = result5?.day.map((item) => {
|
|
|
+ let arr5 = (result5 || []).map((item) => {
|
|
|
item.value = Number(item.count);
|
|
|
return item;
|
|
|
});
|
|
|
- let arr8 = result8?.day.map((item) => {
|
|
|
+ let arr8 = (result8 || []).map((item) => {
|
|
|
item.value = Number(item.count);
|
|
|
return item;
|
|
|
});
|
|
@@ -326,13 +367,14 @@ const tableDataHandle = (data) => {
|
|
|
if (!data) {
|
|
|
return [];
|
|
|
} else {
|
|
|
- let totalCount = data.day.reduce((num, item) => {
|
|
|
- return num + item.count;
|
|
|
- }, 0);
|
|
|
- return data.day.map((item) => {
|
|
|
- item.rate = ((item.count * 100) / totalCount).toFixed(2) + '%';
|
|
|
- return item;
|
|
|
- });
|
|
|
+ // let totalCount = data.day.reduce((num, item) => {
|
|
|
+ // return num + item.count;
|
|
|
+ // }, 0);
|
|
|
+ // return data.day.map((item) => {
|
|
|
+ // item.rate = ((item.count * 100) / totalCount).toFixed(2) + '%';
|
|
|
+ // return item;
|
|
|
+ // });
|
|
|
+ return data;
|
|
|
}
|
|
|
};
|
|
|
onMounted(() => {
|
|
@@ -365,6 +407,7 @@ const options1 = computed(() => {
|
|
|
title: '总数',
|
|
|
center: ['50%', '40%'],
|
|
|
seriesName: '客户类型',
|
|
|
+ radius: [30, 50],
|
|
|
},
|
|
|
{
|
|
|
legend: {
|