Complete platform management workflows

This commit is contained in:
npc0-hue
2026-07-14 16:39:37 +08:00
parent 7e05d0a4e7
commit 4f33f761a3
106 changed files with 11313 additions and 460 deletions
+19 -6
View File
@@ -1,7 +1,8 @@
import type { AiProviderKind, AiProviderResponse, AiProviderStatus, AiRelayMode } from "../api/types";
export type AiProviderFilter = AiProviderStatus | "all";
export type AiProviderViewState = "api" | "local" | "saving" | "error";
export type AiProviderListState = "loading" | "ready" | "error";
export type AiProviderViewState = "api" | "local-development" | "saving" | "error";
export interface AiProviderFormState {
id: string;
@@ -30,22 +31,34 @@ export interface AiProviderActionState {
message: string;
}
export interface AiProviderPageInitialState {
providers?: AiProviderResponse[];
selectedId?: string;
listState?: AiProviderListState;
listError?: string;
source?: AiProviderViewState;
action?: AiProviderActionState | null;
}
export function emptyAiProviderForm(): AiProviderFormState {
return {
id: "",
name: "",
kind: "openai-compatible",
baseUrl: "https://api.example.test/v1",
baseUrl: "",
apiKeyRef: "secret://providers/",
modelsText: "gpt-4.1-mini",
defaultModel: "gpt-4.1-mini",
relayMode: "direct",
modelsText: "",
defaultModel: "",
relayMode: "relay",
timeoutMs: "30000",
redactionPolicy: "default"
};
}
export function aiProviderToForm(provider: AiProviderResponse): AiProviderFormState {
export function aiProviderToForm(provider?: AiProviderResponse): AiProviderFormState {
if (!provider) {
return emptyAiProviderForm();
}
return {
id: provider.id,
name: provider.name,
@@ -8,6 +8,7 @@ import type {
export type ServerWorkflowViewState = "api" | "local" | "saving";
export type ServerLifecycleActionLabel = "create" | "start" | "stop" | "refresh";
export type ServerRemovalAction = "archive";
export interface ServerCreateFormState {
id: string;
@@ -23,6 +24,17 @@ export interface ServerWorkflowActionState {
message: string;
}
export interface ServerMetadataFormState {
name: string;
}
export interface ServerRemovalConfirmationState {
action: ServerRemovalAction;
serverInstanceId: string;
name: string;
state: ServerInstanceState;
}
export interface ServerManagementSummary {
total: number;
running: number;
@@ -83,3 +95,11 @@ export function defaultServerCreateForm(plugins: GamePluginResponse[], endpoints
runEndpointId: endpoints[0]?.id ?? ""
};
}
export function serverMetadataFormFromInstance(instance: ServerInstanceResponse): ServerMetadataFormState {
return { name: instance.name };
}
export function canArchiveServer(state: ServerInstanceState): boolean {
return state !== "running" && state !== "installing" && state !== "deleted";
}
+31
View File
@@ -0,0 +1,31 @@
import type { UserResponse, UserStatus } from "../api/types";
export type UserListSource = "api" | "local-development";
export type UserRemovalAction = "deactivate";
export interface UserEditFormState {
displayName: string;
email: string;
phone: string;
qq: string;
contactNote: string;
roles: string[];
status: UserStatus;
}
export interface UserRemovalConfirmationState {
action: UserRemovalAction;
user: UserResponse;
}
export function userEditFormFromResponse(user: UserResponse): UserEditFormState {
return {
displayName: user.displayName,
email: user.email ?? "",
phone: user.profile?.phone ?? "",
qq: user.profile?.qq ?? "",
contactNote: user.profile?.contactNote ?? "",
roles: [...user.roles],
status: user.status
};
}