From f1c41818393a2678d69852f0d65a5ff6018613ee Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期五, 22 五月 2026 13:09:24 +0800
Subject: [PATCH] fix(financial): 修复财务数据处理中的数值转换和异常处理问题

---
 src/views/index.vue                                                  |    7 ++-
 src/views/reportAnalysis/financialAnalysis/components/center-top.vue |   79 ++++++++++++++++++++++++---------------
 src/views/reportAnalysis/dataDashboard/index0.vue                    |   13 ++++--
 3 files changed, 62 insertions(+), 37 deletions(-)

diff --git a/src/views/index.vue b/src/views/index.vue
index e0e9cf3..e12ded2 100644
--- a/src/views/index.vue
+++ b/src/views/index.vue
@@ -1307,9 +1307,12 @@
 
 const statisticsReceivable = async () => {
   const res = await statisticsReceivablePayable({ type: 1 });
+  const data = res?.data || {};
+  const payableMoney = Number(data.payableMoney ?? 0);
+  const receivableMoney = Number(data.receivableMoney ?? 0);
   barSeries.value[0].data = [
-    { value: res.data.payableMoney, itemStyle: { color: barColors2[0] } },
-    { value: res.data.receivableMoney, itemStyle: { color: barColors2[1] } },
+    { value: payableMoney, itemStyle: { color: barColors2[0] } },
+    { value: receivableMoney, itemStyle: { color: barColors2[1] } },
   ];
 };
 
diff --git a/src/views/reportAnalysis/dataDashboard/index0.vue b/src/views/reportAnalysis/dataDashboard/index0.vue
index 5c0da22..ff92e41 100644
--- a/src/views/reportAnalysis/dataDashboard/index0.vue
+++ b/src/views/reportAnalysis/dataDashboard/index0.vue
@@ -925,15 +925,18 @@
 	})
 }
 // 搴斾粯搴旀敹缁熻
-const statisticsReceivable = (type) => {
-	statisticsReceivablePayable({type: radio1.value}).then((res) => {
+const statisticsReceivable = (type = radio1.value) => {
+	statisticsReceivablePayable({ type }).then((res) => {
+		const data = res?.data || {}
+		const payableMoney = Number(data.payableMoney ?? 0)
+		const receivableMoney = Number(data.receivableMoney ?? 0)
 		// 璁剧疆搴斾粯閲戦鏁版嵁
 		barSeries.value[0].data = [
-			{ value: res.data.payableMoney }
+			{ value: payableMoney }
 		]
 		// 璁剧疆搴旀敹閲戦鏁版嵁
 		barSeries.value[1].data = [
-			{ value: res.data.receivableMoney }
+			{ value: receivableMoney }
 		]
 	})
 }
@@ -2031,4 +2034,4 @@
   color: #B8C8E0;
   font-size: 11px;
 }
-</style>
\ No newline at end of file
+</style>
diff --git a/src/views/reportAnalysis/financialAnalysis/components/center-top.vue b/src/views/reportAnalysis/financialAnalysis/components/center-top.vue
index 85f4928..becb376 100644
--- a/src/views/reportAnalysis/financialAnalysis/components/center-top.vue
+++ b/src/views/reportAnalysis/financialAnalysis/components/center-top.vue
@@ -112,50 +112,69 @@
   profitRate: { value: 0, trend: 0 },
 })
 
-const fetchMonthlyIncome = async () => {
-  const res = await getMonthlyIncome()
-  const data = res?.data || {}
+const toNumber = (val) => {
+  const num = Number(val)
+  return Number.isFinite(num) ? num : 0
+}
 
-  income.value.amount = data.monthlyIncome ?? 0
-  const collectionRate = Number(data.collectionRate ?? 0)
-  const overdueRate = Number(data.overdueRate ?? 0)
-  income.value.repayRate = {
-    value: collectionRate,
-    trend: collectionRate >= 0 ? 1 : -1,
-  }
-  income.value.overdueCount = data.overdueNum ?? 0
-  income.value.overdueRate = {
-    value: overdueRate,
-    trend: overdueRate >= 0 ? 1 : -1,
+const fetchMonthlyIncome = async () => {
+  try {
+    const res = await getMonthlyIncome()
+    const data = res?.data || {}
+
+    income.value.amount = toNumber(data.monthlyIncome)
+    const collectionRate = toNumber(data.collectionRate)
+    const overdueRate = toNumber(data.overdueRate)
+    income.value.repayRate = {
+      value: collectionRate,
+      trend: collectionRate >= 0 ? 1 : -1,
+    }
+    income.value.overdueCount = toNumber(data.overdueNum)
+    income.value.overdueRate = {
+      value: overdueRate,
+      trend: overdueRate >= 0 ? 1 : -1,
+    }
+  } catch {
+    income.value.amount = 0
+    income.value.repayRate = { value: 0, trend: 0 }
+    income.value.overdueCount = 0
+    income.value.overdueRate = { value: 0, trend: 0 }
   }
 }
 
 const fetchMonthlyExpenditure = async () => {
-  const res = await getMonthlyExpenditure()
-  const data = res?.data || {}
+  try {
+    const res = await getMonthlyExpenditure()
+    const data = res?.data || {}
 
-  expense.value.amount = data.monthlyExpenditure ?? 0
-  const paymentRate = Number(data.paymentRate ?? 0)
-  expense.value.netProfit = {
-    value: paymentRate,
-    trend: paymentRate >= 0 ? 1 : -1,
-  }
-  expense.value.grossProfit = data.grossProfit ?? 0
+    expense.value.amount = toNumber(data.monthlyExpenditure)
+    const paymentRate = toNumber(data.paymentRate)
+    expense.value.netProfit = {
+      value: paymentRate,
+      trend: paymentRate >= 0 ? 1 : -1,
+    }
+    expense.value.grossProfit = toNumber(data.grossProfit)
 
-  const profitMarginRate = Number(data.profitMarginRate ?? 0)
-  expense.value.profitRate = {
-    value: profitMarginRate,
-    trend: profitMarginRate >= 0 ? 1 : -1,
+    const profitMarginRate = toNumber(data.profitMarginRate)
+    expense.value.profitRate = {
+      value: profitMarginRate,
+      trend: profitMarginRate >= 0 ? 1 : -1,
+    }
+  } catch {
+    expense.value.amount = 0
+    expense.value.netProfit = { value: 0, trend: 0 }
+    expense.value.grossProfit = 0
+    expense.value.profitRate = { value: 0, trend: 0 }
   }
 }
 
 const isWanAmount = (val) => {
-  const num = Number(val) || 0
+  const num = toNumber(val)
   return Math.abs(num) >= 10000
 }
 
 const formatAmountWanNumber = (val) => {
-  const num = Number(val) || 0
+  const num = toNumber(val)
   if (Math.abs(num) >= 10000) {
     return (num / 10000).toFixed(2)
   }
@@ -163,7 +182,7 @@
 }
 
 const formatPercent = (val) => {
-  const num = Number(val) || 0
+  const num = toNumber(val)
   // 鐧惧垎姣斿睍绀哄缁堢敤缁濆鍊硷紝灏忔暟淇濈暀涓や綅
   return `${Math.abs(num).toFixed(2)}%`
 }

--
Gitblit v1.9.3