feat(groups): 放行 kimi/zhipu/deepseek 平台分组创建入口

PR #5666 引入 CN 平台后,路由/调度/前端类型均已支持 CN 平台分组,但分组
创建入口两头缺失:后端 Create/UpdateGroupRequest 的 platform oneof 白名单
与前端 GroupsView 平台选项都没有三平台,导致 CN 账号「无可用分组」、整条
流量链路不通(composite 不能作为替代:CN 不可为 composite 路由目标)。

- group_handler.go: 两处 oneof 加 kimi/zhipu/deepseek;composite 路由目标
  白名单有意不动(DetectModelPlatform/isConcreteRequestPlatform 均无 CN 分支)
- GroupsView: platformOptions/platformFilterOptions 补三项;两处徽章配色链
  按 platformColors.ts 色系补 CN 分支
- i18n: admin.groups.platforms 补 kimi/zhipu/deepseek 键(zh/en),缺键时
  分组徽章/GroupRPM/RateMultipliers 弹窗/ChannelsView 会渲染原始 key
- GroupBadge: badgeClass/labelClass 补 CN 配色
- 新增表驱动测试:9 平台 Create/Update 全放行、非法值(别名/大小写/空格)
  全拒绝、composite target 对 CN 保持拒绝的守卫
This commit is contained in:
shaw
2026-08-17 17:28:51 +08:00
parent e330c243a8
commit 7cdca9e495
6 changed files with 135 additions and 4 deletions
@@ -162,6 +162,15 @@ const labelClass = computed(() => {
if (props.platform === 'grok') {
return `${base} bg-zinc-300/70 text-zinc-800 dark:bg-zinc-700/60 dark:text-zinc-200`
}
if (props.platform === 'kimi') {
return `${base} bg-pink-200/60 text-pink-800 dark:bg-pink-800/40 dark:text-pink-300`
}
if (props.platform === 'zhipu') {
return `${base} bg-indigo-200/60 text-indigo-800 dark:bg-indigo-800/40 dark:text-indigo-300`
}
if (props.platform === 'deepseek') {
return `${base} bg-teal-200/60 text-teal-800 dark:bg-teal-800/40 dark:text-teal-300`
}
if (props.platform === 'composite') {
return `${base} bg-cyan-200/70 text-cyan-900 dark:bg-cyan-900/50 dark:text-cyan-300`
}
@@ -200,6 +209,21 @@ const badgeClass = computed(() => {
? 'bg-zinc-200 text-zinc-800 dark:bg-zinc-700 dark:text-zinc-100'
: 'bg-zinc-100 text-zinc-700 dark:bg-zinc-800 dark:text-zinc-200'
}
if (props.platform === 'kimi') {
return isSubscription.value
? 'bg-pink-100 text-pink-700 dark:bg-pink-900/30 dark:text-pink-400'
: 'bg-pink-50 text-pink-700 dark:bg-pink-900/20 dark:text-pink-400'
}
if (props.platform === 'zhipu') {
return isSubscription.value
? 'bg-indigo-100 text-indigo-700 dark:bg-indigo-900/30 dark:text-indigo-400'
: 'bg-indigo-50 text-indigo-700 dark:bg-indigo-900/20 dark:text-indigo-400'
}
if (props.platform === 'deepseek') {
return isSubscription.value
? 'bg-teal-100 text-teal-700 dark:bg-teal-900/30 dark:text-teal-400'
: 'bg-teal-50 text-teal-700 dark:bg-teal-900/20 dark:text-teal-400'
}
if (props.platform === 'composite') {
return isSubscription.value
? 'bg-cyan-100 text-cyan-800 dark:bg-cyan-900/30 dark:text-cyan-300'
@@ -950,6 +950,9 @@ export default {
gemini: 'Gemini',
antigravity: 'Antigravity',
grok: 'Grok',
kimi: 'Kimi',
zhipu: 'Zhipu GLM',
deepseek: 'DeepSeek',
composite: 'Composite',
},
deleteConfirm:
@@ -883,6 +883,9 @@ export default {
gemini: 'Gemini',
antigravity: 'Antigravity',
grok: 'Grok',
kimi: 'Kimi',
zhipu: 'Zhipu GLM',
deepseek: 'DeepSeek',
composite: 'Composite',
},
saving: '保存中...',
+20 -2
View File
@@ -146,7 +146,13 @@
? 'bg-purple-100 text-purple-700 dark:bg-purple-900/30 dark:text-purple-400'
: value === 'grok'
? 'bg-zinc-200 text-zinc-800 dark:bg-zinc-700 dark:text-zinc-100'
: 'bg-blue-100 text-blue-700 dark:bg-blue-900/30 dark:text-blue-400',
: value === 'kimi'
? 'bg-pink-100 text-pink-700 dark:bg-pink-900/30 dark:text-pink-400'
: value === 'zhipu'
? 'bg-indigo-100 text-indigo-700 dark:bg-indigo-900/30 dark:text-indigo-400'
: value === 'deepseek'
? 'bg-teal-100 text-teal-700 dark:bg-teal-900/30 dark:text-teal-400'
: 'bg-blue-100 text-blue-700 dark:bg-blue-900/30 dark:text-blue-400',
]"
>
<PlatformIcon :platform="value" size="xs" />
@@ -3965,7 +3971,13 @@
? 'bg-purple-100 text-purple-700 dark:bg-purple-900/30 dark:text-purple-400'
: group.platform === 'grok'
? 'bg-zinc-200 text-zinc-800 dark:bg-zinc-700 dark:text-zinc-100'
: 'bg-blue-100 text-blue-700 dark:bg-blue-900/30 dark:text-blue-400',
: group.platform === 'kimi'
? 'bg-pink-100 text-pink-700 dark:bg-pink-900/30 dark:text-pink-400'
: group.platform === 'zhipu'
? 'bg-indigo-100 text-indigo-700 dark:bg-indigo-900/30 dark:text-indigo-400'
: group.platform === 'deepseek'
? 'bg-teal-100 text-teal-700 dark:bg-teal-900/30 dark:text-teal-400'
: 'bg-blue-100 text-blue-700 dark:bg-blue-900/30 dark:text-blue-400',
]"
>
{{ t("admin.groups.platforms." + group.platform) }}
@@ -4727,6 +4739,9 @@ const platformOptions = computed(() => [
{ value: "gemini", label: "Gemini" },
{ value: "antigravity", label: "Antigravity" },
{ value: "grok", label: "Grok" },
{ value: "kimi", label: "Kimi" },
{ value: "zhipu", label: "Zhipu GLM" },
{ value: "deepseek", label: "DeepSeek" },
{ value: "composite", label: "Composite" },
]);
@@ -4737,6 +4752,9 @@ const platformFilterOptions = computed(() => [
{ value: "gemini", label: "Gemini" },
{ value: "antigravity", label: "Antigravity" },
{ value: "grok", label: "Grok" },
{ value: "kimi", label: "Kimi" },
{ value: "zhipu", label: "Zhipu GLM" },
{ value: "deepseek", label: "DeepSeek" },
{ value: "composite", label: "Composite" },
]);