feat(purchase): 重构采购模块组件结构与交互逻辑

- 将采购相关组件移至 module 目录统一管理
- 优化 OrderCost 组件的人工费用处理逻辑,改为统一管理工头姓名
- 改进 OrderPackage 组件的纸箱类型渲染逻辑,根据供应商属性动态显示
- 更新 Weigh 组件,支持多供应商场景下的纸箱选择展示
- 调整采购模块导出路径,适配新的目录结构
- 优化表单交互文案,提升用户体验一致性
This commit is contained in:
shenyifei 2025-11-05 10:21:11 +08:00
parent 1ac1564ec2
commit 5a814cb358
10 changed files with 292 additions and 276 deletions

View File

@ -1,11 +1,12 @@
export { default as OrderVehicle } from "./OrderVehicle"; export { default as OrderVehicle } from "./module/OrderVehicle";
export { default as Weigh } from "./Weigh"; export { default as Weigh } from "./module/Weigh";
export { default as MelonFarmer } from "./MelonFarmer"; export { default as MelonFarmer } from "./module/MelonFarmer";
export { default as OrderPackage } from "./OrderPackage"; export { default as OrderPackage } from "./module/OrderPackage";
export { default as TicketUpload } from "./TicketUpload"; export { default as TicketUpload } from "./module/TicketUpload";
export { default as OrderCost } from "./OrderCost"; export { default as OrderCost } from "./module/OrderCost";
export { default as SupplierList } from "./SupplierList"; export { default as SupplierList } from "./module/SupplierList";
export { default as PurchasePreview } from "./PurchasePreview"; export { default as PurchasePreview } from "./module/PurchasePreview";
export { default as PurchaseOrderRejectApprove } from "./button/PurchaseOrderRejectApprove"; export { default as PurchaseOrderRejectApprove } from "./button/PurchaseOrderRejectApprove";
export { default as PurchaseOrderRejectFinal } from "./button/PurchaseOrderRejectFinal"; export { default as PurchaseOrderRejectFinal } from "./button/PurchaseOrderRejectFinal";
export { default as PurchaseOrderSubmitReview } from "./button/PurchaseOrderSubmitReview"; export { default as PurchaseOrderSubmitReview } from "./button/PurchaseOrderSubmitReview";

View File

