Compare commits
2 Commits
44df1d5800
...
e6b28c9edc
Author | SHA1 | Date |
---|---|---|
tiny-craft | e6b28c9edc | |
tiny-craft | e28d091500 |
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -14,7 +14,7 @@ func containsBinary(str string) bool {
|
||||||
//}
|
//}
|
||||||
rs := []rune(str)
|
rs := []rune(str)
|
||||||
for _, r := range rs {
|
for _, r := range rs {
|
||||||
if !unicode.IsPrint(r) {
|
if !unicode.IsPrint(r) && r != '\n' {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,6 @@ import ConnectionPane from './components/sidebar/ConnectionPane.vue'
|
||||||
import ContentServerPane from './components/content/ContentServerPane.vue'
|
import ContentServerPane from './components/content/ContentServerPane.vue'
|
||||||
import useTabStore from './stores/tab.js'
|
import useTabStore from './stores/tab.js'
|
||||||
import usePreferencesStore from './stores/preferences.js'
|
import usePreferencesStore from './stores/preferences.js'
|
||||||
import useConnectionStore from './stores/connections.js'
|
|
||||||
import ContentLogPane from './components/content/ContentLogPane.vue'
|
import ContentLogPane from './components/content/ContentLogPane.vue'
|
||||||
import ContentValueTab from '@/components/content/ContentValueTab.vue'
|
import ContentValueTab from '@/components/content/ContentValueTab.vue'
|
||||||
import ToolbarControlWidget from '@/components/common/ToolbarControlWidget.vue'
|
import ToolbarControlWidget from '@/components/common/ToolbarControlWidget.vue'
|
||||||
|
@ -32,7 +31,6 @@ const data = reactive({
|
||||||
|
|
||||||
const tabStore = useTabStore()
|
const tabStore = useTabStore()
|
||||||
const prefStore = usePreferencesStore()
|
const prefStore = usePreferencesStore()
|
||||||
const connectionStore = useConnectionStore()
|
|
||||||
const logPaneRef = ref(null)
|
const logPaneRef = ref(null)
|
||||||
const exThemeVars = computed(() => {
|
const exThemeVars = computed(() => {
|
||||||
return extraTheme(prefStore.isDark)
|
return extraTheme(prefStore.isDark)
|
||||||
|
|
|
@ -2,16 +2,16 @@
|
||||||
import { computed, h, nextTick, reactive, ref } from 'vue'
|
import { computed, h, nextTick, reactive, ref } from 'vue'
|
||||||
import IconButton from '@/components/common/IconButton.vue'
|
import IconButton from '@/components/common/IconButton.vue'
|
||||||
import Refresh from '@/components/icons/Refresh.vue'
|
import Refresh from '@/components/icons/Refresh.vue'
|
||||||
import useConnectionStore from 'stores/connections.js'
|
|
||||||
import { map, size, split, uniqBy } from 'lodash'
|
import { map, size, split, uniqBy } from 'lodash'
|
||||||
import { useI18n } from 'vue-i18n'
|
import { useI18n } from 'vue-i18n'
|
||||||
import Delete from '@/components/icons/Delete.vue'
|
import Delete from '@/components/icons/Delete.vue'
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
import { useThemeVars } from 'naive-ui'
|
import { useThemeVars } from 'naive-ui'
|
||||||
|
import useBrowserStore from 'stores/browser.js'
|
||||||
|
|
||||||
const themeVars = useThemeVars()
|
const themeVars = useThemeVars()
|
||||||
|
|
||||||
const connectionStore = useConnectionStore()
|
const browserStore = useBrowserStore()
|
||||||
const i18n = useI18n()
|
const i18n = useI18n()
|
||||||
const data = reactive({
|
const data = reactive({
|
||||||
loading: false,
|
loading: false,
|
||||||
|
@ -36,7 +36,7 @@ const tableRef = ref(null)
|
||||||
|
|
||||||
const loadHistory = () => {
|
const loadHistory = () => {
|
||||||
data.loading = true
|
data.loading = true
|
||||||
connectionStore
|
browserStore
|
||||||
.getCmdHistory()
|
.getCmdHistory()
|
||||||
.then((list) => {
|
.then((list) => {
|
||||||
data.history = list || []
|
data.history = list || []
|
||||||
|
@ -50,7 +50,7 @@ const loadHistory = () => {
|
||||||
const cleanHistory = async () => {
|
const cleanHistory = async () => {
|
||||||
$dialog.warning(i18n.t('log.confirm_clean_log'), () => {
|
$dialog.warning(i18n.t('log.confirm_clean_log'), () => {
|
||||||
data.loading = true
|
data.loading = true
|
||||||
connectionStore
|
browserStore
|
||||||
.cleanCmdHistory()
|
.cleanCmdHistory()
|
||||||
.then((success) => {
|
.then((success) => {
|
||||||
if (success) {
|
if (success) {
|
||||||
|
|
|
@ -8,6 +8,7 @@ import { useThemeVars } from 'naive-ui'
|
||||||
import useConnectionStore from 'stores/connections.js'
|
import useConnectionStore from 'stores/connections.js'
|
||||||
import { extraTheme } from '@/utils/extra_theme.js'
|
import { extraTheme } from '@/utils/extra_theme.js'
|
||||||
import usePreferencesStore from 'stores/preferences.js'
|
import usePreferencesStore from 'stores/preferences.js'
|
||||||
|
import useBrowserStore from 'stores/browser.js'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Value content tab on head
|
* Value content tab on head
|
||||||
|
@ -17,13 +18,14 @@ const themeVars = useThemeVars()
|
||||||
const i18n = useI18n()
|
const i18n = useI18n()
|
||||||
const tabStore = useTabStore()
|
const tabStore = useTabStore()
|
||||||
const connectionStore = useConnectionStore()
|
const connectionStore = useConnectionStore()
|
||||||
|
const browserStore = useBrowserStore()
|
||||||
const prefStore = usePreferencesStore()
|
const prefStore = usePreferencesStore()
|
||||||
|
|
||||||
const onCloseTab = (tabIndex) => {
|
const onCloseTab = (tabIndex) => {
|
||||||
const tab = get(tabStore.tabs, tabIndex)
|
const tab = get(tabStore.tabs, tabIndex)
|
||||||
if (tab != null) {
|
if (tab != null) {
|
||||||
$dialog.warning(i18n.t('dialogue.close_confirm', { name: tab.name }), () => {
|
$dialog.warning(i18n.t('dialogue.close_confirm', { name: tab.name }), () => {
|
||||||
connectionStore.closeConnection(tab.name)
|
browserStore.closeConnection(tab.name)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,13 +4,13 @@ import { computed, onMounted, onUnmounted, ref } from 'vue'
|
||||||
import IconButton from '@/components/common/IconButton.vue'
|
import IconButton from '@/components/common/IconButton.vue'
|
||||||
import Filter from '@/components/icons/Filter.vue'
|
import Filter from '@/components/icons/Filter.vue'
|
||||||
import Refresh from '@/components/icons/Refresh.vue'
|
import Refresh from '@/components/icons/Refresh.vue'
|
||||||
import useConnectionStore from 'stores/connections.js'
|
import useBrowserStore from 'stores/browser.js'
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
server: String,
|
server: String,
|
||||||
})
|
})
|
||||||
|
|
||||||
const connectionStore = useConnectionStore()
|
const browserStore = useBrowserStore()
|
||||||
const serverInfo = ref({})
|
const serverInfo = ref({})
|
||||||
const autoRefresh = ref(false)
|
const autoRefresh = ref(false)
|
||||||
const loading = ref(false) // loading status for refresh
|
const loading = ref(false) // loading status for refresh
|
||||||
|
@ -27,9 +27,9 @@ const refreshInfo = async (force) => {
|
||||||
} else {
|
} else {
|
||||||
autoLoading.value = true
|
autoLoading.value = true
|
||||||
}
|
}
|
||||||
if (!isEmpty(props.server) && connectionStore.isConnected(props.server)) {
|
if (!isEmpty(props.server) && browserStore.isConnected(props.server)) {
|
||||||
try {
|
try {
|
||||||
serverInfo.value = await connectionStore.getServerInfo(props.server)
|
serverInfo.value = await browserStore.getServerInfo(props.server)
|
||||||
} finally {
|
} finally {
|
||||||
loading.value = false
|
loading.value = false
|
||||||
autoLoading.value = false
|
autoLoading.value = false
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { h, onMounted, onUnmounted, reactive, ref } from 'vue'
|
import { h, onMounted, onUnmounted, reactive, ref } from 'vue'
|
||||||
import Refresh from '@/components/icons/Refresh.vue'
|
import Refresh from '@/components/icons/Refresh.vue'
|
||||||
import useConnectionStore from 'stores/connections.js'
|
|
||||||
import { debounce, isEmpty, map, size, split } from 'lodash'
|
import { debounce, isEmpty, map, size, split } from 'lodash'
|
||||||
import { useI18n } from 'vue-i18n'
|
import { useI18n } from 'vue-i18n'
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
import { useThemeVars } from 'naive-ui'
|
import { useThemeVars } from 'naive-ui'
|
||||||
|
import useBrowserStore from 'stores/browser.js'
|
||||||
|
|
||||||
const themeVars = useThemeVars()
|
const themeVars = useThemeVars()
|
||||||
|
|
||||||
const connectionStore = useConnectionStore()
|
const browserStore = useBrowserStore()
|
||||||
const i18n = useI18n()
|
const i18n = useI18n()
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
server: {
|
server: {
|
||||||
|
@ -35,7 +35,7 @@ const tableRef = ref(null)
|
||||||
|
|
||||||
const _loadSlowLog = () => {
|
const _loadSlowLog = () => {
|
||||||
data.loading = true
|
data.loading = true
|
||||||
connectionStore
|
browserStore
|
||||||
.getSlowLog(props.server, props.db, data.listLimit)
|
.getSlowLog(props.server, props.db, data.listLimit)
|
||||||
.then((list) => {
|
.then((list) => {
|
||||||
data.list = list || []
|
data.list = list || []
|
||||||
|
@ -180,10 +180,10 @@ const onListLimitChanged = (limit) => {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
]"
|
]"
|
||||||
@update:sorter="({ order }) => (data.sortOrder = order)"
|
|
||||||
:data="data.list"
|
:data="data.list"
|
||||||
class="flex-item-expand"
|
class="flex-item-expand"
|
||||||
flex-height />
|
flex-height
|
||||||
|
@update:sorter="({ order }) => (data.sortOrder = order)" />
|
||||||
</div>
|
</div>
|
||||||
</n-card>
|
</n-card>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -8,12 +8,12 @@ import Timer from '@/components/icons/Timer.vue'
|
||||||
import RedisTypeTag from '@/components/common/RedisTypeTag.vue'
|
import RedisTypeTag from '@/components/common/RedisTypeTag.vue'
|
||||||
import { useI18n } from 'vue-i18n'
|
import { useI18n } from 'vue-i18n'
|
||||||
import IconButton from '@/components/common/IconButton.vue'
|
import IconButton from '@/components/common/IconButton.vue'
|
||||||
import useConnectionStore from 'stores/connections.js'
|
|
||||||
import Copy from '@/components/icons/Copy.vue'
|
import Copy from '@/components/icons/Copy.vue'
|
||||||
import { ClipboardSetText } from 'wailsjs/runtime/runtime.js'
|
import { ClipboardSetText } from 'wailsjs/runtime/runtime.js'
|
||||||
import { computed } from 'vue'
|
import { computed } from 'vue'
|
||||||
import { isEmpty, padStart } from 'lodash'
|
import { isEmpty, padStart } from 'lodash'
|
||||||
import { decodeTypes, formatTypes } from '@/consts/value_view_type.js'
|
import { decodeTypes, formatTypes } from '@/consts/value_view_type.js'
|
||||||
|
import useBrowserStore from 'stores/browser.js'
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
server: String,
|
server: String,
|
||||||
|
@ -45,7 +45,7 @@ const props = defineProps({
|
||||||
})
|
})
|
||||||
|
|
||||||
const dialogStore = useDialog()
|
const dialogStore = useDialog()
|
||||||
const connectionStore = useConnectionStore()
|
const browserStore = useBrowserStore()
|
||||||
const i18n = useI18n()
|
const i18n = useI18n()
|
||||||
|
|
||||||
const binaryKey = computed(() => {
|
const binaryKey = computed(() => {
|
||||||
|
@ -78,7 +78,7 @@ const ttlString = computed(() => {
|
||||||
})
|
})
|
||||||
|
|
||||||
const onReloadKey = () => {
|
const onReloadKey = () => {
|
||||||
connectionStore.loadKeyValue(props.server, props.db, keyName.value, props.viewAs, props.decode)
|
browserStore.loadKeyValue(props.server, props.db, keyName.value, props.viewAs, props.decode)
|
||||||
}
|
}
|
||||||
|
|
||||||
const onCopyKey = () => {
|
const onCopyKey = () => {
|
||||||
|
@ -103,7 +103,7 @@ const onRenameKey = () => {
|
||||||
|
|
||||||
const onDeleteKey = () => {
|
const onDeleteKey = () => {
|
||||||
$dialog.warning(i18n.t('dialogue.remove_tip', { name: props.keyPath }), () => {
|
$dialog.warning(i18n.t('dialogue.remove_tip', { name: props.keyPath }), () => {
|
||||||
connectionStore.deleteKey(props.server, props.db, keyName.value).then((success) => {
|
browserStore.deleteKey(props.server, props.db, keyName.value).then((success) => {
|
||||||
if (success) {
|
if (success) {
|
||||||
$message.success(i18n.t('dialogue.delete_key_succ', { key: props.keyPath }))
|
$message.success(i18n.t('dialogue.delete_key_succ', { key: props.keyPath }))
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,10 +7,10 @@ import { NButton, NCode, NIcon, NInput, useThemeVars } from 'naive-ui'
|
||||||
import { types, types as redisTypes } from '@/consts/support_redis_type.js'
|
import { types, types as redisTypes } from '@/consts/support_redis_type.js'
|
||||||
import EditableTableColumn from '@/components/common/EditableTableColumn.vue'
|
import EditableTableColumn from '@/components/common/EditableTableColumn.vue'
|
||||||
import useDialogStore from 'stores/dialog.js'
|
import useDialogStore from 'stores/dialog.js'
|
||||||
import useConnectionStore from 'stores/connections.js'
|
|
||||||
import { isEmpty } from 'lodash'
|
import { isEmpty } from 'lodash'
|
||||||
import bytes from 'bytes'
|
import bytes from 'bytes'
|
||||||
import { decodeTypes, formatTypes } from '@/consts/value_view_type.js'
|
import { decodeTypes, formatTypes } from '@/consts/value_view_type.js'
|
||||||
|
import useBrowserStore from 'stores/browser.js'
|
||||||
|
|
||||||
const i18n = useI18n()
|
const i18n = useI18n()
|
||||||
const themeVars = useThemeVars()
|
const themeVars = useThemeVars()
|
||||||
|
@ -60,7 +60,7 @@ const filterOption = [
|
||||||
]
|
]
|
||||||
const filterType = ref(1)
|
const filterType = ref(1)
|
||||||
|
|
||||||
const connectionStore = useConnectionStore()
|
const browserStore = useBrowserStore()
|
||||||
const dialogStore = useDialogStore()
|
const dialogStore = useDialogStore()
|
||||||
const keyType = redisTypes.HASH
|
const keyType = redisTypes.HASH
|
||||||
const currentEditRow = ref({
|
const currentEditRow = ref({
|
||||||
|
@ -142,14 +142,14 @@ const actionColumn = {
|
||||||
},
|
},
|
||||||
onDelete: async () => {
|
onDelete: async () => {
|
||||||
try {
|
try {
|
||||||
const { success, msg } = await connectionStore.removeHashField(
|
const { success, msg } = await browserStore.removeHashField(
|
||||||
props.name,
|
props.name,
|
||||||
props.db,
|
props.db,
|
||||||
keyName.value,
|
keyName.value,
|
||||||
row.key,
|
row.key,
|
||||||
)
|
)
|
||||||
if (success) {
|
if (success) {
|
||||||
connectionStore.loadKeyValue(props.name, props.db, keyName.value).then((r) => {})
|
browserStore.loadKeyValue(props.name, props.db, keyName.value).then((r) => {})
|
||||||
$message.success(i18n.t('dialogue.delete_key_succ', { key: row.key }))
|
$message.success(i18n.t('dialogue.delete_key_succ', { key: row.key }))
|
||||||
// update display value
|
// update display value
|
||||||
// if (!isEmpty(removed)) {
|
// if (!isEmpty(removed)) {
|
||||||
|
@ -166,7 +166,7 @@ const actionColumn = {
|
||||||
},
|
},
|
||||||
onSave: async () => {
|
onSave: async () => {
|
||||||
try {
|
try {
|
||||||
const { success, msg } = await connectionStore.setHash(
|
const { success, msg } = await browserStore.setHash(
|
||||||
props.name,
|
props.name,
|
||||||
props.db,
|
props.db,
|
||||||
keyName.value,
|
keyName.value,
|
||||||
|
@ -175,7 +175,7 @@ const actionColumn = {
|
||||||
currentEditRow.value.value,
|
currentEditRow.value.value,
|
||||||
)
|
)
|
||||||
if (success) {
|
if (success) {
|
||||||
connectionStore.loadKeyValue(props.name, props.db, keyName.value).then((r) => {})
|
browserStore.loadKeyValue(props.name, props.db, keyName.value).then((r) => {})
|
||||||
$message.success(i18n.t('dialogue.save_value_succ'))
|
$message.success(i18n.t('dialogue.save_value_succ'))
|
||||||
// update display value
|
// update display value
|
||||||
// if (!isEmpty(updated)) {
|
// if (!isEmpty(updated)) {
|
||||||
|
|
|
@ -8,9 +8,9 @@ import { isEmpty, size } from 'lodash'
|
||||||
import { types, types as redisTypes } from '@/consts/support_redis_type.js'
|
import { types, types as redisTypes } from '@/consts/support_redis_type.js'
|
||||||
import EditableTableColumn from '@/components/common/EditableTableColumn.vue'
|
import EditableTableColumn from '@/components/common/EditableTableColumn.vue'
|
||||||
import useDialogStore from 'stores/dialog.js'
|
import useDialogStore from 'stores/dialog.js'
|
||||||
import useConnectionStore from 'stores/connections.js'
|
|
||||||
import bytes from 'bytes'
|
import bytes from 'bytes'
|
||||||
import { decodeTypes, formatTypes } from '@/consts/value_view_type.js'
|
import { decodeTypes, formatTypes } from '@/consts/value_view_type.js'
|
||||||
|
import useBrowserStore from 'stores/browser.js'
|
||||||
|
|
||||||
const i18n = useI18n()
|
const i18n = useI18n()
|
||||||
const themeVars = useThemeVars()
|
const themeVars = useThemeVars()
|
||||||
|
@ -48,7 +48,7 @@ const keyName = computed(() => {
|
||||||
return !isEmpty(props.keyCode) ? props.keyCode : props.keyPath
|
return !isEmpty(props.keyCode) ? props.keyCode : props.keyPath
|
||||||
})
|
})
|
||||||
|
|
||||||
const connectionStore = useConnectionStore()
|
const browserStore = useBrowserStore()
|
||||||
const dialogStore = useDialogStore()
|
const dialogStore = useDialogStore()
|
||||||
const keyType = redisTypes.LIST
|
const keyType = redisTypes.LIST
|
||||||
const currentEditRow = ref({
|
const currentEditRow = ref({
|
||||||
|
@ -99,14 +99,14 @@ const actionColumn = {
|
||||||
},
|
},
|
||||||
onDelete: async () => {
|
onDelete: async () => {
|
||||||
try {
|
try {
|
||||||
const { success, msg } = await connectionStore.removeListItem(
|
const { success, msg } = await browserStore.removeListItem(
|
||||||
props.name,
|
props.name,
|
||||||
props.db,
|
props.db,
|
||||||
keyName.value,
|
keyName.value,
|
||||||
row.no - 1,
|
row.no - 1,
|
||||||
)
|
)
|
||||||
if (success) {
|
if (success) {
|
||||||
connectionStore.loadKeyValue(props.name, props.db, keyName.value).then((r) => {})
|
browserStore.loadKeyValue(props.name, props.db, keyName.value).then((r) => {})
|
||||||
$message.success(i18n.t('dialogue.delete_key_succ', { key: '#' + row.no }))
|
$message.success(i18n.t('dialogue.delete_key_succ', { key: '#' + row.no }))
|
||||||
// update display value
|
// update display value
|
||||||
// if (!isEmpty(removed)) {
|
// if (!isEmpty(removed)) {
|
||||||
|
@ -121,7 +121,7 @@ const actionColumn = {
|
||||||
},
|
},
|
||||||
onSave: async () => {
|
onSave: async () => {
|
||||||
try {
|
try {
|
||||||
const { success, msg } = await connectionStore.updateListItem(
|
const { success, msg } = await browserStore.updateListItem(
|
||||||
props.name,
|
props.name,
|
||||||
props.db,
|
props.db,
|
||||||
keyName.value,
|
keyName.value,
|
||||||
|
@ -129,7 +129,7 @@ const actionColumn = {
|
||||||
currentEditRow.value.value,
|
currentEditRow.value.value,
|
||||||
)
|
)
|
||||||
if (success) {
|
if (success) {
|
||||||
connectionStore.loadKeyValue(props.name, props.db, keyName.value).then((r) => {})
|
browserStore.loadKeyValue(props.name, props.db, keyName.value).then((r) => {})
|
||||||
$message.success(i18n.t('dialogue.save_value_succ'))
|
$message.success(i18n.t('dialogue.save_value_succ'))
|
||||||
// update display value
|
// update display value
|
||||||
// if (!isEmpty(updated)) {
|
// if (!isEmpty(updated)) {
|
||||||
|
|
|
@ -8,9 +8,9 @@ import { isEmpty, size } from 'lodash'
|
||||||
import useDialogStore from 'stores/dialog.js'
|
import useDialogStore from 'stores/dialog.js'
|
||||||
import { types, types as redisTypes } from '@/consts/support_redis_type.js'
|
import { types, types as redisTypes } from '@/consts/support_redis_type.js'
|
||||||
import EditableTableColumn from '@/components/common/EditableTableColumn.vue'
|
import EditableTableColumn from '@/components/common/EditableTableColumn.vue'
|
||||||
import useConnectionStore from 'stores/connections.js'
|
|
||||||
import bytes from 'bytes'
|
import bytes from 'bytes'
|
||||||
import { decodeTypes, formatTypes } from '@/consts/value_view_type.js'
|
import { decodeTypes, formatTypes } from '@/consts/value_view_type.js'
|
||||||
|
import useBrowserStore from 'stores/browser.js'
|
||||||
|
|
||||||
const i18n = useI18n()
|
const i18n = useI18n()
|
||||||
const themeVars = useThemeVars()
|
const themeVars = useThemeVars()
|
||||||
|
@ -48,7 +48,7 @@ const keyName = computed(() => {
|
||||||
return !isEmpty(props.keyCode) ? props.keyCode : props.keyPath
|
return !isEmpty(props.keyCode) ? props.keyCode : props.keyPath
|
||||||
})
|
})
|
||||||
|
|
||||||
const connectionStore = useConnectionStore()
|
const browserStore = useBrowserStore()
|
||||||
const dialogStore = useDialogStore()
|
const dialogStore = useDialogStore()
|
||||||
const keyType = redisTypes.SET
|
const keyType = redisTypes.SET
|
||||||
const currentEditRow = ref({
|
const currentEditRow = ref({
|
||||||
|
@ -100,14 +100,14 @@ const actionColumn = {
|
||||||
},
|
},
|
||||||
onDelete: async () => {
|
onDelete: async () => {
|
||||||
try {
|
try {
|
||||||
const { success, msg } = await connectionStore.removeSetItem(
|
const { success, msg } = await browserStore.removeSetItem(
|
||||||
props.name,
|
props.name,
|
||||||
props.db,
|
props.db,
|
||||||
keyName.value,
|
keyName.value,
|
||||||
row.value,
|
row.value,
|
||||||
)
|
)
|
||||||
if (success) {
|
if (success) {
|
||||||
connectionStore.loadKeyValue(props.name, props.db, keyName.value).then((r) => {})
|
browserStore.loadKeyValue(props.name, props.db, keyName.value).then((r) => {})
|
||||||
$message.success(i18n.t('dialogue.delete_key_succ', { key: row.value }))
|
$message.success(i18n.t('dialogue.delete_key_succ', { key: row.value }))
|
||||||
// update display value
|
// update display value
|
||||||
// props.value.splice(row.no - 1, 1)
|
// props.value.splice(row.no - 1, 1)
|
||||||
|
@ -120,7 +120,7 @@ const actionColumn = {
|
||||||
},
|
},
|
||||||
onSave: async () => {
|
onSave: async () => {
|
||||||
try {
|
try {
|
||||||
const { success, msg } = await connectionStore.updateSetItem(
|
const { success, msg } = await browserStore.updateSetItem(
|
||||||
props.name,
|
props.name,
|
||||||
props.db,
|
props.db,
|
||||||
keyName.value,
|
keyName.value,
|
||||||
|
@ -128,7 +128,7 @@ const actionColumn = {
|
||||||
currentEditRow.value.value,
|
currentEditRow.value.value,
|
||||||
)
|
)
|
||||||
if (success) {
|
if (success) {
|
||||||
connectionStore.loadKeyValue(props.name, props.db, keyName.value).then((r) => {})
|
browserStore.loadKeyValue(props.name, props.db, keyName.value).then((r) => {})
|
||||||
$message.success(i18n.t('dialogue.save_value_succ'))
|
$message.success(i18n.t('dialogue.save_value_succ'))
|
||||||
// update display value
|
// update display value
|
||||||
// props.value[row.no - 1] = currentEditRow.value.value
|
// props.value[row.no - 1] = currentEditRow.value.value
|
||||||
|
|
|
@ -7,10 +7,10 @@ import { NButton, NCode, NIcon, NInput, useThemeVars } from 'naive-ui'
|
||||||
import { types, types as redisTypes } from '@/consts/support_redis_type.js'
|
import { types, types as redisTypes } from '@/consts/support_redis_type.js'
|
||||||
import EditableTableColumn from '@/components/common/EditableTableColumn.vue'
|
import EditableTableColumn from '@/components/common/EditableTableColumn.vue'
|
||||||
import useDialogStore from 'stores/dialog.js'
|
import useDialogStore from 'stores/dialog.js'
|
||||||
import useConnectionStore from 'stores/connections.js'
|
|
||||||
import { includes, isEmpty, keys, some, values } from 'lodash'
|
import { includes, isEmpty, keys, some, values } from 'lodash'
|
||||||
import bytes from 'bytes'
|
import bytes from 'bytes'
|
||||||
import { decodeTypes, formatTypes } from '@/consts/value_view_type.js'
|
import { decodeTypes, formatTypes } from '@/consts/value_view_type.js'
|
||||||
|
import useBrowserStore from 'stores/browser.js'
|
||||||
|
|
||||||
const i18n = useI18n()
|
const i18n = useI18n()
|
||||||
const themeVars = useThemeVars()
|
const themeVars = useThemeVars()
|
||||||
|
@ -60,7 +60,7 @@ const filterOption = [
|
||||||
]
|
]
|
||||||
const filterType = ref(1)
|
const filterType = ref(1)
|
||||||
|
|
||||||
const connectionStore = useConnectionStore()
|
const browserStore = useBrowserStore()
|
||||||
const dialogStore = useDialogStore()
|
const dialogStore = useDialogStore()
|
||||||
const keyType = redisTypes.STREAM
|
const keyType = redisTypes.STREAM
|
||||||
const idColumn = reactive({
|
const idColumn = reactive({
|
||||||
|
@ -108,14 +108,14 @@ const actionColumn = {
|
||||||
readonly: true,
|
readonly: true,
|
||||||
onDelete: async () => {
|
onDelete: async () => {
|
||||||
try {
|
try {
|
||||||
const { success, msg } = await connectionStore.removeStreamValues(
|
const { success, msg } = await browserStore.removeStreamValues(
|
||||||
props.name,
|
props.name,
|
||||||
props.db,
|
props.db,
|
||||||
keyName.value,
|
keyName.value,
|
||||||
row.id,
|
row.id,
|
||||||
)
|
)
|
||||||
if (success) {
|
if (success) {
|
||||||
connectionStore.loadKeyValue(props.name, props.db, keyName.value).then((r) => {})
|
browserStore.loadKeyValue(props.name, props.db, keyName.value).then((r) => {})
|
||||||
$message.success(i18n.t('dialogue.delete_key_succ', { key: row.id }))
|
$message.success(i18n.t('dialogue.delete_key_succ', { key: row.id }))
|
||||||
// update display value
|
// update display value
|
||||||
// if (!isEmpty(removed)) {
|
// if (!isEmpty(removed)) {
|
||||||
|
|
|
@ -10,12 +10,12 @@ import Close from '@/components/icons/Close.vue'
|
||||||
import { types as redisTypes } from '@/consts/support_redis_type.js'
|
import { types as redisTypes } from '@/consts/support_redis_type.js'
|
||||||
import { ClipboardSetText } from 'wailsjs/runtime/runtime.js'
|
import { ClipboardSetText } from 'wailsjs/runtime/runtime.js'
|
||||||
import { isEmpty, toLower } from 'lodash'
|
import { isEmpty, toLower } from 'lodash'
|
||||||
import useConnectionStore from 'stores/connections.js'
|
|
||||||
import DropdownSelector from '@/components/content_value/DropdownSelector.vue'
|
import DropdownSelector from '@/components/content_value/DropdownSelector.vue'
|
||||||
import Code from '@/components/icons/Code.vue'
|
import Code from '@/components/icons/Code.vue'
|
||||||
import Conversion from '@/components/icons/Conversion.vue'
|
import Conversion from '@/components/icons/Conversion.vue'
|
||||||
import EditFile from '@/components/icons/EditFile.vue'
|
import EditFile from '@/components/icons/EditFile.vue'
|
||||||
import bytes from 'bytes'
|
import bytes from 'bytes'
|
||||||
|
import useBrowserStore from 'stores/browser.js'
|
||||||
|
|
||||||
const i18n = useI18n()
|
const i18n = useI18n()
|
||||||
const themeVars = useThemeVars()
|
const themeVars = useThemeVars()
|
||||||
|
@ -74,11 +74,11 @@ const viewLanguage = computed(() => {
|
||||||
})
|
})
|
||||||
|
|
||||||
const onViewTypeUpdate = (viewType) => {
|
const onViewTypeUpdate = (viewType) => {
|
||||||
connectionStore.loadKeyValue(props.name, props.db, keyName.value, viewType, props.decode)
|
browserStore.loadKeyValue(props.name, props.db, keyName.value, viewType, props.decode)
|
||||||
}
|
}
|
||||||
|
|
||||||
const onDecodeTypeUpdate = (decodeType) => {
|
const onDecodeTypeUpdate = (decodeType) => {
|
||||||
connectionStore.loadKeyValue(props.name, props.db, keyName.value, props.viewAs, decodeType)
|
browserStore.loadKeyValue(props.name, props.db, keyName.value, props.viewAs, decodeType)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -110,12 +110,12 @@ const onCancelEdit = () => {
|
||||||
/**
|
/**
|
||||||
* Save value
|
* Save value
|
||||||
*/
|
*/
|
||||||
const connectionStore = useConnectionStore()
|
const browserStore = useBrowserStore()
|
||||||
const saving = ref(false)
|
const saving = ref(false)
|
||||||
const onSaveValue = async () => {
|
const onSaveValue = async () => {
|
||||||
saving.value = true
|
saving.value = true
|
||||||
try {
|
try {
|
||||||
const { success, msg } = await connectionStore.setKey(
|
const { success, msg } = await browserStore.setKey(
|
||||||
props.name,
|
props.name,
|
||||||
props.db,
|
props.db,
|
||||||
keyName.value,
|
keyName.value,
|
||||||
|
@ -126,7 +126,7 @@ const onSaveValue = async () => {
|
||||||
props.decode,
|
props.decode,
|
||||||
)
|
)
|
||||||
if (success) {
|
if (success) {
|
||||||
await connectionStore.loadKeyValue(props.name, props.db, keyName.value)
|
await browserStore.loadKeyValue(props.name, props.db, keyName.value)
|
||||||
$message.success(i18n.t('dialogue.save_value_succ'))
|
$message.success(i18n.t('dialogue.save_value_succ'))
|
||||||
} else {
|
} else {
|
||||||
$message.error(msg)
|
$message.error(msg)
|
||||||
|
|
|
@ -8,10 +8,10 @@ import ContentValueSet from '@/components/content_value/ContentValueSet.vue'
|
||||||
import ContentValueZset from '@/components/content_value/ContentValueZSet.vue'
|
import ContentValueZset from '@/components/content_value/ContentValueZSet.vue'
|
||||||
import ContentValueStream from '@/components/content_value/ContentValueStream.vue'
|
import ContentValueStream from '@/components/content_value/ContentValueStream.vue'
|
||||||
import { useThemeVars } from 'naive-ui'
|
import { useThemeVars } from 'naive-ui'
|
||||||
import useConnectionStore from 'stores/connections.js'
|
import useBrowserStore from 'stores/browser.js'
|
||||||
|
|
||||||
const themeVars = useThemeVars()
|
const themeVars = useThemeVars()
|
||||||
const connectionStore = useConnectionStore()
|
const browserStore = useBrowserStore()
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
blank: Boolean,
|
blank: Boolean,
|
||||||
|
@ -54,7 +54,7 @@ const valueComponents = {
|
||||||
* @returns {Promise<null>}
|
* @returns {Promise<null>}
|
||||||
*/
|
*/
|
||||||
const onReloadKey = async () => {
|
const onReloadKey = async () => {
|
||||||
await connectionStore.loadKeyValue(props.name, props.db, props.key, props.viewAs)
|
await browserStore.loadKeyValue(props.name, props.db, props.key, props.viewAs)
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -8,9 +8,9 @@ import { types, types as redisTypes } from '@/consts/support_redis_type.js'
|
||||||
import EditableTableColumn from '@/components/common/EditableTableColumn.vue'
|
import EditableTableColumn from '@/components/common/EditableTableColumn.vue'
|
||||||
import { isEmpty } from 'lodash'
|
import { isEmpty } from 'lodash'
|
||||||
import useDialogStore from 'stores/dialog.js'
|
import useDialogStore from 'stores/dialog.js'
|
||||||
import useConnectionStore from 'stores/connections.js'
|
|
||||||
import bytes from 'bytes'
|
import bytes from 'bytes'
|
||||||
import { decodeTypes, formatTypes } from '@/consts/value_view_type.js'
|
import { decodeTypes, formatTypes } from '@/consts/value_view_type.js'
|
||||||
|
import useBrowserStore from 'stores/browser.js'
|
||||||
|
|
||||||
const i18n = useI18n()
|
const i18n = useI18n()
|
||||||
const themeVars = useThemeVars()
|
const themeVars = useThemeVars()
|
||||||
|
@ -60,7 +60,7 @@ const filterOption = [
|
||||||
]
|
]
|
||||||
const filterType = ref(1)
|
const filterType = ref(1)
|
||||||
|
|
||||||
const connectionStore = useConnectionStore()
|
const browserStore = useBrowserStore()
|
||||||
const dialogStore = useDialogStore()
|
const dialogStore = useDialogStore()
|
||||||
const keyType = redisTypes.ZSET
|
const keyType = redisTypes.ZSET
|
||||||
const currentEditRow = ref({
|
const currentEditRow = ref({
|
||||||
|
@ -171,14 +171,14 @@ const actionColumn = {
|
||||||
},
|
},
|
||||||
onDelete: async () => {
|
onDelete: async () => {
|
||||||
try {
|
try {
|
||||||
const { success, msg } = await connectionStore.removeZSetItem(
|
const { success, msg } = await browserStore.removeZSetItem(
|
||||||
props.name,
|
props.name,
|
||||||
props.db,
|
props.db,
|
||||||
keyName.value,
|
keyName.value,
|
||||||
row.value,
|
row.value,
|
||||||
)
|
)
|
||||||
if (success) {
|
if (success) {
|
||||||
connectionStore.loadKeyValue(props.name, props.db, keyName.value).then((r) => {})
|
browserStore.loadKeyValue(props.name, props.db, keyName.value).then((r) => {})
|
||||||
$message.success(i18n.t('dialogue.delete_key_succ', { key: row.value }))
|
$message.success(i18n.t('dialogue.delete_key_succ', { key: row.value }))
|
||||||
} else {
|
} else {
|
||||||
$message.error(msg)
|
$message.error(msg)
|
||||||
|
@ -194,7 +194,7 @@ const actionColumn = {
|
||||||
$message.error(i18n.t('dialogue.spec_field_required', { key: i18n.t('common.value') }))
|
$message.error(i18n.t('dialogue.spec_field_required', { key: i18n.t('common.value') }))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
const { success, msg } = await connectionStore.updateZSetItem(
|
const { success, msg } = await browserStore.updateZSetItem(
|
||||||
props.name,
|
props.name,
|
||||||
props.db,
|
props.db,
|
||||||
keyName.value,
|
keyName.value,
|
||||||
|
@ -203,7 +203,7 @@ const actionColumn = {
|
||||||
currentEditRow.value.score,
|
currentEditRow.value.score,
|
||||||
)
|
)
|
||||||
if (success) {
|
if (success) {
|
||||||
connectionStore.loadKeyValue(props.name, props.db, keyName.value).then((r) => {})
|
browserStore.loadKeyValue(props.name, props.db, keyName.value).then((r) => {})
|
||||||
$message.success(i18n.t('dialogue.save_value_succ'))
|
$message.success(i18n.t('dialogue.save_value_succ'))
|
||||||
} else {
|
} else {
|
||||||
$message.error(msg)
|
$message.error(msg)
|
||||||
|
|
|
@ -8,9 +8,9 @@ import { useI18n } from 'vue-i18n'
|
||||||
import AddListValue from '@/components/new_value/AddListValue.vue'
|
import AddListValue from '@/components/new_value/AddListValue.vue'
|
||||||
import AddHashValue from '@/components/new_value/AddHashValue.vue'
|
import AddHashValue from '@/components/new_value/AddHashValue.vue'
|
||||||
import AddZSetValue from '@/components/new_value/AddZSetValue.vue'
|
import AddZSetValue from '@/components/new_value/AddZSetValue.vue'
|
||||||
import useConnectionStore from 'stores/connections.js'
|
|
||||||
import NewStreamValue from '@/components/new_value/NewStreamValue.vue'
|
import NewStreamValue from '@/components/new_value/NewStreamValue.vue'
|
||||||
import { isEmpty, size, slice } from 'lodash'
|
import { isEmpty, size, slice } from 'lodash'
|
||||||
|
import useBrowserStore from 'stores/browser.js'
|
||||||
|
|
||||||
const i18n = useI18n()
|
const i18n = useI18n()
|
||||||
const newForm = reactive({
|
const newForm = reactive({
|
||||||
|
@ -78,7 +78,7 @@ watch(
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
const connectionStore = useConnectionStore()
|
const browserStore = useBrowserStore()
|
||||||
const onAdd = async () => {
|
const onAdd = async () => {
|
||||||
try {
|
try {
|
||||||
const { server, db, key, keyCode, type } = newForm
|
const { server, db, key, keyCode, type } = newForm
|
||||||
|
@ -92,14 +92,14 @@ const onAdd = async () => {
|
||||||
{
|
{
|
||||||
let data
|
let data
|
||||||
if (newForm.opType === 1) {
|
if (newForm.opType === 1) {
|
||||||
data = await connectionStore.prependListItem(server, db, keyName, value)
|
data = await browserStore.prependListItem(server, db, keyName, value)
|
||||||
} else {
|
} else {
|
||||||
data = await connectionStore.appendListItem(server, db, keyName, value)
|
data = await browserStore.appendListItem(server, db, keyName, value)
|
||||||
}
|
}
|
||||||
const { success, msg } = data
|
const { success, msg } = data
|
||||||
if (success) {
|
if (success) {
|
||||||
if (newForm.reload) {
|
if (newForm.reload) {
|
||||||
connectionStore.loadKeyValue(server, db, keyName).then(() => {})
|
browserStore.loadKeyValue(server, db, keyName).then(() => {})
|
||||||
}
|
}
|
||||||
$message.success(i18n.t('dialogue.handle_succ'))
|
$message.success(i18n.t('dialogue.handle_succ'))
|
||||||
} else {
|
} else {
|
||||||
|
@ -110,16 +110,10 @@ const onAdd = async () => {
|
||||||
|
|
||||||
case types.HASH:
|
case types.HASH:
|
||||||
{
|
{
|
||||||
const { success, msg } = await connectionStore.addHashField(
|
const { success, msg } = await browserStore.addHashField(server, db, keyName, newForm.opType, value)
|
||||||
server,
|
|
||||||
db,
|
|
||||||
keyName,
|
|
||||||
newForm.opType,
|
|
||||||
value,
|
|
||||||
)
|
|
||||||
if (success) {
|
if (success) {
|
||||||
if (newForm.reload) {
|
if (newForm.reload) {
|
||||||
connectionStore.loadKeyValue(server, db, keyName).then(() => {})
|
browserStore.loadKeyValue(server, db, keyName).then(() => {})
|
||||||
}
|
}
|
||||||
$message.success(i18n.t('dialogue.handle_succ'))
|
$message.success(i18n.t('dialogue.handle_succ'))
|
||||||
} else {
|
} else {
|
||||||
|
@ -130,10 +124,10 @@ const onAdd = async () => {
|
||||||
|
|
||||||
case types.SET:
|
case types.SET:
|
||||||
{
|
{
|
||||||
const { success, msg } = await connectionStore.addSetItem(server, db, keyName, value)
|
const { success, msg } = await browserStore.addSetItem(server, db, keyName, value)
|
||||||
if (success) {
|
if (success) {
|
||||||
if (newForm.reload) {
|
if (newForm.reload) {
|
||||||
connectionStore.loadKeyValue(server, db, keyName).then(() => {})
|
browserStore.loadKeyValue(server, db, keyName).then(() => {})
|
||||||
}
|
}
|
||||||
$message.success(i18n.t('dialogue.handle_succ'))
|
$message.success(i18n.t('dialogue.handle_succ'))
|
||||||
} else {
|
} else {
|
||||||
|
@ -144,16 +138,10 @@ const onAdd = async () => {
|
||||||
|
|
||||||
case types.ZSET:
|
case types.ZSET:
|
||||||
{
|
{
|
||||||
const { success, msg } = await connectionStore.addZSetItem(
|
const { success, msg } = await browserStore.addZSetItem(server, db, keyName, newForm.opType, value)
|
||||||
server,
|
|
||||||
db,
|
|
||||||
keyName,
|
|
||||||
newForm.opType,
|
|
||||||
value,
|
|
||||||
)
|
|
||||||
if (success) {
|
if (success) {
|
||||||
if (newForm.reload) {
|
if (newForm.reload) {
|
||||||
connectionStore.loadKeyValue(server, db, keyName).then(() => {})
|
browserStore.loadKeyValue(server, db, keyName).then(() => {})
|
||||||
}
|
}
|
||||||
$message.success(i18n.t('dialogue.handle_succ'))
|
$message.success(i18n.t('dialogue.handle_succ'))
|
||||||
} else {
|
} else {
|
||||||
|
@ -165,7 +153,7 @@ const onAdd = async () => {
|
||||||
case types.STREAM:
|
case types.STREAM:
|
||||||
{
|
{
|
||||||
if (size(value) > 2) {
|
if (size(value) > 2) {
|
||||||
const { success, msg } = await connectionStore.addStreamValue(
|
const { success, msg } = await browserStore.addStreamValue(
|
||||||
server,
|
server,
|
||||||
db,
|
db,
|
||||||
keyName,
|
keyName,
|
||||||
|
@ -174,7 +162,7 @@ const onAdd = async () => {
|
||||||
)
|
)
|
||||||
if (success) {
|
if (success) {
|
||||||
if (newForm.reload) {
|
if (newForm.reload) {
|
||||||
connectionStore.loadKeyValue(server, db, keyName).then(() => {})
|
browserStore.loadKeyValue(server, db, keyName).then(() => {})
|
||||||
}
|
}
|
||||||
$message.success(i18n.t('dialogue.handle_succ'))
|
$message.success(i18n.t('dialogue.handle_succ'))
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -9,6 +9,7 @@ import useConnectionStore from 'stores/connections.js'
|
||||||
import FileOpenInput from '@/components/common/FileOpenInput.vue'
|
import FileOpenInput from '@/components/common/FileOpenInput.vue'
|
||||||
import { KeyViewType } from '@/consts/key_view_type.js'
|
import { KeyViewType } from '@/consts/key_view_type.js'
|
||||||
import { useThemeVars } from 'naive-ui'
|
import { useThemeVars } from 'naive-ui'
|
||||||
|
import useBrowserStore from 'stores/browser.js'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dialog for new or edit connection
|
* Dialog for new or edit connection
|
||||||
|
@ -17,6 +18,7 @@ import { useThemeVars } from 'naive-ui'
|
||||||
const themeVars = useThemeVars()
|
const themeVars = useThemeVars()
|
||||||
const dialogStore = useDialog()
|
const dialogStore = useDialog()
|
||||||
const connectionStore = useConnectionStore()
|
const connectionStore = useConnectionStore()
|
||||||
|
const browserStore = useBrowserStore()
|
||||||
const i18n = useI18n()
|
const i18n = useI18n()
|
||||||
|
|
||||||
const editName = ref('')
|
const editName = ref('')
|
||||||
|
@ -45,7 +47,7 @@ const closingConnection = computed(() => {
|
||||||
if (isEmpty(editName.value)) {
|
if (isEmpty(editName.value)) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
return connectionStore.isConnected(editName.value)
|
return browserStore.isConnected(editName.value)
|
||||||
})
|
})
|
||||||
|
|
||||||
const groupOptions = computed(() => {
|
const groupOptions = computed(() => {
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
import { reactive, watch } from 'vue'
|
import { reactive, watch } from 'vue'
|
||||||
import useDialog from 'stores/dialog'
|
import useDialog from 'stores/dialog'
|
||||||
import { useI18n } from 'vue-i18n'
|
import { useI18n } from 'vue-i18n'
|
||||||
import useConnectionStore from 'stores/connections.js'
|
|
||||||
import { isEmpty, size } from 'lodash'
|
import { isEmpty, size } from 'lodash'
|
||||||
|
import useBrowserStore from 'stores/browser.js'
|
||||||
|
|
||||||
const deleteForm = reactive({
|
const deleteForm = reactive({
|
||||||
server: '',
|
server: '',
|
||||||
|
@ -16,7 +16,7 @@ const deleteForm = reactive({
|
||||||
})
|
})
|
||||||
|
|
||||||
const dialogStore = useDialog()
|
const dialogStore = useDialog()
|
||||||
const connectionStore = useConnectionStore()
|
const browserStore = useBrowserStore()
|
||||||
watch(
|
watch(
|
||||||
() => dialogStore.deleteKeyDialogVisible,
|
() => dialogStore.deleteKeyDialogVisible,
|
||||||
(visible) => {
|
(visible) => {
|
||||||
|
@ -36,7 +36,7 @@ watch(
|
||||||
const scanAffectedKey = async () => {
|
const scanAffectedKey = async () => {
|
||||||
try {
|
try {
|
||||||
deleteForm.loadingAffected = true
|
deleteForm.loadingAffected = true
|
||||||
const { keys = [] } = await connectionStore.scanKeys(deleteForm.server, deleteForm.db, deleteForm.key)
|
const { keys = [] } = await browserStore.scanKeys(deleteForm.server, deleteForm.db, deleteForm.key)
|
||||||
deleteForm.affectedKeys = keys || []
|
deleteForm.affectedKeys = keys || []
|
||||||
deleteForm.showAffected = true
|
deleteForm.showAffected = true
|
||||||
} finally {
|
} finally {
|
||||||
|
@ -53,7 +53,7 @@ const i18n = useI18n()
|
||||||
const onConfirmDelete = async () => {
|
const onConfirmDelete = async () => {
|
||||||
try {
|
try {
|
||||||
const { server, db, key, async } = deleteForm
|
const { server, db, key, async } = deleteForm
|
||||||
const success = await connectionStore.deleteKeyPrefix(server, db, key, async)
|
const success = await browserStore.deleteKeyPrefix(server, db, key, async)
|
||||||
if (success) {
|
if (success) {
|
||||||
$message.success(i18n.t('dialogue.handle_succ'))
|
$message.success(i18n.t('dialogue.handle_succ'))
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
import { reactive, watch } from 'vue'
|
import { reactive, watch } from 'vue'
|
||||||
import useDialog from 'stores/dialog'
|
import useDialog from 'stores/dialog'
|
||||||
import { useI18n } from 'vue-i18n'
|
import { useI18n } from 'vue-i18n'
|
||||||
import useConnectionStore from 'stores/connections.js'
|
import useBrowserStore from 'stores/browser.js'
|
||||||
|
|
||||||
const flushForm = reactive({
|
const flushForm = reactive({
|
||||||
server: '',
|
server: '',
|
||||||
|
@ -13,7 +13,7 @@ const flushForm = reactive({
|
||||||
})
|
})
|
||||||
|
|
||||||
const dialogStore = useDialog()
|
const dialogStore = useDialog()
|
||||||
const connectionStore = useConnectionStore()
|
const browserStore = useBrowserStore()
|
||||||
watch(
|
watch(
|
||||||
() => dialogStore.flushDBDialogVisible,
|
() => dialogStore.flushDBDialogVisible,
|
||||||
(visible) => {
|
(visible) => {
|
||||||
|
@ -31,7 +31,7 @@ const i18n = useI18n()
|
||||||
const onConfirmFlush = async () => {
|
const onConfirmFlush = async () => {
|
||||||
try {
|
try {
|
||||||
const { server, db, async } = flushForm
|
const { server, db, async } = flushForm
|
||||||
const success = await connectionStore.flushDatabase(server, db, async)
|
const success = await browserStore.flushDatabase(server, db, async)
|
||||||
if (success) {
|
if (success) {
|
||||||
$message.success(i18n.t('dialogue.handle_succ'))
|
$message.success(i18n.t('dialogue.handle_succ'))
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
import { computed, reactive, ref, watch } from 'vue'
|
import { computed, reactive, ref, watch } from 'vue'
|
||||||
import useDialog from 'stores/dialog'
|
import useDialog from 'stores/dialog'
|
||||||
import { useI18n } from 'vue-i18n'
|
import { useI18n } from 'vue-i18n'
|
||||||
import useConnectionStore from 'stores/connections.js'
|
|
||||||
import { types } from '@/consts/support_redis_type.js'
|
import { types } from '@/consts/support_redis_type.js'
|
||||||
|
import useBrowserStore from 'stores/browser.js'
|
||||||
|
|
||||||
const i18n = useI18n()
|
const i18n = useI18n()
|
||||||
const filterForm = reactive({
|
const filterForm = reactive({
|
||||||
|
@ -39,11 +39,11 @@ watch(
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
const connectionStore = useConnectionStore()
|
const browserStore = useBrowserStore()
|
||||||
const onConfirm = () => {
|
const onConfirm = () => {
|
||||||
const { server, db, type, pattern } = filterForm
|
const { server, db, type, pattern } = filterForm
|
||||||
connectionStore.setKeyFilter(server, db, pattern, type)
|
browserStore.setKeyFilter(server, db, pattern, type)
|
||||||
connectionStore.reopenDatabase(server, db)
|
browserStore.reopenDatabase(server, db)
|
||||||
}
|
}
|
||||||
|
|
||||||
const onClose = () => {
|
const onClose = () => {
|
||||||
|
|
|
@ -10,10 +10,10 @@ import NewListValue from '@/components/new_value/NewListValue.vue'
|
||||||
import NewZSetValue from '@/components/new_value/NewZSetValue.vue'
|
import NewZSetValue from '@/components/new_value/NewZSetValue.vue'
|
||||||
import NewSetValue from '@/components/new_value/NewSetValue.vue'
|
import NewSetValue from '@/components/new_value/NewSetValue.vue'
|
||||||
import { useI18n } from 'vue-i18n'
|
import { useI18n } from 'vue-i18n'
|
||||||
import useConnectionStore from 'stores/connections.js'
|
|
||||||
import { NSpace } from 'naive-ui'
|
import { NSpace } from 'naive-ui'
|
||||||
import useTabStore from 'stores/tab.js'
|
import useTabStore from 'stores/tab.js'
|
||||||
import NewStreamValue from '@/components/new_value/NewStreamValue.vue'
|
import NewStreamValue from '@/components/new_value/NewStreamValue.vue'
|
||||||
|
import useBrowserStore from 'stores/browser.js'
|
||||||
|
|
||||||
const i18n = useI18n()
|
const i18n = useI18n()
|
||||||
const newForm = reactive({
|
const newForm = reactive({
|
||||||
|
@ -33,7 +33,7 @@ const formRules = computed(() => {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
const dbOptions = computed(() =>
|
const dbOptions = computed(() =>
|
||||||
map(keys(connectionStore.databases[newForm.server]), (key) => ({
|
map(keys(browserStore.databases[newForm.server]), (key) => ({
|
||||||
label: key,
|
label: key,
|
||||||
value: parseInt(key),
|
value: parseInt(key),
|
||||||
})),
|
})),
|
||||||
|
@ -101,7 +101,7 @@ const renderTypeLabel = (option) => {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
const connectionStore = useConnectionStore()
|
const browserStore = useBrowserStore()
|
||||||
const tabStore = useTabStore()
|
const tabStore = useTabStore()
|
||||||
const onAdd = async () => {
|
const onAdd = async () => {
|
||||||
await newFormRef.value?.validate().catch((err) => {
|
await newFormRef.value?.validate().catch((err) => {
|
||||||
|
@ -117,7 +117,7 @@ const onAdd = async () => {
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
value = defaultValue[type]
|
value = defaultValue[type]
|
||||||
}
|
}
|
||||||
const { success, msg, nodeKey } = await connectionStore.setKey(
|
const { success, msg, nodeKey } = await browserStore.setKey(
|
||||||
server,
|
server,
|
||||||
db,
|
db,
|
||||||
key,
|
key,
|
||||||
|
@ -130,7 +130,7 @@ const onAdd = async () => {
|
||||||
if (success) {
|
if (success) {
|
||||||
// select current key
|
// select current key
|
||||||
tabStore.setSelectedKeys(server, nodeKey)
|
tabStore.setSelectedKeys(server, nodeKey)
|
||||||
connectionStore.loadKeyValue(server, db, key).then(() => {})
|
browserStore.loadKeyValue(server, db, key).then(() => {})
|
||||||
} else if (!isEmpty(msg)) {
|
} else if (!isEmpty(msg)) {
|
||||||
$message.error(msg)
|
$message.error(msg)
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
import { reactive, watch } from 'vue'
|
import { reactive, watch } from 'vue'
|
||||||
import useDialog from 'stores/dialog'
|
import useDialog from 'stores/dialog'
|
||||||
import { useI18n } from 'vue-i18n'
|
import { useI18n } from 'vue-i18n'
|
||||||
import useConnectionStore from 'stores/connections.js'
|
import useBrowserStore from 'stores/browser.js'
|
||||||
|
|
||||||
const renameForm = reactive({
|
const renameForm = reactive({
|
||||||
server: '',
|
server: '',
|
||||||
|
@ -12,7 +12,7 @@ const renameForm = reactive({
|
||||||
})
|
})
|
||||||
|
|
||||||
const dialogStore = useDialog()
|
const dialogStore = useDialog()
|
||||||
const connectionStore = useConnectionStore()
|
const browserStore = useBrowserStore()
|
||||||
watch(
|
watch(
|
||||||
() => dialogStore.renameDialogVisible,
|
() => dialogStore.renameDialogVisible,
|
||||||
(visible) => {
|
(visible) => {
|
||||||
|
@ -30,9 +30,9 @@ const i18n = useI18n()
|
||||||
const onRename = async () => {
|
const onRename = async () => {
|
||||||
try {
|
try {
|
||||||
const { server, db, key, newKey } = renameForm
|
const { server, db, key, newKey } = renameForm
|
||||||
const { success, msg } = await connectionStore.renameKey(server, db, key, newKey)
|
const { success, msg } = await browserStore.renameKey(server, db, key, newKey)
|
||||||
if (success) {
|
if (success) {
|
||||||
await connectionStore.loadKeyValue(server, db, newKey)
|
await browserStore.loadKeyValue(server, db, newKey)
|
||||||
$message.success(i18n.t('dialogue.handle_succ'))
|
$message.success(i18n.t('dialogue.handle_succ'))
|
||||||
} else {
|
} else {
|
||||||
$message.error(msg)
|
$message.error(msg)
|
||||||
|
|
|
@ -2,9 +2,9 @@
|
||||||
import { reactive, watch } from 'vue'
|
import { reactive, watch } from 'vue'
|
||||||
import useDialog from 'stores/dialog'
|
import useDialog from 'stores/dialog'
|
||||||
import useTabStore from 'stores/tab.js'
|
import useTabStore from 'stores/tab.js'
|
||||||
import useConnectionStore from 'stores/connections.js'
|
|
||||||
import Binary from '@/components/icons/Binary.vue'
|
import Binary from '@/components/icons/Binary.vue'
|
||||||
import { isEmpty } from 'lodash'
|
import { isEmpty } from 'lodash'
|
||||||
|
import useBrowserStore from 'stores/browser.js'
|
||||||
|
|
||||||
const ttlForm = reactive({
|
const ttlForm = reactive({
|
||||||
server: '',
|
server: '',
|
||||||
|
@ -15,7 +15,7 @@ const ttlForm = reactive({
|
||||||
})
|
})
|
||||||
|
|
||||||
const dialogStore = useDialog()
|
const dialogStore = useDialog()
|
||||||
const connectionStore = useConnectionStore()
|
const browserStore = useBrowserStore()
|
||||||
const tabStore = useTabStore()
|
const tabStore = useTabStore()
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
|
@ -51,7 +51,7 @@ const onConfirm = async () => {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
const key = isEmpty(ttlForm.keyCode) ? ttlForm.key : ttlForm.keyCode
|
const key = isEmpty(ttlForm.keyCode) ? ttlForm.key : ttlForm.keyCode
|
||||||
const success = await connectionStore.setTTL(tab.name, tab.db, key, ttlForm.ttl)
|
const success = await browserStore.setTTL(tab.name, tab.db, key, ttlForm.ttl)
|
||||||
if (success) {
|
if (success) {
|
||||||
tabStore.updateTTL({
|
tabStore.updateTTL({
|
||||||
server: ttlForm.server,
|
server: ttlForm.server,
|
||||||
|
|
|
@ -8,7 +8,6 @@ import { get } from 'lodash'
|
||||||
import Refresh from '@/components/icons/Refresh.vue'
|
import Refresh from '@/components/icons/Refresh.vue'
|
||||||
import useDialogStore from 'stores/dialog.js'
|
import useDialogStore from 'stores/dialog.js'
|
||||||
import { useI18n } from 'vue-i18n'
|
import { useI18n } from 'vue-i18n'
|
||||||
import useConnectionStore from 'stores/connections.js'
|
|
||||||
import { types } from '@/consts/support_redis_type.js'
|
import { types } from '@/consts/support_redis_type.js'
|
||||||
import Search from '@/components/icons/Search.vue'
|
import Search from '@/components/icons/Search.vue'
|
||||||
import Unlink from '@/components/icons/Unlink.vue'
|
import Unlink from '@/components/icons/Unlink.vue'
|
||||||
|
@ -24,7 +23,6 @@ const onInfo = () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
const i18n = useI18n()
|
const i18n = useI18n()
|
||||||
const connectionStore = useConnectionStore()
|
|
||||||
const onDisconnect = () => {
|
const onDisconnect = () => {
|
||||||
browserTreeRef.value?.handleSelectContextMenu('server_close')
|
browserTreeRef.value?.handleSelectContextMenu('server_close')
|
||||||
}
|
}
|
||||||
|
@ -55,7 +53,7 @@ const filterTypeOptions = computed(() => {
|
||||||
// const viewType = ref(0)
|
// const viewType = ref(0)
|
||||||
// const onSwitchView = (selectView) => {
|
// const onSwitchView = (selectView) => {
|
||||||
// const { server } = tabStore.currentTab
|
// const { server } = tabStore.currentTab
|
||||||
// connectionStore.switchKeyView(server, selectView)
|
// browserStore.switchKeyView(server, selectView)
|
||||||
// }
|
// }
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,7 @@ import IconButton from '@/components/common/IconButton.vue'
|
||||||
import { parseHexColor } from '@/utils/rgb.js'
|
import { parseHexColor } from '@/utils/rgb.js'
|
||||||
import LoadList from '@/components/icons/LoadList.vue'
|
import LoadList from '@/components/icons/LoadList.vue'
|
||||||
import LoadAll from '@/components/icons/LoadAll.vue'
|
import LoadAll from '@/components/icons/LoadAll.vue'
|
||||||
|
import useBrowserStore from 'stores/browser.js'
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
server: String,
|
server: String,
|
||||||
|
@ -37,6 +38,7 @@ const loading = ref(false)
|
||||||
const loadingConnections = ref(false)
|
const loadingConnections = ref(false)
|
||||||
const expandedKeys = ref([props.server])
|
const expandedKeys = ref([props.server])
|
||||||
const connectionStore = useConnectionStore()
|
const connectionStore = useConnectionStore()
|
||||||
|
const browserStore = useBrowserStore()
|
||||||
const tabStore = useTabStore()
|
const tabStore = useTabStore()
|
||||||
const dialogStore = useDialogStore()
|
const dialogStore = useDialogStore()
|
||||||
|
|
||||||
|
@ -53,7 +55,7 @@ const selectedKeys = computed(() => {
|
||||||
})
|
})
|
||||||
|
|
||||||
const data = computed(() => {
|
const data = computed(() => {
|
||||||
const dbs = get(connectionStore.databases, props.server, [])
|
const dbs = get(browserStore.databases, props.server, [])
|
||||||
return dbs
|
return dbs
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -229,7 +231,7 @@ const handleSelectContextMenu = (key) => {
|
||||||
if (selectedKey == null) {
|
if (selectedKey == null) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
const node = connectionStore.getNode(selectedKey)
|
const node = browserStore.getNode(selectedKey)
|
||||||
const { db = 0, key: nodeKey, redisKey: rk = '', redisKeyCode: rkc, label } = node || {}
|
const { db = 0, key: nodeKey, redisKey: rk = '', redisKeyCode: rkc, label } = node || {}
|
||||||
const redisKey = rkc || rk
|
const redisKey = rkc || rk
|
||||||
const redisKeyName = !!rkc ? label : redisKey
|
const redisKeyName = !!rkc ? label : redisKey
|
||||||
|
@ -241,23 +243,23 @@ const handleSelectContextMenu = (key) => {
|
||||||
case 'server_reload':
|
case 'server_reload':
|
||||||
expandedKeys.value = [props.server]
|
expandedKeys.value = [props.server]
|
||||||
tabStore.setSelectedKeys(props.server)
|
tabStore.setSelectedKeys(props.server)
|
||||||
connectionStore.openConnection(props.server, true).then(() => {
|
browserStore.openConnection(props.server, true).then(() => {
|
||||||
$message.success(i18n.t('dialogue.reload_succ'))
|
$message.success(i18n.t('dialogue.reload_succ'))
|
||||||
})
|
})
|
||||||
break
|
break
|
||||||
case 'server_close':
|
case 'server_close':
|
||||||
connectionStore.closeConnection(props.server)
|
browserStore.closeConnection(props.server)
|
||||||
break
|
break
|
||||||
case 'db_open':
|
case 'db_open':
|
||||||
nextTick().then(() => expandKey(nodeKey))
|
nextTick().then(() => expandKey(nodeKey))
|
||||||
break
|
break
|
||||||
case 'db_reload':
|
case 'db_reload':
|
||||||
resetExpandKey(props.server, db)
|
resetExpandKey(props.server, db)
|
||||||
connectionStore.reopenDatabase(props.server, db)
|
browserStore.reopenDatabase(props.server, db)
|
||||||
break
|
break
|
||||||
case 'db_close':
|
case 'db_close':
|
||||||
resetExpandKey(props.server, db, true)
|
resetExpandKey(props.server, db, true)
|
||||||
connectionStore.closeDatabase(props.server, db)
|
browserStore.closeDatabase(props.server, db)
|
||||||
break
|
break
|
||||||
case 'db_flush':
|
case 'db_flush':
|
||||||
dialogStore.openFlushDBDialog(props.server, db)
|
dialogStore.openFlushDBDialog(props.server, db)
|
||||||
|
@ -267,21 +269,21 @@ const handleSelectContextMenu = (key) => {
|
||||||
dialogStore.openNewKeyDialog(redisKey, props.server, db)
|
dialogStore.openNewKeyDialog(redisKey, props.server, db)
|
||||||
break
|
break
|
||||||
case 'db_filter':
|
case 'db_filter':
|
||||||
const { match: pattern, type } = connectionStore.getKeyFilter(props.server, db)
|
const { match: pattern, type } = browserStore.getKeyFilter(props.server, db)
|
||||||
dialogStore.openKeyFilterDialog(props.server, db, pattern, type)
|
dialogStore.openKeyFilterDialog(props.server, db, pattern, type)
|
||||||
break
|
break
|
||||||
// case 'key_reload':
|
// case 'key_reload':
|
||||||
// connectionStore.loadKeys(props.server, db, redisKey)
|
// browserStore.loadKeys(props.server, db, redisKey)
|
||||||
// break
|
// break
|
||||||
case 'value_reload':
|
case 'value_reload':
|
||||||
connectionStore.loadKeyValue(props.server, db, redisKey)
|
browserStore.loadKeyValue(props.server, db, redisKey)
|
||||||
break
|
break
|
||||||
case 'key_remove':
|
case 'key_remove':
|
||||||
dialogStore.openDeleteKeyDialog(props.server, db, isEmpty(redisKey) ? '*' : redisKey + ':*')
|
dialogStore.openDeleteKeyDialog(props.server, db, isEmpty(redisKey) ? '*' : redisKey + ':*')
|
||||||
break
|
break
|
||||||
case 'value_remove':
|
case 'value_remove':
|
||||||
$dialog.warning(i18n.t('dialogue.remove_tip', { name: redisKeyName }), () => {
|
$dialog.warning(i18n.t('dialogue.remove_tip', { name: redisKeyName }), () => {
|
||||||
connectionStore.deleteKey(props.server, db, redisKey).then((success) => {
|
browserStore.deleteKey(props.server, db, redisKey).then((success) => {
|
||||||
if (success) {
|
if (success) {
|
||||||
$message.success(i18n.t('dialogue.delete_key_succ', { key: redisKeyName }))
|
$message.success(i18n.t('dialogue.delete_key_succ', { key: redisKeyName }))
|
||||||
}
|
}
|
||||||
|
@ -303,7 +305,7 @@ const handleSelectContextMenu = (key) => {
|
||||||
case 'db_loadmore':
|
case 'db_loadmore':
|
||||||
if (node != null && !!!node.loading && !!!node.fullLoaded) {
|
if (node != null && !!!node.loading && !!!node.fullLoaded) {
|
||||||
node.loading = true
|
node.loading = true
|
||||||
connectionStore
|
browserStore
|
||||||
.loadMoreKeys(props.server, db)
|
.loadMoreKeys(props.server, db)
|
||||||
.then((end) => {
|
.then((end) => {
|
||||||
// fully loaded
|
// fully loaded
|
||||||
|
@ -320,7 +322,7 @@ const handleSelectContextMenu = (key) => {
|
||||||
case 'db_loadall':
|
case 'db_loadall':
|
||||||
if (node != null && !!!node.loading) {
|
if (node != null && !!!node.loading) {
|
||||||
node.loading = true
|
node.loading = true
|
||||||
connectionStore
|
browserStore
|
||||||
.loadAllKeys(props.server, db)
|
.loadAllKeys(props.server, db)
|
||||||
.catch((e) => {
|
.catch((e) => {
|
||||||
$message.error(e.message)
|
$message.error(e.message)
|
||||||
|
@ -376,14 +378,14 @@ const onUpdateSelectedKeys = (keys, options) => {
|
||||||
const { key, db } = node
|
const { key, db } = node
|
||||||
const redisKey = node.redisKeyCode || node.redisKey
|
const redisKey = node.redisKeyCode || node.redisKey
|
||||||
if (!includes(selectedKeys.value, key)) {
|
if (!includes(selectedKeys.value, key)) {
|
||||||
connectionStore.loadKeyValue(props.server, db, redisKey)
|
browserStore.loadKeyValue(props.server, db, redisKey)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// default is load blank key to display server status
|
// default is load blank key to display server status
|
||||||
connectionStore.loadKeyValue(props.server, 0)
|
browserStore.loadKeyValue(props.server, 0)
|
||||||
} finally {
|
} finally {
|
||||||
tabStore.setSelectedKeys(props.server, keys)
|
tabStore.setSelectedKeys(props.server, keys)
|
||||||
}
|
}
|
||||||
|
@ -434,7 +436,7 @@ const renderLabel = ({ option }) => {
|
||||||
return h('b', {}, { default: () => option.label })
|
return h('b', {}, { default: () => option.label })
|
||||||
case ConnectionType.RedisDB:
|
case ConnectionType.RedisDB:
|
||||||
const { name: server, db, opened = false } = option
|
const { name: server, db, opened = false } = option
|
||||||
let { match: matchPattern, type: typeFilter } = connectionStore.getKeyFilter(server, db)
|
let { match: matchPattern, type: typeFilter } = browserStore.getKeyFilter(server, db)
|
||||||
const items = []
|
const items = []
|
||||||
if (opened) {
|
if (opened) {
|
||||||
items.push(`${option.label} (${option.keys || 0}/${Math.max(option.maxKeys || 0, option.keys || 0)})`)
|
items.push(`${option.label} (${option.keys || 0}/${Math.max(option.maxKeys || 0, option.keys || 0)})`)
|
||||||
|
@ -457,8 +459,8 @@ const renderLabel = ({ option }) => {
|
||||||
},
|
},
|
||||||
onClose: () => {
|
onClose: () => {
|
||||||
// remove type filter
|
// remove type filter
|
||||||
connectionStore.setKeyFilter(server, db, matchPattern)
|
browserStore.setKeyFilter(server, db, matchPattern)
|
||||||
connectionStore.reopenDatabase(server, db)
|
browserStore.reopenDatabase(server, db)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{ default: () => typeFilter },
|
{ default: () => typeFilter },
|
||||||
|
@ -476,8 +478,8 @@ const renderLabel = ({ option }) => {
|
||||||
size: 'small',
|
size: 'small',
|
||||||
onClose: () => {
|
onClose: () => {
|
||||||
// remove key match pattern
|
// remove key match pattern
|
||||||
connectionStore.setKeyFilter(server, db, '*', typeFilter)
|
browserStore.setKeyFilter(server, db, '*', typeFilter)
|
||||||
connectionStore.reopenDatabase(server, db)
|
browserStore.reopenDatabase(server, db)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{ default: () => matchPattern },
|
{ default: () => matchPattern },
|
||||||
|
@ -652,7 +654,7 @@ const onLoadTree = async (node) => {
|
||||||
case ConnectionType.RedisDB:
|
case ConnectionType.RedisDB:
|
||||||
loading.value = true
|
loading.value = true
|
||||||
try {
|
try {
|
||||||
await connectionStore.openDatabase(props.server, node.db)
|
await browserStore.openDatabase(props.server, node.db)
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
$message.error(e.message)
|
$message.error(e.message)
|
||||||
node.isLeaf = undefined
|
node.isLeaf = undefined
|
||||||
|
|
|
@ -6,12 +6,10 @@ import AddLink from '@/components/icons/AddLink.vue'
|
||||||
import IconButton from '@/components/common/IconButton.vue'
|
import IconButton from '@/components/common/IconButton.vue'
|
||||||
import Filter from '@/components/icons/Filter.vue'
|
import Filter from '@/components/icons/Filter.vue'
|
||||||
import ConnectionTree from './ConnectionTree.vue'
|
import ConnectionTree from './ConnectionTree.vue'
|
||||||
import useConnectionStore from 'stores/connections.js'
|
|
||||||
import { ref } from 'vue'
|
import { ref } from 'vue'
|
||||||
|
|
||||||
const themeVars = useThemeVars()
|
const themeVars = useThemeVars()
|
||||||
const dialogStore = useDialogStore()
|
const dialogStore = useDialogStore()
|
||||||
const connectionStore = useConnectionStore()
|
|
||||||
const filterPattern = ref('')
|
const filterPattern = ref('')
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -19,11 +19,13 @@ import Edit from '@/components/icons/Edit.vue'
|
||||||
import { hexGammaCorrection, parseHexColor, toHexColor } from '@/utils/rgb.js'
|
import { hexGammaCorrection, parseHexColor, toHexColor } from '@/utils/rgb.js'
|
||||||
import IconButton from '@/components/common/IconButton.vue'
|
import IconButton from '@/components/common/IconButton.vue'
|
||||||
import usePreferencesStore from 'stores/preferences.js'
|
import usePreferencesStore from 'stores/preferences.js'
|
||||||
|
import useBrowserStore from 'stores/browser.js'
|
||||||
|
|
||||||
const themeVars = useThemeVars()
|
const themeVars = useThemeVars()
|
||||||
const i18n = useI18n()
|
const i18n = useI18n()
|
||||||
const connectingServer = ref('')
|
const connectingServer = ref('')
|
||||||
const connectionStore = useConnectionStore()
|
const connectionStore = useConnectionStore()
|
||||||
|
const browserStore = useBrowserStore()
|
||||||
const tabStore = useTabStore()
|
const tabStore = useTabStore()
|
||||||
const prefStore = usePreferencesStore()
|
const prefStore = usePreferencesStore()
|
||||||
const dialogStore = useDialogStore()
|
const dialogStore = useDialogStore()
|
||||||
|
@ -66,7 +68,7 @@ const menuOptions = {
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
[ConnectionType.Server]: ({ name }) => {
|
[ConnectionType.Server]: ({ name }) => {
|
||||||
const connected = connectionStore.isConnected(name)
|
const connected = browserStore.isConnected(name)
|
||||||
if (connected) {
|
if (connected) {
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
|
@ -192,7 +194,7 @@ const renderPrefix = ({ option }) => {
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
case ConnectionType.Server:
|
case ConnectionType.Server:
|
||||||
const connected = connectionStore.isConnected(option.name)
|
const connected = browserStore.isConnected(option.name)
|
||||||
const color = getServerMarkColor(option.name)
|
const color = getServerMarkColor(option.name)
|
||||||
const icon = option.cluster === true ? Cluster : Server
|
const icon = option.cluster === true ? Cluster : Server
|
||||||
return h(
|
return h(
|
||||||
|
@ -265,7 +267,7 @@ const renderSuffix = ({ option }) => {
|
||||||
if (includes(selectedKeys.value, option.key)) {
|
if (includes(selectedKeys.value, option.key)) {
|
||||||
switch (option.type) {
|
switch (option.type) {
|
||||||
case ConnectionType.Server:
|
case ConnectionType.Server:
|
||||||
const connected = connectionStore.isConnected(option.name)
|
const connected = browserStore.isConnected(option.name)
|
||||||
return renderIconMenu(getServerMenu(connected))
|
return renderIconMenu(getServerMenu(connected))
|
||||||
case ConnectionType.Group:
|
case ConnectionType.Group:
|
||||||
return renderIconMenu(getGroupMenu())
|
return renderIconMenu(getGroupMenu())
|
||||||
|
@ -290,8 +292,8 @@ const onUpdateSelectedKeys = (keys, option) => {
|
||||||
const openConnection = async (name) => {
|
const openConnection = async (name) => {
|
||||||
try {
|
try {
|
||||||
connectingServer.value = name
|
connectingServer.value = name
|
||||||
if (!connectionStore.isConnected(name)) {
|
if (!browserStore.isConnected(name)) {
|
||||||
await connectionStore.openConnection(name)
|
await browserStore.openConnection(name)
|
||||||
}
|
}
|
||||||
// check if connection already canceled before finish open
|
// check if connection already canceled before finish open
|
||||||
if (!isEmpty(connectingServer.value)) {
|
if (!isEmpty(connectingServer.value)) {
|
||||||
|
@ -388,9 +390,9 @@ const handleSelectContextMenu = (key) => {
|
||||||
break
|
break
|
||||||
case 'server_edit':
|
case 'server_edit':
|
||||||
// ask for close relevant connections before edit
|
// ask for close relevant connections before edit
|
||||||
if (connectionStore.isConnected(name)) {
|
if (browserStore.isConnected(name)) {
|
||||||
$dialog.warning(i18n.t('dialogue.edit_close_confirm'), () => {
|
$dialog.warning(i18n.t('dialogue.edit_close_confirm'), () => {
|
||||||
connectionStore.closeConnection(name)
|
browserStore.closeConnection(name)
|
||||||
dialogStore.openEditDialog(name)
|
dialogStore.openEditDialog(name)
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
|
@ -404,7 +406,7 @@ const handleSelectContextMenu = (key) => {
|
||||||
removeConnection(name)
|
removeConnection(name)
|
||||||
break
|
break
|
||||||
case 'server_close':
|
case 'server_close':
|
||||||
connectionStore.closeConnection(name).then((closed) => {
|
browserStore.closeConnection(name).then((closed) => {
|
||||||
if (closed) {
|
if (closed) {
|
||||||
$message.success(i18n.t('dialogue.handle_succ'))
|
$message.success(i18n.t('dialogue.handle_succ'))
|
||||||
}
|
}
|
||||||
|
@ -475,7 +477,7 @@ const handleDrop = ({ node, dragNode, dropPosition }) => {
|
||||||
|
|
||||||
const onCancelOpen = () => {
|
const onCancelOpen = () => {
|
||||||
if (!isEmpty(connectingServer.value)) {
|
if (!isEmpty(connectingServer.value)) {
|
||||||
connectionStore.closeConnection(connectingServer.value)
|
browserStore.closeConnection(connectingServer.value)
|
||||||
connectingServer.value = ''
|
connectingServer.value = ''
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,10 +9,10 @@ import Config from '@/components/icons/Config.vue'
|
||||||
import useDialogStore from 'stores/dialog.js'
|
import useDialogStore from 'stores/dialog.js'
|
||||||
import Github from '@/components/icons/Github.vue'
|
import Github from '@/components/icons/Github.vue'
|
||||||
import { BrowserOpenURL } from 'wailsjs/runtime/runtime.js'
|
import { BrowserOpenURL } from 'wailsjs/runtime/runtime.js'
|
||||||
import useConnectionStore from 'stores/connections.js'
|
|
||||||
import usePreferencesStore from 'stores/preferences.js'
|
import usePreferencesStore from 'stores/preferences.js'
|
||||||
import Record from '@/components/icons/Record.vue'
|
import Record from '@/components/icons/Record.vue'
|
||||||
import { extraTheme } from '@/utils/extra_theme.js'
|
import { extraTheme } from '@/utils/extra_theme.js'
|
||||||
|
import useBrowserStore from 'stores/browser.js'
|
||||||
|
|
||||||
const themeVars = useThemeVars()
|
const themeVars = useThemeVars()
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ const renderIcon = (icon) => {
|
||||||
return () => h(NIcon, null, { default: () => h(icon, { strokeWidth: 3 }) })
|
return () => h(NIcon, null, { default: () => h(icon, { strokeWidth: 3 }) })
|
||||||
}
|
}
|
||||||
|
|
||||||
const connectionStore = useConnectionStore()
|
const browserStore = useBrowserStore()
|
||||||
const i18n = useI18n()
|
const i18n = useI18n()
|
||||||
const menuOptions = computed(() => {
|
const menuOptions = computed(() => {
|
||||||
return [
|
return [
|
||||||
|
@ -42,7 +42,7 @@ const menuOptions = computed(() => {
|
||||||
label: i18n.t('ribbon.browser'),
|
label: i18n.t('ribbon.browser'),
|
||||||
key: 'browser',
|
key: 'browser',
|
||||||
icon: renderIcon(Database),
|
icon: renderIcon(Database),
|
||||||
show: connectionStore.anyConnectionOpened,
|
show: browserStore.anyConnectionOpened,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: i18n.t('ribbon.server'),
|
label: i18n.t('ribbon.server'),
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -12,6 +12,7 @@ export const themeOverrides = {
|
||||||
primaryColorSuppl: '#FF6B6B',
|
primaryColorSuppl: '#FF6B6B',
|
||||||
borderRadius: '4px',
|
borderRadius: '4px',
|
||||||
borderRadiusSmall: '3px',
|
borderRadiusSmall: '3px',
|
||||||
|
heightMedium: '32px',
|
||||||
lineHeight: 1.5,
|
lineHeight: 1.5,
|
||||||
scrollbarWidth: '8px',
|
scrollbarWidth: '8px',
|
||||||
tabColor: '#FFFFFF',
|
tabColor: '#FFFFFF',
|
||||||
|
|
5
main.go
5
main.go
|
@ -29,6 +29,7 @@ func main() {
|
||||||
// Create an instance of the app structure
|
// Create an instance of the app structure
|
||||||
sysSvc := services.System()
|
sysSvc := services.System()
|
||||||
connSvc := services.Connection()
|
connSvc := services.Connection()
|
||||||
|
browserSvc := services.Browser()
|
||||||
cliSvc := services.Cli()
|
cliSvc := services.Cli()
|
||||||
prefSvc := services.Preferences()
|
prefSvc := services.Preferences()
|
||||||
prefSvc.SetAppVersion(version)
|
prefSvc.SetAppVersion(version)
|
||||||
|
@ -59,6 +60,7 @@ func main() {
|
||||||
OnStartup: func(ctx context.Context) {
|
OnStartup: func(ctx context.Context) {
|
||||||
sysSvc.Start(ctx)
|
sysSvc.Start(ctx)
|
||||||
connSvc.Start(ctx)
|
connSvc.Start(ctx)
|
||||||
|
browserSvc.Start(ctx)
|
||||||
cliSvc.Start(ctx)
|
cliSvc.Start(ctx)
|
||||||
|
|
||||||
services.GA().SetSecretKey(gaMeasurementID, gaSecretKey)
|
services.GA().SetSecretKey(gaMeasurementID, gaSecretKey)
|
||||||
|
@ -68,12 +70,13 @@ func main() {
|
||||||
runtime2.WindowShow(ctx)
|
runtime2.WindowShow(ctx)
|
||||||
},
|
},
|
||||||
OnShutdown: func(ctx context.Context) {
|
OnShutdown: func(ctx context.Context) {
|
||||||
connSvc.Stop()
|
browserSvc.Stop()
|
||||||
cliSvc.CloseAll()
|
cliSvc.CloseAll()
|
||||||
},
|
},
|
||||||
Bind: []interface{}{
|
Bind: []interface{}{
|
||||||
sysSvc,
|
sysSvc,
|
||||||
connSvc,
|
connSvc,
|
||||||
|
browserSvc,
|
||||||
cliSvc,
|
cliSvc,
|
||||||
prefSvc,
|
prefSvc,
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in New Issue