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({})