From 70229a975728ef0d7ad245eba3616cf59ddb19c4 Mon Sep 17 00:00:00 2001 From: jialin Date: Wed, 8 Jul 2026 16:47:25 +0800 Subject: [PATCH] feat(gpu-service): add status column to storage and storage-type lists --- .../gpu-service/storage-types/config/index.ts | 17 ++++++++ .../gpu-service/storage-types/config/types.ts | 4 ++ .../hooks/use-storage-type-columns.tsx | 26 ++++++++++++- src/pages/gpu-service/storage/config/index.ts | 15 +++---- src/pages/gpu-service/storage/config/types.ts | 1 + .../storage/hooks/use-storage-columns.tsx | 39 ++++++++++--------- 6 files changed, 73 insertions(+), 29 deletions(-) diff --git a/src/pages/gpu-service/storage-types/config/index.ts b/src/pages/gpu-service/storage-types/config/index.ts index 9ad385e5..06abd6d0 100644 --- a/src/pages/gpu-service/storage-types/config/index.ts +++ b/src/pages/gpu-service/storage-types/config/index.ts @@ -1,6 +1,23 @@ +import { StatusMaps } from '@/config'; +import { StatusType } from '@/config/types'; import { icons } from '@gpustack/core-ui'; import { StorageTypeKind } from './types'; +export const StorageTypePhaseValueMap = { + Ready: 'Ready', + Deleting: 'Deleting' +}; + +export const StorageTypePhaseLabelMap: Record = { + [StorageTypePhaseValueMap.Ready]: 'Ready', + [StorageTypePhaseValueMap.Deleting]: 'Deleting' +}; + +export const status: Record = { + [StorageTypePhaseValueMap.Ready]: StatusMaps.success, + [StorageTypePhaseValueMap.Deleting]: StatusMaps.warning +}; + export const StorageTypeKindValueMap: Record = { NFS: 'nfs', S3: 's3' diff --git a/src/pages/gpu-service/storage-types/config/types.ts b/src/pages/gpu-service/storage-types/config/types.ts index f65405e8..96a22a11 100644 --- a/src/pages/gpu-service/storage-types/config/types.ts +++ b/src/pages/gpu-service/storage-types/config/types.ts @@ -44,4 +44,8 @@ export interface ListItem { nfs?: StorageTypeNFS | null; s3?: Omit | null; }; + status?: { + phase?: string | null; + phaseMessage?: string | null; + } | null; } diff --git a/src/pages/gpu-service/storage-types/hooks/use-storage-type-columns.tsx b/src/pages/gpu-service/storage-types/hooks/use-storage-type-columns.tsx index 39636881..51ec2a25 100644 --- a/src/pages/gpu-service/storage-types/hooks/use-storage-type-columns.tsx +++ b/src/pages/gpu-service/storage-types/hooks/use-storage-type-columns.tsx @@ -5,13 +5,19 @@ import { AutoTooltip, DropdownButtons, IconFont, + StatusTag, ThemeTag } from '@gpustack/core-ui'; import { useIntl } from '@umijs/max'; import type { ColumnsType } from 'antd/lib/table'; import dayjs from 'dayjs'; import { useMemo } from 'react'; -import { rowActionList, StorageTypeKindLabelMap } from '../config'; +import { + rowActionList, + status, + StorageTypeKindLabelMap, + StorageTypePhaseLabelMap +} from '../config'; import { ListItem } from '../config/types'; interface ColumnsHookProps { @@ -81,6 +87,24 @@ const useStorageTypeColumns = ({ sorter: false, render: (_text, record) => getKindLabel(record) }, + { + title: intl.formatMessage({ id: 'common.table.status' }), + dataIndex: ['status', 'phase'], + key: 'status', + sorter: false, + render: (value: string, record: ListItem) => + value ? ( + + ) : ( + '-' + ) + }, ...creatorCols, // { // title: intl.formatMessage({ id: 'common.table.description' }), diff --git a/src/pages/gpu-service/storage/config/index.ts b/src/pages/gpu-service/storage/config/index.ts index 6929b21c..50a48825 100644 --- a/src/pages/gpu-service/storage/config/index.ts +++ b/src/pages/gpu-service/storage/config/index.ts @@ -3,21 +3,18 @@ import { StatusType } from '@/config/types'; import { icons } from '@gpustack/core-ui'; export const StoragePhaseValueMap = { - Available: 'Available', - Unavailable: 'Unavailable', - Pending: 'Pending' + Ready: 'Ready', + Deleting: 'Deleting' }; export const StoragePhaseLabelMap: Record = { - [StoragePhaseValueMap.Available]: 'Available', - [StoragePhaseValueMap.Unavailable]: 'Unavailable', - [StoragePhaseValueMap.Pending]: 'Pending' + [StoragePhaseValueMap.Ready]: 'Ready', + [StoragePhaseValueMap.Deleting]: 'Deleting' }; export const status: Record = { - [StoragePhaseValueMap.Available]: StatusMaps.success, - [StoragePhaseValueMap.Unavailable]: StatusMaps.error, - [StoragePhaseValueMap.Pending]: StatusMaps.transitioning + [StoragePhaseValueMap.Ready]: StatusMaps.success, + [StoragePhaseValueMap.Deleting]: StatusMaps.warning }; export const rowActionList = [ diff --git a/src/pages/gpu-service/storage/config/types.ts b/src/pages/gpu-service/storage/config/types.ts index 966ffd37..b95fba3f 100644 --- a/src/pages/gpu-service/storage/config/types.ts +++ b/src/pages/gpu-service/storage/config/types.ts @@ -33,6 +33,7 @@ export interface ListItem { }; status?: { phase?: string | null; + phaseMessage?: string | null; } | null; } diff --git a/src/pages/gpu-service/storage/hooks/use-storage-columns.tsx b/src/pages/gpu-service/storage/hooks/use-storage-columns.tsx index abac1a5f..675f3b63 100644 --- a/src/pages/gpu-service/storage/hooks/use-storage-columns.tsx +++ b/src/pages/gpu-service/storage/hooks/use-storage-columns.tsx @@ -1,11 +1,11 @@ import useCreatorColumn from '@/pages/gpu-service/hooks/use-creator-column'; import { usePluginListColumns } from '@/plugins/list-extra-columns'; -import { AutoTooltip, DropdownButtons } from '@gpustack/core-ui'; +import { AutoTooltip, DropdownButtons, StatusTag } from '@gpustack/core-ui'; import { useIntl } from '@umijs/max'; import type { ColumnsType } from 'antd/lib/table'; import dayjs from 'dayjs'; import { useMemo } from 'react'; -import { rowActionList } from '../config'; +import { rowActionList, status, StoragePhaseLabelMap } from '../config'; import { ListItem } from '../config/types'; interface ColumnsHookProps { @@ -70,24 +70,25 @@ const useStorageColumns = ({ sorter: false, render: (value: string) => (value ? value.replace(/Gi$/, 'GB') : '-') }, + { + title: intl.formatMessage({ id: 'common.table.status' }), + dataIndex: ['status', 'phase'], + key: 'status', + sorter: false, + render: (value: string, record: ListItem) => + value ? ( + + ) : ( + '-' + ) + }, ...creatorCols, - // { - // title: intl.formatMessage({ id: 'common.table.status' }), - // dataIndex: ['status', 'phase'], - // key: 'status', - // sorter: false, - // render: (value: string) => - // value ? ( - // - // ) : ( - // '-' - // ) - // }, { title: intl.formatMessage({ id: 'common.table.createTime' }), dataIndex: 'created_at',