From 07af07cf505f1275d6c60cb20530107103675263 Mon Sep 17 00:00:00 2001 From: Fedorov Vladimir Date: Sat, 6 Dec 2025 18:45:39 +0700 Subject: [PATCH] update editor --- src/components/EditorWindow.vue | 126 ++++++++++++++++++++++++++++++-- 1 file changed, 121 insertions(+), 5 deletions(-) diff --git a/src/components/EditorWindow.vue b/src/components/EditorWindow.vue index 0bd9cc4..fd35079 100644 --- a/src/components/EditorWindow.vue +++ b/src/components/EditorWindow.vue @@ -7,19 +7,88 @@ import { getGraph } from './client'; const network = ref() +type GraphNode = { + id: number, + label: string, + name: string, + text: string, +}; + +type GraphEdge = { + from: number, + to: number, + arrows: string, +}; + +type Graph = { + nodes: Array; + edges: Array; +}; + +const graph = ref({ + nodes: [], + edges: [] +}) + +const selectedNode = ref({ + id: 0, + label: "", + name: "", + text: "", +}) + +let net = {} + onMounted(async () => { if (!network.value) return - const graph = await getGraph() + graph.value = await getGraph() const data = { - nodes: graph.nodes, - edges: graph.edges + nodes: graph.value.nodes, + edges: graph.value.edges } - const options = {} - new Network(network.value, data, options) + const options = { + interaction: { + selectable: true, + }, + nodes: { + color: { + border: '#2B7CE9', // Normal border color + background: '#97C2FC', // Normal background color + highlight: { // Selection state + border: '#960000', + background: '#ff9494' + }, + hover: { // Hover state + border: '#2B7CE9', + background: '#D2E5FF' + } + } + }, + } + net = new Network(network.value, data, options) + net.on("click", function (params) { + if (params.nodes.length > 0) { + console.log("Clicked node:", params.nodes[0]); + selectedNode.value = graph.value.nodes[params.nodes[0]] + } else if (params.edges.length > 0) { + console.log("Clicked edge:", params.edges[0]); + } + }); + + selectNode(graph.value.nodes[0]) }) + +function selectNode(node: GraphNode) { + selectedNode.value = node + net.selectNodes([selectedNode.value.id]) +} + +function nodeHeader(node: GraphNode): string { + return "[" + node.label + "] - " + node.name +}