From 43d13d1a95b73c9a2cd8d6032074a5efb0899282 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 4 Jan 2026 11:21:41 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E9=92=89=E9=92=89?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E6=B6=88=E6=81=AF=EF=BC=8C=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=A4=9A=E7=A7=8D=E6=B6=88=E6=81=AF=E7=B1=BB=E5=9E=8B=E9=A2=84?= =?UTF-8?q?=E8=A7=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/DingTalkController.java | 111 +++++++++++++++++- frontend/src/api/dingtalk.ts | 5 +- frontend/src/views/Settings.vue | 42 ++++++- 3 files changed, 148 insertions(+), 10 deletions(-) diff --git a/backend/src/main/java/com/designhub/controller/DingTalkController.java b/backend/src/main/java/com/designhub/controller/DingTalkController.java index 1c468e5..d3782d8 100644 --- a/backend/src/main/java/com/designhub/controller/DingTalkController.java +++ b/backend/src/main/java/com/designhub/controller/DingTalkController.java @@ -141,9 +141,114 @@ public class DingTalkController { @Operation(summary = "发送测试消息") @PostMapping("/test-message") public Result sendTestMessage(@RequestBody Map params) { - String title = params.getOrDefault("title", "测试消息"); - String content = params.getOrDefault("content", "这是一条来自DesignHub的测试消息"); - return Result.success(dingTalkService.sendRobotMessage(title, content)); + String messageType = params.getOrDefault("type", "simple"); + String title; + StringBuilder content = new StringBuilder(); + + switch (messageType) { + case "task_publish": + // 新任务发布样式 + title = "新任务发布(测试)"; + content.append("-------------------------------- \n"); + content.append(" 【 新 任 务 发 布 】 \n"); + content.append("-------------------------------- \n\n"); + content.append("任务名称:示例任务标题 \n"); + content.append("任务编号:TSK20260104001 \n"); + content.append("任务积分:100 分 \n"); + content.append("任务数量:5 个 \n"); + content.append("任务需求类型:3D模型 \n"); + content.append("品牌:示例品牌 \n"); + content.append("类目:示例类目 \n"); + content.append("平台:天猫 \n"); + content.append("SPU信息:SPU12345 \n"); + content.append("预估工时:8 小时(接单后开始计时) \n"); + content.append(" \n"); + content.append("发起人:张三 \n"); + content.append("发起部门:市场部 \n"); + content.append(" \n"); + content.append("-------------------------------- \n"); + content.append("前往抢单:qd.yydd.ai \n"); + content.append("--------------------------------"); + break; + + case "task_assign": + // 任务指派样式 + title = "任务已指派(测试)"; + content.append("-------------------------------- \n"); + content.append(" 【 任 务 已 指 派 】 \n"); + content.append("-------------------------------- \n\n"); + content.append("任务名称:示例任务标题 \n"); + content.append("任务编号:TSK20260104001 \n"); + content.append("任务积分:100 分 \n"); + content.append("指派给:李四 \n"); + content.append("预估工时:8 小时 \n"); + content.append("发起人:张三 \n"); + content.append(" \n"); + content.append("-------------------------------- \n"); + content.append("请尽快处理!qd.yydd.ai \n"); + content.append("--------------------------------"); + break; + + case "task_reject": + // 任务驳回样式 + title = "任务已驳回(测试)"; + content.append("-------------------------------- \n"); + content.append(" 【 任 务 已 驳 回 】 \n"); + content.append("-------------------------------- \n\n"); + content.append("任务名称:示例任务标题 \n"); + content.append("任务编号:TSK20260104001 \n"); + content.append("原处理人:李四 \n"); + content.append("驳回原因:设计稿不符合要求,请重新修改 \n"); + content.append(" \n"); + content.append("--------------------------------"); + break; + + case "subtask_publish": + // 子任务组发布样式 + title = "子任务组发布(测试)"; + content.append("-------------------------------- \n"); + content.append(" 【 子任务组发布 】 \n"); + content.append("-------------------------------- \n\n"); + content.append("主任务:示例主任务标题 \n"); + content.append("任务编号:TSK20260104001 \n"); + content.append("当前组号:第 2 组 \n"); + content.append("子任务数:3 个 \n"); + content.append("组积分:60 分 \n"); + content.append("任务需求类型:平面设计 \n"); + content.append(" \n"); + content.append("子任务列表: \n"); + content.append(" 1. 首页Banner(20分) \n"); + content.append(" 2. 详情页设计(25分) \n"); + content.append(" 3. 主图设计(15分) \n"); + content.append(" \n"); + content.append("发起人:张三 \n"); + content.append("发起部门:市场部 \n"); + content.append(" \n"); + content.append("-------------------------------- \n"); + content.append("前往抢单:qd.yydd.ai \n"); + content.append("--------------------------------"); + break; + + default: + // 简单测试消息 + title = params.getOrDefault("title", "系统测试消息"); + content.append("-------------------------------- \n"); + content.append(" 【 系 统 测 试 】 \n"); + content.append("-------------------------------- \n\n"); + content.append("这是一条来自 DesignHub 系统的测试消息 \n"); + content.append(" \n"); + content.append("如果您收到此消息,说明钉钉机器人配置成功! \n"); + content.append(" \n"); + content.append("测试时间:").append(java.time.LocalDateTime.now().format( + java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))).append(" \n"); + content.append(" \n"); + content.append("-------------------------------- \n"); + content.append("访问系统:qd.yydd.ai \n"); + content.append("--------------------------------"); + break; + } + + return Result.success(dingTalkService.sendRobotMessage(title, content.toString())); } @Operation(summary = "获取钉钉部门列表") diff --git a/frontend/src/api/dingtalk.ts b/frontend/src/api/dingtalk.ts index 6756501..eb424c0 100644 --- a/frontend/src/api/dingtalk.ts +++ b/frontend/src/api/dingtalk.ts @@ -51,9 +51,10 @@ export function testDingTalkConnection(config: DingTalkConfig): Promise /** * 发送测试消息 + * @param type 消息类型:simple(简单测试), task_publish(新任务发布), task_assign(任务指派), task_reject(任务驳回), subtask_publish(子任务组发布) */ -export function sendTestMessage(title: string, content: string): Promise { - return request.post>('/dingtalk/test-message', { title, content }) +export function sendTestMessage(type: string = 'simple'): Promise { + return request.post>('/dingtalk/test-message', { type }) .then(res => res.data) } diff --git a/frontend/src/views/Settings.vue b/frontend/src/views/Settings.vue index 94018a1..93561c2 100644 --- a/frontend/src/views/Settings.vue +++ b/frontend/src/views/Settings.vue @@ -710,12 +710,27 @@ 测试连接 - - 发送测试消息 - + 消息测试 + + + 简单测试 + 新任务发布 + 任务指派 + 任务驳回 + 子任务组发布 + + + + + + 发送测试消息 + + 选择不同类型查看实际消息排版效果 + + 部门同步 { } } +// 测试消息类型 +const testMessageType = ref('simple') + const handleSendTestMessage = async () => { if (!dingTalkConfig.robotWebhook) { message.warning('请先配置机器人Webhook') @@ -2603,9 +2621,16 @@ const handleSendTestMessage = async () => { sendingTestMessage.value = true try { - const result = await sendTestMessage('测试消息', '这是一条来自DesignHub系统的测试消息,如果您收到此消息说明钉钉机器人配置成功!') + const result = await sendTestMessage(testMessageType.value) if (result) { - message.success('测试消息发送成功!') + const typeNames: Record = { + 'simple': '简单测试', + 'task_publish': '新任务发布', + 'task_assign': '任务指派', + 'task_reject': '任务驳回', + 'subtask_publish': '子任务组发布' + } + message.success(`"${typeNames[testMessageType.value]}"消息发送成功!`) } else { message.error('测试消息发送失败') } @@ -3992,6 +4017,13 @@ watch(activeTab, (value) => { } } } + +// 测试消息提示 +.test-message-hint { + margin-left: $space-md; + font-size: $font-size-sm; + color: $text-tertiary; +}