diff --git a/src/components/Common/AffixMenu.js b/src/components/Common/AffixMenu.js index 65e817c..f8e0cdd 100644 --- a/src/components/Common/AffixMenu.js +++ b/src/components/Common/AffixMenu.js @@ -11,7 +11,46 @@ import SvgIcon from '../SvgIcon'; const { Option } = Select; const { TabPane } = Tabs; +const type = 'DraggableBodyRow'; +// 自定义可拖拽的表格行 +const DraggableBodyRow = ({ index, moveRow, className, style, ...restProps }) => { + const ref = React.useRef(); + const [{ isOver, dropClassName }, drop] = useDrop({ + accept: type, + collect: (monitor) => { + const { index: dragIndex } = monitor.getItem() || {}; + if (dragIndex === index) { + return {}; + } + return { + isOver: monitor.isOver(), + dropClassName: dragIndex < index ? 'drop-over-downward' : 'drop-over-upward', + }; + }, + drop: (item) => { + moveRow(item.index, index); + }, + }); + + const [, drag] = useDrag({ + type, + item: { index }, + collect: (monitor) => ({ + isDragging: monitor.isDragging(), + }), + }); + + drop(drag(ref)); + return ( + + ); +}; class AffixMenuComponent extends Component { constructor(props) { super(props); @@ -367,6 +406,10 @@ class AffixMenuComponent extends Component { } else { dataSource = this.state[`modalContentData${count}`]; } + dataSource.forEach((item, index) => { + // 根据索引来更新 iOrder,使用 index + 1 因为排序通常从1开始,而不是0 + dataSource[index].iOrder = (index + 1) * 10; + }); const columns = [{ title: columniOrder, dataIndex: 'iOrder', @@ -456,7 +499,11 @@ class AffixMenuComponent extends Component { } } } - + const components = { + body: { + row: DraggableBodyRow, + }, + }; childTable = (
@@ -466,6 +513,7 @@ class AffixMenuComponent extends Component { { /* 拖拽表格树形节点 */ handleMoveRow = (dragIndex, hoverIndex, dragKey, hoverKey, props) => { const { slaveData: data } = this.props; - // const dragRow = data[dragIndex]; + const newData = [...data]; + const [removed] = newData.splice(dragIndex, 1); + newData.splice(hoverIndex, 0, removed); const dragObject = commonUtils.isNotEmptyArr(data.filter(ele => ele.sId === dragKey)) ? data.filter(ele => ele.sId === dragKey)[0] : {}; - const hoverObject = commonUtils.isNotEmptyArr(data.filter(ele => ele.sId === hoverKey)) ? data.filter(ele => ele.sId === hoverKey)[0] : {}; - // 同级菜单的移动 - let newData = data.filter(ele => ele.sId !== dragKey); - let insertIndex = 0; - if (commonUtils.isNotEmptyArr(newData)) { - newData.forEach((ele, index) => { - if (ele.sId === hoverKey) { - if (dragIndex > hoverIndex) { - // 上移:dragKey表示的元素 放到 hoverKey表示的元素之前 - insertIndex = index; - } else { - // 下移 dragKey表示的元素 放到 hoverKey表示的元素之后 - insertIndex = index + 1; - } - } - }); - newData.splice(insertIndex, 0, dragObject); - if (commonUtils.isNotEmptyObject(dragObject)) { - dragObject.handleType = dragObject.handleType ? dragObject.handleType : "update"; - dragObject.iOrder = hoverObject.iOrder + 1 - } - // newData.forEach((item,index) =>{ - // item.handleType = 'update' - // item.iOrder = - // }) - this.props.onSaveState({ slaveData: newData }); - } + newData.forEach((item, index) => { + // 根据索引来更新 iOrder,使用 index + 1 因为排序通常从1开始,而不是0 + newData[index].iOrder = (index + 1) * 10; + newData[index].handleType = dragObject.handleType ? dragObject.handleType : "update"; + }); + this.props.onSaveState({ slaveData: newData }); }; + handleMove0Row = (dragIndex, hoverIndex, dragKey, hoverKey, props) => { + const { slave0Data: data } = this.props; + const newData = [...data]; + const [removed] = newData.splice(dragIndex, 1); + newData.splice(hoverIndex, 0, removed); + const dragObject = commonUtils.isNotEmptyArr(data.filter(ele => ele.sId === dragKey)) ? data.filter(ele => ele.sId === dragKey)[0] : {}; + newData.forEach((item, index) => { + // 根据索引来更新 iOrder,使用 index + 1 因为排序通常从1开始,而不是0 + newData[index].iOrder = (index + 1) * 10000; + newData[index].handleType = dragObject.handleType ? dragObject.handleType : "update"; + }); + this.props.onSaveState({ slave0Data: newData }); + // } + }; + render() { const { masterData, sModelsType, app } = this.props; const imgSrc = commonBusiness.handleAddIcon(masterData, sModelsType, app); @@ -6610,6 +6606,7 @@ export default ChildComponent => { onGetParamsValue={this.handleGetParamsValue} onSelectCommonPopup={this.handleSelectCommonPopup} onMoveRow={this.handleMoveRow} + onMove0Row={this.handleMove0Row} /> ); } diff --git a/src/components/Common/CommonTable/index.js b/src/components/Common/CommonTable/index.js index b8b6bab..96c4eaf 100644 --- a/src/components/Common/CommonTable/index.js +++ b/src/components/Common/CommonTable/index.js @@ -7396,7 +7396,16 @@ class CommonTableRc extends React.Component { const hasColorInfo = this.props?.masterConfig?.sTableColorTs; const BtnUpload = commonFunc.showLocalMessage(this.props, "BtnUpload", "上传"); - + const { sModelsId } = this.props + const columniOrder = commonFunc.showMessage(this.props.app.commonConst, 'columniOrder');/* 排序 */ + if (sModelsId === '16411004790004762980820285096000') { + tableProps.onRow = (record, index) => ({ + index, + moveRow: (dragIndex, hoverIndex, dragKey, hoverKey) => { + this.moveRow(dragIndex, hoverIndex, dragKey, hoverKey); + }, + }); + } return (