feat: 添加局域网设备发现功能和链路胶囊优化
- 实现局域网设备发现面板,支持探测ESP32中继板并自动切换端点 - 添加POST /api/lan/probe接口用于设备探测,返回三态判决结果 - 实现快扫和全段扫描两种模式,支持种子地址优先探测 - 添加端点唯一写手机制,防止多处同时修改设备IP - 优化链路胶囊UI显示WiFi/EtherCAT/BLE连接状态和设备名称 - 修复EtherCAT链路OTA刷写期间PDO循环暂停和AL状态处理问题 - 调整PDO周期设置范围为0.125-4ms,支持亚毫秒显示为微秒 - 添加ESP32 WiFi使能开关控件样式和数据来源角标显示
This commit is contained in:
@@ -105,3 +105,36 @@ export function setQuietMode(quiet) {
|
||||
document.documentElement.dataset.dcuCalm = v;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 更新数据格右上角来源角标(WiFi / ECAT / BLE)。
|
||||
* 双通路无感切换:哪条链路**最后写入**本格,角标就标哪条(last-writer-wins)。
|
||||
* 同格若两路都在写,后到的会盖掉先到的来源——切换瞬间角标跟着变是预期行为。
|
||||
* @param {string|Element} cell 带 data-cell 的格子,或格子内任意元素
|
||||
* @param {'wifi'|'ecat'|'ble'|'off'} src 来源
|
||||
*/
|
||||
export function setCellSource(cell, src) {
|
||||
var root = cell;
|
||||
if (typeof cell === 'string') {
|
||||
root = document.querySelector('[data-cell="' + cell + '"]');
|
||||
} else if (cell && cell.nodeType === 1 && !cell.classList.contains('src-badge')) {
|
||||
root = typeof cell.closest === 'function' ? cell.closest('[data-cell]') : null;
|
||||
}
|
||||
if (!root || !root.querySelector) return;
|
||||
/* 不用 :scope —— 部分环境对它支持不稳,角标是格子内唯一直属 .src-badge */
|
||||
var badges = root.getElementsByClassName('src-badge');
|
||||
var badge = badges && badges[0];
|
||||
if (!badge) return;
|
||||
/* dual = WiFi 与 ECAT 同时在线(双通路) */
|
||||
var map = {
|
||||
wifi: 'WiFi', ecat: 'ECAT', ble: 'BLE', off: '--',
|
||||
dual: 'WiFi·ECAT',
|
||||
};
|
||||
var label = map[src] || '--';
|
||||
var kind = map[src] ? src : 'off';
|
||||
/* dual 用 wifi 同色系加粗边,避免第三套色 */
|
||||
var cls = 'src-badge src-' + (kind === 'dual' ? 'dual' : kind);
|
||||
if (badge.className !== cls) badge.className = cls;
|
||||
if (badge.textContent !== label) badge.textContent = label;
|
||||
if (root.dataset.src !== kind) root.dataset.src = kind;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user