Jokul
54350b152e
fix: 移除空 CSS 规则 .leaf-item
2026-07-11 15:42:31 +08:00
Jokul
a782180dd3
Revert "feat: 树状视图路径压缩 - 单子节点文件夹自动合并"
...
This reverts commit ccb91731fc .
2026-07-11 15:37:33 +08:00
Jokul
ccb91731fc
feat: 树状视图路径压缩 - 单子节点文件夹自动合并
...
文件夹只有 1 个子节点时合并名称, 避免不必要的层级展开:
- a:b:c:d (单个 key) 直接显示为 a:b:c:d 而非 4 层嵌套
- a:b:c + a:b:d 仍展开为 a > b > {c, d} (b 有 2 个子节点)
- a:b:c + a:d:e 显示为 a > {b:c, d:e} (b/d 各 1 子节点, 合并)
2026-07-11 15:35:06 +08:00
Jokul
4305773f0d
refactor: KeyList 移除列表模式, 只保留树状模式
...
- 移除 viewMode、虚拟滚动 (useVirtualizer)、scrollRef
- 移除列表视图模板和样式 (.key-flat-list, .key-item 等)
- 移除工具栏的列表/树状切换按钮
- 树状叶子节点新增多选 checkbox (原先只有列表模式有)
- 保留 .key-checkbox 样式供树状多选使用
2026-07-11 15:30:56 +08:00
Jokul
5a479d416e
refactor: Scan Count 从全局设置移到连接配置
...
- ConnectionConfig 新增 scanCount 字段 (默认 100)
- NewConnectionDialog 基本信息区新增 Scan Count 输入框
- key.ts 改为从 activeConnection.scanCount 读取
- SettingsView 移除 Scan Count 设置项
- app store 移除 scanCount 和 setScanCount
- 主进程 store ConnectionConfig 同步新增字段
2026-07-11 15:22:58 +08:00
Jokul
ac0e6af233
fix: key scan 使用 app store 的 scanCount 设置替代硬编码 100
2026-07-11 15:18:21 +08:00
Jokul
fd40207af5
fix: 树状视图展开文件夹为空 - 递归拍平渲染
...
原模板只遍历 treeData 根级节点, 从不渲染 node.children, 导致展开后为空。
改为 flattenedTree computed 将树拍平为列表:
- 只包含已展开文件夹的子节点
- 每项带 level 用于缩进 (paddingLeft)
- 文件夹和叶子节点在列表中按正确顺序排列
- 叶子节点支持 active/selected 高亮和右键菜单
2026-07-11 15:13:51 +08:00
Jokul
4602ec5979
fix: vItem.key 类型 Key (含 bigint) 转为 String 兼容 Vue :key
2026-07-11 15:10:25 +08:00
Jokul
16175a4635
fix: 移除渲染进程中的 Buffer 调用, 改用浏览器兼容的 hex 转换
...
- binary.ts 新增 strToHex/hexToStr/binaryToHex/hexToBinary 四个函数
- KeyList.vue 导入导出功能用这些函数替代 Buffer.from()
- 渲染进程无 Node.js 访问权限, 不应使用 Buffer 全局对象
2026-07-11 15:09:23 +08:00
Jokul
8f6bf7841c
fix: KeyList useVirtualizer getScrollElement 类型不匹配 (undefined -> null)
2026-07-11 15:06:55 +08:00
Jokul
f6b85106a2
style: 优化连接弹窗 - 分区折叠 + 视觉层次
...
- 基本连接信息始终显示, 带卡片背景和图标标题
- TLS/Sentinel/Cluster/SSH 改为可折叠面板, 默认折叠
- 折叠标题显示已启用标签 (Enabled tag)
- 内联样式替换为 CSS 类 (.file-input-row, .form-input)
- 弹窗宽度 520px -> 580px
- 深色/浅色主题适配
2026-07-11 14:55:39 +08:00
Jokul
6be62e0fe6
style: Key Statistics 表格列宽合理分配, 全部 min-width 拉满
2026-07-11 14:36:35 +08:00
Jokul
0d55b10822
fix: Key Statistics 表格宽度拉满
2026-07-11 14:34:13 +08:00
Jokul
c68306b26b
feat: 标题栏和占位图使用 icon.svg 替代 JRD 文字
2026-07-11 14:22:07 +08:00
Jokul
d804e377a3
fix: 右键菜单删除项使用 common.delete i18n key
2026-07-11 00:33:21 +08:00
Jokul
260cbb36d0
fix: 右键删除国际化 + 移除连接卡片左键事件
...
- 修复删除确认弹窗使用正确的 i18n key (connection.deleteConfirm)
- 删除按钮使用 common.delete 而非不存在的 connection.delete
- 新增 switchTo i18n key (5 种语言)
- ConnectionCard 移除 @click 左键事件
- 右键菜单新增「切换到」选项 (已连接但非活跃时显示)
2026-07-11 00:30:47 +08:00
Jokul
b032c15164
feat: 连接卡片右键菜单 (连接/断开、编辑、复制、删除)
...
- ConnectionCard 移除悬浮操作按钮, 简化为纯展示+左键连接
- ConnectionList 新增右键上下文菜单 (Teleport to body)
- 菜单项: 连接/断开(按状态切换)、编辑、复制连接、删除
- 删除前确认弹窗, 支持点击外部/右键关闭菜单
2026-07-11 00:24:24 +08:00
Jokul
eda30250c6
refactor: 迁移至 electron-vite 官方推荐目录结构
...
- electron/* -> src/main/* (主进程)
- electron/preload.ts -> src/preload/index.ts (预加载)
- src/electron-api.d.ts -> src/preload/index.d.ts (类型声明)
- src/* -> src/renderer/src/* (渲染进程)
- src/index.html -> src/renderer/index.html
- electron.vite.config.ts 简化为自动入口检测 (零配置)
- tsconfig.app.json -> tsconfig.web.json, 更新 includes/paths
- 构建产物 dist-electron/ -> out/ (修复 main/preload 输出覆盖 bug)
- 更新 package.json main 字段 + electron-builder files
- 更新 .gitignore + eslint ignores
- 更新 AGENTS.md 架构文档
2026-07-10 23:46:34 +08:00
Jokul
bdcf4fe299
refactor: restructure project layout
...
- Move main process to electron/main/
- Move preload to electron/preload/
- Add shared types in electron/shared/
- Split redis-service into modular redis/ directory
- Flatten renderer to src/ (remove src/renderer/ nesting)
- Update electron.vite.config.ts paths
- Update tsconfig paths
- Output to electron-dist/
2026-07-04 21:12:50 +08:00
Jokul
687fea4018
fix: 更新所有图标为 JRD
...
- 任务栏图标使用 nativeImage
- Linux 使用 app.setIcon()
- TitleBar logo 改为 JRD
- MainArea placeholder 改为 JRD
2026-07-04 20:34:34 +08:00
Jokul
d3f09f0e87
fix: 默认语言改为中文
2026-07-04 20:22:36 +08:00
Jokul
7f2c753470
fix: 修复 preload 路径 (.mjs 而不是 .js)
...
- electron-vite v3 输出 .mjs 文件
- 更新 preload 路径为 index.mjs
- 这是 window.electronAPI undefined 的根本原因
2026-07-04 20:10:58 +08:00
Jokul
b9d64ed851
fix: register Element Plus icons globally
...
- Import and register all @element-plus/icons-vue
- Fixes icons showing as squares/rectangles
2026-07-04 19:54:34 +08:00
Jokul
4075f20c07
fix: test connection passing auth instead of password
...
- testConnection now maps auth -> password for Redis service
- fixes test connection failing even with correct credentials
2026-07-04 19:52:30 +08:00
Jokul
7c0cce3e64
feat(phase7): pattern search, health check, keyboard shortcuts
...
- KeyList: pattern input for Redis MATCH, local filter, Go button
- ConnectionStore: health check interval (5s ping), healthOk state
- StatusBar: health indicator (unstable = yellow pulse)
- RedisService: ping, isConnected methods
- Sidebar: Delete key (Del), deselect (Esc), refresh (F5)
- useKeyboard: expanded shortcut map
2026-07-04 19:39:22 +08:00
Jokul
0ac0436cfd
feat(phase6): test connection, keyboard shortcuts, import/export
...
- NewConnectionDialog: test connection button before save
- useKeyboard composable: Ctrl+N (new), Ctrl+R (refresh keys)
- ConnectionList: import/export JSON buttons
- ConnectionStore: testConnection, exportConnections, importConnections
- i18n support in Sidebar (keyboard shortcuts)
2026-07-04 19:35:03 +08:00
Jokul
6b9c6a1ed5
feat(phase5): stream editor, i18n, settings, key management
...
- StreamEditor: view/add/trim/delete entries with field management
- KeyDetail: TTL editor dialog, rename dialog, copy key name button
- i18n: English + Chinese locale system with composable
- SettingsView: theme selector, language switch, scan count, font size
- MainArea: added Settings tab
- RedisService: stream/rename/exists operations
- Preload: stream/rename/exists IPC channels
2026-07-04 18:26:51 +08:00
Jokul
4c66263477
feat(phase4e): batch delete with multi-select
...
- KeyList: multi-select mode with checkbox toggle
- Batch delete bar shows selected count + delete button
- RedisService: batchDelete using pipeline
- Preload: batchDelete IPC channel
2026-07-04 18:09:01 +08:00
Jokul
ff09f5dc03
feat(phase4): list/set/zset editors, CLI, slow log, DB selector
...
- ListEditor: pagination, push, edit, remove elements
- SetEditor: filter, add, remove members
- ZsetEditor: filter, add with score, remove members
- CliView: interactive terminal with command history
- SlowLogView: slow log table with time/duration/command
- DbSelector: dropdown to switch Redis databases (0-15)
- StatusBar integrated with DB selector
- MainArea: added CLI and Slow Log tabs
- KeyDetail: dispatch to List/Set/Zset editors
- RedisService: list/set/zset/slowlog/memory operations
- Preload: all new IPC channels typed
2026-07-04 18:07:33 +08:00
Jokul
272eb6b3af
feat(phase3): key browser MVP
...
- useKeyStore (Pinia): scan, tree view, key data cache, db switching
- KeyBrowser: split pane with KeyList + KeyDetail
- KeyList: SCAN pagination, filter, tree toggle, load more
- KeyDetail: type badge, TTL display, delete, type-based editor dispatch
- StringEditor: view/edit with JSON auto-format
- HashEditor: field table, add/edit/delete fields
- StatusView: INFO dashboard with stat cards + section grid
- MainArea: tab host (Status / Keys)
- RedisService: selectDb, dbSize
- Preload: selectDb, dbSize IPC channels
- App.vue updated with MainArea layout
2026-07-04 17:48:41 +08:00
Jokul
4f9398c65d
feat(phase2): connection management
...
- RedisService in main process (ioredis wrapper, execute, scan, hash ops)
- electron-store for connection/settings persistence
- safeStorage credential encrypt/decrypt
- IPC handlers for redis, storage, credential channels
- Preload API typed with all new channels
- useConnectionStore (Pinia) with connect/disconnect/save/delete
- ConnectionCard with 3D hover effect + status indicator
- ConnectionList with search filter
- NewConnectionDialog (create/edit connection form)
- Sidebar component
- StatusBar with live connection status + pulse animation
- App.vue updated with Sidebar layout
2026-07-04 17:45:19 +08:00
Jokul
7e5d61c099
feat(phase1): architecture skeleton
...
- Electron 33 main process with frameless window, IPC, win-state persistence
- Preload with contextBridge typed API (window, theme, dialog)
- Vue 3 + Pinia + Element Plus + Vue Router renderer
- Dark/light dual theme via CSS custom properties
- TitleBar with window controls + theme toggle
- StatusBar placeholder
- Design spec document
2026-07-04 17:21:00 +08:00