diff --git a/packages/app-client/src/components/purchase/module/MelonFarmer.tsx b/packages/app-client/src/components/purchase/module/MelonFarmer.tsx index b67aff1..fe068b6 100644 --- a/packages/app-client/src/components/purchase/module/MelonFarmer.tsx +++ b/packages/app-client/src/components/purchase/module/MelonFarmer.tsx @@ -25,7 +25,6 @@ interface IMelonFarmerProps { value: SupplierVO; onChange: (supplierVO: SupplierVO) => void; onRemove: (supplierVO: SupplierVO) => void; - onAdd: () => void; isLast: boolean; // 添加一个属性来标识是否是最后一个瓜农 supplierCount: number; // 添加已选择的供应商ID列表属性 @@ -40,7 +39,6 @@ export default forwardRef( value, onChange, onRemove, - onAdd, isLast, supplierCount, selectedSupplierIds, @@ -54,9 +52,6 @@ export default forwardRef( // 初始化数据 useEffect(() => { setSupplierVO(value); - if (value.isLast !== undefined) { - setIsLastFarmer(value.isLast); - } // 初始化微信二维码图片列表 if (value.wechatQr) { setPicList([ @@ -77,7 +72,6 @@ export default forwardRef( }, [supplierVO]); const [picList, setPicList] = useState([]); - const [isLastFarmer, setIsLastFarmer] = useState(null); // 修改状态类型,null表示未选择 // 微信二维码变更处理函数 const handleWechatQrChange = (files: UploaderFileItem[]) => { @@ -167,7 +161,10 @@ export default forwardRef( const isNameValid = validateName(supplierVO.name || ""); - if (selectedSupplierNames && selectedSupplierNames.includes(supplierVO.name || "")) { + if ( + selectedSupplierNames && + selectedSupplierNames.includes(supplierVO.name || "") + ) { Toast.show("toast", { icon: "fail", title: "提示", @@ -568,8 +565,6 @@ export default forwardRef( ...supplierVO, isLast: isLastValue, }); - - setIsLastFarmer(isLastValue!); }} > 需要 @@ -655,7 +650,7 @@ export default forwardRef( {supplierVO.name || "瓜农"}信息 - {supplierCount > 1 && ( + {supplierCount > 1 && isLast && ( handleRemoveConfirm(supplierVO)} @@ -862,23 +857,6 @@ export default forwardRef( /> - - {/* 只有当用户选择"否"时才显示添加按钮 */} - {isLast && !isLastFarmer && isLastFarmer !== null && ( - - )} ); }, diff --git a/packages/app-client/src/components/purchase/module/OrderCost.tsx b/packages/app-client/src/components/purchase/module/OrderCost.tsx index 20c1cf4..001dc6a 100644 --- a/packages/app-client/src/components/purchase/module/OrderCost.tsx +++ b/packages/app-client/src/components/purchase/module/OrderCost.tsx @@ -3,7 +3,7 @@ import { Icon } from "@/components"; import { forwardRef, useEffect, useImperativeHandle, useState } from "react"; import { business } from "@/services"; import { Button, Checkbox, Input, Toast } from "@nutui/nutui-react-taro"; -import { CostItem } from "@/types/typings"; +import { CostItem, SupplierVO } from "@/types/typings"; import { generateShortId } from "@/utils/generateShortId"; // 定义ref暴露的方法接口 @@ -13,12 +13,14 @@ export interface OrderCostRef { export interface IOrderCostProps { value: CostItem[]; + supplierVO: SupplierVO; onChange?: (costItemList: CostItem[]) => void; + onAdd: () => void; } export default forwardRef( function OrderCost(IOrderCostProps, ref) { - const { value, onChange } = IOrderCostProps; + const { value, supplierVO, onChange, onAdd } = IOrderCostProps; const [costItemVOList, setCostItemVOList] = useState(); @@ -274,7 +276,7 @@ export default forwardRef( {/* 费用承担方改为按钮形式,参考OrderPackage中的样式 */} - 谁出钱: + 谁出钱: + )} ); }, diff --git a/packages/app-client/src/components/purchase/module/OrderPackage.tsx b/packages/app-client/src/components/purchase/module/OrderPackage.tsx index 4b39b2e..3a3578a 100644 --- a/packages/app-client/src/components/purchase/module/OrderPackage.tsx +++ b/packages/app-client/src/components/purchase/module/OrderPackage.tsx @@ -2,6 +2,7 @@ import { ScrollView, View } from "@tarojs/components"; import { Icon } from "@/components"; import { Button, + Dialog, Image, Input, Popup, @@ -98,33 +99,12 @@ export default forwardRef( } // 检查所需选项是否都已做出选择(不是1就是2,不能是0) - console.log("requiredTypes", requiredTypes, packageTypeEnabled); const allRequiredAnswered = requiredTypes.every( (type) => packageTypeEnabled[type] === 1 || packageTypeEnabled[type] === 2, ); - // 检查必须回答的问题 - let requiredQuestionsAnswered = true; - if (supplierVO.isPaper && supplierVO.isLast) { - // 最后一个瓜农需要回答"空车带来的纸箱用完了吗?" - requiredQuestionsAnswered = packageTypeEnabled.REMAIN !== 0; - } else if (supplierVO.isPaper && !supplierVO.isLast) { - // 非最后一个瓜农不需要回答额外问题 - } else if (!supplierVO.isPaper) { - // 空磅不包含纸箱的情况 - } - - if (!requiredQuestionsAnswered) { - Toast.show("toast", { - icon: "fail", - title: "提示", - content: "请回答所有必答问题", - }); - return false; - } - - if (!allRequiredAnswered) { + if (!allRequiredAnswered || requiredTypes.length === 0) { Toast.show("toast", { icon: "fail", title: "提示", @@ -140,18 +120,6 @@ export default forwardRef( ) .map(([type, _]) => type); - console.log("enabledTypes", enabledTypes); - - // 如果没有任何纸箱类型被启用,提示用户至少选择一种 - if (requiredTypes.length > 0 && enabledTypes.length === 0) { - Toast.show("toast", { - icon: "fail", - title: "提示", - content: "请至少选择一种纸箱使用情况", - }); - return false; - } - // 检查每个启用的类型是否有对应的纸箱数据 for (const type of enabledTypes) { const hasPackagesOfType = orderPackageList.some( @@ -408,10 +376,22 @@ export default forwardRef( // 删除包装信息 const removePackageInfo = (boxBrandId: string) => { - const newList = [ - ...orderPackageList.filter((item) => item.boxBrandId !== boxBrandId), - ]; - setOrderPackageList(newList); + Dialog.open('dialog', { + title: "提示", + content: "确定要移除此纸箱品牌吗?", + confirmText: "确定", + cancelText: "取消", + onConfirm: () => { + const newList = [ + ...orderPackageList.filter((item) => item.boxBrandId !== boxBrandId), + ]; + setOrderPackageList(newList); + Dialog.close('dialog'); + }, + onCancel: () => { + Dialog.close('dialog'); + } + }) }; // 处理纸箱类型启用状态切换 @@ -675,13 +655,13 @@ export default forwardRef( className="cursor-pointer rounded-lg bg-blue-100 px-3 py-1 text-xs font-medium text-blue-600 transition-colors hover:bg-blue-200" onClick={() => handleEditItem(item, index)} > - 编辑 + 修改数量 removePackageInfo(item.boxBrandId)} > - 删除 + 不使用了 @@ -1390,7 +1370,7 @@ export default forwardRef( {packageTypeEnabled.OWN === 2 && ( /* 当没有选择使用自己的纸箱时 */ <> - {renderPackageByType("EXTRA")} + {renderPackageByType("EXTRA_USED")} {/* 分隔线 */} diff --git a/packages/app-client/src/components/purchase/module/Weigh.tsx b/packages/app-client/src/components/purchase/module/Weigh.tsx index 8ce81a5..8988189 100644 --- a/packages/app-client/src/components/purchase/module/Weigh.tsx +++ b/packages/app-client/src/components/purchase/module/Weigh.tsx @@ -267,7 +267,7 @@ export default forwardRef(function Weigh(props, ref) { - 空车来的时候带纸箱了吗? + 空车过磅时带纸箱了吗? {supplierCount == 1 ? ( { + // 获取当前选中的供应商 + const selectedIndex = orderSupplierList.findIndex( + (supplier) => supplier.selected, + ); + if (active === 2 && !melonFarmerRefs.current[selectedIndex]?.validate()) { + return; + } + // 在第三步(称重信息)时进行校验 + else if (active === 3 && !weighRefs.current[selectedIndex]?.validate()) { + return; + } // 在第四步(包装信息)时进行校验 + else if ( + active === 4 && + !orderPackageRefs.current[selectedIndex]?.validate() + ) { + return; + } + setOrderSupplierList([ + ...orderSupplierList.map((supplierVO: SupplierVO) => { + supplierVO.selected = false; + return supplierVO; + }), + { + orderSupplierId: generateShortId(), + supplierId: "", + name: "瓜农" + (orderSupplierList.length + 1), + idCard: "", + bankCard: "", + phone: "", + selected: true, + orderPackageList: [], + }, + ]); + }; + const onFinish = async (preview?: boolean) => { // 预览操作和暂存操作都显示确认对话框 if (preview) { @@ -224,14 +260,14 @@ export default hocAuth(function Page(props: CommonComponent) { }; // 保存草稿的函数(用于下一步) - const saveDraftNextStep = async () => { + const saveDraftNextStep = () => { if (!purchaseOrder) { return; } let tempOrderId = orderId; try { if (tempOrderId) { - await business.purchaseOrder.updatePurchaseOrder({ + business.purchaseOrder.updatePurchaseOrder({ active: active, orderId: tempOrderId, orderVehicle: purchaseOrder.orderVehicle, @@ -242,17 +278,19 @@ export default hocAuth(function Page(props: CommonComponent) { orderDealer: purchaseOrder.orderDealer, }); } else { - const { data } = await business.purchaseOrder.createPurchaseOrder({ - active: active, - orderVehicle: purchaseOrder.orderVehicle, - orderSupplierList: purchaseOrder.orderSupplierList, - orderCostList: purchaseOrder.orderCostList.filter( - (item: CostItem) => item.selected, - ), - orderDealer: purchaseOrder.orderDealer, - }); - - setOrderId(data.data?.orderId); + business.purchaseOrder + .createPurchaseOrder({ + active: active, + orderVehicle: purchaseOrder.orderVehicle, + orderSupplierList: purchaseOrder.orderSupplierList, + orderCostList: purchaseOrder.orderCostList.filter( + (item: CostItem) => item.selected, + ), + orderDealer: purchaseOrder.orderDealer, + }) + .then(({ data }) => { + setOrderId(data.data?.orderId); + }); } } catch (error) { Toast.show("toast", { @@ -461,47 +499,6 @@ export default hocAuth(function Page(props: CommonComponent) { } }} value={item} - onAdd={() => { - // 获取当前选中的供应商 - const selectedIndex = orderSupplierList.findIndex( - (supplier) => supplier.selected, - ); - if ( - active === 2 && - !melonFarmerRefs.current[selectedIndex]?.validate() - ) { - return; - } - // 在第三步(称重信息)时进行校验 - else if ( - active === 3 && - !weighRefs.current[selectedIndex]?.validate() - ) { - return; - } // 在第四步(包装信息)时进行校验 - else if ( - active === 4 && - !orderPackageRefs.current[selectedIndex]?.validate() - ) { - return; - } - setOrderSupplierList([ - ...orderSupplierList.map((supplierVO: SupplierVO) => { - supplierVO.selected = false; - return supplierVO; - }), - { - orderSupplierId: generateShortId(), - supplierId: "", - name: "瓜农" + (orderSupplierList.length + 1), - idCard: "", - bankCard: "", - phone: "", - selected: true, - orderPackageList: [], - }, - ]); - }} onRemove={(supplierVO: SupplierVO) => { if (orderSupplierList.length <= 1) { setOrderSupplierList([ @@ -609,6 +606,12 @@ export default hocAuth(function Page(props: CommonComponent) { {/* 人工和辅料信息 */} {step.value === 6 && ( { + saveDraftNextStep(); + setActive(2); + onAdd(); + }} ref={orderCostRef} value={orderCostList} onChange={(costItemList: CostItem[]) => @@ -662,7 +665,7 @@ export default hocAuth(function Page(props: CommonComponent) { // 在第一步(车辆信息)时进行校验 if (active === 1) { if (vehicleRef.current?.validate()) { - await saveDraftNextStep(); + saveDraftNextStep(); setActive(active + 1); } } @@ -676,7 +679,7 @@ export default hocAuth(function Page(props: CommonComponent) { selectedIndex !== -1 && melonFarmerRefs.current[selectedIndex]?.validate() ) { - await saveDraftNextStep(); + saveDraftNextStep(); setActive(active + 1); } } @@ -690,7 +693,7 @@ export default hocAuth(function Page(props: CommonComponent) { selectedIndex !== -1 && weighRefs.current[selectedIndex]?.validate() ) { - await saveDraftNextStep(); + saveDraftNextStep(); setActive(active + 1); } } // 在第四步(包装信息)时进行校验 @@ -699,15 +702,16 @@ export default hocAuth(function Page(props: CommonComponent) { const selectedIndex = orderSupplierList.findIndex( (supplier) => supplier.selected, ); + console.log("selectedIndex", selectedIndex) if ( selectedIndex !== -1 && orderPackageRefs.current[selectedIndex]?.validate() ) { - await saveDraftNextStep(); + saveDraftNextStep(); setActive(active + 1); } } else { - await saveDraftNextStep(); + saveDraftNextStep(); setActive(active + 1); } }} diff --git a/packages/app-client/src/services/business/typings.d.ts b/packages/app-client/src/services/business/typings.d.ts index e6191e9..0186e38 100644 --- a/packages/app-client/src/services/business/typings.d.ts +++ b/packages/app-client/src/services/business/typings.d.ts @@ -2385,7 +2385,7 @@ declare namespace BusinessAPI { /** 销售单价(元/个) */ boxSalePrice?: number; /** 箱子类型:1_本次使用;2_额外运输;3_已使用额外运输;4_车上剩余; */ - boxType: "USED" | "EXTRA" | "EXTRA_USED" | "REMAIN"; + boxType: "USED" | "EXTRA" | "EXTRA_USED" | "REMAIN" | "OWN"; }; type OrderRebate = {