fix(web): 收口 HWPOD Node 接入体验

This commit is contained in:
root
2026-07-15 18:09:28 +02:00
parent ff4bc3c9f3
commit 32a95c06a7
8 changed files with 50 additions and 36 deletions
@@ -61,7 +61,7 @@ const formatSize = (value: number): string =>
v-if="metadata?.artifact.downloadUrl"
class="download-button"
:href="metadata.artifact.downloadUrl"
download="hwlab-node.py"
:download="metadata.artifact.fileName"
>下载 Python 单文件</a>
<p v-else class="download-blocked">发布 artifact 当前不可用</p>
@@ -92,29 +92,21 @@ const formatSize = (value: number): string =>
<ol class="install-steps">
<li>
<strong>下载并固定文件</strong>
<p>将单文件保存到用户可写目录不要从浏览器临时目录长期运行</p>
<p>将单文件保存到 owning YAML 允许的用户可写目录不要从浏览器临时目录长期运行</p>
<details>
<summary>查看文件建议</summary>
<code>mkdir C:\HWLAB</code>
<code>move .\{{ metadata?.artifact.fileName || "hwlab-node.py" }} C:\HWLAB\hwlab-node.py</code>
<summary>查看配置边界</summary>
<span>实际运行目录交互用户和工作区根由 owning YAML 与受控节点配置拥有网页不猜测目标路径</span>
</details>
</li>
<li>
<strong>校验 SHA-256</strong>
<p>将本机结果与页面上方发布 SHA 完整比对不一致时停止运行并重新下载</p>
<details>
<summary>查看 PowerShell 命令</summary>
<code>Get-FileHash C:\HWLAB\hwlab-node.py -Algorithm SHA256</code>
</details>
<details><summary>查看校验要求</summary><span>使用 Windows 本机文件哈希工具校验实际下载文件文件名以发布元数据为准</span></details>
</li>
<li>
<strong>在交互用户会话启动</strong>
<p>使用本机 Python 3 启动图形节点保持窗口或托盘程序运行</p>
<details>
<summary>查看启动命令</summary>
<code>py -3 C:\HWLAB\hwlab-node.py</code>
<code>python C:\HWLAB\hwlab-node.py</code>
</details>
<p>使用 owning YAML 选择的 Windows 交互用户与原生 Python 启动图形节点保持窗口或托盘程序运行</p>
<details><summary>查看启动边界</summary><span>不得使用 WSL PythonSSH 辅助解释器Bun 运行器或非交互 Windows 服务冒充完成态</span></details>
</li>
<li>
<strong>选择 Node 并观察 readiness</strong>
@@ -17,6 +17,7 @@ defineProps<{ stages: HwpodNodeReadinessStage[] }>();
<strong>{{ stage.label }}</strong>
<small>{{ stage.authority }}</small>
<p v-if="stage.blocker">{{ stage.blocker.summary }}</p>
<p v-if="stage.nextAction" class="stage-action"><strong>下一步</strong>{{ stage.nextAction.label }}<code>{{ stage.nextAction.entrypoint }}</code></p>
</div>
<span class="stage-status">{{ stage.status === 'ready' ? '已就绪' : stage.status === 'blocked' ? '阻塞' : '待观测' }}</span>
</li>
@@ -33,6 +34,9 @@ li[data-status="blocked"] .stage-index { border-color: #b46b4b; background: #fff
.readiness-rail strong { display: block; color: #1d302c; font-size: .86rem; }
.readiness-rail small { color: #71807b; font: .67rem/1.4 ui-monospace, SFMono-Regular, Consolas, monospace; }
.readiness-rail p { margin: 4px 0 0; color: #79503b; font-size: .75rem; line-height: 1.4; }
.stage-action { display: grid; gap: 2px; color: #31564d !important; }
.stage-action strong { font-size: .7rem; }
.stage-action code { color: #687872; font-size: .66rem; overflow-wrap: anywhere; }
.stage-status { margin-top: 4px; color: #5e6f69; font-size: .7rem; font-weight: 800; }
li[data-status="ready"] .stage-status { color: #2c7567; }
li[data-status="blocked"] .stage-status { color: #9b4f2d; }