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 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 =&gt; {
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 =&gt; {
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 =&gt; {
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 =&gt; {
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 =&gt; {
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 =&gt; {
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 =&gt; {
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 =&gt; {
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 =&gt; {
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 =&gt; {
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 =&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 1587 return (
1420 1588 <div>
1421 1589 <Selector
... ... @@ -1487,14 +1655,16 @@ const BoxComponent = props =&gt; {
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 =&gt; {
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 =&gt; {
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 =&gt; {
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 =&gt; {
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 =&gt; {
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 =&gt; {
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 =&gt; {
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 );
... ...