diff --git a/core/core-backend/src/main/resources/ehcache/ehcache.xml b/core/core-backend/src/main/resources/ehcache/ehcache.xml
index 0e9e4c8bf2..a5eabbba46 100644
--- a/core/core-backend/src/main/resources/ehcache/ehcache.xml
+++ b/core/core-backend/src/main/resources/ehcache/ehcache.xml
@@ -141,5 +141,17 @@
+
+ java.lang.String
+ java.lang.String
+
+ 120
+
+
+ 1000
+ 10
+
+
+
diff --git a/core/core-frontend/package.json b/core/core-frontend/package.json
index 394ca3d64e..b2bb6a722e 100644
--- a/core/core-frontend/package.json
+++ b/core/core-frontend/package.json
@@ -31,6 +31,7 @@
"crypto-js": "^4.1.1",
"dayjs": "^1.11.9",
"decimal.js": "^10.5.0",
+ "dingtalk-jsapi": "^3.1.0",
"echarts": "^5.5.1",
"element-plus-secondary": "^1.0.0",
"element-resize-detector": "^1.2.4",
diff --git a/core/core-frontend/src/locales/en.ts b/core/core-frontend/src/locales/en.ts
index 4c2207531a..7a97779eb1 100644
--- a/core/core-frontend/src/locales/en.ts
+++ b/core/core-frontend/src/locales/en.ts
@@ -4278,6 +4278,10 @@ export default {
add_task: 'Add task',
lark_groups: 'Lark group',
dingtalk_groups: ' Dingtalk group',
+ dingtalk_groups_tips: 'Create an application robot first and add it to the group',
+ robot_code_place: 'Defaults to the same as APP Key',
+ click_add_chat: 'Please click the button below to add a group chat',
+ add_chat_tips: 'Only supports admin-associated accounts using the client',
larksuite_groups: 'Larksuite group',
send_setting: 'Send settings',
retrying_settings: 'Send failed retry settings',
@@ -4657,6 +4661,7 @@ export default {
notification_user: 'Notifier',
notification_email: 'Email notification',
please_enter_email: 'Please enter email, press Enter to confirm',
+ please_choose_dingtalk_group: 'Please select dingtalk group',
please_choose_lark_group: 'Please select lark group',
notification_content: 'Notification content',
default_msg: 'Default message',
diff --git a/core/core-frontend/src/locales/tw.ts b/core/core-frontend/src/locales/tw.ts
index 2b78c7d642..5a9d554a39 100644
--- a/core/core-frontend/src/locales/tw.ts
+++ b/core/core-frontend/src/locales/tw.ts
@@ -4159,6 +4159,10 @@ export default {
add_task: '新增任務',
lark_groups: '飛書群',
dingtalk_groups: '釘釘群',
+ dingtalk_groups_tips: '先建立應用機器人並添加到群裡',
+ robot_code_place: '默認與 APP Key一致',
+ click_add_chat: '請點擊下方按鈕添加群聊',
+ add_chat_tips: '僅支持 admin 關聯帳號在客戶端使用',
larksuite_groups: '國際飛書群',
send_setting: '發送設定',
retrying_settings: '發送失敗重試設定',
@@ -4525,6 +4529,7 @@ export default {
notification_user: '通知人',
notification_email: '郵件通知',
please_enter_email: '請輸入郵箱,回車確認',
+ please_choose_dingtalk_group: '請選擇釘釘群',
please_choose_lark_group: '請選擇飛書群',
notification_content: '通知內容',
default_msg: '默認消息',
diff --git a/core/core-frontend/src/locales/zh-CN.ts b/core/core-frontend/src/locales/zh-CN.ts
index 1958efe61c..d73114e02f 100644
--- a/core/core-frontend/src/locales/zh-CN.ts
+++ b/core/core-frontend/src/locales/zh-CN.ts
@@ -4163,6 +4163,10 @@ export default {
add_task: '添加任务',
lark_groups: '飞书群',
dingtalk_groups: '钉钉群',
+ dingtalk_groups_tips: '先创建应用机器人并添加到群里',
+ robot_code_place: '默认与 APP Key一致',
+ click_add_chat: '请点击下方按钮添加群聊',
+ add_chat_tips: '仅支持 admin 关联账号在客户端使用',
larksuite_groups: '国际飞书群',
send_setting: '发送设置',
retrying_settings: '发送失败重试设置',
@@ -4534,6 +4538,7 @@ export default {
notification_user: '通知人',
notification_email: '邮件通知',
please_enter_email: '请输入邮箱,回车确认',
+ please_choose_dingtalk_group: '请选择钉钉群',
please_choose_lark_group: '请选择飞书群',
notification_content: '通知内容',
default_msg: '默认消息',
diff --git a/core/core-frontend/src/permission.ts b/core/core-frontend/src/permission.ts
index 93fa94b246..7b15d80c7e 100644
--- a/core/core-frontend/src/permission.ts
+++ b/core/core-frontend/src/permission.ts
@@ -13,6 +13,7 @@ import { interactiveStoreWithOut } from '@/store/modules/interactive'
import { useAppearanceStoreWithOut } from '@/store/modules/appearance'
import { useEmbedded } from '@/store/modules/embedded'
import { useLoading } from '@/hooks/web/useLoading'
+import { ElMessageBox } from 'element-plus-secondary'
const appearanceStore = useAppearanceStoreWithOut()
const { wsCache } = useCache()
const permissionStore = usePermissionStoreWithOut()
@@ -109,6 +110,9 @@ router.beforeEach(async (to, from, next) => {
}, {})
}
if (!pathValid(to.path) && to.path !== '/404' && !to.path.startsWith('/de-link')) {
+ if (to.path.startsWith('/sys-setting')) {
+ await noAdminPermission()
+ }
const firstPath = getFirstAuthMenu()
next({ path: firstPath || '/404' })
return
@@ -137,6 +141,9 @@ router.beforeEach(async (to, from, next) => {
await interactiveStore.initInteractive(true)
if (!pathValid(to.path) && to.path !== '/404' && !to.path.startsWith('/de-link')) {
+ if (to.path.startsWith('/sys-setting')) {
+ await noAdminPermission()
+ }
const firstPath = getFirstAuthMenu()
next({ path: firstPath || '/404' })
return
@@ -169,7 +176,34 @@ router.beforeEach(async (to, from, next) => {
}
}
})
-
+const noAdminPermission = async () => {
+ const promise = new Promise((resolve, reject) => {
+ ElMessageBox.confirm('当前页面仅对 admin 开放, 即将跳转首页', {
+ confirmButtonType: 'primary',
+ type: 'warning',
+ confirmButtonText: '确定',
+ cancelButtonText: '',
+ autofocus: false,
+ showCancelButton: false,
+ showClose: false
+ })
+ .then(() => {
+ resolve()
+ })
+ .catch(() => {
+ reject()
+ })
+ })
+ return Promise.race([
+ promise,
+ new Promise(resolve => {
+ setTimeout(() => {
+ ElMessageBox.close()
+ resolve()
+ }, 3000)
+ })
+ ])
+}
router.afterEach(() => {
done()
loadDone()
diff --git a/core/core-frontend/src/utils/RemoteJs.ts b/core/core-frontend/src/utils/RemoteJs.ts
index 289fca8935..79743f0151 100644
--- a/core/core-frontend/src/utils/RemoteJs.ts
+++ b/core/core-frontend/src/utils/RemoteJs.ts
@@ -1,5 +1,5 @@
export const loadScript = (url: string, jsId?: string) => {
- return new Promise(function (resolve, reject) {
+ return new Promise(function (resolve, reject) {
const scriptId = jsId || 'de-fit2cloud-script-id'
let dom = document.getElementById(scriptId)
if (dom) {
diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/dingtalk/api/DingtalkApi.java b/sdk/api/api-base/src/main/java/io/dataease/api/dingtalk/api/DingtalkApi.java
index 20d78b6463..fd6857b18b 100644
--- a/sdk/api/api-base/src/main/java/io/dataease/api/dingtalk/api/DingtalkApi.java
+++ b/sdk/api/api-base/src/main/java/io/dataease/api/dingtalk/api/DingtalkApi.java
@@ -1,11 +1,10 @@
package io.dataease.api.dingtalk.api;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
-import io.dataease.api.dingtalk.dto.DingtalkEnableEditor;
-import io.dataease.api.dingtalk.dto.DingtalkSettingCreator;
-import io.dataease.api.dingtalk.dto.DingtalkTokenRequest;
+import io.dataease.api.dingtalk.dto.*;
import io.dataease.api.dingtalk.vo.DingtalkInfoVO;
import io.dataease.api.lark.vo.LarkGroupVO;
+import io.swagger.v3.oas.annotations.Hidden;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.GetMapping;
@@ -47,4 +46,12 @@ public interface DingtalkApi {
@Operation(summary = "获取群组", hidden = true)
@GetMapping("/getGroup")
LarkGroupVO getGroup();
+
+ @Hidden
+ @PostMapping("/getSignatureInfo")
+ DingtalkSignatureInfo getSignatureInfo(@RequestBody SignatureRequest request);
+
+ @Hidden
+ @PostMapping("/checkChat")
+ void checkChat(@RequestBody DingtalkChatCheckRequest request);
}
diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/dingtalk/dto/DingtalkChatCheckRequest.java b/sdk/api/api-base/src/main/java/io/dataease/api/dingtalk/dto/DingtalkChatCheckRequest.java
new file mode 100644
index 0000000000..d03445bb0d
--- /dev/null
+++ b/sdk/api/api-base/src/main/java/io/dataease/api/dingtalk/dto/DingtalkChatCheckRequest.java
@@ -0,0 +1,10 @@
+package io.dataease.api.dingtalk.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class DingtalkChatCheckRequest implements Serializable {
+ private String chatId;
+}
diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/dingtalk/dto/DingtalkSettingCreator.java b/sdk/api/api-base/src/main/java/io/dataease/api/dingtalk/dto/DingtalkSettingCreator.java
index 09ee809e15..02d234d6a2 100644
--- a/sdk/api/api-base/src/main/java/io/dataease/api/dingtalk/dto/DingtalkSettingCreator.java
+++ b/sdk/api/api-base/src/main/java/io/dataease/api/dingtalk/dto/DingtalkSettingCreator.java
@@ -1,13 +1,17 @@
package io.dataease.api.dingtalk.dto;
+import io.dataease.api.dingtalk.vo.DingtalkChatItem;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
+import java.util.List;
@Schema(description = "钉钉设置构造器")
@Data
public class DingtalkSettingCreator implements Serializable {
+ @Schema(description = "corpId", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String corpId;
@Schema(description = "agentId", requiredMode = Schema.RequiredMode.REQUIRED)
private String agentId;
@Schema(description = "appKey", requiredMode = Schema.RequiredMode.REQUIRED)
@@ -20,4 +24,8 @@ public class DingtalkSettingCreator implements Serializable {
private Boolean enable;
@Schema(description = "是否有效")
private Boolean valid;
+ @Schema(description = "机器人Code")
+ private String robotCode;
+ @Schema(description = "群列表")
+ private List chatList;
}
diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/dingtalk/dto/DingtalkSignatureInfo.java b/sdk/api/api-base/src/main/java/io/dataease/api/dingtalk/dto/DingtalkSignatureInfo.java
new file mode 100644
index 0000000000..fe86b8281f
--- /dev/null
+++ b/sdk/api/api-base/src/main/java/io/dataease/api/dingtalk/dto/DingtalkSignatureInfo.java
@@ -0,0 +1,26 @@
+package io.dataease.api.dingtalk.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+public class DingtalkSignatureInfo implements Serializable {
+
+ private String corpId;
+
+ private String agentId;
+
+ private String timeStamp;
+
+ private String nonceStr;
+
+ private String signature;
+
+ private Integer type = 0;
+
+ private List jsApiList = List.of("chooseChat");
+
+
+}
diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/dingtalk/dto/SignatureRequest.java b/sdk/api/api-base/src/main/java/io/dataease/api/dingtalk/dto/SignatureRequest.java
new file mode 100644
index 0000000000..7232c6e7c9
--- /dev/null
+++ b/sdk/api/api-base/src/main/java/io/dataease/api/dingtalk/dto/SignatureRequest.java
@@ -0,0 +1,11 @@
+package io.dataease.api.dingtalk.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class SignatureRequest implements Serializable {
+
+ private String currentUrl;
+}
diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/dingtalk/vo/DingtalkInfoVO.java b/sdk/api/api-base/src/main/java/io/dataease/api/dingtalk/vo/DingtalkInfoVO.java
index f802adce67..88c70f9c6d 100644
--- a/sdk/api/api-base/src/main/java/io/dataease/api/dingtalk/vo/DingtalkInfoVO.java
+++ b/sdk/api/api-base/src/main/java/io/dataease/api/dingtalk/vo/DingtalkInfoVO.java
@@ -10,6 +10,8 @@ import java.util.List;
@Schema(description = "钉钉信息")
@Data
public class DingtalkInfoVO implements Serializable {
+ @Schema(description = "corpId")
+ private String corpId;
@Schema(description = "agentId")
private String agentId;
@Schema(description = "appKey")
@@ -23,10 +25,10 @@ public class DingtalkInfoVO implements Serializable {
@Schema(description = "是否可用")
private Boolean valid = false;
- @JsonIgnore
+ @Schema(description = "机器人Code")
private String robotCode;
- @JsonIgnore
+ @Schema(description = "群列表")
private List chatList;
}