@ -2,7 +2,7 @@ import { View } from "@tarojs/components";
import { Icon } from "@/components"; import { Icon } from "@/components";
import { forwardRef, useEffect, useImperativeHandle, useState } from "react"; import { forwardRef, useEffect, useImperativeHandle, useState } from "react";
import { business } from "@/services"; import { business } from "@/services";
import { Checkbox, Input, Picker, Toast } from "@nutui/nutui-react-taro"; import { Button, Checkbox, Input, Toast } from "@nutui/nutui-react-taro";
import { CostItem } from "@/types/typings"; import { CostItem } from "@/types/typings";
import { generateShortId } from "@/utils/generateShortId"; import { generateShortId } from "@/utils/generateShortId";
@ -16,19 +16,17 @@ export interface IOrderCostProps {
onChange?: (costItemList: CostItem[]) => void; onChange?: (costItemList: CostItem[]) => void;
} }
const options = [
[
{ value: "US", label: "我方" },
{ value: "OTHER", label: "瓜农" },
],
];
export default forwardRef<OrderCostRef, IOrderCostProps>( export default forwardRef<OrderCostRef, IOrderCostProps>(
function OrderCost(IOrderCostProps, ref) { function OrderCost(IOrderCostProps, ref) {
const { value, onChange } = IOrderCostProps; const { value, onChange } = IOrderCostProps;
const [costItemVOList, setCostItemVOList] = useState<CostItem[]>(); const [costItemVOList, setCostItemVOList] = useState<CostItem[]>();
// 总的工头姓名状态
const [principal, setPrincipal] = useState<string>("");
// 工头姓名错误状态
const [principalError, setPrincipalError] = useState<boolean>(false);
const init = async () => { const init = async () => {
const { data } = await business.costItem.listCostItem({ const { data } = await business.costItem.listCostItem({
costItemListQry: { costItemListQry: {
@ -58,6 +56,17 @@ export default forwardRef<OrderCostRef, IOrderCostProps>(
}) || []; }) || [];
setCostItemVOList(initialList as CostItem[]); setCostItemVOList(initialList as CostItem[]);
// 初始化总的工头姓名(如果有启用且费用承担方为"我方"的项目)
const enabledUsItems = initialList.filter(
(item) =>
item.selected &&
item.payerType === "US" &&
item.costType === "HUMAN_COST",
);
if (enabledUsItems.length > 0 && enabledUsItems[0].principal) {
setPrincipal(enabledUsItems[0].principal || "");
}
}; };
// 当传入的value发生变化时重新初始化列表 // 当传入的value发生变化时重新初始化列表
@ -68,9 +77,20 @@ export default forwardRef<OrderCostRef, IOrderCostProps>(
// 当内部状态发生变化时,通知父组件更新 // 当内部状态发生变化时,通知父组件更新
useEffect(() => { useEffect(() => {
if (costItemVOList && onChange) { if (costItemVOList && onChange) {
onChange(costItemVOList); // 更新所有启用且费用承担方为"我方"的人工费用项的工头姓名
const updatedList = costItemVOList.map((item) => {
if (
item.costType === "HUMAN_COST" &&
item.selected &&
item.payerType === "US"
) {
return { ...item, principal };
}
return item;
});
onChange(updatedList);
} }
}, [costItemVOList]); }, [costItemVOList, principal]);
// 错误状态 // 错误状态
const [countError, setCountError] = useState<{ [key: string]: boolean }>( const [countError, setCountError] = useState<{ [key: string]: boolean }>(
@ -79,14 +99,6 @@ export default forwardRef<OrderCostRef, IOrderCostProps>(
const [payerTypeError, setPayerTypeError] = useState<{ const [payerTypeError, setPayerTypeError] = useState<{
[key: string]: boolean; [key: string]: boolean;
}>({}); }>({});
const [principalError, setPrincipalError] = useState<{
[key: string]: boolean;
}>({});
// 为每个项目维护独立的Picker可见状态
const [pickerVisibleMap, setPickerVisibleMap] = useState<{
[key: string]: boolean;
}>({});
// 设置人工项目选择状态 // 设置人工项目选择状态
const setArtificialSelect = (id: string, selected: boolean) => { const setArtificialSelect = (id: string, selected: boolean) => {
@ -132,12 +144,9 @@ export default forwardRef<OrderCostRef, IOrderCostProps>(
}; };
// 校验工头姓名 // 校验工头姓名
const validatePrincipal = (id: string, value: string) => { const validatePrincipal = (value: string) => {
const isValid = value.trim().length > 0; const isValid = value.trim().length > 0;
setPrincipalError((prev) => ({ setPrincipalError(!isValid);
...prev,
[id]: !isValid,
}));
return isValid; return isValid;
}; };
@ -159,17 +168,18 @@ export default forwardRef<OrderCostRef, IOrderCostProps>(
}; };
// 处理工头姓名变化 // 处理工头姓名变化
const handlePrincipalChange = (id: string, value: string) => { const handlePrincipalChange = (value: string) => {
if (!costItemVOList) return; setPrincipal(value);
const newList = costItemVOList.map((item) =>
item.orderCostId === id ? { ...item, principal: value } : item,
);
setCostItemVOList(newList);
// 如果是瓜农承担且已启用,则校验工头姓名 // 如果有启用且费用承担方为"我方"的项目,则校验工头姓名
const item = costItemVOList.find((item) => item.orderCostId === id); const enabledUsItems = costItemVOList?.filter(
if (item?.selected && item.payerType === "OTHER") { (item) =>
validatePrincipal(id, value); item.costType === "HUMAN_COST" &&
item.selected &&
item.payerType === "US",
);
if (enabledUsItems && enabledUsItems.length > 0) {
validatePrincipal(value);
} }
}; };
@ -178,14 +188,9 @@ export default forwardRef<OrderCostRef, IOrderCostProps>(
validateCount(id, value); validateCount(id, value);
}; };
// 失去焦点时校验费用承担方
const handlePayerTypeBlur = (id: string, value: CostItem["payerType"]) => {
validatePayerType(id, value);
};
// 失去焦点时校验工头姓名 // 失去焦点时校验工头姓名
const handlePrincipalBlur = (id: string, value: string) => { const handlePrincipalBlur = (value: string) => {
validatePrincipal(id, value); validatePrincipal(value);
}; };
// 对外暴露的校验方法 // 对外暴露的校验方法
@ -206,18 +211,23 @@ export default forwardRef<OrderCostRef, IOrderCostProps>(
if (!validatePayerType(item.orderCostId, item.payerType)) { if (!validatePayerType(item.orderCostId, item.payerType)) {
isValid = false; isValid = false;
} }
// 如果是瓜农承担,校验工头姓名
if (
item.payerType === "US" &&
!validatePrincipal(item.orderCostId, item.principal || "")
) {
isValid = false;
}
} }
} }
}); });
// 校验总的工头姓名(如果有启用且费用承担方为"我方"的项目)
const enabledUsItems = costItemVOList.filter(
(item) =>
item.costType === "HUMAN_COST" &&
item.selected &&
item.payerType === "US",
);
if (enabledUsItems.length > 0) {
if (!validatePrincipal(principal)) {
isValid = false;
}
}
if (!isValid) { if (!isValid) {
Toast.show("toast", { Toast.show("toast", {
icon: "fail", icon: "fail",
@ -255,183 +265,126 @@ export default forwardRef<OrderCostRef, IOrderCostProps>(
}} }}
> >
<View className={"text-sm font-normal text-[#000000]"}> <View className={"text-sm font-normal text-[#000000]"}>
</View> </View>
</Checkbox> </Checkbox>
</View> </View>
{item.selected && type === "HUMAN_COST" && (
<View>
{/* 费用承担方改为按钮形式参考OrderPackage中的样式 */}
<View className="flex items-center justify-between">
<View className="text-sm flex-shrink-0">:</View>
<View className="flex gap-2">
<Button
size="small"
type={item.payerType === "US" ? "primary" : "default"}
onClick={() => {
handlePayerTypeChange(item.orderCostId, "US");
}}
>
</Button>
<Button
size="small"
type={item.payerType === "OTHER" ? "primary" : "default"}
onClick={() => {
handlePayerTypeChange(item.orderCostId, "OTHER");
}}
>
</Button>
</View>
</View>
{payerTypeError[item.orderCostId] && item.selected && (
<View className="mt-1 text-xs text-red-500">
</View>
)}
</View>
)}
{item.selected && ( {item.selected && (
<View> <View>
<View className="flex items-center"> <View className="flex items-center justify-between gap-2">
<View <View className="text-sm flex-shrink-0">:</View>
className="rounded-l-button flex !size-12 flex-none items-center justify-center bg-gray-200 text-sm" <View className="flex items-center">
onClick={() => { <View
const count = item.count || 1; className="rounded-l-button flex !size-12 flex-none items-center justify-center bg-gray-200 text-sm"
handleCountChange( onClick={() => {
item.orderCostId, const count = item.count || 1;
Math.max(1, count - 1), handleCountChange(
); item.orderCostId,
}} Math.max(1, count - 1),
> );
<Icon name="minus" size={20} />
</View>
<View
className={`flex h-12 w-full shrink items-center border-4 border-gray-200`}
>
<Input
type="number"
value={item.count.toString()}
align={"center"}
placeholder={"请输入数量"}
onChange={(value) => {
handleCountChange(item.orderCostId, Number(value));
}} }}
formatter={(value) => >
Math.max(1, Number(value)).toString() <Icon name="minus" size={20} />
} </View>
onBlur={() => <View
handleCountBlur(item.orderCostId, item.count) className={`flex h-12 w-full shrink items-center border-4 border-gray-200`}
} >
/> <Input
</View> type="number"
<View value={item.count.toString()}
className="rounded-r-button flex !size-12 flex-none items-center justify-center bg-gray-200 text-sm" align={"center"}
onClick={() => { placeholder={"用了多少"}
const count = item.count || 1; onChange={(value) => {
handleCountChange(item.orderCostId, count + 1); handleCountChange(item.orderCostId, Number(value));
}} }}
> formatter={(value) =>
<Icon name="plus" size={20} /> Math.max(1, Number(value)).toString()
</View> }
onBlur={() =>
handleCountBlur(item.orderCostId, item.count)
}
/>
</View>
<View
className="rounded-r-button flex !size-12 flex-none items-center justify-center bg-gray-200 text-sm"
onClick={() => {
const count = item.count || 1;
handleCountChange(item.orderCostId, count + 1);
}}
>
<Icon name="plus" size={20} />
</View>
<View className={"ml-2.5 text-sm text-gray-500"}> <View className={"ml-2.5 text-sm text-gray-500"}>
{item.unit} {item.unit}
</View>
</View> </View>
</View> </View>
{countError[item.orderCostId] && item.selected && ( {countError[item.orderCostId] && item.selected && (
<View className="mt-1 text-xs text-red-500"> <View className="mt-1 text-xs text-red-500">
</View> </View>
)} )}
</View> </View>
)} )}
{item.selected && type === "HUMAN_COST" && (
<View>
<View
className={`relative flex h-10 w-full items-center rounded-md ${payerTypeError[item.orderCostId] ? "border-4 border-red-500" : "border-4 border-gray-300"}`}
>
<Input
type="number"
value={
options[0].find(
(option) => option.value === item.payerType,
)?.label || ""
}
placeholder={"请选择费用承担方"}
onChange={(value) => {
handlePayerTypeChange(
item.orderCostId,
value as CostItem["payerType"],
);
}}
onBlur={() =>
handlePayerTypeBlur(item.orderCostId, item.payerType)
}
disabled
onClick={() => {
setPickerVisibleMap((prev) => ({
...prev,
[item.orderCostId]: true,
}));
}}
/>
<Icon
name={"chevron-down"}
className={"absolute -right-1 mr-4"}
onClick={() => {
setPickerVisibleMap((prev) => ({
...prev,
[item.orderCostId]: true,
}));
}}
/>
</View>
<Picker
title="请选择费用承担方"
visible={pickerVisibleMap[item.orderCostId] || false}
options={options}
onConfirm={(_options, values) => {
// 设置费用承担方
if (values.length > 0) {
handlePayerTypeChange(
item.orderCostId,
values[0] as CostItem["payerType"],
);
}
setPickerVisibleMap((prev) => ({
...prev,
[item.orderCostId]: false,
}));
}}
onClose={() => {
setPickerVisibleMap((prev) => ({
...prev,
[item.orderCostId]: false,
}));
}}
/>
{payerTypeError[item.orderCostId] && item.selected && (
<View className="mt-1 text-xs text-red-500">
</View>
)}
</View>
)}
{item.selected &&
type === "HUMAN_COST" &&
item.payerType === "US" && (
<View>
<View
className={`flex h-10 w-full items-center rounded-md ${principalError[item.orderCostId] ? "border-4 border-red-500" : "border-4 border-gray-300"}`}
>
<Input
type="text"
placeholder={"请填写工头姓名"}
value={item.principal}
onChange={(value) => {
handlePrincipalChange(item.orderCostId, value);
}}
onBlur={() =>
handlePrincipalBlur(
item.orderCostId,
item.principal || "",
)
}
/>
</View>
{principalError[item.orderCostId] &&
item.selected &&
item.payerType === "US" && (
<View className="mt-1 text-xs text-red-500">
</View>
)}
</View>
)}
</View> </View>
</View> </View>
)); ));
}; };
// 检查是否有人工费用项被启用且费用承担方为"我方"
const shouldShowPrincipalInput = () => {
return (
costItemVOList?.some(
(item) =>
item.costType === "HUMAN_COST" &&
item.selected &&
item.payerType === "US",
) || false
);
};
return ( return (
<View className="flex flex-1 flex-col bg-[#D1D5DB] px-2.5 pt-2.5 pb-16"> <View className="flex flex-1 flex-col bg-[#D1D5DB] px-2.5 pt-2.5 pb-16">
<View className={"mb-2.5"}> <View className={"mb-2.5"}>
<View className="mb-2.5 text-sm font-bold"></View> <View className="mb-2.5 text-sm font-bold"></View>
<View className="mb-2.5 flex items-center rounded-lg border border-blue-200 bg-blue-50 p-2.5"> <View className="mb-2.5 flex items-center rounded-lg border border-blue-200 bg-blue-50 p-2.5">
<Icon <Icon
className={"mr-1"} className={"mr-1"}
@ -439,27 +392,60 @@ export default forwardRef<OrderCostRef, IOrderCostProps>(
color={"var(--color-blue-700)"} color={"var(--color-blue-700)"}
size={18} size={18}
/> />
<View className={"text-sm text-blue-700"}> <View className={"text-sm text-blue-700"}></View>
</View>
</View> </View>
{renderItemList(getItemsByCostType("HUMAN_COST"), "HUMAN_COST")} {renderItemList(getItemsByCostType("HUMAN_COST"), "HUMAN_COST")}
{/* 总的工头姓名输入框 */}
{shouldShowPrincipalInput() && (
<View className="mt-2.5">
<View className="mb-1 text-sm font-medium"></View>
<View
className={`flex h-12 items-center rounded-md px-3 ${principalError ? "border-2 border-red-500 bg-red-100" : "border-2 border-gray-300 bg-white"}`}
>
<Input
className="text-base"
type="text"
placeholder={"工头的名字"}
value={principal}
onChange={(value) => {
handlePrincipalChange(value);
}}
onBlur={() => handlePrincipalBlur(principal)}
/>
</View>
{principalError && (
<View className="mt-1 text-xs text-red-500">
</View>
)}
</View>
)}
</View> </View>
<View className={"mb-2.5"}> <View className={"mb-2.5"}>
<View className="mb-2.5 text-sm font-bold"></View> <View className="mb-2.5 text-sm font-bold"></View>
<View className="mb-2.5 flex items-center rounded-lg border border-blue-200 bg-blue-50 p-2.5">
<Icon
className={"mr-1"}
name="circle-info"
color={"var(--color-blue-700)"}
size={18}
/>
<View className={"text-sm text-blue-700"}></View>
</View>
{renderItemList( {renderItemList(
getItemsByCostType("PACKAGING_MATERIALS"), getItemsByCostType("PACKAGING_MATERIALS"),
"PACKAGING_MATERIALS", "PACKAGING_MATERIALS",
)} )}
</View> </View>
<View className={"mb-2.5"}> {/*<View className={"mb-2.5"}>*/}
<View className="mb-2.5 text-sm font-bold"></View> {/* <View className="mb-2.5 text-sm font-bold">空纸箱费用</View>*/}
{renderItemList(getItemsByCostType("OTHER_COST"), "OTHER_COST")} {/* {renderItemList(getItemsByCostType("OTHER_COST"), "OTHER_COST")}*/}
</View> {/*</View>*/}
<View className={"mb-2.5"}> {/*<View className={"mb-2.5"}>*/}
<View className="mb-2.5 text-sm font-bold"></View> {/* <View className="mb-2.5 text-sm font-bold">空礼盒费用</View>*/}
{renderItemList(getItemsByCostType("OTHER_COST"), "OTHER_COST")} {/* {renderItemList(getItemsByCostType("OTHER_COST"), "OTHER_COST")}*/}
</View> {/*</View>*/}
</View> </View>
); );
}, },

