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/core/core-frontend/src/views/login/index.vue b/core/core-frontend/src/views/login/index.vue
index 44a71d5c5a..cf84908f91 100644
--- a/core/core-frontend/src/views/login/index.vue
+++ b/core/core-frontend/src/views/login/index.vue
@@ -51,42 +51,10 @@ const state = reactive({
},
footContent: ''
})
-const checkUsername = (rule: any, value: any, callback: any) => {
- if (!value || activeName.value === 'ldap') {
- return callback()
- }
- const pattern = /^[a-zA-Z0-9][a-zA-Z0-9\@._-]*$/
- const reg = new RegExp(pattern)
- if (!reg.test(value)) {
- const msg = t('user.user_name_pattern_error')
- callback(new Error(msg))
- }
- return callback()
-}
-
-const validatePwd = (rule: any, value: any, callback: any) => {
- if (!value || activeName.value === 'ldap') {
- return callback()
- }
- const pattern =
- /^.*(?=.{6,20})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[~!@#$%^&*()_+\-\={}|":<>?`[\];',.\/])[a-zA-Z0-9~!@#$%^&*()_+\-\={}|":<>?`[\];',.\/]*$/
- const regep = new RegExp(pattern)
- if (!regep.test(value)) {
- const msg = t('user.pwd_pattern_error')
- callback(new Error(msg))
- }
- return callback()
-}
const rules = reactive({
- username: [
- { required: true, message: t('common.required'), trigger: 'blur' },
- { required: true, validator: checkUsername, trigger: 'blur' }
- ],
- password: [
- { required: true, message: t('common.required'), trigger: 'blur' },
- { required: true, validator: validatePwd, trigger: 'blur' }
- ]
+ username: [{ required: true, message: t('common.required'), trigger: 'blur' }],
+ password: [{ required: true, message: t('common.required'), trigger: 'blur' }]
})
const activeName = ref('simple')
diff --git a/de-xpack b/de-xpack
index 8ac18a900a..315fa62982 160000
--- a/de-xpack
+++ b/de-xpack
@@ -1 +1 @@
-Subproject commit 8ac18a900ac4744d62ff3c7e4ee6ec3c8fb82933
+Subproject commit 315fa62982d6f322fb3dddf641882251f1572c79
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;
+}