joy-cli/docs/ops/joy-web-design.md
feibisi 894d8f57d0 feat(cli): online context, vm/work/clone ops, web UI polish
Add joy online package injection helpers, expand vm/work/clone command
surface for desktop and session ops, and polish remaining web tabs
(drawer, ops, hardware, sessions) plus design/capacity docs.
2026-07-13 02:08:34 +08:00

8.5 KiB
Raw Permalink Blame History

joy web 设计原则

2026-07-11 · 以 神兽工坊 为视觉与结构标准
触发:神州「资产」按硬件 tab 重做后定稿
范围:Projects/joy-cli/src/joy/web/


0. 一句话

新世界 / 新 tab 的 UI 必须先对照神兽侧已有块再写;复用全局 CSS 与 core 组件,禁止另起一套「看起来差不多」的样式。

标准参考(按优先级):

  1. 设备/资产卡 → 神兽 · 硬件 tabjs/tabs/hardware.js + #pane-hardware
  2. 列表/运维 → 神兽 · 运维 tabops.js + card compact / infra-list
  3. 神兽列表beasts.js + 抽屉
  4. 全局styles.css + core.jsic / badgeXs / miniBar / esc / card-row

神州大地 / 混沌蛮荒 不是 另开视觉体系,只是 数据与权限边界 不同。


1. 结构标准:硬件 tab 模式

神兽 · 硬件已验证的结构2026-07 定稿):

做法 反例
总览 独立 sectioncard compact ops-stat 一排,可点跳到设备 把全部设备塞进一个 section 无限滚动
每台设备 独立 sectionsection-title = 设备名body 内完整指标 所有主机塞一个大 grid 堆坨
pane 布局 CSS grid 列(硬件 4 列);总览 grid-column: 1 / -1;设备 span 1 仅靠 flex 横铺导致「全横排占满屏」
设备卡内容 顶栏 metric在线/磁盘/内存/负载)+ miniBar + infra-list 明细 + 告警条 只留一个数字、或 26 张同质小卡无明细

神州 · 资产 · 云主机 已对齐2026-07-11

  • sz-hosts = 总览(对齐 renderHwOverview
  • sz-host-<id> = 每台独立 section对齐 NAS / 路由器 / huawei-pc
  • #pane-sz-assets = 4 列网格(对齐 #pane-hardware
  • renderShenzhouHost(d, hostId) = 完整设备卡(对齐 renderHwLive / renderHwNas

2. 复用全局样式(禁止私造)

2.1 必须用的全局类 / 组件

用途 不要
指标卡 .card .card.compact .card-title .card-value .card-meta .card-row 自写 div + 内联 flex 仿卡片
可点总览格 .ops-statpointer + hover 无交互的纯色块
明细行 .infra-list .infra-row .infra-name .infra-status 表格硬写或一长串 span
状态色 .c-ok .c-err .c-warn .c-dim + .infra-status ok|err|warn 硬编码 #22c55e
进度条 miniBar(pct, sev)core 自写 progress bar
图标 ic(name) / tab 内 _szIcon 委托 ic emoji 当主图标(告警文案除外)
徽章 badgeXs / _szBadge 自写 badge class
转义 esc / _szEsc 直接插用户/API 字符串
告警条 .hw-alert(可复用)+ 通知按钮模式 只 toast 不落盘

2.2 允许的局部 CSS

  • pane 网格#pane-<tab-id> + #section-wrap-<section-id>(与硬件同模式)
  • 领域前缀:如 .sz-* / .mh-* 仅用于 布局钩子,不复制一套 card 皮肤
  • 禁止:复制一份「神州专用 card 颜色/圆角/字号」与神兽不一致

2.3 内联 style

  • 允许:间距微调(margin-bottom:10px)、单行 ellipsis、flex 子项 min-width:0
  • 禁止:用内联定义整套视觉(颜色、字号阶梯、阴影)绕过 styles.css

3. 世界与导航

世界 正式名 标准
local 神兽工坊 视觉与交互 真源
shenzhou 神州大地 复用神兽组件;数据 = 生产资产
manhuang 混沌蛮荒 同上;业务/情报边界不同
  • 世界切换在 页眉右侧logo/时间在左,主题切换最右)
  • 一级 tab 刷新时 禁止 因 badge 宽窄导致菜单跳动(.tab-badge:empty { display:none } + white-space:nowrap

4. 实现检查清单PR / 改 tab 前)

  1. 是否已有神兽侧同类块可抄?(硬件 / 运维 / 神兽列表)
  2. 是否用了 card / infra-list / miniBar / ic / esc
  3. 多实体(主机/站点/设备)是否 总览 section + 每实体独立 section
  4. pane 是否用 CSS grid 列布局,而不是「一个 section 里横排一百个」?
  5. 新 CSS 是否只加 pane/section 钩子,未复制 card 皮肤?
  6. 自动刷新是否只更新 section body_lastHtml),不重建 skeleton
  7. 缓存戳是否 update-cache-hash.sh

