Files
vibe-registry/examples/qa-orchestrator/pages/suite-detail.ts
T
hellow-da-sb 8c93bde5f6 feat: vibe-registry M1 — 万物皆注册框架骨架
- core: registerLayout/Widget/Action(泛型)/Schema + 校验闸门
- definePage: 页面只管业务,结构来自注册表
- presets: admin / app-shell 预设布局(vr add 物化)
- cli: vr list/add/update 防覆盖
- examples/qa-orchestrator: 实战编排验证(workspace:* 依赖)
2026-09-03 00:48:10 +08:00

43 lines
1.6 KiB
TypeScript

/**
* 套件详情页(suite detail)
* 业务:展示单个套件的用例列表,提供重跑/停止动作
* 注意:页面不内联任何"重跑逻辑",只声明引用 run-suite action —— 行为万物皆注册
*/
import { definePage } from 'vibe-registry'
export const suiteDetailPage = definePage({
layout: 'qa-console',
title: '测试编排 · 套件详情',
blocks: [
{ widget: 'suite-list', bind: { suites: 'suites' } },
{
widget: 'suite-detail-view',
props: { mode: 'detail', suiteId: 'current' },
bind: { cases: 'cases', suite: 'suite' },
},
],
setup: async (ctx) => {
const suiteId = ctx.params.id ?? 'auth'
const cases = [
{ id: 'a1', name: '登录成功', priority: 'P0', status: 'passed', durationMs: 120 },
{ id: 'a2', name: '登录失败锁定', priority: 'P1', status: 'failed', durationMs: 340 },
{ id: 'a3', name: '令牌过期刷新', priority: 'P1', status: 'running', durationMs: null },
]
return {
suites: [
{ id: 'auth', name: '认证模块', passedRate: 0.92, lastResult: 'passed' },
{ id: 'billing', name: '计费模块', passedRate: 0.71, lastResult: 'failed' },
],
suite: { id: suiteId, name: `${suiteId} 套件` },
cases,
}
},
actions: {
rerun: async (payload: { suiteId?: string }) => {
// 页面只做"把用户意图转成 action 调用",实现仍在注册表
const { runSuiteAction } = await import('../registry/actions/run-suite.ts')
return runSuiteAction.handler({ suiteId: payload.suiteId ?? 'auth' }, null)
},
},
})