Domain pane
API debugging panel with five tabs: Collection, Request, Response, Mock, and Workflow.
Basic usage
Predefines five tabs (ids: collection, request, response, mock, workflow). Each tab’s content is provided by the consumer through the named slot
#panel-{tabId} (Vue) / slots["panel-{tabId}"] (React). The default list can also be overridden via the tabs prop.
Source: domain.html.
REST 集合树(基于 CfTreeView)。
<script setup lang="ts">
import { CfDomainPane } from '@chufix-design/vue';
</script>
<template>
<div style="height: 280px;">
<CfDomainPane>
<template #panel-collection><p style="color: var(--fg-2);">REST 集合树(基于 CfTreeView)。</p></template>
<template #panel-request><p style="color: var(--fg-2);">请求构造器:URL + Headers + Body + Auth。</p></template>
<template #panel-response><p style="color: var(--fg-2);">响应检查器:Status + Headers + Body + Timing。</p></template>
<template #panel-mock><p style="color: var(--fg-2);">Mock 规则配置卡。</p></template>
<template #panel-workflow><p style="color: var(--fg-2);">自动化工作流节点。</p></template>
</CfDomainPane>
</div>
</template> <script setup>
import { CfDomainPane } from '@chufix-design/vue';
</script>
<template>
<div style="height: 280px;">
<CfDomainPane>
<template #panel-collection><p style="color: var(--fg-2);">REST 集合树(基于 CfTreeView)。</p></template>
<template #panel-request><p style="color: var(--fg-2);">请求构造器:URL + Headers + Body + Auth。</p></template>
<template #panel-response><p style="color: var(--fg-2);">响应检查器:Status + Headers + Body + Timing。</p></template>
<template #panel-mock><p style="color: var(--fg-2);">Mock 规则配置卡。</p></template>
<template #panel-workflow><p style="color: var(--fg-2);">自动化工作流节点。</p></template>
</CfDomainPane>
</div>
</template> import { CfDomainPane, CfTreeView } from '@chufix-design/react';
export default function Demo() {
return (
<>
<div style={{ height: 280 }}>
<CfDomainPane>
<p style={{ color: "var(--fg-2)" }}>REST 集合树(基于 CfTreeView)。</p>
</>
);
} import { CfDomainPane, CfTreeView } from '@chufix-design/react';
export default function Demo() {
return (
<>
<div style={{ height: 280 }}>
<CfDomainPane>
<p style={{ color: "var(--fg-2)" }}>REST 集合树(基于 CfTreeView)。</p>
</>
);
} Real content layout
Five tabs combine into a Postman-style prototype: CfTreeView for the collection, CfMethodBadge + CfKVEditor for the request, CfStatusCodeBadge + CfDescriptionList for the response.
- auth/
- orders/
<script setup lang="ts">
import { CfDomainPane, CfTreeView, CfMethodBadge, CfStatusCodeBadge, CfKVEditor, CfDescriptionList } from '@chufix-design/vue';
import { ref } from 'vue';
const collection = [
{ id: 'auth', label: 'auth/', children: [
{ id: 'login', label: 'POST /login' },
{ id: 'logout', label: 'POST /logout' },
]},
{ id: 'orders', label: 'orders/', children: [
{ id: 'list', label: 'GET /orders' },
{ id: 'create', label: 'POST /orders' },
]},
];
const headers = ref([
{ key: 'Authorization', value: 'Bearer {{token}}', enabled: true },
{ key: 'Accept', value: 'application/json', enabled: true },
{ key: 'X-Trace-Id', value: '{{trace_id}}', enabled: false },
]);
const respMeta = [
{ label: 'Status', value: '200 OK' },
{ label: 'Time', value: '288ms' },
{ label: 'Size', value: '4.2 KB' },
];
</script>
<template>
<div style="height: 360px;">
<CfDomainPane>
<template #panel-collection>
<CfTreeView :nodes="collection" />
</template>
<template #panel-request>
<div style="display: flex; flex-direction: column; gap: 12px;">
<div style="display: flex; align-items: center; gap: 6px;">
<CfMethodBadge kind="post" />
<span style="font-family: var(--font-mono);">/v1/orders</span>
</div>
<div>
<div style="font-size: 11px; color: var(--fg-3); margin-bottom: 4px;">Headers</div>
<CfKVEditor v-model="headers" />
</div>
</div>
</template>
<template #panel-response>
<div style="display: flex; flex-direction: column; gap: 12px;">
<CfStatusCodeBadge :code="201" reason="Created" />
<CfDescriptionList :items="respMeta" />
<pre style="margin: 0; padding: 8px; font-family: var(--font-mono); font-size: 11px; background: var(--bg-2); border-radius: var(--r-3);">{
"id": "ord_1842",
"amount": 12340
}</pre>
</div>
</template>
<template #panel-mock>
<p style="color: var(--fg-2); font-size: 13px;">Mock 规则配置(基于 CfCard + CfSwitch)。</p>
</template>
<template #panel-workflow>
<p style="color: var(--fg-2); font-size: 13px;">自动化工作流节点(基于 CfKanban)。</p>
</template>
</CfDomainPane>
</div>
</template> <script setup>
import { CfDomainPane, CfTreeView, CfMethodBadge, CfStatusCodeBadge, CfKVEditor, CfDescriptionList } from '@chufix-design/vue';
import { ref } from 'vue';
const collection = [
{ id: 'auth', label: 'auth/', children: [
{ id: 'login', label: 'POST /login' },
{ id: 'logout', label: 'POST /logout' },
]},
{ id: 'orders', label: 'orders/', children: [
{ id: 'list', label: 'GET /orders' },
{ id: 'create', label: 'POST /orders' },
]},
];
const headers = ref([
{ key: 'Authorization', value: 'Bearer {{token}}', enabled: true },
{ key: 'Accept', value: 'application/json', enabled: true },
{ key: 'X-Trace-Id', value: '{{trace_id}}', enabled: false },
]);
const respMeta = [
{ label: 'Status', value: '200 OK' },
{ label: 'Time', value: '288ms' },
{ label: 'Size', value: '4.2 KB' },
];
</script>
<template>
<div style="height: 360px;">
<CfDomainPane>
<template #panel-collection>
<CfTreeView :nodes="collection" />
</template>
<template #panel-request>
<div style="display: flex; flex-direction: column; gap: 12px;">
<div style="display: flex; align-items: center; gap: 6px;">
<CfMethodBadge kind="post" />
<span style="font-family: var(--font-mono);">/v1/orders</span>
</div>
<div>
<div style="font-size: 11px; color: var(--fg-3); margin-bottom: 4px;">Headers</div>
<CfKVEditor v-model="headers" />
</div>
</div>
</template>
<template #panel-response>
<div style="display: flex; flex-direction: column; gap: 12px;">
<CfStatusCodeBadge :code="201" reason="Created" />
<CfDescriptionList :items="respMeta" />
<pre style="margin: 0; padding: 8px; font-family: var(--font-mono); font-size: 11px; background: var(--bg-2); border-radius: var(--r-3);">{
"id": "ord_1842",
"amount": 12340
}</pre>
</div>
</template>
<template #panel-mock>
<p style="color: var(--fg-2); font-size: 13px;">Mock 规则配置(基于 CfCard + CfSwitch)。</p>
</template>
<template #panel-workflow>
<p style="color: var(--fg-2); font-size: 13px;">自动化工作流节点(基于 CfKanban)。</p>
</template>
</CfDomainPane>
</div>
</template> import { CfDomainPane, CfTreeView } from '@chufix-design/react';
export default function Demo() {
const collection = [
{ id: 'auth', label: 'auth/', children: [
{ id: 'login', label: 'POST /login' },
{ id: 'logout', label: 'POST /logout' },
]},
{ id: 'orders', label: 'orders/', children: [
{ id: 'list', label: 'GET /orders' },
{ id: 'create', label: 'POST /orders' },
]},
];
const headers = ref([
{ key: 'Authorization', value: 'Bearer {{token}}', enabled: true },
{ key: 'Accept', value: 'application/json', enabled: true },
{ key: 'X-Trace-Id', value: '{{trace_id}}', enabled: false },
]);
const respMeta = [
{ label: 'Status', value: '200 OK' },
{ label: 'Time', value: '288ms' },
{ label: 'Size', value: '4.2 KB' },
];
return (
<>
<div style={{ height: 360 }}>
<CfDomainPane>
<CfTreeView nodes={collection} />
</>
);
} import { CfDomainPane, CfTreeView } from '@chufix-design/react';
export default function Demo() {
const collection = [
{ id: 'auth', label: 'auth/', children: [
{ id: 'login', label: 'POST /login' },
{ id: 'logout', label: 'POST /logout' },
]},
{ id: 'orders', label: 'orders/', children: [
{ id: 'list', label: 'GET /orders' },
{ id: 'create', label: 'POST /orders' },
]},
];
const headers = ref([
{ key: 'Authorization', value: 'Bearer {{token}}', enabled: true },
{ key: 'Accept', value: 'application/json', enabled: true },
{ key: 'X-Trace-Id', value: '{{trace_id}}', enabled: false },
]);
const respMeta = [
{ label: 'Status', value: '200 OK' },
{ label: 'Time', value: '288ms' },
{ label: 'Size', value: '4.2 KB' },
];
return (
<>
<div style={{ height: 360 }}>
<CfDomainPane>
<CfTreeView nodes={collection} />
</>
);
} API
| Prop | Type | Default | Description |
|---|---|---|---|
modelValue / value | string | first tab id | Active tab |
tabs | TemplatePaneTab[] | preset | Custom tab list |
size | 'sm' | 'md' | 'lg' | 'md' |
The preset tab id lists are exported as PROTOCOL_TABS / NETWORK_TABS / SQL_TABS and other constants, so you can reuse them when supplying a custom tabs.
The template component is essentially a semantic shell around
CfTabs. If you don’t need a predefined tab set, useCfTabsdirectly.
反馈与讨论
Domain pane · Discussion