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) => { {orderCosts.map((orderCost) => {
if (type === "MATERIAL_TYPE") { if (type === "MATERIAL_TYPE") {
if (orderCost.name === "空箱费" || orderCost.name === "纸箱费") { if (
orderCost.name === "空箱费" ||
orderCost.name === "纸箱费" ||
orderCost.name === "运费" ||
orderCost.name === "草帘费"
) {
return <></>; return <></>;
} }
} }

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 { Button, Checkbox, Input, Toast } from "@nutui/nutui-react-taro"; import { Button, Checkbox, Input, Toast } from "@nutui/nutui-react-taro";
import { generateShortId } from "@/utils"; import { generateShortId, PurchaseOrderCalculator } from "@/utils";
import { EmptyBoxModule } from "@/components/purchase"; import { EmptyBoxModule } from "@/components/purchase";
// 定义ref暴露的方法接口 // 定义ref暴露的方法接口
@ -21,6 +21,8 @@ export default forwardRef<OrderCostItemRef, IOrderCostItemProps>(
function OrderCostItem(props, ref) { function OrderCostItem(props, ref) {
const { value, onChange } = props; const { value, onChange } = props;
const calculator = new PurchaseOrderCalculator(value as any);
const { const {
orderId, orderId,
orderSupplierList, 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?.({ onChange?.({
...value, ...value,
orderCostItemList: newOrderCostItemList, orderCostItemList: newOrderCostItemList,

View File

@ -336,7 +336,22 @@ export default forwardRef<OrderOptionRef, IOrderOptionProps>(
className="flex-1 bg-gray-200 text-gray-700" className="flex-1 bg-gray-200 text-gray-700"
onClick={() => { onClick={() => {
if (active > 1) { 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(); const success = await saveSupplierInfo();
if (success) { 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} onChange={handlePriceChange}
onBlur={handlePriceBlur} onBlur={handlePriceBlur}
/> />
<View
className="text-gray-500"
style={{
padding: `var(--nutui-input-padding)`,
}}
>
</View>
</View> </View>
{priceError && ( {priceError && (
<View className="mt-1 text-xs text-red-500"> <View className="mt-1 text-xs text-red-500">
@ -796,7 +804,7 @@ export default forwardRef<OrderVehicleRef, IOrderVehicleProps>(
</View> </View>
<Checkbox <Checkbox
className={"flex flex-row items-center"} className={"flex flex-row items-center"}
checked={orderVehicle.openStrawCurtain} checked={orderVehicle?.openStrawCurtain}
onChange={(checked) => { onChange={(checked) => {
onChange?.({ onChange?.({
...value, ...value,
@ -812,7 +820,7 @@ export default forwardRef<OrderVehicleRef, IOrderVehicleProps>(
</View> </View>
</Checkbox> </Checkbox>
</View> </View>
{orderVehicle.openStrawCurtain && ( {orderVehicle?.openStrawCurtain && (
<View <View
className={`flex h-10 w-full items-center rounded-md ${strawCurtainPriceError ? "border-4 border-red-500" : "border-4 border-gray-300"}`} 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} onChange={handleStrawCurtainPriceChange}
onBlur={handleStrawCurtainPriceBlur} onBlur={handleStrawCurtainPriceBlur}
/> />
<View
className="text-gray-500"
style={{
padding: `var(--nutui-input-padding)`,
}}
>
</View>
</View> </View>
)} )}
{strawCurtainPriceError && orderVehicle.openStrawCurtain && ( {strawCurtainPriceError && orderVehicle?.openStrawCurtain && (
<View className="mt-1 text-xs text-red-500"> <View className="mt-1 text-xs text-red-500">
</View> </View>

View File

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

View File

@ -70,7 +70,12 @@ export default function SupplierList(props: ISupplierListProps) {
return ( return (
<View className={"sticky top-12 z-10 bg-[#D1D5DB] p-2.5"}> <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"> <View className="flex flex-row">
{orderSupplierList?.map((supplierVO: BusinessAPI.OrderSupplier) => ( {orderSupplierList?.map((supplierVO: BusinessAPI.OrderSupplier) => (
<View <View

View File

@ -1,6 +1,7 @@
import { Image, View } from "@tarojs/components"; import { Image, View } from "@tarojs/components";
import { import {
Button, Button,
Dialog,
Input, Input,
Popup, Popup,
Radio, Radio,
@ -123,6 +124,11 @@ export default forwardRef<WeighRef, IWeightProps>(function Weigh(props, ref) {
[key: string]: boolean; [key: string]: boolean;
}>({}); }>({});
// 装车方式切换确认状态
const [loadingModeConfirmVisible, setLoadingModeConfirmVisible] =
useState(false);
const [pendingLoadingMode, setPendingLoadingMode] = useState<string>("");
// 空磅照片上传处理函数 // 空磅照片上传处理函数
const handleEmptyWeightImgUpload = async () => { const handleEmptyWeightImgUpload = async () => {
await Taro.chooseImage({ 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, () => ({ useImperativeHandle(ref, () => ({
validate, validate,
@ -566,27 +615,6 @@ export default forwardRef<WeighRef, IWeightProps>(function Weigh(props, ref) {
{isFirst && ( {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="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={"flex items-center justify-between gap-2.5"}>
<View className="text-sm"></View> <View className="text-sm"></View>
@ -637,55 +665,97 @@ export default forwardRef<WeighRef, IWeightProps>(function Weigh(props, ref) {
{productList.length > 0 && ( {productList.length > 0 && (
<View className="border-primary rounded-lg border-4 bg-white p-2.5 shadow-sm"> <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={"flex flex-col gap-2.5"}>
<View className="text-sm">西</View> <View className={"flex items-center justify-between gap-2.5"}>
<View className="text-neutral-darkest text-sm font-medium"> <View className="text-sm">西</View>
<Radio.Group <View className="text-neutral-darkest text-sm font-medium">
direction="horizontal" <Radio.Group
value={supplierVO.productId} direction="horizontal"
onChange={(value) => { value={supplierVO.productId}
// 清除错误状态 onChange={(value) => {
setProductIdError((prev) => ({ // 清除错误状态
...prev, setProductIdError((prev) => ({
[supplierVO.orderSupplierId]: false, ...prev,
})); [supplierVO.orderSupplierId]: false,
}));
if (value === "other") { if (value === "other") {
// 点击"其他"时打开弹窗 // 点击"其他"时打开弹窗
setProductPopupVisible(true); setProductPopupVisible(true);
} else { } else {
// 根据用户选择设置西瓜品种 // 根据用户选择设置西瓜品种
const productId = value as string; const productId = value as string;
const productVO = productList.find( const productVO = productList.find(
(p) => p.productId === productId, (p) => p.productId === productId,
); );
if (productVO) { if (productVO) {
setSupplierVO({ setSupplierVO({
...supplierVO, ...supplierVO,
productId: productVO?.productId, productId: productVO?.productId,
productName: productVO?.name, 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={
<Radio value="other"></Radio> supplierVO.productId || productList?.[0].productId
</Radio.Group> }
>
{supplierVO.productName || productList?.[0].name}
</Radio>
<Radio value="other"></Radio>
</Radio.Group>
</View>
</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> </View>
{isProductIdError[supplierVO.orderSupplierId] && (
<View className="mt-1 text-xs text-red-500">
西
</View>
)}
</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="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={"flex flex-col gap-2.5"}>
<View className="text-sm">{supplierVO.name}</View> <View className={"flex items-center justify-between gap-2.5"}>
<View className="text-neutral-darkest text-sm font-medium"> <View className="text-sm">{supplierVO.name}</View>
<Radio.Group <View className="text-neutral-darkest text-sm font-medium">
direction="horizontal" <Radio.Group
value={ direction="horizontal"
supplierVO.isDepositPaid === true value={
? "true" supplierVO.isDepositPaid === true
: supplierVO.isDepositPaid === false ? "true"
? "false" : supplierVO.isDepositPaid === false
: undefined ? "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()}
onChange={(value) => { onChange={(value) => {
const numValue = validatePrice(value); const isDepositPaidValue =
if (numValue !== undefined) { value === "true"
setSupplierVO({ ? true
...supplierVO, : value === "false"
depositAmount: numValue as any, ? false
}); : undefined;
// 校验输入值
validateDepositAmount(true, numValue as any); setSupplierVO({
} ...supplierVO,
}} // @ts-ignore
onBlur={() => { isDepositPaid: isDepositPaidValue,
// 失去焦点时进行校验 // 如果选择了"有定金"默认定金金额为0
validateDepositAmount( ...(isDepositPaidValue === true && {
supplierVO.isDepositPaid, depositAmount: supplierVO.depositAmount ?? 0,
supplierVO.depositAmount, }),
); });
}}
/>
<View
className="text-gray-500"
style={{
padding: `var(--nutui-input-padding)`,
}} }}
> >
<Radio value="true"></Radio>
</View> <Radio value="false"></Radio>
</Radio.Group>
</View> </View>
{depositError[supplierVO.orderSupplierId] && (
<View className="mt-1 text-xs text-red-500">
(0)
</View>
)}
</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> </View>
{/* 采购单价区域 */} {/* 采购单价区域 */}
@ -836,6 +910,14 @@ export default forwardRef<WeighRef, IWeightProps>(function Weigh(props, ref) {
validatePurchasePrice(supplierVO.purchasePrice); validatePurchasePrice(supplierVO.purchasePrice);
}} }}
/> />
<View
className="text-gray-500"
style={{
padding: `var(--nutui-input-padding)`,
}}
>
/
</View>
</View> </View>
{priceError[supplierVO.orderSupplierId] && ( {priceError[supplierVO.orderSupplierId] && (
<View className="mt-1 text-xs text-red-500"> <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); validateEmptyWeight(supplierVO.emptyWeight);
}} }}
/> />
<View
className="text-gray-500"
style={{
padding: `var(--nutui-input-padding)`,
}}
>
kg
</View>
</View> </View>
{emptyWeightError[supplierVO.orderSupplierId] && ( {emptyWeightError[supplierVO.orderSupplierId] && (
<View className="mt-1 text-xs text-red-500"> <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); validateTotalWeight(supplierVO.totalWeight);
}} }}
/> />
<View
className="text-gray-500"
style={{
padding: `var(--nutui-input-padding)`,
}}
>
kg
</View>
</View> </View>
{totalWeightError[supplierVO.orderSupplierId] && ( {totalWeightError[supplierVO.orderSupplierId] && (
<View className="mt-1 text-xs text-red-500"> <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> </View>
</View> </View>
{/* 装车方式切换确认对话框 */}
<Dialog
visible={loadingModeConfirmVisible}
title="装车方式切换确认"
content="检测到已经录入包装信息,切换到搭架子+网垫将会清空所有包装信息,是否确认切换?"
onCancel={cancelLoadingModeChange}
onConfirm={confirmLoadingModeChange}
/>
</View> </View>
); );
}); });

View File

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

View File

@ -1,2 +1,2 @@
// App 相关常量 // 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状态 // 暂存和提交审核的Dialog状态
const [saveDialogVisible, setSaveDialogVisible] = useState(false); const [saveDialogVisible, setSaveDialogVisible] = useState(false);
const [submitDialogVisible, setSubmitDialogVisible] = useState(false); const [submitDialogVisible, setSubmitDialogVisible] = useState(false);
const [provisionZeroConfirmVisible, setProvisionZeroConfirmVisible] =
useState(false);
// 控制更多操作的ActionSheet显示状态 // 控制更多操作的ActionSheet显示状态
const [moreActionVisible, setMoreActionVisible] = useState(false); 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 = () => { 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 = () => { const validateForm = () => {
// 校验销售方 // 校验销售方
@ -490,6 +520,38 @@ export default hocAuth(function Page(props: CommonComponent) {
selected: true, 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); setPurchaseOrderVO(purchaseOrderVO);
@ -744,6 +806,16 @@ export default hocAuth(function Page(props: CommonComponent) {
onConfirm={confirmSave} onConfirm={confirmSave}
/> />
{/* 计提费为0确认对话框 */}
<Dialog
visible={provisionZeroConfirmVisible}
title="计提费确认"
content="检测到计提费为0请确认是否需要继续提交给老板审核"
confirmText={"确认并提交"}
onCancel={cancelProvisionZeroSubmit}
onConfirm={confirmProvisionZeroSubmit}
/>
{/* 提交审核确认对话框 */} {/* 提交审核确认对话框 */}
<Dialog <Dialog
visible={submitDialogVisible} visible={submitDialogVisible}

View File

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

View File

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

File diff suppressed because one or more lines are too long