feat(purchase): 更新采购模块功能和UI细节

- 在成本列表中过滤掉空箱费、纸箱费、运费和草帘费
- 自动添加纸箱费用项到订单成本列表
- 根据装车方式调整步骤导航逻辑
- 优化车辆信息表单,增加单位显示和可选性检查
- 预览页面过滤不显示带空箱和纸箱的成本项
- 优化供应商列表滚动视图样式
- 新增装车方式切换确认逻辑及对话框
- 支持硒砂瓜产品的不同装车方式选择
- 定金和价格输入框添加单位标识
- 提交审核前检查计提费是否为零并提示确认
- 添加运费和草帘费到订单成本列表
- 修复服务接口类型定义中的字段顺序和缺失属性
- 升级应用版本号至 v0.0.33
This commit is contained in:
shenyifei 2025-12-12 17:08:36 +08:00
parent 97681ae969
commit a79fc0ef9f
13 changed files with 473 additions and 219 deletions

View File

@ -157,7 +157,12 @@ export default function CostList(props: {
{orderCosts.map((orderCost) => {
if (type === "MATERIAL_TYPE") {
if (orderCost.name === "空箱费" || orderCost.name === "纸箱费") {
if (
orderCost.name === "空箱费" ||
orderCost.name === "纸箱费" ||
orderCost.name === "运费" ||
orderCost.name === "草帘费"
) {
return <></>;
}
}

View File

@ -2,7 +2,7 @@ import { View } from "@tarojs/components";
import { Icon } from "@/components";
import { forwardRef, useEffect, useImperativeHandle, useState } from "react";
import { Button, Checkbox, Input, Toast } from "@nutui/nutui-react-taro";
import { generateShortId } from "@/utils";
import { generateShortId, PurchaseOrderCalculator } from "@/utils";
import { EmptyBoxModule } from "@/components/purchase";
// 定义ref暴露的方法接口
@ -21,6 +21,8 @@ export default forwardRef<OrderCostItemRef, IOrderCostItemProps>(
function OrderCostItem(props, ref) {
const { value, onChange } = props;
const calculator = new PurchaseOrderCalculator(value as any);
const {
orderId,
orderSupplierList,
@ -91,6 +93,27 @@ export default forwardRef<OrderCostItemRef, IOrderCostItemProps>(
});
});
// 自动把纸箱加进去
const boxCostItem = parsedCostTemplate.materialTypeList?.find(
(item: any) => item.name === "纸箱",
);
if (boxCostItem) {
newOrderCostItemList.push({
orderCostItemId: boxCostItem?.orderCostItemId || generateShortId(),
orderId: orderId,
costItemId: boxCostItem.costItemId,
name: boxCostItem.name,
price: calculator.getBoxSale(),
unit: boxCostItem.unit,
selected: true,
count: boxCostItem?.count || 1,
payerType: boxCostItem?.payerType,
type: boxCostItem.type,
rule: boxCostItem.rule,
});
}
onChange?.({
...value,
orderCostItemList: newOrderCostItemList,

View File

@ -336,7 +336,22 @@ export default forwardRef<OrderOptionRef, IOrderOptionProps>(
className="flex-1 bg-gray-200 text-gray-700"
onClick={() => {
if (active > 1) {
setActive(active - 1);
if (active === 5) {
// 获取当前选中的供应商
const selectedIndex = orderSupplierList.findIndex(
(supplier) => supplier.selected,
);
if (
orderSupplierList[selectedIndex].loadingMode ===
"FRAME_WITH_NET"
) {
setActive(active - 2);
} else {
setActive(active - 1);
}
} else {
setActive(active - 1);
}
}
}}
>
@ -407,7 +422,15 @@ export default forwardRef<OrderOptionRef, IOrderOptionProps>(
) {
const success = await saveSupplierInfo();
if (success) {
setActive(active + 1);
// 判断装箱方式
if (
orderSupplierList[selectedIndex].loadingMode ===
"FRAME_WITH_NET"
) {
setActive(active + 2);
} else {
setActive(active + 1);
}
}
}
} // 在第四步(包装信息)时进行校验

View File

@ -782,6 +782,14 @@ export default forwardRef<OrderVehicleRef, IOrderVehicleProps>(
onChange={handlePriceChange}
onBlur={handlePriceBlur}
/>
<View
className="text-gray-500"
style={{
padding: `var(--nutui-input-padding)`,
}}
>
</View>
</View>
{priceError && (
<View className="mt-1 text-xs text-red-500">
@ -796,7 +804,7 @@ export default forwardRef<OrderVehicleRef, IOrderVehicleProps>(
</View>
<Checkbox
className={"flex flex-row items-center"}
checked={orderVehicle.openStrawCurtain}
checked={orderVehicle?.openStrawCurtain}
onChange={(checked) => {
onChange?.({
...value,
@ -812,7 +820,7 @@ export default forwardRef<OrderVehicleRef, IOrderVehicleProps>(
</View>
</Checkbox>
</View>
{orderVehicle.openStrawCurtain && (
{orderVehicle?.openStrawCurtain && (
<View
className={`flex h-10 w-full items-center rounded-md ${strawCurtainPriceError ? "border-4 border-red-500" : "border-4 border-gray-300"}`}
>
@ -823,9 +831,17 @@ export default forwardRef<OrderVehicleRef, IOrderVehicleProps>(
onChange={handleStrawCurtainPriceChange}
onBlur={handleStrawCurtainPriceBlur}
/>
<View
className="text-gray-500"
style={{
padding: `var(--nutui-input-padding)`,
}}
>
</View>
</View>
)}
{strawCurtainPriceError && orderVehicle.openStrawCurtain && (
{strawCurtainPriceError && orderVehicle?.openStrawCurtain && (
<View className="mt-1 text-xs text-red-500">
</View>

View File

@ -368,7 +368,9 @@ export default function PurchasePreview(props: IPurchasePreviewProps) {
{purchaseOrder.orderCostItemList?.filter(
(orderCostItem: BusinessAPI.OrderCostItem) =>
orderCostItem.type === "MATERIAL_TYPE",
orderCostItem.type === "MATERIAL_TYPE" &&
orderCostItem.name !== "带空箱" &&
orderCostItem.name !== "纸箱",
).length > 0 && (
<>
<View className="text-sm font-bold">使</View>
@ -377,7 +379,9 @@ export default function PurchasePreview(props: IPurchasePreviewProps) {
{purchaseOrder.orderCostItemList
?.filter(
(orderCostItem: BusinessAPI.OrderCostItem) =>
orderCostItem.type === "MATERIAL_TYPE",
orderCostItem.type === "MATERIAL_TYPE" &&
orderCostItem.name !== "带空箱" &&
orderCostItem.name !== "纸箱",
)
.map((orderCostItem) => (
<View

View File

@ -70,7 +70,12 @@ export default function SupplierList(props: ISupplierListProps) {
return (
<View className={"sticky top-12 z-10 bg-[#D1D5DB] p-2.5"}>
<ScrollView className={"rounded-xl bg-white shadow-sm"} scrollX>
<ScrollView
className={
"border-primary rounded-lg rounded-xl border-4 bg-white shadow-sm"
}
scrollX
>
<View className="flex flex-row">
{orderSupplierList?.map((supplierVO: BusinessAPI.OrderSupplier) => (
<View

View File

@ -1,6 +1,7 @@
import { Image, View } from "@tarojs/components";
import {
Button,
Dialog,
Input,
Popup,
Radio,
@ -123,6 +124,11 @@ export default forwardRef<WeighRef, IWeightProps>(function Weigh(props, ref) {
[key: string]: boolean;
}>({});
// 装车方式切换确认状态
const [loadingModeConfirmVisible, setLoadingModeConfirmVisible] =
useState(false);
const [pendingLoadingMode, setPendingLoadingMode] = useState<string>("");
// 空磅照片上传处理函数
const handleEmptyWeightImgUpload = async () => {
await Taro.chooseImage({
@ -203,6 +209,49 @@ export default forwardRef<WeighRef, IWeightProps>(function Weigh(props, ref) {
});
};
// 检查是否有包装信息
const hasPackageInfo = () => {
return (
supplierVO.orderPackageList && supplierVO.orderPackageList.length > 0
);
};
// 处理装车方式切换
const handleLoadingModeChange = (newLoadingMode: string) => {
// 如果切换到"搭架子+网垫"且有包装信息,需要确认
if (newLoadingMode === "FRAME_WITH_NET" && hasPackageInfo()) {
setPendingLoadingMode(newLoadingMode);
setLoadingModeConfirmVisible(true);
} else {
// 直接切换
setSupplierVO({
...supplierVO,
loadingMode: newLoadingMode as any,
});
}
};
// 确认切换装车方式并清空包装信息
const confirmLoadingModeChange = () => {
setLoadingModeConfirmVisible(false);
setSupplierVO({
...supplierVO,
loadingMode: pendingLoadingMode as any,
orderPackageList: [], // 清空包装信息
});
Toast.show("toast", {
title: "提示",
icon: "success",
content: "已切换装车方式并清空包装信息",
});
};
// 取消切换装车方式
const cancelLoadingModeChange = () => {
setLoadingModeConfirmVisible(false);
setPendingLoadingMode("");
};
// 将校验方法暴露给父组件
useImperativeHandle(ref, () => ({
validate,
@ -566,27 +615,6 @@ export default forwardRef<WeighRef, IWeightProps>(function Weigh(props, ref) {
{isFirst && (
<>
{/* 装车方式 */}
{/*<View className="border-primary rounded-lg border-4 bg-white p-2.5 shadow-sm">*/}
{/* <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.pricingMethod}*/}
{/* onChange={(value) => {*/}
{/* setSupplierVO({*/}
{/* ...supplierVO,*/}
{/* pricingMethod: value as any,*/}
{/* });*/}
{/* }}*/}
{/* >*/}
{/* <Radio value="BY_GROSS_WEIGHT">需要</Radio>*/}
{/* <Radio value="BY_NET_WEIGHT">不需要</Radio>*/}
{/* </Radio.Group>*/}
{/* </View>*/}
{/* </View>*/}
{/*</View>*/}
<View className="border-primary rounded-lg border-4 bg-white p-2.5 shadow-sm">
<View className={"flex items-center justify-between gap-2.5"}>
<View className="text-sm"></View>
@ -637,55 +665,97 @@ export default forwardRef<WeighRef, IWeightProps>(function Weigh(props, ref) {
{productList.length > 0 && (
<View className="border-primary rounded-lg border-4 bg-white p-2.5 shadow-sm">
<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.productId}
onChange={(value) => {
// 清除错误状态
setProductIdError((prev) => ({
...prev,
[supplierVO.orderSupplierId]: false,
}));
<View className={"flex flex-col gap-2.5"}>
<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.productId}
onChange={(value) => {
// 清除错误状态
setProductIdError((prev) => ({
...prev,
[supplierVO.orderSupplierId]: false,
}));
if (value === "other") {
// 点击"其他"时打开弹窗
setProductPopupVisible(true);
} else {
// 根据用户选择设置西瓜品种
const productId = value as string;
const productVO = productList.find(
(p) => p.productId === productId,
);
if (value === "other") {
// 点击"其他"时打开弹窗
setProductPopupVisible(true);
} else {
// 根据用户选择设置西瓜品种
const productId = value as string;
const productVO = productList.find(
(p) => p.productId === productId,
);
if (productVO) {
setSupplierVO({
...supplierVO,
productId: productVO?.productId,
productName: productVO?.name,
});
if (productVO) {
setSupplierVO({
...supplierVO,
productId: productVO?.productId,
productName: productVO?.name,
loadingMode:
productVO?.name !== "硒砂瓜"
? "BOX_WITH_TAPE"
: undefined,
});
changeProduct(productVO);
changeProduct(productVO);
}
}
}
}}
>
<Radio
value={supplierVO.productId || productList?.[0].productId}
}}
>
{supplierVO.productName || productList?.[0].name}
</Radio>
<Radio value="other"></Radio>
</Radio.Group>
<Radio
value={
supplierVO.productId || productList?.[0].productId
}
>
{supplierVO.productName || productList?.[0].name}
</Radio>
<Radio value="other"></Radio>
</Radio.Group>
</View>
</View>
{isProductIdError[supplierVO.orderSupplierId] && (
<View className="mt-1 text-xs text-red-500">
西
</View>
)}
{/*装车方式 */}
{supplierVO.productName === "硒砂瓜" && (
<>
<View className="text-neutral-darkest text-sm font-medium">
</View>
<View className="flex flex-row gap-4">
<View
className={`flex flex-1 flex-row items-center justify-center rounded-md py-2 ${
supplierVO.loadingMode === "FRAME_WITH_NET"
? "bg-blue-100 text-blue-600"
: "border border-gray-300"
}`}
onClick={() => {
handleLoadingModeChange("FRAME_WITH_NET");
}}
>
+
</View>
<View
className={`flex flex-1 flex-row items-center justify-center rounded-md py-2 ${
supplierVO.loadingMode === "BOX_WITH_TAPE"
? "bg-blue-100 text-blue-600"
: "border border-gray-300"
}`}
onClick={() => {
handleLoadingModeChange("BOX_WITH_TAPE");
}}
>
++
</View>
</View>
</>
)}
</View>
{isProductIdError[supplierVO.orderSupplierId] && (
<View className="mt-1 text-xs text-red-500">
西
</View>
)}
</View>
)}
</>
@ -715,88 +785,92 @@ export default forwardRef<WeighRef, IWeightProps>(function Weigh(props, ref) {
{/* 有定金吗,有定金就要填写本车扣多少定金 */}
<View className="border-primary rounded-lg border-4 bg-white p-2.5 shadow-sm">
<View className={"flex items-center justify-between gap-2.5"}>
<View className="text-sm">{supplierVO.name}</View>
<View className="text-neutral-darkest text-sm font-medium">
<Radio.Group
direction="horizontal"
value={
supplierVO.isDepositPaid === true
? "true"
: supplierVO.isDepositPaid === false
? "false"
: undefined
}
onChange={(value) => {
const isDepositPaidValue =
value === "true"
? true
: value === "false"
? false
: undefined;
setSupplierVO({
...supplierVO,
// @ts-ignore
isDepositPaid: isDepositPaidValue,
// 如果选择了"有定金"默认定金金额为0
...(isDepositPaidValue === true && {
depositAmount: supplierVO.depositAmount ?? 0,
}),
});
}}
>
<Radio value="true"></Radio>
<Radio value="false"></Radio>
</Radio.Group>
</View>
</View>
{supplierVO.isDepositPaid === true && (
<View className="mt-2.5">
<View className="mb-1 text-sm"></View>
<View
className={`flex h-10 w-full items-center rounded-md ${depositError[supplierVO.orderSupplierId] ? "border-4 border-red-500" : "border-4 border-gray-300"}`}
>
<Input
placeholder="0"
type="digit"
value={supplierVO.depositAmount?.toString()}
<View className={"flex flex-col gap-2.5"}>
<View className={"flex items-center justify-between gap-2.5"}>
<View className="text-sm">{supplierVO.name}</View>
<View className="text-neutral-darkest text-sm font-medium">
<Radio.Group
direction="horizontal"
value={
supplierVO.isDepositPaid === true
? "true"
: supplierVO.isDepositPaid === false
? "false"
: undefined
}
onChange={(value) => {
const numValue = validatePrice(value);
if (numValue !== undefined) {
setSupplierVO({
...supplierVO,
depositAmount: numValue as any,
});
// 校验输入值
validateDepositAmount(true, numValue as any);
}
}}
onBlur={() => {
// 失去焦点时进行校验
validateDepositAmount(
supplierVO.isDepositPaid,
supplierVO.depositAmount,
);
}}
/>
<View
className="text-gray-500"
style={{
padding: `var(--nutui-input-padding)`,
const isDepositPaidValue =
value === "true"
? true
: value === "false"
? false
: undefined;
setSupplierVO({
...supplierVO,
// @ts-ignore
isDepositPaid: isDepositPaidValue,
// 如果选择了"有定金"默认定金金额为0
...(isDepositPaidValue === true && {
depositAmount: supplierVO.depositAmount ?? 0,
}),
});
}}
>
</View>
<Radio value="true"></Radio>
<Radio value="false"></Radio>
</Radio.Group>
</View>
{depositError[supplierVO.orderSupplierId] && (
<View className="mt-1 text-xs text-red-500">
(0)
</View>
)}
</View>
)}
{supplierVO.isDepositPaid === true && (
<>
<View className="text-neutral-darkest text-sm font-medium">
</View>
<View
className={`flex h-10 w-full items-center rounded-md ${depositError[supplierVO.orderSupplierId] ? "border-4 border-red-500" : "border-4 border-gray-300"}`}
>
<Input
placeholder="0"
type="digit"
value={supplierVO.depositAmount?.toString()}
onChange={(value) => {
const numValue = validatePrice(value);
if (numValue !== undefined) {
setSupplierVO({
...supplierVO,
depositAmount: numValue as any,
});
// 校验输入值
validateDepositAmount(true, numValue as any);
}
}}
onBlur={() => {
// 失去焦点时进行校验
validateDepositAmount(
supplierVO.isDepositPaid,
supplierVO.depositAmount,
);
}}
/>
<View
className="text-gray-500"
style={{
padding: `var(--nutui-input-padding)`,
}}
>
</View>
</View>
{depositError[supplierVO.orderSupplierId] && (
<View className="mt-1 text-xs text-red-500">
(0)
</View>
)}
</>
)}
</View>
</View>
{/* 采购单价区域 */}
@ -836,6 +910,14 @@ export default forwardRef<WeighRef, IWeightProps>(function Weigh(props, ref) {
validatePurchasePrice(supplierVO.purchasePrice);
}}
/>
<View
className="text-gray-500"
style={{
padding: `var(--nutui-input-padding)`,
}}
>
/
</View>
</View>
{priceError[supplierVO.orderSupplierId] && (
<View className="mt-1 text-xs text-red-500">
@ -887,6 +969,14 @@ export default forwardRef<WeighRef, IWeightProps>(function Weigh(props, ref) {
validateEmptyWeight(supplierVO.emptyWeight);
}}
/>
<View
className="text-gray-500"
style={{
padding: `var(--nutui-input-padding)`,
}}
>
kg
</View>
</View>
{emptyWeightError[supplierVO.orderSupplierId] && (
<View className="mt-1 text-xs text-red-500">
@ -938,6 +1028,14 @@ export default forwardRef<WeighRef, IWeightProps>(function Weigh(props, ref) {
validateTotalWeight(supplierVO.totalWeight);
}}
/>
<View
className="text-gray-500"
style={{
padding: `var(--nutui-input-padding)`,
}}
>
kg
</View>
</View>
{totalWeightError[supplierVO.orderSupplierId] && (
<View className="mt-1 text-xs text-red-500">
@ -1047,6 +1145,15 @@ export default forwardRef<WeighRef, IWeightProps>(function Weigh(props, ref) {
</View>
</View>
</View>
{/* 装车方式切换确认对话框 */}
<Dialog
visible={loadingModeConfirmVisible}
title="装车方式切换确认"
content="检测到已经录入包装信息,切换到搭架子+网垫将会清空所有包装信息,是否确认切换?"
onCancel={cancelLoadingModeChange}
onConfirm={confirmLoadingModeChange}
/>
</View>
);
});

View File

@ -43,7 +43,7 @@ export default function DeliveryFormSection(props: {
useEffect(() => {
init(purchaseOrderVO);
}, [purchaseOrderVO]);
}, [purchaseOrderVO.orderDealer.dealerId]);
// 更新模板配置
const updateTemplateConfig = async (template: any[], data: any) => {

View File

@ -1,2 +1,2 @@
// App 相关常量
export const APP_VERSION = "v0.0.32";
export const APP_VERSION = "v0.0.33";

View File

@ -303,6 +303,8 @@ export default hocAuth(function Page(props: CommonComponent) {
// 暂存和提交审核的Dialog状态
const [saveDialogVisible, setSaveDialogVisible] = useState(false);
const [submitDialogVisible, setSubmitDialogVisible] = useState(false);
const [provisionZeroConfirmVisible, setProvisionZeroConfirmVisible] =
useState(false);
// 控制更多操作的ActionSheet显示状态
const [moreActionVisible, setMoreActionVisible] = useState(false);
@ -352,9 +354,26 @@ export default hocAuth(function Page(props: CommonComponent) {
}
};
// 检查计提费是否为0
const checkProvisionFeeZero = () => {
const provisionCost = purchaseOrderVO?.orderCostList.find(
(item) => item.name === "计提费" && item.type === "OTHER_TYPE",
);
// 如果没有计提费或者计提费金额为0返回true
return !provisionCost || provisionCost.price === 0;
};
// 提交老板审核操作
const handleSubmit = () => {
setSubmitDialogVisible(true);
// 检查计提费是否为0
if (checkProvisionFeeZero()) {
// 计提费为0弹出确认对话框
setProvisionZeroConfirmVisible(true);
} else {
// 计提费不为0直接弹出提交确认对话框
setSubmitDialogVisible(true);
}
};
// 确认提交老板审核
@ -396,6 +415,17 @@ export default hocAuth(function Page(props: CommonComponent) {
}
};
// 确认计提费为0仍继续提交
const confirmProvisionZeroSubmit = () => {
setProvisionZeroConfirmVisible(false);
confirmSubmit();
};
// 取消提交当计提费为0时
const cancelProvisionZeroSubmit = () => {
setProvisionZeroConfirmVisible(false);
};
// 表单校验
const validateForm = () => {
// 校验销售方
@ -490,6 +520,38 @@ export default hocAuth(function Page(props: CommonComponent) {
selected: true,
});
}
// 加运费
if (purchaseOrderVO.orderVehicle.price) {
purchaseOrderVO.orderCostList.push({
orderCostId: generateShortId(),
costId: "",
name: "运费",
price: purchaseOrderVO.orderVehicle.price,
unit: "元",
count: 1,
type: "OTHER_TYPE",
costItemIds: [],
principal: "",
selected: true,
});
}
// 加草帘
if (purchaseOrderVO.orderVehicle.openStrawCurtain) {
purchaseOrderVO.orderCostList.push({
orderCostId: generateShortId(),
costId: "",
name: "草帘费",
price: purchaseOrderVO.orderVehicle.strawCurtainPrice!,
unit: "元",
count: 1,
type: "OTHER_TYPE",
costItemIds: [],
principal: "",
selected: true,
});
}
}
setPurchaseOrderVO(purchaseOrderVO);
@ -744,6 +806,16 @@ export default hocAuth(function Page(props: CommonComponent) {
onConfirm={confirmSave}
/>
{/* 计提费为0确认对话框 */}
<Dialog
visible={provisionZeroConfirmVisible}
title="计提费确认"
content="检测到计提费为0请确认是否需要继续提交给老板审核"
confirmText={"确认并提交"}
onCancel={cancelProvisionZeroSubmit}
onConfirm={confirmProvisionZeroSubmit}
/>
{/* 提交审核确认对话框 */}
<Dialog
visible={submitDialogVisible}

View File

@ -179,15 +179,6 @@ export default hocAuth(function Page(props: CommonComponent) {
setStep(purchase.steps[purchaseOrder?.active! - 1]);
}, [purchaseOrder?.active]);
// useEffect(() => {
// if (defaultStep) {
// setPurchaseOrder((prev) => ({
// ...prev!,
// active: defaultStep + 1,
// }));
// }
// }, [defaultStep]);
const setOrderSupplierList = (
orderSupplierList: BusinessAPI.OrderSupplier[],
) => {

View File

@ -2022,6 +2022,8 @@ declare namespace BusinessAPI {
type LastVehicleNoQry = {
/** 状态1_启用0_禁用 */
status?: boolean;
/** 经销商ID */
dealerId?: string;
};
type listAgreementParams = {
@ -2362,8 +2364,8 @@ declare namespace BusinessAPI {
errCode?: string;
errMessage?: string;
data?: AgreementVO[];
notEmpty?: boolean;
empty?: boolean;
notEmpty?: boolean;
};
type MultiResponseBoxBrandVO = {
@ -2371,8 +2373,8 @@ declare namespace BusinessAPI {
errCode?: string;
errMessage?: string;
data?: BoxBrandVO[];
notEmpty?: boolean;
empty?: boolean;
notEmpty?: boolean;
};
type MultiResponseBoxProductVO = {
@ -2380,8 +2382,8 @@ declare namespace BusinessAPI {
errCode?: string;
errMessage?: string;
data?: BoxProductVO[];
notEmpty?: boolean;
empty?: boolean;
notEmpty?: boolean;
};
type MultiResponseBoxSpecVO = {
@ -2389,8 +2391,8 @@ declare namespace BusinessAPI {
errCode?: string;
errMessage?: string;
data?: BoxSpecVO[];
notEmpty?: boolean;
empty?: boolean;
notEmpty?: boolean;
};
type MultiResponseCompanyPaymentAccountVO = {
@ -2398,8 +2400,8 @@ declare namespace BusinessAPI {
errCode?: string;
errMessage?: string;
data?: CompanyPaymentAccountVO[];
notEmpty?: boolean;
empty?: boolean;
notEmpty?: boolean;
};
type MultiResponseCompanyVO = {
@ -2407,8 +2409,8 @@ declare namespace BusinessAPI {
errCode?: string;
errMessage?: string;
data?: CompanyVO[];
notEmpty?: boolean;
empty?: boolean;
notEmpty?: boolean;
};
type MultiResponseCostItemVO = {
@ -2416,8 +2418,8 @@ declare namespace BusinessAPI {
errCode?: string;
errMessage?: string;
data?: CostItemVO[];
notEmpty?: boolean;
empty?: boolean;
notEmpty?: boolean;
};
type MultiResponseCostVO = {
@ -2425,8 +2427,8 @@ declare namespace BusinessAPI {
errCode?: string;
errMessage?: string;
data?: CostVO[];
notEmpty?: boolean;
empty?: boolean;
notEmpty?: boolean;
};
type MultiResponseDealerPaymentAccountVO = {
@ -2434,8 +2436,8 @@ declare namespace BusinessAPI {
errCode?: string;
errMessage?: string;
data?: DealerPaymentAccountVO[];
notEmpty?: boolean;
empty?: boolean;
notEmpty?: boolean;
};
type MultiResponseDealerRebateCustomerVO = {
@ -2443,8 +2445,8 @@ declare namespace BusinessAPI {
errCode?: string;
errMessage?: string;
data?: DealerRebateCustomerVO[];
notEmpty?: boolean;
empty?: boolean;
notEmpty?: boolean;
};
type MultiResponseDealerVO = {
@ -2452,8 +2454,8 @@ declare namespace BusinessAPI {
errCode?: string;
errMessage?: string;
data?: DealerVO[];
notEmpty?: boolean;
empty?: boolean;
notEmpty?: boolean;
};
type MultiResponseDealerWarehouseVO = {
@ -2461,8 +2463,8 @@ declare namespace BusinessAPI {
errCode?: string;
errMessage?: string;
data?: DealerWarehouseVO[];
notEmpty?: boolean;
empty?: boolean;
notEmpty?: boolean;
};
type MultiResponseDictionaryVO = {
@ -2470,8 +2472,8 @@ declare namespace BusinessAPI {
errCode?: string;
errMessage?: string;
data?: DictionaryVO[];
notEmpty?: boolean;
empty?: boolean;
notEmpty?: boolean;
};
type MultiResponseEmployeeVO = {
@ -2479,8 +2481,8 @@ declare namespace BusinessAPI {
errCode?: string;
errMessage?: string;
data?: EmployeeVO[];
notEmpty?: boolean;
empty?: boolean;
notEmpty?: boolean;
};
type MultiResponseGiftBoxVO = {
@ -2488,8 +2490,8 @@ declare namespace BusinessAPI {
errCode?: string;
errMessage?: string;
data?: GiftBoxVO[];
notEmpty?: boolean;
empty?: boolean;
notEmpty?: boolean;
};
type MultiResponseMaterialVO = {
@ -2497,8 +2499,8 @@ declare namespace BusinessAPI {
errCode?: string;
errMessage?: string;
data?: MaterialVO[];
notEmpty?: boolean;
empty?: boolean;
notEmpty?: boolean;
};
type MultiResponseMenuVO = {
@ -2506,8 +2508,8 @@ declare namespace BusinessAPI {
errCode?: string;
errMessage?: string;
data?: MenuVO[];
notEmpty?: boolean;
empty?: boolean;
notEmpty?: boolean;
};
type MultiResponsePermissionVO = {
@ -2515,8 +2517,8 @@ declare namespace BusinessAPI {
errCode?: string;
errMessage?: string;
data?: PermissionVO[];
notEmpty?: boolean;
empty?: boolean;
notEmpty?: boolean;
};
type MultiResponsePlatformVO = {
@ -2524,8 +2526,8 @@ declare namespace BusinessAPI {
errCode?: string;
errMessage?: string;
data?: PlatformVO[];
notEmpty?: boolean;
empty?: boolean;
notEmpty?: boolean;
};
type MultiResponseProductVO = {
@ -2533,8 +2535,8 @@ declare namespace BusinessAPI {
errCode?: string;
errMessage?: string;
data?: ProductVO[];
notEmpty?: boolean;
empty?: boolean;
notEmpty?: boolean;
};
type MultiResponsePurchaseOrderVO = {
@ -2542,8 +2544,8 @@ declare namespace BusinessAPI {
errCode?: string;
errMessage?: string;
data?: PurchaseOrderVO[];
notEmpty?: boolean;
empty?: boolean;
notEmpty?: boolean;
};
type MultiResponseRoleVO = {
@ -2551,8 +2553,8 @@ declare namespace BusinessAPI {
errCode?: string;
errMessage?: string;
data?: RoleVO[];
notEmpty?: boolean;
empty?: boolean;
notEmpty?: boolean;
};
type MultiResponseShipOrderVO = {
@ -2560,8 +2562,8 @@ declare namespace BusinessAPI {
errCode?: string;
errMessage?: string;
data?: ShipOrderVO[];
notEmpty?: boolean;
empty?: boolean;
notEmpty?: boolean;
};
type MultiResponseSupplierVO = {
@ -2569,8 +2571,8 @@ declare namespace BusinessAPI {
errCode?: string;
errMessage?: string;
data?: SupplierVO[];
notEmpty?: boolean;
empty?: boolean;
notEmpty?: boolean;
};
type MultiResponseTreeLong = {
@ -2578,8 +2580,8 @@ declare namespace BusinessAPI {
errCode?: string;
errMessage?: string;
data?: TreeLong[];
notEmpty?: boolean;
empty?: boolean;
notEmpty?: boolean;
};
type MultiResponseUserVO = {
@ -2587,8 +2589,8 @@ declare namespace BusinessAPI {
errCode?: string;
errMessage?: string;
data?: UserVO[];
notEmpty?: boolean;
empty?: boolean;
notEmpty?: boolean;
};
type OrderCompany = {
@ -2648,7 +2650,7 @@ declare namespace BusinessAPI {
| "PRODUCTION_TYPE"
| "OTHER_TYPE";
/** 关联项目id */
costItemIds?: number[];
costItemIds?: string[];
/** 是否选中 */
selected: boolean;
};
@ -2812,6 +2814,8 @@ declare namespace BusinessAPI {
purchasePrice: number;
/** 箱子类型 */
packageUsage: SupplierPackageUsage[];
/** 装车模式 1_搭架子+网垫2_纸箱+胶带+木隔板 */
loadingMode?: "FRAME_WITH_NET" | "BOX_WITH_TAPE";
/** 销售单价(元/斤) */
salePrice: number;
/** 报价方式1_按毛重报价2_按净重报价 */
@ -2891,6 +2895,8 @@ declare namespace BusinessAPI {
isDepositPaid?: boolean;
/** 定金金额 */
depositAmount?: number;
/** 装车模式 1_搭架子+网垫2_纸箱+胶带+木隔板 */
loadingMode?: "FRAME_WITH_NET" | "BOX_WITH_TAPE";
};
type OrderSupplierVO = {
@ -2918,6 +2924,8 @@ declare namespace BusinessAPI {
productId?: string;
/** 产品名称 */
productName?: string;
/** 装车模式 1_搭架子+网垫2_纸箱+胶带+木隔板 */
loadingMode?: "FRAME_WITH_NET" | "BOX_WITH_TAPE";
/** 空车重量(kg) */
emptyWeight?: number;
/** 总重量(kg) */
@ -3094,9 +3102,9 @@ declare namespace BusinessAPI {
pageSize?: number;
pageIndex?: number;
data?: AgreementVO[];
empty?: boolean;
notEmpty?: boolean;
totalPages?: number;
empty?: boolean;
};
type PageResponseBoxBrandVO = {
@ -3107,9 +3115,9 @@ declare namespace BusinessAPI {
pageSize?: number;
pageIndex?: number;
data?: BoxBrandVO[];
empty?: boolean;
notEmpty?: boolean;
totalPages?: number;
empty?: boolean;
};
type PageResponseBoxProductVO = {
@ -3120,9 +3128,9 @@ declare namespace BusinessAPI {
pageSize?: number;
pageIndex?: number;
data?: BoxProductVO[];
empty?: boolean;
notEmpty?: boolean;
totalPages?: number;
empty?: boolean;
};
type PageResponseBoxSpecVO = {
@ -3133,9 +3141,9 @@ declare namespace BusinessAPI {
pageSize?: number;
pageIndex?: number;
data?: BoxSpecVO[];
empty?: boolean;
notEmpty?: boolean;
totalPages?: number;
empty?: boolean;
};
type PageResponseChannelVO = {
@ -3146,9 +3154,9 @@ declare namespace BusinessAPI {
pageSize?: number;
pageIndex?: number;
data?: ChannelVO[];
empty?: boolean;
notEmpty?: boolean;
totalPages?: number;
empty?: boolean;
};
type PageResponseCompanyPaymentAccountVO = {
@ -3159,9 +3167,9 @@ declare namespace BusinessAPI {
pageSize?: number;
pageIndex?: number;
data?: CompanyPaymentAccountVO[];
empty?: boolean;
notEmpty?: boolean;
totalPages?: number;
empty?: boolean;
};
type PageResponseCompanyVO = {
@ -3172,9 +3180,9 @@ declare namespace BusinessAPI {
pageSize?: number;
pageIndex?: number;
data?: CompanyVO[];
empty?: boolean;
notEmpty?: boolean;
totalPages?: number;
empty?: boolean;
};
type PageResponseCostItemVO = {
@ -3185,9 +3193,9 @@ declare namespace BusinessAPI {
pageSize?: number;
pageIndex?: number;
data?: CostItemVO[];
empty?: boolean;
notEmpty?: boolean;
totalPages?: number;
empty?: boolean;
};
type PageResponseCostVO = {
@ -3198,9 +3206,9 @@ declare namespace BusinessAPI {
pageSize?: number;
pageIndex?: number;
data?: CostVO[];
empty?: boolean;
notEmpty?: boolean;
totalPages?: number;
empty?: boolean;
};
type PageResponseDealerPaymentAccountVO = {
@ -3211,9 +3219,9 @@ declare namespace BusinessAPI {
pageSize?: number;
pageIndex?: number;
data?: DealerPaymentAccountVO[];
empty?: boolean;
notEmpty?: boolean;
totalPages?: number;
empty?: boolean;
};
type PageResponseDealerRebateCustomerVO = {
@ -3224,9 +3232,9 @@ declare namespace BusinessAPI {
pageSize?: number;
pageIndex?: number;
data?: DealerRebateCustomerVO[];
empty?: boolean;
notEmpty?: boolean;
totalPages?: number;
empty?: boolean;
};
type PageResponseDealerVO = {
@ -3237,9 +3245,9 @@ declare namespace BusinessAPI {
pageSize?: number;
pageIndex?: number;
data?: DealerVO[];
empty?: boolean;
notEmpty?: boolean;
totalPages?: number;
empty?: boolean;
};
type PageResponseDealerWarehouseVO = {
@ -3250,9 +3258,9 @@ declare namespace BusinessAPI {
pageSize?: number;
pageIndex?: number;
data?: DealerWarehouseVO[];
empty?: boolean;
notEmpty?: boolean;
totalPages?: number;
empty?: boolean;
};
type PageResponseDictionaryVO = {
@ -3263,9 +3271,9 @@ declare namespace BusinessAPI {
pageSize?: number;
pageIndex?: number;
data?: DictionaryVO[];
empty?: boolean;
notEmpty?: boolean;
totalPages?: number;
empty?: boolean;
};
type PageResponseEmployeeVO = {
@ -3276,9 +3284,9 @@ declare namespace BusinessAPI {
pageSize?: number;
pageIndex?: number;
data?: EmployeeVO[];
empty?: boolean;
notEmpty?: boolean;
totalPages?: number;
empty?: boolean;
};
type PageResponseGiftBoxVO = {
@ -3289,9 +3297,9 @@ declare namespace BusinessAPI {
pageSize?: number;
pageIndex?: number;
data?: GiftBoxVO[];
empty?: boolean;
notEmpty?: boolean;
totalPages?: number;
empty?: boolean;
};
type PageResponseMaterialVO = {
@ -3302,9 +3310,9 @@ declare namespace BusinessAPI {
pageSize?: number;
pageIndex?: number;
data?: MaterialVO[];
empty?: boolean;
notEmpty?: boolean;
totalPages?: number;
empty?: boolean;
};
type PageResponseOrderSupplierVO = {
@ -3315,9 +3323,9 @@ declare namespace BusinessAPI {
pageSize?: number;
pageIndex?: number;
data?: OrderSupplierVO[];
empty?: boolean;
notEmpty?: boolean;
totalPages?: number;
empty?: boolean;
};
type PageResponsePermissionVO = {
@ -3328,9 +3336,9 @@ declare namespace BusinessAPI {
pageSize?: number;
pageIndex?: number;
data?: PermissionVO[];
empty?: boolean;
notEmpty?: boolean;
totalPages?: number;
empty?: boolean;
};
type PageResponsePlatformVO = {
@ -3341,9 +3349,9 @@ declare namespace BusinessAPI {
pageSize?: number;
pageIndex?: number;
data?: PlatformVO[];
empty?: boolean;
notEmpty?: boolean;
totalPages?: number;
empty?: boolean;
};
type PageResponseProductVO = {
@ -3354,9 +3362,9 @@ declare namespace BusinessAPI {
pageSize?: number;
pageIndex?: number;
data?: ProductVO[];
empty?: boolean;
notEmpty?: boolean;
totalPages?: number;
empty?: boolean;
};
type PageResponsePurchaseOrderVO = {
@ -3367,9 +3375,9 @@ declare namespace BusinessAPI {
pageSize?: number;
pageIndex?: number;
data?: PurchaseOrderVO[];
empty?: boolean;
notEmpty?: boolean;
totalPages?: number;
empty?: boolean;
};
type PageResponseRoleVO = {
@ -3380,9 +3388,9 @@ declare namespace BusinessAPI {
pageSize?: number;
pageIndex?: number;
data?: RoleVO[];
empty?: boolean;
notEmpty?: boolean;
totalPages?: number;
empty?: boolean;
};
type PageResponseShipOrderVO = {
@ -3393,9 +3401,9 @@ declare namespace BusinessAPI {
pageSize?: number;
pageIndex?: number;
data?: ShipOrderVO[];
empty?: boolean;
notEmpty?: boolean;
totalPages?: number;
empty?: boolean;
};
type PageResponseSupplierVO = {
@ -3406,9 +3414,9 @@ declare namespace BusinessAPI {
pageSize?: number;
pageIndex?: number;
data?: SupplierVO[];
empty?: boolean;
notEmpty?: boolean;
totalPages?: number;
empty?: boolean;
};
type PageResponseUserVO = {
@ -3419,9 +3427,9 @@ declare namespace BusinessAPI {
pageSize?: number;
pageIndex?: number;
data?: UserVO[];
empty?: boolean;
notEmpty?: boolean;
totalPages?: number;
empty?: boolean;
};
type pageRoleParams = {
@ -4919,11 +4927,11 @@ declare namespace BusinessAPI {
};
type TreeLong = {
config?: TreeNodeConfig;
weight?: any;
parentId?: number;
name?: { empty?: boolean };
id?: number;
parentId?: number;
config?: TreeNodeConfig;
weight?: any;
empty?: boolean;
};

File diff suppressed because one or more lines are too long