From 17d4dbed1d7e507a2d711dd72b2f53ff467fede3 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Sat, 22 Aug 2026 13:39:23 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BD=BF=E7=94=A8=E9=92=89=E9=92=89?= =?UTF-8?q?=E5=AE=98=E6=96=B9=E9=80=9A=E7=9F=A5=E5=9B=BE=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/images/logos/dingtalk.jpg | Bin 0 -> 5276 bytes src/components/cards/NotificationChannelCard.vue | 2 +- src/utils/__tests__/imageUtils.spec.ts | 7 ++++++- src/utils/imageUtils.ts | 2 ++ 4 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 src/assets/images/logos/dingtalk.jpg diff --git a/src/assets/images/logos/dingtalk.jpg b/src/assets/images/logos/dingtalk.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e4402c2df1db92a22ac326abd9bfbe11d9047fa8 GIT binary patch literal 5276 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 ukRUg3P+63ZW)}f&k(wCt) { case 'discord': return getLogoUrl('discord') case 'dingtalk': - return getLogoUrl('notification') + return getLogoUrl('dingtalk') case 'webpush': return getLogoUrl('chrome') default: diff --git a/src/utils/__tests__/imageUtils.spec.ts b/src/utils/__tests__/imageUtils.spec.ts index 55b655f8..9124192f 100644 --- a/src/utils/__tests__/imageUtils.spec.ts +++ b/src/utils/__tests__/imageUtils.spec.ts @@ -1,4 +1,4 @@ -import { getDisplayImageUrl, getProxyImageUrl } from '@/utils/imageUtils' +import { getDisplayImageUrl, getLogoUrl, getProxyImageUrl, hasLogo } from '@/utils/imageUtils' import { describe, expect, it } from 'vitest' describe('image URL helpers', () => { @@ -23,4 +23,9 @@ describe('image URL helpers', () => { expect(getProxyImageUrl('data:image/png;base64,abc', { useCache: true })).toBe('data:image/png;base64,abc') expect(getProxyImageUrl('', { useCache: true })).toBe('') }) + + it('exposes the official DingTalk logo for notification channels', () => { + expect(hasLogo('dingtalk')).toBe(true) + expect(getLogoUrl('dingtalk')).toContain('dingtalk') + }) }) diff --git a/src/utils/imageUtils.ts b/src/utils/imageUtils.ts index ba6d45c9..1021afd4 100644 --- a/src/utils/imageUtils.ts +++ b/src/utils/imageUtils.ts @@ -19,6 +19,7 @@ import clawbotLogo from '@/assets/images/logos/clawbot.png' import telegramLogo from '@/assets/images/logos/telegram.webp' import slackLogo from '@/assets/images/logos/slack.webp' import discordLogo from '@/assets/images/logos/discord.png' +import dingtalkLogo from '@/assets/images/logos/dingtalk.jpg' import synologychatLogo from '@/assets/images/logos/synologychat.png' import vocechatLogo from '@/assets/images/logos/vocechat.png' import downloaderLogo from '@/assets/images/logos/downloader.png' @@ -53,6 +54,7 @@ const logoMap: Record = { telegram: telegramLogo, slack: slackLogo, discord: discordLogo, + dingtalk: dingtalkLogo, synologychat: synologychatLogo, vocechat: vocechatLogo, downloader: downloaderLogo,