Commit 6da837081e2baa695c75ca2c3f0b50a1c0694639

Authored by 陈鑫涛
1 parent 1bc3c73f

使用eval计算

src/components/Common/Typesetting/typesetting.js
@@ -38,13 +38,13 @@ const Typesetting = props => { @@ -38,13 +38,13 @@ const Typesetting = props => {
38 sColumnNameConfig, 38 sColumnNameConfig,
39 bAdvancedSetting, // 高级设置 39 bAdvancedSetting, // 高级设置
40 } = slaveRowData; 40 } = slaveRowData;
41 - 41 +
42 const { masterData, selectedNode, slaveData } = state; 42 const { masterData, selectedNode, slaveData } = state;
43 // 如果是卷筒类 那么上下左右留白等于左留白 43 // 如果是卷筒类 那么上下左右留白等于左留白
44 - if (selectedNode && selectedNode.sTypeKey === 'juantong') {  
45 - dSBLB = dZBLB  
46 - dXBLB = dZBLB  
47 - dYBLB = dZBLB 44 + if (selectedNode && selectedNode.sTypeKey === "juantong") {
  45 + dSBLB = dZBLB;
  46 + dXBLB = dZBLB;
  47 + dYBLB = dZBLB;
48 } 48 }
49 // 生成盒子图片 49 // 生成盒子图片
50 const [boxKey, setBoxKey] = useState(new Date().getTime()); 50 const [boxKey, setBoxKey] = useState(new Date().getTime());
@@ -86,10 +86,10 @@ const Typesetting = props => { @@ -86,10 +86,10 @@ const Typesetting = props => {
86 // 如果需要自定义排版数 86 // 如果需要自定义排版数
87 87
88 // 确认是竖向排列还是横向排列 88 // 确认是竖向排列还是横向排列
89 - const L = masterData?.dLength;  
90 - const W = masterData?.dWidth;  
91 - const H = masterData?.dWidth;  
92 - const D = masterData?.dHeight; 89 + const L = Number(masterData?.dLength) ?? 0;
  90 + const W = Number(masterData?.dWidth) ?? 0;
  91 + const H = Number(masterData?.dWidth) ?? 0;
  92 + const D = Number(masterData?.dHeight) ?? 0;
93 93
94 // 动态计算公式值 94 // 动态计算公式值
95 const evaluateFormula = (formula, variables) => { 95 const evaluateFormula = (formula, variables) => {
@@ -109,6 +109,7 @@ const Typesetting = props => { @@ -109,6 +109,7 @@ const Typesetting = props => {
109 return 0; 109 return 0;
110 } 110 }
111 }; 111 };
  112 +
112 // 计算公式值 113 // 计算公式值
113 const variables = { 114 const variables = {
114 L, 115 L,
@@ -139,43 +140,52 @@ const Typesetting = props => { @@ -139,43 +140,52 @@ const Typesetting = props => {
139 { name: "右贴边位", value: "dYTBW" }, 140 { name: "右贴边位", value: "dYTBW" },
140 { name: "右(下)插位组件", value: "dYXCW" }, 141 { name: "右(下)插位组件", value: "dYXCW" },
141 ]; 142 ];
142 - slaveNewData.forEach(x => {  
143 - let key = 0;  
144 - if (x.sAssignFormula) {  
145 - key = evaluateFormula(x.sAssignFormula, variables);  
146 - } else {  
147 - key = slaveRowData[x.sName];  
148 - }  
149 - boxList.push({  
150 - value: key,  
151 - sName: titleList1.find(item => item.value === x.sName)?.name || "",  
152 - isEditable: true,  
153 - isSelect: false,  
154 - selectValue: null,  
155 - selectLabel: "",  
156 - selectImage: null,  
157 - type: x.sTypes || null,  
158 - show: true,  
159 - sCode: titleList1.find(item => item.value === x.sName)?.value || "",  
160 - showName: x.showName, // 参数名称 143 + const results = slaveNewData.reduce((acc, { sName, sDefault }) => ({ ...acc, [sName]: sDefault }), {});
  144 + let { dSFHS, dHDC, dXFHS, dZSCW, dZTBW, dZXCW, dYSCW, dYTBW, dYXCW } = results;
  145 + if (results) {
  146 + slaveNewData.forEach(x => {
  147 + let key = 0;
  148 + if (x.sAssignFormula) {
  149 + const i = titleList1.findIndex(item => item.value === x.sAssignFormula);
  150 + if (i !== -1) {
  151 + key = results[x.sAssignFormula];
  152 + } else {
  153 + key = eval(x.sAssignFormula);
  154 + }
  155 + } else {
  156 + key = slaveRowData[x.sName];
  157 + }
  158 + boxList.push({
  159 + value: key,
  160 + sName: titleList1.find(item => item.value === x.sName)?.name || "",
  161 + isEditable: true,
  162 + isSelect: false,
  163 + selectValue: null,
  164 + selectLabel: "",
  165 + selectImage: null,
  166 + type: x.sTypes || null,
  167 + show: true,
  168 + sCode: titleList1.find(item => item.value === x.sName)?.value || "",
  169 + showName: x.showName, // 参数名称
  170 + sAssignFormula: x.sAssignFormula,
  171 + });
161 }); 172 });
162 - });  
163 - tables.forEach(x => {  
164 - boxList.push({  
165 - value: x.value,  
166 - sName: x.name,  
167 - isEditable: true,  
168 - isSelect: false,  
169 - selectValue: null,  
170 - selectLabel: "",  
171 - selectImage: null,  
172 - type: x.type || null,  
173 - show: true,  
174 - showName: x.name, // 参数名称 173 + tables.forEach(x => {
  174 + boxList.push({
  175 + value: x.value,
  176 + sName: x.name,
  177 + isEditable: true,
  178 + isSelect: false,
  179 + selectValue: null,
  180 + selectLabel: "",
  181 + selectImage: null,
  182 + type: x.type || null,
  183 + show: true,
  184 + showName: x.name, // 参数名称
  185 + });
175 }); 186 });
176 - }); 187 + }
177 } 188 }
178 -  
179 const result = boxList.reduce((acc, { sCode, value }) => ({ ...acc, [sCode]: value }), {}); 189 const result = boxList.reduce((acc, { sCode, value }) => ({ ...acc, [sCode]: value }), {});
180 190
181 // 计算表达式结果 191 // 计算表达式结果
@@ -188,18 +198,29 @@ const Typesetting = props => { @@ -188,18 +198,29 @@ const Typesetting = props => {
188 ...props.slaveRowData, 198 ...props.slaveRowData,
189 ...result, 199 ...result,
190 }; 200 };
  201 + const keys = ["dSFHS", "dHDC", "dXFHS", "dZSCW", "dZTBW", "dZXCW", "dYSCW", "dYTBW", "dYXCW"];
  202 + for (let key of keys) {
  203 + let num = Number(variabless[key]); // 将变量值转换为数字
  204 + result[key] = Number.isNaN(num) ? 0 : num; // 如果是 NaN,则设置为 0,否则保留原值
  205 + }
  206 + let { dSFHS, dHDC, dXFHS, dZSCW, dZTBW, dZXCW, dYSCW, dYTBW, dYXCW } = result;