5. 反模式(踩过的坑)

反模式 为何不行 正确做法
26 站各一张 ops-stat 堆成一坨 密度爆炸、不像硬件 汇总 metric + infra-list
每台主机整行横铺(状态+磁盘+内存各占满宽) 纵向爆炸 独立 section + pane 4 列
为「省空间」砍掉 miniBar/infra 信息不足 保留完整卡,只改 网格
神州另起 _szCard 皮肤 双轨维护 section-title + 全局 card
自动刷新重建 tab DOM 菜单跳动 skeleton 一次badge 固定占位策略

6. 文件索引

角色 路径
本原则 docs/ops/joy-web-design.md
前端拆分 src/joy/web/js/README.md
硬件标准实现 src/joy/web/js/tabs/hardware.js
硬件 pane CSS styles.css#pane-hardware
神州资产对齐实现 src/joy/web/js/tabs/shenzhou.jsrenderShenzhouHost / SZ_CLOUD_HOSTS
神州资产 pane CSS styles.css#pane-sz-assets / #section-wrap-sz-host-*
TABS 注册 src/joy/web/app.jsSHENZHOU_TABS / sz-assets sections
神州产品边界 docs/ops/joy-shenzhou.md

7. 生产服务器设备卡信息层级

硬件是基础,业务关联也有价值2026-07-11 定稿)。

字段
硬件基础 reachable · disk%+bar · mem%+bar · load · uptime · inode% · 容器运行数
台账 role · region · specs · ip · panel · container runtime · web · hostname · ssh
业务关联 关键路径 n/红 · SSL ok/warn/crit · 业务系统 ids · 服务 n
元数据 sampled_at 年龄 · 告警条(含路径/SSL/收款)

展示节奏(对齐神兽硬件 NAS

  1. 告警条 — 仅有 issue 时
  2. 主卡 4 列 — 始终(在线 / 盘 / 存 / 载)
  3. 采样行 + 短档案 — 始终(角色 / SSH / 业务脉搏一句话)
  4. 业务关联 fold — 默认折叠,路径/SSL/收款异常时 open
  5. 机身详情 fold — 默认折叠,硬件阈值命中时 open

通知(神州 = 瓦普专场)

  • 硬件 tab → notifyTuxDevice → poke tux
  • 神州 tab → 一律 poke wapuunotifyShenzhou / notifyWapuuPath / notifyWapuuHost / notifyWapuuShenzhouAlert
  • 主机按钮文案固定「通知 wapuu」payload 对齐硬件:角色/指标/路径/SSL/触发项全文,禁止只甩 host id
  • wapuu 业务确认后infra 转 konqi、制度转 tux

采集:_PROBE_REMOTE 含 INODE + docker/podman ps_enrich_hosts_with_biz 挂 paths/ssl/business。

8. 关键路径(业务入口,非截图墙)

内容
主行 名 · 栈(WP/WP多站/CDN/静态/应用) · 状态 · 延迟/SLO · 钱标
短档案 biz · 宿主跳转 · 多站摘要 · SSL 剩余天 · URL
截图 fold 默认折叠;异常时 open
栈详情 fold WP 版本/插件/DB/子站已列·未列SSL宿主 load
WP 网络卡 安装维度:多站点 9 子站 vs critical_paths 已列对照
通知 notifyWapuuPath 全文 → poke wapuu

未列子站 ≠ 故障:在 WP 网络中但未进脉搏台账;要监控再加 critical_paths

栈扩展信息(只读,非面板内管理)

stack 接入字段
wp / wp-ms 主题(当前+已装) · 启用插件 slug@version · 目录插件数 · 网络级 sitewide · 未启用样例 · PHP/WP/DB
static / cdn HTTP Server · CF/源缓存状态 · Content-Type · Last-Modified · 宿主运行时
app 同上指纹 + 宿主 containers_n/runtime/cores · 角色摘要
全栈 SSL 剩余天 · 宿主 load/disk · 延迟/SLO

启停插件/换主题 → 宝塔或 SSH面板只展示 + 通知 wapuu。

9. 变更记录

日期 变更
2026-07-11 初版:以神兽硬件为标准;神州资产云主机按「总览 + 每台 section + 4 列」落地
2026-07-11 生产机设备卡inode/容器/采样时间/地域台账/路径·SSL·业务关联
2026-07-11 关键路径:栈类型/WP多站/SSL·SLO/截图折叠/wp_networks