View File

@ -40,27 +40,38 @@ export default forwardRef<OrderPackageRef, IOrderPackageProps>(
const orderPackageList = value.orderPackageList || []; const orderPackageList = value.orderPackageList || [];
setOrderPackageList(value.orderPackageList || []); setOrderPackageList(value.orderPackageList || []);
// 根据orderPackageList 初始化 packageTypeEnabled // 根据orderPackageList和supplierVO属性初始化 packageTypeEnabled
setPackageTypeEnabled({ const initialPackageTypeEnabled = {
USED: undefined,
EXTRA_USED: undefined,
EXTRA: undefined,
REMAIN: undefined,
OWN: undefined,
};
// 根据orderPackageList设置已有的纸箱类型
if (orderPackageList.some((item) => item.boxType === "USED")) {
// @ts-ignore // @ts-ignore
USED: initialPackageTypeEnabled.USED = true;
orderPackageList.some((item) => item.boxType === "USED") || undefined, }
if (orderPackageList.some((item) => item.boxType === "EXTRA_USED")) {
// @ts-ignore // @ts-ignore
EXTRA_USED: initialPackageTypeEnabled.EXTRA_USED = true;
orderPackageList.some((item) => item.boxType === "EXTRA_USED") || }
undefined, if (orderPackageList.some((item) => item.boxType === "EXTRA")) {
// @ts-ignore // @ts-ignore
EXTRA: initialPackageTypeEnabled.EXTRA = true;
orderPackageList.some((item) => item.boxType === "EXTRA") || }
undefined, if (orderPackageList.some((item) => item.boxType === "REMAIN")) {
// @ts-ignore // @ts-ignore
REMAIN: initialPackageTypeEnabled.REMAIN = true;
orderPackageList.some((item) => item.boxType === "REMAIN") || }
undefined, if (orderPackageList.some((item) => item.boxType === "OWN")) {
// @ts-ignore // @ts-ignore
OWN: initialPackageTypeEnabled.OWN = true;
orderPackageList.some((item) => item.boxType === "OWN") || undefined, }
});
setPackageTypeEnabled(initialPackageTypeEnabled);
}, []); }, []);
const [orderPackageList, setOrderPackageList] = useState< const [orderPackageList, setOrderPackageList] = useState<
@ -1286,7 +1297,7 @@ export default forwardRef<OrderPackageRef, IOrderPackageProps>(
{!supplierVO.isPaper && ( {!supplierVO.isPaper && (
<> <>
<View className="flex items-center justify-between"> <View className="flex items-center justify-between">
<View className="text-sm"></View> <View className="text-sm"></View>
<View className="flex flex-shrink-0 gap-2"> <View className="flex flex-shrink-0 gap-2">
<Button <Button
size="small" size="small"
@ -1322,12 +1333,22 @@ export default forwardRef<OrderPackageRef, IOrderPackageProps>(
)} )}
</> </>
</View> </View>
{/* 根据启用的类型渲染对应的内容 */} {/* 根据启用的类型和supplierVO属性渲染对应的内容 */}
{renderPackageByType("OWN")} {renderPackageByType("OWN")}
{renderPackageByType("USED")} {supplierVO.isPaper && supplierVO.isLast && (
{renderPackageByType("EXTRA_USED")} <>
{renderPackageByType("EXTRA")} {renderPackageByType("USED")}
{renderPackageByType("REMAIN")} {renderPackageByType("EXTRA_USED")}
{renderPackageByType("REMAIN")}
</>
)}
{supplierVO.isPaper && !supplierVO.isLast && (
<>
{renderPackageByType("USED")}
{renderPackageByType("EXTRA")}
</>
)}
{!supplierVO.isPaper && renderPackageByType("USED")}
{/* 当选择了使用自己的纸箱时才渲染 */} {/* 当选择了使用自己的纸箱时才渲染 */}
{/* 批量添加弹窗 */} {/* 批量添加弹窗 */}

View File

@ -20,10 +20,11 @@ export interface WeighRef {
interface IWeightProps { interface IWeightProps {
value: SupplierVO; value: SupplierVO;
onChange: (supplierVO: SupplierVO) => void; onChange: (supplierVO: SupplierVO) => void;
supplierCount: number;
} }
export default forwardRef<WeighRef, IWeightProps>(function Weigh(props, ref) { export default forwardRef<WeighRef, IWeightProps>(function Weigh(props, ref) {
const { value, onChange } = props; const { value, onChange, supplierCount } = props;
const [supplierVO, setSupplierVO] = useState<SupplierVO>(); const [supplierVO, setSupplierVO] = useState<SupplierVO>();
@ -268,38 +269,44 @@ export default forwardRef<WeighRef, IWeightProps>(function Weigh(props, ref) {
<View className={"flex items-center justify-between gap-2.5"}> <View className={"flex items-center justify-between gap-2.5"}>
<View className="text-sm"></View> <View className="text-sm"></View>
<View className="text-neutral-darkest text-sm font-medium"> <View className="text-neutral-darkest text-sm font-medium">
<Radio.Group {supplierCount == 1 ? (
direction="horizontal" <Radio.Group
value={ direction="horizontal"
supplierVO.isPaper === true value={
? "true" supplierVO.isPaper === true
: supplierVO.isPaper === false ? "true"
? "false" : supplierVO.isPaper === false
: undefined ? "false"
} : undefined
onChange={(value) => { }
// 清除错误状态 onChange={(value) => {
setIsPaperError((prev) => ({ // 清除错误状态
...prev, setIsPaperError((prev) => ({
[supplierVO.orderSupplierId]: false, ...prev,
})); [supplierVO.orderSupplierId]: false,
}));
// 根据用户选择设置是否包含空纸箱 // 根据用户选择设置是否包含空纸箱
const isPaperValue = const isPaperValue =
value === "true" value === "true"
? true ? true
: value === "false" : value === "false"
? false ? false
: undefined; : undefined;
setSupplierVO({ setSupplierVO({
...supplierVO, ...supplierVO,
isPaper: isPaperValue, isPaper: isPaperValue,
}); });
}} }}
> >
<Radio value="true"></Radio> <Radio value="true"></Radio>
<Radio value="false"></Radio> <Radio value="false"></Radio>
</Radio.Group> </Radio.Group>
) : supplierVO.isPaper === true ? (
"带了"
) : (
"没带"
)}
</View> </View>
</View> </View>
{isPaperError[supplierVO.orderSupplierId] && ( {isPaperError[supplierVO.orderSupplierId] && (

View File

@ -429,6 +429,7 @@ export default hocAuth(function Page(props: CommonComponent) {
return ( return (
<Weigh <Weigh
supplierCount={orderSupplierList.length}
key={item.orderSupplierId} key={item.orderSupplierId}
ref={(ref) => { ref={(ref) => {
if (ref) { if (ref) {