Commit ab64028ac87f9332750544ed46ab8384670eb6fd

Authored by 陈鑫涛
1 parent 25cac788

后道工序参数

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 &quot;@/components/Common/Typesetting/typesetting&quot;;
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 =&gt; {
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 =&gt; {
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 =&gt; {
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 =&gt; {
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 =&gt; {
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 =&gt; {
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 =&gt; {
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 =&gt; {
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 =&gt; {
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;
... ...