refactor(client): group pages by entity and add scenario/step crud

- move environment, scenario, session pages into entity subdirs
- add CreateScenarioPage and EditScenarioPage
- add CreateStepPage and EditStepPage with order/type/session/code fields
- add per-step edit and delete row actions on ScenarioDetailPage
- add step api methods (get, create, update, remove) to api client
- add sectionToolbar, formField, fieldLabel, textarea css utilities
This commit is contained in:
2026-04-09 20:45:34 +03:00
parent 6b1307c58a
commit ebcb8b8ff4
16 changed files with 725 additions and 46 deletions
+39
View File
@@ -113,3 +113,42 @@ export const scenarios = {
return request(`/scenarios/${scenarioId}/runs?page=${page}&limit=${limit}`);
},
};
// ── Scenario Steps ────────────────────────────────────────────────────────────
export interface CreateStepPayload {
order: number;
type: 'login' | 'exec' | 'sign';
sessionName: string;
execCode?: string;
validateCode?: string;
}
export interface UpdateStepPayload {
order?: number;
type?: 'login' | 'exec' | 'sign';
sessionName?: string;
execCode?: string;
validateCode?: string;
}
export const steps = {
get(scenarioId: number, stepId: number): Promise<ScenarioStep> {
return request(`/scenarios/${scenarioId}/steps/${stepId}`);
},
create(scenarioId: number, payload: CreateStepPayload): Promise<ScenarioStep> {
return request(`/scenarios/${scenarioId}/steps`, {
method: 'POST',
body: JSON.stringify(payload),
});
},
update(scenarioId: number, stepId: number, payload: UpdateStepPayload): Promise<ScenarioStep> {
return request(`/scenarios/${scenarioId}/steps/${stepId}`, {
method: 'PATCH',
body: JSON.stringify(payload),
});
},
remove(scenarioId: number, stepId: number): Promise<void> {
return request(`/scenarios/${scenarioId}/steps/${stepId}`, { method: 'DELETE' });
},
};