Wireframe — /clusters
文字版 wireframe。從 edge-ai-platform POC 搬來,視覺對齊既有 Shadcn 風格。
佈局(Desktop)
┌────────────────────────────────────────────────────────────────┐
│ [Sidebar] [Header] │
│ ────────────────────────────────────────────────────────────── │
│ │
│ 叢集 [+ 建立叢集] │
│ 管理你的多裝置推論叢集 │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ ClusterCard A │ │ ClusterCard B │ │ ClusterCard C │ │
│ │ │ │ │ │ │ │
│ │ Production A │ │ Dev Cluster │ │ Test Cluster │ │
│ │ 🟢 推論中 │ │ 🔵 閒置 │ │ 🟡 降級 │ │
│ │ │ │ │ │ │ │
│ │ 裝置:3 │ │ 裝置:2 │ │ 裝置:3 │ │
│ │ 模型:yolov5s │ │ 模型:- │ │ 模型:yolov5s │ │
│ │ │ │ │ │ │ │
│ │ • KL520 w=3 🟢│ │ • KL720 w=1 🟢│ │ • KL520 w=3 🟢│ │
│ │ • KL720 w=1 🟢│ │ • KL520 w=1 🟢│ │ • KL720 w=1 🟢│ │
│ │ • KL520 w=3 🟢│ │ │ │ • KL520 w=3 ⚪│ │
│ │ │ │ │ │ │ │
│ │ [工作區][刪除] │ │ [工作區][刪除] │ │ [工作區][刪除] │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │
└────────────────────────────────────────────────────────────────┘
ClusterCard 規格(沿用 POC 的 cluster-card.tsx,加強化)
┌───────────────────────────────────────┐
│ CardHeader (pb-3) │
│ ┌─────────────────────┐ ┌───────────┐ │
│ │ CardTitle text-base │ │ Badge │ │
│ │ Production Cluster A│ │ 狀態 │ │
│ └─────────────────────┘ └───────────┘ │
│ │
│ CardContent (space-y-3) │
│ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ 裝置 (label) │ │ 模型 (label) │ │
│ │ 3 (value) │ │ yolov5s │ │
│ └──────────────┘ └──────────────┘ │
│ │
│ 裝置列表(text-xs): │
│ • office-mac KL520 w=3 [🟢 在線] │
│ • home-pi KL720 w=1 [🟢 在線] │
│ • backup KL520 w=3 [⚪ 離線] │
│ │
│ ┌──────────┐ ┌──────────┐ │
│ │ [工作區] │ │ [刪除] │ │
│ │ outline │ │ ghost │ │
│ └──────────┘ └──────────┘ │
└───────────────────────────────────────┘
狀態 Badge
| 狀態 |
Badge variant |
文字 |
| idle |
secondary |
閒置 |
| inferencing |
default |
推論中 |
| degraded |
destructive (實際用 yellow) |
降級執行中 |
| offline |
secondary + opacity-50 |
全部離線 |
雲端版新增
| 位置 |
改動 |
| 每個裝置項目右側 |
新增 RemoteDeviceBadge(🟢 / ⚪) |
| degraded 狀態 |
Badge 旁加 Tooltip 說明「X 裝置離線,已自動降級」 |
| 「建立叢集」Dialog 的裝置選擇器 |
只列出 remoteStatus === 'online' 的裝置;離線裝置 disabled |
空狀態
┌────────────────────────────────────────────────────────────────┐
│ │
│ 🕸 │
│ │
│ 還沒有叢集 │
│ │
│ 叢集讓你把多台 Kneron 裝置組合起來做平行推論 │
│ │
│ [建立第一個叢集] │
│ (若沒有任何已配對裝置則 disabled + tooltip: │
│ 「請先配對至少 1 台裝置」) │
│ │
└────────────────────────────────────────────────────────────────┘
使用既有 EmptyState 元件,icon = Lucide Network。
建立叢集 Dialog(沿用 POC)
Dialog: 建立叢集
叢集名稱 * [________________________]
選擇裝置:
☑ Kneron KL520 (office-mac) 權重 [3 ▼] 🟢 在線
☑ Kneron KL720 (home-pi) 權重 [1 ▼] 🟢 在線
☐ Kneron KL520 (backup) 權重 [- ] ⚪ 離線 (disabled)
模型:[ yolov5s ▼ ]
[取消] [建立]
互動
| 操作 |
行為 |
| 點卡片「工作區」 |
跳 /workspace/cluster/[id] |
| 點卡片「刪除」 |
AlertDialog 確認後呼叫 DELETE /api/clusters/:id |
| 點「建立叢集」 |
開 ClusterCreateDialog |
| 切換 degraded 狀態 tooltip |
Hover / Focus Badge 時顯示原因 |
響應式
| 斷點 |
欄數 |
| Mobile (< 640px) |
1 欄 |
| Tablet (640-1024) |
2 欄 |
| Desktop (≥ 1024) |
3 欄 |
無障礙
- Card 整體可 Tab 聚焦(若設為
asChild Link)
- 刪除 AlertDialog 焦點陷阱(shadcn 內建)
- 狀態 Badge 有文字 + 顏色雙重傳達
- Tooltip 使用
aria-describedby
i18n key(沿用 POC cluster.*)
cluster.title → 叢集
cluster.subtitle → 管理你的多裝置推論叢集
cluster.createCluster → 建立叢集
cluster.devices → 裝置
cluster.openWorkspace → 工作區
cluster.deleteConfirm → 確定要刪除「{name}」嗎?
cluster.status.idle → 閒置
cluster.status.inferencing → 推論中
cluster.status.degraded → 降級執行中
cluster.emptyTitle → 還沒有叢集
cluster.emptyDescription → 叢集讓你把多台 Kneron 裝置組合起來做平行推論
cluster.emptyAction → 建立第一個叢集
cluster.noDevicesHint → 請先配對至少 1 台裝置