From ccdc77d8ebbebdc9b1f6dd40db3f6f5aeefcd0a1 Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 7 Jan 2026 09:57:10 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E9=92=89=E9=92=89Cor?= =?UTF-8?q?pId=E9=85=8D=E7=BD=AE=EF=BC=8C=E6=B7=BB=E5=8A=A0=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E6=8F=90=E7=A4=BA=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designhub/service/DingTalkService.java | 44 +++++++++---------- frontend/src/views/Settings.vue | 6 ++- 2 files changed, 27 insertions(+), 23 deletions(-) diff --git a/backend/src/main/java/com/designhub/service/DingTalkService.java b/backend/src/main/java/com/designhub/service/DingTalkService.java index 3669101..167c4d1 100644 --- a/backend/src/main/java/com/designhub/service/DingTalkService.java +++ b/backend/src/main/java/com/designhub/service/DingTalkService.java @@ -211,38 +211,38 @@ public class DingTalkService { } /** - * 构建钉钉应用内跳转链接 - * 格式: dingtalk://dingtalkclient/action/openapp?corpid=xxx&container_type=work_platform&app_id=0_xxx&redirect_type=jump&redirect_url=xxx + * 构建钉钉跳转链接 + * 如果配置了正确的corpId(以ding开头),使用应用内跳转;否则使用简单外链方式 * @param config 钉钉配置 * @param targetUrl 目标跳转地址 - * @return 钉钉应用内跳转链接 + * @return 钉钉跳转链接 */ private String buildDingTalkAppLink(DingTalkConfig config, String targetUrl) { try { String corpId = config.getCorpId(); String agentId = config.getAgentId(); - // 如果没有配置corpId或agentId,回退到旧的跳转方式 - if (corpId == null || corpId.trim().isEmpty() || agentId == null || agentId.trim().isEmpty()) { - log.warn("钉钉corpId或agentId未配置,使用普通跳转链接"); - return "dingtalk://dingtalkclient/page/link?url=" + - URLEncoder.encode(targetUrl, StandardCharsets.UTF_8.toString()); + // 检查corpId是否是有效的钉钉企业ID格式(以ding开头) + boolean validCorpId = corpId != null && corpId.trim().startsWith("ding"); + boolean validAgentId = agentId != null && !agentId.trim().isEmpty(); + + if (validCorpId && validAgentId) { + // 使用应用内跳转 + String appId = "0_" + agentId.trim(); + String encodedUrl = URLEncoder.encode(targetUrl, StandardCharsets.UTF_8.toString()); + String dingTalkLink = String.format( + "dingtalk://dingtalkclient/action/openapp?corpid=%s&container_type=work_platform&app_id=%s&redirect_type=jump&redirect_url=%s", + corpId.trim(), appId, encodedUrl + ); + log.debug("使用钉钉应用内跳转: {}", dingTalkLink); + return dingTalkLink; + } else { + // corpId格式不正确,使用简单外链方式 + log.info("corpId格式不正确或未配置,使用简单外链跳转。当前corpId: {}", corpId); + return targetUrl; } - - // 构建钉钉应用内跳转链接 - // app_id 格式为 0_agentId - String appId = "0_" + agentId; - String encodedUrl = URLEncoder.encode(targetUrl, StandardCharsets.UTF_8.toString()); - - String dingTalkLink = String.format( - "dingtalk://dingtalkclient/action/openapp?corpid=%s&container_type=work_platform&app_id=%s&redirect_type=jump&redirect_url=%s", - corpId, appId, encodedUrl - ); - - log.debug("构建钉钉应用内跳转链接: {}", dingTalkLink); - return dingTalkLink; } catch (Exception e) { - log.error("构建钉钉应用内跳转链接失败", e); + log.error("构建钉钉跳转链接失败", e); return targetUrl; } } diff --git a/frontend/src/views/Settings.vue b/frontend/src/views/Settings.vue index afa3f56..e8dc270 100644 --- a/frontend/src/views/Settings.vue +++ b/frontend/src/views/Settings.vue @@ -751,7 +751,11 @@ - + +
+ + 在钉钉开放平台 → 应用开发 → 企业内部开发 → 应用信息中查看,格式以 "ding" 开头 +
机器人配置(可选)