191 207
192 let DisableMateriallIcon = L ? sPackDetailPath : null; 208 let DisableMateriallIcon = L ? sPackDetailPath : null;
193 // 盒子展长展开公式计算 209 // 盒子展长展开公式计算
194 - const innerWidth = slaveRowData.sTypes === "6" ? evaluateFormula(sWidthFormula, variabless) : evaluateFormula(sLengthFormula, variabless);  
195 - const innerHeight = slaveRowData.sTypes === "6" ? evaluateFormula(sLengthFormula, variabless) : evaluateFormula(sWidthFormula, variabless); 210 +
  211 + let innerWidth = slaveRowData.sTypes === "6" ? eval(sWidthFormula) : eval(sLengthFormula);
  212 + let innerHeight = slaveRowData.sTypes === "6" ? eval(sLengthFormula) : eval(sWidthFormula);
  213 + if (isNaN(innerHeight) || isNaN(innerHeight)) {
  214 + innerWidth = 0;
  215 + innerHeight = 0;
  216 + }
196 const { sSettingMethod, sSGroupOffset, iFAngle, iSAngle, sSecondorizontalOffset, sSecondLongitudinalOffset } = radioValue ? radioValue : {}; 217 const { sSettingMethod, sSGroupOffset, iFAngle, iSAngle, sSecondorizontalOffset, sSecondLongitudinalOffset } = radioValue ? radioValue : {};
197 - const dFWidthOffset = evaluateFormula(radioValue?.sFWidthOffset, variabless); // 首盒纵向偏移  
198 - const dFLengthOffset = evaluateFormula(radioValue?.sFLengthOffset, variabless); // 首盒横向偏移  
199 - const dSWidthOffset = evaluateFormula(radioValue?.sSWidthOffset, variabless); // 次盒纵向偏移  
200 - const dSLengthOffset = evaluateFormula(radioValue?.sSLengthOffset, variabless); // 次盒横向偏移  
201 - const boxLengthOffset = evaluateFormula(sSecondorizontalOffset, variabless); // 第二列横向偏移  
202 - const boxWidthOffset = evaluateFormula(sSecondLongitudinalOffset, variabless); // 第二列纵向偏移 218 + const dFWidthOffset = eval(radioValue?.sFWidthOffset); // 首盒纵向偏移
  219 + const dFLengthOffset = eval(radioValue?.sFLengthOffset); // 首盒横向偏移
  220 + const dSWidthOffset = eval(radioValue?.sSWidthOffset); // 次盒纵向偏移
  221 + const dSLengthOffset = eval(radioValue?.sSLengthOffset); // 次盒横向偏移
  222 + const boxLengthOffset = eval(sSecondorizontalOffset); // 第二列横向偏移
  223 + const boxWidthOffset = eval(sSecondLongitudinalOffset); // 第二列纵向偏移
