[patch] 修改适中心跳机制 JD的平台登录抢占 提示弹框优化 并下发连接断开通知 托盘右击提示小标题显示精炼 增加store_name入回调方法做店铺名称定位
This commit is contained in:
131
main.py
131
main.py
@@ -613,6 +613,36 @@ class LoginWindow(QMainWindow):
|
||||
except Exception as e:
|
||||
self.add_log(f"处理平台连接事件失败: {e}", "ERROR")
|
||||
|
||||
def on_platform_kicked(self, platform_name: str, store_name: str, reason: str):
|
||||
"""处理平台被踢下线 - 显示弹窗警告"""
|
||||
try:
|
||||
self.add_log(f"⚠️ {platform_name}平台被踢下线: {store_name}, 原因: {reason}", "WARNING")
|
||||
|
||||
# 显示弹窗提示
|
||||
message_text = (
|
||||
f"【{store_name}】连接已断开\n\n"
|
||||
f"原因:{reason}\n\n"
|
||||
f"请确保:\n"
|
||||
f"1. 关闭网页版{platform_name}客户端\n"
|
||||
f"2. 关闭其他{platform_name}客户端\n"
|
||||
f"3. 确认只有本程序连接\n\n"
|
||||
f"处理完成后,请重新登录平台。"
|
||||
)
|
||||
QMessageBox.warning(
|
||||
self,
|
||||
f"{platform_name}连接已断开",
|
||||
message_text,
|
||||
QMessageBox.Ok
|
||||
)
|
||||
|
||||
# 更新状态显示
|
||||
self.status_label.setText(f"⚠️ {platform_name}已断开")
|
||||
self.status_label.setStyleSheet(
|
||||
"color: #ff6b6b; background: rgba(255, 107, 107, 0.1); border-radius: 12px; padding: 5px 10px;")
|
||||
|
||||
except Exception as e:
|
||||
self.add_log(f"显示平台断开提示失败: {e}", "ERROR")
|
||||
|
||||
def on_token_error(self, error_content: str):
|
||||
"""处理token错误 - 显示红色错误信息并停止所有操作"""
|
||||
try:
|
||||
@@ -761,23 +791,16 @@ class LoginWindow(QMainWindow):
|
||||
self.tray_icon.setIcon(self.style().standardIcon(self.style().SP_ComputerIcon))
|
||||
|
||||
# 创建托盘菜单
|
||||
tray_menu = QMenu()
|
||||
self.tray_menu = QMenu()
|
||||
|
||||
# 显示窗口动作
|
||||
show_action = QAction("显示主窗口", self)
|
||||
show_action.triggered.connect(self.show_window)
|
||||
tray_menu.addAction(show_action)
|
||||
# 连接菜单显示信号,实时更新状态
|
||||
self.tray_menu.aboutToShow.connect(self.update_tray_menu)
|
||||
|
||||
# 分隔线
|
||||
tray_menu.addSeparator()
|
||||
|
||||
# 退出动作
|
||||
quit_action = QAction("退出程序", self)
|
||||
quit_action.triggered.connect(self.quit_application)
|
||||
tray_menu.addAction(quit_action)
|
||||
# 初始化菜单内容
|
||||
self.update_tray_menu()
|
||||
|
||||
# 设置托盘菜单
|
||||
self.tray_icon.setContextMenu(tray_menu)
|
||||
self.tray_icon.setContextMenu(self.tray_menu)
|
||||
|
||||
# 设置托盘提示
|
||||
self.tray_icon.setToolTip("AI客服智能助手")
|
||||
@@ -790,6 +813,87 @@ class LoginWindow(QMainWindow):
|
||||
|
||||
print("[INFO] 系统托盘已初始化")
|
||||
|
||||
def update_tray_menu(self):
|
||||
"""实时更新托盘菜单,显示连接状态"""
|
||||
try:
|
||||
# 清空现有菜单
|
||||
self.tray_menu.clear()
|
||||
|
||||
# 获取WebSocket管理器
|
||||
ws_manager = get_websocket_manager()
|
||||
|
||||
# 1. 显示后端连接状态
|
||||
if ws_manager and ws_manager.backend_client and ws_manager.backend_client.is_connected:
|
||||
backend_status = QAction("✅ 后端已连接", self)
|
||||
backend_status.setEnabled(False) # 不可点击
|
||||
self.tray_menu.addAction(backend_status)
|
||||
|
||||
# 2. 显示已连接的平台信息
|
||||
platform_listeners = ws_manager.platform_listeners
|
||||
if platform_listeners:
|
||||
# 按平台分组店铺
|
||||
platform_stores = {}
|
||||
for key, info in platform_listeners.items():
|
||||
platform = info.get('platform', '')
|
||||
store_name = info.get('store_name', '')
|
||||
store_id = info.get('store_id', '')
|
||||
|
||||
if platform not in platform_stores:
|
||||
platform_stores[platform] = []
|
||||
|
||||
# 优先显示店铺名称,如果没有则显示 store_id 前8位
|
||||
if store_name:
|
||||
display_name = store_name
|
||||
else:
|
||||
display_name = store_id[:8] + "..." if len(store_id) > 8 else store_id
|
||||
|
||||
platform_stores[platform].append(display_name)
|
||||
|
||||
# 显示每个平台的店铺
|
||||
for platform, stores in platform_stores.items():
|
||||
stores_text = ", ".join(stores)
|
||||
platform_info = QAction(f"📊 {platform}: {stores_text}", self)
|
||||
platform_info.setEnabled(False) # 不可点击
|
||||
self.tray_menu.addAction(platform_info)
|
||||
else:
|
||||
# 后端已连接但没有平台连接
|
||||
no_platform = QAction("⚠️ 暂无平台连接", self)
|
||||
no_platform.setEnabled(False)
|
||||
self.tray_menu.addAction(no_platform)
|
||||
else:
|
||||
# 后端未连接
|
||||
backend_disconnected = QAction("❌ 后端未连接", self)
|
||||
backend_disconnected.setEnabled(False)
|
||||
self.tray_menu.addAction(backend_disconnected)
|
||||
|
||||
# 添加分隔线
|
||||
self.tray_menu.addSeparator()
|
||||
|
||||
# 3. 显示主窗口
|
||||
show_action = QAction("显示主窗口", self)
|
||||
show_action.triggered.connect(self.show_window)
|
||||
self.tray_menu.addAction(show_action)
|
||||
|
||||
# 添加分隔线
|
||||
self.tray_menu.addSeparator()
|
||||
|
||||
# 4. 退出程序
|
||||
quit_action = QAction("退出程序", self)
|
||||
quit_action.triggered.connect(self.quit_application)
|
||||
self.tray_menu.addAction(quit_action)
|
||||
|
||||
except Exception as e:
|
||||
print(f"[ERROR] 更新托盘菜单失败: {e}")
|
||||
# 如果更新失败,至少保证基本功能可用
|
||||
self.tray_menu.clear()
|
||||
show_action = QAction("显示主窗口", self)
|
||||
show_action.triggered.connect(self.show_window)
|
||||
self.tray_menu.addAction(show_action)
|
||||
|
||||
quit_action = QAction("退出程序", self)
|
||||
quit_action.triggered.connect(self.quit_application)
|
||||
self.tray_menu.addAction(quit_action)
|
||||
|
||||
def tray_icon_activated(self, reason):
|
||||
"""托盘图标被激活时的处理"""
|
||||
if reason == QSystemTrayIcon.DoubleClick:
|
||||
@@ -898,6 +1002,7 @@ class LoginWindow(QMainWindow):
|
||||
success=lambda: self.add_log("WebSocket连接管理器连接成功", "SUCCESS"),
|
||||
error=lambda error: self.add_log(f"WebSocket连接管理器错误: {error}", "ERROR"),
|
||||
platform_connected=self.on_platform_connected, # 新增:平台连接回调
|
||||
platform_disconnected=self.on_platform_kicked, # 新增:平台被踢回调
|
||||
token_error=self.on_token_error, # 新增:token错误回调
|
||||
disconnect=self.on_disconnect # 新增:被踢下线回调
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user