import { ScrollView, Text, View } from "@tarojs/components"; import { Button, Input, Popup, Radio, SafeArea } from "@nutui/nutui-react-taro"; import dayjs from "dayjs"; import { formatCurrency } from "@/utils/format"; import { useEffect, useState } from "react"; import businessServices from "@/services/business"; export default function BasicInfoSection(props: { purchaseOrderVO: BusinessAPI.PurchaseOrderVO; onChange?: (purchaseOrderVO: BusinessAPI.PurchaseOrderVO) => void; readOnly?: boolean; }) { const { purchaseOrderVO, onChange, readOnly } = props; const { orderVehicle } = purchaseOrderVO; // 弹窗可见状态 const [visiblePopup, setVisiblePopup] = useState({ basicInfo: false, // 基础信息弹窗 }); // 编辑值的状态(用于弹窗中的临时编辑) const [editValues, setEditValues] = useState({ vehicleNo: orderVehicle?.vehicleNo || "", origin: orderVehicle?.origin || "", destination: orderVehicle?.destination || "", deliveryTime: orderVehicle?.deliveryTime || "", plate: orderVehicle?.plate || "", phone: orderVehicle?.phone || "", priceType: orderVehicle?.priceType || "MAIN_FREIGHT", price: orderVehicle?.price || 0, openStrawCurtain: orderVehicle?.openStrawCurtain || false, strawCurtainPrice: orderVehicle?.strawCurtainPrice || 0, }); // 上一车次号 const [lastVehicleNo, setLastVehicleNo] = useState(null); // 是否正在获取上一车次号 const [loadingLastVehicleNo, setLoadingLastVehicleNo] = useState(false); // 获取上一车次号 const fetchLastVehicleNo = async () => { // 如果已经有车次号,则不需要获取上一车次号 if (orderVehicle?.vehicleNo) { return; } // 避免重复请求 if (loadingLastVehicleNo || lastVehicleNo) { return; } setLoadingLastVehicleNo(true); try { const { data: res } = await businessServices.purchaseOrder.getLastVehicleNo({ lastVehicleNoQry: {}, }); if (res.success && res.data) { setLastVehicleNo(res.data); // 解析车次号中的数字部分并加1 const numberPart = res.data.match(/(\d+)$/); if (numberPart) { const nextNumber = parseInt(numberPart[1]) + 1; const nextVehicleNo = res.data.replace( /(\d+)$/, nextNumber.toString(), ); // 更新车次号 updateVehicleNo(nextVehicleNo); } } } catch (error) { console.error("获取上一车次号失败:", error); } finally { setLoadingLastVehicleNo(false); } }; // 组件加载时获取上一车次号 useEffect(() => { fetchLastVehicleNo(); }, []); // 打开基础信息弹窗 const openBasicInfoPopup = () => { if (readOnly) return; setEditValues({ vehicleNo: orderVehicle?.vehicleNo || "", origin: orderVehicle?.origin || "", destination: orderVehicle?.destination || "", deliveryTime: orderVehicle?.deliveryTime || "", plate: orderVehicle?.plate || "", phone: orderVehicle?.phone || "", priceType: orderVehicle?.priceType || "MAIN_FREIGHT", price: orderVehicle?.price || 0, openStrawCurtain: orderVehicle?.openStrawCurtain || false, strawCurtainPrice: orderVehicle?.strawCurtainPrice || 0, }); setVisiblePopup((prev) => ({ ...prev, basicInfo: true })); }; // 保存基础信息 const saveBasicInfo = () => { if (onChange) { const updatedOrder = { ...purchaseOrderVO, orderVehicle: { ...orderVehicle, ...editValues, deliveryTime: editValues.deliveryTime, price: Number(editValues.price), strawCurtainPrice: Number(editValues.strawCurtainPrice), }, }; onChange(updatedOrder); } setVisiblePopup((prev) => ({ ...prev, basicInfo: false })); }; // 更新车次号 const updateVehicleNo = (value: string) => { if (onChange) { const updatedOrder = { ...purchaseOrderVO, orderVehicle: { ...orderVehicle, vehicleNo: value, }, }; onChange(updatedOrder); } }; // 更新运费类型 const updatePriceType = (value: BusinessAPI.OrderVehicle["priceType"]) => { if (onChange) { const updatedOrder = { ...purchaseOrderVO, orderVehicle: { ...orderVehicle, priceType: value, }, }; onChange(updatedOrder); } }; // 显示的参考车次号 const displayReferenceVehicleNo = () => { if (lastVehicleNo) { return lastVehicleNo; } return "获取中..."; }; return ( <> {/* 基础信息编辑弹窗 */} setVisiblePopup((prev) => ({ ...prev, basicInfo: false })) } onOverlayClick={() => { setVisiblePopup((prev) => ({ ...prev, basicInfo: false })); }} lockScroll > 本车次号 { setEditValues((prev) => ({ ...prev, vehicleNo: value, })); }} /> 发货地 { setEditValues((prev) => ({ ...prev, origin: value, })); }} /> 收货地 { setEditValues((prev) => ({ ...prev, destination: value, })); }} /> 发货日期 { setEditValues((prev) => ({ ...prev, deliveryTime: value, })); }} /> 车牌号 { setEditValues((prev) => ({ ...prev, plate: value, })); }} /> 联系电话 { setEditValues((prev) => ({ ...prev, phone: value, })); }} /> 运费类型 { setEditValues((prev) => ({ ...prev, priceType: "MAIN_FREIGHT", })); }} > 主运费 { setEditValues((prev) => ({ ...prev, priceType: "SHORT_TRANSPORT", })); }} > 短驳费 运费(元) { setEditValues((prev) => ({ ...prev, price: parseFloat(value) || 0, })); }} /> 草帘费 { setEditValues((prev) => ({ ...prev, openStrawCurtain: true, })); }} > 用了 { setEditValues((prev) => ({ ...prev, openStrawCurtain: false, })); }} > 没用 {editValues.openStrawCurtain && ( <> 草帘费金额(元) { setEditValues((prev) => ({ ...prev, strawCurtainPrice: parseFloat(value) || 0, })); }} /> )} {/* 本车次号 */} 本车次号 {readOnly ? ( {orderVehicle?.vehicleNo ? "第" + orderVehicle?.vehicleNo + "车" : "暂未生成车次"} ) : ( updateVehicleNo(value)} /> 参考上一车:{displayReferenceVehicleNo()} )} {/* 运费信息 */} 运费信息 {formatCurrency(orderVehicle?.price || 0)} {readOnly ? ( {orderVehicle?.priceType === "MAIN_FREIGHT" ? "主运费" : orderVehicle?.priceType === "SHORT_TRANSPORT" ? "短驳费" : "未选择"} ) : ( updatePriceType( value as BusinessAPI.OrderVehicle["priceType"], ) } > 主运费 短驳费 )} {/* 草帘 */} 草帘 {orderVehicle?.openStrawCurtain ? ( {formatCurrency(orderVehicle?.strawCurtainPrice || 0)} ) : ( 没用 )} {/* 路线和其他信息卡片 */} 路线 {orderVehicle?.origin || "发货地"} {"->"}{" "} {orderVehicle?.destination || "收货地"} 信息 {orderVehicle?.deliveryTime ? dayjs(orderVehicle.deliveryTime).format("YYYY-MM-DD") : "发货日期"}{" "} | {orderVehicle?.plate || "车牌号"} |{" "} {orderVehicle?.phone || "联系电话"} {!readOnly && ( )} ); }