feat(ui): 界面体验一轮打磨(快捷键/暂停滚动/会话恢复/JSON 预览)
- 全局 Ctrl+Enter 发送;订阅框 Enter 提交、Esc 退出编辑;过滤框 Esc 清空 - 消息流新增「暂停/恢复」:暂停时画面不随新消息跳动,消息仍入环形缓冲 - JSON 负载折叠态预览按原始数据美化展示(多行缩进,超 40 行兜底截断) - 标签页持久化(ui-state.json),重启恢复工作区;无可恢复标签时自动打开 首个自连连接的工作区,避免「已连上却演空态」 - 侧边栏 Error 连接行内红字显示失败原因;侧边栏/订阅面板补竖分隔线 - 消息订阅色条上下留隙,不再连成一整条竖线 - 发布被当前过滤条件隐藏时给出「已发送」提示 - 连接表单:主机+端口同行;TLS 证书三个路径字段加「浏览…」(rfd) - 主题切换/系统外观变化后强制整窗重绘,修未收敛区域的旧色残影 - 设置主题文案改「跟随系统」(跟随逻辑此前已实现)
This commit is contained in:
@@ -207,6 +207,28 @@ impl Storage {
|
||||
elog!("保存设置失败: {e}");
|
||||
}
|
||||
}
|
||||
|
||||
// ── ui state(标签页会话恢复) ──
|
||||
pub fn load_ui_state(&self) -> UiState {
|
||||
self.read_json("ui-state.json")
|
||||
.ok()
|
||||
.flatten()
|
||||
.unwrap_or_default()
|
||||
}
|
||||
pub fn save_ui_state(&self, state: &UiState) {
|
||||
if let Err(e) = self.write_json("ui-state.json", state) {
|
||||
elog!("保存界面状态失败: {e}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// 会话 UI 状态:打开的标签页与活动标签,用于重启后恢复工作区。
|
||||
#[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize)]
|
||||
pub struct UiState {
|
||||
#[serde(default)]
|
||||
pub open_tabs: Vec<String>,
|
||||
#[serde(default)]
|
||||
pub active_tab: Option<String>,
|
||||
}
|
||||
|
||||
impl Default for Storage {
|
||||
|
||||
Reference in New Issue
Block a user