Commit 3431a3ecc17d61522af7e0a2ed4873d42b3c74d2

Authored by 陈鑫涛
1 parent e1c42e86

快速报价app

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,7 +21,6 @@ const Typesetting = props => {
21 boxHeight, 21 boxHeight,
22 textSize, 22 textSize,
23 } = props; 23 } = props;
24 - console.log("🚀 ~ typesettingsss:", props)  
25 if (!slaveRowData) return 24 if (!slaveRowData) return
26 const { 25 const {
27 dSBLB, // 上边留白 26 dSBLB, // 上边留白
@@ -477,7 +476,6 @@ const Typesetting = props => { @@ -477,7 +476,6 @@ const Typesetting = props => {
477 const propsDataWidth = Number(propsData.props.style.width.slice(0, -2)); 476 const propsDataWidth = Number(propsData.props.style.width.slice(0, -2));
478 const propsDataHeight = Number(propsData.props.style.height.slice(0, -2)); 477 const propsDataHeight = Number(propsData.props.style.height.slice(0, -2));
479 const propsDataTop = Number(propsData.props.style.top.slice(0, -2)); 478 const propsDataTop = Number(propsData.props.style.top.slice(0, -2));
480 - console.log(innerDivs,'innerDivs');  
481 479
482 const newMaterialLength = propsDataLeft + innerWidthCombined; // 原纸长 480 const newMaterialLength = propsDataLeft + innerWidthCombined; // 原纸长
483 const newMaterialWidth = propsDataTop + propsDataHeight - dSBLB; 481 const newMaterialWidth = propsDataTop + propsDataHeight - dSBLB;
@@ -551,9 +549,7 @@ const Typesetting = props => { @@ -551,9 +549,7 @@ const Typesetting = props => {
551 }, 0); // 使用 0 延迟,将任务放入事件队列 549 }, 0); // 使用 0 延迟,将任务放入事件队列
552 } 550 }
553 const isMax = slaveDataDetail?.dMaxLength && Number(slaveDataDetail?.dMaxLength) >= Number(slaveRowData?.dMachineLength); 551 const isMax = slaveDataDetail?.dMaxLength && Number(slaveDataDetail?.dMaxLength) >= Number(slaveRowData?.dMachineLength);
554 - console.log("🚀 ~ isMax:", isMax,slaveDataDetail,slaveRowData)  
555 const isShow = slaveRowData && slaveRowData.dMachineLength && slaveRowData.dMaxWidth && slaveRowData.dMaxLength && isMax && innerDivs.length; 552 const isShow = slaveRowData && slaveRowData.dMachineLength && slaveRowData.dMaxWidth && slaveRowData.dMaxLength && isMax && innerDivs.length;
556 - console.log(innerDivs,cols,rows,'innerDivs');  
557 553
558 const onClick = () => { 554 const onClick = () => {
559 setIsModalOpen(true); 555 setIsModalOpen(true);
src/components/QuickQuote/index.jsx
@@ -906,7 +906,6 @@ const QuickQuoteEvent = props => { @@ -906,7 +906,6 @@ const QuickQuoteEvent = props => {
906 // 入口 906 // 入口
907 const QuickQuote = baseProps => { 907 const QuickQuote = baseProps => {
908 const props = QuickQuoteEvent(baseProps); 908 const props = QuickQuoteEvent(baseProps);
909 -  
910 const [treeClassName, setTreeClassName] = useState(""); 909 const [treeClassName, setTreeClassName] = useState("");
911 910
912 // 监听页面滚动事件 911 // 监听页面滚动事件
@@ -1000,10 +999,11 @@ const TreeComponent = props => { @@ -1000,10 +999,11 @@ const TreeComponent = props => {
1000 }; 999 };
1001 const getDropDownData = async props => { 1000 const getDropDownData = async props => {
1002 const showDownConfig = slaveConfig.gdsconfigformslave.find(item => item.sControlName === "BtnDownConfig"); 1001 const showDownConfig = slaveConfig.gdsconfigformslave.find(item => item.sControlName === "BtnDownConfig");
1003 -  
1004 const downAbleConfigs = await getSqlDropDownData({ ...showDownConfig }); 1002 const downAbleConfigs = await getSqlDropDownData({ ...showDownConfig });
1005 1003
1006 props.setState(pre => { 1004 props.setState(pre => {
  1005 + console.log(pre,'pre');
  1006 +
1007 const { slaveData = [], slaveConfig } = pre; 1007 const { slaveData = [], slaveConfig } = pre;
1008 const addState = {}; 1008 const addState = {};
1009 const defaultData = commonFunc.getDefaultData(slaveConfig); 1009 const defaultData = commonFunc.getDefaultData(slaveConfig);
@@ -1327,6 +1327,8 @@ const BoxComponent = props => { @@ -1327,6 +1327,8 @@ const BoxComponent = props => {
1327 return props.getSqlDropDownData(...args); 1327 return props.getSqlDropDownData(...args);
1328 }, 1328 },
1329 extraContent: child => { 1329 extraContent: child => {
  1330 + console.log(child,'child');
  1331 +
1330 const value = sBackProcessData.find(item => item[child.sName]) || {}; 1332 const value = sBackProcessData.find(item => item[child.sName]) || {};
1331 const { bSetArea, bSetQty, sName, sSetQtyUnt } = value; 1333 const { bSetArea, bSetQty, sName, sSetQtyUnt } = value;
1332 1334
@@ -1427,7 +1429,8 @@ const BoxComponent = props => { @@ -1427,7 +1429,8 @@ const BoxComponent = props => {
1427 ); 1429 );
1428 }, 1430 },
1429 }; 1431 };
1430 - 1432 + console.log(downViewProps,'downViewProps');
  1433 +
1431 // 获取sType为3的 1434 // 获取sType为3的
1432 const { productProcessInfo = [] } = masterData; 1435 const { productProcessInfo = [] } = masterData;
1433 const finishedViewProps = { 1436 const finishedViewProps = {
src/mobile/components/SelectInput.jsx
@@ -14,18 +14,21 @@ const SelectInput = props => { @@ -14,18 +14,21 @@ const SelectInput = props => {
14 const [searchValue, setSearchValue] = useState(""); 14 const [searchValue, setSearchValue] = useState("");
15 const [visible, setVisible] = useState(false); 15 const [visible, setVisible] = useState(false);
16 const { sId } = props.itemDetail || {}; 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 const { masterData } = props.state; 18 const { masterData } = props.state;
19 const [bCanInput, setBCanInput] = useState(props.bCanInput); 19 const [bCanInput, setBCanInput] = useState(props.bCanInput);
20 const { bReadonly } = itemDetail || {}; 20 const { bReadonly } = itemDetail || {};
21 - // useEffect(() => {  
22 - // setValue(props.sValue || ""); // 动态更新 value  
23 - // }, [props.sValue]);  
24 useEffect(() => { 21 useEffect(() => {
25 if (!itemDetail) return; 22 if (!itemDetail) return;
26 23
27 const viewRowNew = itemDetail.sName ? viewRow?.[itemDetail.sName] : ""; 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 }, [itemDetail, itemDetail?.sName, viewRow]); 32 }, [itemDetail, itemDetail?.sName, viewRow]);
30 const [columns, setColumns] = useState([]); 33 const [columns, setColumns] = useState([]);
31 const [coplyColumns, setCopyColumns] = useState(columns); 34 const [coplyColumns, setCopyColumns] = useState(columns);
@@ -33,7 +36,7 @@ const SelectInput = props => { @@ -33,7 +36,7 @@ const SelectInput = props => {
33 const url = `${commonConfig.server_host}business/getSelectLimit/${sId}?sModelsId=${sModelsId}&sName=${""}`; 36 const url = `${commonConfig.server_host}business/getSelectLimit/${sId}?sModelsId=${sModelsId}&sName=${""}`;
34 const body = { 37 const body = {
35 sSqlCondition: { 38 sSqlCondition: {
36 - sProductClassifyId: quotationData?quotationData.sId:'', 39 + sProductClassifyId: quotationData ? quotationData.sId : "",
37 }, 40 },
38 sKeyUpFilterName: searchValue, 41 sKeyUpFilterName: searchValue,
39 pageNum: 1, 42 pageNum: 1,
@@ -44,15 +47,19 @@ const SelectInput = props => { @@ -44,15 +47,19 @@ const SelectInput = props => {
44 const list = res.data.dataset.rows?.map(item => ({ 47 const list = res.data.dataset.rows?.map(item => ({
45 label: item.sCustomerName || item.sName || item.sProcessName || item.sColorName || item.sMaterialsName, 48 label: item.sCustomerName || item.sName || item.sProcessName || item.sColorName || item.sMaterialsName,
46 value: item.sId || item.sSlaveId, 49 value: item.sId || item.sSlaveId,
  50 + ...item,
47 })); 51 }));
48 setColumns(list); 52 setColumns(list);
49 - setCopyColumns(list); 53 + setCopyColumns(res.data.dataset.rows);
50 } 54 }
51 }); 55 });
52 }; 56 };
53 const handleConfirm = () => { 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 setVisible(false); 63 setVisible(false);
57 }; 64 };
58 65
@@ -81,16 +88,38 @@ const SelectInput = props => { @@ -81,16 +88,38 @@ const SelectInput = props => {
81 }; 88 };
82 useEffect(() => { 89 useEffect(() => {
83 if (!visible) return; 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 }, [visible]); 124 }, [visible]);
96 useCallback; 125 useCallback;
@@ -111,13 +140,7 @@ const SelectInput = props => { @@ -111,13 +140,7 @@ const SelectInput = props => {
111 value={value} 140 value={value}
112 onChange={val => { 141 onChange={val => {
113 setValue(val); 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 readOnly={bReadonly} 145 readOnly={bReadonly}
123 /> 146 />
src/mobile/quotation/detailNew.jsx
1 import { useRef, useEffect, useState, useCallback, useMemo } from "react"; 1 import { useRef, useEffect, useState, useCallback, useMemo } from "react";
2 import { history } from "umi"; 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 import { AddOutline, MinusOutline } from "antd-mobile-icons"; 4 import { AddOutline, MinusOutline } from "antd-mobile-icons";
5 import commonConfig from "@/utils/config"; 5 import commonConfig from "@/utils/config";
6 import * as commonServices from "@/services/services"; 6 import * as commonServices from "@/services/services";
@@ -80,12 +80,13 @@ const QuickQuoteEvent = props => { @@ -80,12 +80,13 @@ const QuickQuoteEvent = props => {
80 80
81 const sQuoConfig = commonUtils.convertStrToObj(props.masterData.sQuoConfig, {}); 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 const { formData = [] } = state; 85 const { formData = [] } = state;
86 const { bLinkFieledClick } = props; 86 const { bLinkFieledClick } = props;
87 const [hideBackBtn, setHideBackBtn] = useState(false); 87 const [hideBackBtn, setHideBackBtn] = useState(false);
88 const [enabled, setEnabled] = useState(props.enabled); 88 const [enabled, setEnabled] = useState(props.enabled);
  89 +
89 useEffect(() => { 90 useEffect(() => {
90 setState(pre => ({ ...pre, selectedNode })); 91 setState(pre => ({ ...pre, selectedNode }));
91 }, []); 92 }, []);
@@ -95,27 +96,26 @@ const QuickQuoteEvent = props => { @@ -95,27 +96,26 @@ const QuickQuoteEvent = props => {
95 }, [bLinkFieledClick, props.enabled]); 96 }, [bLinkFieledClick, props.enabled]);
96 useEffect(() => { 97 useEffect(() => {
97 // 获取 masterConfig 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 commonServices 101 commonServices
100 .getService(props.app.token, configUrl) 102 .getService(props.app.token, configUrl)
101 .then(({ data: configReturn }) => { 103 .then(({ data: configReturn }) => {
102 if (configReturn.code === 1) { 104 if (configReturn.code === 1) {
103 const formData = configReturn.dataset.rows[0]?.formData; 105 const formData = configReturn.dataset.rows[0]?.formData;
104 setMasterConfig(formData); 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 .catch(error => {}); 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,7 +158,6 @@ const QuickQuoteEvent = props => {
158 158
159 addState.onDataChange = (name, sFieldName, changeValue, sId, dropDownData, isWait) => { 159 addState.onDataChange = (name, sFieldName, changeValue, sId, dropDownData, isWait) => {
160 const { masterData = {}, slaveData = [], selectedNode = {} } = state; 160 const { masterData = {}, slaveData = [], selectedNode = {} } = state;
161 -  
162 const extraState = { 161 const extraState = {
163 calcPriceFinished: false, 162 calcPriceFinished: false,
164 manyData: [], 163 manyData: [],
@@ -174,7 +173,6 @@ const QuickQuoteEvent = props => { @@ -174,7 +173,6 @@ const QuickQuoteEvent = props => {
174 dProductQty: changeValue.dProductQty, 173 dProductQty: changeValue.dProductQty,
175 })); 174 }));
176 } 175 }
177 -  
178 setState(pre => ({ ...pre, masterData: masterDataNew, ...extraState })); 176 setState(pre => ({ ...pre, masterData: masterDataNew, ...extraState }));
179 } else if (name.includes("slave")) { 177 } else if (name.includes("slave")) {
180 const boxModel = name.replace("slaveUp", "").replace("slaveDown", ""); 178 const boxModel = name.replace("slaveUp", "").replace("slaveDown", "");
@@ -895,18 +893,90 @@ const QuickQuoteEvent = props => { @@ -895,18 +893,90 @@ const QuickQuoteEvent = props => {
895 masterConfig: masterConfig && masterConfig.length ? masterConfig[0] : {}, 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 const QuotationAllprogressDetail = baseProps => { 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 const propss = { 915 const propss = {
904 - // ...baseProps,  
905 - location,  
906 - ...JsonData, 916 + ...baseProps,
  917 + selectedNode: quotationData,
  918 + state: {},
907 }; 919 };
908 const props = QuickQuoteEvent(propss); 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 return ( 980 return (
911 <div className={styles.quotationDetailBox}> 981 <div className={styles.quotationDetailBox}>
912 <QuotationDetail {...props} /> 982 <QuotationDetail {...props} />
@@ -915,14 +985,11 @@ const QuotationAllprogressDetail = baseProps =&gt; { @@ -915,14 +985,11 @@ const QuotationAllprogressDetail = baseProps =&gt; {
915 }; 985 };
916 986
917 const QuotationDetail = props => { 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 const viewProps = { 993 const viewProps = {
927 ...props, 994 ...props,
928 viewConfigs: viewConfigs, 995 viewConfigs: viewConfigs,
@@ -931,23 +998,20 @@ const QuotationDetail = props =&gt; { @@ -931,23 +998,20 @@ const QuotationDetail = props =&gt; {
931 viewRow: { ...masterData, sProductClassifyId: selectedNode.sId }, 998 viewRow: { ...masterData, sProductClassifyId: selectedNode.sId },
932 tableName: "master", 999 tableName: "master",
933 }; 1000 };
934 -  
935 return ( 1001 return (
936 <div> 1002 <div>
937 - <div>{quotationData?.showName || "Loading..."}</div>  
938 - 1003 + <div>{selectedNode?.showName || "Loading..."}</div>
939 <div> 1004 <div>
940 <MasterComponent {...viewProps} /> 1005 <MasterComponent {...viewProps} />
941 </div> 1006 </div>
942 <div> 1007 <div>
943 - <QuotationTabs {...props} /> 1008 + <QuotationTabs {...props} quotationData={selectedNode} />
944 </div> 1009 </div>
945 </div> 1010 </div>
946 ); 1011 );
947 }; 1012 };
948 const MasterComponent = props => { 1013 const MasterComponent = props => {
949 const { viewConfigs, masterData } = props; 1014 const { viewConfigs, masterData } = props;
950 -  
951 const customer = viewConfigs?.find(x => x.sName === "sCustomerName") || {}; 1015 const customer = viewConfigs?.find(x => x.sName === "sCustomerName") || {};
952 const customerProps = { 1016 const customerProps = {
953 ...props, 1017 ...props,
@@ -995,11 +1059,11 @@ const MasterComponent = props =&gt; { @@ -995,11 +1059,11 @@ const MasterComponent = props =&gt; {
995 return ( 1059 return (
996 <div> 1060 <div>
997 <div className={styles.customer}> 1061 <div className={styles.customer}>
998 - <div>{customerProps.formData.showName}</div> 1062 + <div>{customerProps.formData?.showName}</div>
999 <SelectInput {...customerProps} /> 1063 <SelectInput {...customerProps} />
1000 </div> 1064 </div>
1001 <div className={styles.customer}> 1065 <div className={styles.customer}>
1002 - <div>{productProps.formData.showName}</div> 1066 + <div>{productProps.formData?.showName}</div>
1003 <SelectInput {...productProps} /> 1067 <SelectInput {...productProps} />
1004 </div> 1068 </div>
1005 <div className={styles.customer}> 1069 <div className={styles.customer}>
@@ -1007,28 +1071,36 @@ const MasterComponent = props =&gt; { @@ -1007,28 +1071,36 @@ const MasterComponent = props =&gt; {
1007 <div className={styles.sizeBox}> 1071 <div className={styles.sizeBox}>
1008 <div className={styles.sizeItem}> 1072 <div className={styles.sizeItem}>
1009 <div style={{ width: "70%" }}> 1073 <div style={{ width: "70%" }}>
1010 - <SelectInput {...dLengthProps} /> 1074 + <SelectInput {...dLengthProps} bCanInput={true} />
1011 </div> 1075 </div>
1012 <div style={{ width: "30%", textAlign: "center" }}>X</div> 1076 <div style={{ width: "30%", textAlign: "center" }}>X</div>
1013 </div> 1077 </div>
1014 <div className={styles.sizeItem}> 1078 <div className={styles.sizeItem}>
1015 <div style={{ width: "70%" }}> 1079 <div style={{ width: "70%" }}>
1016 - <SelectInput {...dWidthProps} /> 1080 + <SelectInput {...dWidthProps} bCanInput={true} />
1017 </div>{" "} 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 </div> 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 </div> 1094 </div>
1024 - <div style={{ width: "30%", textAlign: "center" }}>mm</div>  
1025 - </div> 1095 + ) : (
  1096 + ""
  1097 + )}
1026 </div> 1098 </div>
1027 </div> 1099 </div>
1028 <div className={styles.sizeBox}> 1100 <div className={styles.sizeBox}>
1029 <div className={styles.customer}> 1101 <div className={styles.customer}>
1030 <div>数量</div> 1102 <div>数量</div>
1031 - <SelectInput {...dProductQtyProps} /> 1103 + <SelectInput {...dProductQtyProps} bCanInput={true} />
1032 </div> 1104 </div>
1033 <div className={styles.customer}> 1105 <div className={styles.customer}>
1034 <div>单位</div> 1106 <div>单位</div>
@@ -1047,6 +1119,7 @@ const QuotationTabs = props =&gt; { @@ -1047,6 +1119,7 @@ const QuotationTabs = props =&gt; {
1047 const { selectedNode } = state; 1119 const { selectedNode } = state;
1048 const sAllPartsName = selectedNode?.sAllPartsName; 1120 const sAllPartsName = selectedNode?.sAllPartsName;
1049 const sAllPartsNameList = sAllPartsName?.split(","); 1121 const sAllPartsNameList = sAllPartsName?.split(",");
  1122 + // sAllPartsNameList.push('+')
1050 const [activeKey, setActiveKey] = useState(sAllPartsNameList && sAllPartsNameList.length ? sAllPartsNameList[0] : null); 1123 const [activeKey, setActiveKey] = useState(sAllPartsNameList && sAllPartsNameList.length ? sAllPartsNameList[0] : null);
1051 1124
1052 useEffect(() => { 1125 useEffect(() => {
@@ -1079,6 +1152,7 @@ const QuotationTabs = props =&gt; { @@ -1079,6 +1152,7 @@ const QuotationTabs = props =&gt; {
1079 // 内容 1152 // 内容
1080 const BoxComponent = props => { 1153 const BoxComponent = props => {
1081 const { state, boxModel } = props; 1154 const { state, boxModel } = props;
  1155 + console.log("🚀 ~ BoxComponent:", props, JsonData);
1082 const { activeKey, slaveConfig, masterData, selectedNode, boxConfig, downAbleConfigs = [], slaveData } = state || {}; 1156 const { activeKey, slaveConfig, masterData, selectedNode, boxConfig, downAbleConfigs = [], slaveData } = state || {};
1083 const { sModelsId } = props; 1157 const { sModelsId } = props;
1084 const [selectList, setSelectList] = useState([]); 1158 const [selectList, setSelectList] = useState([]);
@@ -1087,7 +1161,8 @@ const BoxComponent = props =&gt; { @@ -1087,7 +1161,8 @@ const BoxComponent = props =&gt; {
1087 const [boxPopup, setBoxPopup] = useState(false); 1161 const [boxPopup, setBoxPopup] = useState(false);
1088 const [boxsList, setBoxsList] = useState([]); 1162 const [boxsList, setBoxsList] = useState([]);
1089 const [selected, setSelected] = useState(null); 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 const [slaveRowData, setSlaveRowData] = useState(slaveRowDatas); 1166 const [slaveRowData, setSlaveRowData] = useState(slaveRowDatas);
1092 1167
1093 // 获取盒型信息 1168 // 获取盒型信息
@@ -1100,6 +1175,7 @@ const BoxComponent = props =&gt; { @@ -1100,6 +1175,7 @@ const BoxComponent = props =&gt; {
1100 pageNum: 1, 1175 pageNum: 1,
1101 pageSize: 20, 1176 pageSize: 20,
1102 }; 1177 };
  1178 +
1103 commonServices.postValueService(props.app.token, body, url).then(res => { 1179 commonServices.postValueService(props.app.token, body, url).then(res => {
1104 if (res.data.code === 1) { 1180 if (res.data.code === 1) {
1105 const list = res.data.dataset.rows.map(x => { 1181 const list = res.data.dataset.rows.map(x => {
@@ -1273,15 +1349,39 @@ const BoxComponent = props =&gt; { @@ -1273,15 +1349,39 @@ const BoxComponent = props =&gt; {
1273 1349
1274 // 后道参数 1350 // 后道参数
1275 const { sBackProcessData } = slaveRowData || []; 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 const downViewProps = { 1385 const downViewProps = {
1286 ...props, 1386 ...props,
1287 viewConfigs: downViewConfigs, 1387 viewConfigs: downViewConfigs,
@@ -1290,7 +1390,6 @@ const BoxComponent = props =&gt; { @@ -1290,7 +1390,6 @@ const BoxComponent = props =&gt; {
1290 viewRow: slaveRowData, 1390 viewRow: slaveRowData,
1291 tableName: `slaveDown${boxModel}`, 1391 tableName: `slaveDown${boxModel}`,
1292 }; 1392 };
1293 - console.log(downViewProps, "downViewProps");  
1294 1393
1295 const calcMethodData = commonUtils.convertStrToObj(slaveRowData?.sColumnNameConfigExclusion, []); 1394 const calcMethodData = commonUtils.convertStrToObj(slaveRowData?.sColumnNameConfigExclusion, []);
1296 const radioValue = calcMethodData[0]?.sCode; 1395 const radioValue = calcMethodData[0]?.sCode;
@@ -1416,6 +1515,75 @@ const BoxComponent = props =&gt; { @@ -1416,6 +1515,75 @@ const BoxComponent = props =&gt; {
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 return ( 1587 return (
1420 <div> 1588 <div>
1421 <Selector 1589 <Selector
@@ -1487,14 +1655,16 @@ const BoxComponent = props =&gt; { @@ -1487,14 +1655,16 @@ const BoxComponent = props =&gt; {
1487 <div> 1655 <div>
1488 <div>后道参数</div> 1656 <div>后道参数</div>
1489 {downViewProps.viewConfigs.map((x, i) => ( 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 </div> 1668 </div>
1499 ))} 1669 ))}
1500 </div> 1670 </div>
@@ -1542,8 +1712,10 @@ const BoxComponent = props =&gt; { @@ -1542,8 +1712,10 @@ const BoxComponent = props =&gt; {
1542 ...data, 1712 ...data,
1543 ...Object.assign({}, ...slaveNewData), 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 setBoxPopup(false); 1719 setBoxPopup(false);
1548 }} 1720 }}
1549 > 1721 >
@@ -1562,7 +1734,8 @@ const BoxComponent = props =&gt; { @@ -1562,7 +1734,8 @@ const BoxComponent = props =&gt; {
1562 // 材料组件 1734 // 材料组件
1563 const MaterialsComponent = props => { 1735 const MaterialsComponent = props => {
1564 const { state, boxModel } = props; 1736 const { state, boxModel } = props;
1565 - const { slaveRowData, slaveConfig, slaveData = [], selectedNode = {} } = state; 1737 + const { slaveConfig, slaveData = [], selectedNode = {} } = state;
  1738 + let { slaveRowData } = state;
1566 if (!slaveRowData) return; 1739 if (!slaveRowData) return;
1567 const { sParam = "" } = selectedNode; 1740 const { sParam = "" } = selectedNode;
1568 const sParamList = sParam.split(","); 1741 const sParamList = sParam.split(",");
@@ -1613,6 +1786,7 @@ const MaterialsComponent = props =&gt; { @@ -1613,6 +1786,7 @@ const MaterialsComponent = props =&gt; {
1613 const iIndex = slaveData.findIndex(item => item.sId === slaveRowData.sId); 1786 const iIndex = slaveData.findIndex(item => item.sId === slaveRowData.sId);
1614 if (iIndex !== -1) { 1787 if (iIndex !== -1) {
1615 slaveData[iIndex].materialsInfo = materialsInfo.map((item, i) => (i === index ? { ...item, ...changeValue } : item)); 1788 slaveData[iIndex].materialsInfo = materialsInfo.map((item, i) => (i === index ? { ...item, ...changeValue } : item));
  1789 + slaveRowData = slaveData[iIndex];
1616 } else { 1790 } else {
1617 const { selectedNode = {} } = state; 1791 const { selectedNode = {} } = state;
1618 const { showName: sTreeNodeName } = selectedNode; 1792 const { showName: sTreeNodeName } = selectedNode;
@@ -1624,8 +1798,7 @@ const MaterialsComponent = props =&gt; { @@ -1624,8 +1798,7 @@ const MaterialsComponent = props =&gt; {
1624 materialsInfo: materialsInfo.map((item, i) => (i === index ? { ...item, ...changeValue } : item)), 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 =&gt; { @@ -1664,7 +1837,8 @@ const MaterialsComponent = props =&gt; {
1664 materialsInfo: materialsInfoNew, 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 <AddOutline /> 1844 <AddOutline />
@@ -1689,7 +1863,8 @@ const MaterialsComponent = props =&gt; { @@ -1689,7 +1863,8 @@ const MaterialsComponent = props =&gt; {
1689 const materialsInfoNew = [...materialsInfo]; 1863 const materialsInfoNew = [...materialsInfo];
1690 materialsInfoNew.splice(rowIndex, 1); 1864 materialsInfoNew.splice(rowIndex, 1);
1691 slaveData[iIndex].materialsInfo = materialsInfoNew; 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 <MinusOutline /> 1870 <MinusOutline />
@@ -1720,18 +1895,20 @@ const ManyComponent = props =&gt; { @@ -1720,18 +1895,20 @@ const ManyComponent = props =&gt; {
1720 })} 1895 })}
1721 </div> 1896 </div>
1722 <div> 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 </div> 1912 </div>
1736 </div> 1913 </div>
1737 ); 1914 );