From fa48d7ed519b6530178af505b88dcc4c5e251172 Mon Sep 17 00:00:00 2001 From: 陈鑫涛 <10125295+chen-xintao97@user.noreply.gitee.com> Date: Fri, 13 Jun 2025 13:32:20 +0800 Subject: [PATCH] 报价后保存 --- src/components/QuickQuote/index.jsx | 3 --- src/mobile/quotation/detailNew.jsx | 510 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------- 2 files changed, 472 insertions(+), 41 deletions(-) diff --git a/src/components/QuickQuote/index.jsx b/src/components/QuickQuote/index.jsx index c3bab58..55a94fc 100644 --- a/src/components/QuickQuote/index.jsx +++ b/src/components/QuickQuote/index.jsx @@ -903,7 +903,6 @@ const QuickQuoteEvent = props => { }; // 入口 const QuickQuote = baseProps => { - console.log("🚀 ~ baseProps:", baseProps); const props = QuickQuoteEvent(baseProps); const [treeClassName, setTreeClassName] = useState(""); @@ -1644,7 +1643,6 @@ const BoxComponent = props => { }); }); } - console.log(slaveRowData, "slaveRowData"); const svgProps = { ...props, @@ -2253,7 +2251,6 @@ const BoxModelSelectedModal = props => { fixedHeight: "calc(100vh - 365px)", noVlistTable: true, onCostomColums: columns => { - console.log("🚀 ~ columns:", columns); columns .filter(item => item.dataIndex?.includes("Path")) .forEach(column => { diff --git a/src/mobile/quotation/detailNew.jsx b/src/mobile/quotation/detailNew.jsx index cb73d39..079a982 100644 --- a/src/mobile/quotation/detailNew.jsx +++ b/src/mobile/quotation/detailNew.jsx @@ -13,6 +13,8 @@ import Typesetting from "@/components/Common/Typesetting/typesetting"; import DynamicSVG from "@/components/Common/BoxDesignCompontent/svg"; import ShowImgM from "@/components/Common/BoxShowImgMaterial/indexNew"; import CommonBase from "@/components/Common/CommonBase"; +import { cloneDeep } from "lodash"; +import moment from "moment"; const QuickQuoteEvent = props => { const { location } = props; const selectedNode = JSON.parse(location.state).quotationData; @@ -88,6 +90,50 @@ const QuickQuoteEvent = props => { const [enabled, setEnabled] = useState(props.enabled); useEffect(() => { + const configUrl = `${commonConfig.server_host}business/getModelBysId/${sModelsId}?sModelsId=${sModelsId}`; + commonServices + .getService(props.token, configUrl) + .then(({ data: masterReturn }) => { + if (masterReturn.code === 1) { + const formData = masterReturn.dataset.rows[0].formData; + const masterConfig = formData.find(x => x.sTbName === "QuoQuotationmaster"); + const processConfig = formData.find(x => x.sTbName === "QuoQuotationprocess"); + const materialsConfig = formData.find(x => x.sTbName === "QuoQuotationmaterials"); + const slaveConfig = formData.find(x => x.sTbName === "QuoQuotationslave"); + const controlConfig = formData.find(x => x.sTbName === "QuoQuotationcontrol"); + let colorConfigGrdVisible; + const colorConfigTrue = formData.find(item => item.sTbName === "quoquotationparam"); + if (commonUtils.isNotEmptyObject(colorConfigTrue)) { + colorConfigGrdVisible = colorConfigTrue.bGrdVisible; + if (colorConfigGrdVisible) { + colorColumn = commonFunc.getHeaderConfig(colorConfigTrue, colorColumn); + } + } + const colorConfig = colorConfigGrdVisible ? colorConfigTrue : ""; + /* 合版信息表 */ + const packConfig = formData.find(item => item.sTbName === "quoquotationcontrolcombine"); + let checkConfig = {}; + let checkColumn = {}; + if (commonUtils.isNotEmptyArr(formData.filter(item => item.bGrd && item.sTbName === "sysbillcheckresult"))) { + checkConfig = formData.find(item => item.bGrd && item.sTbName === "sysbillcheckresult"); + checkColumn = commonFunc.getHeaderConfig(checkConfig); + } + props.onSaveState(pre => ({ + ...pre, + formData, + masterConfig, + processConfig, + materialsConfig, + slaveConfig, + controlConfig, + colorConfig, + packConfig, + checkConfig, + })); + //setState(pre => ({ ...pre, selectedNode ,formData, masterConfig, processConfig, materialsConfig, slaveConfig})); + } + }) + .catch(error => {}); setState(pre => ({ ...pre, selectedNode })); }, []); @@ -98,7 +144,9 @@ const QuickQuoteEvent = props => { useEffect(() => { // 获取 masterConfig - const sActiveId = "172129113112117428019179600"; + const { masterConfig, token } = props; + const quickQuoteConfig = masterConfig?.gdsconfigformslave.find(item => item.sControlName === "BtnQuickQuote") || {}; + const { sActiveId = "172129113112117428019179600" } = quickQuoteConfig; const configUrls = `${commonConfig.server_host}business/getModelBysId/${sActiveId}?sModelsId=${sActiveId}`; commonServices.getService(props.app.token, configUrls).then(async ({ data: configReturn }) => { if (configReturn.code === 1) { @@ -411,7 +459,7 @@ const QuickQuoteEvent = props => { loading: true, }, () => { - props.onButtonClick("BtnDraft"); + props.onButtonClick("BtnDraft", { ...props }); } ); }; @@ -421,7 +469,6 @@ const QuickQuoteEvent = props => { // 核价按钮 addState.handleCalcPrice = async () => { const { masterData = {}, slaveData = [], selectedNode = {}, extraParts = {} } = state; - if (commonUtils.isEmptyObject(selectedNode)) { // message.error("请先选择产品"); Toast.show({ @@ -538,6 +585,7 @@ const QuickQuoteEvent = props => { if (dataReturn.code === 1) { // const { app, sModelsId } = props; // const { slaveConfig, masterData: masterData1, processConfig, materialsConfig } = state; + const { slaveConfig, masterData: masterData1, materialsConfig, processConfig, sModelsId, app } = props; const { productClassify, partsNewInfo = [], productProcessInfo, partsInfo: partsOldInfo } = dataReturn.dataset.rows[0]; @@ -863,7 +911,8 @@ const QuickQuoteEvent = props => { const result = await props.handleCalculation( false, { ...masterProps, ...newState, manyqtysConfig: state.manyConfig, manyqtysData: state.manyData }, - true + true, + props ); if (commonUtils.isEmptyObject(result)) { @@ -1073,7 +1122,7 @@ const sortData = (tableData, processData) => { return processData; }; // 计算数量 -const handleCalculation = async (bSave, nextProps, isWait) => { +const handleCalculation = async (bSave, nextProps, isWait, props) => { const dataUrl = `${commonConfig.server_host}business/addQuotationsheet?sModelsId=${nextProps.sModelsId}`; const { masterConfig, @@ -1099,6 +1148,376 @@ const handleCalculation = async (bSave, nextProps, isWait) => { let { slaveData, controlData, materialsData, processData, masterData, manyqtysData, packData } = nextProps; const sMakePerson = masterData.sMakePerson; const data = []; + data.push(commonBusiness.mergeData("master", `${masterConfig.sTbName.toLowerCase()}_Tmp`, [masterData], [], true)); + data.push(commonBusiness.mergeData("slave", `${slaveConfig.sTbName.toLowerCase()}_tmp`, slaveData, [], true)); + data.push(commonBusiness.mergeData("control", `${controlConfig.sTbName.toLowerCase()}_tmp`, controlData, [], true)); + data.push(commonBusiness.mergeData("materials", `${materialsConfig.sTbName.toLowerCase()}_tmp`, materialsData, [], true)); + data.push(commonBusiness.mergeData("process", `${processConfig.sTbName.toLowerCase()}_tmp`, processData, [], true)); + if (commonUtils.isNotEmptyObject(manyqtysConfig)) { + data.push( + commonBusiness.mergeData( + "manyqtys", + `${manyqtysConfig.sTbName.toLowerCase()}_tmp`, + manyqtysData?.map(item => { + delete item.manyData; + return item; + }), + [], + true + ) + ); + } + + data.push(commonBusiness.mergeData("pack", `${packConfig.sTbName.toLowerCase()}_tmp`, packData, [], true)); + const value = { data, sClientType: "1", sGuid: masterData.sId }; + + const cacheIndex = dQuickQuoteProductQty === undefined ? -1 : manyDataCache.findIndex(item => item.dManyQty === dQuickQuoteProductQty); + if (cacheIndex === -1) { + // message.warning("自动计算中,请稍后再试。"); + Toast.show({ + content: "自动计算中,请稍后再试。", + }); + } + const dataReturn = cacheIndex === -1 ? (await commonServices.postValueService(props.app.token, value, dataUrl)).data : manyDataCache[cacheIndex]; + if (dataReturn.code === 1) { + /* 成功 */ + const valueReturn = dataReturn.dataset.rows[0]; + const masterDataArr = valueReturn[`${masterConfig.sTbName.toLowerCase()}_tmp`]; + if (commonUtils.isNotEmptyArr(masterDataArr)) { + masterData = masterDataArr[0]; + } + if (cacheIndex !== -1) { + // masterData.handleType = nextProps.masterData.handleType || "update"; + masterData.sQuoConfig = nextProps.masterData.sQuoConfig; + masterData.sFormId = nextProps.masterData.sFormId; + masterData.sBillNo = nextProps.masterData.sBillNo; + } + masterData.handleType = masterData.sBillNo ? "update" : "add"; + if (masterData.handleType === "update" && !commonUtils.isEmpty(sMakePerson)) { + masterData.sMakePerson = sMakePerson; + } + slaveData = valueReturn[`${slaveConfig.sTbName.toLowerCase()}_tmp`].map(item => { + item.handleType = dQuickQuoteProductQty ? "add" : item.handleType; + return item; + }); + controlData = valueReturn[`${controlConfig.sTbName.toLowerCase()}_tmp`].map(item => { + item.handleType = dQuickQuoteProductQty ? "add" : item.handleType; + return item; + }); + materialsData = valueReturn[`${materialsConfig.sTbName.toLowerCase()}_tmp`].map(item => { + item.handleType = dQuickQuoteProductQty ? "add" : item.handleType; + return item; + }); + processData = valueReturn[`${processConfig.sTbName.toLowerCase()}_tmp`].map(item => { + item.handleType = dQuickQuoteProductQty ? "add" : item.handleType; + return item; + }); + processData = props.sortData(controlData, processData); + const addState = {}; + if (commonUtils.isNotEmptyObject(manyqtysConfig)) { + manyqtysData = valueReturn[`${manyqtysConfig.sTbName.toLowerCase()}_tmp`]?.map((item, index) => { + return { + ...item, + sId: manyqtysData[index] ? manyqtysData[index].sId : item.sId, + handleType: dQuickQuoteProductQty ? "add" : item.handleType, + }; + }); + if (cacheIndex === -1 && manyqtysData?.some(item => item.manyData)) { + addState.manyDataCache = manyqtysData.map((item, index) => { + let result = {}; + if (index === 0) { + result = Object.keys(valueReturn).reduce((pre, cur) => { + if (cur !== `${manyqtysConfig.sTbName.toLowerCase()}_tmp`) { + pre[cur] = valueReturn[cur]; + } + return pre; + }, {}); + } else { + result = commonUtils.convertStrToObj(item.manyData); + } + + result[`${manyqtysConfig.sTbName.toLowerCase()}_tmp`] = cloneDeep(manyqtysData).map(item => { + delete item.manyData; + return item; + }); + + const { sId, sBillNo, sFormId } = masterData; + const row = Object.keys(result).reduce((pre, cur) => { + if (cur === `${masterConfig.sTbName.toLowerCase()}_tmp`) { + pre[cur] = result[cur].map(item => ({ + ...item, + sId, + sBillNo: sBillNo || item.sBillNo, + sFormId, + })); + } else if (cur.includes("_tmp")) { + pre[cur] = result[cur].map(item => ({ + ...item, + sParentId: sId, + handleType: "add", + })); + } else { + pre[cur] = result[cur]; + } + return pre; + }, {}); + + return { + code: 1, + dManyQty: item.dManyQty, + dataset: { + rows: [row], + }, + }; + }); + } + } + + packData = valueReturn[`${packConfig.sTbName.toLowerCase()}_tmp`]; + /* 计算成功后自动调用保存 */ + if (bSave) { + const data = []; + data.push(commonBusiness.mergeData("master", masterConfig.sTbName, [masterData])); + data.push(commonBusiness.mergeData("slave", slaveConfig.sTbName, slaveData, slaveDelData)); + data.push(commonBusiness.mergeData("control", controlConfig.sTbName, controlData, controlDelData)); + data.push(commonBusiness.mergeData("materials", materialsConfig.sTbName, materialsData, materialsDelData)); + data.push(commonBusiness.mergeData("process", processConfig.sTbName, processData, processDelData)); + + if (commonUtils.isNotEmptyObject(manyqtysConfig)) { + data.push(commonBusiness.mergeData("manyqtys", manyqtysConfig.sTbName, manyqtysData, manyqtysDelData)); + } + + data.push(commonBusiness.mergeData("color", colorConfig.sTbName, colorData, colorDelData)); + data.push(commonBusiness.mergeData("pack", packConfig.sTbName, packData, packDelData)); + props.onSaveData({ + data, + sClientType: "1", + loading: false, + sSysLogSrcId: masterData.sId, + }); + props.onSaveState({ + slaveData, + packData, + controlData, + materialsData, + processData, + masterData, + manyqtysData, + ...addState, + }); + } else { + if (isWait) { + return { + slaveData, + controlData, + materialsData, + processData, + masterData, + manyqtysData, + loading: false, + packData, + ...addState, + }; + } else { + props.onSaveState({ + slaveData, + controlData, + materialsData, + processData, + masterData, + manyqtysData, + loading: false, + packData, + ...addState, + }); + } + // message.success(commonFunc.getConfigShowName(masterConfig, "BtnCalculation") + commonFunc.showMessage(app.commonConst, "handleSuccess")); + } + } else { + /* 失败 */ + props.onSaveState({ + loading: false, + }); + // this.props.getServiceError(dataReturn); + } +}; +/** 按钮操作事件 */ +const handleButtonClick = async (name, props) => { + if (name === "BtnDraft") { + const { + masterConfig, + masterData, + slaveConfig, + slaveData, + slaveDelData, + controlConfig, + controlData, + controlDelData, + materialsConfig, + materialsData, + materialsDelData, + processConfig, + processData, + processDelData, + colorConfig, + colorData, + colorDelData, + packConfig, + packData, + packDelData, + } = props; + const data = []; + slaveConfig.gdsconfigformslave.forEach(itemConfig => { + slaveData + .filter(itemData => itemData.handleType === "add" || itemData.handleType === "update") + .forEach(itemData => { + itemData.NoVerify = "NoVerify"; + const firstDataIndex = itemConfig.sName.substring(0, 1); + if (commonUtils.isEmpty(itemData[itemConfig.sName])) { + itemData[itemConfig.sName] = + firstDataIndex === "s" + ? "" + : firstDataIndex === "d" || firstDataIndex === "i" + ? 0 + : firstDataIndex === "b" + ? false + : firstDataIndex === "t" + ? moment(new Date()).format(props.app.dateFormat) + : undefined; + } + }); + }); + controlConfig.gdsconfigformslave.forEach(itemConfig => { + controlData + .filter(itemData => itemData.handleType === "add" || itemData.handleType === "update") + .forEach(itemData => { + itemData.NoVerify = "NoVerify"; + const firstDataIndex = itemConfig.sName.substring(0, 1); + if (commonUtils.isEmpty(itemData[itemConfig.sName])) { + itemData[itemConfig.sName] = + firstDataIndex === "s" + ? "" + : firstDataIndex === "d" || firstDataIndex === "i" + ? 0 + : firstDataIndex === "b" + ? false + : firstDataIndex === "t" + ? moment(new Date()).format(props.app.dateFormat) + : undefined; + } + }); + }); + + materialsConfig.gdsconfigformslave.forEach(itemConfig => { + materialsData + .filter(itemData => itemData.handleType === "add" || itemData.handleType === "update") + .forEach(itemData => { + itemData.NoVerify = "NoVerify"; + const firstDataIndex = itemConfig.sName.substring(0, 1); + if (commonUtils.isEmpty(itemData[itemConfig.sName])) { + itemData[itemConfig.sName] = + firstDataIndex === "s" + ? "" + : firstDataIndex === "d" || firstDataIndex === "i" + ? 0 + : firstDataIndex === "b" + ? false + : firstDataIndex === "t" + ? moment(new Date()).format(props.app.dateFormat) + : undefined; + } + }); + }); + + processConfig.gdsconfigformslave.forEach(itemConfig => { + processData + .filter(itemData => itemData.handleType === "add" || itemData.handleType === "update") + .forEach(itemData => { + itemData.NoVerify = "NoVerify"; + const firstDataIndex = itemConfig.sName.substring(0, 1); + if (commonUtils.isEmpty(itemData[itemConfig.sName])) { + itemData[itemConfig.sName] = + firstDataIndex === "s" + ? "" + : firstDataIndex === "d" || firstDataIndex === "i" + ? 0 + : firstDataIndex === "b" + ? false + : firstDataIndex === "t" + ? moment(new Date()).format(props.app.dateFormat) + : undefined; + } + }); + }); + + if (commonUtils.isNotEmptyObject(packConfig)) { + packConfig.gdsconfigformslave.forEach(itemConfig => { + packData + .filter(itemData => itemData.handleType === "add" || itemData.handleType === "update") + .forEach(itemData => { + itemData.NoVerify = "NoVerify"; + const firstDataIndex = itemConfig.sName.substring(0, 1); + if (commonUtils.isEmpty(itemData[itemConfig.sName])) { + itemData[itemConfig.sName] = + firstDataIndex === "s" + ? "" + : firstDataIndex === "d" || firstDataIndex === "i" + ? 0 + : firstDataIndex === "b" + ? false + : firstDataIndex === "t" + ? moment(new Date()).format(props.app.dateFormat) + : undefined; + } + }); + }); + } + + if (commonUtils.isNotEmptyObject(colorConfig)) { + colorConfig.gdsconfigformslave.forEach(itemConfig => { + colorData + .filter(itemData => itemData.handleType === "add" || itemData.handleType === "update") + .forEach(itemData => { + itemData.NoVerify = "NoVerify"; + const firstDataIndex = itemConfig.sName.substring(0, 1); + if (commonUtils.isEmpty(itemData[itemConfig.sName])) { + itemData[itemConfig.sName] = + firstDataIndex === "s" + ? "" + : firstDataIndex === "d" || firstDataIndex === "i" + ? 0 + : firstDataIndex === "b" + ? false + : firstDataIndex === "t" + ? moment(new Date()).format(props.app.dateFormat) + : undefined; + } + }); + }); + } + + data.push(commonBusiness.mergeData("master", masterConfig.sTbName, [masterData])); + data.push(commonBusiness.mergeData("slave", slaveConfig.sTbName, slaveData, slaveDelData)); + data.push(commonBusiness.mergeData("control", controlConfig.sTbName, controlData, controlDelData)); + data.push(commonBusiness.mergeData("materials", materialsConfig.sTbName, materialsData, materialsDelData)); + data.push(commonBusiness.mergeData("process", processConfig.sTbName, processData, processDelData)); + if (commonUtils.isNotEmptyObject(colorConfig)) { + data.push(commonBusiness.mergeData("color", colorConfig.sTbName, colorData, colorDelData)); + } + if (commonUtils.isNotEmptyObject(packConfig)) { + data.push(commonBusiness.mergeData("pack", packConfig.sTbName, packData, packDelData)); + } + props.onSaveData({ + data, + sClientType: "1", + loading: false, + sSysLogSrcId: masterData.sId, + bIsUnCcg: false, + }); + } +}; +const handleSaveData = async (params, props) => { + console.log("🚀 ~ handleSaveData ~ params:", params); }; const getProps = baseProps => { const { location, quotationData, app, sModelsId } = baseProps; @@ -1114,7 +1533,7 @@ const getProps = baseProps => { pageNum: 1, pageSize: 20, }; - const retrunData = await commonServices.postValueService(props.token, body, url); + const retrunData = await commonServices.postValueService(token, body, url); if (retrunData.data.code === 1) { /* 获取数据集 */ const { rows, totalPageCount, currentPageNo, totalCount } = retrunData.data.dataset; @@ -1126,47 +1545,54 @@ const getProps = baseProps => { }; } }; + // 定义 onSaveState 函数 + const onSaveState = (updateFunction, callback) => { + setState(prevState => { + let newState = prevState; // 初始状态下不修改状态 + // 确保 updateFunction 是一个函数 + if (typeof updateFunction === "function") { + newState = updateFunction(prevState); + } - // 获取主表信息 - useEffect(() => { - const configUrl = `${commonConfig.server_host}business/getModelBysId/${sModelsId}?sModelsId=${sModelsId}`; - commonServices - .getService(token, configUrl) - .then(({ data: masterReturn }) => { - if (masterReturn.code === 1) { - const formData = masterReturn.dataset.rows[0].formData; - const processConfig = formData.find(x => x.sTbName === "QuoQuotationprocess"); - const materialsConfig = formData.find(x => x.sTbName === "QuoQuotationmaterials"); - const slaveConfig = formData.find(x => x.sTbName === "QuoQuotationslave"); - setState(pre => ({ ...pre, formData, processConfig, materialsConfig, slaveConfig })); - } - }) - .catch(error => {}); - }, [sModelsId]); + // 执行回调函数(如果存在) + if (typeof callback === "function") { + callback(); + } - // 处理 formData - let props = { + return newState; // 返回新的状态,可能未修改 + }); + }; + + const slaveData = []; + let slaveRow = {}; + slaveRow.handleType = "add"; + slaveRow.sId = commonUtils.createSid(); + slaveRow.key = commonUtils.createSid(); + slaveRow.sParentId = commonUtils.createSid(); + slaveRow.sNodeId = commonUtils.createSid(); + slaveRow.bDefault = false; + slaveRow.iOrder = 1; + slaveData.push(slaveRow); + + return { ...baseProps, selectedNode: quotationData, - state: {}, manyDataCache: [], token: baseProps.app.token, - onSaveState: setState, + slaveData, getSqlDropDownData, onMaterialsChange: handleMaterialsChange, sortData, handleCalculation, - }; - return { - ...props, + onSaveState, + onSaveData: handleSaveData, + onButtonClick: handleButtonClick, ...state, }; }; const QuotationAllprogressDetail = baseProps => { const masterProps = getProps(baseProps); - console.log("🚀 ~ masterProps:", masterProps); const props = QuickQuoteEvent(masterProps); - const { selectedNode, location, quotationData, app, sModelsId } = props; const { showName, sUnit } = quotationData; const timeRef = useRef(0); @@ -1880,22 +2306,30 @@ const BoxComponent = props => { }; const { loading } = props; // 核价事件 - const onCalcPrice = async () => { + const onCalcPrice = () => { const addState = { ...props.onGetAllDelData(), manyDataCache: [], }; - + const data = { + masterData: { ...props.masterData, handleType: props.masterData.handleType || "update" }, + ...addState, + }; props.onSaveState( - { - masterData: { ...props.masterData, handleType: props.masterData.handleType || "update" }, - ...addState, - }, + pre => ({ ...pre, ...data }), () => { props.handleCalcPrice(); } ); - await props.handleCalcPrice(); + // props.onSaveState( + // { + // masterData: { ...props.masterData, handleType: props.masterData.handleType || "update" }, + // ...addState, + // }, + // () => { + // props.handleCalcPrice(); + // } + // ); }; return (
-- libgit2 0.22.2