feat(web-console): unify spatial UI and chat reset

This commit is contained in:
Miayui
2026-09-14 18:48:11 +08:00
parent 58f1a2da42
commit 84a3cd73bb
16 changed files with 333 additions and 86 deletions
+8 -8
View File
@@ -732,12 +732,12 @@
<header><div><h2>红外学习器 TCP 控制</h2></div><button type="button" data-close-extension-dialog="extensionGscuTcpDialog" aria-label="关闭"><i data-lucide="x"></i></button></header>
<section class="v2-gscu-status" id="extensionGscuTcpStatus" data-state="checking"><i data-lucide="radio-tower"></i><div><strong>正在读取连接状态</strong><small>--</small></div><b>CHECK</b></section>
<form id="extensionGscuTcpForm" class="v2-gscu-config-form">
<label><span>本机监听 IP</span><input id="extensionGscuTcpHost" inputmode="decimal" maxlength="45" placeholder="0.0.0.0" required /><small>填写 0.0.0.0 可监听所有网卡;模块端应填写这台 Linux 的实际局域网 IP。</small></label>
<label><span>监听端口</span><input id="extensionGscuTcpPort" type="number" min="1" max="65535" value="4444" required /><small>必须与 GSCU1B 自定义 TCP 服务器端口一致。</small></label>
<label><span>本机监听 IP</span><input id="extensionGscuTcpHost" inputmode="decimal" maxlength="45" placeholder="0.0.0.0" aria-describedby="extensionGscuTcpHostHint" required /><small class="visually-hidden" id="extensionGscuTcpHostHint">填写 0.0.0.0 可监听所有网卡;模块端应填写这台 Linux 的实际局域网 IP。</small></label>
<label><span>监听端口</span><input id="extensionGscuTcpPort" type="number" min="1" max="65535" value="4444" aria-describedby="extensionGscuTcpPortHint" required /><small class="visually-hidden" id="extensionGscuTcpPortHint">必须与 GSCU1B 自定义 TCP 服务器端口一致。</small></label>
<button class="v2-extension-primary" type="submit" id="extensionGscuTcpApply">应用并开始监听</button>
</form>
<section class="v2-gscu-actions">
<header><div><strong>TCP 动作调试</strong><small>设备 ID 唯一标识控制对象;对象与动作可填写多个自然语言别名</small></div><label><span>红外槽位</span><input id="extensionGscuSlot" type="number" min="1" max="248" value="1" /></label><label><span>设备 ID</span><input id="extensionGscuDeviceId" maxlength="64" placeholder="toy-light-001" /></label><label><span>控制对象名称</span><input id="extensionGscuObjectNames" maxlength="240" placeholder="闪烁灯、闪光灯、闪灯玩具" /></label><label><span>执行动作</span><input id="extensionGscuActionNames" maxlength="240" placeholder="打开、开启、启动" /></label></header>
<header><div><strong>TCP 动作调试</strong></div><label><span>红外槽位</span><input id="extensionGscuSlot" type="number" min="1" max="248" value="1" /></label><label><span>设备 ID</span><input id="extensionGscuDeviceId" maxlength="64" placeholder="toy-light-001" /></label><label><span>控制对象名称</span><input id="extensionGscuObjectNames" maxlength="240" placeholder="闪烁灯、闪光灯、闪灯玩具" /></label><label><span>执行动作</span><input id="extensionGscuActionNames" maxlength="240" placeholder="打开、开启、启动" /></label></header>
<div class="v2-gscu-action-grid">
<button type="button" data-gscu-action="info">查询设备</button>
<button type="button" data-gscu-action="learn">开始学习</button>
@@ -757,12 +757,12 @@
<label><span>恢复出厂确认</span><input id="extensionGscuDangerConfirm" autocomplete="off" placeholder="恢复出厂请输入 RESET_DEVICE" /></label>
<div><button class="danger" type="button" data-gscu-action="erase">擦除全部红外码</button><button class="danger" type="button" data-gscu-action="reset">恢复出厂设置</button></div>
</details>
<section class="v2-gscu-command-catalog"><header><strong>已学习红外信号</strong><small>按设备 ID 分组;对象名称用于自然语言识别和调试,动作请包含结果值,如“切换为蓝色”</small></header><div id="extensionGscuNamedCommands"></div></section>
<section class="v2-gscu-command-catalog"><header><strong>已学习红外信号</strong></header><div id="extensionGscuNamedCommands"></div></section>
<details class="v2-gscu-result" id="extensionGscuTcpResultDetails"><summary>JSON 调试结果</summary><pre id="extensionGscuTcpResult">等待操作</pre></details>
</section>
</dialog>
<dialog class="v2-extension-dialog v2-pet-settings-dialog" id="extensionPetSettingsDialog" aria-labelledby="extensionPetSettingsTitle" aria-describedby="extensionPetSettingsDescription">
<header><div><h2 id="extensionPetSettingsTitle">宠物设置</h2><p id="extensionPetSettingsDescription">添加或编辑宠物资料;保存后可在 NFC 设备授权中绑定卡片。</p></div><button type="button" data-close-extension-dialog="extensionPetSettingsDialog" data-dialog-close aria-label="关闭宠物设置"><i data-lucide="x"></i></button></header>
<header><div><h2 id="extensionPetSettingsTitle">宠物设置</h2><p class="visually-hidden" id="extensionPetSettingsDescription">添加或编辑宠物资料;保存后可在 NFC 设备授权中绑定卡片。</p></div><button type="button" data-close-extension-dialog="extensionPetSettingsDialog" data-dialog-close aria-label="关闭宠物设置"><i data-lucide="x"></i></button></header>
<div class="v2-pet-settings-body" id="extensionPetSettingsBody"></div>
<footer class="v2-pet-settings-footnote"><i data-lucide="database"></i><span>宠物资料由后端永久保存,只有在此处手动删除才会移除。</span></footer>
</dialog>
@@ -4085,12 +4085,12 @@
</header>
<section class="v2-nfc-inline" data-state="${nfcState}">
<span class="v2-nfc-inline-icon"><i data-lucide="${nfcPet ? "paw-print" : nfcDevice ? "badge-check" : "scan-line"}"></i><b></b></span>
<div><strong>${escapeHtml(nfcTitle)}</strong><p>${escapeHtml(nfcNote)}</p>${nfcCapabilities.length ? `<div>${nfcCapabilities.slice(0, 6).map((capability) => `<i>${escapeHtml(capability.name)}</i>`).join("")}</div>` : ""}</div>
<div><strong title="${escapeHtml(nfcNote)}">${escapeHtml(nfcTitle)}</strong>${nfcPet ? "" : `<p>${escapeHtml(nfcNote)}</p>`}${nfcCapabilities.length ? `<div>${nfcCapabilities.slice(0, 6).map((capability) => `<i>${escapeHtml(capability.name)}</i>`).join("")}</div>` : ""}</div>
<button type="button" data-open-nfc-binding>${nfcPet ? "查看宠物" : nfcDevice ? "查看授权" : nfcCard?.uid ? "关联卡片" : "开始感应"}</button>
</section>
<div class="v2-extension-gateway">
<span><i data-lucide="usb"></i></span>
<div><strong>${gatewayLabel}</strong><small>${escapeHtml(gatewayNote)}</small></div>
<div><strong title="${escapeHtml(gatewayNote)}">${gatewayLabel}</strong></div>
<b>${String(health.transport || "GSCU").toUpperCase()}</b>
<button type="button" data-open-gscu-tcp><i data-lucide="settings-2"></i><span>TCP 设置</span></button>
</div>
@@ -4098,7 +4098,7 @@
${nfcPet ? renderDetectedPetCard(nfcPet) : ""}
${devices.length ? devices.map((device) => `
<article class="v2-extension-synced-device">
<header><span><i data-lucide="${device.cardUid ? "badge-check" : "cpu"}"></i></span><div><strong>${escapeHtml(device.name)}</strong><small>${escapeHtml(device.type)}${device.cardUid ? " · 已绑定 NFC" : ""}</small></div><b>${device.actions.length} 项能力</b></header>
<header><span><i data-lucide="${device.cardUid ? "badge-check" : "cpu"}"></i></span><div><strong title="${escapeHtml(device.type || device.name)}">${escapeHtml(device.name)}</strong></div><b>${device.actions.length} 项能力</b></header>
<div>${device.actions.slice(0, 8).map((action) => `<span>${escapeHtml(action)}</span>`).join("")}</div>
</article>`).join("") : nfcPet ? "" : `
<div class="v2-extension-empty">