{workflowSteps.map((item, index) => (
diff --git a/vehicle-data-platform/apps/web/src/styles/global.css b/vehicle-data-platform/apps/web/src/styles/global.css
index a6a5bf88..5515fa25 100644
--- a/vehicle-data-platform/apps/web/src/styles/global.css
+++ b/vehicle-data-platform/apps/web/src/styles/global.css
@@ -69,6 +69,23 @@ body {
white-space: nowrap;
}
+.vp-nav-groups {
+ display: grid;
+ gap: 12px;
+}
+
+.vp-nav-group {
+ min-width: 0;
+}
+
+.vp-nav-section-title {
+ padding: 0 12px 6px;
+ color: var(--vp-text-subtle);
+ font-size: 12px;
+ font-weight: 600;
+ line-height: 18px;
+}
+
.vp-main {
min-width: 0;
}
@@ -878,6 +895,30 @@ body {
gap: 12px;
}
+.vp-service-model-grid {
+ display: grid;
+ grid-template-columns: repeat(4, minmax(0, 1fr));
+ gap: 12px;
+}
+
+.vp-service-model-item {
+ min-height: 132px;
+ padding: 14px;
+ border: 1px solid var(--vp-border);
+ border-radius: var(--vp-radius);
+ background: #fbfcff;
+ display: grid;
+ gap: 10px;
+ align-content: start;
+}
+
+.vp-service-model-value {
+ color: var(--vp-text);
+ font-size: 26px;
+ font-weight: 700;
+ line-height: 32px;
+}
+
.vp-operation-step {
min-height: 176px;
padding: 14px;
@@ -1031,6 +1072,7 @@ body {
.vp-evidence-grid,
.vp-action-grid,
.vp-operation-flow,
+ .vp-service-model-grid,
.vp-capability-grid,
.vp-conclusion-grid,
.vp-monitor-layout,
diff --git a/vehicle-data-platform/apps/web/src/test/App.test.tsx b/vehicle-data-platform/apps/web/src/test/App.test.tsx
index c138b5ea..74b3cca6 100644
--- a/vehicle-data-platform/apps/web/src/test/App.test.tsx
+++ b/vehicle-data-platform/apps/web/src/test/App.test.tsx
@@ -12,6 +12,10 @@ afterEach(() => {
test('renders vehicle platform shell', () => {
render(
);
expect(screen.getByText('车辆服务中台')).toBeInTheDocument();
+ expect(screen.getByText('一车一服务 / 多源归并')).toBeInTheDocument();
+ expect(screen.getByText('车辆工作台')).toBeInTheDocument();
+ expect(screen.getByText('查询分析')).toBeInTheDocument();
+ expect(screen.getByText('告警运维')).toBeInTheDocument();
expect(screen.getAllByText('运营驾驶舱').length).toBeGreaterThanOrEqual(1);
});