import { useEffect, useState } from "react"; import { Text, View } from "@tarojs/components"; import { Button, Input, Popup, SafeArea } from "@nutui/nutui-react-taro"; import { validatePrice } from "@/utils/format"; import { PurchaseOrderCalculator } from "@/utils/PurchaseOrderCalculator"; export default function CostDifferenceSection(props: { purchaseOrderVO: BusinessAPI.PurchaseOrderVO; onChange?: (purchaseOrderVO: BusinessAPI.PurchaseOrderVO) => void; readOnly?: boolean; }) { const { purchaseOrderVO, onChange, readOnly } = props; const orderDealer = purchaseOrderVO.orderDealer; const calculator = new PurchaseOrderCalculator(purchaseOrderVO); const [visible, setVisible] = useState(false); // 主状态,用于页面显示 const [costDifference, setCostDifference] = useState( orderDealer?.costDifference || 0, ); // 弹窗内的临时状态 const [tempCostDifference, setTempCostDifference] = useState( orderDealer?.costDifference || 0, ); const profitSharing = calculator.getDefaultNetProfit() || orderDealer?.profitSharing || 0; useEffect(() => { if (!orderDealer?.costDifference) { const defaultCostDifference = calculator.getCostDifference(); setCostDifference(defaultCostDifference); setTempCostDifference(defaultCostDifference); // 更新父组件的状态 onChange?.({ ...purchaseOrderVO, orderDealer: { ...orderDealer, costDifference: defaultCostDifference, profitSharing: profitSharing, }, }); } }, []); // 保存调整成本 const saveCostDifference = () => { // 将临时状态的值应用到主状态 setCostDifference(tempCostDifference); onChange?.({ ...purchaseOrderVO, orderDealer: { ...orderDealer, costDifference: tempCostDifference, profitSharing: profitSharing, }, }); setVisible(false); }; return ( {/* 卡片形式展示分成信息 */} 分成 {!readOnly ? ( { // 打开弹窗时,将当前costDifference值同步到临时状态 setTempCostDifference(costDifference); setVisible(true); }} > 调分成金额 -{costDifference || "0.00"} ) : ( 分成金额 {costDifference || "0.00"} )} 分成利润 ¥ {profitSharing} {/* 分成弹窗 */} setVisible(false)} onOverlayClick={() => { setVisible(false); }} lockScroll > 调分成金额 { const numValue = validatePrice(value); if (numValue !== undefined) { setTempCostDifference(numValue as number); } }} /> ); }