fix: DbSelector 连接后自动选择第一个有数据的 DB,切换 DB 时重新加载键树
- 新增 getDefaultDb(): 优先恢复 lastDbMap > 第一个有数据的 DB > DB0 - onMounted 执行 DB 选择(覆盖首次连接和右键重连场景) - activeId watcher 改为完整 DB 选择流程(不再硬编码 DB0) - isConnected watcher 精简为仅加载自定义名称(避免竞态重复调用) - switchDb() 新增 scanKeys 重新加载键树
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, watch, computed } from 'vue'
|
import { ref, watch, computed, onMounted } from 'vue'
|
||||||
import { useConnectionStore } from '@renderer/stores/connection'
|
import { useConnectionStore } from '@renderer/stores/connection'
|
||||||
import { useKeyStore } from '@renderer/stores/key'
|
import { useKeyStore } from '@renderer/stores/key'
|
||||||
import { useI18n } from '@renderer/i18n'
|
import { useI18n } from '@renderer/i18n'
|
||||||
@@ -113,14 +113,36 @@ async function fetchDbInfo() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Determine the default DB: saved last DB > first non-empty > 0
|
||||||
|
function getDefaultDb(): number {
|
||||||
|
if (!connStore.activeId) return 0
|
||||||
|
// Restore saved DB if exists
|
||||||
|
const saved = connStore.lastDbMap[connStore.activeId]
|
||||||
|
if (saved !== undefined && saved !== null) return saved
|
||||||
|
// Auto-detect: first non-empty DB
|
||||||
|
for (let i = 0; i < dbCount.value; i++) {
|
||||||
|
if ((dbKeyCounts.value[i] ?? 0) > 0) return i
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initialize DB selection on mount (covers initial connect and right-click reconnect)
|
||||||
|
onMounted(async () => {
|
||||||
|
if (!connStore.isConnected || !connStore.activeId) return
|
||||||
|
loadCustomNames()
|
||||||
|
await fetchDbInfo()
|
||||||
|
const defaultDb = getDefaultDb()
|
||||||
|
selectedDb.value = defaultDb
|
||||||
|
keyStore.currentDb = defaultDb
|
||||||
|
await window.electronAPI.redis.selectDb(connStore.activeId, defaultDb)
|
||||||
|
await keyStore.scanKeys(connStore.activeId, '0', true)
|
||||||
|
})
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
() => connStore.isConnected,
|
() => connStore.isConnected,
|
||||||
async (connected) => {
|
(connected) => {
|
||||||
if (connected) {
|
if (connected) {
|
||||||
selectedDb.value = 0
|
|
||||||
keyStore.currentDb = 0
|
|
||||||
loadCustomNames()
|
loadCustomNames()
|
||||||
await fetchDbInfo()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@@ -128,12 +150,14 @@ watch(
|
|||||||
watch(
|
watch(
|
||||||
() => connStore.activeId,
|
() => connStore.activeId,
|
||||||
async () => {
|
async () => {
|
||||||
|
if (!connStore.isConnected || !connStore.activeId) return
|
||||||
loadCustomNames()
|
loadCustomNames()
|
||||||
if (connStore.isConnected) {
|
await fetchDbInfo()
|
||||||
selectedDb.value = 0
|
const defaultDb = getDefaultDb()
|
||||||
keyStore.currentDb = 0
|
selectedDb.value = defaultDb
|
||||||
await fetchDbInfo()
|
keyStore.currentDb = defaultDb
|
||||||
}
|
await window.electronAPI.redis.selectDb(connStore.activeId, defaultDb)
|
||||||
|
await keyStore.scanKeys(connStore.activeId, '0', true)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -142,6 +166,8 @@ async function switchDb(db: number) {
|
|||||||
selectedDb.value = db
|
selectedDb.value = db
|
||||||
connStore.saveLastDb(connStore.activeId, db)
|
connStore.saveLastDb(connStore.activeId, db)
|
||||||
await keyStore.selectDb(connStore.activeId, db)
|
await keyStore.selectDb(connStore.activeId, db)
|
||||||
|
// Reload key tree for the new DB
|
||||||
|
await keyStore.scanKeys(connStore.activeId, '0', true)
|
||||||
}
|
}
|
||||||
|
|
||||||
function formatCount(n: number): string {
|
function formatCount(n: number): string {
|
||||||
|
|||||||
Reference in New Issue
Block a user