diff --git a/core/core-frontend/public/svg/relation-dataset.svg b/core/core-frontend/public/svg/relation-dataset.svg
new file mode 100644
index 0000000000..c31cfd38db
--- /dev/null
+++ b/core/core-frontend/public/svg/relation-dataset.svg
@@ -0,0 +1,13 @@
+
diff --git a/core/core-frontend/public/svg/relation-ds.svg b/core/core-frontend/public/svg/relation-ds.svg
new file mode 100644
index 0000000000..d5073da2e9
--- /dev/null
+++ b/core/core-frontend/public/svg/relation-ds.svg
@@ -0,0 +1,18 @@
+
diff --git a/core/core-frontend/public/svg/relation-panel.svg b/core/core-frontend/public/svg/relation-panel.svg
new file mode 100644
index 0000000000..090c1f461c
--- /dev/null
+++ b/core/core-frontend/public/svg/relation-panel.svg
@@ -0,0 +1,6 @@
+
diff --git a/core/core-frontend/public/svg/relation-screen.svg b/core/core-frontend/public/svg/relation-screen.svg
new file mode 100644
index 0000000000..5b302b4cdc
--- /dev/null
+++ b/core/core-frontend/public/svg/relation-screen.svg
@@ -0,0 +1,8 @@
+
diff --git a/core/core-frontend/src/locales/zh-CN.ts b/core/core-frontend/src/locales/zh-CN.ts
index 508b17aede..78ce6bf227 100644
--- a/core/core-frontend/src/locales/zh-CN.ts
+++ b/core/core-frontend/src/locales/zh-CN.ts
@@ -4090,6 +4090,7 @@ export default {
folder: '文件夹',
del_folder_tips: '删除后,此文件夹下的所有资源都会被删除,请谨慎操作。',
sync_to_org: '迁移至目标组织',
- sync_org_placeholder: '请选择目标组织'
+ sync_org_placeholder: '请选择目标组织',
+ relation_picture: '血缘关系图'
}
}
diff --git a/de-xpack b/de-xpack
index 8ac18a900a..7cdb941249 160000
--- a/de-xpack
+++ b/de-xpack
@@ -1 +1 @@
-Subproject commit 8ac18a900ac4744d62ff3c7e4ee6ec3c8fb82933
+Subproject commit 7cdb9412491767474db9bbd3d49e97bcb0a39519
diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/free/FreeApi.java b/sdk/api/api-base/src/main/java/io/dataease/api/free/FreeApi.java
index 0f51b930ed..aba18ae952 100644
--- a/sdk/api/api-base/src/main/java/io/dataease/api/free/FreeApi.java
+++ b/sdk/api/api-base/src/main/java/io/dataease/api/free/FreeApi.java
@@ -1,9 +1,7 @@
package io.dataease.api.free;
-import io.dataease.api.free.dto.FreeBatchDelRequest;
-import io.dataease.api.free.dto.FreeBatchSyncRequest;
-import io.dataease.api.free.dto.FreeQueryRequest;
-import io.dataease.api.free.dto.FreeSyncRequest;
+import io.dataease.api.free.dto.*;
+import io.dataease.api.free.vo.FreeRelationVO;
import io.dataease.api.free.vo.FreeVO;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@@ -26,4 +24,7 @@ public interface FreeApi {
@PostMapping("/deleteBatch")
void deleteBatch(@RequestBody FreeBatchDelRequest request);
+
+ @PostMapping("/relation")
+ FreeRelationVO relation(@RequestBody FreeRelationRequest request);
}
diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/free/dto/FreeRelationCategory.java b/sdk/api/api-base/src/main/java/io/dataease/api/free/dto/FreeRelationCategory.java
new file mode 100644
index 0000000000..f40da1f2cb
--- /dev/null
+++ b/sdk/api/api-base/src/main/java/io/dataease/api/free/dto/FreeRelationCategory.java
@@ -0,0 +1,14 @@
+package io.dataease.api.free.dto;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Data
+public class FreeRelationCategory implements Serializable {
+ @Serial
+ private static final long serialVersionUID = 2235520960613140213L;
+
+ private String name;
+}
diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/free/dto/FreeRelationLink.java b/sdk/api/api-base/src/main/java/io/dataease/api/free/dto/FreeRelationLink.java
new file mode 100644
index 0000000000..3f91dbe715
--- /dev/null
+++ b/sdk/api/api-base/src/main/java/io/dataease/api/free/dto/FreeRelationLink.java
@@ -0,0 +1,24 @@
+package io.dataease.api.free.dto;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@NoArgsConstructor
+@AllArgsConstructor
+@Data
+public class FreeRelationLink implements Serializable {
+ @Serial
+ private static final long serialVersionUID = 8574916923164645781L;
+
+ @JsonSerialize(using= ToStringSerializer.class)
+ private Long source;
+
+ @JsonSerialize(using= ToStringSerializer.class)
+ private Long target;
+}
diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/free/dto/FreeRelationNode.java b/sdk/api/api-base/src/main/java/io/dataease/api/free/dto/FreeRelationNode.java
new file mode 100644
index 0000000000..2fb1787903
--- /dev/null
+++ b/sdk/api/api-base/src/main/java/io/dataease/api/free/dto/FreeRelationNode.java
@@ -0,0 +1,37 @@
+package io.dataease.api.free.dto;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+public class FreeRelationNode implements Serializable {
+ @Serial
+ private static final long serialVersionUID = 5396869322229400707L;
+
+ @JsonSerialize(using= ToStringSerializer.class)
+ private Long id;
+
+ private String name;
+
+ private Integer category;
+
+ private Integer x;
+
+ private Integer y;
+
+ public FreeRelationNode(Long id, String name, Integer category) {
+ this.id = id;
+ this.name = name;
+ this.category = category;
+ this.x = 0;
+ this.y = 0;
+ }
+}
diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/free/dto/FreeRelationRequest.java b/sdk/api/api-base/src/main/java/io/dataease/api/free/dto/FreeRelationRequest.java
new file mode 100644
index 0000000000..ca976a53a1
--- /dev/null
+++ b/sdk/api/api-base/src/main/java/io/dataease/api/free/dto/FreeRelationRequest.java
@@ -0,0 +1,15 @@
+package io.dataease.api.free.dto;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Data
+public class FreeRelationRequest implements Serializable {
+ @Serial
+ private static final long serialVersionUID = -316612770549936486L;
+
+ private Long id;
+
+}
diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/free/vo/FreeRelationVO.java b/sdk/api/api-base/src/main/java/io/dataease/api/free/vo/FreeRelationVO.java
new file mode 100644
index 0000000000..0c6e205944
--- /dev/null
+++ b/sdk/api/api-base/src/main/java/io/dataease/api/free/vo/FreeRelationVO.java
@@ -0,0 +1,26 @@
+package io.dataease.api.free.vo;
+
+import io.dataease.api.free.dto.FreeRelationCategory;
+import io.dataease.api.free.dto.FreeRelationLink;
+import io.dataease.api.free.dto.FreeRelationNode;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+@NoArgsConstructor
+@AllArgsConstructor
+@Data
+public class FreeRelationVO implements Serializable {
+ @Serial
+ private static final long serialVersionUID = 7087187548660162237L;
+
+ private List categories;
+
+ private List links;
+
+ private List nodes;
+}