import React, { useEffect } from "react";
import { cloneDeep } from "lodash";
import { Modal, Space, Button, Tree } from "antd";
import * as commonUtils from "@/utils/utils";
import * as commonFunc from "@/components/Common/commonFunc";
import useCommonBase from "@/components/Common/CommonHooks/useCommonBase";
import CommonViewTable from "@/components/Common/CommonViewTable";
import styles from "./index.less";
const useModalEvent = props => {
const { formData = [], fixedConditonValues = {}, sValue: sValueStr } = props;
useEffect(
async () => {
if (!formData.length) return;
const config = formData[0];
const conditonValues = props.onGetSqlConditionValues(config);
const treeConfig =
config.gdsconfigformslave.find(item => item.bTree) || {};
const treeConditonValues = props.onGetSqlConditionValues(treeConfig);
const result = {
...((await props.onGetDataSet({
name: "slave",
configData: config,
condition: {
sSqlCondition: { ...conditonValues, ...fixedConditonValues }
},
isWait: true
})) || {}),
...((await props.onGetTreeDataSet({
configData: treeConfig,
condition: {
sSqlCondition: { ...treeConditonValues, ...fixedConditonValues }
},
isWait: true
})) || {}),
slaveConfig: config,
slaveColumn: commonFunc.getHeaderConfig(config)
};
const bTree = result.treeData?.[0]?.children.length;
result.bTree = bTree;
if (bTree) {
for (let i = 0; i < result.treeData[0].children.length; i++) {
result[`slave${i}Data`] = cloneDeep(result.slaveData);
}
result.treeSelectedKeys = [result.treeData[0].children[0].key];
}
const sValue = commonUtils.convertStrToObj(sValueStr, {});
const { detail = [] } = sValue;
if (bTree) {
result.treeData[0].children.forEach((treeNode, index) => {
const nodeIndex = detail.findIndex(
item => item.node.sId === treeNode.sId
);
if (nodeIndex !== -1) {
const detailData = detail[nodeIndex];
result[`slave${index}Data`].forEach(item => {
const iIndex = detailData.data.findIndex(i => i.sId === item.sId);
if (iIndex !== -1) {
item.dWasteQty = detailData.data[iIndex].dWasteQty;
}
});
}
});
} else {
result.slaveData?.forEach(item => {
const iIndex = detail.findIndex(i => i.sId === item.sId);
if (iIndex !== -1) {
item.dWasteQty = detail[iIndex].dWasteQty;
}
});
}
props.onSaveState(result);
},
[formData.length]
);
// 监听键盘事件
useEffect(() => {
const getCurrent = element => {
let current = element;
while (current !== null) {
const classes = current.classList;
for (let i = 0; i < classes.length; i++) {
if (classes[i].startsWith("ant-col-order-")) {
return current;
}
}
current = current.parentNode;
}
return null;
};
const keydownEvent = event => {
const focusedElement = document.activeElement;
if (
!["ArrowLeft", "ArrowUp", "ArrowRight", "ArrowDown"].includes(event.key)
)
return;
if (focusedElement.tagName.toLowerCase() !== "input") return;
if (!focusedElement.classList.contains("ant-input-number-input")) return;
const oColDom = getCurrent(focusedElement);
const classes = oColDom.classList;
let currentIndex = -1;
try {
for (let i = 0; i < classes.length; i++) {
if (classes[i].startsWith("ant-col-order-")) {
currentIndex = Number(classes[i].replace("ant-col-order-", "")) - 1;
}
}
} catch (error) {}
if (currentIndex === -1) return;
const oParent = oColDom.parentNode;
const totalSize = oParent.children.length;
let newIndex = currentIndex;
switch (event.key) {
case "ArrowLeft":
event.preventDefault();
newIndex = currentIndex - 1;
break;
case "ArrowUp":
event.preventDefault();
newIndex = currentIndex - 3;
break;
case "ArrowRight":
event.preventDefault();
newIndex = currentIndex + 1;
break;
case "ArrowDown":
event.preventDefault();
newIndex = currentIndex + 3;
break;
default:
break;
}
if (newIndex < 0 || newIndex >= totalSize) return;
try {
oParent
.querySelector(".ant-col-order-" + (newIndex + 1))
.querySelector(".ant-input-number-input")
.focus();
} catch (error) {}
};
document.addEventListener("keydown", keydownEvent);
return () => {
document.removeEventListener("keydown", keydownEvent);
};
}, []);
return {
...props
};
};
const SetCountModalComponent = baseProps => {
const props = useModalEvent(useCommonBase(baseProps));
const { bVisible, formData = [] } = props;
if (!formData.length) return "";
const title = props.slaveData?.[0]?.sType || "废品类别";
const handleOk = () => {
const { treeData = [], employeeData = {}, bTree } = props;
const { sEmployeeName = "数量" } = employeeData;
const addState = {};
addState.title = sEmployeeName;
if (bTree) {
// 左侧有树
addState.bTree = true;
const detail = [];
const allData = treeData[0].children.reduce((pre, treeNode, index) => {
const tableData = props[`slave${index}Data`] || [];
const tableDataFilter = tableData.filter(item => item.dWasteQty);
if (tableDataFilter.length) {
const temp = {
node: treeNode,
data: tableDataFilter
};
detail.push(temp);
}
pre = [...pre, ...tableData];
return pre;
}, []);
addState.detail = detail;
addState.count = allData.reduce((pre, item) => {
if (typeof item.dWasteQty === "number" && item.dWasteQty) {
pre += item.dWasteQty;
}
return pre;
}, 0);
} else {
// 左侧没有树
const { slaveData = [] } = props;
addState.count = slaveData.reduce((pre, item) => {
if (typeof item.dWasteQty === "number" && item.dWasteQty) {
pre += item.dWasteQty;
}
return pre;
}, 0);
addState.detail = slaveData.filter(item => item.dWasteQty);
}
props.onOk(addState);
};
return (
}
onCancel={props.onCancel}
>
);
};
const TreeComponent = props => {
const { treeData, treeSelectedKeys } = props;
if (commonUtils.isEmptyObject(treeData)) return "";
return (
{
if (node.children?.length) return;
props.onSaveState({
treeSelectedKeys: selectedKeys
});
}}
/>
);
};
const ContentComponent = props => {
const { slaveConfig, treeData = [], treeSelectedKeys = [] } = props;
let currentTreeNodeIndex = treeData[0]?.children?.findIndex(
item => item.key === treeSelectedKeys[0]
);
currentTreeNodeIndex =
currentTreeNodeIndex === undefined ? -1 : currentTreeNodeIndex;
const slaveNo = currentTreeNodeIndex === -1 ? "" : currentTreeNodeIndex;
const slaveData = props[`slave${slaveNo}Data`] || [];
const viewRow = {};
const idMap = {};
const viewConfigs = slaveData.map((item, index) => {
viewRow.sId = `viewRowSid${index + 1}`;
viewRow[`dName${index + 1}`] =
item.dWasteQty === 0 ? undefined : item.dWasteQty;
idMap[`dName${index + 1}`] = item.sId;
return {
sId: `sId${index + 1}`,
iOrder: index + 1,
sName: `dName${index + 1}`,
sControlName: `dName${index + 1}`,
showName: item.sName,
iColValue: 8,
keyboard: false
};
});
const viewProps = {
...props,
viewConfigs,
tableConfig: slaveConfig,
iColValueView: 24,
viewRow,
tableName: "slave",
onDataChange: (tableName, sName, returnValue) => {
const iIndex = slaveData.findIndex(item => item.sId === idMap[sName]);
if (iIndex !== -1) {
slaveData[iIndex].dWasteQty = returnValue[sName];
props.onSaveState({ [`slave${slaveNo}Data`]: slaveData });
}
}
};
return ;
};
export default SetCountModalComponent;