ERPTurbo_Admin/packages/app-operation/src/components/Order/PurchaseOrderList.tsx
shenyifei 3e24b86326 feat(order): 新增采购单相关组件及功能
- 新增 PurchaseOrderFormItem、PurchaseOrderModal 等采购单表单项组件
- 在 OrderCostList 和 OrderSupplierList 中集成采购单选择功能
- 新增 OrderRebateList 返利列表组件
- 实现采购单数据的展示与选择逻辑
- 添加采购单相关的搜索和筛选字段
- 支持采购单详情查看及关联数据显示
- 优化订单成本列表的创建表单结构
- 增加表格行选择和批量操作功能
- 完善采购单状态标签显示及样式处理
2025-12-19 17:30:08 +08:00

221 lines
5.2 KiB
TypeScript

import { BizContainer, BizValueType, ModeType } from '@/components';
import { business } from '@/services';
import { useIntl } from '@@/exports';
import { ProColumns } from '@ant-design/pro-components';
import { ProDescriptionsItemProps } from '@ant-design/pro-descriptions';
import { Tag } from 'antd';
import React, { useState } from 'react';
interface IPurchaseOrderListProps {
ghost?: boolean;
orderId?: BusinessAPI.PurchaseOrderVO['orderId'];
search?: boolean;
onValueChange?: () => void;
mode?: ModeType;
trigger?: () => React.ReactNode;
}
export default function PurchaseOrderList(props: IPurchaseOrderListProps) {
const {
ghost = false,
orderId,
search = true,
mode = 'page',
trigger,
onValueChange,
} = props;
const intl = useIntl();
const intlPrefix = 'purchaseOrder';
const [activeKey, setActiveKey] = useState<string>('ALL');
const columns: ProColumns<BusinessAPI.PurchaseOrderVO, BizValueType>[] = [
{
title: intl.formatMessage({ id: intlPrefix + '.column.orderSn' }),
dataIndex: 'orderSn',
key: 'orderSn',
renderText: (text: string) => <span className="font-medium">{text}</span>,
},
{
title: intl.formatMessage({ id: intlPrefix + '.column.origin' }),
dataIndex: ['orderVehicle', 'origin'],
search: false,
},
{
title: intl.formatMessage({ id: intlPrefix + '.column.destination' }),
dataIndex: ['orderVehicle', 'destination'],
search: false,
},
{
title: intl.formatMessage({ id: intlPrefix + '.column.dealerName' }),
dataIndex: ['orderVehicle', 'dealerName'],
key: 'dealerName',
},
{
title: intl.formatMessage({ id: intlPrefix + '.column.vehicleNo' }),
dataIndex: ['orderVehicle', 'vehicleNo'],
key: 'vehicleNo',
render: (_, record) => {
return record.orderVehicle?.vehicleNo
? '第' + record.orderVehicle?.vehicleNo + '车'
: '-';
},
},
{
title: intl.formatMessage({ id: intlPrefix + '.column.plate' }),
dataIndex: ['orderVehicle', 'plate'],
key: 'plate',
},
{
title: intl.formatMessage({ id: intlPrefix + '.column.driver' }),
dataIndex: ['orderVehicle', 'driver'],
key: 'driver',
},
{
title: intl.formatMessage({ id: intlPrefix + '.column.phone' }),
dataIndex: ['orderVehicle', 'phone'],
key: 'phone',
},
{
title: intl.formatMessage({ id: intlPrefix + '.column.state' }),
dataIndex: 'state',
key: 'state',
valueType: 'select',
render: (_, record) => {
const stateText = intl.formatMessage({
id: `${intlPrefix}.column.state.${record.state?.toLowerCase() || 'unknown'}`,
});
let color = 'default';
switch (record.state) {
case 'DRAFT':
color = 'default';
break;
case 'WAITING_AUDIT':
color = 'processing';
break;
case 'COMPLETED':
color = 'success';
break;
case 'REJECTED':
color = 'error';
break;
default:
color = 'default';
}
return <Tag color={color}>{stateText}</Tag>;
},
},
{
title: intl.formatMessage({ id: intlPrefix + '.column.createdAt' }),
dataIndex: 'createdAt',
key: 'createdAt',
valueType: 'dateTime',
search: false,
},
];
const detailColumns: ProDescriptionsItemProps<
BusinessAPI.PurchaseOrderVO,
BizValueType
>[] = columns as ProDescriptionsItemProps<
BusinessAPI.PurchaseOrderVO,
BizValueType
>[];
return (
<BizContainer<
typeof business.purchaseOrder,
BusinessAPI.PurchaseOrderVO,
BusinessAPI.PurchaseOrderPageQry,
BusinessAPI.PurchaseOrderCreateCmd,
BusinessAPI.PurchaseOrderUpdateCmd
>
rowKey={'orderId'}
permission={'operation-purchase-order'}
func={business.purchaseOrder}
method={'purchaseOrder'}
methodUpper={'PurchaseOrder'}
intlPrefix={intlPrefix}
modeType={mode}
onValueChange={onValueChange}
container={{
ghost,
}}
status={false}
page={{
fieldProps: {
bordered: true,
ghost,
//@ts-ignore
search,
params: {
...(activeKey !== 'ALL' && {
state: activeKey! as BusinessAPI.PurchaseOrderVO['state'],
}),
},
toolbar: {
menu: {
type: 'tab',
activeKey: activeKey,
items: [
// 全部
{
key: 'ALL',
label: intl.formatMessage({
id: intlPrefix + '.tab.all',
}),
},
{
key: 'DRAFT',
label: intl.formatMessage({
id: intlPrefix + '.tab.draft',
}),
},
{
key: 'WAITING_AUDIT',
label: intl.formatMessage({
id: intlPrefix + '.tab.waitingAudit',
}),
},
{
key: 'COMPLETED',
label: intl.formatMessage({
id: intlPrefix + '.tab.completed',
}),
},
{
key: 'REJECTED',
label: intl.formatMessage({
id: intlPrefix + '.tab.rejected',
}),
},
{
key: 'CLOSED',
label: intl.formatMessage({
id: intlPrefix + '.tab.closed',
}),
},
],
onChange: (key) => {
setActiveKey(key as string);
},
},
},
},
columns,
}}
create={false}
update={false}
destroy={false}
detail={{
rowId: orderId,
formType: 'drawer',
columns: detailColumns,
trigger,
}}
/>
);
}