ERPTurbo_Admin/packages/app-operation/src/components/Dealer/Module/WeightInfoModule.tsx
shenyifei 0c39c005bd refactor(dealer): 重构经销商模块配置面板
- 使用 BetaSchemaForm 替代原有 Form 组件
- 移除冗余的表单配置渲染逻辑
- 动态生成模块配置表单结构
- 优化模块配置项的展示与交互
- 统一配置面板的数据流处理方式
- 提升配置面板的可维护性和扩展性
2025-11-07 00:36:09 +08:00

202 lines
5.8 KiB
TypeScript

import {
ArrowDownOutlined,
ArrowUpOutlined,
DeleteOutlined,
MenuOutlined,
} from '@ant-design/icons';
import { Button, Typography } from 'antd';
import React from 'react';
const { Text } = Typography;
interface ModuleProps {
config: any;
isSelected: boolean;
onSelect: () => void;
onDelete: () => void;
onMoveUp?: () => void;
onMoveDown?: () => void;
canMoveUp?: boolean;
canMoveDown?: boolean;
previewMode?: boolean; // 添加预览模式属性
}
const WeightInfoModule: React.FC<ModuleProps> = ({
config,
isSelected,
onSelect,
onDelete,
onMoveUp,
onMoveDown,
canMoveUp,
canMoveDown,
previewMode = false, // 默认为false
}) => {
return (
<div
className={`${previewMode ? '' : 'border border-gray-300'} rounded p-2 mb-2 bg-white transition-all duration-200 ${
isSelected && !previewMode
? 'border-2 border-blue-500 shadow-[0_0_0_2px_rgba(24,144,255,0.2)]'
: 'hover:border-blue-300'
}`}
onClick={previewMode ? undefined : onSelect}
>
{!previewMode && (
<div className="flex justify-between items-center mb-2 pb-2 border-b border-gray-100">
<Text strong></Text>
<div className="flex gap-1">
<Button
type="text"
icon={<MenuOutlined />}
size="small"
style={{ cursor: 'move' }}
/>
<Button
type="text"
icon={<ArrowUpOutlined />}
onClick={(e) => {
e.stopPropagation();
if (onMoveUp) onMoveUp();
}}
size="small"
disabled={!canMoveUp}
/>
<Button
type="text"
icon={<ArrowDownOutlined />}
onClick={(e) => {
e.stopPropagation();
if (onMoveDown) onMoveDown();
}}
size="small"
disabled={!canMoveDown}
/>
<Button
type="text"
icon={<DeleteOutlined />}
onClick={(e) => {
e.stopPropagation();
onDelete();
}}
danger
size="small"
/>
</div>
</div>
)}
{config.data?.map((item: any, index: number) => {
return (
<div
key={'data' + index}
className={'preview grid grid-cols-2 gap-0 w-full text-base'}
>
{config.showNetWeight && (
<div className={'col-span-1 grid grid-cols-4'}>
<div className="col-span-1 flex items-end justify-center">
:
</div>
<div className="col-span-2 border-b border-black flex items-end justify-center">
{item.netWeight}
</div>
<div className="col-span-1 border-b border-black flex items-end justify-center">
{config.netWeightUnit === '1' ? '斤' : '公斤'}
</div>
</div>
)}
{config.showBoxWeight && (
<div className={'col-span-1 grid grid-cols-4'}>
<div className="col-span-1 flex items-end justify-center">
:
</div>
<div className="col-span-2 border-b border-black flex items-end justify-center">
{item.boxWeight}
</div>
<div className="col-span-1 border-b border-black flex items-end justify-center">
{config.boxWeightUnit === '1' ? '斤' : '公斤'}
</div>
</div>
)}
{config.showGrossWeight && (
<div className={'col-span-1 grid grid-cols-4'}>
<div className="col-span-1 flex items-end justify-center">
:
</div>
<div className="col-span-2 border-b border-black flex items-end justify-center">
{item.grossWeight}
</div>
<div className="col-span-1 border-b border-black flex items-end justify-center">
{config.grossWeightUnit === '1' ? '斤' : '公斤'}
</div>
</div>
)}
{config.showUnitPrice && (
<div className={'col-span-1 grid grid-cols-4'}>
<div className="col-span-1 flex items-end justify-center">
:
</div>
<div className="col-span-2 border-b border-black flex items-end justify-center">
{item.unitPrice}
</div>
<div className="col-span-1 border-b border-black flex items-end justify-center">
{config.unitPriceUnit === '1' ? '元/斤' : '元/公斤'}
</div>
</div>
)}
{config.showAmount && (
<div className={'col-span-1 grid grid-cols-4'}>
<div className="col-span-1 flex items-end justify-center">
:
</div>
<div className="col-span-2 border-b border-black flex items-end justify-center">
{item.amount}
</div>
<div className="col-span-1 border-b border-black flex items-end justify-center">
</div>
</div>
)}
{config.showGrade && (
<div className={'col-span-1 grid grid-cols-4'}>
<div className="col-span-1 flex items-end justify-center">
:
</div>
<div className="col-span-3 border-b border-black flex items-end justify-center">
{item.grade}
</div>
</div>
)}
</div>
);
})}
<div className={'preview grid grid-cols-2 gap-0 w-full text-base'}>
{config.showAccountCompany && (
<div className={'col-span-1 grid grid-cols-4'}>
<div className="col-span-1 flex items-end justify-center">
:
</div>
<div className="col-span-3 border-b border-black flex items-end justify-center">
{config.accountCompany}
</div>
</div>
)}
{config.showSumAmount && (
<div className={'col-span-1 grid grid-cols-4'}>
<div className="col-span-1 flex items-end justify-center">
:
</div>
<div className="col-span-2 border-b border-black flex items-end justify-center">
{config.sumAmount}
</div>
<div className="col-span-1 border-b border-black flex items-end justify-center">
</div>
</div>
)}
</div>
</div>
);
};
export default WeightInfoModule;