Commit ab64028ac87f9332750544ed46ab8384670eb6fd
1 parent
25cac788
后道工序参数
Showing
3 changed files
with
221 additions
and
32 deletions
src/components/Common/CommonCostomTabBill.js
| ... | ... | @@ -6965,7 +6965,6 @@ const handleBtnParamPage = (props, comparedTableId, type) =>{ |
| 6965 | 6965 | filterData = slave0Data.filter(item => item.sControlId === controlRow.sId); |
| 6966 | 6966 | } |
| 6967 | 6967 | |
| 6968 | - console.log('tableDataRow', slave0Data, controlRow, filterData); | |
| 6969 | 6968 | let tableDataRow = {}; |
| 6970 | 6969 | if( commonUtils.isNotEmptyArr(filterData)) { |
| 6971 | 6970 | const iIndex = filterData.findIndex(item => item.sId === processRow.sId); | ... | ... |
src/mobile/components/SelectInput.jsx
| ... | ... | @@ -48,7 +48,7 @@ const SelectInput = props => { |
| 48 | 48 | pageSize: 20, |
| 49 | 49 | }; |
| 50 | 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 | 52 | const list = res.data.dataset.rows?.map((item, i) => ({ |
| 53 | 53 | label: item.sCustomerName || item.sName || item.sProcessName || item.sColorName || item.sMaterialsName, |
| 54 | 54 | value: item.sId || item.sSlaveId, |
| ... | ... | @@ -101,15 +101,39 @@ const SelectInput = props => { |
| 101 | 101 | let { sDropDownType, sVisColumnName } = itemDetail; |
| 102 | 102 | if (sVisColumnName && sVisColumnName === "sProcessName") { |
| 103 | 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 | 137 | // getSqlDropDownData(searchValue); |
| 114 | 138 | } else if ((sDropDownType = "const")) { |
| 115 | 139 | if (!itemDetail.showDropDown) return; |
| ... | ... | @@ -164,9 +188,13 @@ const SelectInput = props => { |
| 164 | 188 | setValue(val); |
| 165 | 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 | 195 | readOnly={bReadonly} |
| 168 | 196 | /> |
| 169 | - {!bCanInput ? ( | |
| 197 | + {itemDetail.sDropDownType === 'sql'? ( | |
| 170 | 198 | <div className={styles.icons} onClick={clickBtn}> |
| 171 | 199 | <DownOutline /> |
| 172 | 200 | </div> | ... | ... |
src/mobile/quotation/detailNew.jsx
| ... | ... | @@ -13,7 +13,7 @@ import Typesetting from "@/components/Common/Typesetting/typesetting"; |
| 13 | 13 | import DynamicSVG from "@/components/Common/BoxDesignCompontent/svg"; |
| 14 | 14 | import ShowImgM from "@/components/Common/BoxShowImgMaterial/indexNew"; |
| 15 | 15 | import CommonBase from "@/components/Common/CommonBase"; |
| 16 | -import { cloneDeep } from "lodash"; | |
| 16 | +import { cloneDeep, isEqual } from "lodash"; | |
| 17 | 17 | import moment from "moment"; |
| 18 | 18 | const QuickQuoteEvent = props => { |
| 19 | 19 | const { location, selectedNode, sModelsId } = props; |
| ... | ... | @@ -196,6 +196,28 @@ const QuickQuoteEvent = props => { |
| 196 | 196 | // if (dropDownDataSelected.sProcessName === "胶印") { |
| 197 | 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 | 221 | if (iIndex === -1) { |
| 200 | 222 | slaveData.push({ |
| 201 | 223 | sId: commonUtils.createSid(), |
| ... | ... | @@ -876,7 +898,7 @@ const QuickQuoteEvent = props => { |
| 876 | 898 | manyqtysData: state.manyData, |
| 877 | 899 | }, |
| 878 | 900 | })); |
| 879 | - | |
| 901 | + | |
| 880 | 902 | const result = await props.handleCalculation( |
| 881 | 903 | false, |
| 882 | 904 | { ...masterProps, ...newState, manyqtysConfig: state.manyConfig, manyqtysData: state.manyData }, |
| ... | ... | @@ -1307,6 +1329,7 @@ const BoxComponent = props => { |
| 1307 | 1329 | slaveData, |
| 1308 | 1330 | } = state || {}; |
| 1309 | 1331 | const slaveRowData = slaveData.find(item => item.sTreeNodeName === selectedNode.showName && item.sBoxModel === boxModel) || {}; |
| 1332 | + | |
| 1310 | 1333 | const { sModelsId } = props; |
| 1311 | 1334 | const [selectList, setSelectList] = useState([]); |
| 1312 | 1335 | const [boxTypeList, setBoxTypeList] = useState([]); |
| ... | ... | @@ -1314,6 +1337,7 @@ const BoxComponent = props => { |
| 1314 | 1337 | const [boxPopup, setBoxPopup] = useState(false); |
| 1315 | 1338 | const [boxsList, setBoxsList] = useState([]); |
| 1316 | 1339 | const [selected, setSelected] = useState(null); |
| 1340 | + | |
| 1317 | 1341 | // 获取盒型信息 |
| 1318 | 1342 | useEffect(() => { |
| 1319 | 1343 | const sId = "17428091410008594700322758474000"; |
| ... | ... | @@ -1512,33 +1536,39 @@ const BoxComponent = props => { |
| 1512 | 1536 | // 后道参数 |
| 1513 | 1537 | const { sBackProcessData } = slaveRowData || []; |
| 1514 | 1538 | const [downAbleConfigsNew, setDownAbleConfigsNew] = useState([]); |
| 1539 | + | |
| 1515 | 1540 | // const downAbleConfigsNew = downAbleConfigs.reduce((pre, cur) => { |
| 1516 | 1541 | // const childConfigs = downAbleExtraConfigs.filter(item => item.sParentName === cur.showName); |
| 1517 | 1542 | // pre.push(cur, ...childConfigs); |
| 1518 | 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 | 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 | 1561 | }, [downAbleConfigs, downAbleExtraConfigs]); |
| 1529 | - // 初始化状态,存储每个 Switch 的状态 | |
| 1530 | - const [switchStates, setSwitchStates] = useState(null); | |
| 1562 | + | |
| 1563 | + // 使用 useEffect 设置 downAbleConfigsNew 状态 | |
| 1531 | 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 | 1573 | // 处理 Switch 变化的函数 |
| 1544 | 1574 | const handleSwitchChange = (item, val) => { |
| ... | ... | @@ -1784,6 +1814,19 @@ const BoxComponent = props => { |
| 1784 | 1814 | value: item.sCode, |
| 1785 | 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 | 1830 | return ( |
| 1788 | 1831 | <div> |
| 1789 | 1832 | <Selector |
| ... | ... | @@ -1903,7 +1946,12 @@ const BoxComponent = props => { |
| 1903 | 1946 | {switchStates && switchStates[x.sName] ? ( |
| 1904 | 1947 | // 这里需要数组遍历 多个工序 |
| 1905 | 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 | 1955 | <div className={styles.processBtn}> |
| 1908 | 1956 | {!x.sParentName ? ( |
| 1909 | 1957 | <Button |
| ... | ... | @@ -1998,6 +2046,7 @@ const BoxComponent = props => { |
| 1998 | 2046 | )) |
| 1999 | 2047 | : ""} |
| 2000 | 2048 | </div> |
| 2049 | + <BackendParamsExtraComponent {...props} /> | |
| 2001 | 2050 | <div> |
| 2002 | 2051 | <div className={styles.projectBtn}> |
| 2003 | 2052 | <div className={styles.boxTitle} style={{ marginTop: "2rem" }}> |
| ... | ... | @@ -2368,4 +2417,117 @@ const ManyComponent = props => { |
| 2368 | 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 | 2533 | export default QuotationAllprogressDetail; | ... | ... |