feat(device): 设备管理删除后即时移除列表项,不再触发重新查询;版本更新至V1.2.2并同步说明书
This commit is contained in:
+19
-24
@@ -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)
|
||||
@@ -873,7 +873,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)
|
||||
@@ -921,7 +920,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) # 清空旧数据,避免新旧混淆
|
||||
@@ -936,20 +934,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
|
||||
@@ -1051,11 +1046,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():
|
||||
@@ -1064,11 +1060,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()
|
||||
|
||||
+19
-1
@@ -150,7 +150,7 @@ cover_info = [
|
||||
["适用设备", "物联网网关"],
|
||||
["通信接口", "串口(UART),波特率默认500000可修改"],
|
||||
["运行环境", "Windows 7/10/11"],
|
||||
["文档版本", "V1.0"],
|
||||
["文档版本", "V1.1"],
|
||||
]
|
||||
cover_table = Table(cover_info, colWidths=[40 * mm, 90 * mm])
|
||||
cover_table.setStyle(TableStyle([
|
||||
@@ -187,6 +187,7 @@ toc_items = [
|
||||
(" 3.3", "Lora信道配置"),
|
||||
(" 3.4", "自定义指令"),
|
||||
(" 3.5", "通讯日志"),
|
||||
(" 3.6", "设备管理"),
|
||||
("4", "指令参考"),
|
||||
("5", "常见问题(FAQ)"),
|
||||
("6", "注意事项"),
|
||||
@@ -213,6 +214,7 @@ features = [
|
||||
["Lora信道配置", "选择并设置Lora通信信道频率(470.1MHz ~ 492.6MHz)"],
|
||||
["自定义指令", "支持手动输入任意指令与网关交互"],
|
||||
["通讯日志", "实时显示发送和接收的通讯数据,便于调试"],
|
||||
["设备管理", "查询/删除网关已注册的通讯单元设备,删除后即时更新列表"],
|
||||
]
|
||||
story.append(make_table(features[0], features[1:], col_widths=[35 * mm, 115 * mm]))
|
||||
story.append(Spacer(1, 3 * mm))
|
||||
@@ -352,6 +354,19 @@ story.append(make_table(["颜色", "类型", "说明"], log_rows, col_widths=[25
|
||||
story.append(Spacer(1, 2 * mm))
|
||||
story.append(note(f"点击{LQ}清空日志{RQ}按钮可清除当前日志内容。日志数据仅保留在内存中,关闭软件后自动清除。"))
|
||||
|
||||
story.append(heading2("3.6 设备管理"))
|
||||
story.append(body(
|
||||
f"点击{LQ}设备管理{RQ}按钮打开设备管理对话框,可查询与删除网关已注册的通讯单元设备:"
|
||||
))
|
||||
mgmt_rows = [
|
||||
[f"{LQ}刷新查询{RQ}", "向网关发送查询指令,列出全部已注册设备(类型、MAC、传感器类型、电量、RSSI/SNR、在线状态等)"],
|
||||
[f"{LQ}删除{RQ}", "点击设备行右侧的删除按钮并确认后,立即从列表中移除该设备(列表即时更新,无需重新查询)"],
|
||||
[f"{LQ}删除全部设备{RQ}", "删除网关上全部已注册设备,列表清空"],
|
||||
]
|
||||
story.append(make_table(["操作", "说明"], mgmt_rows, col_widths=[35 * mm, 115 * mm]))
|
||||
story.append(Spacer(1, 2 * mm))
|
||||
story.append(note("删除操作直接生效,若需确认设备列表最新状态,可再次点击刷新查询。"))
|
||||
|
||||
story.append(PageBreak())
|
||||
|
||||
# ==================== 4. 指令参考 ====================
|
||||
@@ -363,6 +378,9 @@ story.append(Spacer(1, 2 * mm))
|
||||
cmd_rows = [
|
||||
["para", "读取网关全部配置参数", "查看配置(para)"],
|
||||
["lora fc <频率>", "设置Lora信道频率(Hz)", "Lora信道配置"],
|
||||
["culs", "查询已注册通讯单元设备列表", "设备管理-刷新查询"],
|
||||
["cudel <MAC>", "删除指定MAC的通讯单元设备", "设备管理-删除"],
|
||||
["cudel all", "删除全部已注册通讯单元设备", "设备管理-删除全部设备"],
|
||||
]
|
||||
story.append(make_table(
|
||||
["指令格式", "功能说明", "对应操作"],
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user