diff --git a/src/pages/Order/List/index.tsx b/src/pages/Order/List/index.tsx index c8c69f3..688d954 100644 --- a/src/pages/Order/List/index.tsx +++ b/src/pages/Order/List/index.tsx @@ -22,6 +22,7 @@ import { ordercontrollerRefundorder, ordercontrollerSyncorder, ordercontrollerSyncorderbyid, + ordercontrollerUpdateOrderItems, } from '@/servers/api/order'; import { productcontrollerSearchproducts } from '@/servers/api/product'; import { sitecontrollerAll } from '@/servers/api/site'; @@ -66,6 +67,7 @@ import { Drawer, Dropdown, Empty, + message, Popconfirm, Radio, Row, @@ -861,6 +863,18 @@ const Detail: React.FC<{ ); }} /> + { + return ( + + ) + }} + /> - // value && value.length > 0 - // ? Promise.resolve() - // : Promise.reject('至少需要一个商品'), - // }, - // ]} + // rules={[ + // { + // required: true, + // message: '至少需要一个商品', + // validator: (_, value) => + // value && value.length > 0 + // ? Promise.resolve() + // : Promise.reject('至少需要一个商品'), + // }, + // ]} > @@ -1738,7 +1752,8 @@ const Shipping: React.FC<{ @@ -1803,6 +1818,122 @@ const Shipping: React.FC<{ ); }; +const SalesChange: React.FC<{ + id: number; + detailRef?: React.MutableRefObject; + reShipping?: boolean; +}> = ({ id, detailRef }) => { + const [options, setOptions] = useState([]); + const formRef = useRef(); + + + return ( + + + 换货 + + } + request={async () => { + const { data, success }: API.OrderDetailRes = + await ordercontrollerGetorderdetail({ + orderId: id, + }); + if (!success || !data) return {}; + data.sales = data.sales?.reduce((acc: API.OrderSale[], cur: API.OrderSale) => { + let idx = acc.findIndex((v: any) => v.productId === cur.productId); + if (idx === -1) { + acc.push(cur); + } else { + acc[idx].quantity += cur.quantity; + } + return acc; + }, + [], + ); + // setOptions( + // data.sales?.map((item) => ({ + // label: item.name, + // value: item.sku, + // })) || [], + // ); + return { ...data }; + }} + onFinish={async (formData: any) => { + const { sales } = formData; + const res = await ordercontrollerUpdateOrderItems(id, sales); + if (!res.success) { + message.error(`更新货物信息失败: ${res.message}`); + return false; + } + message.success('更新成功') + detailRef?.current?.reload(); + return true; + }} + > + + + { + if (!keyWords || keyWords.length < 2) return options; + try { + const { data } = await productcontrollerSearchproducts({ + name: keyWords, + }); + return ( + data?.map((item) => { + return { + label: `${item.name} - ${item.nameCn}`, + value: item?.sku, + }; + }) || options + ); + } catch (error) { + return options; + } + }} + name="sku" + label="产品" + placeholder="请选择产品" + tooltip="至少输入3个字符" + fieldProps={{ + showSearch: true, + filterOption: false, + }} + debounceTime={300} // 防抖,减少请求频率 + rules={[{ required: true, message: '请选择产品' }]} + /> + + + + + ); +} + const CreateOrder: React.FC<{ tableRef?: React.MutableRefObject; }> = ({ tableRef }) => { diff --git a/src/servers/api/order.ts b/src/servers/api/order.ts index 2a393e3..92268b8 100644 --- a/src/servers/api/order.ts +++ b/src/servers/api/order.ts @@ -208,3 +208,19 @@ export async function ordercontrollerSyncorderbyid( ...(options || {}), }); } + +/** 此处后端没有提供注释 POST /order/updateOrderItems/${param0} */ +export async function ordercontrollerUpdateOrderItems( + orderId: number, + body: API.ShipmentSkuDTO, + options?: { [key: string]: any }, +) { + return request(`/order/updateOrderItems/${orderId}`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + data: body, + ...(options || {}), + }); +} diff --git a/src/servers/api/typings.d.ts b/src/servers/api/typings.d.ts index 18baf0f..8881b66 100644 --- a/src/servers/api/typings.d.ts +++ b/src/servers/api/typings.d.ts @@ -993,6 +993,10 @@ declare namespace API { orderIds?: number[]; }; + type ShipmentSkuDTO = { + sales?: OrderSale[]; + } + type ShippingAddress = { id?: number; name?: string;