🎨 feat(ui): add icon support for Kling (50) & Jimeng (51) channels and iconize type selector

- import Kling & Jimeng icons from @lobehub/icons
- extend getChannelIcon() to return corresponding icons for new channel types 50 (Kling) and 51 (Jimeng)
- enhance EditChannel type selector:
  • introduce useMemo‐based channelOptionList with leading icons
  • utilize getChannelIcon for consistent icon rendering in dropdown options
- minor refactor: add useMemo and getChannelIcon imports in EditChannel.js
This commit is contained in:
t0ng7u
2025-07-12 00:02:12 +08:00
parent 26ea562fdb
commit cf711d55a5
2 changed files with 23 additions and 3 deletions

View File

@@ -31,6 +31,8 @@ import {
Coze, Coze,
SiliconCloud, SiliconCloud,
FastGPT, FastGPT,
Kling,
Jimeng,
} from '@lobehub/icons'; } from '@lobehub/icons';
import { import {
@@ -386,6 +388,10 @@ export function getChannelIcon(channelType) {
return <XAI size={iconSize} />; return <XAI size={iconSize} />;
case 49: // Coze case 49: // Coze
return <Coze size={iconSize} />; return <Coze size={iconSize} />;
case 50: // 可灵 Kling
return <Kling.Color size={iconSize} />;
case 51: // 即梦 Jimeng
return <Jimeng.Color size={iconSize} />;
case 8: // 自定义渠道 case 8: // 自定义渠道
case 22: // 知识库FastGPT case 22: // 知识库FastGPT
return <FastGPT.Color size={iconSize} />; return <FastGPT.Color size={iconSize} />;

View File

@@ -1,4 +1,4 @@
import React, { useEffect, useState, useRef } from 'react'; import React, { useEffect, useState, useRef, useMemo } from 'react';
import { useNavigate } from 'react-router-dom'; import { useNavigate } from 'react-router-dom';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { import {
@@ -27,7 +27,7 @@ import {
Row, Row,
Col, Col,
} from '@douyinfe/semi-ui'; } from '@douyinfe/semi-ui';
import { getChannelModels, copy } from '../../helpers'; import { getChannelModels, copy, getChannelIcon } from '../../helpers';
import { import {
IconSave, IconSave,
IconClose, IconClose,
@@ -474,6 +474,20 @@ const EditChannel = (props) => {
<Checkbox checked={batch} onChange={() => setBatch(!batch)}>{t('批量创建')}</Checkbox> <Checkbox checked={batch} onChange={() => setBatch(!batch)}>{t('批量创建')}</Checkbox>
) : null; ) : null;
const channelOptionList = useMemo(
() =>
CHANNEL_OPTIONS.map((opt) => ({
...opt,
label: (
<span className="flex items-center gap-2">
{getChannelIcon(opt.value)}
{opt.label}
</span>
),
})),
[],
);
return ( return (
<> <>
<SideSheet <SideSheet
@@ -539,7 +553,7 @@ const EditChannel = (props) => {
label={t('类型')} label={t('类型')}
placeholder={t('请选择渠道类型')} placeholder={t('请选择渠道类型')}
rules={[{ required: true, message: t('请选择渠道类型') }]} rules={[{ required: true, message: t('请选择渠道类型') }]}
optionList={CHANNEL_OPTIONS} optionList={channelOptionList}
style={{ width: '100%' }} style={{ width: '100%' }}
filter filter
searchPosition='dropdown' searchPosition='dropdown'