diff --git a/src/pages/Order/Items/index.tsx b/src/pages/Order/Items/index.tsx index 945ddbf..4106fd2 100644 --- a/src/pages/Order/Items/index.tsx +++ b/src/pages/Order/Items/index.tsx @@ -7,6 +7,7 @@ import dayjs from 'dayjs'; import { ordercontrollerGetordersales } from '@/servers/api/order'; import { sitecontrollerAll } from '@/servers/api/site'; +<<<<<<< HEAD // 列表行数据结构(订单商品聚合) interface OrderItemAggRow { externalProductId: number; // 商品ID(来自 WooCommerce 产品ID) @@ -18,13 +19,30 @@ interface OrderItemAggRow { secondOrderCount: number; // 客户第二次购买次数(该商品) thirdOrderCount: number; // 客户第三次购买次数(该商品) moreThirdOrderCount: number; // 客户超过三次购买次数(该商品) +======= +// 列表行数据结构(订单商品聚合) +interface OrderItemAggRow { + externalProductId: number; // 商品ID(来自 WooCommerce 产品ID) + externalVariationId: number; // 变体ID(来自 WooCommerce 变体ID) + name: string; // 商品名称 + totalQuantity: number; // 总售出数量(时间范围内) + totalOrders: number; // 涉及订单数(去重) + firstOrderCount: number; // 客户首单次数(该商品) + secondOrderCount: number; // 客户第二次购买次数(该商品) + thirdOrderCount: number; // 客户第三次购买次数(该商品) + moreThirdOrderCount: number; // 客户超过三次购买次数(该商品) +>>>>>>> 90ea0f5 (feat(订单): 添加关联订单显示功能并创建订单商品和订阅订单页面) } const OrderItemsPage: React.FC = () => { const actionRef = useRef(); const { message } = App.useApp(); +<<<<<<< HEAD // 列配置(中文标题,符合当前项目风格;显示英文默认语言可后续走国际化) +======= + // 列配置(中文标题,符合当前项目风格;显示英文默认语言可后续走国际化) +>>>>>>> 90ea0f5 (feat(订单): 添加关联订单显示功能并创建订单商品和订阅订单页面) const columns: ProColumns[] = [ { title: '商品名称', @@ -85,7 +103,11 @@ const OrderItemsPage: React.FC = () => { dataIndex: 'siteId', valueType: 'select', request: async () => { +<<<<<<< HEAD // 拉取站点列表(后台 /site/all) +======= + // 拉取站点列表(后台 /site/all) +>>>>>>> 90ea0f5 (feat(订单): 添加关联订单显示功能并创建订单商品和订阅订单页面) const { data = [] } = await sitecontrollerAll(); return (data || []).map((item: any) => ({ label: item.siteName, value: item.id })); }, @@ -103,12 +125,20 @@ const OrderItemsPage: React.FC = () => { }, ]; +<<<<<<< HEAD // 表格请求方法:调用 /order/getOrderSales 接口并设置 isSource=true 获取订单项聚合 +======= + // 表格请求方法:调用 /order/getOrderSales 接口并设置 isSource=true 获取订单项聚合 +>>>>>>> 90ea0f5 (feat(订单): 添加关联订单显示功能并创建订单商品和订阅订单页面) const request: ProTableProps['request'] = async (params:any) => { try { const { current = 1, pageSize = 10, siteId, name } = params as any; const [startDate, endDate] = (params as any).dateRange || []; +<<<<<<< HEAD // 调用后端接口(isSource=true 表示按订单项聚合) +======= + // 调用后端接口(isSource=true 表示按订单项聚合) +>>>>>>> 90ea0f5 (feat(订单): 添加关联订单显示功能并创建订单商品和订阅订单页面) const resp = await ordercontrollerGetordersales({ current, pageSize, diff --git a/src/pages/Order/List/index.tsx b/src/pages/Order/List/index.tsx index c45abaf..fd10a92 100644 --- a/src/pages/Order/List/index.tsx +++ b/src/pages/Order/List/index.tsx @@ -902,7 +902,27 @@ const Detail: React.FC<{
    {record?.items?.map((item: any) => (
  • +<<<<<<< HEAD {item.name}:{item.quantity} +======= + {item.name}:{item.quantity} +
  • + ))} +
