From e1d4824ad8433b1bd1b72dfdf19e782e72d8b685 Mon Sep 17 00:00:00 2001 From: shenyifei Date: Sat, 8 Nov 2025 15:11:08 +0800 Subject: [PATCH] =?UTF-8?q?feat(purchase):=20=E6=B7=BB=E5=8A=A0=E9=87=87?= =?UTF-8?q?=E8=B4=AD=E5=8D=95=E5=AE=A1=E6=A0=B8=E9=80=9A=E8=BF=87=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E5=8F=8A=E5=8F=91=E8=B4=A7=E5=8D=95=E7=94=9F=E6=88=90?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增采购单审核通过页面,展示审核通过后的采购单信息 - 实现自动关联并展示发货单信息 - 添加快捷生成发货单据、采购底单和成本单的功能 - 根据经销商配置控制可生成的单据类型 - 完善审核通过后页面的UI布局和交互逻辑 - 优化订单审核完成后跳转逻辑,携带订单ID参数 - 在工作台常量中增加发货单菜单项 - 重构认证高阶组件,将overlay状态管理改为loading状态 - 优化纸箱包装模块的类型标签显示和分隔线样式 - 修复部分条件过滤逻辑和按钮状态判断代码格式问题 --- packages/app-client/src/app.config.ts | 2 +- .../purchase/module/OrderPackage.tsx | 77 +++-- packages/app-client/src/constant/workbench.ts | 8 + packages/app-client/src/hocs/auth.tsx | 6 +- packages/app-client/src/hocs/base.tsx | 2 +- .../pages/purchase/order/approved.config.ts | 4 + .../src/pages/purchase/order/approved.tsx | 282 ++++++++++++++++++ .../src/pages/purchase/order/audit.tsx | 9 +- .../src/pages/ship/document/create.tsx | 14 +- .../src/services/business/typings.d.ts | 2 + packages/app-client/src/types/typings.ts | 2 +- 11 files changed, 377 insertions(+), 31 deletions(-) create mode 100644 packages/app-client/src/pages/purchase/order/approved.config.ts create mode 100644 packages/app-client/src/pages/purchase/order/approved.tsx diff --git a/packages/app-client/src/app.config.ts b/packages/app-client/src/app.config.ts index 278534c..5dd5c1d 100644 --- a/packages/app-client/src/app.config.ts +++ b/packages/app-client/src/app.config.ts @@ -16,7 +16,7 @@ config = { }, { root: "pages/purchase", - pages: ["order/create", "order/list", "order/audit", "order/preview"], + pages: ["order/create", "order/list", "order/audit", "order/preview", "order/approved"], }, { root: "pages/ship", diff --git a/packages/app-client/src/components/purchase/module/OrderPackage.tsx b/packages/app-client/src/components/purchase/module/OrderPackage.tsx index 34f8f0e..4b39b2e 100644 --- a/packages/app-client/src/components/purchase/module/OrderPackage.tsx +++ b/packages/app-client/src/components/purchase/module/OrderPackage.tsx @@ -37,7 +37,18 @@ export default forwardRef( // 初始化数据 useEffect(() => { setSupplierVO(value); - setOrderPackageList(value.orderPackageList || []); + const orderPackageList = value.orderPackageList || [] + setOrderPackageList(orderPackageList); + + if (orderPackageList.length > 0) { + setPackageTypeEnabled({ + USED: orderPackageList.some((item) => item.boxType === "USED") ? 1 : 2, + EXTRA_USED: orderPackageList.some((item) => item.boxType === "EXTRA_USED") ? 1 : 2, + EXTRA: orderPackageList.some((item) => item.boxType === "EXTRA") ? 1 : 2, + REMAIN: orderPackageList.some((item) => item.boxType === "REMAIN") ? 1 : 2, + OWN: orderPackageList.some((item) => item.boxType === "OWN") ? 1 : 2, + }); + } }, []); const [orderPackageList, setOrderPackageList] = useState< @@ -87,11 +98,10 @@ export default forwardRef( } // 检查所需选项是否都已做出选择(不是1就是2,不能是0) - console.log("requiredTypes", requiredTypes, packageTypeEnabled) + console.log("requiredTypes", requiredTypes, packageTypeEnabled); const allRequiredAnswered = requiredTypes.every( (type) => - packageTypeEnabled[type] === 1 || - packageTypeEnabled[type] === 2, + packageTypeEnabled[type] === 1 || packageTypeEnabled[type] === 2, ); // 检查必须回答的问题 @@ -711,18 +721,18 @@ export default forwardRef( // 根据类型设置显示标题 const typeLabels = { - USED: "记录装车用的纸箱", - EXTRA_USED: "记录用的额外运输纸箱纸箱", - EXTRA: "记录额外运输来的所有纸箱", - REMAIN: "记录车上没用完的纸箱", - OWN: "记录装车用的瓜农的纸箱", + USED: "装车用的纸箱", + EXTRA_USED: "用的额外运输纸箱纸箱", + EXTRA: "额外运输来的所有纸箱", + REMAIN: "车上没用完的纸箱", + OWN: "装车用的瓜农的纸箱", }; return ( - {typeLabels[type]} + 记录{typeLabels[type]} @@ -748,7 +758,7 @@ export default forwardRef( setShowBatchModal(true); }} > - 添加纸箱 + 添加{typeLabels[type]} ); @@ -1121,10 +1131,15 @@ export default forwardRef( // 如果关闭,也需要清除相关数据 if (packageTypeEnabled.OWN === 2) { setOrderPackageList((list) => - list.filter((item) => item.boxType !== "USED" && item.boxType !== "EXTRA_USED" && item.boxType !== "EXTRA"), + list.filter( + (item) => + item.boxType !== "USED" && + item.boxType !== "EXTRA_USED" && + item.boxType !== "EXTRA", + ), ); - togglePackageType("EXTRA_USED", 0) - togglePackageType("EXTRA", 0) + togglePackageType("EXTRA_USED", 0); + togglePackageType("EXTRA", 0); } }} > @@ -1158,6 +1173,9 @@ export default forwardRef( <> {renderPackageByType("OWN")} + {/* 分隔线 */} + + {/* 空车带来的纸箱用完了吗? */} 空车带来的纸箱用完了吗? @@ -1205,6 +1223,9 @@ export default forwardRef( <> {renderPackageByType("USED")} + {/* 分隔线 */} + + {/* 空车带来的纸箱用完了吗? */} 空车带来的纸箱用完了吗? @@ -1245,6 +1266,9 @@ export default forwardRef( {packageTypeEnabled.REMAIN === 1 && renderPackageByType("REMAIN")} + {/* 分隔线 */} + + {/* 用额外运输纸箱的了吗? */} 用额外运输纸箱的了吗? @@ -1272,7 +1296,9 @@ export default forwardRef( // 如果关闭,也需要清除相关数据 if (packageTypeEnabled.EXTRA_USED === 1) { setOrderPackageList((list) => - list.filter((item) => item.boxType !== "EXTRA_USED"), + list.filter( + (item) => item.boxType !== "EXTRA_USED", + ), ); } }} @@ -1296,6 +1322,8 @@ export default forwardRef( /* 当选择了使用自己的纸箱时 */ <> {renderPackageByType("OWN")} + {/* 分隔线 */} + )} @@ -1304,6 +1332,9 @@ export default forwardRef( <> {renderPackageByType("USED")} + {/* 分隔线 */} + + {/* 有额外运输纸箱过来吗? */} 有额外运输纸箱过来吗? @@ -1311,9 +1342,7 @@ export default forwardRef( + )} + + {canGenerateDocuments.purchaseDocument && ( + + )} + + {canGenerateDocuments.costDocument && ( + + )} + + + {!shipOrder && ( + + 未找到关联的发货单,请联系管理员 + + )} + + )} + + + + + + + + + + + + + ); +}); diff --git a/packages/app-client/src/pages/purchase/order/audit.tsx b/packages/app-client/src/pages/purchase/order/audit.tsx index c3103a0..96e5865 100644 --- a/packages/app-client/src/pages/purchase/order/audit.tsx +++ b/packages/app-client/src/pages/purchase/order/audit.tsx @@ -37,6 +37,7 @@ import { getTotalGrossWeight, getTotalNetWeight, } from "@/utils/calcutePurchaseOrder"; +import buildUrl from "@/utils/buildUrl"; const sectionList = { // 市场报价 @@ -508,8 +509,12 @@ export default hocAuth(function Page(props: CommonComponent) { purchaseOrderVO={purchaseOrderVO} size={"xlarge"} onFinish={() => { - // 返回首页 - Taro.redirectTo({ url: "/pages/purchase/order/list" }); + // 关闭当前页面并跳转到采购单审核通过页面 + Taro.redirectTo({ + url: buildUrl(`/pages/purchase/order/approved`, { + orderId: purchaseOrderVO?.orderId, + }), + }); }} /> diff --git a/packages/app-client/src/pages/ship/document/create.tsx b/packages/app-client/src/pages/ship/document/create.tsx index 48fbfda..be82244 100644 --- a/packages/app-client/src/pages/ship/document/create.tsx +++ b/packages/app-client/src/pages/ship/document/create.tsx @@ -20,7 +20,7 @@ import { business } from "@/services"; import dayjs from "dayjs"; export default hocAuth(function Page(props: CommonComponent) { - const { router } = props; + const { router, setLoading } = props; const shipOrderId = router.params .shipOrderId as BusinessAPI.ShipOrderVO["shipOrderId"]; @@ -1223,6 +1223,9 @@ export default hocAuth(function Page(props: CommonComponent) { if (downloadRes.tempFilePath) { Taro.saveImageToPhotosAlbum({ filePath: downloadRes.tempFilePath, + complete: (res) => { + console.log("saveImageToPhotosAlbum", res); + }, }) .then(() => { Taro.showToast({ @@ -1254,6 +1257,15 @@ export default hocAuth(function Page(props: CommonComponent) { // 重置表单 const resetForm = () => { setStep(1); + // 重置表单错误状态 + setFormErrors({}); + // 重新加载初始数据 + if (shipOrderId) { + setLoading(true); + init(shipOrderId).then(() => { + setLoading(false); + }); + } }; // 重新生成单据 diff --git a/packages/app-client/src/services/business/typings.d.ts b/packages/app-client/src/services/business/typings.d.ts index d5e1719..a22f605 100644 --- a/packages/app-client/src/services/business/typings.d.ts +++ b/packages/app-client/src/services/business/typings.d.ts @@ -3443,6 +3443,8 @@ declare namespace BusinessAPI { status?: boolean; /** 发货单ID */ shipOrderId?: string; + /** 采购单ID */ + purchaseOrderId?: string; }; type ShipOrderUpdateCmd = { diff --git a/packages/app-client/src/types/typings.ts b/packages/app-client/src/types/typings.ts index 65a2667..0b077a1 100644 --- a/packages/app-client/src/types/typings.ts +++ b/packages/app-client/src/types/typings.ts @@ -20,7 +20,7 @@ export interface CommonComponent { setIsInitialized: (isInitialized: boolean) => void; longitude?: number; latitude?: number; - setShowOverlay?: (showOverlay: boolean) => void; + setLoading: (loading: boolean) => void; } export const ComponentDefaults = {