From 6f370ac874be18e8a085c16fbf522de2517f1b7b Mon Sep 17 00:00:00 2001
From: X1627315083 <1627315083@qq.com>
Date: Wed, 4 Feb 2026 10:09:24 +0800
Subject: [PATCH] fix
---
package-lock.json | 37 ++++++
package.json | 1 +
src/assets/css/style.css | 28 +----
src/assets/css/style.less | 4 +
src/views/home/versionTree/index.vue | 9 +-
src/views/home/versionTree/tree/index.vue | 28 ++++-
src/views/home/versionTree/tree/view1Item.vue | 11 +-
.../home/versionTree/tree/view2/index.vue | 117 +++++++++++++++---
.../versionTree/tree/view2/primaryNode.vue | 26 ++++
.../versionTree/tree/view2/secondaryNode.vue | 25 ++++
.../versionTree/tree/view2/speciaiNode.vue | 55 --------
.../versionTree/tree/view2/tools/tools.js | 57 +++++++++
.../tree/view2/tools/versionsData.js | 61 +++++++++
13 files changed, 354 insertions(+), 105 deletions(-)
create mode 100644 src/views/home/versionTree/tree/view2/primaryNode.vue
create mode 100644 src/views/home/versionTree/tree/view2/secondaryNode.vue
delete mode 100644 src/views/home/versionTree/tree/view2/speciaiNode.vue
create mode 100644 src/views/home/versionTree/tree/view2/tools/tools.js
create mode 100644 src/views/home/versionTree/tree/view2/tools/versionsData.js
diff --git a/package-lock.json b/package-lock.json
index 6daad32..154a29d 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -12,6 +12,7 @@
"@vue-flow/core": "^1.48.2",
"axios": "^1.3.6",
"crypto-js": "^4.2.0",
+ "dagre": "^0.8.5",
"element-plus": "^2.13.2",
"gsap": "^3.13.0",
"markdown-it": "^14.1.0",
@@ -2401,6 +2402,16 @@
"node": ">=12"
}
},
+ "node_modules/dagre": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmmirror.com/dagre/-/dagre-0.8.5.tgz",
+ "integrity": "sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==",
+ "license": "MIT",
+ "dependencies": {
+ "graphlib": "^2.1.8",
+ "lodash": "^4.17.15"
+ }
+ },
"node_modules/data-view-buffer": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz",
@@ -3680,6 +3691,15 @@
"integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
"dev": true
},
+ "node_modules/graphlib": {
+ "version": "2.1.8",
+ "resolved": "https://registry.npmmirror.com/graphlib/-/graphlib-2.1.8.tgz",
+ "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==",
+ "license": "MIT",
+ "dependencies": {
+ "lodash": "^4.17.15"
+ }
+ },
"node_modules/gsap": {
"version": "3.13.0",
"resolved": "https://registry.npmmirror.com/gsap/-/gsap-3.13.0.tgz",
@@ -10373,6 +10393,15 @@
"d3-transition": "2 - 3"
}
},
+ "dagre": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmmirror.com/dagre/-/dagre-0.8.5.tgz",
+ "integrity": "sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==",
+ "requires": {
+ "graphlib": "^2.1.8",
+ "lodash": "^4.17.15"
+ }
+ },
"data-view-buffer": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz",
@@ -11359,6 +11388,14 @@
"integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
"dev": true
},
+ "graphlib": {
+ "version": "2.1.8",
+ "resolved": "https://registry.npmmirror.com/graphlib/-/graphlib-2.1.8.tgz",
+ "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==",
+ "requires": {
+ "lodash": "^4.17.15"
+ }
+ },
"gsap": {
"version": "3.13.0",
"resolved": "https://registry.npmmirror.com/gsap/-/gsap-3.13.0.tgz",
diff --git a/package.json b/package.json
index 850d9a5..adefe3f 100644
--- a/package.json
+++ b/package.json
@@ -16,6 +16,7 @@
"@vue-flow/core": "^1.48.2",
"axios": "^1.3.6",
"crypto-js": "^4.2.0",
+ "dagre": "^0.8.5",
"element-plus": "^2.13.2",
"gsap": "^3.13.0",
"markdown-it": "^14.1.0",
diff --git a/src/assets/css/style.css b/src/assets/css/style.css
index a1102e0..1588c2c 100644
--- a/src/assets/css/style.css
+++ b/src/assets/css/style.css
@@ -10,6 +10,9 @@ p {
margin: 0;
padding: 0;
}
+* {
+ box-sizing: border-box;
+}
html,
body,
#app {
@@ -25,28 +28,3 @@ body,
transform: rotate(360deg);
}
}
-.flex {
- display: flex;
-}
-.flex-col {
- flex-direction: column;
-}
-.flex-1 {
- flex: 1;
-}
-.flex-center {
- align-items: center;
- justify-content: center;
-}
-.flex-between {
- justify-content: space-between;
-}
-.align-center {
- align-items: center;
-}
-.relative {
- position: relative;
-}
-.absolute {
- position: absolute;
-}
diff --git a/src/assets/css/style.less b/src/assets/css/style.less
index d146a31..093159c 100644
--- a/src/assets/css/style.less
+++ b/src/assets/css/style.less
@@ -11,6 +11,10 @@ p {
padding: 0;
}
+*{
+ box-sizing: border-box;
+}
+
html,
body,
#app {
diff --git a/src/views/home/versionTree/index.vue b/src/views/home/versionTree/index.vue
index 49c1059..c48983b 100644
--- a/src/views/home/versionTree/index.vue
+++ b/src/views/home/versionTree/index.vue
@@ -14,7 +14,7 @@ const props = defineProps({
})
//const emit = defineEmits([
//])
-const treeState = ref(false)//
+const treeState = ref(true)//
const openTree = ()=>{
treeState.value = !treeState.value
@@ -65,6 +65,13 @@ const {} = toRefs(data);
\ No newline at end of file
diff --git a/src/views/home/versionTree/tree/view2/primaryNode.vue b/src/views/home/versionTree/tree/view2/primaryNode.vue
new file mode 100644
index 0000000..e6003ac
--- /dev/null
+++ b/src/views/home/versionTree/tree/view2/primaryNode.vue
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
{{ props.data.id }}
+
+
+
+
diff --git a/src/views/home/versionTree/tree/view2/secondaryNode.vue b/src/views/home/versionTree/tree/view2/secondaryNode.vue
new file mode 100644
index 0000000..0833c83
--- /dev/null
+++ b/src/views/home/versionTree/tree/view2/secondaryNode.vue
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
{{ props.data.id }}
+
+
+
+
diff --git a/src/views/home/versionTree/tree/view2/speciaiNode.vue b/src/views/home/versionTree/tree/view2/speciaiNode.vue
deleted file mode 100644
index cafd797..0000000
--- a/src/views/home/versionTree/tree/view2/speciaiNode.vue
+++ /dev/null
@@ -1,55 +0,0 @@
-
-
-
-
-
-
-
diff --git a/src/views/home/versionTree/tree/view2/tools/tools.js b/src/views/home/versionTree/tree/view2/tools/tools.js
new file mode 100644
index 0000000..d28814d
--- /dev/null
+++ b/src/views/home/versionTree/tree/view2/tools/tools.js
@@ -0,0 +1,57 @@
+// import dagre from '@dagrejs/dagre'
+import dagre from 'dagre'
+import { Position, useVueFlow } from '@vue-flow/core'
+import { ref } from 'vue'
+
+/**
+ * Composable to run the layout algorithm on the graph.
+ * It uses the `dagre` library to calculate the layout of the nodes and edges.
+ */
+export function useLayout() {
+ const { findNode } = useVueFlow()
+
+ const graph = ref(new dagre.graphlib.Graph())
+
+ const previousDirection = ref('LR')
+
+ function layout(nodes, edges, direction) {
+ // we create a new graph instance, in case some nodes/edges were removed, otherwise dagre would act as if they were still there
+ const dagreGraph = new dagre.graphlib.Graph()
+
+ graph.value = dagreGraph
+
+ dagreGraph.setDefaultEdgeLabel(() => ({}))
+
+ const isHorizontal = direction === 'LR'
+ dagreGraph.setGraph({ rankdir: direction })
+
+ previousDirection.value = direction
+
+ for (const node of nodes) {
+ // if you need width+height of nodes for your layout, you can use the dimensions property of the internal node (`GraphNode` type)
+ const graphNode = findNode(node.id)
+
+ dagreGraph.setNode(node.id, { width: graphNode.dimensions.width || 150, height: graphNode.dimensions.height || 50 })
+ }
+
+ for (const edge of edges) {
+ dagreGraph.setEdge(edge.source, edge.target)
+ }
+
+ dagre.layout(dagreGraph)
+
+ // set nodes with updated positions
+ return nodes.map((node) => {
+ const nodeWithPosition = dagreGraph.node(node.id)
+
+ return {
+ ...node,
+ targetPosition: isHorizontal ? Position.Left : Position.Top,
+ sourcePosition: isHorizontal ? Position.Right : Position.Bottom,
+ position: { x: nodeWithPosition.x, y: nodeWithPosition.y },
+ }
+ })
+ }
+
+ return { graph, layout, previousDirection }
+}
diff --git a/src/views/home/versionTree/tree/view2/tools/versionsData.js b/src/views/home/versionTree/tree/view2/tools/versionsData.js
new file mode 100644
index 0000000..63d043f
--- /dev/null
+++ b/src/views/home/versionTree/tree/view2/tools/versionsData.js
@@ -0,0 +1,61 @@
+export const versionsList = [
+ {
+ id: '1',
+ name:'V1',
+ child:[
+ {
+ id: '1-1',
+ name:'V1-1',
+ child:[
+ {
+ id: '1-1-1',
+ name:'V1-1-1',
+ }
+ ]
+ },{
+ id: '1-2',
+ name:'V1-2',
+ child:[
+ {
+ id: '1-2-1',
+ name:'V1-2-1',
+ },{
+ id: '1-2-2',
+ name:'V1-2-2',
+ }
+ ]
+ },{
+ id: '1-2',
+ name:'V1-2',
+ child:[
+ {
+ id: '1-2-1',
+ name:'V1-2-1',
+ child:[
+ {
+ id: '1-2-1-1',
+ name:'V1-2-1-1',
+ }
+ ]
+ },{
+ id: '1-2-2',
+ name:'V1-2-2',
+ child:[
+ {
+ id: '1-2-2-1',
+ name:'V1-2-2-1',
+ },{
+ id: '1-2-2-2',
+ name:'V1-2-2-2',
+ }
+ ]
+ },
+ ]
+ },{
+ id: '1-3',
+ name:'V1-3',
+ }
+ ]
+ }
+ ]
+
\ No newline at end of file