feat(device): 设备管理删除后即时移除列表项,不再触发重新查询;版本更新至V1.2.2并同步说明书

This commit is contained in:
2026-09-24 10:57:02 +08:00
parent 62f4032eca
commit e2f1fa1206
3 changed files with 38 additions and 25 deletions
+19 -24
View File
@@ -144,7 +144,7 @@ class GatewayConfigTool(QMainWindow):
self.refresh_ports()
def init_ui(self):
self.setWindowTitle("网关配置工具(宽带版 V1.2.1)")
self.setWindowTitle("网关配置工具(宽带版 V1.2.2)")
self.setWindowIcon(QIcon(resource_path("物联网网关.png")))
self.setMinimumSize(940, 640)
self.resize(1000, 700)
@@ -874,7 +874,6 @@ class DeviceDialog(QDialog):
self.resize(860, 520)
self._buf = ""
self._pending_del = None # 等待删除结果的MAC,"all"表示删除全部
self._parsed = False # 本次查询是否已完成解析(防止数据流中途误触发)
self._quiet = QTimer(self)
self._quiet.setSingleShot(True)
@@ -922,7 +921,6 @@ class DeviceDialog(QDialog):
if not self._serial_ok():
return
self._buf = ""
self._pending_del = None
self._parsed = False
self._quiet.stop()
self.table.setRowCount(0) # 清空旧数据,避免新旧混淆
@@ -937,20 +935,17 @@ class DeviceDialog(QDialog):
self._buf += text
self._quiet.start(600) # 数据流仍在到达,重置静默定时器
def _remove_row_by_mac(self, mac):
"""从表格中移除指定MAC的设备行, 返回是否移除成功。"""
mac_u = mac.upper()
for row in range(self.table.rowCount()):
item = self.table.item(row, 1)
if item and mac_u in item.text():
self.table.removeRow(row)
return True
return False
def _on_quiet(self):
if self._pending_del is not None:
buf = self._buf
if "deleted" in buf.lower():
self.status_lbl.setText(f"删除成功 ({self._pending_del})")
elif "not registered" in buf:
self.status_lbl.setText("删除失败:设备未注册")
elif "Para Error" in buf:
self.status_lbl.setText("删除失败:指令参数错误")
else:
self.status_lbl.setText("删除失败:设备无响应")
self._pending_del = None
self.query()
return
# 仅解析一次:避免数据流间歇触发的中途解析把表格清零
if self._parsed:
return
@@ -1052,11 +1047,12 @@ class DeviceDialog(QDialog):
QMessageBox.Yes | QMessageBox.No)
if ret != QMessageBox.Yes:
return
self._buf = ""
self._pending_del = mac
self.status_lbl.setText(f"正在删除 {mac} ...")
# 网关cudel无应答, 直接本地移除该行
self.main.send_command(f"cudel {mac}")
self._quiet.start(800)
if self._remove_row_by_mac(mac):
self.status_lbl.setText(f"已删除 {mac} (共 {self.table.rowCount()} 个设备)")
else:
self.status_lbl.setText(f"删除命令已发送 ({mac})")
def _del_all(self):
if not self._serial_ok():
@@ -1065,11 +1061,10 @@ class DeviceDialog(QDialog):
QMessageBox.Yes | QMessageBox.No)
if ret != QMessageBox.Yes:
return
self._buf = ""
self._pending_del = "all"
self.status_lbl.setText("正在删除全部设备 ...")
# 网关cudel无应答, 直接清空表格
self.main.send_command("cudel all")
self._quiet.start(800)
self.table.setRowCount(0)
self.status_lbl.setText("已删除全部设备")
def closeEvent(self, event):
self._quiet.stop()