203 const isVertical = sSettingMethod === "从上到下"; // true 表示竖向排列,false 表示横向排列 sSettingMethod === '从上到下' 224 const isVertical = sSettingMethod === "从上到下"; // true 表示竖向排列,false 表示横向排列 sSettingMethod === '从上到下'
204 const reference = sSGroupOffset === "首盒"; // 第三列参考 225 const reference = sSGroupOffset === "首盒"; // 第三列参考
205 226
@@ -296,7 +317,7 @@ const Typesetting = props => { @@ -296,7 +317,7 @@ const Typesetting = props => {
296 dSvgBoxHeight, 317 dSvgBoxHeight,
297 showNew: 2, 318 showNew: 2,
298 }; 319 };
299 - const { dZTBW } = variabless; 320 + // const { dZTBW } = variabless;
300 const createDiv = (col, row, index, leftPosition, topPosition, offsetZ, icon) => ( 321 const createDiv = (col, row, index, leftPosition, topPosition, offsetZ, icon) => (
301 <div 322 <div
302 key={`${col}-${row}-${index}`} 323 key={`${col}-${row}-${index}`}
@@ -467,15 +488,14 @@ const Typesetting = props =&gt; { @@ -467,15 +488,14 @@ const Typesetting = props =&gt; {
467 }, [radioValue, slaveRowData, masterData, selectedNode, slaveData]); 488 }, [radioValue, slaveRowData, masterData, selectedNode, slaveData]);
468 // 生成里层 div 的数组 489 // 生成里层 div 的数组
469 const innerDivs = []; 490 const innerDivs = [];
470 - // 如果第一列 491 + // 如果第一列
471 // if (rows === 0) { 492 // if (rows === 0) {
472 // const maxWidth = Number(slaveDataDetail?.dMaxWidth) 493 // const maxWidth = Number(slaveDataDetail?.dMaxWidth)
473 // if (maxWidth > innerHeight) { 494 // if (maxWidth > innerHeight) {
474 // rows = 1 495 // rows = 1
475 // } 496 // }
476 // } 497 // }
477 - console.log(cols,rows,'rows');  
478 - 498 +
479 for (let col = 0; col < cols; col++) { 499 for (let col = 0; col < cols; col++) {
480 for (let row = 0; row < rows; row++) { 500 for (let row = 0; row < rows; row++) {
481 const leftPosition = col * innerWidthCombined; 501 const leftPosition = col * innerWidthCombined;
@@ -523,8 +543,7 @@ const Typesetting = props =&gt; { @@ -523,8 +543,7 @@ const Typesetting = props =&gt; {
523 innerDivs.push(createBoxOne(0, rows, 3, leftPosition + dZBLB, topPosition + dSBLB, iFAngle, DisableMateriallIcon)); 543 innerDivs.push(createBoxOne(0, rows, 3, leftPosition + dZBLB, topPosition + dSBLB, iFAngle, DisableMateriallIcon));
524 } 544 }
525 } 545 }
526 -  
527 - 546 +
528 // 判断展开长展开宽是否变化 547 // 判断展开长展开宽是否变化
529 if (dPartsLength !== innerWidth && !innerDivs.length) { 548 if (dPartsLength !== innerWidth && !innerDivs.length) {
530 setDPartsLength(innerWidth); 549 setDPartsLength(innerWidth);
@@ -542,7 +561,6 @@ const Typesetting = props =&gt; { @@ -542,7 +561,6 @@ const Typesetting = props =&gt; {
542 // 判断列是否是单独的 561 // 判断列是否是单独的
543 const newMaterialLength = propsDataLeft + (remaining ? jInnerWidth : innerWidthCombined) - dYBJJ; // 原纸长 562 const newMaterialLength = propsDataLeft + (remaining ? jInnerWidth : innerWidthCombined) - dYBJJ; // 原纸长
544 const newMaterialWidth = propsDataTop + propsDataHeight - dSBLB; 563 const newMaterialWidth = propsDataTop + propsDataHeight - dSBLB;
545 - console.log("🚀 ~ newMaterialWidth:",propsData,propsDataTop,propsDataHeight, newMaterialWidth,newMaterialLength)  
546 564
547 // 计算开数 565 // 计算开数
548 const dSinglePQty = isVertical 566 const dSinglePQty = isVertical
@@ -634,8 +652,16 @@ const Typesetting = props =&gt; { @@ -634,8 +652,16 @@ const Typesetting = props =&gt; {
634 Number(slaveDataDetail?.dMaxLength) >= Number(slaveRowData?.dMachineLength) && 652 Number(slaveDataDetail?.dMaxLength) >= Number(slaveRowData?.dMachineLength) &&
635 Number(slaveDataDetail?.dMaxWidth) >= Number(slaveRowData?.dMachineWidth); 653 Number(slaveDataDetail?.dMaxWidth) >= Number(slaveRowData?.dMachineWidth);
636 654
637 - const isShow =slaveRowData && slaveRowData.dMachineLength && slaveRowData.dMaxWidth && slaveRowData.dMaxLength && isMax && innerDivs.length;  
638 -console.log( slaveDataDetail?.dMaxLength,slaveDataDetail?.dMaxWidth,slaveRowData?.dMachineLength,slaveRowData?.dMachineWidth,isMax,isShow,'isMax'); 655 + const isShow = slaveRowData && slaveRowData.dMachineLength && slaveRowData.dMaxWidth && slaveRowData.dMaxLength && isMax && innerDivs.length;
  656 + console.log(
  657 + slaveDataDetail?.dMaxLength,
  658 + slaveDataDetail?.dMaxWidth,
  659 + slaveRowData?.dMachineLength,
  660 + slaveRowData?.dMachineWidth,
  661 + isMax,
  662 + isShow,
  663 + "isMax"
  664 + );
639 665
640 if (isCustomized && !isShow) { 666 if (isCustomized && !isShow) {
641 if (isMobile) return; 667 if (isMobile) return;
src/components/QuickQuote/index.jsx
@@ -1762,9 +1762,8 @@ const BoxComponent = props =&gt; { @@ -1762,9 +1762,8 @@ const BoxComponent = props =&gt; {
1762 dPortraitType: dPortraitType, 1762 dPortraitType: dPortraitType,
1763 }; 1763 };
1764 let juantongConfig = {}; 1764 let juantongConfig = {};
1765 - 1765 +
1766 if (selectedNode.sTypeKey === "juantong") { 1766 if (selectedNode.sTypeKey === "juantong") {
1767 - console.log(selectedNode.sTypeKey,'sTypeKey');  
1768 1767
1769 const { dYBJJ, dXBJJ, dZBLB } = slaveData[index]; 1768 const { dYBJJ, dXBJJ, dZBLB } = slaveData[index];
1770 juantongConfig = { 1769 juantongConfig = {
@@ -1881,10 +1880,17 @@ const BoxComponent = props =&gt; { @@ -1881,10 +1880,17 @@ const BoxComponent = props =&gt; {
1881 ...slaveRowData, 1880 ...slaveRowData,
1882 }; 1881 };
1883 1882
  1883 + const results = slaveNewData.reduce((acc, { sName, sDefault }) => ({ ...acc, [sName]: sDefault }), {});
  1884 + let { dSFHS, dHDC, dXFHS, dZSCW, dZTBW, dZXCW, dYSCW, dYTBW, dYXCW } = results;
1884 slaveNewData.forEach(x => { 1885 slaveNewData.forEach(x => {
1885 let key = 0; 1886 let key = 0;
1886 if (x.sAssignFormula) { 1887 if (x.sAssignFormula) {
1887 - key = evaluateFormula(x.sAssignFormula, variables); 1888 + const i = titleList1.findIndex(item => item.value === x.sAssignFormula);
  1889 + if (i !== -1) {
  1890 + key = results[x.sAssignFormula];
  1891 + } else {
  1892 + key = eval(x.sAssignFormula);
  1893 + }
1888 } else { 1894 } else {
1889 key = slaveRowData[x.sName]; 1895 key = slaveRowData[x.sName];
1890 } 1896 }