Skip to content

Commit b3c8faa

Browse files
committed
feat: add Feishu notification configuration UI
1 parent 9a480dd commit b3c8faa

10 files changed

Lines changed: 284 additions & 2 deletions

File tree

src/assets/images/logos/feishu.png

17.1 KB
Loading

src/components/cards/NotificationChannelCard.vue

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ const notificationInfo = ref<NotificationConf>({
4747
// 各通知类型的名称字典
4848
const notificationTypeNames: { [key: string]: string } = {
4949
wechat: t('notification.wechat.name'),
50+
feishu: t('notification.feishu.name'),
5051
wechatclawbot: t('notification.wechatclawbot.name'),
5152
telegram: t('notification.telegram.name'),
5253
qqbot: t('notification.qqbot.name'),
@@ -417,6 +418,8 @@ const getIcon = computed(() => {
417418
return getLogoUrl('wechat')
418419
case 'wechatclawbot':
419420
return getLogoUrl('wechatclawbot')
421+
case 'feishu':
422+
return getLogoUrl('feishu')
420423
case 'telegram':
421424
return getLogoUrl('telegram')
422425
case 'qqbot':
@@ -777,6 +780,84 @@ watch(notificationInfoDialog, value => {
777780
</VCard>
778781
</VCol>
779782
</VRow>
783+
<VRow v-else-if="notificationInfo.type == 'feishu'">
784+
<VCol cols="12" md="6">
785+
<VTextField
786+
v-model="notificationInfo.name"
787+
:label="t('notification.name')"
788+
:placeholder="t('notification.name')"
789+
:hint="t('notification.nameHint')"
790+
persistent-hint
791+
prepend-inner-icon="mdi-label"
792+
/>
793+
</VCol>
794+
<VCol cols="12" md="6">
795+
<VTextField
796+
v-model="notificationInfo.config.FEISHU_APP_ID"
797+
:label="t('notification.feishu.appId')"
798+
:hint="t('notification.feishu.appIdHint')"
799+
persistent-hint
800+
prepend-inner-icon="mdi-application"
801+
/>
802+
</VCol>
803+
<VCol cols="12" md="6">
804+
<VTextField
805+
v-model="notificationInfo.config.FEISHU_APP_SECRET"
806+
:label="t('notification.feishu.appSecret')"
807+
:hint="t('notification.feishu.appSecretHint')"
808+
persistent-hint
809+
prepend-inner-icon="mdi-key"
810+
/>
811+
</VCol>
812+
<VCol cols="12" md="6">
813+
<VTextField
814+
v-model="notificationInfo.config.FEISHU_OPEN_ID"
815+
:label="t('notification.feishu.openId')"
816+
:placeholder="t('notification.feishu.openIdPlaceholder')"
817+
:hint="t('notification.feishu.openIdHint')"
818+
persistent-hint
819+
prepend-inner-icon="mdi-account"
820+
/>
821+
</VCol>
822+
<VCol cols="12" md="6">
823+
<VTextField
824+
v-model="notificationInfo.config.FEISHU_CHAT_ID"
825+
:label="t('notification.feishu.chatId')"
826+
:placeholder="t('notification.feishu.chatIdPlaceholder')"
827+
:hint="t('notification.feishu.chatIdHint')"
828+
persistent-hint
829+
prepend-inner-icon="mdi-chat-processing"
830+
/>
831+
</VCol>
832+
<VCol cols="12" md="6">
833+
<VTextField
834+
v-model="notificationInfo.config.FEISHU_ADMINS"
835+
:label="t('notification.feishu.admins')"
836+
:placeholder="t('notification.feishu.adminsPlaceholder')"
837+
:hint="t('notification.feishu.adminsHint')"
838+
persistent-hint
839+
prepend-inner-icon="mdi-account-supervisor"
840+
/>
841+
</VCol>
842+
<VCol cols="12" md="6">
843+
<VTextField
844+
v-model="notificationInfo.config.FEISHU_VERIFICATION_TOKEN"
845+
:label="t('notification.feishu.verificationToken')"
846+
:hint="t('notification.feishu.verificationTokenHint')"
847+
persistent-hint
848+
prepend-inner-icon="mdi-shield-key"
849+
/>
850+
</VCol>
851+
<VCol cols="12" md="6">
852+
<VTextField
853+
v-model="notificationInfo.config.FEISHU_ENCRYPT_KEY"
854+
:label="t('notification.feishu.encryptKey')"
855+
:hint="t('notification.feishu.encryptKeyHint')"
856+
persistent-hint
857+
prepend-inner-icon="mdi-lock"
858+
/>
859+
</VCol>
860+
</VRow>
780861
<VRow v-else-if="notificationInfo.type == 'telegram'">
781862
<VCol cols="12" md="6">
782863
<VTextField

src/composables/useSetupWizard.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,7 @@ export function useSetupWizard() {
328328
},
329329
// 通知映射
330330
notification: {
331+
'feishu': 'FeishuModule',
331332
'telegram': 'TelegramModule',
332333
'wechat': 'WechatModule',
333334
'wechatclawbot': 'WechatClawBotModule',
@@ -427,6 +428,7 @@ export function useSetupWizard() {
427428
if (!wizardData.value.notification.name || wizardData.value.notification.name.includes('通知')) {
428429
const displayNameMap: Record<string, string> = {
429430
wechat: '企业微信',
431+
feishu: '飞书',
430432
wechatclawbot: '微信 ClawBot',
431433
telegram: 'Telegram',
432434
slack: 'Slack',
@@ -679,6 +681,16 @@ export function useSetupWizard() {
679681
break
680682
case 'wechatclawbot':
681683
break
684+
case 'feishu':
685+
if (!config.FEISHU_APP_ID?.trim()) {
686+
errors.push(t('notification.feishu.appIdRequired'))
687+
validationErrors.value.notification.FEISHU_APP_ID = true
688+
}
689+
if (!config.FEISHU_APP_SECRET?.trim()) {
690+
errors.push(t('notification.feishu.appSecretRequired'))
691+
validationErrors.value.notification.FEISHU_APP_SECRET = true
692+
}
693+
break
682694
case 'telegram':
683695
if (!config.TELEGRAM_TOKEN?.trim()) {
684696
errors.push(t('notification.telegram.tokenRequired'))

src/locales/en-US.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,28 @@ export default {
505505
logoutSuccess: 'WeChat ClawBot logged out',
506506
logoutFailed: 'Failed to logout WeChat ClawBot',
507507
},
508+
feishu: {
509+
name: 'Feishu',
510+
appId: 'App ID',
511+
appIdHint: 'App ID of the Feishu Open Platform application',
512+
appIdRequired: 'App ID cannot be empty',
513+
appSecret: 'App Secret',
514+
appSecretHint: 'App Secret of the Feishu Open Platform application',
515+
appSecretRequired: 'App Secret cannot be empty',
516+
openId: 'Default User Open ID',
517+
openIdHint: 'Default recipient user Open ID; leave empty to prefer recent interacted users',
518+
openIdPlaceholder: 'ou_xxx',
519+
chatId: 'Default Group Chat ID',
520+
chatIdHint: 'Default recipient group chat ID; either this or Open ID is enough',
521+
chatIdPlaceholder: 'oc_xxx',
522+
admins: 'Admin Whitelist',
523+
adminsHint: 'Open IDs allowed to run commands and admin actions, separated by commas',
524+
adminsPlaceholder: 'Open ID list, separated by commas',
525+
verificationToken: 'Verification Token',
526+
verificationTokenHint: 'Verification Token for Feishu event subscription, required when validation is enabled',
527+
encryptKey: 'Encrypt Key',
528+
encryptKeyHint: 'Encrypt Key for Feishu event subscription, required when encryption is enabled',
529+
},
508530
telegram: {
509531
name: 'Telegram',
510532
token: 'Bot Token',
@@ -1769,6 +1791,7 @@ export default {
17691791
channel: 'Notification',
17701792
wechat: 'WeChat Work',
17711793
wechatClawBot: 'WeChat ClawBot',
1794+
feishu: 'Feishu',
17721795
resourceDownload: 'Resource Download',
17731796
mediaImport: 'Media Import',
17741797
subscription: 'Subscription',
@@ -2851,6 +2874,7 @@ export default {
28512874
accountBinding: 'Account Binding',
28522875
wechatUser: 'WeChat Work User',
28532876
wechatClawBotUser: 'WeChat ClawBot User',
2877+
feishuUser: 'Feishu User',
28542878
telegramUser: 'Telegram User',
28552879
slackUser: 'Slack User',
28562880
discordUser: 'Discord User',
@@ -3441,6 +3465,7 @@ export default {
34413465
typeHint: 'Select the type of notification channel to use',
34423466
name: 'Notification Name',
34433467
nameHint: 'Set a name for the notification channel',
3468+
feishuConfig: 'Feishu Configuration',
34443469
telegramConfig: 'Telegram Configuration',
34453470
emailConfig: 'Email Configuration',
34463471
botToken: 'Bot Token',

src/locales/zh-CN.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -500,6 +500,28 @@ export default {
500500
logoutSuccess: '微信 ClawBot 已退出登录',
501501
logoutFailed: '微信 ClawBot 退出登录失败',
502502
},
503+
feishu: {
504+
name: '飞书',
505+
appId: 'App ID',
506+
appIdHint: '飞书开放平台应用的 App ID',
507+
appIdRequired: 'App ID 不能为空',
508+
appSecret: 'App Secret',
509+
appSecretHint: '飞书开放平台应用的 App Secret',
510+
appSecretRequired: 'App Secret 不能为空',
511+
openId: '默认用户 Open ID',
512+
openIdHint: '默认通知接收用户的 Open ID,留空则优先使用互动用户',
513+
openIdPlaceholder: 'ou_xxx',
514+
chatId: '默认群聊 Chat ID',
515+
chatIdHint: '默认通知接收群聊的 Chat ID,和 Open ID 二选一即可',
516+
chatIdPlaceholder: 'oc_xxx',
517+
admins: '管理员白名单',
518+
adminsHint: '允许执行命令和管理操作的 Open ID 列表,多个使用 , 分隔',
519+
adminsPlaceholder: 'Open ID 列表,多个使用 , 分隔',
520+
verificationToken: 'Verification Token',
521+
verificationTokenHint: '飞书事件订阅的 Verification Token,启用事件校验时填写',
522+
encryptKey: 'Encrypt Key',
523+
encryptKeyHint: '飞书事件订阅的 Encrypt Key,启用消息加密时填写',
524+
},
503525
telegram: {
504526
name: 'Telegram',
505527
token: 'Bot Token',
@@ -1739,6 +1761,7 @@ export default {
17391761
channel: '通知',
17401762
wechat: '企业微信',
17411763
wechatClawBot: '微信 ClawBot',
1764+
feishu: '飞书',
17421765
resourceDownload: '资源下载',
17431766
mediaImport: '整理入库',
17441767
subscription: '订阅',
@@ -2803,6 +2826,7 @@ export default {
28032826
accountBinding: '账号绑定',
28042827
wechatUser: '企业微信用户',
28052828
wechatClawBotUser: '微信 ClawBot 用户',
2829+
feishuUser: '飞书用户',
28062830
telegramUser: 'Telegram用户',
28072831
slackUser: 'Slack用户',
28082832
discordUser: 'Discord用户',
@@ -3386,6 +3410,7 @@ export default {
33863410
typeHint: '选择要使用的通知渠道类型',
33873411
name: '通知名称',
33883412
nameHint: '为通知渠道设置一个名称',
3413+
feishuConfig: '飞书配置',
33893414
telegramConfig: 'Telegram 配置',
33903415
emailConfig: '邮件配置',
33913416
botToken: '机器人令牌',

src/locales/zh-TW.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -501,6 +501,28 @@ export default {
501501
logoutSuccess: '微信 ClawBot 已退出登入',
502502
logoutFailed: '微信 ClawBot 退出登入失敗',
503503
},
504+
feishu: {
505+
name: '飛書',
506+
appId: 'App ID',
507+
appIdHint: '飛書開放平台應用的 App ID',
508+
appIdRequired: 'App ID 不能為空',
509+
appSecret: 'App Secret',
510+
appSecretHint: '飛書開放平台應用的 App Secret',
511+
appSecretRequired: 'App Secret 不能為空',
512+
openId: '預設用戶 Open ID',
513+
openIdHint: '預設通知接收用戶的 Open ID,留空則優先使用互動用戶',
514+
openIdPlaceholder: 'ou_xxx',
515+
chatId: '預設群聊 Chat ID',
516+
chatIdHint: '預設通知接收群聊的 Chat ID,和 Open ID 二選一即可',
517+
chatIdPlaceholder: 'oc_xxx',
518+
admins: '管理員白名單',
519+
adminsHint: '允許執行命令與管理操作的 Open ID 列表,多個使用 , 分隔',
520+
adminsPlaceholder: 'Open ID 列表,多個使用 , 分隔',
521+
verificationToken: 'Verification Token',
522+
verificationTokenHint: '飛書事件訂閱的 Verification Token,啟用事件校驗時填寫',
523+
encryptKey: 'Encrypt Key',
524+
encryptKeyHint: '飛書事件訂閱的 Encrypt Key,啟用消息加密時填寫',
525+
},
504526
telegram: {
505527
name: 'Telegram',
506528
token: 'Bot Token',
@@ -1741,6 +1763,7 @@ export default {
17411763
channel: '通知',
17421764
wechat: '企業微信',
17431765
wechatClawBot: '微信 ClawBot',
1766+
feishu: '飛書',
17441767
resourceDownload: '資源下載',
17451768
mediaImport: '整理入庫',
17461769
subscription: '訂閱',
@@ -2805,6 +2828,7 @@ export default {
28052828
accountBinding: '賬號綁定',
28062829
wechatUser: '企業微信用戶',
28072830
wechatClawBotUser: '微信 ClawBot 用戶',
2831+
feishuUser: '飛書用戶',
28082832
telegramUser: 'Telegram用戶',
28092833
slackUser: 'Slack用戶',
28102834
discordUser: 'Discord用戶',
@@ -3388,6 +3412,7 @@ export default {
33883412
typeHint: '選擇要使用的通知管道類型',
33893413
name: '通知名稱',
33903414
nameHint: '為通知管道設定一個名稱',
3415+
feishuConfig: '飛書設定',
33913416
telegramConfig: 'Telegram 設定',
33923417
emailConfig: '郵件設定',
33933418
botToken: '機器人權杖',

src/utils/imageUtils.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import plexLogo from '@/assets/images/logos/plex.png'
1414
import trimemediaLogo from '@/assets/images/logos/trimemedia.png'
1515
import ugreenLogo from '@/assets/images/logos/ugreen.png'
1616
import wechatLogo from '@/assets/images/logos/wechat.png'
17+
import feishuLogo from '@/assets/images/logos/feishu.png'
1718
import clawbotLogo from '@/assets/images/logos/clawbot.png'
1819
import telegramLogo from '@/assets/images/logos/telegram.webp'
1920
import slackLogo from '@/assets/images/logos/slack.webp'
@@ -47,6 +48,7 @@ const logoMap: Record<string, string> = {
4748
trimemedia: trimemediaLogo,
4849
ugreen: ugreenLogo,
4950
wechat: wechatLogo,
51+
feishu: feishuLogo,
5052
wechatclawbot: clawbotLogo,
5153
telegram: telegramLogo,
5254
slack: slackLogo,

src/views/setting/AccountSettingNotification.vue

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -357,9 +357,12 @@ onMounted(() => {
357357
<VListItem @click="addNotification('wechatclawbot')">
358358
<VListItemTitle>{{ t('setting.notification.wechatClawBot') }}</VListItemTitle>
359359
</VListItem>
360-
<VListItem @click="addNotification('telegram')">
361-
<VListItemTitle>{{ t('setting.notification.telegram') }}</VListItemTitle>
360+
<VListItem @click="addNotification('feishu')">
361+
<VListItemTitle>{{ t('setting.notification.feishu') }}</VListItemTitle>
362362
</VListItem>
363+
<VListItem @click="addNotification('telegram')">
364+
<VListItemTitle>{{ t('setting.notification.telegram') }}</VListItemTitle>
365+
</VListItem>
363366
<VListItem @click="addNotification('slack')">
364367
<VListItemTitle>{{ t('setting.notification.slack') }}</VListItemTitle>
365368
</VListItem>

0 commit comments

Comments
 (0)