fix: channel affinity tips

This commit is contained in:
Seefs
2026-02-08 23:45:46 +08:00
parent 784ad7d23e
commit 8f831fcdb3

View File

@@ -20,12 +20,12 @@ For commercial licensing, please contact support@quantumnous.com
import React from 'react';
import {
Avatar,
Button,
Space,
Tag,
Tooltip,
Popover,
Typography,
Button
} from '@douyinfe/semi-ui';
import {
timestamp2string,
@@ -41,8 +41,8 @@ import {
renderClaudeModelPrice,
renderModelPrice,
} from '../../../helpers';
import { IconHelpCircle, IconStarStroked } from '@douyinfe/semi-icons';
import { Route } from 'lucide-react';
import { IconHelpCircle } from '@douyinfe/semi-icons';
import { Route, Sparkles } from 'lucide-react';
const colors = [
'amber',
@@ -307,6 +307,9 @@ export const getLogsColumns = ({
render: (text, record, index) => {
let isMultiKey = false;
let multiKeyIndex = -1;
let content = t('渠道') + `${record.channel}`;
let affinity = null;
let showMarker = false;
let other = getLogOther(record.other);
if (other?.admin_info) {
let adminInfo = other.admin_info;
@@ -314,21 +317,71 @@ export const getLogsColumns = ({
isMultiKey = true;
multiKeyIndex = adminInfo.multi_key_index;
}
if (
Array.isArray(adminInfo.use_channel) &&
adminInfo.use_channel.length > 0
) {
content = t('渠道') + `${adminInfo.use_channel.join('->')}`;
}
if (adminInfo.channel_affinity) {
affinity = adminInfo.channel_affinity;
showMarker = true;
}
}
return isAdminUser &&
(record.type === 0 || record.type === 2 || record.type === 5) ? (
<Space>
<Tooltip content={record.channel_name || t('未知渠道')}>
<span>
<Tag
color={colors[parseInt(text) % colors.length]}
shape='circle'
<span style={{ position: 'relative', display: 'inline-block' }}>
<Tooltip content={record.channel_name || t('未知渠道')}>
<span>
<Tag
color={colors[parseInt(text) % colors.length]}
shape='circle'
>
{text}
</Tag>
</span>
</Tooltip>
{showMarker && (
<Tooltip
content={
<div style={{ lineHeight: 1.6 }}>
<div>{content}</div>
{affinity ? (
<div style={{ marginTop: 6 }}>
{buildChannelAffinityTooltip(affinity, t)}
</div>
) : null}
</div>
}
>
{text}
</Tag>
</span>
</Tooltip>
<span
style={{
position: 'absolute',
right: -4,
top: -4,
lineHeight: 1,
fontWeight: 600,
color: '#f59e0b',
cursor: 'pointer',
userSelect: 'none',
}}
onClick={(e) => {
e.stopPropagation();
openChannelAffinityUsageCacheModal?.(affinity);
}}
>
<Sparkles
size={14}
strokeWidth={2}
color='currentColor'
fill='currentColor'
/>
</span>
</Tooltip>
)}
</span>
{isMultiKey && (
<Tag color='white' shape='circle'>
{multiKeyIndex}
@@ -559,7 +612,6 @@ export const getLogsColumns = ({
return <></>;
}
let content = t('渠道') + `${record.channel}`;
let affinity = null;
if (record.other !== '') {
let other = JSON.parse(record.other);
if (other === null) {
@@ -567,60 +619,17 @@ export const getLogsColumns = ({
}
if (other.admin_info !== undefined) {
if (
other.admin_info.use_channel !== null &&
other.admin_info.use_channel !== undefined &&
other.admin_info.use_channel !== ''
other.admin_info.use_channel !== null &&
other.admin_info.use_channel !== undefined &&
other.admin_info.use_channel !== ''
) {
let useChannel = other.admin_info.use_channel;
let useChannelStr = useChannel.join('->');
content = t('渠道') + `${useChannelStr}`;
}
if (other.admin_info.channel_affinity) {
affinity = other.admin_info.channel_affinity;
}
}
}
return isAdminUser ? (
<Space>
<div>{content}</div>
{affinity ? (
<Tooltip
content={
<div>
{buildChannelAffinityTooltip(affinity, t)}
<div style={{ marginTop: 6 }}>
<Button
theme='borderless'
size='small'
onClick={(e) => {
e.stopPropagation();
openChannelAffinityUsageCacheModal?.(affinity);
}}
>
{t('查看详情')}
</Button>
</div>
</div>
}
>
<span>
<Tag
className='channel-affinity-tag'
color='cyan'
shape='circle'
>
<span className='channel-affinity-tag-content'>
<IconStarStroked style={{ fontSize: 13 }} />
{t('优选')}
</span>
</Tag>
</span>
</Tooltip>
) : null}
</Space>
) : (
<></>
);
return isAdminUser ? <div>{content}</div> : <></>;
},
},
{