diff --git a/src/pages/Order/List/index.tsx b/src/pages/Order/List/index.tsx index d6f5569..a0b4cce 100644 --- a/src/pages/Order/List/index.tsx +++ b/src/pages/Order/List/index.tsx @@ -80,8 +80,7 @@ import { Tag, } from 'antd'; import Item from 'antd/es/list/Item'; -import RelatedOrders from './RelatedOrders'; -import OrderDetailDrawer from './OrderDetailDrawer'; +import RelatedOrders from '../../Subscription/Orders/RelatedOrders'; import React, { useMemo, useRef, useState } from 'react'; import { printPDF } from '@/utils/util'; @@ -90,9 +89,6 @@ const ListPage: React.FC = () => { const [activeKey, setActiveKey] = useState('all'); const [count, setCount] = useState([]); const [activeLine, setActiveLine] = useState(-1); - const [detailOpen, setDetailOpen] = useState(false); - const [detailRecord, setDetailRecord] = useState(null); - const [detailOrderId, setDetailOrderId] = useState(null); const tabs: TabsProps['items'] = useMemo(() => { const total = count.reduce((acc, cur) => acc + Number(cur.count), 0); const tabs = [ @@ -316,31 +312,13 @@ const ListPage: React.FC = () => { ) : ( <> )} - - {detailRecord && detailOrderId !== null && ( - setDetailOpen(false)} - tableRef={actionRef} - orderId={detailOrderId as number} - record={detailRecord as any} - setActiveLine={setActiveLine} - OrderNoteComponent={OrderNote} - SalesChangeComponent={SalesChange} - /> - )} + record={record} + tableRef={actionRef} + orderId={record.id as number} + setActiveLine={setActiveLine} + /> = ({ }) => { const { message } = App.useApp(); const ref = useRef(); - const [detail, setDetail] = useState(null); // 中文注释:加载详情数据(与 index.tsx 中完全保持一致) const initRequest = async () => { - const { data, success }: API.OrderDetailRes = - await ordercontrollerGetorderdetail({ orderId }); - if (!success || !data) return null; - // 中文注释:销售项合并 SKU,展示数量汇总 - data.sales = data.sales?.reduce( - (acc: API.OrderSale[], cur: API.OrderSale) => { - const idx = acc.findIndex((v: any) => v.productId === cur.productId); - if (idx === -1) acc.push(cur); - else acc[idx].quantity += cur.quantity; - return acc; - }, - [], - ); - return data; + const { data, success }: API.OrderDetailRes = await ordercontrollerGetorderdetail({ orderId }); + if (!success || !data) return { data: {} } as any; + data.sales = data.sales?.reduce((acc: API.OrderSale[], cur: API.OrderSale) => { + const idx = acc.findIndex((v: any) => v.productId === cur.productId); + if (idx === -1) acc.push(cur); + else acc[idx].quantity += cur.quantity; + return acc; + }, []); + return { data } as any; }; useEffect(() => { - (async () => { - if (open && orderId) { - try { - const data = await initRequest(); - setDetail(data); - } catch (e) { - setDetail(null); - } - } else { - setDetail(null); - } - })(); - }, [open, orderId]); + if (open && record?.id) { + setActiveLine(record.id as number); + } + }, [open, record?.id]); return ( = ({ : []), ]} > - {(() => { setActiveLine(record.id as number); return null; })()} - {/** 中文注释:优先使用详情数据,其次使用列表行数据 */} - {(() => { - const drec: any = detail || record; - {/* 中文注释:基本信息展示(保持原有格式) */} - return (<> -
- - {drec?.orderStatus} - {formatSource(drec.source_type, drec.utm_source)} - -
- - {/* 中文注释:原始订单行项目 */} -
-
原始订单
- {Array.isArray((drec as any)?.items) && drec.items.length > 0 ? ( + + { + const { data = [] } = await sitecontrollerAll(); + return data.map((item) => ({ label: item.siteName, value: item.id })); + }} /> + + + + + ( +
{r?.shipping?.phone || r?.billing?.phone || '-'}
+ )} /> + + + + formatSource(r.source_type, r.utm_source)} /> + + + + ( +
+
company:{r?.shipping?.company || r?.billing?.company || '-'}
+
first_name:{r?.shipping?.first_name || r?.billing?.first_name || '-'}
+
last_name:{r?.shipping?.last_name || r?.billing?.last_name || '-'}
+
country:{r?.shipping?.country || r?.billing?.country || '-'}
+
state:{r?.shipping?.state || r?.billing?.state || '-'}
+
city:{r?.shipping?.city || r?.billing?.city || '-'}
+
postcode:{r?.shipping?.postcode || r?.billing?.postcode || '-'}
+
phone:{r?.shipping?.phone || r?.billing?.phone || '-'}
+
address_1:{r?.shipping?.address_1 || r?.billing?.address_1 || '-'}
+
+ )} /> + (
    - {drec.items.map((item: any) => ( -
  • - {item.name}:{item.quantity} -
  • + {(r?.items || []).map((item: any) => ( +
  • {item.name}:{item.quantity}
  • ))}
- ) : ( - - )} -
- - {/* 中文注释:关联(订阅/订单),使用已存在的 RelatedOrders 组件 */} -
-
关联
- -
- - {/* 中文注释:订单内容(销售项) */} -
-
订单内容
- {Array.isArray((drec as any)?.sales) && drec.sales.length > 0 ? ( + )} /> + ( + + )} /> + (
    - {drec.sales.map((item: any) => ( -
  • - {item.name}:{item.quantity} -
  • + {(r?.sales || []).map((item: any) => ( +
  • {item.name}:{item.quantity}
  • ))}
- ) : ( - - )} -
- - {/* 中文注释:备注 */} -
-
备注
- {Array.isArray((drec as any)?.notes) && drec.notes.length > 0 ? ( -
- {drec.notes.map((note: any) => ( -
-
- {note.username} - {note.createdAt} + )} /> + ( + + )} /> + { + if (!r.notes || r.notes.length === 0) return (); + return ( +
+ {r.notes.map((note: any) => ( +
+
+ {note.username} + {note.createdAt} +
+
{note.content}
-
{note.content}
-
- ))} -
- ) : ( - - )} -
- - {/* 中文注释:物流信息 */} -
-
物流信息
- {Array.isArray((drec as any)?.shipment) && drec.shipment.length > 0 ? ( -
- {(drec as any).shipment.map((v: any) => ( - - {v.tracking_provider} - {v.primary_tracking_number} - { - try { - await navigator.clipboard.writeText(v.tracking_url); - message.success('复制成功!'); - } catch (err) { - message.error('复制失败!'); - } - }} - /> - - } - actions={ - v.state === 'waiting-for-scheduling' || v.state === 'waiting-for-transit' - ? [ - { - try { - const { success, message: errMsg } = await logisticscontrollerDelshipment({ id: v.id }); - if (!success) throw new Error(errMsg); - tableRef.current?.reload(); - } catch (error: any) { - message.error(error.message); - } - }} - > - 取消运单 - , - ] - : [] - } - > -
订单号: {Array.isArray(v?.orderIds) ? v.orderIds.join(',') : '-'}
- {Array.isArray(v?.items) && - v.items.map((item: any) => ( -
- {item.name}: {item.quantity} -
+ ))} +
+ ); + }} /> + { + if (!r.shipment || r.shipment.length === 0) return (); + return ( +
+ {r.shipment.map((v: any) => ( + + {v.tracking_provider} + {v.primary_tracking_number} + { + try { await navigator.clipboard.writeText(v.tracking_url); message.success('复制成功!'); } + catch { message.error('复制失败!'); } + }} /> + } + actions={ (v.state === 'waiting-for-scheduling' || v.state === 'waiting-for-transit') ? [ + { + try { const { success, message: errMsg } = await logisticscontrollerDelshipment({ id: v.id }); if (!success) throw new Error(errMsg); tableRef.current?.reload(); ref.current?.reload?.(); } + catch (error: any) { message.error(error.message); } + }}> + 取消运单 + + ] : [] } + > +
订单号: {Array.isArray(v?.orderIds) ? v.orderIds.join(',') : '-'}
+ {Array.isArray(v?.items) && v.items.map((item: any) => ( +
{item.name}: {item.quantity}
))} -
- ))} -
- ) : ( - - )} -
- - {/* 中文注释:换货(外部传入组件) */} -
- -
- ); - })()} + + ))} +
+ ); + }} /> + ); }; diff --git a/src/pages/Order/List/RelatedOrders.tsx b/src/pages/Subscription/Orders/RelatedOrders.tsx similarity index 100% rename from src/pages/Order/List/RelatedOrders.tsx rename to src/pages/Subscription/Orders/RelatedOrders.tsx