Commit 08147093f959fbb9cea12e63f728e3cf1b214c4d

Authored by 陈鑫涛
1 parent 04a302b6

快速报价

src/components/Common/Typesetting/typesetting.js
... ... @@ -21,6 +21,7 @@ const Typesetting = props => {
21 21 textSize,
22 22 isMobile,
23 23 } = props;
  24 + const hasExecutedRef = useRef(true);
24 25 if (!slaveRowData) return;
25 26 let {
26 27 dSBLB = 0, // 上边留白
... ... @@ -39,8 +40,23 @@ const Typesetting = props => {
39 40 sSvgPath,
40 41 dL = 0,
41 42 dW = 0,
  43 + dD = 0,
42 44 } = slaveRowData;
43 45 const { masterData, selectedNode, slaveData } = state;
  46 + const { sBillNo } = props.masterData
  47 +
  48 + useEffect(() => {
  49 + if (sBillNo) {
  50 + if (hasExecutedRef.current) {
  51 + hasExecutedRef.current = false
  52 + } else {
  53 + // 第一次跳过
  54 + hasExecutedRef.current = true;
  55 + }
  56 + } else {
  57 + hasExecutedRef.current = false
  58 + }
  59 + }, [sBillNo]);
44 60 if (!masterData) return;
45 61 // 如果是卷筒类 那么上下左右留白等于左留白
46 62 if (selectedNode && selectedNode.sTypeKey === "juantong") {
... ... @@ -94,8 +110,8 @@ const Typesetting = props => {
94 110 // 确认是竖向排列还是横向排列
95 111 const L = slaveRowData.dL ? Number(dL) : Number(masterData?.dLength) || 0;
96 112 const W = slaveRowData.dW ? Number(dW) : masterData?.dWidth || 0;
97   - const H = masterData?.dWidth || 0;
98   - const D = masterData?.dHeight || 0;
  113 + const H = slaveRowData.dD ? Number(dD) : masterData?.dWidth || 0;
  114 + const D = slaveRowData.dD ? Number(dD) : masterData?.dHeight || 0;
99 115 // 动态计算公式值
100 116 const evaluateFormula = (formula, variables) => {
101 117 if (!formula) return 0; // 如果公式为空,返回0
... ... @@ -149,7 +165,7 @@ const Typesetting = props => {
149 165 slaveNewData.forEach(x => {
150 166 let key = 0;
151 167 if (x.sAssignFormula) {
152   - key = parseFloat(evaluateFormula(x.sAssignFormula, variables)).toFixed(2) || 0;
  168 + key = slaveRowData[x.sName];
153 169 } else {
154 170 key = slaveRowData[x.sName];
155 171 }
... ... @@ -307,7 +323,9 @@ const Typesetting = props => {
307 323 useEffect(() => {
308 324 if (Number(slaveRowData.sTypes) === 9) {
309 325 if (L > 0 && W > 0 && H > 0) {
310   - const { width, height } = calculateCupUnfoldDimensions(L, W, D);
  326 + const lengths = evaluateFormula(sLengthFormula, variabless)
  327 + const widths = evaluateFormula(sWidthFormula, variabless)
  328 + const { width, height } = calculateCupUnfoldDimensions(lengths, widths, D);
311 329 // 确保新值与旧值不同时才更新
312 330 if (width && height) {
313 331 setInnerWidth(Number(width.toFixed(2)));
... ... @@ -351,8 +369,8 @@ const Typesetting = props => {
351 369 (isVertical ? jInnerHeight * 2 + dSWidthOffset + dFWidthOffset : Math.max(jInnerHeight + dFWidthOffset, jInnerHeight + dSWidthOffset)) + dXBJJ; // 计算内层盒子高度 从上向下排列 取首盒加偏移量和次盒加偏移量最大的值 从左往右排列 盒子尺寸 * 2 加上首盒偏移量和次盒偏移量
352 370 // 计算内层盒子宽度 从上向下排列 取首盒加偏移量和次盒加偏移量最大的值 从左往右排列 盒子尺寸 * 2 加上首盒偏移量和次盒偏移量
353 371 const innerWidthCombined =
354   - (isVertical ? Math.max(jInnerWidth + dFLengthOffset, jInnerWidth + dSLengthOffset) : jInnerWidth * 2 + dSLengthOffset + dFLengthOffset) + dYBJJ;
355   -
  372 + (isVertical ? Math.max(jInnerWidth + dFLengthOffset, jInnerWidth + dSLengthOffset) : jInnerWidth * 2 + dSLengthOffset + dFLengthOffset);
  373 +
356 374 const style = {
357 375 width: `${outerWidth}px`,
358 376 height: `${outerHeight}px`,
... ... @@ -727,7 +745,7 @@ const Typesetting = props => {
727 745 }
728 746 const newDProductQty = masterData.dProductQty;
729 747 const dMaterialsKQty = slaveDataDetail.dMaterialsKQty || 1;
730   -
  748 + // if (Number(materialLength) < 100) return ''
731 749 if (
732 750 dPartsLength !== innerWidth ||
733 751 newMaterialLength !== materialLength ||
... ... @@ -853,6 +871,7 @@ const Typesetting = props =&gt; {
853 871 setIsModalOpen(false);
854 872 };
855 873  
  874 +
856 875 return (
857 876 <>
858 877 {isShow ? (
... ...
src/components/QuickQuote/index.jsx
... ... @@ -81,12 +81,10 @@ const QuickQuoteEvent = props =&gt; {
81 81 masterData.sCustomerName = sCustomerName;
82 82 masterData.sCustomerId = sCustomerId;
83 83 }
84   -
85 84 return { ...result, masterData, slaveData: slaveDataNew, manyData: manyDataNew };
86 85 };
87 86  
88 87 const sQuoConfig = commonUtils.convertStrToObj(props.masterData.sQuoConfig, {});
89   -
90 88 const [state, setState] = useState(addState.onGetFilterState(sQuoConfig, true));
91 89 const { formData = [], masterConfig } = state;
92 90 const { bLinkFieledClick } = props;
... ... @@ -199,7 +197,6 @@ const QuickQuoteEvent = props =&gt; {
199 197 sBackProcessData,
200 198 };
201 199 });
202   -
203 200 setState(pre => {
204 201 return { ...pre, slaveData: slaveDataNew };
205 202 });
... ... @@ -275,8 +272,8 @@ const QuickQuoteEvent = props =&gt; {
275 272 // }
276 273  
277 274 if (name === "master") {
278   - const { showName: sTreeNodeName } = selectedNode;
279   -
  275 +
  276 + const { showName: sTreeNodeName } = selectedNode || {};
280 277 const masterDataNew = { ...masterData, ...changeValue };
281 278 masterDataNew.handleType = masterDataNew.handleType || "update";
282 279 masterDataNew.sId = masterDataNew.sId || commonUtils.createSid();
... ... @@ -287,9 +284,9 @@ const QuickQuoteEvent = props =&gt; {
287 284 dProductQty: changeValue.dProductQty,
288 285 }));
289 286 }
290   -
291 287 if (sFieldName === "dLength" || sFieldName === "dWidth" || sFieldName === "dHeight") {
292   - if (props.currentBoxModel) {
  288 + if (sTreeNodeName) {
  289 + if (props.currentBoxModel) {
293 290 const boxModel = props.currentBoxModel.replace("slaveUp", "").replace("slaveDown", "");
294 291 const iIndex = slaveData.findIndex(item => item.sTreeNodeName === sTreeNodeName && item.sBoxModel === boxModel);
295 292 const sColumnNameConfig = commonUtils.convertStrToObj(slaveData[iIndex].sColumnNameConfig, []).map(item => ({
... ... @@ -300,18 +297,22 @@ const QuickQuoteEvent = props =&gt; {
300 297 ...slaveData[iIndex],
301 298 upAbleConfigsExtra: sColumnNameConfig,
302 299 };
  300 + } else {
  301 + if (!slaveData[0]) return;
  302 + const sColumnNameConfig = commonUtils.convertStrToObj(slaveData[0].sColumnNameConfig, []).map(item => ({
  303 + ...item,
  304 + iColValue: item.iColValue || 6,
  305 + }));
  306 + slaveData[0] = {
  307 + ...slaveData[0],
  308 + upAbleConfigsExtra: sColumnNameConfig,
  309 + };
  310 + }
303 311 } else {
304   - if (!slaveData[0]) return;
305   - const sColumnNameConfig = commonUtils.convertStrToObj(slaveData[0].sColumnNameConfig, []).map(item => ({
306   - ...item,
307   - iColValue: item.iColValue || 6,
308   - }));
309   - slaveData[0] = {
310   - ...slaveData[0],
311   - upAbleConfigsExtra: sColumnNameConfig,
312   - };
  312 + masterDataNew[sFieldName] = changeValue[sFieldName];
313 313 }
314 314 }
  315 +
315 316 setState(pre => ({ ...pre, masterData: masterDataNew, ...extraState }));
316 317 } else if (name.includes("slave")) {
317 318 const boxModel = name.replace("slaveUp", "").replace("slaveDown", "");
... ... @@ -566,6 +567,7 @@ const QuickQuoteEvent = props =&gt; {
566 567 }
567 568 setState(pre => ({ ...pre, masterData: masterDataNew, ...extraState }));
568 569 }
  570 +
569 571 };
570 572 addState.onDataChange = onDataChange;
571 573  
... ... @@ -1063,6 +1065,8 @@ const QuickQuoteEvent = props =&gt; {
1063 1065 processPrintDataRow.sParentId = masterData.sId;
1064 1066 processPrintDataRow.sControlId = partsDataRow.sId;
1065 1067 // processPrintDataRow.sSlaveId = ' ';
  1068 + processPrintDataRow.sColorSerialMemo = JSON.stringify([{ sId: partInfo.sColorId, sName: partInfo.sColor, dColor: partInfo.iColor }]);
  1069 +
1066 1070 processData.push(processPrintDataRow);
1067 1071 // 配套工序
1068 1072 if (bProcessAssort) {
... ... @@ -1126,6 +1130,9 @@ const QuickQuoteEvent = props =&gt; {
1126 1130 }
1127 1131  
1128 1132 // processAfterDataRow.sSlaveId = ' ';
  1133 + if (process.sColor) {
  1134 + processAfterDataRow.sColorSerialMemo = JSON.stringify([{ sId: process.sColorId, sName: process.sColor, dColor: process.iColor }]);
  1135 + }
1129 1136 processData.push(processAfterDataRow);
1130 1137 // 配套工序
1131 1138 if (bProcessAssort) {
... ... @@ -1338,6 +1345,7 @@ const QuickQuoteEvent = props =&gt; {
1338 1345 // 入口
1339 1346 const QuickQuote = baseProps => {
1340 1347 const props = QuickQuoteEvent(baseProps);
  1348 +
1341 1349 const [treeClassName, setTreeClassName] = useState("");
1342 1350  
1343 1351 // 监听页面滚动事件
... ... @@ -1376,6 +1384,7 @@ const QuickQuote = baseProps =&gt; {
1376 1384  
1377 1385 // 树形组件
1378 1386 const TreeComponent = props => {
  1387 +
1379 1388 const { treeData = [], selectedNode = {}, slaveConfig } = props.state;
1380 1389 if (!treeData.length) return "";
1381 1390  
... ... @@ -1500,7 +1509,7 @@ const TreeComponent = props =&gt; {
1500 1509 ...addState,
1501 1510 sPrintConfig: downAbleConfigs.find(item => item.sType === "1" && item.sName === "胶印"),
1502 1511 downAbleConfigs: downAbleConfigs
1503   - .filter(item => item.sType === "2")
  1512 + .filter(item => item.sType === "2" || item.sType === "0")
1504 1513 .map((item, index) => ({
1505 1514 ...item,
1506 1515 sName: `sParams${index}`,
... ... @@ -1527,7 +1536,6 @@ const TreeComponent = props =&gt; {
1527 1536 masterData: { ...props.masterData, sFormId: "101251240115016076506222050" },
1528 1537 });
1529 1538 }
1530   - console.log(selectedNode, 'selectedNode');
1531 1539  
1532 1540 getDropDownData(props);
1533 1541 }, [selectedNode.sId, commonUtils.isEmptyObject(slaveConfig)]);
... ... @@ -1577,15 +1585,17 @@ const ContentComponent = props =&gt; {
1577 1585 sAllPartsName = showName;
1578 1586 }
1579 1587 const hasAutoSetDefault = useRef(false);
  1588 +
1580 1589 useEffect(() => {
1581 1590 hasAutoSetDefault.current = false;
1582 1591 }, [selectedNode]);
1583 1592 // 2. 监听两个依赖:sAllPartsNameDefault 与 slaveData
  1593 + const {sBillNo} = props.masterData
1584 1594 useEffect(() => {
1585 1595 if (
1586 1596 !hasAutoSetDefault.current && // 尚未执行
1587 1597 selectedNode?.sAllPartsNameDefault?.length && // 有默认值
1588   - props.state.slaveData?.length // 子表数据已就位
  1598 + props.state.slaveData?.length && !sBillNo // 子表数据已就位
1589 1599 ) {
1590 1600 const boxModelList = sAllPartsName.split(',');
1591 1601 const { slaveData } = props.state;
... ... @@ -1636,7 +1646,6 @@ const ContentComponent = props =&gt; {
1636 1646 });
1637 1647 }
1638 1648 }, [selectedNode?.sAllPartsNameDefault, props.state.slaveData]);
1639   -
1640 1649 const boxModelList = sAllPartsName.split(",");
1641 1650 const [activeKey, setActiveKey] = useState(0);
1642 1651  
... ... @@ -1741,8 +1750,10 @@ const ContentComponent = props =&gt; {
1741 1750  
1742 1751 // 主表组件
1743 1752 const MasterComponent = props => {
  1753 +
1744 1754 const { masterConfig, masterData = {}, selectedNode = {} } = props.state;
1745 1755 const { app } = props;
  1756 +
1746 1757 if (!masterConfig) return "";
1747 1758  
1748 1759 const { userinfo } = app;
... ... @@ -1762,12 +1773,7 @@ const MasterComponent = props =&gt; {
1762 1773 }
1763 1774 });
1764 1775 const JosnAbleConfigs = JSON.parse(JSON.stringify(ableConfigs));
1765   - // 处理长宽样式
1766   - // selectedNode?.bBox && selectedNode.sTypeKey !== "kapai" && selectedNode?.bBox && selectedNode.sProductType !== "不干胶"
1767   - // ? ableConfigs
1768   - // : ableConfigs.filter(x => x.sName !== "dHeight");
1769 1776 const { sStripType = 0 } = selectedNode;
1770   - // {"0":"长宽高","1":"高宽"} ,0显示长宽高,1显示宽高
1771 1777 const viewConfigs = Number(sStripType) === 0 ? JosnAbleConfigs : JosnAbleConfigs.filter(x => x.sName !== "dHeight");
1772 1778 if (Number(sStripType) === 0) {
1773 1779 viewConfigs.forEach(item => {
... ... @@ -1797,6 +1803,7 @@ const MasterComponent = props =&gt; {
1797 1803 }
1798 1804 }
1799 1805 }
  1806 +
1800 1807 const viewProps = {
1801 1808 ...props,
1802 1809 viewConfigs: viewConfigs,
... ... @@ -1836,6 +1843,7 @@ const MasterComponent = props =&gt; {
1836 1843  
1837 1844 // 盒型组件
1838 1845 const BoxComponent = props => {
  1846 +
1839 1847 const { dividerProps, state, boxModel } = props;
1840 1848 const {
1841 1849 masterData = {},
... ... @@ -1851,6 +1859,7 @@ const BoxComponent = props =&gt; {
1851 1859  
1852 1860 const { bBox } = selectedNode;
1853 1861 const [boxTypeList, setBoxTypeList] = useState([]);
  1862 + const sQuoConfig = commonUtils.convertStrToObj(props.masterData.sQuoConfig, {});
1854 1863 // 卡牌类卷筒类默认使用矩形 当是核价保存过的需要在主表数据加载完后在赋值
1855 1864 let slaveRowData = slaveData.find(item => item.sTreeNodeName === selectedNode.showName && item.sBoxModel === boxModel) || {};
1856 1865 const { sBillNo } = slaveRowData;
... ... @@ -2080,7 +2089,6 @@ const BoxComponent = props =&gt; {
2080 2089 // const upViewProps11 = getUpViewPropsByITag(11);
2081 2090 // 印刷参数表单
2082 2091 let upViewProps12 = getUpViewPropsByITag(12);
2083   -
2084 2092 const filterConditions = {
2085 2093 juantong: x =>
2086 2094 x.sName === "iPage" ||
... ... @@ -2106,7 +2114,8 @@ const BoxComponent = props =&gt; {
2106 2114 }
2107 2115  
2108 2116 // 拼板信息表单
2109   - const upViewProps20 = getUpViewPropsByITag(20);
  2117 + let upViewProps20 = getUpViewPropsByITag(20);
  2118 +
2110 2119 // 如果是卷筒类需要单独处理
2111 2120  
2112 2121 const { sBackProcessData = [] } = slaveRowData;
... ... @@ -2277,7 +2286,7 @@ const BoxComponent = props =&gt; {
2277 2286 })),
2278 2287 tableConfig: { ...slaveConfig, gdsconfigformslave: finishedConfigs },
2279 2288 iColValueView: 24,
2280   - viewRow: masterData,
  2289 + viewRow: { ...masterData, sId : masterData.sId || "123" },
2281 2290 getViewRow: config => {
2282 2291 return productProcessInfo.find(item => item[config.sName]) || {};
2283 2292 },
... ... @@ -2325,7 +2334,18 @@ const BoxComponent = props =&gt; {
2325 2334 const [materialLength, setMaterialLength] = useState(0);
2326 2335 const [materialWidth, setMaterialWidth] = useState(0);
2327 2336  
2328   - // 使用 useCallback 确保回调函数的稳定性
  2337 + // 使用 防抖防止输出数据错误
  2338 + const debounceTimer = useRef(null);
  2339 +
  2340 + const debouncedHandleSaveState = useCallback(
  2341 + (...args) => {
  2342 + clearTimeout(debounceTimer.current);
  2343 + debounceTimer.current = setTimeout(() => {
  2344 + handleSaveState(...args);
  2345 + }, 500);
  2346 + },
  2347 + [handleSaveState]
  2348 + );
2329 2349 const handleSaveState = (
2330 2350 length,
2331 2351 width,
... ... @@ -2346,12 +2366,7 @@ const BoxComponent = props =&gt; {
2346 2366 ) => {
2347 2367 // 查找符合条件的索引
2348 2368 const { selectedNode } = props.state;
2349   -
2350 2369 const index = slaveData?.findIndex(x => x.sTreeNodeName === selectedNode.showName && x.sBoxModel === props.boxModel);
2351   - // 判断展长展宽是否可以放下原纸
2352   - const isDPartsLength =
2353   - slaveData[index]?.dPartsLength < slaveData[index]?.dMaxLength && slaveData[index]?.dPartsWidth < slaveData[index]?.dMaxWidth;
2354   - const dProductQtys = props.state.masterData.dProductQty || 0;
2355 2370 if (index !== undefined && index !== -1) {
2356 2371 // 计算开数
2357 2372 // 获取原始对象并创建一个新的对象进行更新
... ... @@ -2359,8 +2374,8 @@ const BoxComponent = props =&gt; {
2359 2374 ...slaveData[index],
2360 2375 materialLength: dWlcd,
2361 2376 materialWidth: dWlkd,
2362   - dMachineLength: length, // 上机长
2363   - dMachineWidth: width, // 上机宽
  2377 + dMachineLength: dWlcd, // 上机长
  2378 + dMachineWidth: dWlkd, // 上机宽
2364 2379 sMaterialsStyle: `${slaveData[index]?.dWlcd || 0}*${slaveData[index]?.dWlkd || 0}`, // 原纸尺寸
2365 2380 sMachineStyle: `${length || slaveData[index].materialLength}*${width || slaveData[index].materialWidth}`, // 开料尺寸为计算的排版尺寸
2366 2381 sMaterialRate: (((length * width) / (slaveData[index].dWlcd * slaveData[index].dWlkd)) * 100).toFixed(2),
... ... @@ -2405,10 +2420,12 @@ const BoxComponent = props =&gt; {
2405 2420 ...juantongConfig,
2406 2421 };
2407 2422 // 更新状态
2408   - props.setState(prevState => ({
2409   - ...prevState,
2410   - slaveData: slaveData.map((item, i) => (i === index ? newSlaveData : item)),
2411   - }));
  2423 + setTimeout(() => {
  2424 + props.setState(prevState => ({
  2425 + ...prevState,
  2426 + slaveData: slaveData.map((item, i) => (i === index ? newSlaveData : item)),
  2427 + }));
  2428 + }, 200);
2412 2429 }
2413 2430  
2414 2431 setMaterialLength(length);
... ... @@ -2459,12 +2476,13 @@ const BoxComponent = props =&gt; {
2459 2476 slaveRowData.sName === "卡牌"
2460 2477 ) {
2461 2478 const slaveNewData = slaveRowData.upAbleConfigsExtra || JSON.parse(slaveRowData.sColumnNameConfig);
  2479 + const slaveRowDatas = sBillNo ? sQuoConfig?.slaveData?.find(item => item.sTreeNodeName === selectedNode.showName && item.sBoxModel === boxModel) || {} : slaveRowData;
2462 2480 const tables = [
2463 2481 { name: "盒型类别", value: slaveRowData.sBoxType, type: null },
2464 2482 { name: "盒身", value: slaveRowData.sBoxBody, type: slaveRowData.sTypes },
2465 2483 { name: "盒长", value: slaveRowData.dL ? slaveRowData.dL : masterData.dLength ? Number(masterData.dLength) : 0, type: null },
2466 2484 { name: "盒宽", value: slaveRowData.dW ? slaveRowData.dW : masterData.dWidth ? Number(masterData.dWidth) : 0, type: null },
2467   - { name: "盒高", value: masterData.dHeight ? Number(masterData.dHeight) : 0, type: null },
  2485 + { name: "盒高", value: slaveRowData.dD ? slaveRowData.dD : masterData.dHeight ? Number(masterData.dHeight) : 0, type: null },
2468 2486 ];
2469 2487 const titleList1 = [
2470 2488 { name: "上方盒舌", value: "dSFHS" },
... ... @@ -2517,7 +2535,7 @@ const BoxComponent = props =&gt; {
2517 2535 slaveNewData.forEach(x => {
2518 2536 let key = 0;
2519 2537 if (x.sAssignFormula) {
2520   - key = evaluateFormula(x.sAssignFormula, variables);
  2538 + key = sBillNo ? slaveRowData[x.sName] : evaluateFormula(x.sAssignFormula, variables);
2521 2539 slaveRowData[x.sName] = key;
2522 2540 } else {
2523 2541 if (x.sTypes && x.sTypes.includes('09')) {
... ... @@ -2578,7 +2596,6 @@ const BoxComponent = props =&gt; {
2578 2596 dSvgBoxHeight: 200,
2579 2597 showNew: 1,
2580 2598 };
2581   -
2582 2599 // upViewProps.viewRow =
2583 2600  
2584 2601 const isShowImg = boxList.find(x => x.sName === "盒身")?.type !== "" || false;
... ... @@ -2771,7 +2788,7 @@ const BoxComponent = props =&gt; {
2771 2788 <div>
2772 2789 <div style={{ width: "600px", height: "300px" }}>
2773 2790 <div className={styles.boxComponent}>
2774   - <Typesetting {...boxProps} onSaveStates={handleSaveState} onSaveDPartsLength={onSaveDPartsLength} />
  2791 + <Typesetting {...boxProps} onSaveStates={debouncedHandleSaveState} onSaveDPartsLength={onSaveDPartsLength} />
2775 2792 </div>
2776 2793 <div className={styles.boxComponent1}>
2777 2794 <ShowImgM {...showImgMProps} />
... ... @@ -2914,7 +2931,6 @@ const PrintParamsComponent = props =&gt; {
2914 2931 }));
2915 2932 },
2916 2933 };
2917   -
2918 2934 result.push(
2919 2935 <div className={styles.materialsLine}>
2920 2936 <div className={styles.materialsViewTable} id={viewTableId}>
... ... @@ -3613,7 +3629,7 @@ const BackendParamsExtraComponent = props =&gt; {
3613 3629 ...props,
3614 3630 viewConfigs: viewConfigs.map(item => ({
3615 3631 ...item,
3616   - costomStyle: styles.sParamConfig,
  3632 + costomStyle: `${styles.sParamConfig} ${item.showName?.length > 4 ? 'sParamConfigLong' : ""}`,
3617 3633 })),
3618 3634 tableConfig: { ...slaveConfig, gdsconfigformslave: viewConfigs },
3619 3635 iColValueView: 24,
... ... @@ -3629,9 +3645,31 @@ const BackendParamsExtraComponent = props =&gt; {
3629 3645 );
3630 3646 },
3631 3647 tableName: `sBackendParams${sBoxModel}`,
3632   - getSqlDropDownData: (...args) => {
  3648 + getSqlDropDownData: async (...args) => {
3633 3649 const showConfig = args[2];
3634   - const { sParamDropDown = "", sName } = showConfig;
  3650 + const { sDropDownType, sParamDropDown = "", sName, sFieldName } = showConfig;
  3651 + if (sDropDownType === "sql" && sParamDropDown?.toLowerCase()?.includes("select")) {
  3652 + args[2] = {
  3653 + ...showConfig,
  3654 + showDropDown: sParamDropDown,
  3655 + };
  3656 + delete args[2].sId;
  3657 + const result = await props.getSqlDropDownData(...args);
  3658 + const { dropDownData } = result;
  3659 + const temp = {
  3660 + ...result,
  3661 + dropDownData: dropDownData.map(item => ({
  3662 + ...item,
  3663 + // sId: item.sValue,
  3664 + value: item.sValue,
  3665 + sParam: showConfig.sParam,
  3666 + [sName]: item.sValue,
  3667 + sParamKey: sName,
  3668 + sFieldName,
  3669 + })),
  3670 + };
  3671 + return temp;
  3672 + }
3635 3673 const dropDownData = sParamDropDown.split(",");
3636 3674 if (dropDownData?.length) {
3637 3675 return {
... ... @@ -3747,6 +3785,7 @@ const GetBestAlgorithm = props =&gt; {
3747 3785 sSvgPath,
3748 3786 dL = 0,
3749 3787 dW = 0,
  3788 + dD = 0,
3750 3789 } = slaveRowData;
3751 3790 if (selectedNode && selectedNode.sTypeKey === "juantong") {
3752 3791 dXBLB = dSBLB;
... ... @@ -3762,8 +3801,8 @@ const GetBestAlgorithm = props =&gt; {
3762 3801 let outerHeight = Number(slaveDataDetail?.dMaxWidth); // 默认取最大上机尺寸
3763 3802 const L = slaveRowData.dL ? Number(dL) : Number(masterData?.dLength) || 0;
3764 3803 const W = slaveRowData.dW ? Number(dW) : masterData?.dWidth || 0;
3765   - const H = masterData?.dWidth || 0;
3766   - const D = masterData?.dHeight || 0;
  3804 + const H = slaveRowData.dD ? Number(dD) : masterData?.dWidth || 0;
  3805 + const D = slaveRowData.dD ? Number(dD) : masterData?.dHeight || 0;
3767 3806 // 动态计算公式值
3768 3807 const evaluateFormula = (formula, variables) => {
3769 3808 if (!formula) return 0; // 如果公式为空,返回0
... ...
src/routes/mobile/IndexMobile.js
... ... @@ -96,15 +96,19 @@ class IndexMobile extends React.Component {
96 96 }
97 97 componentDidMount() {
98 98 // 监听系统返回键
  99 + const bExitAgain = commonFunc.showLocalMessage(this.props, 'bExitAgain', '再按一次退出应用');
99 100 const { plus } = window;
100 101 plus?.key?.addEventListener('backbutton', () => {
101 102 if (location.pathname === '/indexMobile') {
102 103 // 首页双击返回
103 104 if (this.backPressedOnce) {
104   - plus.runtime.quit();
  105 + // 把应用切换到后台运行
  106 + // plus.runtime.quit(); // 直接退出应用
  107 + const main = plus?.android?.runtimeMainActivity();
  108 + main?.moveTaskToBack(false); // false:仅隐藏,不销毁
105 109 } else {
106 110 this.backPressedOnce = true;
107   - plus.nativeUI.toast('再按一次退出应用');
  111 + plus.nativeUI.toast(bExitAgain);
108 112 setTimeout(() => { this.backPressedOnce = false; }, 2000);
109 113 }
110 114 } else {
... ...