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++) {
// 外发废
if(result.masterConditionData.sProcessParentId=='5'){
let sclassifyId = result.treeData[0].children[i].sclassifyId;
const nweSlaveData = result.slaveData.filter(e=>e.sWfProcessParentId && e.sWfProcessParentId == sclassifyId);
// nweSlaveData.forEach(e=>e.enabledNew = true)
result[`slave${i}Data`] = cloneDeep([...nweSlaveData, ...result.slaveData.filter(e=>!e.sWfProcessParentId)]);
}else{
result[`slave${i}Data`] = cloneDeep(result.slaveData);
}
}
result.treeSelectedKeys = [result.treeData[0].children[0].key];
}
const sValue = commonUtils.convertStrToObj(sValueStr, {});
const { detail = [], sMemo = "" } = 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;
}
});
if (result[`slave${index}Data`]?.length) {
result[`slave${index}Data`].push({
sId: "viewRowSid999",
sMemo: detailData.sMemo || ""
});
}
}
});
} else {
result.slaveData?.forEach(item => {
const iIndex = detail.findIndex(i => i.sId === item.sId);
if (iIndex !== -1) {
item.dWasteQty = detail[iIndex].dWasteQty;
}
});
if (result.slaveData?.length) {
result.slaveData.push({ sId: "viewRowSid999", sMemo });
}
}
console.log(result)
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 isCursorOnFirstLine = textarea => {
const cursorPosition = textarea.selectionStart;
const textBeforeCursor = textarea.value.substring(0, cursorPosition);
return textBeforeCursor.indexOf("\n") === -1;
};
const isCursorAtStart = textarea => {
return textarea.selectionStart === 0;
};
const keydownEvent = event => {
const focusedElement = document.activeElement;
if (
!["ArrowLeft", "ArrowUp", "ArrowRight", "ArrowDown"].includes(event.key)
)
return;
if (focusedElement.tagName.toLowerCase() === "textarea") {
if (
(event.key === "ArrowUp" && isCursorOnFirstLine(focusedElement)) ||
(event.key === "ArrowLeft" && isCursorAtStart(focusedElement))
) {
try {
const oColDom = getCurrent(focusedElement);
const oMemoDom = oColDom.parentNode.parentNode.parentNode;
const oNewDom = oMemoDom.previousElementSibling.firstChild.lastChild.querySelector(
"input"
);
oNewDom.focus();
} catch (error) {}
}
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) return;
if (newIndex >= totalSize) {
try {
document.querySelector("#sMemoviewRowSid999").focus();
} catch (error) {}
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,
sMemo: tableData
.filter(item => item.sMemo)
.map(item => item.sMemo)[0]
};
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);
const sMemoValue = slaveData
.filter(item => item.sMemo)
.map(item => item.sMemo)[0];
addState.sMemo = sMemoValue || "";
}
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
.filter(item => item.sId !== "viewRowSid999")
.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];
// if(viewProps.masterConditionData.sProcessParentId==5){
// debugger
// let arrNum = slaveData.filter(e=>e.sWfProcessParentId).map(e=>e.dWasteQty);
// if(arrNum.length!==0){
// slaveData[ slaveData.findIndex(e => !e.sWfProcessParentId) ].dWasteQty = arrNum.reduce((a, b) => a + b, 0)
// }
// }
props.onSaveState({ [`slave${slaveNo}Data`]: slaveData });
}
}
};
console.log(viewProps)
return ;
};
const SMemoComponent = 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`] || [];
if (!slaveData.length) return "";
const viewRow = slaveData.find(item => item.sId === "viewRowSid999") || {
sId: "viewRowSid999",
sMemo: ""
};
const viewConfigs = [
{
sId: "sId999",
iOrder: 999,
sName: "sMemo",
sControlName: "sMemo",
showName: "备注",
iColValue: 24,
keyboard: false,
iRowValue: 2
}
];
const viewProps = {
...props,
viewConfigs,
tableConfig: slaveConfig,
iColValueView: 24,
viewRow,
tableName: "slave",
onDataChange: (tableName, sName, returnValue) => {
const iIndex = slaveData.findIndex(item => item.sId === "viewRowSid999");
const sMemo = returnValue[sName]
? returnValue[sName].replace(/['"\\]/g, " ")
: "";
if (iIndex !== -1) {
slaveData[iIndex].sMemo = sMemo;
props.onSaveState({ [`slave${slaveNo}Data`]: slaveData });
} else {
slaveData.push({ sId: "viewRowSid999", sMemo });
}
}
};
return (
);
};
export default SetCountModalComponent;