diff --git a/web/src/components/table/ChannelsTable.js b/web/src/components/table/ChannelsTable.js index 22491e5d..2582b950 100644 --- a/web/src/components/table/ChannelsTable.js +++ b/web/src/components/table/ChannelsTable.js @@ -563,7 +563,7 @@ const ChannelsTable = () => { { node: 'item', name: t('复制'), - type: 'primary', + type: 'tertiary', onClick: () => { Modal.confirm({ title: t('确定是否要复制此渠道?'), @@ -581,15 +581,15 @@ const ChannelsTable = () => { aria-label={t('测试单个渠道操作项目组')} > testChannel(record, '')} > {t('测试')} } onClick={() => { setCurrentTestChannel(record); @@ -605,8 +605,7 @@ const ChannelsTable = () => { { record.status === 1 ? ( manageChannel(record.id, 'disable', record)} > @@ -614,8 +613,6 @@ const ChannelsTable = () => { ) : ( manageChannel(record.id, 'enable', record)} > @@ -635,7 +632,6 @@ const ChannelsTable = () => { ]} > } @@ -645,8 +641,7 @@ const ChannelsTable = () => { ) : ( record.status === 1 ? ( manageChannel(record.id, 'disable', record)} > @@ -654,8 +649,6 @@ const ChannelsTable = () => { ) : ( manageChannel(record.id, 'enable', record)} > @@ -665,7 +658,6 @@ const ChannelsTable = () => { )} { @@ -683,7 +675,6 @@ const ChannelsTable = () => { > } - theme='light' type='tertiary' size="small" /> @@ -695,23 +686,20 @@ const ChannelsTable = () => { return ( manageTag(record.key, 'enable')} > {t('启用全部')} manageTag(record.key, 'disable')} > {t('禁用全部')} { @@ -783,22 +771,13 @@ const ChannelsTable = () => { onCancel={() => setShowColumnSelector(false)} footer={ - initDefaultColumns()} - > + initDefaultColumns()}> {t('重置')} - setShowColumnSelector(false)} - > + setShowColumnSelector(false)}> {t('取消')} - setShowColumnSelector(false)} - > + setShowColumnSelector(false)}> {t('确定')} @@ -1605,7 +1584,6 @@ const ChannelsTable = () => { { @@ -1622,8 +1600,7 @@ const ChannelsTable = () => { setShowBatchSetTag(true)} className="w-full md:w-auto" > @@ -1638,8 +1615,7 @@ const ChannelsTable = () => { { Modal.confirm({ @@ -1657,7 +1633,23 @@ const ChannelsTable = () => { { + Modal.confirm({ + title: t('确定是否要修复数据库一致性?'), + content: t('进行该操作时,可能导致渠道访问错误,请仅在数据库出现问题时使用'), + onOk: () => fixChannelsAbilities(), + size: 'sm', + centered: true, + }); + }} + > + {t('修复数据库一致性')} + + + + { @@ -1676,7 +1668,6 @@ const ChannelsTable = () => { { @@ -1692,25 +1683,6 @@ const ChannelsTable = () => { {t('删除禁用通道')} - - { - Modal.confirm({ - title: t('确定是否要修复数据库一致性?'), - content: t('进行该操作时,可能导致渠道访问错误,请仅在数据库出现问题时使用'), - onOk: () => fixChannelsAbilities(), - size: 'sm', - centered: true, - }); - }} - > - {t('修复数据库一致性')} - - } > @@ -1721,8 +1693,7 @@ const ChannelsTable = () => { setCompactMode(!compactMode)} > @@ -1825,8 +1796,7 @@ const ChannelsTable = () => { @@ -1835,7 +1805,6 @@ const ChannelsTable = () => { setShowColumnSelector(true)} className="w-full md:w-auto" @@ -1898,7 +1867,7 @@ const ChannelsTable = () => { { { if (formApi) { formApi.reset(); @@ -2033,61 +2002,6 @@ const ChannelsTable = () => { {t('共')} {currentTestChannel.models.split(',').length} {t('个模型')} - - {/* 搜索与操作按钮 */} - - { - setModelSearchKeyword(v); - setModelTablePage(1); - }} - className="!w-full" - prefix={} - showClear - /> - - { - if (selectedModelKeys.length === 0) { - showError(t('请先选择模型!')); - return; - } - copy(selectedModelKeys.join(',')).then((ok) => { - if (ok) { - showSuccess(t('已复制 ${count} 个模型').replace('${count}', selectedModelKeys.length)); - } else { - showError(t('复制失败,请手动复制')); - } - }); - }} - > - {t('复制已选')} - - - { - if (!currentTestChannel) return; - const successKeys = currentTestChannel.models - .split(',') - .filter((m) => m.toLowerCase().includes(modelSearchKeyword.toLowerCase())) - .filter((m) => { - const result = modelTestResults[`${currentTestChannel.id}-${m}`]; - return result && result.success; - }); - if (successKeys.length === 0) { - showInfo(t('暂无成功模型')); - } - setSelectedModelKeys(successKeys); - }} - > - {t('选择成功')} - - ) } @@ -2097,15 +2011,13 @@ const ChannelsTable = () => { {isBatchTesting ? ( {t('停止测试')} ) : ( @@ -2113,8 +2025,6 @@ const ChannelsTable = () => { )} { {currentTestChannel && ( + {/* 搜索与操作按钮 */} + + { + setModelSearchKeyword(v); + setModelTablePage(1); + }} + className="!w-full" + prefix={} + showClear + /> + + { + if (selectedModelKeys.length === 0) { + showError(t('请先选择模型!')); + return; + } + copy(selectedModelKeys.join(',')).then((ok) => { + if (ok) { + showSuccess(t('已复制 ${count} 个模型').replace('${count}', selectedModelKeys.length)); + } else { + showError(t('复制失败,请手动复制')); + } + }); + }} + > + {t('复制已选')} + + + { + if (!currentTestChannel) return; + const successKeys = currentTestChannel.models + .split(',') + .filter((m) => m.toLowerCase().includes(modelSearchKeyword.toLowerCase())) + .filter((m) => { + const result = modelTestResults[`${currentTestChannel.id}-${m}`]; + return result && result.success; + }); + if (successKeys.length === 0) { + showInfo(t('暂无成功模型')); + } + setSelectedModelKeys(successKeys); + }} + > + {t('选择成功')} + + { const isTesting = testingModels.has(record.model); return ( testChannel(currentTestChannel, record.model)} loading={isTesting} size='small' diff --git a/web/src/components/table/LogsTable.js b/web/src/components/table/LogsTable.js index 964dac23..bff87675 100644 --- a/web/src/components/table/LogsTable.js +++ b/web/src/components/table/LogsTable.js @@ -697,22 +697,13 @@ const LogsTable = () => { onCancel={() => setShowColumnSelector(false)} footer={ - initDefaultColumns()} - > + initDefaultColumns()}> {t('重置')} - setShowColumnSelector(false)} - > + setShowColumnSelector(false)}> {t('取消')} - setShowColumnSelector(false)} - > + setShowColumnSelector(false)}> {t('确定')} @@ -1222,7 +1213,7 @@ const LogsTable = () => { style={{ fontWeight: 500, boxShadow: '0 2px 8px rgba(0, 0, 0, 0.1)', - padding: 15, + padding: 13, }} className='!rounded-lg' > @@ -1233,7 +1224,7 @@ const LogsTable = () => { style={{ fontWeight: 500, boxShadow: '0 2px 8px rgba(0, 0, 0, 0.1)', - padding: 15, + padding: 13, }} className='!rounded-lg' > @@ -1245,7 +1236,7 @@ const LogsTable = () => { border: 'none', boxShadow: '0 2px 8px rgba(0, 0, 0, 0.1)', fontWeight: 500, - padding: 15, + padding: 13, }} className='!rounded-lg' > @@ -1254,8 +1245,7 @@ const LogsTable = () => { setCompactMode(!compactMode)} size="small" @@ -1384,7 +1374,7 @@ const LogsTable = () => { { {t('查询')} { if (formApi) { formApi.reset(); @@ -1407,7 +1397,6 @@ const LogsTable = () => { {t('重置')} setShowColumnSelector(true)} size="small" diff --git a/web/src/components/table/MjLogsTable.js b/web/src/components/table/MjLogsTable.js index 4e43fd18..57e221d9 100644 --- a/web/src/components/table/MjLogsTable.js +++ b/web/src/components/table/MjLogsTable.js @@ -741,22 +741,13 @@ const LogsTable = () => { onCancel={() => setShowColumnSelector(false)} footer={ - initDefaultColumns()} - > + initDefaultColumns()}> {t('重置')} - setShowColumnSelector(false)} - > + setShowColumnSelector(false)}> {t('取消')} - setShowColumnSelector(false)} - > + setShowColumnSelector(false)}> {t('确定')} @@ -831,8 +822,7 @@ const LogsTable = () => { )} setCompactMode(!compactMode)} size="small" @@ -897,7 +887,7 @@ const LogsTable = () => { { {t('查询')} { if (formApi) { formApi.reset(); @@ -920,7 +910,6 @@ const LogsTable = () => { {t('重置')} setShowColumnSelector(true)} size="small" diff --git a/web/src/components/table/RedemptionsTable.js b/web/src/components/table/RedemptionsTable.js index a2c27031..b463294e 100644 --- a/web/src/components/table/RedemptionsTable.js +++ b/web/src/components/table/RedemptionsTable.js @@ -139,6 +139,7 @@ const RedemptionsTable = () => { title: '', dataIndex: 'operate', fixed: 'right', + width: 205, render: (text, record, index) => { // 创建更多操作的下拉菜单项 const moreMenuItems = [ @@ -191,7 +192,6 @@ const RedemptionsTable = () => { @@ -199,8 +199,6 @@ const RedemptionsTable = () => { { await copyText(record.key); @@ -209,7 +207,6 @@ const RedemptionsTable = () => { {t('复制')} { @@ -226,7 +223,6 @@ const RedemptionsTable = () => { menu={moreMenuItems} > } @@ -435,8 +431,7 @@ const RedemptionsTable = () => { {t('兑换码可以批量生成和分发,适合用于推广活动或批量充值。')} setCompactMode(!compactMode)} size="small" @@ -452,7 +447,6 @@ const RedemptionsTable = () => { { @@ -466,7 +460,7 @@ const RedemptionsTable = () => { {t('添加兑换码')} { if (selectedKeys.length === 0) { @@ -539,7 +533,7 @@ const RedemptionsTable = () => { { {t('查询')} { if (formApi) { formApi.reset(); diff --git a/web/src/components/table/TaskLogsTable.js b/web/src/components/table/TaskLogsTable.js index 3928ed77..ba4dcd50 100644 --- a/web/src/components/table/TaskLogsTable.js +++ b/web/src/components/table/TaskLogsTable.js @@ -595,22 +595,13 @@ const LogsTable = () => { onCancel={() => setShowColumnSelector(false)} footer={ - initDefaultColumns()} - > + initDefaultColumns()}> {t('重置')} - setShowColumnSelector(false)} - > + setShowColumnSelector(false)}> {t('取消')} - setShowColumnSelector(false)} - > + setShowColumnSelector(false)}> {t('确定')} @@ -667,8 +658,7 @@ const LogsTable = () => { {t('任务记录')} setCompactMode(!compactMode)} size="small" @@ -733,7 +723,7 @@ const LogsTable = () => { { {t('查询')} { if (formApi) { formApi.reset(); @@ -756,7 +746,6 @@ const LogsTable = () => { {t('重置')} setShowColumnSelector(true)} size="small" diff --git a/web/src/components/table/TokensTable.js b/web/src/components/table/TokensTable.js index 2eea74ce..ac7fca92 100644 --- a/web/src/components/table/TokensTable.js +++ b/web/src/components/table/TokensTable.js @@ -372,9 +372,8 @@ const TokensTable = () => { aria-label={t('项目操作按钮组')} > { if (chatsArray.length === 0) { showError(t('请联系管理员配置聊天链接')); @@ -395,11 +394,7 @@ const TokensTable = () => { menu={chatsArray} > } size="small" > @@ -407,7 +402,6 @@ const TokensTable = () => { { @@ -419,7 +413,6 @@ const TokensTable = () => { { @@ -705,8 +698,7 @@ const TokensTable = () => { {t('令牌用于API访问认证,可以设置额度限制和模型权限。')} setCompactMode(!compactMode)} size="small" @@ -721,7 +713,6 @@ const TokensTable = () => { { @@ -735,8 +726,7 @@ const TokensTable = () => { {t('添加令牌')} { if (selectedKeys.length === 0) { @@ -750,8 +740,7 @@ const TokensTable = () => { footer: ( { let content = ''; for (let i = 0; i < selectedKeys.length; i++) { @@ -765,7 +754,6 @@ const TokensTable = () => { {t('名称+密钥')} { let content = ''; for (let i = 0; i < selectedKeys.length; i++) { @@ -786,8 +774,7 @@ const TokensTable = () => { {t('复制所选令牌')} { if (selectedKeys.length === 0) { @@ -844,7 +831,7 @@ const TokensTable = () => { { {t('查询')} { if (formApi) { formApi.reset(); diff --git a/web/src/components/table/UsersTable.js b/web/src/components/table/UsersTable.js index 0910170e..193e1d65 100644 --- a/web/src/components/table/UsersTable.js +++ b/web/src/components/table/UsersTable.js @@ -287,7 +287,6 @@ const UsersTable = () => { return ( { @@ -303,7 +302,6 @@ const UsersTable = () => { menu={moreMenuItems} > } @@ -525,8 +523,7 @@ const UsersTable = () => { {t('用户管理页面,可以查看和管理所有注册用户的信息、权限和状态。')} setCompactMode(!compactMode)} size="small" @@ -541,8 +538,6 @@ const UsersTable = () => { { setShowAddUser(true); @@ -598,7 +593,7 @@ const UsersTable = () => { { {t('查询')} { if (formApi) { formApi.reset(); diff --git a/web/src/helpers/render.js b/web/src/helpers/render.js index fd7ae993..12aa01b3 100644 --- a/web/src/helpers/render.js +++ b/web/src/helpers/render.js @@ -53,18 +53,18 @@ import { // 侧边栏图标颜色映射 export const sidebarIconColors = { - dashboard: '#4F46E5', // 紫蓝色 + dashboard: '#10B981', // 绿色 terminal: '#10B981', // 绿色 message: '#06B6D4', // 青色 key: '#3B82F6', // 蓝色 - chart: '#8B5CF6', // 紫色 + chart: '#F59E0B', // 琥珀色 image: '#EC4899', // 粉色 check: '#F59E0B', // 琥珀色 credit: '#F97316', // 橙色 layers: '#EF4444', // 红色 gift: '#F43F5E', // 玫红色 - user: '#6366F1', // 靛蓝色 - settings: '#6B7280', // 灰色 + user: '#10B981', // 绿色 + settings: '#F97316', // 橙色 }; // 获取侧边栏Lucide图标组件 diff --git a/web/src/index.css b/web/src/index.css index 8e71536a..66bc64d3 100644 --- a/web/src/index.css +++ b/web/src/index.css @@ -59,6 +59,11 @@ code { .semi-navigation-item { margin-bottom: 4px !important; + padding: 4px 12px !important; +} + +.semi-navigation-sub-title { + padding: 0 !important; } .semi-navigation-item-icon { @@ -70,6 +75,7 @@ code { margin-right: 0; } +.semi-navigation-item, .semi-navigation-sub-title { height: 100% !important; }