Add platform status switch

This commit is contained in:
2026-05-12 21:49:08 +08:00
parent 682a491d27
commit a76ab941bc
10 changed files with 195 additions and 5 deletions
+38
View File
@@ -560,6 +560,24 @@ export function App() {
}
}
async function savePlatformStatus(platform: IntegrationPlatform, status: 'enabled' | 'disabled') {
setCoreState('loading');
setCoreMessage('');
try {
const input = platformStatusUpdatePayload(platform, status);
const updated = await updatePlatform(token, platform.id, input);
const platformForState = withCredentialPreviewFallback(updated, input, platform);
setPlatforms((current) => current.map((item) => item.id === platform.id ? platformForState : item));
invalidateDataKeys('modelCatalog', 'modelRateLimits', 'playgroundModels');
setCoreState('ready');
setCoreMessage(status === 'enabled' ? '平台已启用。' : '平台已禁用。');
} catch (err) {
setCoreState('error');
setCoreMessage(err instanceof Error ? err.message : '切换平台状态失败');
throw err;
}
}
async function savePlatformDynamicPriority(platformId: string, input: PlatformDynamicPriorityUpdateRequest) {
setCoreState('loading');
setCoreMessage('');
@@ -1029,6 +1047,7 @@ export function App() {
onResetBaseModel={resetBaseModelToDefault}
onSavePlatform={savePlatformWithModels}
onSavePlatformDynamicPriority={savePlatformDynamicPriority}
onTogglePlatformStatus={savePlatformStatus}
onSaveProvider={saveProvider}
onSavePricingRuleSet={savePricingRuleSet}
onSaveRunnerPolicy={saveRunnerPolicy}
@@ -1105,6 +1124,25 @@ function mergeExistingPlatformModelInput(input: PlatformModelBindingInput, curre
};
}
function platformStatusUpdatePayload(platform: IntegrationPlatform, status: 'enabled' | 'disabled'): PlatformCreateInput {
return {
provider: platform.provider,
platformKey: platform.platformKey,
name: platform.name,
internalName: platform.internalName,
baseUrl: platform.baseUrl,
authType: platform.authType,
config: platform.config ?? {},
retryPolicy: platform.retryPolicy ?? {},
rateLimitPolicy: platform.rateLimitPolicy ?? {},
defaultPricingMode: platform.defaultPricingMode,
defaultDiscountFactor: platform.defaultDiscountFactor,
pricingRuleSetId: platform.pricingRuleSetId,
priority: platform.priority,
status,
};
}
function withCredentialPreviewFallback(
platform: IntegrationPlatform,
input: PlatformCreateInput,