Commit ab64028ac87f9332750544ed46ab8384670eb6fd

Authored by 陈鑫涛
1 parent 25cac788

后道工序参数

src/components/Common/CommonCostomTabBill.js
@@ -6965,7 +6965,6 @@ const handleBtnParamPage = (props, comparedTableId, type) =>{ @@ -6965,7 +6965,6 @@ const handleBtnParamPage = (props, comparedTableId, type) =>{
6965 filterData = slave0Data.filter(item => item.sControlId === controlRow.sId); 6965 filterData = slave0Data.filter(item => item.sControlId === controlRow.sId);
6966 } 6966 }
6967 6967
6968 - console.log('tableDataRow', slave0Data, controlRow, filterData);  
6969 let tableDataRow = {}; 6968 let tableDataRow = {};
6970 if( commonUtils.isNotEmptyArr(filterData)) { 6969 if( commonUtils.isNotEmptyArr(filterData)) {
6971 const iIndex = filterData.findIndex(item => item.sId === processRow.sId); 6970 const iIndex = filterData.findIndex(item => item.sId === processRow.sId);
src/mobile/components/SelectInput.jsx
@@ -48,7 +48,7 @@ const SelectInput = props => { @@ -48,7 +48,7 @@ const SelectInput = props => {
48 pageSize: 20, 48 pageSize: 20,
49 }; 49 };
50 commonServices.postValueService(props.app.token, body, url).then(res => { 50 commonServices.postValueService(props.app.token, body, url).then(res => {
51 - if (res.data.code === 1) { 51 + if (res.data.code === 1 && res.data.dataset) {
52 const list = res.data.dataset.rows?.map((item, i) => ({ 52 const list = res.data.dataset.rows?.map((item, i) => ({
53 label: item.sCustomerName || item.sName || item.sProcessName || item.sColorName || item.sMaterialsName, 53 label: item.sCustomerName || item.sName || item.sProcessName || item.sColorName || item.sMaterialsName,
54 value: item.sId || item.sSlaveId, 54 value: item.sId || item.sSlaveId,
@@ -101,15 +101,39 @@ const SelectInput = props => { @@ -101,15 +101,39 @@ const SelectInput = props => {
101 let { sDropDownType, sVisColumnName } = itemDetail; 101 let { sDropDownType, sVisColumnName } = itemDetail;
102 if (sVisColumnName && sVisColumnName === "sProcessName") { 102 if (sVisColumnName && sVisColumnName === "sProcessName") {
103 if (sDropDownType === "sql") { 103 if (sDropDownType === "sql") {
104 - const list = JSON.parse(itemDetail.sChineseDropDown).map(x => {  
105 - return {  
106 - label: x.sProcessName,  
107 - value: x.sId,  
108 - ...x,  
109 - };  
110 - });  
111 - setColumns(list);  
112 - setCopyColumns(list); 104 + if (itemDetail.sParamDropDown) {
  105 + const { sParamDropDown = "", sName0, sName } = itemDetail;
  106 + const dropDownData = sParamDropDown.split(",");
  107 + if (dropDownData?.length) {
  108 + const list = {
  109 + dropDownData: dropDownData.map(item => ({
  110 + sId: commonUtils.createSid(),
  111 + value: commonUtils.createSid(),
  112 + sParam: itemDetail.sParam,
  113 + [sName]: item,
  114 + sParamKey: sName0,
  115 + sParamKeyNew: sName,
  116 + label:item
  117 + })),
  118 + totalPageCount: 1,
  119 + currentPageNo: 1,
  120 + conditonValues: {},
  121 + };
  122 + setColumns(list.dropDownData);
  123 + setCopyColumns(list.dropDownData);
  124 + }
  125 + } else {
  126 + const list = JSON.parse(itemDetail.sChineseDropDown).map(x => {
  127 + return {
  128 + label: x.sProcessName,
  129 + value: x.sId,
  130 + ...x,
  131 + };
  132 + });
  133 + setColumns(list);
  134 + setCopyColumns(list);
  135 + }
  136 +
113 // getSqlDropDownData(searchValue); 137 // getSqlDropDownData(searchValue);
114 } else if ((sDropDownType = "const")) { 138 } else if ((sDropDownType = "const")) {
115 if (!itemDetail.showDropDown) return; 139 if (!itemDetail.showDropDown) return;
@@ -164,9 +188,13 @@ const SelectInput = props => { @@ -164,9 +188,13 @@ const SelectInput = props => {
164 setValue(val); 188 setValue(val);
165 props.onDataChange(tableName, itemDetail.sName, { [itemDetail.sName]: val }, null, coplyColumns); 189 props.onDataChange(tableName, itemDetail.sName, { [itemDetail.sName]: val }, null, coplyColumns);
166 }} 190 }}
  191 + onClick={() => {
  192 + if (!props.onCostomClick) return;
  193 + props.onCostomClick(itemDetail);
  194 + }}
167 readOnly={bReadonly} 195 readOnly={bReadonly}
168 /> 196 />
169 - {!bCanInput ? ( 197 + {itemDetail.sDropDownType === 'sql'? (
170 <div className={styles.icons} onClick={clickBtn}> 198 <div className={styles.icons} onClick={clickBtn}>
171 <DownOutline /> 199 <DownOutline />
172 </div> 200 </div>
src/mobile/quotation/detailNew.jsx
@@ -13,7 +13,7 @@ import Typesetting from &quot;@/components/Common/Typesetting/typesetting&quot;; @@ -13,7 +13,7 @@ import Typesetting from &quot;@/components/Common/Typesetting/typesetting&quot;;
13 import DynamicSVG from "@/components/Common/BoxDesignCompontent/svg"; 13 import DynamicSVG from "@/components/Common/BoxDesignCompontent/svg";
14 import ShowImgM from "@/components/Common/BoxShowImgMaterial/indexNew"; 14 import ShowImgM from "@/components/Common/BoxShowImgMaterial/indexNew";
15 import CommonBase from "@/components/Common/CommonBase"; 15 import CommonBase from "@/components/Common/CommonBase";
16 -import { cloneDeep } from "lodash"; 16 +import { cloneDeep, isEqual } from "lodash";
17 import moment from "moment"; 17 import moment from "moment";
18 const QuickQuoteEvent = props => { 18 const QuickQuoteEvent = props => {
19 const { location, selectedNode, sModelsId } = props; 19 const { location, selectedNode, sModelsId } = props;
@@ -196,6 +196,28 @@ const QuickQuoteEvent = props =&gt; { @@ -196,6 +196,28 @@ const QuickQuoteEvent = props =&gt; {
196 // if (dropDownDataSelected.sProcessName === "胶印") { 196 // if (dropDownDataSelected.sProcessName === "胶印") {
197 // extraRowData.sPrintProcessId = dropDownDataSelected.sId; 197 // extraRowData.sPrintProcessId = dropDownDataSelected.sId;
198 // } 198 // }
  199 + if (dropDownDataSelected !== undefined) {
  200 + dropDownDataSelected[sFieldName] = dropDownDataSelected.sProcessName;
  201 + // 后道参数额外配置
  202 + const { sParamConfig: sParamConfigStr } = dropDownDataSelected || {};
  203 + const sParamConfig = commonUtils.convertStrToObj(sParamConfigStr, []);
  204 + extraState.backendParamsConfig = sParamConfig;
  205 + extraState.backendConfig = { sParentFieldsName: sFieldName, sBoxModel: boxModel };
  206 + const sBackendParams = sParamConfig
  207 + .map((item, index) => {
  208 + const { sParamDefault, sParam } = item;
  209 + return !sParamDefault
  210 + ? ""
  211 + : {
  212 + sId: commonUtils.createSid(),
  213 + value: sParamDefault,
  214 + sParam: sParam,
  215 + [`sParams${index}`]: sParamDefault,
  216 + };
  217 + })
  218 + .filter(item => item !== "");
  219 + dropDownDataSelected.sBackendParams = sBackendParams;
  220 + }
199 if (iIndex === -1) { 221 if (iIndex === -1) {
200 slaveData.push({ 222 slaveData.push({
201 sId: commonUtils.createSid(), 223 sId: commonUtils.createSid(),
@@ -876,7 +898,7 @@ const QuickQuoteEvent = props =&gt; { @@ -876,7 +898,7 @@ const QuickQuoteEvent = props =&gt; {
876 manyqtysData: state.manyData, 898 manyqtysData: state.manyData,
877 }, 899 },
878 })); 900 }));
879 - 901 +
880 const result = await props.handleCalculation( 902 const result = await props.handleCalculation(
881 false, 903 false,
882 { ...masterProps, ...newState, manyqtysConfig: state.manyConfig, manyqtysData: state.manyData }, 904 { ...masterProps, ...newState, manyqtysConfig: state.manyConfig, manyqtysData: state.manyData },
@@ -1307,6 +1329,7 @@ const BoxComponent = props =&gt; { @@ -1307,6 +1329,7 @@ const BoxComponent = props =&gt; {
1307 slaveData, 1329 slaveData,
1308 } = state || {}; 1330 } = state || {};
1309 const slaveRowData = slaveData.find(item => item.sTreeNodeName === selectedNode.showName && item.sBoxModel === boxModel) || {}; 1331 const slaveRowData = slaveData.find(item => item.sTreeNodeName === selectedNode.showName && item.sBoxModel === boxModel) || {};
  1332 +
1310 const { sModelsId } = props; 1333 const { sModelsId } = props;
1311 const [selectList, setSelectList] = useState([]); 1334 const [selectList, setSelectList] = useState([]);
1312 const [boxTypeList, setBoxTypeList] = useState([]); 1335 const [boxTypeList, setBoxTypeList] = useState([]);
@@ -1314,6 +1337,7 @@ const BoxComponent = props =&gt; { @@ -1314,6 +1337,7 @@ const BoxComponent = props =&gt; {
1314 const [boxPopup, setBoxPopup] = useState(false); 1337 const [boxPopup, setBoxPopup] = useState(false);
1315 const [boxsList, setBoxsList] = useState([]); 1338 const [boxsList, setBoxsList] = useState([]);
1316 const [selected, setSelected] = useState(null); 1339 const [selected, setSelected] = useState(null);
  1340 +
1317 // 获取盒型信息 1341 // 获取盒型信息
1318 useEffect(() => { 1342 useEffect(() => {
1319 const sId = "17428091410008594700322758474000"; 1343 const sId = "17428091410008594700322758474000";
@@ -1512,33 +1536,39 @@ const BoxComponent = props =&gt; { @@ -1512,33 +1536,39 @@ const BoxComponent = props =&gt; {
1512 // 后道参数 1536 // 后道参数
1513 const { sBackProcessData } = slaveRowData || []; 1537 const { sBackProcessData } = slaveRowData || [];
1514 const [downAbleConfigsNew, setDownAbleConfigsNew] = useState([]); 1538 const [downAbleConfigsNew, setDownAbleConfigsNew] = useState([]);
  1539 +
1515 // const downAbleConfigsNew = downAbleConfigs.reduce((pre, cur) => { 1540 // const downAbleConfigsNew = downAbleConfigs.reduce((pre, cur) => {
1516 // const childConfigs = downAbleExtraConfigs.filter(item => item.sParentName === cur.showName); 1541 // const childConfigs = downAbleExtraConfigs.filter(item => item.sParentName === cur.showName);
1517 // pre.push(cur, ...childConfigs); 1542 // pre.push(cur, ...childConfigs);
1518 // return pre; 1543 // return pre;
1519 // }, []); 1544 // }, []);
1520 - useEffect(() => {  
1521 - // setDownAbleConfigsNew(downAbleConfigs);  
1522 - const data = downAbleConfigs.reduce((pre, cur) => { 1545 + // useEffect(() => {
  1546 + // // setDownAbleConfigsNew(downAbleConfigs);
  1547 + // const data = downAbleConfigs.reduce((pre, cur) => {
  1548 + // const childConfigs = downAbleExtraConfigs.filter(item => item.sParentName === cur.showName);
  1549 + // pre.push(cur, ...childConfigs);
  1550 + // return pre;
  1551 + // }, []);
  1552 + // setDownAbleConfigsNew(data);
  1553 + // }, [downAbleConfigs, downAbleExtraConfigs]);
  1554 +
  1555 + // 使用 useMemo 缓存 downAbleConfigsNew 的计算结果
  1556 + const computedDownAbleConfigsNew = useMemo(() => {
  1557 + return downAbleConfigs.reduce((pre, cur) => {
1523 const childConfigs = downAbleExtraConfigs.filter(item => item.sParentName === cur.showName); 1558 const childConfigs = downAbleExtraConfigs.filter(item => item.sParentName === cur.showName);
1524 - pre.push(cur, ...childConfigs);  
1525 - return pre; 1559 + return [...pre, cur, ...childConfigs];
1526 }, []); 1560 }, []);
1527 - setDownAbleConfigsNew(data);  
1528 }, [downAbleConfigs, downAbleExtraConfigs]); 1561 }, [downAbleConfigs, downAbleExtraConfigs]);
1529 - // 初始化状态,存储每个 Switch 的状态  
1530 - const [switchStates, setSwitchStates] = useState(null); 1562 +
  1563 + // 使用 useEffect 设置 downAbleConfigsNew 状态
1531 useEffect(() => { 1564 useEffect(() => {
1532 - if (!sBackProcessData) return;  
1533 - // const newSwitchStates = downAbleConfigsNew  
1534 - // .filter(item => item.sPartsName === boxModel || !item.sPartsName)  
1535 - // .reduce((acc, item, index) => {  
1536 - // acc[item.sName] = sBackProcessData && sBackProcessData[index]? sBackProcessData[index][item.sName] !== "" : false;  
1537 - // return acc;  
1538 - // }, {}); 1565 + if (!isEqual(downAbleConfigsNew, computedDownAbleConfigsNew)) {
  1566 + setDownAbleConfigsNew(computedDownAbleConfigsNew);
  1567 + }
  1568 + }, [computedDownAbleConfigsNew, downAbleConfigsNew]);
1539 1569
1540 - // setSwitchStates(newSwitchStates);  
1541 - }, [downAbleConfigsNew, boxModel]); // 依赖数组 1570 + // 初始化状态,存储每个 Switch 的状态
  1571 + const [switchStates, setSwitchStates] = useState(null);
1542 1572
1543 // 处理 Switch 变化的函数 1573 // 处理 Switch 变化的函数
1544 const handleSwitchChange = (item, val) => { 1574 const handleSwitchChange = (item, val) => {
@@ -1784,6 +1814,19 @@ const BoxComponent = props =&gt; { @@ -1784,6 +1814,19 @@ const BoxComponent = props =&gt; {
1784 value: item.sCode, 1814 value: item.sCode,
1785 label: item.showName, 1815 label: item.showName,
1786 })); 1816 }));
  1817 +
  1818 + const onCostomClick = showConfig => {
  1819 + // const className = target.getAttribute("class");
  1820 + // const nodeName = target.nodeName;
  1821 + // if (className?.includes("select") && nodeName === "DIV") return;
  1822 + if (!sBackProcessData) return;
  1823 + props.setState(pre => ({
  1824 + ...pre,
  1825 + backendParamsConfig: commonUtils.convertStrToObj(sBackProcessData.find(item => item[showConfig.sName0 || showConfig.sName])?.sParamConfig, []),
  1826 + backendConfig: { sParentFieldsName: showConfig.sName, sBoxModel: boxModel },
  1827 + }));
  1828 + };
  1829 +
1787 return ( 1830 return (
1788 <div> 1831 <div>
1789 <Selector 1832 <Selector
@@ -1903,7 +1946,12 @@ const BoxComponent = props =&gt; { @@ -1903,7 +1946,12 @@ const BoxComponent = props =&gt; {
1903 {switchStates && switchStates[x.sName] ? ( 1946 {switchStates && switchStates[x.sName] ? (
1904 // 这里需要数组遍历 多个工序 1947 // 这里需要数组遍历 多个工序
1905 <div className={styles.processFlex}> 1948 <div className={styles.processFlex}>
1906 - <SelectInput {...downViewProps} itemDetail={{ ...x, sVisColumnName: "sProcessName", sDropDownType: "sql" }} downIndex={i} /> 1949 + <SelectInput
  1950 + {...downViewProps}
  1951 + itemDetail={{ ...x, sVisColumnName: "sProcessName" }}
  1952 + downIndex={i}
  1953 + onCostomClick={onCostomClick}
  1954 + />
1907 <div className={styles.processBtn}> 1955 <div className={styles.processBtn}>
1908 {!x.sParentName ? ( 1956 {!x.sParentName ? (
1909 <Button 1957 <Button
@@ -1998,6 +2046,7 @@ const BoxComponent = props =&gt; { @@ -1998,6 +2046,7 @@ const BoxComponent = props =&gt; {
1998 )) 2046 ))
1999 : ""} 2047 : ""}
2000 </div> 2048 </div>
  2049 + <BackendParamsExtraComponent {...props} />
2001 <div> 2050 <div>
2002 <div className={styles.projectBtn}> 2051 <div className={styles.projectBtn}>
2003 <div className={styles.boxTitle} style={{ marginTop: "2rem" }}> 2052 <div className={styles.boxTitle} style={{ marginTop: "2rem" }}>
@@ -2368,4 +2417,117 @@ const ManyComponent = props =&gt; { @@ -2368,4 +2417,117 @@ const ManyComponent = props =&gt; {
2368 </div> 2417 </div>
2369 ); 2418 );
2370 }; 2419 };
  2420 +// 后道参数额外配置
  2421 +const BackendParamsExtraComponent = props => {
  2422 + const { state, slaveConfig, boxModel } = props;
  2423 + const { backendParamsConfig = [], backendConfig = {}, slaveData, selectedNode } = state;
  2424 + const { sParentFieldsName, sBoxModel } = backendConfig;
  2425 +
  2426 + // 使用 useMemo 缓存计算结果
  2427 + const slaveRowData = useMemo(() => {
  2428 + return slaveData.find(item => item.sTreeNodeName === selectedNode.showName && item.sBoxModel === sBoxModel) || {};
  2429 + }, [slaveData, selectedNode, sBoxModel]);
  2430 +
  2431 + const { sBackProcessData = [] } = slaveRowData;
  2432 +
  2433 + const viewConfigs = backendParamsConfig.map((item, index) => ({
  2434 + ...item,
  2435 + sName0: `sParam${index + 1}`,
  2436 + sName: item.sFieldName || `sParam${index + 1}`,
  2437 + showName: item.sParam,
  2438 + sDropDownType: item.sParamDropDown ? "sql" : "",
  2439 + iColValue: 4,
  2440 + sVisColumnName: "sProcessName",
  2441 + }));
  2442 +
  2443 + const viewProps = {
  2444 + ...props,
  2445 + viewConfigs: viewConfigs.map(item => ({
  2446 + ...item,
  2447 + costomStyle: styles.sParamConfig,
  2448 + })),
  2449 + tableConfig: { ...slaveConfig, gdsconfigformslave: viewConfigs },
  2450 + iColValueView: 24,
  2451 + getViewRow: config => {
  2452 + return sBackProcessData.find(item => item[sParentFieldsName])?.sBackendParams?.find(item => item.sParam === config.showName) || {};
  2453 + },
  2454 + tableName: `sBackendParams${boxModel}`,
  2455 + getSqlDropDownData: (...args) => {
  2456 + const showConfig = args[2];
  2457 + const { sParamDropDown = "", sName0, sName } = showConfig;
  2458 + const dropDownData = sParamDropDown.split(",");
  2459 + if (dropDownData?.length) {
  2460 + return {
  2461 + dropDownData: dropDownData.map(item => ({
  2462 + sId: commonUtils.createSid(),
  2463 + value: item,
  2464 + sParam: showConfig.sParam,
  2465 + [sName]: item,
  2466 + sParamKey: sName0,
  2467 + sParamKeyNew: sName,
  2468 + })),
  2469 + totalPageCount: 1,
  2470 + currentPageNo: 1,
  2471 + conditonValues: {},
  2472 + };
  2473 + }
  2474 +
  2475 + return props.getSqlDropDownData(...args);
  2476 + },
  2477 + onDataChange: (name, sFieldName, changeValue, sId, dropDownData, isWait) => {
  2478 + const iIndex = slaveData.findIndex(item => item.sId === slaveRowData.sId);
  2479 + const iIndex1 = slaveData[iIndex].sBackProcessData.findIndex(item => item[sParentFieldsName]);
  2480 + const showConfig = viewConfigs.find(item => item.sName === sFieldName);
  2481 + const dropDownDataSelected = dropDownData?.length
  2482 + ? dropDownData.find(item => item.sId === changeValue[sFieldName])
  2483 + : {
  2484 + sId: commonUtils.createSid(),
  2485 + value: changeValue[sFieldName],
  2486 + sParam: showConfig.sParam,
  2487 + [sFieldName]: changeValue[sFieldName],
  2488 + sParamKey: showConfig.sName0,
  2489 + sParamKeyNew: sFieldName,
  2490 + };
  2491 + const { sParam } = dropDownDataSelected;
  2492 + const { sBackendParams = [] } = slaveData[iIndex].sBackProcessData[iIndex1];
  2493 + const iIndex2 = sBackendParams.findIndex(item => item.sParam === sParam);
  2494 + if (iIndex2 !== -1) {
  2495 + sBackendParams[iIndex2] = dropDownDataSelected;
  2496 + } else {
  2497 + sBackendParams.push(dropDownDataSelected);
  2498 + }
  2499 + slaveData[iIndex].sBackProcessData[iIndex1].sBackendParams = sBackendParams;
  2500 + if (!showConfig.sName?.startsWith("sParams")) {
  2501 + slaveData[iIndex].sBackProcessData[iIndex1][showConfig.sName] = dropDownDataSelected[showConfig.sName];
  2502 + const { dManualLength, dManualWidth } = slaveData[iIndex].sBackProcessData[iIndex1];
  2503 + if (dManualLength !== undefined && dManualWidth !== undefined) {
  2504 + slaveData[iIndex].sBackProcessData[iIndex1].dManualValue = dManualLength * dManualWidth;
  2505 + }
  2506 + }
  2507 + props.setState(pre => ({ ...pre, slaveData }));
  2508 + },
  2509 + };
  2510 +
  2511 + const onCostomClick = () => {};
  2512 + return (
  2513 + <div>
  2514 + <div className={styles.boxTitle}>
  2515 + 后道参数额外配置
  2516 + <EditFill color="#BFBFBF" style={{ marginLeft: "1rem" }} />
  2517 + </div>
  2518 + <div>
  2519 + <Grid columns={3} gap={8}>
  2520 + {viewProps.viewConfigs.map(x => (
  2521 + <Grid.Item>
  2522 + <div className={styles.customer} key={x.id || x.showName}>
  2523 + <div>{x.showName}</div>
  2524 + <SelectInput {...viewProps} itemDetail={x} getSqlDropDownData={viewProps.getSqlDropDownData} onDataChange={props.onDataChange} />
  2525 + </div>
  2526 + </Grid.Item>
  2527 + ))}
  2528 + </Grid>
  2529 + </div>
  2530 + </div>
  2531 + );
  2532 +};
2371 export default QuotationAllprogressDetail; 2533 export default QuotationAllprogressDetail;