From 7e8f272dfeaf0b3a27243280d6613ad36eecac38 Mon Sep 17 00:00:00 2001 From: lbw_9527443 <780139497@qq.com> Date: Mon, 13 Oct 2025 17:55:26 +0800 Subject: [PATCH] =?UTF-8?q?fix(GroupRanking):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E5=8D=B8=E8=BD=BD=E7=8A=B6=E6=80=81=E6=A3=80?= =?UTF-8?q?=E6=9F=A5=E9=98=B2=E6=AD=A2=E5=86=85=E5=AD=98=E6=B3=84=E6=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在组件卸载时添加状态标记,避免组件卸载后仍执行图表更新操作导致内存泄漏 --- .../views/senorManger/components/GroupRanking.vue | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/my-vue-app/src/views/senorManger/components/GroupRanking.vue b/my-vue-app/src/views/senorManger/components/GroupRanking.vue index fa678ab..480895e 100644 --- a/my-vue-app/src/views/senorManger/components/GroupRanking.vue +++ b/my-vue-app/src/views/senorManger/components/GroupRanking.vue @@ -27,6 +27,9 @@ const props = defineProps({ } }) +// 组件状态跟踪 +let isComponentMounted = true + // Chart.js 实例 const chartInstances = {} @@ -41,13 +44,15 @@ const funnelData = reactive({ // 监听teamSalesFunnel变化并更新图表数据 watch(() => props.teamSalesFunnel, (newVal) => { - if (newVal && Object.keys(newVal).length > 0) { + if (newVal && Object.keys(newVal).length > 0 && isComponentMounted) { // 按照固定顺序提取数据 const order = ['线索', '加微', '到课', '定金', '成交'] funnelData.data = order.map(key => newVal[key] || 0) // 确保在DOM更新后再更新图表 nextTick(() => { - renderPersonalFunnelChart() + if (isComponentMounted) { + renderPersonalFunnelChart() + } }) } }, { deep: true }) @@ -89,15 +94,19 @@ const renderPersonalFunnelChart = () => { // 生命周期钩子 onMounted(() => { + isComponentMounted = true // 处理初始传入的teamSalesFunnel数据 if (props.teamSalesFunnel && Object.keys(props.teamSalesFunnel).length > 0) { const order = ['线索', '加微', '到课', '定金', '成交'] funnelData.data = order.map(key => props.teamSalesFunnel[key] || 0) } - renderPersonalFunnelChart() + if (isComponentMounted) { + renderPersonalFunnelChart() + } }) onBeforeUnmount(() => { + isComponentMounted = false Object.values(chartInstances).forEach(chart => chart.destroy()) })