From 5c636474d23825b2cabf198b0e1a84b2134b37c9 Mon Sep 17 00:00:00 2001 From: zhangzhen <525765282@qq.com> Date: Wed, 25 Jun 2025 17:42:37 +0800 Subject: [PATCH] 优化快速报价功能; --- src/components/QuickQuote/index.jsx | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------ 1 file changed, 75 insertions(+), 30 deletions(-) diff --git a/src/components/QuickQuote/index.jsx b/src/components/QuickQuote/index.jsx index 119b908..7752cd7 100644 --- a/src/components/QuickQuote/index.jsx +++ b/src/components/QuickQuote/index.jsx @@ -167,12 +167,15 @@ const QuickQuoteEvent = props => { }; addState.onDataChange = (name, sFieldName, changeValue, sId, dropDownData, isWait) => { - const { masterData = {}, slaveData = [], selectedNode = {} } = state; + const { masterData = {}, slaveData = [], selectedNode = {}, manyData = [] } = state; const extraState = { calcPriceFinished: false, - manyData: [], }; + if (manyData.some(item => Object.keys(item).length > 4)) { + extraState.manyData = []; + } + if (name === "master") { const masterDataNew = { ...masterData, ...changeValue }; masterDataNew.handleType = masterDataNew.handleType || "update"; @@ -954,6 +957,17 @@ const QuickQuoteEvent = props => { } }; + // 获取国际化名称 + const getI18nName = (sFieldName, sDefault) => { + return commonFunc.showMessage(props.app?.commonConst, sFieldName) || sDefault; + }; + + addState.getI18nName = getI18nName; + + addState.getI18nNameList = (...list) => { + return list.map(item => getI18nName(...item)); + }; + return { ...props, onDataChange0: props.onDataChange, @@ -1037,6 +1051,19 @@ const TreeComponent = props => { const timeRef = useRef(0); + // 摊平数组 + const flattenArray = arr => { + return arr.reduce((result, item) => { + // 如果存在 children,则递归处理 + if (item.children && item.children.length > 0) { + result.push(...flattenArray(item.children)); + } else { + result.push(item); + } + return result; + }, []); + }; + // 点击节点后查询数据 useEffect(() => { if (!selectedNode.sId || commonUtils.isEmptyObject(slaveConfig)) return; @@ -1126,10 +1153,15 @@ const TreeComponent = props => { props.setState(pre => { const { masterData = {} } = pre; const { sProductName, sProductUnit } = masterData; + const showNameList = [...flattenArray(treeData).map(item => item.showName), ""]; return { ...pre, selectedNode: select.selectedNodes[0]?.treeNode || {}, - masterData: { ...masterData, sProductName: sProductName || select.node.title, sProductUnit: sProductUnit || select.node.treeNode.sUnit }, + masterData: { + ...masterData, + sProductName: showNameList.includes(sProductName) ? select.node.title : sProductName, + sProductUnit: sProductUnit || select.node.treeNode.sUnit, + }, }; }); }} @@ -1145,7 +1177,7 @@ const TreeComponent = props => { // 内容组件 const ContentComponent = props => { const { selectedNode = {}, extraParts = {} } = props.state; - const manyqtysInfo = commonUtils.isNotEmptyObject(props.app) ? commonFunc.showMessage(props.app.commonConst, "manyqtysInfo") : "多数量报价"; + const manyqtysInfo = props.getI18nName("manyqtysInfo", "多数量报价"); const { showName } = selectedNode; const extraPartsList = extraParts[showName] || []; let { sAllPartsName = "" } = selectedNode; @@ -1429,12 +1461,11 @@ const BoxComponent = props => { default: x => x.sName === "sMagnification" || x.sName === "dPartsLength" || x.sName === "dPartsWidth", }; - - if (selectedNode.sTypeKey === "juantong") { - upViewProps12.viewConfigs = upViewProps12.viewConfigs.filter(filterConditions.juantong); - } else if (!(selectedNode.sTypeKey === "huace" && slaveRowData.sBoxModel === "封面")) { - upViewProps12.viewConfigs = upViewProps12.viewConfigs.filter(filterConditions.default); - } + if (selectedNode.sTypeKey === "juantong") { + upViewProps12.viewConfigs = upViewProps12.viewConfigs.filter(filterConditions.juantong); + } else if (!(selectedNode.sTypeKey === "huace" && slaveRowData.sBoxModel === "封面")) { + upViewProps12.viewConfigs = upViewProps12.viewConfigs.filter(filterConditions.default); + } // 拼板信息表单 const upViewProps20 = getUpViewPropsByITag(20); @@ -1852,9 +1883,7 @@ const BoxComponent = props => { showNew: 1, }; const isShowImg = boxList.find(x => x.sName === "盒身")?.type !== "" || false; - const PrintingParameters = commonUtils.isNotEmptyObject(props.app) - ? commonFunc.showMessage(props.app.commonConst, "PrintingParameters") - : "印刷参数"; + const PrintingParameters = props.getI18nName("PrintingParameters", "印刷参数"); return ( { // 材料组件 const MaterialsComponent = props => { const { state, slaveRowData, boxModel } = props; - const { slaveConfig, slaveData = [], selectedNode = {} } = state; + const { slaveConfig, slaveData = [], selectedNode = {}, manyData = [] } = state; const { sParam = "" } = selectedNode; const sParamList = sParam.split(","); const materialsInfoDefaultData = sParam ? new Array(sParamList.length).fill({}).map((_, index) => ({ showName: sParamList[index] })) : [{}]; @@ -2152,9 +2181,12 @@ const MaterialsComponent = props => { const extraState = { calcPriceFinished: false, - manyData: [], }; + if (manyData.some(item => Object.keys(item).length > 4)) { + extraState.manyData = []; + } + return materialsInfo.map((item, index) => { let viewRow = { ...materialsInfo[index], sProductClassifyId: selectedNode.sId }; viewRow = { ...viewRow, sMaterialsName0: viewRow.showName || "" }; @@ -2248,19 +2280,14 @@ const ManyComponent = props => { const [submitLoading, setSubmitLoading] = useState(false); const [processPercent, setProcessPercent] = useState(0); - const BtnNewQuotation = commonUtils.isNotEmptyObject(props.app) ? commonFunc.showMessage(props.app.commonConst, "BtnNewQuotation") : "新报价"; - - const BtnDraft = commonUtils.isNotEmptyObject(props.app) ? commonFunc.showMessage(props.app.commonConst, "BtnDraft") : "存草稿"; - - const BtnPriceverification = commonUtils.isNotEmptyObject(props.app) - ? commonFunc.showMessage(props.app.commonConst, "BtnPriceverification") - : "核价"; - - const BtnConfirmQuantity = commonUtils.isNotEmptyObject(props.app) - ? commonFunc.showMessage(props.app.commonConst, "BtnConfirmQuantity") - : "确认下单数量"; - - const btnOrdering = commonUtils.isNotEmptyObject(props.app) ? commonFunc.showMessage(props.app.commonConst, "btnOrdering") : "下单中..."; + const [BtnNewQuotation, BtnDraft, BtnPriceverification, BtnConfirmQuantity, btnOrdering, BtnPrintPreview] = props.getI18nNameList( + ["BtnNewQuotation", "新报价"], + ["BtnDraft", "存草稿"], + ["BtnPriceverification", "核价"], + ["BtnConfirmQuantity", "确认下单数量"], + ["btnOrdering", "下单中..."], + ["BtnPrintPreview", "打印预览"] + ); // 核价事件 const onCalcPrice = () => { @@ -2340,12 +2367,27 @@ const ManyComponent = props => { dQuickQuoteProductQty: dProductQty, })); }, + onDataChange: (...args) => { + const iIndex = state.manyData.findIndex(item => item.sId === args[3]); + const rowData = { ...state.manyData[iIndex] }; + state.manyData[iIndex] = { + sId: rowData.sId, + iRowNum: rowData.iRowNum, + sParentId: rowData.sParentId, + handleType: rowData.handleType, + ...args[2], + }; + setState(pre => ({ + ...pre, + calcPriceFinished: false, + manyData: state.manyData, + })); + }, fixedHeight: 185, - enabled: false, }; return ( -
+
{enabled && (
@@ -2362,6 +2404,9 @@ const ManyComponent = props => { > {BtnDraft} + -- libgit2 0.22.2