+ ); + }} + /> + {/* TODO 显示 related order */} + { + return ( +
    + {record?.related?.map((item: any) => ( +
  • + {JSON.stringify(item)} +>>>>>>> 90ea0f5 (feat(订单): 添加关联订单显示功能并创建订单商品和订阅订单页面)
  • ))}
diff --git a/src/pages/Subscription/List/index.tsx b/src/pages/Subscription/List/index.tsx index d1ac189..f6ad26a 100644 --- a/src/pages/Subscription/List/index.tsx +++ b/src/pages/Subscription/List/index.tsx @@ -35,6 +35,14 @@ const ListPage: React.FC = () => { // 表格操作引用:用于在同步后触发表格刷新 const actionRef = useRef(); const { message } = App.useApp(); +<<<<<<< HEAD +======= + + // 关联订单抽屉状态 + const [drawerOpen, setDrawerOpen] = useState(false); + const [drawerTitle, setDrawerTitle] = useState('详情'); + const [relatedOrders, setRelatedOrders] = useState([]); +>>>>>>> 90ea0f5 (feat(订单): 添加关联订单显示功能并创建订单商品和订阅订单页面) // 关联订单抽屉状态 const [drawerOpen, setDrawerOpen] = useState(false); @@ -144,14 +152,22 @@ const ListPage: React.FC = () => { message.warning('该订阅缺少父订单号'); return; } +<<<<<<< HEAD // 通过父订单号查询关联订单(模糊匹配) +======= + // 通过父订单号查询关联订单(模糊匹配) +>>>>>>> 90ea0f5 (feat(订单): 添加关联订单显示功能并创建订单商品和订阅订单页面) const resp = await request('/order/getOrderByNumber', { method: 'POST', data: { number: parentNumber }, }); const { success, data, message: errMsg } = resp as any; if (!success) throw new Error(errMsg || '获取失败'); +<<<<<<< HEAD // 仅保留与父订单号完全一致的订单(避免模糊匹配误入) +======= + // 仅保留与父订单号完全一致的订单(避免模糊匹配误入) +>>>>>>> 90ea0f5 (feat(订单): 添加关联订单显示功能并创建订单商品和订阅订单页面) const candidates: any[] = (Array.isArray(data) ? data : []).filter( (c: any) => String(c?.externalOrderId) === parentNumber ); @@ -216,7 +232,11 @@ const ListPage: React.FC = () => { // 工具栏:订阅同步入口 toolBarRender={() => []} /> +<<<<<<< HEAD {/* 关联订单抽屉:展示订单号、关系、时间、状态与金额 */} +======= + {/* 关联订单抽屉:展示订单号、关系、时间、状态与金额 */} +>>>>>>> 90ea0f5 (feat(订单): 添加关联订单显示功能并创建订单商品和订阅订单页面) { >>>>>> 90ea0f5 (feat(订单): 添加关联订单显示功能并创建订单商品和订阅订单页面) />
{item?.date_created ? dayjs(item.date_created).format('YYYY-MM-DD HH:mm') : '-'} diff --git a/src/pages/Subscription/Orders/index.tsx b/src/pages/Subscription/Orders/index.tsx index bc4a9bb..6086b4a 100644 --- a/src/pages/Subscription/Orders/index.tsx +++ b/src/pages/Subscription/Orders/index.tsx @@ -2,11 +2,19 @@ import React, { useRef, useState } from 'react'; import { PageContainer } from '@ant-design/pro-layout'; import type { ProColumns, ActionType, ProTableProps } from '@ant-design/pro-components'; import { ProTable } from '@ant-design/pro-components'; +<<<<<<< HEAD import { App, Tag, Button } from 'antd'; import dayjs from 'dayjs'; import { ordercontrollerGetorders } from '@/servers/api/order'; import OrderDetailDrawer from './OrderDetailDrawer'; import { sitecontrollerAll } from '@/servers/api/site'; +======= +import { App, Tag, Button, Drawer, List } from 'antd'; +import dayjs from 'dayjs'; +import { ordercontrollerGetorders } from '@/servers/api/order'; +import { sitecontrollerAll } from '@/servers/api/site'; +import { request } from 'umi'; +>>>>>>> 90ea0f5 (feat(订单): 添加关联订单显示功能并创建订单商品和订阅订单页面) interface OrderItemRow { id: number; @@ -22,11 +30,20 @@ interface OrderItemRow { const OrdersPage: React.FC = () => { const actionRef = useRef(); const { message } = App.useApp(); +<<<<<<< HEAD // 抽屉状态:改为复用订单详情抽屉组件 const [detailOpen, setDetailOpen] = useState(false); const [detailRecord, setDetailRecord] = useState(null); const [detailOrderId, setDetailOrderId] = useState(null); const Noop: React.FC = () => null; +======= + // 抽屉状态:用于展示与订阅相关的订单详情(含行项目meta) + const [drawerOpen, setDrawerOpen] = useState(false); + const [drawerTitle, setDrawerTitle] = useState('订阅关联'); + const [drawerItems, setDrawerItems] = useState([]); + const [drawerMeta, setDrawerMeta] = useState([]); + const [isSubscription, setIsSubscription] = useState(false); +>>>>>>> 90ea0f5 (feat(订单): 添加关联订单显示功能并创建订单商品和订阅订单页面) const columns: ProColumns[] = [ { @@ -84,10 +101,48 @@ const OrdersPage: React.FC = () => { render: (_, row) => (
} + dataSource={drawerItems} + renderItem={(item: any) => ( + + +
+ {(Array.isArray(item?.meta_data) ? item.meta_data : []).map((m: any) => ( + {`${m?.key}: ${m?.value}`} + ))} +
+
+ )} + /> + {/* 订单级元数据 */} + 订单元数据} + dataSource={drawerMeta} + renderItem={(m: any) => ( + + {`${m?.key}: ${m?.value}`} + + )} + /> +
+>>>>>>> 90ea0f5 (feat(订单): 添加关联订单显示功能并创建订单商品和订阅订单页面) ); };