fix(usage): mark deleted rows and correct api-key header in token chart export

This commit is contained in:
jialin
2026-07-09 15:17:53 +08:00
committed by jialin
parent eb037a3613
commit 555aab714e
+53 -9
View File
@@ -5,6 +5,7 @@ import { Table, TableColumnType } from 'antd';
import React, { useEffect } from 'react'; import React, { useEffect } from 'react';
import { useUsageFilters } from '../hooks/use-usage-filters'; import { useUsageFilters } from '../hooks/use-usage-filters';
import useQueryBreakdownList from '../services/use-query-breakdown-list'; import useQueryBreakdownList from '../services/use-query-breakdown-list';
import { withDeletedMark } from '../utils/deleted-label';
import getBreakdownRowKey from '../utils/get-breakdown-row-key'; import getBreakdownRowKey from '../utils/get-breakdown-row-key';
import FilterBar from './filter-bar'; import FilterBar from './filter-bar';
@@ -49,6 +50,7 @@ const ExportData: React.FC<{
initialState initialState
} = props || {}; } = props || {};
const intl = useIntl(); const intl = useIntl();
const deletedWord = intl.formatMessage({ id: 'usage.table.deleted' });
// Members are forced to self scope, where the backend forbids grouping by // Members are forced to self scope, where the backend forbids grouping by
// user (privacy) — including it 403s the export request. Drop the user // user (privacy) — including it 403s the export request. Drop the user
@@ -123,22 +125,49 @@ const ExportData: React.FC<{
{ {
title: intl.formatMessage({ id: 'usage.filter.group.model' }), title: intl.formatMessage({ id: 'usage.filter.group.model' }),
dataIndex: ['route', 'label'], dataIndex: ['route', 'label'],
render: (text: string) => { render: (text: string, record: any) => {
return <AutoTooltip ghost>{text}</AutoTooltip>; return (
<AutoTooltip ghost>
{withDeletedMark(
text,
record?.route?.deleted,
deletedWord,
record?.route?.identity?.current?.route_id
)}
</AutoTooltip>
);
} }
}, },
{ {
title: intl.formatMessage({ id: 'dashboard.usage.export.user' }), title: intl.formatMessage({ id: 'dashboard.usage.export.user' }),
dataIndex: ['user', 'label'], dataIndex: ['user', 'label'],
render: (text: string) => { render: (text: string, record: any) => {
return <AutoTooltip ghost>{text}</AutoTooltip>; return (
<AutoTooltip ghost>
{withDeletedMark(
text,
record?.user?.deleted,
deletedWord,
record?.user?.identity?.current?.user_id
)}
</AutoTooltip>
);
} }
}, },
{ {
title: intl.formatMessage({ id: 'usage.filter.group.apikey' }), title: intl.formatMessage({ id: 'usage.filter.group.apikey' }),
dataIndex: ['api_key', 'label'], dataIndex: ['api_key', 'label'],
render: (text: string, record: any) => { render: (text: string, record: any) => {
return <AutoTooltip ghost>{text}</AutoTooltip>; return (
<AutoTooltip ghost>
{withDeletedMark(
text,
record?.api_key?.deleted,
deletedWord,
record?.api_key?.identity?.current?.api_key_id
)}
</AutoTooltip>
);
} }
}, },
{ {
@@ -215,9 +244,24 @@ const ExportData: React.FC<{
{ {
jsonData: (dataSource.dataList || []).map((item: any) => ({ jsonData: (dataSource.dataList || []).map((item: any) => ({
date: item?.date?.label, date: item?.date?.label,
user: item?.user?.label, user: withDeletedMark(
route: item?.route?.label, item?.user?.label ?? '',
api_key: item?.api_key?.label, item?.user?.deleted,
deletedWord,
item?.user?.identity?.current?.user_id
),
route: withDeletedMark(
item?.route?.label ?? '',
item?.route?.deleted,
deletedWord,
item?.route?.identity?.current?.route_id
),
api_key: withDeletedMark(
item?.api_key?.label ?? '',
item?.api_key?.deleted,
deletedWord,
item?.api_key?.identity?.current?.api_key_id
),
input_tokens: item?.input_tokens, input_tokens: item?.input_tokens,
input_cached_tokens: item?.input_cached_tokens, input_cached_tokens: item?.input_cached_tokens,
output_tokens: item?.output_tokens, output_tokens: item?.output_tokens,
@@ -240,7 +284,7 @@ const ExportData: React.FC<{
date: intl.formatMessage({ id: 'dashboard.usage.export.date' }), date: intl.formatMessage({ id: 'dashboard.usage.export.date' }),
user: intl.formatMessage({ id: 'dashboard.usage.export.user' }), user: intl.formatMessage({ id: 'dashboard.usage.export.user' }),
route: intl.formatMessage({ id: 'usage.filter.group.model' }), route: intl.formatMessage({ id: 'usage.filter.group.model' }),
api_key: intl.formatMessage({ id: 'usage.table.provider' }), api_key: intl.formatMessage({ id: 'usage.filter.group.apikey' }),
input_tokens: intl.formatMessage({ input_tokens: intl.formatMessage({
id: 'usage.filter.inputTokens' id: 'usage.filter.inputTokens'
}), }),