From 9be4076df81a27e7fce02f794b39e0ba2a34c324 Mon Sep 17 00:00:00 2001 From: shenyifei Date: Fri, 9 Jan 2026 11:18:18 +0800 Subject: [PATCH] =?UTF-8?q?feat(order):=20=E4=BC=98=E5=8C=96=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E5=A4=84=E7=90=86=E6=B5=81=E7=A8=8B=E5=92=8C=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E8=AE=A1=E7=AE=97=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在Step3Success组件中按车次正序排列订单 - 为MadeOption和MarketOption组件添加滚动到顶部功能 - 更新供应商数据结构,添加收款人姓名、银行名称等字段 - 修改TicketUpload组件中的毛重量显示和发票ID初始化 - 优化审批页面中的条件渲染逻辑,避免显示零值 - 更新销售价格计算逻辑,使用总重量替代供应商数量 - 移除废弃的StallWeightCalculator类,整合到SupplierWeightCalculator中 - 修复小数计算精度问题,统一使用两位小数精度 - 添加草帘费成本的开关控制逻辑 --- .../src/components/delivery/Step3Success.tsx | 7 + .../components/order/module/MadeOption.tsx | 18 +- .../components/order/module/MarketOption.tsx | 18 +- .../components/order/module/OrderVehicle.tsx | 4 +- .../components/order/module/TicketUpload.tsx | 12 +- .../order/supplier/OrderSupplierPicker.tsx | 13 +- packages/app-client/src/constant/app.ts | 2 +- .../app-client/src/pages/approval/audit.tsx | 59 ++-- packages/app-client/src/pages/audit/audit.tsx | 36 ++- .../src/pages/purchase/made/create.tsx | 1 + .../src/services/business/typings.d.ts | 2 +- .../classes/calculators/core/BusinessRules.ts | 4 + .../classes/calculators/core/DecimalUtils.ts | 4 +- .../calculators/modules/SalesCalculator.ts | 16 +- .../modules/StallWeightCalculator.ts | 285 ------------------ .../modules/SupplierWeightCalculator.ts | 92 ++++-- 16 files changed, 182 insertions(+), 391 deletions(-) delete mode 100644 packages/app-client/src/utils/classes/calculators/modules/StallWeightCalculator.ts diff --git a/packages/app-client/src/components/delivery/Step3Success.tsx b/packages/app-client/src/components/delivery/Step3Success.tsx index f9f46e9..5b4345f 100644 --- a/packages/app-client/src/components/delivery/Step3Success.tsx +++ b/packages/app-client/src/components/delivery/Step3Success.tsx @@ -51,6 +51,13 @@ export default function Step3Success(props: Step3SuccessProps) { const profitData: ProfitTableRow[] = []; let includeNext = true; + // orderVOList 根据车次正序 + orderVOList.sort((a, b) => { + return ( + Number(a.orderVehicle.vehicleNo) - Number(b.orderVehicle?.vehicleNo) + ); + }); + for (const order of orderVOList) { // 如果还没有到达当前车次,继续 if (includeNext) { diff --git a/packages/app-client/src/components/order/module/MadeOption.tsx b/packages/app-client/src/components/order/module/MadeOption.tsx index 86350a6..d1989e4 100644 --- a/packages/app-client/src/components/order/module/MadeOption.tsx +++ b/packages/app-client/src/components/order/module/MadeOption.tsx @@ -10,6 +10,7 @@ import { business } from "@/services"; // 定义ref暴露的方法接口 export interface MadeOptionRef { onAdd: () => void; + scrollToTop: () => void; } interface IMadeOptionProps { @@ -45,7 +46,16 @@ export default forwardRef(function MadeOption( const active = Number(value.active); + // 滚动到页面顶部 + const scrollToTop = () => { + Taro.pageScrollTo({ + scrollTop: 0, + duration: 100, + }); + }; + const setActive = (active: number) => { + scrollToTop(); onChange({ ...value, active, @@ -251,6 +261,7 @@ export default forwardRef(function MadeOption( return; } + scrollToTop(); onChange({ ...value, active: 2, @@ -263,10 +274,14 @@ export default forwardRef(function MadeOption( orderSupplierId: generateShortId(), supplierId: "", name: "瓜农" + (orderSupplierList.length + 1), + payeeName: "", idCard: "", + bankName: "", bankCard: "", phone: "", selected: true, + loadingMode: orderSupplierList[selectedIndex].loadingMode, + pricingMethod: orderSupplierList[selectedIndex].pricingMethod, isPaper: orderSupplierList[selectedIndex].isPaper, orderPackageList: [], productId: orderSupplierList[selectedIndex]?.productId, @@ -280,6 +295,7 @@ export default forwardRef(function MadeOption( // 将校验方法暴露给父组件 useImperativeHandle(ref, () => ({ onAdd, + scrollToTop, })); async function saveDraft() { @@ -316,7 +332,7 @@ export default forwardRef(function MadeOption( content: "当前采购订单已暂存成功", }); Taro.redirectTo({ - url: purchase.path[orderVO.type].drafts, + url: purchase.path["PRODUCTION_PURCHASE"].drafts, }); } }, diff --git a/packages/app-client/src/components/order/module/MarketOption.tsx b/packages/app-client/src/components/order/module/MarketOption.tsx index 8b32c5a..8b7c497 100644 --- a/packages/app-client/src/components/order/module/MarketOption.tsx +++ b/packages/app-client/src/components/order/module/MarketOption.tsx @@ -10,6 +10,7 @@ import purchase from "@/constant/purchase"; // 定义ref暴露的方法接口 export interface MarketOptionRef { onAdd: () => void; + scrollToTop: () => void; } interface IMarketOptionProps { @@ -39,7 +40,15 @@ export default forwardRef( const active = Number(value.active); + // 滚动到页面顶部 + const scrollToTop = () => { + Taro.pageScrollTo({ + scrollTop: 0, + duration: 100, + }); + }; const setActive = (active: number) => { + scrollToTop(); onChange({ ...value, active, @@ -192,6 +201,7 @@ export default forwardRef( return; } + scrollToTop(); onChange({ ...value, active: 2, @@ -204,11 +214,14 @@ export default forwardRef( orderSupplierId: generateShortId(), supplierId: "", name: "档口" + (orderSupplierList.length + 1), + payeeName: "", idCard: "", + bankName: "", bankCard: "", phone: "", selected: true, - isPaper: orderSupplierList[selectedIndex].isPaper, + loadingMode: orderSupplierList[selectedIndex].loadingMode, + pricingMethod: orderSupplierList[selectedIndex].pricingMethod, orderPackageList: [], productId: orderSupplierList[selectedIndex]?.productId, productName: orderSupplierList[selectedIndex]?.productName, @@ -221,6 +234,7 @@ export default forwardRef( // 将校验方法暴露给父组件 useImperativeHandle(ref, () => ({ onAdd, + scrollToTop, })); async function saveDraft() { @@ -252,7 +266,7 @@ export default forwardRef( content: "当前采购订单已暂存成功", }); Taro.redirectTo({ - url: "/pages/purchase/made/drafts", + url: purchase.path["MARKET_PURCHASE"].drafts, }); } }, diff --git a/packages/app-client/src/components/order/module/OrderVehicle.tsx b/packages/app-client/src/components/order/module/OrderVehicle.tsx index c400c7d..dee08d8 100644 --- a/packages/app-client/src/components/order/module/OrderVehicle.tsx +++ b/packages/app-client/src/components/order/module/OrderVehicle.tsx @@ -485,10 +485,8 @@ export default forwardRef( plate: newVehicle.plate?.split("-")[0]!, dealerId: newVehicle.dealerId || orderVehicle?.dealerId, dealerName: newVehicle.dealerName || orderVehicle?.dealerName, - openStrawCurtain: false, - //@ts-ignore - strawCurtainPrice: "", deliveryTime: dayjs().format("YYYY-MM-DD"), + //@ts-ignore originalData: originalData || "", }, orderDealer: { diff --git a/packages/app-client/src/components/order/module/TicketUpload.tsx b/packages/app-client/src/components/order/module/TicketUpload.tsx index 7b7718e..175e5d7 100644 --- a/packages/app-client/src/components/order/module/TicketUpload.tsx +++ b/packages/app-client/src/components/order/module/TicketUpload.tsx @@ -95,6 +95,14 @@ export default function TicketUpload(props: ITicketUploadProps) { {supplierVO.netWeight || 0} + + + 毛重量(斤) + + + {supplierVO.grossWeight || 0} + + 采购单价(元/斤) @@ -167,7 +175,7 @@ export default function TicketUpload(props: ITicketUploadProps) { ...supplierVO!, invoiceImg: [], invoiceUpload: false, - invoiceId: 0, + invoiceId: undefined, }); }} > @@ -185,7 +193,7 @@ export default function TicketUpload(props: ITicketUploadProps) { ...supplierVO!, invoiceImg: [], invoiceUpload: false, - invoiceId: 0, + invoiceId: undefined, }); Toast.show("toast", { title: "删除成功", diff --git a/packages/app-client/src/components/order/supplier/OrderSupplierPicker.tsx b/packages/app-client/src/components/order/supplier/OrderSupplierPicker.tsx index d01c42d..345aa40 100644 --- a/packages/app-client/src/components/order/supplier/OrderSupplierPicker.tsx +++ b/packages/app-client/src/components/order/supplier/OrderSupplierPicker.tsx @@ -27,8 +27,8 @@ export default function OrderSupplierPicker(props: IOrderSupplierPickerProps) { const [orderSupplierList, setOrderSupplierList] = useState< BusinessAPI.OrderSupplierVO[] >([]); - // 发票开具人(有开发票资质的瓜农) - const [invoiceIssuer, setInvoiceIssuer] = useState(); + // 瓜农 + const [supplierVO, setSupplierVO] = useState(); const [selectedIds, setSelectedIds] = useState>(new Set()); useEffect(() => { @@ -112,7 +112,7 @@ export default function OrderSupplierPicker(props: IOrderSupplierPickerProps) { { - setInvoiceIssuer(supplierVO); + setSupplierVO(supplierVO); actionRef.current?.reload(); }} trigger={ @@ -120,14 +120,14 @@ export default function OrderSupplierPicker(props: IOrderSupplierPickerProps) { className={`border-primary flex h-6 items-center rounded-md border-2 px-2.5`} > - {invoiceIssuer?.name || "发票开具人"} + {supplierVO?.name || "瓜农"} - {invoiceIssuer?.name ? ( + {supplierVO?.name ? ( { - setInvoiceIssuer(undefined); + setSupplierVO(undefined); actionRef.current?.reload(); event.stopPropagation(); }} @@ -390,6 +390,7 @@ export default function OrderSupplierPicker(props: IOrderSupplierPickerProps) { invoiceUpload: false, poStates: ["AUDITING", "COMPLETED"], poType: "PRODUCTION_PURCHASE", + supplierId: supplierVO?.supplierId, }, }); diff --git a/packages/app-client/src/constant/app.ts b/packages/app-client/src/constant/app.ts index 8f5de5c..898c8cb 100644 --- a/packages/app-client/src/constant/app.ts +++ b/packages/app-client/src/constant/app.ts @@ -1,2 +1,2 @@ // App 相关常量 -export const APP_VERSION = "v0.0.66"; +export const APP_VERSION = "v0.0.69"; diff --git a/packages/app-client/src/pages/approval/audit.tsx b/packages/app-client/src/pages/approval/audit.tsx index 1b6ab8b..a1fec51 100644 --- a/packages/app-client/src/pages/approval/audit.tsx +++ b/packages/app-client/src/pages/approval/audit.tsx @@ -251,54 +251,53 @@ export default hocAuth(function Page(props: CommonComponent) { ); })} - {orderVO.orderDealer?.enableLoss && ( + {orderVO.orderDealer?.enableLoss && + Number(orderVO.orderDealer?.lossAmount) > 0 && ( + + 损耗金额 + + ¥{orderVO.orderDealer?.lossAmount} 元 + + + )} + + {Number(orderVO.orderDealer?.taxProvision || 0) > 0 && ( - 损耗金额 + 计提税金 - ¥{orderVO.orderDealer?.lossAmount} 元 + ¥{orderVO.orderDealer?.taxProvision} 元 )} - {orderVO.orderDealer?.taxProvision && - orderVO.orderDealer?.taxProvision > 0 && ( - - 计提税金 - - ¥{orderVO.orderDealer?.taxProvision} 元 - - - )} - - {orderVO.orderDealer?.taxSubsidy && - orderVO.orderDealer?.taxSubsidy > 0 && ( - - 公司返点 - - ¥{orderVO.orderDealer?.taxSubsidy} 元 - - - )} - - {orderVO.orderRebate?.amount && orderVO.orderRebate?.amount > 0 && ( + {Number(orderVO.orderDealer?.taxSubsidy || 0) > 0 && ( - 个人返点 + 公司返点 - ¥{orderVO.orderRebate?.amount} 元 + ¥{orderVO.orderDealer?.taxSubsidy} 元 )} - {orderVO.orderDealer?.costDifference && - orderVO.orderDealer?.costDifference > 0 && ( + {orderVO.orderRebate && + Number(orderVO.orderRebate.amount || 0) > 0 && ( - 调诚信志远分成 + 个人返点 - ¥{orderVO.orderDealer?.costDifference} 元 + ¥{orderVO.orderRebate?.amount} 元 )} + {Number(orderVO.orderDealer?.costDifference || 0) > 0 && ( + + 调诚信志远分成 + + ¥{orderVO.orderDealer?.costDifference} 元 + + + )} + diff --git a/packages/app-client/src/pages/audit/audit.tsx b/packages/app-client/src/pages/audit/audit.tsx index 20c4d4b..79e4557 100644 --- a/packages/app-client/src/pages/audit/audit.tsx +++ b/packages/app-client/src/pages/audit/audit.tsx @@ -719,6 +719,7 @@ export default hocAuth(function Page(props: CommonComponent) { }) .filter(Boolean); + console.log("orderVO", orderVO); return ( <> - ¥ {personalProfit || "-"} + ¥ {personalProfit || "0"} - {auditVO?.type === "REVIEWER_AUDIT" && - (auditVO.state === "WAITING_AUDIT" || - auditVO.state === "AUDIT_REJECTED") ? ( + {orderVO.state === "AUDITING" && + (orderVO.auditState === "PENDING_QUOTE_APPROVAL" || + orderVO.auditState === "BOSS_REJECTED") ? ( <>