6.1 KiB
6.1 KiB
| name | description | version | category |
|---|---|---|---|
| pccs-ui-design | Use when designing pccs UI. Colors, layout, interactions. | 1.0.0 | design |
PCCS UI Design System
Overview
PCCS (算力中心集群系统) is an infrastructure management platform for compute pools, K8s/Slurm/Ray clusters, shared storage, and container images. Design targets: operators and reseller admins managing physical/virtual compute resources.
Color System (Infrastructure Dashboard)
| Token | Hex | Usage |
|---|---|---|
--pccs-primary |
#2563eb |
Buttons, links, active states, selected items |
--pccs-primary-light |
#dbeafe |
Selected row bg, hover highlights |
--pccs-success |
#16a34a |
Running/Active/Online/Synced status |
--pccs-warning |
#f59e0b |
Deploying/Pending/Joining status |
--pccs-error |
#dc2626 |
Failed/Offline/Error status |
--pccs-sidebar |
#0f172a |
Left sidebar background |
--pccs-sidebar-text |
#94a3b8 |
Sidebar inactive text |
--pccs-sidebar-active |
#e2e8f0 |
Sidebar active item text |
--pccs-bg |
#f8fafc |
Main content background |
--pccs-card |
#ffffff |
Card/widget background |
--pccs-border |
#e2e8f0 |
Borders, dividers |
--pccs-text |
#1e293b |
Primary text |
--pccs-text-secondary |
#64748b |
Secondary/muted text |
Status Color Mapping (Universal)
running / active / online / synced / mounted → green #16a34a
deploying / pending / joining / syncing → amber #f59e0b
failed / error / offline → red #dc2626
stopped / inactive / unmounted / destroyed → gray #94a3b8
In CRUD lists, status field renders as colored badge (small rounded pill).
Layout System
Dashboard (index.ui)
┌──────────────────────────────────────────────┐
│ header bar: logo + user info │
├────────┬─────────────────────────────────────┤
│sidebar │ main content │
│ ───── │ ┌──────┐ ┌──────┐ ┌──────┐ ┌─────┐ │
│ 概览 │ │算力池 │ │集群 │ │存储 │ │镜像 │ │
│ │ │ 3个 │ │ 5个 │ │200GB │ │12个 │ │
│ 算力池 │ │2🟢1🟡│ │3🟢2🟡│ │150G🟢│ │10🟢 │ │
│ 集群 │ └──────┘ └──────┘ └──────┘ └─────┘ │
│ 存储 │ │
│ 镜像 │ [最近部署] [资源使用趋势] │
└────────┴─────────────────────────────────────┘
CRUD List Page
┌────────────────────────────────────────────────┐
│ breadcrumb: 首页 > 算力池管理 │
│ [+新建] [搜索...] [刷新] [导出] │
├────────────────────────────────────────────────┤
│ 名称 │ 类型 │ 资源使用 │ 状态 │
│ GPU池A │ GPU │ 16/32C 128/256G│ 🟢运行 │
│ CPU池B │ CPU │ 8/16C 64/128G│ 🟢运行 │
└────────────────────────────────────────────────┘
Widget Conventions
Status Badge
Use Text widget with inline style for status display.
Action Buttons (Toolbar)
css: "primary"— blue, main action (创建/部署/保存)css: "default"— white+border, secondary (刷新/导出)css: "danger"— red text, destructive (删除/销毁)css: "link"— text-only, row-level actions (编辑/详情)
Resource Cards (Dashboard)
VBox with white bg, subtle border, rounded corners, padding 16px.
Form Layout (PopupWindow)
Modal forms: cwidth=32, single column, blue submit at bottom, link cancel.
Interaction Patterns
- CRUD → Deploy: List → [+新建] → PopupWindow Form → Save → List refresh
- Node Assignment: Cluster detail → [分配节点] → PopupWindow picker → Save
- Storage Mount: Export → [挂载] → pick node+path → mount_exec.dspy
- Image Import: Registry → [导入镜像] → Form → import.dspy → refresh
- Multi-step Deploy: [部署] → Phase 1..N → real-time poll → done/failed
Header Bar (Mandatory for RBAC)
Every page with RBAC module MUST have a header bar with:
- User menu (right side) — RBAC usermenu.ui via urlwidget
- Language switch (🌐) — i18n toggle button
- Theme switch (🌓) — dark/light toggle if multi-theme supported
┌──────────────────────────────────────────────────────────┐
│ PCCS 算力中心集群系统 🌓 🌐 中文 [👤 用户名 ▾] │
├──────────────────────────────────────────────────────────┤
Header: white bg, 48px height, borderBottom: 1px solid #e2e8f0, flexShrink:0.
Bricks Pitfalls (Mandatory)
- Widget
idat TOP LEVEL, not inoptions .tmplprocessor MUST be in config.json website.processors- Form field pre-fill: use
"value"not"defaultValue" - getWidgetById ALWAYS pass second arg:
bricks.getWidgetById('x', bricks.app) uitype:"check"= single toggle,uitype:"checkbox"= multi-checkbox group.dspyuses raw Python,.uiuses Jinja2{{...}}— never mix- Prefer urlwidget/PopupWindow over inline JS scripts
- Button has NO set_text() — use
button.text_w.set_text() - VScrollPanel has NO
.render()— useadd_widget() - Scroll areas: filler chain, NEVER fixed height