Commit 3431a3ecc17d61522af7e0a2ed4873d42b3c74d2
1 parent
e1c42e86
快速报价app
Showing
8 changed files
with
3013 additions
and
149786 deletions
Too many changes to show.
To preserve performance only 4 of 8 files are displayed.
src/components/Common/Typesetting/typesetting.js
| ... | ... | @@ -21,7 +21,6 @@ const Typesetting = props => { |
| 21 | 21 | boxHeight, |
| 22 | 22 | textSize, |
| 23 | 23 | } = props; |
| 24 | - console.log("🚀 ~ typesettingsss:", props) | |
| 25 | 24 | if (!slaveRowData) return |
| 26 | 25 | const { |
| 27 | 26 | dSBLB, // 上边留白 |
| ... | ... | @@ -477,7 +476,6 @@ const Typesetting = props => { |
| 477 | 476 | const propsDataWidth = Number(propsData.props.style.width.slice(0, -2)); |
| 478 | 477 | const propsDataHeight = Number(propsData.props.style.height.slice(0, -2)); |
| 479 | 478 | const propsDataTop = Number(propsData.props.style.top.slice(0, -2)); |
| 480 | - console.log(innerDivs,'innerDivs'); | |
| 481 | 479 | |
| 482 | 480 | const newMaterialLength = propsDataLeft + innerWidthCombined; // 原纸长 |
| 483 | 481 | const newMaterialWidth = propsDataTop + propsDataHeight - dSBLB; |
| ... | ... | @@ -551,9 +549,7 @@ const Typesetting = props => { |
| 551 | 549 | }, 0); // 使用 0 延迟,将任务放入事件队列 |
| 552 | 550 | } |
| 553 | 551 | const isMax = slaveDataDetail?.dMaxLength && Number(slaveDataDetail?.dMaxLength) >= Number(slaveRowData?.dMachineLength); |
| 554 | - console.log("🚀 ~ isMax:", isMax,slaveDataDetail,slaveRowData) | |
| 555 | 552 | const isShow = slaveRowData && slaveRowData.dMachineLength && slaveRowData.dMaxWidth && slaveRowData.dMaxLength && isMax && innerDivs.length; |
| 556 | - console.log(innerDivs,cols,rows,'innerDivs'); | |
| 557 | 553 | |
| 558 | 554 | const onClick = () => { |
| 559 | 555 | setIsModalOpen(true); | ... | ... |
src/components/QuickQuote/index.jsx
| ... | ... | @@ -906,7 +906,6 @@ const QuickQuoteEvent = props => { |
| 906 | 906 | // 入口 |
| 907 | 907 | const QuickQuote = baseProps => { |
| 908 | 908 | const props = QuickQuoteEvent(baseProps); |
| 909 | - | |
| 910 | 909 | const [treeClassName, setTreeClassName] = useState(""); |
| 911 | 910 | |
| 912 | 911 | // 监听页面滚动事件 |
| ... | ... | @@ -1000,10 +999,11 @@ const TreeComponent = props => { |
| 1000 | 999 | }; |
| 1001 | 1000 | const getDropDownData = async props => { |
| 1002 | 1001 | const showDownConfig = slaveConfig.gdsconfigformslave.find(item => item.sControlName === "BtnDownConfig"); |
| 1003 | - | |
| 1004 | 1002 | const downAbleConfigs = await getSqlDropDownData({ ...showDownConfig }); |
| 1005 | 1003 | |
| 1006 | 1004 | props.setState(pre => { |
| 1005 | + console.log(pre,'pre'); | |
| 1006 | + | |
| 1007 | 1007 | const { slaveData = [], slaveConfig } = pre; |
| 1008 | 1008 | const addState = {}; |
| 1009 | 1009 | const defaultData = commonFunc.getDefaultData(slaveConfig); |
| ... | ... | @@ -1327,6 +1327,8 @@ const BoxComponent = props => { |
| 1327 | 1327 | return props.getSqlDropDownData(...args); |
| 1328 | 1328 | }, |
| 1329 | 1329 | extraContent: child => { |
| 1330 | + console.log(child,'child'); | |
| 1331 | + | |
| 1330 | 1332 | const value = sBackProcessData.find(item => item[child.sName]) || {}; |
| 1331 | 1333 | const { bSetArea, bSetQty, sName, sSetQtyUnt } = value; |
| 1332 | 1334 | |
| ... | ... | @@ -1427,7 +1429,8 @@ const BoxComponent = props => { |
| 1427 | 1429 | ); |
| 1428 | 1430 | }, |
| 1429 | 1431 | }; |
| 1430 | - | |
| 1432 | + console.log(downViewProps,'downViewProps'); | |
| 1433 | + | |
| 1431 | 1434 | // 获取sType为3的 |
| 1432 | 1435 | const { productProcessInfo = [] } = masterData; |
| 1433 | 1436 | const finishedViewProps = { | ... | ... |
src/mobile/components/SelectInput.jsx
| ... | ... | @@ -14,18 +14,21 @@ const SelectInput = props => { |
| 14 | 14 | const [searchValue, setSearchValue] = useState(""); |
| 15 | 15 | const [visible, setVisible] = useState(false); |
| 16 | 16 | const { sId } = props.itemDetail || {}; |
| 17 | - const { tableName, viewRow, itemDetail, sModelsId, sValue, name, id, No, quotationData, showDropDown } = props || {}; | |
| 17 | + const { downIndex, tableName, viewRow, itemDetail, sModelsId, sValue, name, id, No, quotationData, showDropDown } = props || {}; | |
| 18 | 18 | const { masterData } = props.state; |
| 19 | 19 | const [bCanInput, setBCanInput] = useState(props.bCanInput); |
| 20 | 20 | const { bReadonly } = itemDetail || {}; |
| 21 | - // useEffect(() => { | |
| 22 | - // setValue(props.sValue || ""); // 动态更新 value | |
| 23 | - // }, [props.sValue]); | |
| 24 | 21 | useEffect(() => { |
| 25 | 22 | if (!itemDetail) return; |
| 26 | 23 | |
| 27 | 24 | const viewRowNew = itemDetail.sName ? viewRow?.[itemDetail.sName] : ""; |
| 28 | - setValue(viewRowNew || ""); // 动态更新 value | |
| 25 | + if (tableName.includes("slaveDown")) { | |
| 26 | + if (!viewRow.sBackProcessData) return; | |
| 27 | + const data = viewRow.sBackProcessData[downIndex][itemDetail.sName]; | |
| 28 | + setValue(data); | |
| 29 | + } else { | |
| 30 | + setValue(viewRowNew || ""); // 动态更新 value | |
| 31 | + } | |
| 29 | 32 | }, [itemDetail, itemDetail?.sName, viewRow]); |
| 30 | 33 | const [columns, setColumns] = useState([]); |
| 31 | 34 | const [coplyColumns, setCopyColumns] = useState(columns); |
| ... | ... | @@ -33,7 +36,7 @@ const SelectInput = props => { |
| 33 | 36 | const url = `${commonConfig.server_host}business/getSelectLimit/${sId}?sModelsId=${sModelsId}&sName=${""}`; |
| 34 | 37 | const body = { |
| 35 | 38 | sSqlCondition: { |
| 36 | - sProductClassifyId: quotationData?quotationData.sId:'', | |
| 39 | + sProductClassifyId: quotationData ? quotationData.sId : "", | |
| 37 | 40 | }, |
| 38 | 41 | sKeyUpFilterName: searchValue, |
| 39 | 42 | pageNum: 1, |
| ... | ... | @@ -44,15 +47,19 @@ const SelectInput = props => { |
| 44 | 47 | const list = res.data.dataset.rows?.map(item => ({ |
| 45 | 48 | label: item.sCustomerName || item.sName || item.sProcessName || item.sColorName || item.sMaterialsName, |
| 46 | 49 | value: item.sId || item.sSlaveId, |
| 50 | + ...item, | |
| 47 | 51 | })); |
| 48 | 52 | setColumns(list); |
| 49 | - setCopyColumns(list); | |
| 53 | + setCopyColumns(res.data.dataset.rows); | |
| 50 | 54 | } |
| 51 | 55 | }); |
| 52 | 56 | }; |
| 53 | 57 | const handleConfirm = () => { |
| 54 | - const data = columns.find(item => item.value === values[0]); | |
| 55 | - setValue(data?.label || ""); | |
| 58 | + const index = columns.findIndex(item => item.value === values[0]); | |
| 59 | + const data = coplyColumns[index]; | |
| 60 | + data[itemDetail.sName] = data.sName | |
| 61 | + setValue(columns[index]?.label || ""); | |
| 62 | + props.onDataChange(tableName, itemDetail.sName, data, null, coplyColumns); | |
| 56 | 63 | setVisible(false); |
| 57 | 64 | }; |
| 58 | 65 | |
| ... | ... | @@ -81,16 +88,38 @@ const SelectInput = props => { |
| 81 | 88 | }; |
| 82 | 89 | useEffect(() => { |
| 83 | 90 | if (!visible) return; |
| 84 | - let { sDropDownType } = itemDetail; | |
| 85 | - if (sDropDownType === "sql") { | |
| 86 | - getSqlDropDownData(searchValue); | |
| 87 | - } else if ((sDropDownType = "const")) { | |
| 88 | - const list = Object.entries(JSON.parse(itemDetail.showDropDown)).map(([key, value]) => ({ | |
| 89 | - label: value, | |
| 90 | - value: key, | |
| 91 | - })); | |
| 92 | - setColumns(list); | |
| 93 | - setCopyColumns(list); | |
| 91 | + let { sDropDownType, sVisColumnName } = itemDetail; | |
| 92 | + if (sVisColumnName && sVisColumnName === "sProcessName") { | |
| 93 | + if (sDropDownType === "sql") { | |
| 94 | + const list = JSON.parse(itemDetail.sChineseDropDown).map(x => { | |
| 95 | + return { | |
| 96 | + label: x.sProcessName, | |
| 97 | + value: x.sId, | |
| 98 | + ...x, | |
| 99 | + }; | |
| 100 | + }); | |
| 101 | + setColumns(list); | |
| 102 | + setCopyColumns(list); | |
| 103 | + // getSqlDropDownData(searchValue); | |
| 104 | + } else if ((sDropDownType = "const")) { | |
| 105 | + const list = Object.entries(JSON.parse(itemDetail.showDropDown)).map(([key, value]) => ({ | |
| 106 | + label: value, | |
| 107 | + value: key, | |
| 108 | + })); | |
| 109 | + setColumns(list); | |
| 110 | + setCopyColumns(list); | |
| 111 | + } | |
| 112 | + } else { | |
| 113 | + if (sDropDownType === "sql") { | |
| 114 | + getSqlDropDownData(searchValue); | |
| 115 | + } else if ((sDropDownType = "const")) { | |
| 116 | + const list = Object.entries(JSON.parse(itemDetail.showDropDown)).map(([key, value]) => ({ | |
| 117 | + label: value, | |
| 118 | + value: key, | |
| 119 | + })); | |
| 120 | + setColumns(list); | |
| 121 | + setCopyColumns(list); | |
| 122 | + } | |
| 94 | 123 | } |
| 95 | 124 | }, [visible]); |
| 96 | 125 | useCallback; |
| ... | ... | @@ -111,13 +140,7 @@ const SelectInput = props => { |
| 111 | 140 | value={value} |
| 112 | 141 | onChange={val => { |
| 113 | 142 | setValue(val); |
| 114 | - // 如果是master | |
| 115 | - if (tableName === "master") { | |
| 116 | - masterData[itemDetail.sName] = val; | |
| 117 | - props.setState(pre => ({ ...pre, masterData })); | |
| 118 | - } else { | |
| 119 | - props.setState(pre => ({ ...pre, [itemDetail.sName]: val })); | |
| 120 | - } | |
| 143 | + props.onDataChange(tableName, itemDetail.sName, { [itemDetail.sName]: val }, null, coplyColumns); | |
| 121 | 144 | }} |
| 122 | 145 | readOnly={bReadonly} |
| 123 | 146 | /> | ... | ... |
src/mobile/quotation/detailNew.jsx
| 1 | 1 | import { useRef, useEffect, useState, useCallback, useMemo } from "react"; |
| 2 | 2 | import { history } from "umi"; |
| 3 | -import { Tabs, Selector, Grid, Image, Button, Checkbox, Switch, Dialog, Toast } from "antd-mobile"; | |
| 3 | +import { Input, Tabs, Selector, Grid, Image, Button, Checkbox, Switch, Dialog, Toast } from "antd-mobile"; | |
| 4 | 4 | import { AddOutline, MinusOutline } from "antd-mobile-icons"; |
| 5 | 5 | import commonConfig from "@/utils/config"; |
| 6 | 6 | import * as commonServices from "@/services/services"; |
| ... | ... | @@ -80,12 +80,13 @@ const QuickQuoteEvent = props => { |
| 80 | 80 | |
| 81 | 81 | const sQuoConfig = commonUtils.convertStrToObj(props.masterData.sQuoConfig, {}); |
| 82 | 82 | |
| 83 | - const [state, setState] = useState(props.state); | |
| 83 | + const [state, setState] = useState(addState.onGetFilterState(sQuoConfig, true)); | |
| 84 | 84 | |
| 85 | 85 | const { formData = [] } = state; |
| 86 | 86 | const { bLinkFieledClick } = props; |
| 87 | 87 | const [hideBackBtn, setHideBackBtn] = useState(false); |
| 88 | 88 | const [enabled, setEnabled] = useState(props.enabled); |
| 89 | + | |
| 89 | 90 | useEffect(() => { |
| 90 | 91 | setState(pre => ({ ...pre, selectedNode })); |
| 91 | 92 | }, []); |
| ... | ... | @@ -95,27 +96,26 @@ const QuickQuoteEvent = props => { |
| 95 | 96 | }, [bLinkFieledClick, props.enabled]); |
| 96 | 97 | useEffect(() => { |
| 97 | 98 | // 获取 masterConfig |
| 98 | - const configUrl = `${commonConfig.server_host}business/getModelBysId/${"172129113112117428019179600"}?sModelsId=${"172129113112117428019179600"}`; | |
| 99 | + const { sModelsId } = props; | |
| 100 | + const configUrl = `${commonConfig.server_host}business/getModelBysId/${sModelsId}?sModelsId=${sModelsId}`; | |
| 99 | 101 | commonServices |
| 100 | 102 | .getService(props.app.token, configUrl) |
| 101 | 103 | .then(({ data: configReturn }) => { |
| 102 | 104 | if (configReturn.code === 1) { |
| 103 | 105 | const formData = configReturn.dataset.rows[0]?.formData; |
| 104 | 106 | setMasterConfig(formData); |
| 105 | - setState(pre => ({ ...pre, masterConfig: formData, slaveConfig: formData[1] })); | |
| 106 | - } | |
| 107 | - }) | |
| 108 | - .catch(error => {}); | |
| 109 | - const formDataUrl = `${commonConfig.server_host}business/getModelBysId/${sModelsId}?sModelsId=${sModelsId}`; | |
| 110 | - commonServices | |
| 111 | - .getService(props.app.token, formDataUrl) | |
| 112 | - .then(({ data: formDataReturn }) => { | |
| 113 | - if (formDataReturn.code === 1) { | |
| 114 | - const formDatas = formDataReturn.dataset.rows[0]?.formData; | |
| 115 | - setState(pre => ({ ...pre, formData: formDatas })); | |
| 107 | + // setState(pre => ({ ...pre, masterConfig: formData, slaveConfig: formData[1] })); | |
| 116 | 108 | } |
| 117 | 109 | }) |
| 118 | 110 | .catch(error => {}); |
| 111 | + const sActiveId = "172129113112117428019179600"; | |
| 112 | + const configUrls = `${commonConfig.server_host}business/getModelBysId/${sActiveId}?sModelsId=${sActiveId}`; | |
| 113 | + commonServices.getService(props.app.token, configUrls).then(({ data: configReturn }) => { | |
| 114 | + if (configReturn.code === 1) { | |
| 115 | + const formData = configReturn.dataset.rows[0].formData; | |
| 116 | + setState(pre => ({ ...pre, formData, masterConfig: formData[0] })); | |
| 117 | + } | |
| 118 | + }); | |
| 119 | 119 | }, []); |
| 120 | 120 | |
| 121 | 121 | // 获取盒型定义配置 |
| ... | ... | @@ -158,7 +158,6 @@ const QuickQuoteEvent = props => { |
| 158 | 158 | |
| 159 | 159 | addState.onDataChange = (name, sFieldName, changeValue, sId, dropDownData, isWait) => { |
| 160 | 160 | const { masterData = {}, slaveData = [], selectedNode = {} } = state; |
| 161 | - | |
| 162 | 161 | const extraState = { |
| 163 | 162 | calcPriceFinished: false, |
| 164 | 163 | manyData: [], |
| ... | ... | @@ -174,7 +173,6 @@ const QuickQuoteEvent = props => { |
| 174 | 173 | dProductQty: changeValue.dProductQty, |
| 175 | 174 | })); |
| 176 | 175 | } |
| 177 | - | |
| 178 | 176 | setState(pre => ({ ...pre, masterData: masterDataNew, ...extraState })); |
| 179 | 177 | } else if (name.includes("slave")) { |
| 180 | 178 | const boxModel = name.replace("slaveUp", "").replace("slaveDown", ""); |
| ... | ... | @@ -895,18 +893,90 @@ const QuickQuoteEvent = props => { |
| 895 | 893 | masterConfig: masterConfig && masterConfig.length ? masterConfig[0] : {}, |
| 896 | 894 | }; |
| 897 | 895 | }; |
| 898 | - | |
| 896 | +const getSqlDropDownData = async (sId, props) => { | |
| 897 | + const { selectedNode } = props; | |
| 898 | + const url = `${commonConfig.server_host}business/getSelectLimit/${sId}`; | |
| 899 | + const body = { | |
| 900 | + sSqlCondition: { | |
| 901 | + sProductClassifyId: selectedNode.sId, | |
| 902 | + }, | |
| 903 | + sKeyUpFilterName: "", | |
| 904 | + pageNum: 1, | |
| 905 | + pageSize: 20, | |
| 906 | + }; | |
| 907 | + const retrunData = await commonServices.postValueService(props.app.token, body, url); | |
| 908 | + const sColumnNameConfigStr = retrunData.data?.dataset?.rows?.[0]?.sColumnNameConfig; | |
| 909 | + // 取上机尺寸 | |
| 910 | + return commonUtils.convertStrToObj(sColumnNameConfigStr, []); | |
| 911 | +}; | |
| 899 | 912 | const QuotationAllprogressDetail = baseProps => { |
| 900 | - const { location } = baseProps; | |
| 901 | - // const props = QuickQuoteEvent(baseProps); | |
| 902 | - // const [state, setState] = useState(JsonData.state); | |
| 913 | + const { location, quotationData } = baseProps; | |
| 914 | + // 处理 formData | |
| 903 | 915 | const propss = { |
| 904 | - // ...baseProps, | |
| 905 | - location, | |
| 906 | - ...JsonData, | |
| 916 | + ...baseProps, | |
| 917 | + selectedNode: quotationData, | |
| 918 | + state: {}, | |
| 907 | 919 | }; |
| 908 | 920 | const props = QuickQuoteEvent(propss); |
| 909 | - console.log("🚀 ~ QuotationAllprogressDetail:", props); | |
| 921 | + const { selectedNode } = props; | |
| 922 | + const { showName, sUnit } = quotationData; | |
| 923 | + const timeRef = useRef(0); | |
| 924 | + useEffect(() => { | |
| 925 | + // props.setState(pre => | |
| 926 | + // ({ ...pre, masterData: { ...quotationData, sProductName: showName, sProductUnit: sUnit } }) | |
| 927 | + // ); | |
| 928 | + props.setState(pre => { | |
| 929 | + const { slaveData = [], slaveConfig } = pre; | |
| 930 | + const addState = {}; | |
| 931 | + const defaultData = commonFunc.getDefaultData(slaveConfig); | |
| 932 | + const slaveDataNew = slaveData.filter(item => item.sTreeNodeName === selectedNode.showName); | |
| 933 | + if (!slaveDataNew.length) { | |
| 934 | + const sAllPartsName = selectedNode.sAllPartsName || selectedNode.showName; | |
| 935 | + sAllPartsName.split(",").forEach((item, index) => { | |
| 936 | + const tempData = { | |
| 937 | + sId: commonUtils.createSid(), | |
| 938 | + handleType: "add", | |
| 939 | + ...defaultData, | |
| 940 | + sBoxModel: item, | |
| 941 | + sTreeNodeName: selectedNode.showName, | |
| 942 | + }; | |
| 943 | + if (selectedNode.sTypeKey === "huace") { | |
| 944 | + if (index !== 0) { | |
| 945 | + delete tempData.dSumPQty; | |
| 946 | + } else { | |
| 947 | + tempData.dSumPQty = 4; | |
| 948 | + } | |
| 949 | + } | |
| 950 | + slaveDataNew.push(tempData); | |
| 951 | + }); | |
| 952 | + addState.slaveData = slaveDataNew; | |
| 953 | + } | |
| 954 | + if (timeRef.current > 1) { | |
| 955 | + addState.slaveData = slaveDataNew; | |
| 956 | + addState.extraParts = {}; | |
| 957 | + } | |
| 958 | + return { | |
| 959 | + ...pre, | |
| 960 | + ...addState, | |
| 961 | + // downAbleConfigs: downAbleConfigs | |
| 962 | + // .filter(item => item.sType === "2") | |
| 963 | + // .map((item, index) => ({ | |
| 964 | + // ...item, | |
| 965 | + // sName: `sParams${index}`, | |
| 966 | + // iColValue: item.iColValue || 4, | |
| 967 | + // sVisColumnName: "sProcessName", | |
| 968 | + // })), | |
| 969 | + // finishedConfigs: downAbleConfigs | |
| 970 | + // .filter(item => item.sType === "3") | |
| 971 | + // .map((item, index) => ({ | |
| 972 | + // ...item, | |
| 973 | + // sName: `sParams${index}`, | |
| 974 | + // iColValue: item.iColValue || 4, | |
| 975 | + // sVisColumnName: "sProcessName", | |
| 976 | + // })), | |
| 977 | + }; | |
| 978 | + }); | |
| 979 | + }, []); | |
| 910 | 980 | return ( |
| 911 | 981 | <div className={styles.quotationDetailBox}> |
| 912 | 982 | <QuotationDetail {...props} /> |
| ... | ... | @@ -915,14 +985,11 @@ const QuotationAllprogressDetail = baseProps => { |
| 915 | 985 | }; |
| 916 | 986 | |
| 917 | 987 | const QuotationDetail = props => { |
| 918 | - const { location, app, sModelsId, state, selectedNode = {} } = props; | |
| 919 | - const { token } = app; | |
| 920 | - const { formData = [], masterConfig, slaveRowData, masterData } = state || {}; | |
| 921 | - const { quotationData } = JSON.parse(location.state) || {}; | |
| 922 | - if (!masterConfig) return; | |
| 923 | - //masterData 主表数据 | |
| 924 | - // 获取主表信息 | |
| 925 | - const viewConfigs = masterConfig.gdsconfigformslave.filter(item => item.sName && item.bVisible); | |
| 988 | + const { masterConfig, masterData = {}, selectedNode = {} } = props.state; | |
| 989 | + if (!masterConfig) return ""; | |
| 990 | + const ableConfigs = masterConfig.gdsconfigformslave.filter(item => item.sName && item.bVisible); | |
| 991 | + // 处理长宽样式 | |
| 992 | + const viewConfigs = selectedNode?.bBox ? ableConfigs : ableConfigs.filter(x => x.sName !== "dHeight"); | |
| 926 | 993 | const viewProps = { |
| 927 | 994 | ...props, |
| 928 | 995 | viewConfigs: viewConfigs, |
| ... | ... | @@ -931,23 +998,20 @@ const QuotationDetail = props => { |
| 931 | 998 | viewRow: { ...masterData, sProductClassifyId: selectedNode.sId }, |
| 932 | 999 | tableName: "master", |
| 933 | 1000 | }; |
| 934 | - | |
| 935 | 1001 | return ( |
| 936 | 1002 | <div> |
| 937 | - <div>{quotationData?.showName || "Loading..."}</div> | |
| 938 | - | |
| 1003 | + <div>{selectedNode?.showName || "Loading..."}</div> | |
| 939 | 1004 | <div> |
| 940 | 1005 | <MasterComponent {...viewProps} /> |
| 941 | 1006 | </div> |
| 942 | 1007 | <div> |
| 943 | - <QuotationTabs {...props} /> | |
| 1008 | + <QuotationTabs {...props} quotationData={selectedNode} /> | |
| 944 | 1009 | </div> |
| 945 | 1010 | </div> |
| 946 | 1011 | ); |
| 947 | 1012 | }; |
| 948 | 1013 | const MasterComponent = props => { |
| 949 | 1014 | const { viewConfigs, masterData } = props; |
| 950 | - | |
| 951 | 1015 | const customer = viewConfigs?.find(x => x.sName === "sCustomerName") || {}; |
| 952 | 1016 | const customerProps = { |
| 953 | 1017 | ...props, |
| ... | ... | @@ -995,11 +1059,11 @@ const MasterComponent = props => { |
| 995 | 1059 | return ( |
| 996 | 1060 | <div> |
| 997 | 1061 | <div className={styles.customer}> |
| 998 | - <div>{customerProps.formData.showName}</div> | |
| 1062 | + <div>{customerProps.formData?.showName}</div> | |
| 999 | 1063 | <SelectInput {...customerProps} /> |
| 1000 | 1064 | </div> |
| 1001 | 1065 | <div className={styles.customer}> |
| 1002 | - <div>{productProps.formData.showName}</div> | |
| 1066 | + <div>{productProps.formData?.showName}</div> | |
| 1003 | 1067 | <SelectInput {...productProps} /> |
| 1004 | 1068 | </div> |
| 1005 | 1069 | <div className={styles.customer}> |
| ... | ... | @@ -1007,28 +1071,36 @@ const MasterComponent = props => { |
| 1007 | 1071 | <div className={styles.sizeBox}> |
| 1008 | 1072 | <div className={styles.sizeItem}> |
| 1009 | 1073 | <div style={{ width: "70%" }}> |
| 1010 | - <SelectInput {...dLengthProps} /> | |
| 1074 | + <SelectInput {...dLengthProps} bCanInput={true} /> | |
| 1011 | 1075 | </div> |
| 1012 | 1076 | <div style={{ width: "30%", textAlign: "center" }}>X</div> |
| 1013 | 1077 | </div> |
| 1014 | 1078 | <div className={styles.sizeItem}> |
| 1015 | 1079 | <div style={{ width: "70%" }}> |
| 1016 | - <SelectInput {...dWidthProps} /> | |
| 1080 | + <SelectInput {...dWidthProps} bCanInput={true} /> | |
| 1017 | 1081 | </div>{" "} |
| 1018 | - <div style={{ width: "30%", textAlign: "center" }}>X</div> | |
| 1082 | + {Object.keys(dHeight).length > 0 ? ( | |
| 1083 | + <div style={{ width: "30%", textAlign: "center" }}>X</div> | |
| 1084 | + ) : ( | |
| 1085 | + <div style={{ width: "30%", textAlign: "center" }}>mm</div> | |
| 1086 | + )} | |
| 1019 | 1087 | </div> |
| 1020 | - <div className={styles.sizeItem}> | |
| 1021 | - <div style={{ width: "70%" }}> | |
| 1022 | - <SelectInput {...dHeightProps} /> | |
| 1088 | + {Object.keys(dHeight).length > 0 ? ( | |
| 1089 | + <div className={styles.sizeItem}> | |
| 1090 | + <div style={{ width: "70%" }}> | |
| 1091 | + <SelectInput {...dHeightProps} bCanInput={true} /> | |
| 1092 | + </div> | |
| 1093 | + <div style={{ width: "30%", textAlign: "center" }}>mm</div> | |
| 1023 | 1094 | </div> |
| 1024 | - <div style={{ width: "30%", textAlign: "center" }}>mm</div> | |
| 1025 | - </div> | |
| 1095 | + ) : ( | |
| 1096 | + "" | |
| 1097 | + )} | |
| 1026 | 1098 | </div> |
| 1027 | 1099 | </div> |
| 1028 | 1100 | <div className={styles.sizeBox}> |
| 1029 | 1101 | <div className={styles.customer}> |
| 1030 | 1102 | <div>数量</div> |
| 1031 | - <SelectInput {...dProductQtyProps} /> | |
| 1103 | + <SelectInput {...dProductQtyProps} bCanInput={true} /> | |
| 1032 | 1104 | </div> |
| 1033 | 1105 | <div className={styles.customer}> |
| 1034 | 1106 | <div>单位</div> |
| ... | ... | @@ -1047,6 +1119,7 @@ const QuotationTabs = props => { |
| 1047 | 1119 | const { selectedNode } = state; |
| 1048 | 1120 | const sAllPartsName = selectedNode?.sAllPartsName; |
| 1049 | 1121 | const sAllPartsNameList = sAllPartsName?.split(","); |
| 1122 | + // sAllPartsNameList.push('+') | |
| 1050 | 1123 | const [activeKey, setActiveKey] = useState(sAllPartsNameList && sAllPartsNameList.length ? sAllPartsNameList[0] : null); |
| 1051 | 1124 | |
| 1052 | 1125 | useEffect(() => { |
| ... | ... | @@ -1079,6 +1152,7 @@ const QuotationTabs = props => { |
| 1079 | 1152 | // 内容 |
| 1080 | 1153 | const BoxComponent = props => { |
| 1081 | 1154 | const { state, boxModel } = props; |
| 1155 | + console.log("🚀 ~ BoxComponent:", props, JsonData); | |
| 1082 | 1156 | const { activeKey, slaveConfig, masterData, selectedNode, boxConfig, downAbleConfigs = [], slaveData } = state || {}; |
| 1083 | 1157 | const { sModelsId } = props; |
| 1084 | 1158 | const [selectList, setSelectList] = useState([]); |
| ... | ... | @@ -1087,7 +1161,8 @@ const BoxComponent = props => { |
| 1087 | 1161 | const [boxPopup, setBoxPopup] = useState(false); |
| 1088 | 1162 | const [boxsList, setBoxsList] = useState([]); |
| 1089 | 1163 | const [selected, setSelected] = useState(null); |
| 1090 | - const slaveRowDatas = slaveData.find(item => item.sTreeNodeName === selectedNode.showName && item.sBoxModel === boxModel) || {}; | |
| 1164 | + const slaveRowDatas = slaveData?.find(item => item.sTreeNodeName === selectedNode.showName && item.sBoxModel === boxModel) || {}; | |
| 1165 | + console.log("🚀 ~ slaveRowDatas:", slaveRowDatas) | |
| 1091 | 1166 | const [slaveRowData, setSlaveRowData] = useState(slaveRowDatas); |
| 1092 | 1167 | |
| 1093 | 1168 | // 获取盒型信息 |
| ... | ... | @@ -1100,6 +1175,7 @@ const BoxComponent = props => { |
| 1100 | 1175 | pageNum: 1, |
| 1101 | 1176 | pageSize: 20, |
| 1102 | 1177 | }; |
| 1178 | + | |
| 1103 | 1179 | commonServices.postValueService(props.app.token, body, url).then(res => { |
| 1104 | 1180 | if (res.data.code === 1) { |
| 1105 | 1181 | const list = res.data.dataset.rows.map(x => { |
| ... | ... | @@ -1273,15 +1349,39 @@ const BoxComponent = props => { |
| 1273 | 1349 | |
| 1274 | 1350 | // 后道参数 |
| 1275 | 1351 | const { sBackProcessData } = slaveRowData || []; |
| 1276 | - const downViewConfigs = downAbleConfigs | |
| 1277 | - .filter(item => item.sPartsName === boxModel || !item.sPartsName) | |
| 1278 | - .map((item, i) => { | |
| 1279 | - return { | |
| 1280 | - ...item, | |
| 1281 | - isSelect: sBackProcessData.length && sBackProcessData[i].sId ? true : false, | |
| 1282 | - }; | |
| 1283 | - }); | |
| 1352 | + const [downAbleConfigsNew, setDownAbleConfigsNew] = useState([]); | |
| 1353 | + useEffect(() => { | |
| 1354 | + setDownAbleConfigsNew(downAbleConfigs); | |
| 1355 | + }, [selectedNode.showName, boxModel]); | |
| 1284 | 1356 | |
| 1357 | + // 初始化状态,存储每个 Switch 的状态 | |
| 1358 | + const [switchStates, setSwitchStates] = useState(null); | |
| 1359 | + useEffect(() => { | |
| 1360 | + if (!sBackProcessData) return; | |
| 1361 | + const newSwitchStates = downAbleConfigsNew | |
| 1362 | + .filter(item => item.sPartsName === boxModel || !item.sPartsName) | |
| 1363 | + .reduce((acc, item, index) => { | |
| 1364 | + acc[item.sName] = sBackProcessData[index][item.sName] !== ""; | |
| 1365 | + return acc; | |
| 1366 | + }, {}); | |
| 1367 | + | |
| 1368 | + setSwitchStates(newSwitchStates); | |
| 1369 | + }, [downAbleConfigsNew, boxModel]); // 依赖数组 | |
| 1370 | + | |
| 1371 | + // 处理 Switch 变化的函数 | |
| 1372 | + const handleSwitchChange = (sName, val) => { | |
| 1373 | + setSwitchStates({ | |
| 1374 | + ...switchStates, | |
| 1375 | + [sName]: val, | |
| 1376 | + }); | |
| 1377 | + }; | |
| 1378 | + // 过滤后的数据 | |
| 1379 | + const downViewConfigs = downAbleConfigsNew | |
| 1380 | + .filter(item => item.sPartsName === boxModel || !item.sPartsName) | |
| 1381 | + .map(item => ({ | |
| 1382 | + ...item, | |
| 1383 | + isSelect: switchStates ? switchStates[item.sName] : false, | |
| 1384 | + })); | |
| 1285 | 1385 | const downViewProps = { |
| 1286 | 1386 | ...props, |
| 1287 | 1387 | viewConfigs: downViewConfigs, |
| ... | ... | @@ -1290,7 +1390,6 @@ const BoxComponent = props => { |
| 1290 | 1390 | viewRow: slaveRowData, |
| 1291 | 1391 | tableName: `slaveDown${boxModel}`, |
| 1292 | 1392 | }; |
| 1293 | - console.log(downViewProps, "downViewProps"); | |
| 1294 | 1393 | |
| 1295 | 1394 | const calcMethodData = commonUtils.convertStrToObj(slaveRowData?.sColumnNameConfigExclusion, []); |
| 1296 | 1395 | const radioValue = calcMethodData[0]?.sCode; |
| ... | ... | @@ -1416,6 +1515,75 @@ const BoxComponent = props => { |
| 1416 | 1515 | } |
| 1417 | 1516 | }; |
| 1418 | 1517 | |
| 1518 | + const getTableCloum = (i, child) => { | |
| 1519 | + if (!sBackProcessData) return; | |
| 1520 | + const value = sBackProcessData[i]; | |
| 1521 | + const { bSetArea, bSetQty, sName, sSetQtyUnt } = value; | |
| 1522 | + const viewConfigs = []; | |
| 1523 | + if (bSetArea) { | |
| 1524 | + viewConfigs.push({ | |
| 1525 | + sName: "dManualLength", | |
| 1526 | + showName: "x", | |
| 1527 | + iColValue: bSetQty ? 8 : 12, | |
| 1528 | + placeholder: "长", | |
| 1529 | + value: value.dManualLength + "", | |
| 1530 | + }); | |
| 1531 | + viewConfigs.push({ | |
| 1532 | + sName: "dManualWidth", | |
| 1533 | + showName: "mm", | |
| 1534 | + iColValue: bSetQty ? 8 : 12, | |
| 1535 | + placeholder: "宽", | |
| 1536 | + value: value.dManualWidth + "", | |
| 1537 | + }); | |
| 1538 | + } | |
| 1539 | + if (bSetQty) { | |
| 1540 | + viewConfigs.push({ | |
| 1541 | + sName: "dManualQty", | |
| 1542 | + showName: sSetQtyUnt || "", | |
| 1543 | + iColValue: bSetArea ? 8 : 24, | |
| 1544 | + placeholder: "数量", | |
| 1545 | + value: value.dManualQty + "", | |
| 1546 | + }); | |
| 1547 | + } | |
| 1548 | + const viewProps = { | |
| 1549 | + ...props, | |
| 1550 | + viewConfigs: viewConfigs, | |
| 1551 | + tableConfig: { ...slaveConfig, gdsconfigformslave: viewConfigs }, | |
| 1552 | + iColValueView: 24, | |
| 1553 | + viewRow: value, | |
| 1554 | + tableName: `slaveDown${boxModel}${sName}`, | |
| 1555 | + onDataChange: (name, sFieldName, changeValue, sId, dropDownData, isWait) => { | |
| 1556 | + const iIndex = slaveData.findIndex(item => item.sId === slaveRowData.sId); | |
| 1557 | + const iIndex1 = slaveData[iIndex].sBackProcessData.findIndex(item => item[child.sName]); | |
| 1558 | + slaveData[iIndex].sBackProcessData[iIndex1][sFieldName] = changeValue; | |
| 1559 | + const { dManualLength, dManualWidth } = slaveData[iIndex].sBackProcessData[iIndex1]; | |
| 1560 | + if (dManualLength !== undefined && dManualWidth !== undefined) { | |
| 1561 | + slaveData[iIndex].sBackProcessData[iIndex1].dManualValue = dManualLength * dManualWidth; | |
| 1562 | + } | |
| 1563 | + props.setState(pre => ({ ...pre, slaveData })); | |
| 1564 | + }, | |
| 1565 | + }; | |
| 1566 | + return viewConfigs.length ? ( | |
| 1567 | + <Grid columns={3} gap={8}> | |
| 1568 | + {viewProps.viewConfigs.map(x => ( | |
| 1569 | + <Grid.Item> | |
| 1570 | + <div className={styles.customer} key={x.id || x.showName} style={{ marginTop: "0", display: "flex", alignItems: "center" }}> | |
| 1571 | + <Input | |
| 1572 | + placeholder="" | |
| 1573 | + value={x.value} | |
| 1574 | + onChange={e => { | |
| 1575 | + viewProps.onDataChange("", x.sName, e, ""); | |
| 1576 | + }} | |
| 1577 | + ></Input> | |
| 1578 | + <div style={{ width: "30%", textAlign: "center" }}>{x.showName}</div> | |
| 1579 | + </div> | |
| 1580 | + </Grid.Item> | |
| 1581 | + ))} | |
| 1582 | + </Grid> | |
| 1583 | + ) : ( | |
| 1584 | + "" | |
| 1585 | + ); | |
| 1586 | + }; | |
| 1419 | 1587 | return ( |
| 1420 | 1588 | <div> |
| 1421 | 1589 | <Selector |
| ... | ... | @@ -1487,14 +1655,16 @@ const BoxComponent = props => { |
| 1487 | 1655 | <div> |
| 1488 | 1656 | <div>后道参数</div> |
| 1489 | 1657 | {downViewProps.viewConfigs.map((x, i) => ( |
| 1490 | - <div className={styles.backBox}> | |
| 1491 | - <div className={styles.backEnd}>{x.showName}</div> | |
| 1492 | - <Switch | |
| 1493 | - checked={x.isSelect} | |
| 1494 | - onChange={async val => { | |
| 1495 | - console.log(val, x, "val"); | |
| 1496 | - }} | |
| 1497 | - /> | |
| 1658 | + <div> | |
| 1659 | + <div className={styles.backBox}> | |
| 1660 | + <div className={styles.backEnd}>{x.showName}</div> | |
| 1661 | + <Switch checked={switchStates ? switchStates[x.sName] : ""} onChange={val => handleSwitchChange(x.sName, val)} /> | |
| 1662 | + <div className={styles.customer} style={{ marginTop: "0", marginLeft: "2rem", width: "40%" }}> | |
| 1663 | + <SelectInput {...downViewProps} itemDetail={x} downIndex={i} /> | |
| 1664 | + </div> | |
| 1665 | + {/* <div>{downViewProps.viewRow.sBackProcessData[i].bSetArea === 1 ? downViewProps.viewRow.sBackProcessData[i].bSetArea : ""}</div> */} | |
| 1666 | + </div> | |
| 1667 | + {getTableCloum(i, x)} | |
| 1498 | 1668 | </div> |
| 1499 | 1669 | ))} |
| 1500 | 1670 | </div> |
| ... | ... | @@ -1542,8 +1712,10 @@ const BoxComponent = props => { |
| 1542 | 1712 | ...data, |
| 1543 | 1713 | ...Object.assign({}, ...slaveNewData), |
| 1544 | 1714 | }; |
| 1545 | - setSlaveRowData(rowData); | |
| 1546 | - // props.setState(pre => ({ ...pre, slaveRowData:rowData })); | |
| 1715 | + console.log("🚀 ~ rowData:", rowData); | |
| 1716 | + | |
| 1717 | + // setSlaveRowData(rowData); | |
| 1718 | + props.setState(pre => ({ ...pre, slaveRowData: rowData })); | |
| 1547 | 1719 | setBoxPopup(false); |
| 1548 | 1720 | }} |
| 1549 | 1721 | > |
| ... | ... | @@ -1562,7 +1734,8 @@ const BoxComponent = props => { |
| 1562 | 1734 | // 材料组件 |
| 1563 | 1735 | const MaterialsComponent = props => { |
| 1564 | 1736 | const { state, boxModel } = props; |
| 1565 | - const { slaveRowData, slaveConfig, slaveData = [], selectedNode = {} } = state; | |
| 1737 | + const { slaveConfig, slaveData = [], selectedNode = {} } = state; | |
| 1738 | + let { slaveRowData } = state; | |
| 1566 | 1739 | if (!slaveRowData) return; |
| 1567 | 1740 | const { sParam = "" } = selectedNode; |
| 1568 | 1741 | const sParamList = sParam.split(","); |
| ... | ... | @@ -1613,6 +1786,7 @@ const MaterialsComponent = props => { |
| 1613 | 1786 | const iIndex = slaveData.findIndex(item => item.sId === slaveRowData.sId); |
| 1614 | 1787 | if (iIndex !== -1) { |
| 1615 | 1788 | slaveData[iIndex].materialsInfo = materialsInfo.map((item, i) => (i === index ? { ...item, ...changeValue } : item)); |
| 1789 | + slaveRowData = slaveData[iIndex]; | |
| 1616 | 1790 | } else { |
| 1617 | 1791 | const { selectedNode = {} } = state; |
| 1618 | 1792 | const { showName: sTreeNodeName } = selectedNode; |
| ... | ... | @@ -1624,8 +1798,7 @@ const MaterialsComponent = props => { |
| 1624 | 1798 | materialsInfo: materialsInfo.map((item, i) => (i === index ? { ...item, ...changeValue } : item)), |
| 1625 | 1799 | }); |
| 1626 | 1800 | } |
| 1627 | - | |
| 1628 | - props.setState(pre => ({ ...pre, slaveData, ...extraState })); | |
| 1801 | + props.setState(pre => ({ ...pre, slaveData, slaveRowData, ...extraState })); | |
| 1629 | 1802 | }, |
| 1630 | 1803 | }; |
| 1631 | 1804 | |
| ... | ... | @@ -1664,7 +1837,8 @@ const MaterialsComponent = props => { |
| 1664 | 1837 | materialsInfo: materialsInfoNew, |
| 1665 | 1838 | }); |
| 1666 | 1839 | } |
| 1667 | - props.setState(pre => ({ ...pre, slaveData, ...extraState })); | |
| 1840 | + slaveRowData.materialsInfo = materialsInfoNew; | |
| 1841 | + props.setState(pre => ({ ...pre, slaveData, slaveRowData, ...extraState })); | |
| 1668 | 1842 | }} |
| 1669 | 1843 | > |
| 1670 | 1844 | <AddOutline /> |
| ... | ... | @@ -1689,7 +1863,8 @@ const MaterialsComponent = props => { |
| 1689 | 1863 | const materialsInfoNew = [...materialsInfo]; |
| 1690 | 1864 | materialsInfoNew.splice(rowIndex, 1); |
| 1691 | 1865 | slaveData[iIndex].materialsInfo = materialsInfoNew; |
| 1692 | - props.setState(pre => ({ ...pre, slaveData, ...extraState })); | |
| 1866 | + slaveRowData.materialsInfo = materialsInfoNew; | |
| 1867 | + props.setState(pre => ({ ...pre, slaveData, slaveRowData, ...extraState })); | |
| 1693 | 1868 | }} |
| 1694 | 1869 | > |
| 1695 | 1870 | <MinusOutline /> |
| ... | ... | @@ -1720,18 +1895,20 @@ const ManyComponent = props => { |
| 1720 | 1895 | })} |
| 1721 | 1896 | </div> |
| 1722 | 1897 | <div> |
| 1723 | - {data.map(item => { | |
| 1724 | - return ( | |
| 1725 | - <div className={styles.tableBox}> | |
| 1726 | - <div className={styles.tableBody}>{item.dManyQty}</div> | |
| 1727 | - <div className={styles.tableBody}>{item.dPrintMoney}</div> | |
| 1728 | - <div className={styles.tableBody}>{item.dAfterProcessMoney}</div> | |
| 1729 | - <div className={styles.tableBody}>{item.dMaterialsMoney}</div> | |
| 1730 | - <div className={styles.tableBody}>{item.dManyPrice}</div> | |
| 1731 | - <div className={styles.tableBody}> {item.dDiscountMoney}</div> | |
| 1732 | - </div> | |
| 1733 | - ); | |
| 1734 | - })} | |
| 1898 | + {data && data.length | |
| 1899 | + ? data.map(item => { | |
| 1900 | + return ( | |
| 1901 | + <div className={styles.tableBox}> | |
| 1902 | + <div className={styles.tableBody}>{item.dManyQty}</div> | |
| 1903 | + <div className={styles.tableBody}>{item.dPrintMoney}</div> | |
| 1904 | + <div className={styles.tableBody}>{item.dAfterProcessMoney}</div> | |
| 1905 | + <div className={styles.tableBody}>{item.dMaterialsMoney}</div> | |
| 1906 | + <div className={styles.tableBody}>{item.dManyPrice}</div> | |
| 1907 | + <div className={styles.tableBody}> {item.dDiscountMoney}</div> | |
| 1908 | + </div> | |
| 1909 | + ); | |
| 1910 | + }) | |
| 1911 | + : ""} | |
| 1735 | 1912 | </div> |
| 1736 | 1913 | </div> |
| 1737 | 1914 | ); | ... | ... |