From b9f74dc810959ba137c15b6a3c37f8a4e76333b2 Mon Sep 17 00:00:00 2001
From: chenpanliang <3245129380@qq.com>
Date: Tue, 25 Nov 2025 15:26:34 +0800
Subject: [PATCH] =?UTF-8?q?fix(=E7=BB=9F=E8=AE=A1=E6=8C=87=E6=A0=87):=20?=
=?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=95=B0=E6=8D=AE=E6=9C=AA=E5=8A=A0=E8=BD=BD?=
=?UTF-8?q?=E6=97=B6=E6=98=BE=E7=A4=BA=E5=BC=82=E5=B8=B8=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
修改统计指标组件和父组件的数据处理逻辑,确保在数据未加载或返回null时显示默认值0。同时将props类型从Number改为Object,并添加默认空对象防止访问属性错误。
---
.../components/StatisticalIndicators.vue | 30 +++++++-------
.../src/views/senorManger/seniorManager.vue | 40 +++++++++++++------
2 files changed, 43 insertions(+), 27 deletions(-)
diff --git a/my-vue-app/src/views/senorManger/components/StatisticalIndicators.vue b/my-vue-app/src/views/senorManger/components/StatisticalIndicators.vue
index 61f6911..e5b9a05 100644
--- a/my-vue-app/src/views/senorManger/components/StatisticalIndicators.vue
+++ b/my-vue-app/src/views/senorManger/components/StatisticalIndicators.vue
@@ -5,35 +5,35 @@
- {{ customerCommunicationRate.active_customer_communication_rate||0 }}
+ {{ (customerCommunicationRate && customerCommunicationRate.active_customer_communication_rate) || 0 }}
活跃客户沟通率 ⓘ
-
{{ averageResponseTime.average_answer_time||0 }}分钟
+
{{ (averageResponseTime && averageResponseTime.average_answer_time)||0 }}分钟
平均应答时间 ⓘ
-
{{ timeoutResponseRate.timeout_rate||0 }}
+
{{ (timeoutResponseRate && timeoutResponseRate.timeout_rate)||0 }}
超时应答率 ⓘ
-
{{ timeoutResponseRate.serious_timeout_rate||0 }}
+
{{ (timeoutResponseRate && timeoutResponseRate.serious_timeout_rate)||0 }}
严重超时应答率 ⓘ
-
{{ formCompletionRate.table_filling_rate||0 }}
+
{{ (formCompletionRate && formCompletionRate.table_filling_rate)||0 }}
表格填写率 ⓘ
@@ -53,24 +53,24 @@ import Tooltip from '@/components/Tooltip.vue';
defineProps({
customerCommunicationRate: {
- type: Number,
- default: 0
+ type: Object,
+ default: () => ({})
},
averageResponseTime: {
- type: Number,
- default: 0
+ type: Object,
+ default: () => ({})
},
timeoutResponseRate: {
- type: Number,
- default: 0
+ type: Object,
+ default: () => ({})
},
severeTimeoutRate: {
- type: Number,
- default: 0
+ type: Object,
+ default: () => ({})
},
formCompletionRate: {
- type: Number,
- default: 0
+ type: Object,
+ default: () => ({})
}
});
diff --git a/my-vue-app/src/views/senorManger/seniorManager.vue b/my-vue-app/src/views/senorManger/seniorManager.vue
index feb25f0..d7773a6 100644
--- a/my-vue-app/src/views/senorManger/seniorManager.vue
+++ b/my-vue-app/src/views/senorManger/seniorManager.vue
@@ -566,11 +566,11 @@ async function fetchDepositConversions() {
}
const statisticalIndicators = ref({
- customerCommunicationRate: 0,
- averageResponseTime: 0,
- timeoutResponseRate: 0,
- severeTimeoutRate: 0,
- formCompletionRate: 0,
+ customerCommunicationRate: {},
+ averageResponseTime: {},
+ timeoutResponseRate: {},
+ severeTimeoutRate: {},
+ formCompletionRate: {},
})
// 销售漏斗
@@ -602,17 +602,18 @@ async function fetchAbnormalResponseRate() {
() => getAbnormalResponseRate(hasParams ? params : undefined),
requestParams
)
- const rawData = response.data
+ const rawData = response.data || {} // 添加默认值防止null访问
const processedAlerts = []
const teamData = new Map()
+ // 添加安全检查防止访问null属性
if (rawData.team_serious_timeout_abnormal_counts_by_group) {
Object.entries(rawData.team_serious_timeout_abnormal_counts_by_group).forEach(([teamName, data]) => {
if (!teamData.has(teamName)) {
teamData.set(teamName, { timeoutCount: 0, fillingCount: 0 })
}
- teamData.get(teamName).timeoutCount = data.count
+ teamData.get(teamName).timeoutCount = data.count || 0
})
}
@@ -621,7 +622,7 @@ async function fetchAbnormalResponseRate() {
if (!teamData.has(teamName)) {
teamData.set(teamName, { timeoutCount: 0, fillingCount: 0 })
}
- teamData.get(teamName).fillingCount = data.count
+ teamData.get(teamName).fillingCount = data.count || 0
})
}
@@ -663,9 +664,12 @@ async function fetchCustomerCommunicationRate() {
() => getActiveCustomerCommunicationRate(hasParams ? params : undefined),
requestParams
)
- statisticalIndicators.value.customerCommunicationRate = response.data
+ // 确保响应数据不为null
+ statisticalIndicators.value.customerCommunicationRate = response.data || {}
} catch (error) {
console.error('获取活跃客户沟通率失败:', error)
+ // 出错时设置为空对象
+ statisticalIndicators.value.customerCommunicationRate = {}
}
}
// 统计指标--平均应答时间
@@ -680,9 +684,12 @@ async function fetchAverageResponseTime() {
() => getAverageAnswerTime(hasParams ? params : undefined),
requestParams
)
- statisticalIndicators.value.averageResponseTime = response.data
+ // 确保响应数据不为null
+ statisticalIndicators.value.averageResponseTime = response.data || {}
} catch (error) {
console.error('获取平均应答时间失败:', error)
+ // 出错时设置为空对象
+ statisticalIndicators.value.averageResponseTime = {}
}
}
// 统计指标--超时应答率、严重超时应答率
@@ -697,9 +704,15 @@ async function fetchTimeoutRate() {
() => getTimeoutRate(hasParams ? params : undefined),
requestParams
)
- statisticalIndicators.value.timeoutResponseRate = response.data
+ // 确保响应数据不为null
+ statisticalIndicators.value.timeoutResponseRate = response.data || {}
+ // severeTimeoutRate使用相同的数据源
+ statisticalIndicators.value.severeTimeoutRate = response.data || {}
} catch (error) {
console.error('获取超时应答率失败:', error)
+ // 出错时设置为空对象
+ statisticalIndicators.value.timeoutResponseRate = {}
+ statisticalIndicators.value.severeTimeoutRate = {}
}
}
// 统计指标--表格填写率
@@ -714,9 +727,12 @@ async function fetchTableFillingRate() {
() => getTableFillingRate(hasParams ? params : undefined),
requestParams
)
- statisticalIndicators.value.formCompletionRate = response.data
+ // 确保响应数据不为null
+ statisticalIndicators.value.formCompletionRate = response.data || {}
} catch (error) {
console.error('获取表格填写率失败:', error)
+ // 出错时设置为空对象
+ statisticalIndicators.value.formCompletionRate = {}
}
}
const problemRanking = ref({})