|
@@ -6,7 +6,11 @@ import { Dnd } from "@antv/x6-plugin-dnd";
|
|
import { selectTopic, traverseNode } from "./mindmapHander";
|
|
import { selectTopic, traverseNode } from "./mindmapHander";
|
|
import { uuid } from "@repo/utils";
|
|
import { uuid } from "@repo/utils";
|
|
import { getTheme } from "./render/theme";
|
|
import { getTheme } from "./render/theme";
|
|
-import { EditMindMapElement, AddMindMapElement, BatchDeleteMindMapElement } from "@/api/systemDesigner";
|
|
|
|
|
|
+import {
|
|
|
|
+ EditMindMapElement,
|
|
|
|
+ AddMindMapElement,
|
|
|
|
+ BatchDeleteMindMapElement,
|
|
|
|
+} from "@/api/systemDesigner";
|
|
import { cloneDeep, debounce, isEqual } from "lodash-es";
|
|
import { cloneDeep, debounce, isEqual } from "lodash-es";
|
|
import { useMindMapStore } from "./models/mindMapModel";
|
|
import { useMindMapStore } from "./models/mindMapModel";
|
|
|
|
|
|
@@ -27,9 +31,9 @@ let currentShadowNode: Node | undefined;
|
|
export const bindMindMapEvents = (
|
|
export const bindMindMapEvents = (
|
|
graph: Graph,
|
|
graph: Graph,
|
|
setMindProjectInfo?: (data: {
|
|
setMindProjectInfo?: (data: {
|
|
- info: MindMapProjectInfo,
|
|
|
|
- init?: boolean,
|
|
|
|
- ignoreRender?: boolean
|
|
|
|
|
|
+ info: MindMapProjectInfo;
|
|
|
|
+ init?: boolean;
|
|
|
|
+ ignoreRender?: boolean;
|
|
}) => void,
|
|
}) => void,
|
|
setSelectedCell?: (cell: Cell[]) => void,
|
|
setSelectedCell?: (cell: Cell[]) => void,
|
|
dndRef?: React.MutableRefObject<Dnd | undefined>
|
|
dndRef?: React.MutableRefObject<Dnd | undefined>
|
|
@@ -153,12 +157,13 @@ export const bindMindMapEvents = (
|
|
// 自由节点拖拽
|
|
// 自由节点拖拽
|
|
if (!args.node.data?.parentId) {
|
|
if (!args.node.data?.parentId) {
|
|
setShadowMode(true, args.node, graph);
|
|
setShadowMode(true, args.node, graph);
|
|
|
|
+ args.node.toFront();
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
|
|
graph.on("node:moving", (args) => {
|
|
graph.on("node:moving", (args) => {
|
|
if (!args.node.data?.parentId && setMindProjectInfo) {
|
|
if (!args.node.data?.parentId && setMindProjectInfo) {
|
|
- setShadowMode(false, args.node, graph);
|
|
|
|
|
|
+ setShadowMode(true, args.node, graph);
|
|
topicDragHander(graph, { x: args.x, y: args.y }, args.node);
|
|
topicDragHander(graph, { x: args.x, y: args.y }, args.node);
|
|
}
|
|
}
|
|
});
|
|
});
|
|
@@ -197,7 +202,10 @@ export const bindMindMapEvents = (
|
|
*/
|
|
*/
|
|
graph.on("node:change:data", (args) => {
|
|
graph.on("node:change:data", (args) => {
|
|
const { current, previous } = args;
|
|
const { current, previous } = args;
|
|
- console.log("node:change:data", current, previous);
|
|
|
|
|
|
+ if (current?.ingoreDrag && current?.ignoreDrag) {
|
|
|
|
+ // 忽略拖拽
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
// 收折子项 setMindProjectInfo更新会重新渲染
|
|
// 收折子项 setMindProjectInfo更新会重新渲染
|
|
if (current.collapsed !== previous.collapsed) {
|
|
if (current.collapsed !== previous.collapsed) {
|
|
setMindProjectInfo &&
|
|
setMindProjectInfo &&
|
|
@@ -210,11 +218,7 @@ export const bindMindMapEvents = (
|
|
}
|
|
}
|
|
if (current?.links && current.links.length !== previous?.links?.length) {
|
|
if (current?.links && current.links.length !== previous?.links?.length) {
|
|
setMindProjectInfo &&
|
|
setMindProjectInfo &&
|
|
- updateTopic(
|
|
|
|
- args.cell.id,
|
|
|
|
- { links: current.links },
|
|
|
|
- setMindProjectInfo
|
|
|
|
- );
|
|
|
|
|
|
+ updateTopic(args.cell.id, { links: current.links }, setMindProjectInfo);
|
|
}
|
|
}
|
|
// 宽度和高度有变化
|
|
// 宽度和高度有变化
|
|
if (
|
|
if (
|
|
@@ -258,22 +262,22 @@ export const bindMindMapEvents = (
|
|
// 改线段
|
|
// 改线段
|
|
if (current?.edge && !isEqual(current.edge, previous?.edge)) {
|
|
if (current?.edge && !isEqual(current.edge, previous?.edge)) {
|
|
setMindProjectInfo &&
|
|
setMindProjectInfo &&
|
|
- updateTopic(
|
|
|
|
- args.cell.id,
|
|
|
|
- { edge: current.edge },
|
|
|
|
- setMindProjectInfo
|
|
|
|
- );
|
|
|
|
|
|
+ updateTopic(args.cell.id, { edge: current.edge }, setMindProjectInfo);
|
|
}
|
|
}
|
|
|
|
|
|
// 本地缓存更新不会重新渲染
|
|
// 本地缓存更新不会重新渲染
|
|
if (args.cell.id.includes("-border")) {
|
|
if (args.cell.id.includes("-border")) {
|
|
- updateTopic(
|
|
|
|
- args.current.origin,
|
|
|
|
- { border: current },
|
|
|
|
- (info) => {
|
|
|
|
- setMindProjectInfo?.({...info, ignoreRender: true});
|
|
|
|
- }
|
|
|
|
- );
|
|
|
|
|
|
+ updateTopic(args.current.origin, { border: current }, (info) => {
|
|
|
|
+ setMindProjectInfo?.({ ...info, ignoreRender: true });
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 内容修改
|
|
|
|
+ if (current?.label !== previous?.label) {
|
|
|
|
+ setMindProjectInfo &&
|
|
|
|
+ updateTopic(args.cell.id, { label: current.label }, (info) =>
|
|
|
|
+ setMindProjectInfo?.({ ...info, ignoreRender: true })
|
|
|
|
+ );
|
|
}
|
|
}
|
|
|
|
|
|
// TODO 其余未处理的
|
|
// TODO 其余未处理的
|
|
@@ -287,27 +291,18 @@ export const bindMindMapEvents = (
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
|
|
|
|
+ // 修改自由节点位置
|
|
graph.on(
|
|
graph.on(
|
|
- "node:change:position",
|
|
|
|
|
|
+ "node:moved",
|
|
debounce((args) => {
|
|
debounce((args) => {
|
|
- const { current } = args;
|
|
|
|
|
|
+ const { x, y } = args.node.position();
|
|
if (
|
|
if (
|
|
args.cell.isNode() &&
|
|
args.cell.isNode() &&
|
|
!args.cell.data?.parentId &&
|
|
!args.cell.data?.parentId &&
|
|
args.cell.data.type !== TopicType.main
|
|
args.cell.data.type !== TopicType.main
|
|
) {
|
|
) {
|
|
- updateTopic(
|
|
|
|
- args.cell.id,
|
|
|
|
- { ...args.cell.data, x: current?.x, y: current?.y },
|
|
|
|
- (info) => {
|
|
|
|
- setMindProjectInfo && setMindProjectInfo({info: info});
|
|
|
|
- }
|
|
|
|
- );
|
|
|
|
- EditMindMapElement({
|
|
|
|
- ...args.cell.data,
|
|
|
|
- ...args.current,
|
|
|
|
- graphId: sessionStorage.getItem("projectId"),
|
|
|
|
- tools: "",
|
|
|
|
|
|
+ updateTopic(args.cell.id, { ...args.cell.data, x, y }, (info) => {
|
|
|
|
+ setMindProjectInfo && setMindProjectInfo(info);
|
|
});
|
|
});
|
|
}
|
|
}
|
|
}, 500)
|
|
}, 500)
|
|
@@ -400,6 +395,7 @@ const addIndicator = (
|
|
height: 26,
|
|
height: 26,
|
|
x,
|
|
x,
|
|
y,
|
|
y,
|
|
|
|
+ zIndex: 0,
|
|
attrs: {
|
|
attrs: {
|
|
body: {
|
|
body: {
|
|
fill: "#fecb99",
|
|
fill: "#fecb99",
|
|
@@ -417,6 +413,7 @@ const addIndicator = (
|
|
indicatorEdge = graph.addEdge({
|
|
indicatorEdge = graph.addEdge({
|
|
source: {
|
|
source: {
|
|
cell: targetNode.id,
|
|
cell: targetNode.id,
|
|
|
|
+ zIndex: 0,
|
|
anchor: {
|
|
anchor: {
|
|
name: atPosition === positionType.left ? "left" : "right",
|
|
name: atPosition === positionType.left ? "left" : "right",
|
|
args: {
|
|
args: {
|
|
@@ -474,10 +471,8 @@ const setIndicator = (
|
|
addIndicator(x, y, graph, targetNode, atPosition);
|
|
addIndicator(x, y, graph, targetNode, atPosition);
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
- const mindProjectInfo = cloneDeep(useMindMapStore.getState().mindProjectInfo);
|
|
|
|
- if (mindProjectInfo?.structure === StructureType.left) {
|
|
|
|
- addIndicator(x, y, graph, targetNode, atPosition);
|
|
|
|
- }
|
|
|
|
|
|
+ // 自由节点、中心主题
|
|
|
|
+ addIndicator(x, y, graph, targetNode, atPosition);
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
@@ -496,10 +491,8 @@ const setIndicator = (
|
|
addIndicator(x, y, graph, targetNode, atPosition);
|
|
addIndicator(x, y, graph, targetNode, atPosition);
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
- const mindProjectInfo = cloneDeep(useMindMapStore.getState().mindProjectInfo);
|
|
|
|
- if (mindProjectInfo?.structure === StructureType.right) {
|
|
|
|
- addIndicator(x, y, graph, targetNode, atPosition);
|
|
|
|
- }
|
|
|
|
|
|
+ // 自由节点、中心主题
|
|
|
|
+ addIndicator(x, y, graph, targetNode, atPosition);
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
@@ -583,7 +576,9 @@ const handleSwitchPosition = (
|
|
position?: { x: number; y: number },
|
|
position?: { x: number; y: number },
|
|
graph?: Graph
|
|
graph?: Graph
|
|
) => {
|
|
) => {
|
|
- const mindmapProjectInfo: MindMapProjectInfo = cloneDeep(useMindMapStore.getState().mindProjectInfo);
|
|
|
|
|
|
+ const mindmapProjectInfo: MindMapProjectInfo = cloneDeep(
|
|
|
|
+ useMindMapStore.getState().mindProjectInfo
|
|
|
|
+ );
|
|
if (!mindmapProjectInfo) return;
|
|
if (!mindmapProjectInfo) return;
|
|
|
|
|
|
// 找到要拖拽的节点并删除
|
|
// 找到要拖拽的节点并删除
|
|
@@ -595,7 +590,7 @@ const handleSwitchPosition = (
|
|
});
|
|
});
|
|
// 顶节点时删除节点
|
|
// 顶节点时删除节点
|
|
if (source) {
|
|
if (source) {
|
|
- BatchDeleteMindMapElement({ ids: [sourceId ]});
|
|
|
|
|
|
+ BatchDeleteMindMapElement({ ids: [sourceId] });
|
|
}
|
|
}
|
|
// 删除自由节点
|
|
// 删除自由节点
|
|
mindmapProjectInfo.topics = mindmapProjectInfo.topics.filter(
|
|
mindmapProjectInfo.topics = mindmapProjectInfo.topics.filter(
|
|
@@ -716,7 +711,7 @@ const handleSwitchPosition = (
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
- setMindProjectInfo({info: mindmapProjectInfo});
|
|
|
|
|
|
+ setMindProjectInfo({ info: mindmapProjectInfo });
|
|
};
|
|
};
|
|
|
|
|
|
/**
|
|
/**
|