feat(gpu-service): support sliced (by-ratio) GPU instances and PV status

- Add whole/by-ratio segmented toggle to the GPU Instance form; sliced
  mode picks a VRAM ratio (10-100 or finer 1-10 when max<10), scales
  CPU/RAM by the ratio (floored, min 1), pins compute at 100%
- Availability, card Max, and Instance Type cell reflect sliceable types
- Add ready/deleting status columns for storage and storage types
This commit is contained in:
jialin
2026-07-22 15:52:16 +08:00
parent 730cbc9b64
commit 63ed6e777b
15 changed files with 514 additions and 47 deletions
@@ -23,6 +23,11 @@ interface NumberSelectionProps {
labelExtra?: React.ReactNode;
maxCount?: number;
tips?: string;
// Explicit preset tick values (e.g. [10,20,...,100] for percentage slicing).
// Overrides the default 1..maxCount sequence.
presetValues?: number[];
// Force the free-input box to show regardless of max/maxCount.
alwaysShowInput?: boolean;
onChange?: (value: number) => void;
}
@@ -39,17 +44,18 @@ const NumberSelection: React.FC<NumberSelectionProps> = ({
className,
maxCount = 8,
tips,
presetValues,
alwaysShowInput,
style,
onChange
}) => {
const intl = useIntl();
const showCustomInput = max > maxCount;
const presetItems = Array.from(
{ length: Math.max(0, maxCount) },
(_, i) => i + 1
);
if (min <= 0) {
const showCustomInput = alwaysShowInput || max > maxCount;
const presetItems =
presetValues ??
Array.from({ length: Math.max(0, maxCount) }, (_, i) => i + 1);
if (!presetValues && min <= 0) {
presetItems.unshift(0);
}
const items = presetItems;
@@ -39,9 +39,20 @@
display: flex;
align-items: center;
padding: 0 12px;
padding-right: 2px;
color: var(--ant-color-text-tertiary);
white-space: nowrap;
padding-block: 6px;
width: 100%;
// Spread the label and its labelExtra (e.g. the whole/sliced Segmented)
// to opposite ends of the row.
:global(.label-text) {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
}
}
.contentWrapper {
width: 100%;