feat(purchase): 重构采购模块组件结构与交互逻辑
- 将采购相关组件移至 module 目录统一管理 - 优化 OrderCost 组件的人工费用处理逻辑,改为统一管理工头姓名 - 改进 OrderPackage 组件的纸箱类型渲染逻辑,根据供应商属性动态显示 - 更新 Weigh 组件,支持多供应商场景下的纸箱选择展示 - 调整采购模块导出路径,适配新的目录结构 - 优化表单交互文案,提升用户体验一致性
This commit is contained in:
parent
1ac1564ec2
commit
5a814cb358
@ -1,11 +1,12 @@
|
||||
export { default as OrderVehicle } from "./OrderVehicle";
|
||||
export { default as Weigh } from "./Weigh";
|
||||
export { default as MelonFarmer } from "./MelonFarmer";
|
||||
export { default as OrderPackage } from "./OrderPackage";
|
||||
export { default as TicketUpload } from "./TicketUpload";
|
||||
export { default as OrderCost } from "./OrderCost";
|
||||
export { default as SupplierList } from "./SupplierList";
|
||||
export { default as PurchasePreview } from "./PurchasePreview";
|
||||
export { default as OrderVehicle } from "./module/OrderVehicle";
|
||||
export { default as Weigh } from "./module/Weigh";
|
||||
export { default as MelonFarmer } from "./module/MelonFarmer";
|
||||
export { default as OrderPackage } from "./module/OrderPackage";
|
||||
export { default as TicketUpload } from "./module/TicketUpload";
|
||||
export { default as OrderCost } from "./module/OrderCost";
|
||||
export { default as SupplierList } from "./module/SupplierList";
|
||||
export { default as PurchasePreview } from "./module/PurchasePreview";
|
||||
|
||||
export { default as PurchaseOrderRejectApprove } from "./button/PurchaseOrderRejectApprove";
|
||||
export { default as PurchaseOrderRejectFinal } from "./button/PurchaseOrderRejectFinal";
|
||||
export { default as PurchaseOrderSubmitReview } from "./button/PurchaseOrderSubmitReview";
|
||||
|
||||
@ -2,7 +2,7 @@ import { View } from "@tarojs/components";
|
||||
import { Icon } from "@/components";
|
||||
import { forwardRef, useEffect, useImperativeHandle, useState } from "react";
|
||||
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 { generateShortId } from "@/utils/generateShortId";
|
||||
|
||||
@ -16,19 +16,17 @@ export interface IOrderCostProps {
|
||||
onChange?: (costItemList: CostItem[]) => void;
|
||||
}
|
||||
|
||||
const options = [
|
||||
[
|
||||
{ value: "US", label: "我方" },
|
||||
{ value: "OTHER", label: "瓜农" },
|
||||
],
|
||||
];
|
||||
|
||||
export default forwardRef<OrderCostRef, IOrderCostProps>(
|
||||
function OrderCost(IOrderCostProps, ref) {
|
||||
const { value, onChange } = IOrderCostProps;
|
||||
|
||||
const [costItemVOList, setCostItemVOList] = useState<CostItem[]>();
|
||||
|
||||
// 总的工头姓名状态
|
||||
const [principal, setPrincipal] = useState<string>("");
|
||||
// 工头姓名错误状态
|
||||
const [principalError, setPrincipalError] = useState<boolean>(false);
|
||||
|
||||
const init = async () => {
|
||||
const { data } = await business.costItem.listCostItem({
|
||||
costItemListQry: {
|
||||
@ -58,6 +56,17 @@ export default forwardRef<OrderCostRef, IOrderCostProps>(
|
||||
}) || [];
|
||||
|
||||
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发生变化时,重新初始化列表
|
||||
@ -68,9 +77,20 @@ export default forwardRef<OrderCostRef, IOrderCostProps>(
|
||||
// 当内部状态发生变化时,通知父组件更新
|
||||
useEffect(() => {
|
||||
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 }>(
|
||||
@ -79,14 +99,6 @@ export default forwardRef<OrderCostRef, IOrderCostProps>(
|
||||
const [payerTypeError, setPayerTypeError] = useState<{
|
||||
[key: string]: boolean;
|
||||
}>({});
|
||||
const [principalError, setPrincipalError] = useState<{
|
||||
[key: string]: boolean;
|
||||
}>({});
|
||||
|
||||
// 为每个项目维护独立的Picker可见状态
|
||||
const [pickerVisibleMap, setPickerVisibleMap] = useState<{
|
||||
[key: string]: 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;
|
||||
setPrincipalError((prev) => ({
|
||||
...prev,
|
||||
[id]: !isValid,
|
||||
}));
|
||||
setPrincipalError(!isValid);
|
||||
return isValid;
|
||||
};
|
||||
|
||||
@ -159,17 +168,18 @@ export default forwardRef<OrderCostRef, IOrderCostProps>(
|
||||
};
|
||||
|
||||
// 处理工头姓名变化
|
||||
const handlePrincipalChange = (id: string, value: string) => {
|
||||
if (!costItemVOList) return;
|
||||
const newList = costItemVOList.map((item) =>
|
||||
item.orderCostId === id ? { ...item, principal: value } : item,
|
||||
);
|
||||
setCostItemVOList(newList);
|
||||
const handlePrincipalChange = (value: string) => {
|
||||
setPrincipal(value);
|
||||
|
||||
// 如果是瓜农承担且已启用,则校验工头姓名
|
||||
const item = costItemVOList.find((item) => item.orderCostId === id);
|
||||
if (item?.selected && item.payerType === "OTHER") {
|
||||
validatePrincipal(id, value);
|
||||
// 如果有启用且费用承担方为"我方"的项目,则校验工头姓名
|
||||
const enabledUsItems = costItemVOList?.filter(
|
||||
(item) =>
|
||||
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);
|
||||
};
|
||||
|
||||
// 失去焦点时校验费用承担方
|
||||
const handlePayerTypeBlur = (id: string, value: CostItem["payerType"]) => {
|
||||
validatePayerType(id, value);
|
||||
};
|
||||
|
||||
// 失去焦点时校验工头姓名
|
||||
const handlePrincipalBlur = (id: string, value: string) => {
|
||||
validatePrincipal(id, value);
|
||||
const handlePrincipalBlur = (value: string) => {
|
||||
validatePrincipal(value);
|
||||
};
|
||||
|
||||
// 对外暴露的校验方法
|
||||
@ -206,18 +211,23 @@ export default forwardRef<OrderCostRef, IOrderCostProps>(
|
||||
if (!validatePayerType(item.orderCostId, item.payerType)) {
|
||||
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) {
|
||||
Toast.show("toast", {
|
||||
icon: "fail",
|
||||
@ -255,183 +265,126 @@ export default forwardRef<OrderCostRef, IOrderCostProps>(
|
||||
}}
|
||||
>
|
||||
<View className={"text-sm font-normal text-[#000000]"}>
|
||||
启用
|
||||
用了
|
||||
</View>
|
||||
</Checkbox>
|
||||
</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 && (
|
||||
<View>
|
||||
<View className="flex items-center">
|
||||
<View
|
||||
className="rounded-l-button flex !size-12 flex-none items-center justify-center bg-gray-200 text-sm"
|
||||
onClick={() => {
|
||||
const count = item.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));
|
||||
<View className="flex items-center justify-between gap-2">
|
||||
<View className="text-sm flex-shrink-0">用多少:</View>
|
||||
<View className="flex items-center">
|
||||
<View
|
||||
className="rounded-l-button flex !size-12 flex-none items-center justify-center bg-gray-200 text-sm"
|
||||
onClick={() => {
|
||||
const count = item.count || 1;
|
||||
handleCountChange(
|
||||
item.orderCostId,
|
||||
Math.max(1, count - 1),
|
||||
);
|
||||
}}
|
||||
formatter={(value) =>
|
||||
Math.max(1, Number(value)).toString()
|
||||
}
|
||||
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>
|
||||
>
|
||||
<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()
|
||||
}
|
||||
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"}>
|
||||
{item.unit}
|
||||
<View className={"ml-2.5 text-sm text-gray-500"}>
|
||||
{item.unit}
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
|
||||
{countError[item.orderCostId] && item.selected && (
|
||||
<View className="mt-1 text-xs text-red-500">
|
||||
请输入正确的数量
|
||||
请填写正确的数量
|
||||
</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>
|
||||
));
|
||||
};
|
||||
|
||||
// 检查是否有人工费用项被启用且费用承担方为"我方"
|
||||
const shouldShowPrincipalInput = () => {
|
||||
return (
|
||||
costItemVOList?.some(
|
||||
(item) =>
|
||||
item.costType === "HUMAN_COST" &&
|
||||
item.selected &&
|
||||
item.payerType === "US",
|
||||
) || false
|
||||
);
|
||||
};
|
||||
|
||||
return (
|
||||
<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 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"}
|
||||
@ -439,27 +392,60 @@ export default forwardRef<OrderCostRef, IOrderCostProps>(
|
||||
color={"var(--color-blue-700)"}
|
||||
size={18}
|
||||
/>
|
||||
<View className={"text-sm text-blue-700"}>
|
||||
瓜农承担费用的人工可以不启用
|
||||
</View>
|
||||
<View className={"text-sm text-blue-700"}>对方出钱可以不勾选</View>
|
||||
</View>
|
||||
{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 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(
|
||||
getItemsByCostType("PACKAGING_MATERIALS"),
|
||||
"PACKAGING_MATERIALS",
|
||||
)}
|
||||
</View>
|
||||
<View className={"mb-2.5"}>
|
||||
<View className="mb-2.5 text-sm font-bold">空纸箱信息</View>
|
||||
{renderItemList(getItemsByCostType("OTHER_COST"), "OTHER_COST")}
|
||||
</View>
|
||||
<View className={"mb-2.5"}>
|
||||
<View className="mb-2.5 text-sm font-bold">空礼盒信息</View>
|
||||
{renderItemList(getItemsByCostType("OTHER_COST"), "OTHER_COST")}
|
||||
</View>
|
||||
{/*<View className={"mb-2.5"}>*/}
|
||||
{/* <View className="mb-2.5 text-sm font-bold">空纸箱费用</View>*/}
|
||||
{/* {renderItemList(getItemsByCostType("OTHER_COST"), "OTHER_COST")}*/}
|
||||
{/*</View>*/}
|
||||
{/*<View className={"mb-2.5"}>*/}
|
||||
{/* <View className="mb-2.5 text-sm font-bold">空礼盒费用</View>*/}
|
||||
{/* {renderItemList(getItemsByCostType("OTHER_COST"), "OTHER_COST")}*/}
|
||||
{/*</View>*/}
|
||||
</View>
|
||||
);
|
||||
},
|
||||
@ -40,27 +40,38 @@ export default forwardRef<OrderPackageRef, IOrderPackageProps>(
|
||||
const orderPackageList = value.orderPackageList || [];
|
||||
setOrderPackageList(value.orderPackageList || []);
|
||||
|
||||
// 根据orderPackageList 初始化 packageTypeEnabled
|
||||
setPackageTypeEnabled({
|
||||
// 根据orderPackageList和supplierVO属性初始化 packageTypeEnabled
|
||||
const initialPackageTypeEnabled = {
|
||||
USED: undefined,
|
||||
EXTRA_USED: undefined,
|
||||
EXTRA: undefined,
|
||||
REMAIN: undefined,
|
||||
OWN: undefined,
|
||||
};
|
||||
|
||||
// 根据orderPackageList设置已有的纸箱类型
|
||||
if (orderPackageList.some((item) => item.boxType === "USED")) {
|
||||
// @ts-ignore
|
||||
USED:
|
||||
orderPackageList.some((item) => item.boxType === "USED") || undefined,
|
||||
initialPackageTypeEnabled.USED = true;
|
||||
}
|
||||
if (orderPackageList.some((item) => item.boxType === "EXTRA_USED")) {
|
||||
// @ts-ignore
|
||||
EXTRA_USED:
|
||||
orderPackageList.some((item) => item.boxType === "EXTRA_USED") ||
|
||||
undefined,
|
||||
initialPackageTypeEnabled.EXTRA_USED = true;
|
||||
}
|
||||
if (orderPackageList.some((item) => item.boxType === "EXTRA")) {
|
||||
// @ts-ignore
|
||||
EXTRA:
|
||||
orderPackageList.some((item) => item.boxType === "EXTRA") ||
|
||||
undefined,
|
||||
initialPackageTypeEnabled.EXTRA = true;
|
||||
}
|
||||
if (orderPackageList.some((item) => item.boxType === "REMAIN")) {
|
||||
// @ts-ignore
|
||||
REMAIN:
|
||||
orderPackageList.some((item) => item.boxType === "REMAIN") ||
|
||||
undefined,
|
||||
initialPackageTypeEnabled.REMAIN = true;
|
||||
}
|
||||
if (orderPackageList.some((item) => item.boxType === "OWN")) {
|
||||
// @ts-ignore
|
||||
OWN:
|
||||
orderPackageList.some((item) => item.boxType === "OWN") || undefined,
|
||||
});
|
||||
initialPackageTypeEnabled.OWN = true;
|
||||
}
|
||||
|
||||
setPackageTypeEnabled(initialPackageTypeEnabled);
|
||||
}, []);
|
||||
|
||||
const [orderPackageList, setOrderPackageList] = useState<
|
||||
@ -1286,7 +1297,7 @@ export default forwardRef<OrderPackageRef, IOrderPackageProps>(
|
||||
{!supplierVO.isPaper && (
|
||||
<>
|
||||
<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">
|
||||
<Button
|
||||
size="small"
|
||||
@ -1322,12 +1333,22 @@ export default forwardRef<OrderPackageRef, IOrderPackageProps>(
|
||||
)}
|
||||
</>
|
||||
</View>
|
||||
{/* 根据启用的类型渲染对应的内容 */}
|
||||
{/* 根据启用的类型和supplierVO属性渲染对应的内容 */}
|
||||
{renderPackageByType("OWN")}
|
||||
{renderPackageByType("USED")}
|
||||
{renderPackageByType("EXTRA_USED")}
|
||||
{renderPackageByType("EXTRA")}
|
||||
{renderPackageByType("REMAIN")}
|
||||
{supplierVO.isPaper && supplierVO.isLast && (
|
||||
<>
|
||||
{renderPackageByType("USED")}
|
||||
{renderPackageByType("EXTRA_USED")}
|
||||
{renderPackageByType("REMAIN")}
|
||||
</>
|
||||
)}
|
||||
{supplierVO.isPaper && !supplierVO.isLast && (
|
||||
<>
|
||||
{renderPackageByType("USED")}
|
||||
{renderPackageByType("EXTRA")}
|
||||
</>
|
||||
)}
|
||||
{!supplierVO.isPaper && renderPackageByType("USED")}
|
||||
|
||||
{/* 当选择了使用自己的纸箱时才渲染 */}
|
||||
{/* 批量添加弹窗 */}
|
||||
@ -20,10 +20,11 @@ export interface WeighRef {
|
||||
interface IWeightProps {
|
||||
value: SupplierVO;
|
||||
onChange: (supplierVO: SupplierVO) => void;
|
||||
supplierCount: number;
|
||||
}
|
||||
|
||||
export default forwardRef<WeighRef, IWeightProps>(function Weigh(props, ref) {
|
||||
const { value, onChange } = props;
|
||||
const { value, onChange, supplierCount } = props;
|
||||
|
||||
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="text-sm">空车来的时候带纸箱了吗?</View>
|
||||
<View className="text-neutral-darkest text-sm font-medium">
|
||||
<Radio.Group
|
||||
direction="horizontal"
|
||||
value={
|
||||
supplierVO.isPaper === true
|
||||
? "true"
|
||||
: supplierVO.isPaper === false
|
||||
? "false"
|
||||
: undefined
|
||||
}
|
||||
onChange={(value) => {
|
||||
// 清除错误状态
|
||||
setIsPaperError((prev) => ({
|
||||
...prev,
|
||||
[supplierVO.orderSupplierId]: false,
|
||||
}));
|
||||
{supplierCount == 1 ? (
|
||||
<Radio.Group
|
||||
direction="horizontal"
|
||||
value={
|
||||
supplierVO.isPaper === true
|
||||
? "true"
|
||||
: supplierVO.isPaper === false
|
||||
? "false"
|
||||
: undefined
|
||||
}
|
||||
onChange={(value) => {
|
||||
// 清除错误状态
|
||||
setIsPaperError((prev) => ({
|
||||
...prev,
|
||||
[supplierVO.orderSupplierId]: false,
|
||||
}));
|
||||
|
||||
// 根据用户选择设置是否包含空纸箱
|
||||
const isPaperValue =
|
||||
value === "true"
|
||||
? true
|
||||
: value === "false"
|
||||
? false
|
||||
: undefined;
|
||||
setSupplierVO({
|
||||
...supplierVO,
|
||||
isPaper: isPaperValue,
|
||||
});
|
||||
}}
|
||||
>
|
||||
<Radio value="true">带了</Radio>
|
||||
<Radio value="false">没带</Radio>
|
||||
</Radio.Group>
|
||||
// 根据用户选择设置是否包含空纸箱
|
||||
const isPaperValue =
|
||||
value === "true"
|
||||
? true
|
||||
: value === "false"
|
||||
? false
|
||||
: undefined;
|
||||
setSupplierVO({
|
||||
...supplierVO,
|
||||
isPaper: isPaperValue,
|
||||
});
|
||||
}}
|
||||
>
|
||||
<Radio value="true">带了</Radio>
|
||||
<Radio value="false">没带</Radio>
|
||||
</Radio.Group>
|
||||
) : supplierVO.isPaper === true ? (
|
||||
"带了"
|
||||
) : (
|
||||
"没带"
|
||||
)}
|
||||
</View>
|
||||
</View>
|
||||
{isPaperError[supplierVO.orderSupplierId] && (
|
||||
@ -429,6 +429,7 @@ export default hocAuth(function Page(props: CommonComponent) {
|
||||
|
||||
return (
|
||||
<Weigh
|
||||
supplierCount={orderSupplierList.length}
|
||||
key={item.orderSupplierId}
|
||||
ref={(ref) => {
|
||||
if (ref) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user