fix: usage locales
This commit is contained in:
+1
-1
@@ -319,7 +319,7 @@ const baseRoutes = [
|
|||||||
// Cross-resource consumption (tokens + GPU/CPU instances + storage).
|
// Cross-resource consumption (tokens + GPU/CPU instances + storage).
|
||||||
// A folder so it matches the other top-level groups; more usage views can
|
// A folder so it matches the other top-level groups; more usage views can
|
||||||
// graduate in here later.
|
// graduate in here later.
|
||||||
name: 'usage',
|
name: 'billingAndUsage',
|
||||||
path: '/usage',
|
path: '/usage',
|
||||||
key: 'usageGroup',
|
key: 'usageGroup',
|
||||||
icon: 'icon-usage-outlined',
|
icon: 'icon-usage-outlined',
|
||||||
|
|||||||
@@ -21,6 +21,11 @@ export default {
|
|||||||
'usage.filter.granularity.day': 'Day',
|
'usage.filter.granularity.day': 'Day',
|
||||||
'usage.filter.granularity.week': 'Week',
|
'usage.filter.granularity.week': 'Week',
|
||||||
'usage.filter.granularity.month': 'Month',
|
'usage.filter.granularity.month': 'Month',
|
||||||
|
'usage.tabs.summary': 'Summary',
|
||||||
|
'usage.tabs.tokens': 'Tokens',
|
||||||
|
'usage.tabs.gpuInstances': 'GPU Instances',
|
||||||
|
'usage.tabs.storage': 'Storage',
|
||||||
|
'usage.tabs.resourceEvents': 'Resource Events',
|
||||||
'usage.tabs.models': 'Models',
|
'usage.tabs.models': 'Models',
|
||||||
'usage.tabs.apikeys': 'API Keys',
|
'usage.tabs.apikeys': 'API Keys',
|
||||||
'usage.tabs.users': 'User',
|
'usage.tabs.users': 'User',
|
||||||
|
|||||||
@@ -21,6 +21,11 @@ export default {
|
|||||||
'usage.filter.granularity.day': 'Day',
|
'usage.filter.granularity.day': 'Day',
|
||||||
'usage.filter.granularity.week': 'Week',
|
'usage.filter.granularity.week': 'Week',
|
||||||
'usage.filter.granularity.month': 'Month',
|
'usage.filter.granularity.month': 'Month',
|
||||||
|
'usage.tabs.summary': '概要',
|
||||||
|
'usage.tabs.tokens': 'トークン',
|
||||||
|
'usage.tabs.gpuInstances': 'GPU インスタンス',
|
||||||
|
'usage.tabs.storage': 'ストレージ',
|
||||||
|
'usage.tabs.resourceEvents': 'リソースイベント',
|
||||||
'usage.tabs.models': 'Models',
|
'usage.tabs.models': 'Models',
|
||||||
'usage.tabs.apikeys': 'API Keys',
|
'usage.tabs.apikeys': 'API Keys',
|
||||||
'usage.tabs.users': 'User',
|
'usage.tabs.users': 'User',
|
||||||
|
|||||||
@@ -21,6 +21,11 @@ export default {
|
|||||||
'usage.filter.granularity.day': 'Day',
|
'usage.filter.granularity.day': 'Day',
|
||||||
'usage.filter.granularity.week': 'Week',
|
'usage.filter.granularity.week': 'Week',
|
||||||
'usage.filter.granularity.month': 'Month',
|
'usage.filter.granularity.month': 'Month',
|
||||||
|
'usage.tabs.summary': 'Обзор',
|
||||||
|
'usage.tabs.tokens': 'Токены',
|
||||||
|
'usage.tabs.gpuInstances': 'GPU-инстансы',
|
||||||
|
'usage.tabs.storage': 'Хранилище',
|
||||||
|
'usage.tabs.resourceEvents': 'События ресурсов',
|
||||||
'usage.tabs.models': 'Models',
|
'usage.tabs.models': 'Models',
|
||||||
'usage.tabs.apikeys': 'API Keys',
|
'usage.tabs.apikeys': 'API Keys',
|
||||||
'usage.tabs.users': 'User',
|
'usage.tabs.users': 'User',
|
||||||
|
|||||||
@@ -21,6 +21,11 @@ export default {
|
|||||||
'usage.filter.granularity.day': 'Day',
|
'usage.filter.granularity.day': 'Day',
|
||||||
'usage.filter.granularity.week': 'Week',
|
'usage.filter.granularity.week': 'Week',
|
||||||
'usage.filter.granularity.month': 'Month',
|
'usage.filter.granularity.month': 'Month',
|
||||||
|
'usage.tabs.summary': 'Özet',
|
||||||
|
'usage.tabs.tokens': 'Token',
|
||||||
|
'usage.tabs.gpuInstances': 'GPU Örnekleri',
|
||||||
|
'usage.tabs.storage': 'Depolama',
|
||||||
|
'usage.tabs.resourceEvents': 'Kaynak Olayları',
|
||||||
'usage.tabs.models': 'Models',
|
'usage.tabs.models': 'Models',
|
||||||
'usage.tabs.apikeys': 'API Keys',
|
'usage.tabs.apikeys': 'API Keys',
|
||||||
'usage.tabs.users': 'User',
|
'usage.tabs.users': 'User',
|
||||||
|
|||||||
@@ -21,6 +21,11 @@ export default {
|
|||||||
'usage.filter.granularity.day': '按天',
|
'usage.filter.granularity.day': '按天',
|
||||||
'usage.filter.granularity.week': '按周',
|
'usage.filter.granularity.week': '按周',
|
||||||
'usage.filter.granularity.month': '按月',
|
'usage.filter.granularity.month': '按月',
|
||||||
|
'usage.tabs.summary': '总览',
|
||||||
|
'usage.tabs.tokens': 'Token',
|
||||||
|
'usage.tabs.gpuInstances': 'GPU 实例',
|
||||||
|
'usage.tabs.storage': '存储',
|
||||||
|
'usage.tabs.resourceEvents': '资源事件',
|
||||||
'usage.tabs.models': '模型',
|
'usage.tabs.models': '模型',
|
||||||
'usage.tabs.apikeys': 'API 密钥',
|
'usage.tabs.apikeys': 'API 密钥',
|
||||||
'usage.tabs.users': '用户',
|
'usage.tabs.users': '用户',
|
||||||
|
|||||||
@@ -51,7 +51,14 @@ const InstanceTypeCell: React.FC<{
|
|||||||
<IconFont type={sec.icon} />
|
<IconFont type={sec.icon} />
|
||||||
<span>{sec.name}</span>
|
<span>{sec.name}</span>
|
||||||
</div>
|
</div>
|
||||||
<div style={{ display: 'flex', flexDirection: 'column', gap: 2 }}>
|
<div
|
||||||
|
style={{
|
||||||
|
display: 'flex',
|
||||||
|
flexDirection: 'column',
|
||||||
|
gap: 2,
|
||||||
|
width: '100%'
|
||||||
|
}}
|
||||||
|
>
|
||||||
{rows.map(([label, value], i) => (
|
{rows.map(([label, value], i) => (
|
||||||
<div
|
<div
|
||||||
key={i}
|
key={i}
|
||||||
@@ -60,7 +67,15 @@ const InstanceTypeCell: React.FC<{
|
|||||||
<span style={{ opacity: 0.65, minWidth: 96 }}>
|
<span style={{ opacity: 0.65, minWidth: 96 }}>
|
||||||
{label || ''}
|
{label || ''}
|
||||||
</span>
|
</span>
|
||||||
<span>{value}</span>
|
<span
|
||||||
|
style={{
|
||||||
|
display: 'flex',
|
||||||
|
flex: 1,
|
||||||
|
justifyContent: 'flex-end'
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{value}
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -245,7 +245,12 @@ const GPUServiceInstanceForm: React.FC<InstanceFormProps> = forwardRef(
|
|||||||
const unitResourcesParsed = instanceType?.spec?.unitResourcesParsed;
|
const unitResourcesParsed = instanceType?.spec?.unitResourcesParsed;
|
||||||
const { count = 0 } = options;
|
const { count = 0 } = options;
|
||||||
|
|
||||||
return {
|
console.log('building resources data with', {
|
||||||
|
unitResourcesParsed,
|
||||||
|
count
|
||||||
|
});
|
||||||
|
|
||||||
|
const result = {
|
||||||
accelerator: _.toString(count),
|
accelerator: _.toString(count),
|
||||||
cpu: unitResourcesParsed?.cpu?.cores
|
cpu: unitResourcesParsed?.cpu?.cores
|
||||||
? count * unitResourcesParsed?.cpu?.cores
|
? count * unitResourcesParsed?.cpu?.cores
|
||||||
@@ -254,6 +259,8 @@ const GPUServiceInstanceForm: React.FC<InstanceFormProps> = forwardRef(
|
|||||||
? count * unitResourcesParsed?.ram?.value
|
? count * unitResourcesParsed?.ram?.value
|
||||||
: null
|
: null
|
||||||
};
|
};
|
||||||
|
console.log('built resources data', result);
|
||||||
|
return result;
|
||||||
};
|
};
|
||||||
|
|
||||||
const buildResourcesDataForSubmit = (values: FormData) => {
|
const buildResourcesDataForSubmit = (values: FormData) => {
|
||||||
@@ -475,7 +482,6 @@ const GPUServiceInstanceForm: React.FC<InstanceFormProps> = forwardRef(
|
|||||||
},
|
},
|
||||||
getFieldsValue: () => form.getFieldsValue(),
|
getFieldsValue: () => form.getFieldsValue(),
|
||||||
applyInstanceType: (instanceType?: InstanceTypeItem) => {
|
applyInstanceType: (instanceType?: InstanceTypeItem) => {
|
||||||
console.log('applying instance type', instanceType);
|
|
||||||
if (!instanceType) {
|
if (!instanceType) {
|
||||||
resolveAndApply(undefined, 0);
|
resolveAndApply(undefined, 0);
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -273,7 +273,10 @@ const InstanceTypeFormItem: React.FC<InstanceTypeFormItemProps> = ({
|
|||||||
</div>
|
</div>
|
||||||
{isGPU && (
|
{isGPU && (
|
||||||
<div style={{ flex: 1 }}>
|
<div style={{ flex: 1 }}>
|
||||||
<Form.Item<FormData> name={['spec', 'resources', 'cpu']}>
|
<Form.Item<FormData>
|
||||||
|
name={['spec', 'resources', 'cpu']}
|
||||||
|
key="cpu_input"
|
||||||
|
>
|
||||||
<InputNumber
|
<InputNumber
|
||||||
label={'CPU'}
|
label={'CPU'}
|
||||||
max={onceMaxRequest?.cpu ?? undefined}
|
max={onceMaxRequest?.cpu ?? undefined}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
* The previous implementation lived in this file; it now lives in
|
* The previous implementation lived in this file; it now lives in
|
||||||
* ``components/token-tab.tsx`` so we can host it as a tab pane.
|
* ``components/token-tab.tsx`` so we can host it as a tab pane.
|
||||||
*/
|
*/
|
||||||
import { useAccess } from '@umijs/max';
|
import { useAccess, useIntl } from '@umijs/max';
|
||||||
import { Tabs, TabsProps } from 'antd';
|
import { Tabs, TabsProps } from 'antd';
|
||||||
import React, { useMemo, useState } from 'react';
|
import React, { useMemo, useState } from 'react';
|
||||||
import GpuInstancesTab from './components/gpu-instances-tab';
|
import GpuInstancesTab from './components/gpu-instances-tab';
|
||||||
@@ -24,6 +24,7 @@ import TokenTab from './components/token-tab';
|
|||||||
|
|
||||||
const Usage: React.FC = () => {
|
const Usage: React.FC = () => {
|
||||||
const access = useAccess();
|
const access = useAccess();
|
||||||
|
const intl = useIntl();
|
||||||
// Land on the cross-resource Summary by default.
|
// Land on the cross-resource Summary by default.
|
||||||
const [activeKey, setActiveKey] = useState<string>('summary');
|
const [activeKey, setActiveKey] = useState<string>('summary');
|
||||||
|
|
||||||
@@ -31,31 +32,31 @@ const Usage: React.FC = () => {
|
|||||||
() => [
|
() => [
|
||||||
{
|
{
|
||||||
key: 'summary',
|
key: 'summary',
|
||||||
label: 'Summary',
|
label: intl.formatMessage({ id: 'usage.tabs.summary' }),
|
||||||
children: <SummaryTab />
|
children: <SummaryTab />
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'tokens',
|
key: 'tokens',
|
||||||
label: 'Tokens',
|
label: intl.formatMessage({ id: 'usage.tabs.tokens' }),
|
||||||
children: <TokenTab />
|
children: <TokenTab />
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'gpu-instances',
|
key: 'gpu-instances',
|
||||||
label: 'GPU Instances',
|
label: intl.formatMessage({ id: 'usage.tabs.gpuInstances' }),
|
||||||
children: <GpuInstancesTab />
|
children: <GpuInstancesTab />
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'storage',
|
key: 'storage',
|
||||||
label: 'Storage',
|
label: intl.formatMessage({ id: 'usage.tabs.storage' }),
|
||||||
children: <StorageTab />
|
children: <StorageTab />
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'resource-events',
|
key: 'resource-events',
|
||||||
label: 'Resource Events',
|
label: intl.formatMessage({ id: 'usage.tabs.resourceEvents' }),
|
||||||
children: <ResourceEvents />
|
children: <ResourceEvents />
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
[]
|
[intl]
|
||||||
);
|
);
|
||||||
|
|
||||||
// Users who can't see GPU Service (MaaS-only: no cluster, no resource usage)
|
// Users who can't see GPU Service (MaaS-only: no cluster, no resource usage)
|
||||||
|
|||||||
Reference in New Issue
Block a user