diff --git a/src/components/door-panel/door-panel.vue b/src/components/door-panel/door-panel.vue index c4ac7d9..4bf549a 100644 --- a/src/components/door-panel/door-panel.vue +++ b/src/components/door-panel/door-panel.vue @@ -96,22 +96,29 @@ + + + + + + {{ p.name }} + ¥{{ getDecimal(p.unit_price) }} x {{ p.qty }} + + + 订单编号 {{ orderInfo.order_no }} 商品数量 - {{ orderInfo.product_count || '-' }} 件 + {{ orderInfo.total_qty || '-' }} 件 订单金额 - ¥{{ orderInfo.total_amount || '0.00' }} + ¥{{ getDecimal(orderInfo.total_amount) }} - - 加载订单信息... - 查看订单详情 @@ -206,7 +213,8 @@ export default { this.step = 'closed'; } else if (latestStatus === 201) { this.step = 'complete'; - this.fetchOrder(flowId); + const orderId = ret.data[0].order_id || ''; + this.fetchOrder(orderId); return; } } @@ -224,13 +232,21 @@ export default { }, // 查询订单信息 - async fetchOrder(flowId) { + async fetchOrder(orderId) { + if (!orderId || !this.userId) { + this.orderLoading = false; + return; + } this.orderLoading = true; try { - const res = await get('/order/getByFlowId', { flow_id: flowId }); + const res = await get('/user/orders', { + page: 1, + limit: 1, + filter: JSON.stringify({ user_id: this.userId, order_id: orderId }) + }); const ret = res.data || {}; - if (ret.code === 0 && ret.data) { - this.orderInfo = ret.data; + if (ret.code === 0 && Array.isArray(ret.data) && ret.data.length > 0) { + this.orderInfo = ret.data[0]; } } catch (e) { console.error('[door-panel] 获取订单信息失败:', e); @@ -239,10 +255,18 @@ export default { } }, + // MongoDB Decimal128 转换 + getDecimal(val) { + if (val == null) return '0.00'; + if (typeof val === 'object' && val.$numberDecimal) return val.$numberDecimal; + return String(val); + }, + // 跳转订单详情 goOrderDetail() { if (this.orderInfo) { - const orderId = this.orderInfo.order_id || this.orderInfo.order_no; + const orderId = this.orderInfo.order_id || ''; + uni.setStorageSync('__order_detail_cache', this.orderInfo); uni.navigateTo({ url: `/pages/order/detail?order_id=${orderId}` }); } else if (this.flowId) { uni.navigateTo({ url: `/pages/order/detail?flow_id=${this.flowId}` }); @@ -519,6 +543,44 @@ export default { padding: 24rpx 30rpx; margin-top: 16rpx; } + +/* 商品列表 */ +.door-product-list { + margin-bottom: 12rpx; +} +.door-product-item { + display: flex; + align-items: center; + padding: 12rpx 0; +} +.door-product-item + .door-product-item { + border-top: 1rpx solid rgba(255, 255, 255, 0.06); +} +.door-product-img { + width: 80rpx; + height: 80rpx; + border-radius: 10rpx; + background: rgba(255, 255, 255, 0.1); + flex-shrink: 0; +} +.door-product-info { + flex: 1; + margin-left: 16rpx; + display: flex; + flex-direction: column; + gap: 6rpx; +} +.door-product-name { + font-size: 26rpx; + color: rgba(255, 255, 255, 0.85); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.door-product-price { + font-size: 24rpx; + color: rgba(255, 255, 255, 0.45); +} .door-order-row { display: flex; justify-content: space-between; diff --git a/src/pages/order/detail.vue b/src/pages/order/detail.vue index 5f4c897..9627213 100644 --- a/src/pages/order/detail.vue +++ b/src/pages/order/detail.vue @@ -146,7 +146,13 @@ export default { }, onLoad(options) { this.orderId = options.order_id || ''; - if (this.orderId) { + // 优先从缓存读取(订单列表/交易完成页跳转时已存入) + const cached = uni.getStorageSync('__order_detail_cache'); + if (cached) { + this.order = cached; + this.orderId = cached.order_id || this.orderId; + uni.removeStorageSync('__order_detail_cache'); + } else if (this.orderId) { this.fetchOrder(); } }, diff --git a/src/pages/order/order.vue b/src/pages/order/order.vue index 8261b2d..789be2c 100644 --- a/src/pages/order/order.vue +++ b/src/pages/order/order.vue @@ -335,6 +335,7 @@ export default { }, goToDetail(order) { + uni.setStorageSync('__order_detail_cache', order); uni.navigateTo({ url: `/pages/order/detail?order_id=${order.order_id}` }); }, handlePay(order) {