no message

This commit is contained in:
KuroSago 2025-05-08 16:02:56 +08:00
parent c0f2ab7076
commit af88867ec4

View File

@ -32,7 +32,7 @@ export function getCustomNodeContent() {
action: "addChild", action: "addChild",
}, },
{ icon: ICON_EDIT, color: "#FF9800", title: "编辑节点", action: "edit" }, { icon: ICON_EDIT, color: "#FF9800", title: "编辑节点", action: "edit" },
{ icon: ICON_DELETE, color: "#2196F3", title: "删除", action: "delete" }, { icon: ICON_DELETE, color: "#F44336", title: "删除", action: "delete" },
]; ];
// 预计算总宽度 // 预计算总宽度
@ -47,23 +47,18 @@ export function getCustomNodeContent() {
return { return {
// 创建自定义DOM元素 // 创建自定义DOM元素
create: (node: MindMapNode) => { create: (node: MindMapNode) => {
// 创建包含按钮的容器
const container = document.createElement("div"); const container = document.createElement("div");
container.style.gap = `${buttonConfig.gap}px`; container.style.gap = `${buttonConfig.gap}px`;
// 默认隐藏按钮组 - 使用 display:none 节省DOM资源
container.style.display = "none"; container.style.display = "none";
// 存储容器元素以便后续更新
nodeElements[node.uid] = container; nodeElements[node.uid] = container;
// 存储节点的激活状态 // 存储节点的激活状态
nodeActiveState[node.uid] = node.nodeData.data.isActive || false; nodeActiveState[node.uid] = node.nodeData.data.isActive || false;
// 如果节点已激活,显示按钮组 // 如果节点已激活,显示按钮组
if (node.nodeData.data.isActive) { if (node.nodeData.data.isActive) container.style.display = "flex";
container.style.display = "flex";
}
function createButton( function createButton(
icon: string, icon: string,
@ -117,7 +112,7 @@ export function getCustomNodeContent() {
break; break;
case "edit": case "edit":
// 获取实例并编辑当前节点 // 获取实例并编辑当前节点
break; break;
} }
}; };
@ -142,7 +137,6 @@ export function getCustomNodeContent() {
getMindMapInstance()?.on( getMindMapInstance()?.on(
"node_active", "node_active",
(_: MindMapNode, activeNodeList: MindMapNode[]) => { (_: MindMapNode, activeNodeList: MindMapNode[]) => {
const isActive = activeNodeList.some( const isActive = activeNodeList.some(
(activeNode) => activeNode.uid === node.uid (activeNode) => activeNode.uid === node.uid
); );
@ -159,30 +153,47 @@ export function getCustomNodeContent() {
// 返回容器元素和预计算的尺寸 // 返回容器元素和预计算的尺寸
return { return {
el: container, el: container,
width: totalWidth, width: totalWidth,
height: buttonConfig.height, height: buttonConfig.height,
}; };
}, },
// 处理生成的SVG.js的ForeignObject节点实例 // 处理生成的SVG.js的ForeignObject节点实例
handle: ({ handle: ({ element, node }: { element: any; node: MindMapNode }) => {
element,
node,
}: {
element: any;
node: MindMapNode;
}) => {
// 设置自定义内容的位置 - 位于节点下方 // 设置自定义内容的位置 - 位于节点下方
element.attr({
x: 0, // 水平居中
y: node.height + 5, // 位于节点下方5px的位置
zIndex: 1000, // 确保在节点上方
});
// 初始设置按钮组显示状态 // const parent = node.parent;
const isActive = node.nodeData.data.isActive || false; // const siblingNode: MindMapNode[] = parent?.children ?? [];
const container = nodeElements[node.uid];
if (container) container.style.display = isActive ? "flex" : "none"; // 垂直方向上的的第一个弟节点 // 先用 node.uid 找自己 , 自己位置 + 1 , 可能为 undefined
// const index = siblingNode.findIndex((item) => item.uid === node.uid);
// const nextSiblingNode = siblingNode[index + 1];
// matrix(1,0,0,1,858,-779)
// 使用 node.group.node 与 nextSiblingNode.group.node 的 matrix(1,0,0,1,858,-779) 属性差异来计算 垂直距离
// const nodeMatrix = node.group?.node?.transform?.baseVal;
// if (nodeMatrix) {
// console.log(`X偏移: ${nodeMatrix.e}, Y偏移: ${nodeMatrix.f}`);
// }
// console.log("设置自定义内容位置", {element,
// node,parent , siblingNode , nextSiblingNode});
// element.attr({
// x: 0, // 水平居中
// y: node.height + 5, // 位于节点下方5px的位置
// zIndex: 1000, // 确保在节点上方
// });
const elementWidth = element.width();
const nodeWidth = node.width;
if (elementWidth > nodeWidth) {
//
}
}, },
}; };
} }