import { type ActionType, ProCard, type ProColumns, } from '@ant-design/pro-components'; import { Avatar, Badge, Button, Divider, Input, message, Space, Statistic, } from 'antd'; import React, { useCallback, useEffect, useRef, useState } from 'react'; import ConfigurableDrawerForm, { type ConfigurableDrawerFormRef, } from '@/components/DrawerForm'; import EnhancedProTable from '@/components/EnhancedProTable'; import { baseOrderColumns } from './config'; const { Search } = Input; import { DownOutlined, UpOutlined, UserOutlined } from '@ant-design/icons'; import PopconfirmForm, { type PopconfirmFormRef, } from '@/components/PopconfirmForm'; import { mapOrderStatusToBadgeStatus, OrderStatus, OrderStatusLabels, } from '@/constants/trade'; import { getTradeOrderPage, getTradeSummary, type TradeOrderPageRespVO, type TradeReq, type TradeSummaryRespVO, updateOrderRemark, } from '@/services/trade/order'; import CancleOrderModal from './components/cancleOrderModal'; import DetailCom from './detail'; const OrderListItem: React.FC<{ orderStatus: number }> = (props) => { const { orderStatus } = props; const tableRef = useRef(null); const configurableDrawerRef = useRef(null); const [modalData, setModalData] = useState(); const [isShowTotal, setIsShowTotal] = useState(false); const popconfirmFormRef = useRef(null); const [summary, setSummary] = useState(); const [cancleOrderVisible, setCancleOrderVisible] = useState(false); const fetchSummary = async () => { const res = await getTradeSummary(); setSummary(res); }; useEffect(() => { fetchSummary(); }, []); const onFetch = async ( params: TradeReq & { pageSize: number; current: number; }, ) => { const data = await getTradeOrderPage({ ...params, orderStatus: props?.orderStatus ? props?.orderStatus : undefined, pageNo: params.current, pageSize: params.pageSize, }); return { data: data.list, success: true, total: data.total, }; }; const handleDetail = useCallback( (record: TradeOrderPageRespVO) => { setModalData(record); configurableDrawerRef.current?.open(record); }, [modalData], ); const handleOrder = useCallback( (type: string, record?: TradeOrderPageRespVO) => { setModalData(record); if (type === 'order') { setCancleOrderVisible(true); } if (type === 'order') { setCancleOrderVisible(true); } // await updateTradeOrder(values.id); }, [], ); const handleUpdate = async (values: TradeOrderPageRespVO, id?: number) => { try { await updateOrderRemark({ remark: values.userRemark || '', id: id }); tableRef.current?.reload(); return true; } finally { message.success('更新成功'); } // await updateTradeOrder(values.id); }; const actionColumns: ProColumns = { title: '操作', dataIndex: 'option', valueType: 'option', fixed: 'right', width: 100, render: (_text: React.ReactNode, record: TradeOrderPageRespVO) => [
{record.orderStatus !== OrderStatus.Cancelled && ( handleOrder('order', record)}> 取消订单 )} {record.orderStatus === OrderStatus.PendingService && ( handleOrder('service', record)}> 开始服务 )} {record.orderStatus === OrderStatus.PendingConfirmation && ( handleOrder('service', record)}> 接单确定 )} {(record.orderStatus as number) > OrderStatus.PendingPayment && record.orderStatus !== OrderStatus.Cancelled && ( handleOrder('sales', record)}> 新建售后 )} {record.orderStatus === OrderStatus.PendingAcceptance && ( handleOrder('sales', record)}> 服务上报 )} handleDetail(record)}> 订单详情 {record.orderStatus === OrderStatus.PendingPayment && ( handleUpdate(value, record.id)} > popconfirmFormRef.current?.open(record)} > 添加备注 )}
, ], }; const onClose = useCallback(() => { configurableDrawerRef.current?.close(); }, []); const handleRow = (record: TradeOrderPageRespVO) => { return { 'data-record': JSON.stringify(record), className: 'order-row-with-info', }; }; const components = { body: { row: (props: any) => { const { children, ...restProps } = props; const record = props['data-record'] ? JSON.parse(props['data-record']) : undefined; return ( <> {record && ( {record.orderCategoryName} {record.createTime} {record.orderNum} {record.payType} } src={record.shopLogo} /> {/* */} {record.shopName || '-'} {record.userAvatar ? ( ) : ( } /> )} {record.userNickName || record.userName} {record.userMobile} )} {children} ); }, }, header: { cell: (props: any) => { const { children, ...restProps } = props; return {children}; }, }, }; const columns = [...baseOrderColumns, actionColumns]; const handleIsTotal = useCallback(() => { setIsShowTotal(!isShowTotal); }, [isShowTotal]); const handleSearch = useCallback((value: string) => { console.log('搜索', value); tableRef.current?.reload(); }, []); return ( <> {isShowTotal && ( )} ref={tableRef} columns={columns} request={onFetch} headerTitle="销售管理" showIndex={false} showSelection={false} search={{ defaultCollapsed: true }} onRow={handleRow} components={components} /> 关闭} > setCancleOrderVisible(false)} id={modalData?.id} /> ); }; export default React.memo(OrderListItem);