From 18bd5497cd6276a9d955dcd733c098679886f449 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E9=B9=8F?= Date: Tue, 7 Jul 2026 17:56:56 +0800 Subject: [PATCH] feat: present miniapp orders with formatted status --- miniapp/miniprogram/pages/orders/index.js | 31 +------------ miniapp/miniprogram/pages/orders/index.wxml | 6 +-- miniapp/miniprogram/utils/orderPresenter.js | 43 +++++++++++++++++++ .../miniprogram/utils/orderPresenter.test.js | 17 ++++++++ 4 files changed, 65 insertions(+), 32 deletions(-) create mode 100644 miniapp/miniprogram/utils/orderPresenter.js create mode 100644 miniapp/miniprogram/utils/orderPresenter.test.js diff --git a/miniapp/miniprogram/pages/orders/index.js b/miniapp/miniprogram/pages/orders/index.js index e7d482c..f975db7 100644 --- a/miniapp/miniprogram/pages/orders/index.js +++ b/miniapp/miniprogram/pages/orders/index.js @@ -2,6 +2,7 @@ const { listGoodsOrders } = require('../../api/orderApi') const { listExpressOrders } = require('../../api/expressApi') const { listGroupBuyOrders } = require('../../api/groupBuyApi') const { statusText } = require('../../utils/request') +const { toOrderCards } = require('../../utils/orderPresenter') Page({ data: { @@ -25,35 +26,7 @@ Page({ listGroupBuyOrders().catch(() => []) ]) .then(([goodsOrders, expressOrders, groupBuyOrders]) => { - const orders = [] - ;(goodsOrders || []).forEach((item) => orders.push({ - id: item.id, - type: 'goods', - typeText: '商品订单', - orderNo: item.orderNo, - title: item.orderNo, - amountCent: item.payableAmountCent, - status: item.status - })) - ;(expressOrders || []).forEach((item) => orders.push({ - id: item.id, - type: 'express', - typeText: '快递代取', - orderNo: item.orderNo, - title: item.expressCompany + ' ' + item.pickupCode, - amountCent: item.feeCent, - status: item.status - })) - ;(groupBuyOrders || []).forEach((item) => orders.push({ - id: item.id, - type: 'group', - typeText: '团购订单', - orderNo: item.orderNo, - title: item.groupBuyTitle, - amountCent: item.amountCent, - status: item.status - })) - this.setData({ orders }) + this.setData({ orders: toOrderCards({ goodsOrders, expressOrders, groupBuyOrders }) }) }) .catch((error) => wx.showToast({ title: error.message, icon: 'none' })) .finally(() => this.setData({ loading: false })) diff --git a/miniapp/miniprogram/pages/orders/index.wxml b/miniapp/miniprogram/pages/orders/index.wxml index efad5e7..b3bba8c 100644 --- a/miniapp/miniprogram/pages/orders/index.wxml +++ b/miniapp/miniprogram/pages/orders/index.wxml @@ -6,11 +6,11 @@ {{item.title}} {{item.typeText}} {{item.orderNo}} - {{item.status}} + {{item.statusText}} - 状态:{{item.status}} - ¥{{item.amountCent / 100}} + 状态:{{item.statusText}} + {{item.amountText}} 暂无订单 diff --git a/miniapp/miniprogram/utils/orderPresenter.js b/miniapp/miniprogram/utils/orderPresenter.js new file mode 100644 index 0000000..0fb3450 --- /dev/null +++ b/miniapp/miniprogram/utils/orderPresenter.js @@ -0,0 +1,43 @@ +const { statusText, yuan } = require('./request') + +function toOrderCards({ goodsOrders = [], expressOrders = [], groupBuyOrders = [] }) { + const orders = [] + ;(goodsOrders || []).forEach((item) => orders.push({ + id: item.id, + type: 'goods', + typeText: '商品订单', + orderNo: item.orderNo, + title: item.orderNo, + amountCent: item.payableAmountCent, + amountText: '¥' + yuan(item.payableAmountCent), + status: item.status, + statusText: statusText(item.status) + })) + ;(expressOrders || []).forEach((item) => orders.push({ + id: item.id, + type: 'express', + typeText: '快递代取', + orderNo: item.orderNo, + title: item.expressCompany + ' ' + item.pickupCode, + amountCent: item.feeCent, + amountText: '¥' + yuan(item.feeCent), + status: item.status, + statusText: statusText(item.status) + })) + ;(groupBuyOrders || []).forEach((item) => orders.push({ + id: item.id, + type: 'group', + typeText: '团购订单', + orderNo: item.orderNo, + title: item.groupBuyTitle, + amountCent: item.amountCent, + amountText: '¥' + yuan(item.amountCent), + status: item.status, + statusText: statusText(item.status) + })) + return orders +} + +module.exports = { + toOrderCards +} diff --git a/miniapp/miniprogram/utils/orderPresenter.test.js b/miniapp/miniprogram/utils/orderPresenter.test.js new file mode 100644 index 0000000..7c6cdbf --- /dev/null +++ b/miniapp/miniprogram/utils/orderPresenter.test.js @@ -0,0 +1,17 @@ +const { toOrderCards } = require('./orderPresenter') + +describe('toOrderCards', () => { + test('normalizes mixed orders for list display', () => { + const cards = toOrderCards({ + goodsOrders: [{ id: 1, orderNo: 'GO00000001', payableAmountCent: 1590, status: 'PENDING_DELIVERY' }], + expressOrders: [{ id: 2, orderNo: 'EO00000001', expressCompany: 'SF', pickupCode: 'A1', feeCent: 400, status: 'PENDING_PICKUP' }], + groupBuyOrders: [{ id: 3, orderNo: 'GB00000001', groupBuyTitle: 'Today eggs', amountCent: 5980, status: 'PENDING_CONFIRM' }] + }) + + expect(cards).toEqual([ + expect.objectContaining({ id: 1, type: 'goods', title: 'GO00000001', amountText: '¥15.90', statusText: '待配送' }), + expect.objectContaining({ id: 2, type: 'express', title: 'SF A1', amountText: '¥4.00', statusText: '待自提' }), + expect.objectContaining({ id: 3, type: 'group', title: 'Today eggs', amountText: '¥59.80', statusText: '待确认' }) + ]) + }) +})