优化后台订单列表展示并支持商品标题与SKU规格

This commit is contained in:
yml2213
2026-09-10 09:39:19 +08:00
parent fe2a28454d
commit 4544622cb3
13 changed files with 655 additions and 51 deletions
@@ -16,6 +16,7 @@ import { listTaskEventsByTaskId } from '../../repositories/task-event-repo.js'
import type { JsonRecord } from '../../types/json.js'
import {
listKuaishouIndustryVouchersByOid,
listKuaishouIndustryVouchersByOids,
listKuaishouIndustryVouchersByTaskId,
} from '../../repositories/kuaishou-industry-voucher-repo.js'
import { listCloudtentaclesSources } from '../platforms/cloudtentacles/source-config-service.js'
@@ -52,6 +53,7 @@ import {
resolveAdminTaskScreenshotUrl,
resolveDisplayShopName,
resolveOrderItemDeliveryMode,
resolveOrderItemSkuNick,
resolveOrderItemTitle,
} from './admin-read-shared-helpers.js'
import { mapAdminOrderListItem, summarizeOrderItems } from './admin-order-read-helpers.js'
@@ -96,18 +98,22 @@ export async function getAdminOrders(
})
const orderIds = items.map((item) => item.id)
const [orderItems, tasks] = await Promise.all([
const oids = items.map((item) => item.platform_order_id).filter(Boolean)
const [orderItems, tasks, vouchers] = await Promise.all([
listOrderItemsByOrderIds(orderIds),
listTasksByOrderIds(orderIds),
listKuaishouIndustryVouchersByOids(oids),
])
const orderItemsByOrderId = groupRowsByOrderId(orderItems)
const tasksByOrderId = groupRowsByOrderId(tasks)
const vouchersByOid = groupRowsByOid(vouchers)
return {
items: items.map((item) =>
mapAdminOrderListItem(item, {
orderItems: orderItemsByOrderId.get(item.id) || [],
tasks: tasksByOrderId.get(item.id) || [],
vouchers: vouchersByOid.get(item.platform_order_id) || [],
}),
),
pagination: { page, pageSize, total },
@@ -124,6 +130,16 @@ function groupRowsByOrderId<T extends { order_id: number }>(rows: T[]): Map<numb
return grouped
}
function groupRowsByOid<T extends { oid: string }>(rows: T[]): Map<string, T[]> {
const grouped = new Map<string, T[]>()
for (const row of rows) {
const group = grouped.get(row.oid) || []
group.push(row)
grouped.set(row.oid, group)
}
return grouped
}
export async function getAdminOrderDetail(
orderId: AdminEntityIdInput,
session: AdminViewerSessionInput | null = null,
@@ -142,7 +158,9 @@ export async function getAdminOrderDetail(
listTasksByOrderId(order.id),
])
const kuaishouIndustryVouchers = await listKuaishouIndustryVouchersByOid(order.platform_order_id)
const itemSummary = summarizeOrderItems(items)
const itemSummary = summarizeOrderItems(items, order, kuaishouIndustryVouchers)
const orderItemTitle = resolveOrderItemTitle(items[0], order, kuaishouIndustryVouchers)
const orderSkuNick = resolveOrderItemSkuNick(items[0], order, kuaishouIndustryVouchers)
const viewerContext = createAdminViewerContext(session)
return {
@@ -165,6 +183,8 @@ export async function getAdminOrderDetail(
createdAt: order.created_at,
updatedAt: order.updated_at,
itemSummary,
itemTitle: orderItemTitle,
skuNick: orderSkuNick,
rawPayload:
order.raw_payload_json && typeof order.raw_payload_json === 'object'
? order.raw_payload_json
@@ -175,7 +195,8 @@ export async function getAdminOrderDetail(
orderItemId: item.id,
skuCode: item.sku_code,
skuName: item.sku_name,
itemTitle: resolveOrderItemTitle(item),
itemTitle: resolveOrderItemTitle(item, order, kuaishouIndustryVouchers),
skuNick: resolveOrderItemSkuNick(item, order, kuaishouIndustryVouchers),
quantity: item.quantity,
deliveryMode: resolveOrderItemDeliveryMode(tasks, item.id),
spec: