From 212ed891eba94c59d663c7bbbb156acdbc3a0f12 Mon Sep 17 00:00:00 2001
From: Jacob <hlnie@tohours.com>
Date: 星期二, 20 十月 2026 15:12:13 +0800
Subject: [PATCH] fix: 订单列表及商品组件处理空值展示并统一数字转换避免显示 null/NaN

---
 components/orderListGoods/index.vue |    8 ++++----
 pages/users/order_list/index.vue    |   18 +++++++++++-------
 main.js                             |   17 +++++++++++------
 3 files changed, 26 insertions(+), 17 deletions(-)

diff --git a/components/orderListGoods/index.vue b/components/orderListGoods/index.vue
index 58b62ed..3ad3220 100644
--- a/components/orderListGoods/index.vue
+++ b/components/orderListGoods/index.vue
@@ -9,8 +9,8 @@
             </view>
             <view class='text acea-row row-between'>
                 <view class="acea-row row-between-wrapper name_box">
-                    <view class='name line2'>{{ items.storeName }}</view>
-                    <view class="num">{{ items.sku }} x{{ items.cartNum }}</view>
+                    <view class='name line2'>{{ items.storeName || '' }}</view>
+                    <view class="num">{{ items.sku || '' }} x{{ toNumber(items.cartNum) }}</view>
                 </view>
                 <view class='info'></view>
                 <view class='money'>
@@ -34,8 +34,8 @@
                         <view class="gift-tag">璧犲搧</view>
                     </view>
                     <view class='text' style="margin-left: 20rpx;">
-                        <view class='line1'>{{ gift.giftName }}</view>
-                        <view class='infor'>x{{ gift.giftNum }}</view>
+                        <view class='line1'>{{ gift.giftName || '' }}</view>
+                        <view class='infor'>x{{ toNumber(gift.giftNum) }}</view>
                     </view>
                 </view>
             </view>
diff --git a/main.js b/main.js
index 7755f77..06ff883 100644
--- a/main.js
+++ b/main.js
@@ -228,16 +228,21 @@
 Vue.mixin(pageLog);
 import BigNumber from 'bignumber.js';
 Vue.prototype.toNumber = function(number) {
-	if (isNaN(number)) {
-		return number;
-	} else {
-		return BigNumber(number).toNumber();
+	// null / undefined / 绌哄�� / 闈炴暟瀛楃粺涓�杩斿洖 0锛岄伩鍏嶉〉闈㈡樉绀� null銆乽ndefined銆丯aN
+	if (number === null || number === undefined || number === '' || isNaN(number)) {
+		return 0;
 	}
+	const result = BigNumber(number).toNumber();
+	return isNaN(result) ? 0 : result;
 }
 
 Vue.prototype.toThousands = function(num) {
-	if (num < 1000) return num;
-	if (Number.isInteger(num)) {
+	// null / undefined / 绌哄�� / 闈炴暟瀛楃粺涓�杩斿洖 0锛岄伩鍏嶉〉闈㈡樉绀� null銆乽ndefined銆丯aN
+	if (num === null || num === undefined || num === '' || isNaN(num)) {
+		return 0;
+	}
+	if (Number(num) < 1000) return num;
+	if (Number.isInteger(Number(num))) {
 		return String(num).replace(/(?!^)(?=(\d{3})+$)/g, ',')
 	} else {
 		return String(num).replace(/(?!^)(?=(\d{3})+\.)/g, ',')
diff --git a/pages/users/order_list/index.vue b/pages/users/order_list/index.vue
index 111602b..03bc685 100644
--- a/pages/users/order_list/index.vue
+++ b/pages/users/order_list/index.vue
@@ -37,14 +37,14 @@
 						<view class='title acea-row row-between-wrapper'>
 							<view class="acea-row row-middle">
 								<text class="sign cart-color acea-row row-center-wrapper"
-									v-if="item.activityType !== '鏅��' && item.activityType !== '鏍搁攢'">{{ item.activityType
-									}}</text>
+									v-if="item.activityType && item.activityType !== '鏅��' && item.activityType !== '鏍搁攢'">{{
+										item.activityType }}</text>
 								<!-- <text class="sign cart-color acea-row row-center-wrapper" v-if="item.bargainId != 0">鐮嶄环</text>
 								<text class="sign cart-color acea-row row-center-wrapper" v-else-if="item.storeOrder.combinationId != 0">鎷煎洟</text>
 								<text class="sign cart-color acea-row row-center-wrapper" v-else-if="item.storeOrder.seckillId != 0">绉掓潃</text> -->
 								<view>{{ item.createTime }}</view>
 							</view>
-							<view class='font-color'>{{ item.orderStatus }}</view>
+							<view class='font-color'>{{ item.orderStatus || '' }}</view>
 							<!-- <view v-if="item.status?item.status.type == 0:0" class='font-color'>寰呬粯娆�</view>
 							<view v-else-if="item.status?item.status.type == 1:0 && item.storeOrder.shippingType==1" class='font-color'>寰呭彂璐�</view>
 							<view v-else-if="item.status?item.status.type == 2:0 && item.storeOrder.shippingType==1" class='font-color'>寰呮敹璐�</view>
@@ -54,8 +54,7 @@
 						</view>
 						<orderListGoods :orderInfoList="item.orderInfoList"
 							:zonePromotionList="item.zonePromotionList || []"></orderListGoods>
-						<view class='totalPrice'>鍏眥{ item.totalNum + getGiftCount(item.zonePromotionList || [])
-							}}浠跺晢鍝侊紝鎬婚噾棰�
+						<view class='totalPrice'>鍏眥{ getTotalNum(item) }}浠跺晢鍝侊紝鎬婚噾棰�
 							<text class='money font-color' v-if="getPayWay(item.payPrice, item.payCareBean) == 1">
 								<text class="color-blue">锟{ toNumber(item.payPrice) }}</text>
 								<text class="color-blue">+{{ toThousands(toNumber(item.payCareBean)) }}鎮﹀吇璞�</text>
@@ -254,6 +253,9 @@
 			});
 			return count;
 		},
+		getTotalNum(item) {
+			return (Number(item.totalNum) || 0) + this.getGiftCount(item.zonePromotionList || []);
+		},
 		getPayWay(price, payCareBean) {
 			console.log('闃挎柉椤垮彂閫佸埌鍙戦�佸湴鏂�', Number(price) > 0 && Number(payCareBean) > 0);
 			if (Number(price) > 0 && Number(payCareBean) > 0) {
@@ -312,7 +314,9 @@
 		getOrderData: function () {
 			let that = this;
 			orderData().then(res => {
-				that.$set(that, 'orderData', res.data);
+				that.$set(that, 'orderData', (res && res.data) || {});
+			}).catch(() => {
+				that.$set(that, 'orderData', {});
 			})
 		},
 		/**
@@ -447,7 +451,7 @@
 				page: that.page,
 				limit: that.limit,
 			}).then(res => {
-				let list = res.data.list || [];
+				let list = (res && res.data && res.data.list) || [];
 				let loadend = list.length < that.limit;
 				that.orderList = that.$util.SplitArray(list, that.orderList);
 				that.$set(that, 'orderList', that.orderList);

--
Gitblit v1.4.0