feat: support duplicate connection profile
This commit is contained in:
parent
b7e9d974cb
commit
04a328159b
|
@ -3,7 +3,7 @@ import { every, get, includes, isEmpty, map } from 'lodash'
|
||||||
import { computed, nextTick, ref, watch } from 'vue'
|
import { computed, nextTick, ref, watch } from 'vue'
|
||||||
import { useI18n } from 'vue-i18n'
|
import { useI18n } from 'vue-i18n'
|
||||||
import { TestConnection } from 'wailsjs/go/services/connectionService.js'
|
import { TestConnection } from 'wailsjs/go/services/connectionService.js'
|
||||||
import useDialog from 'stores/dialog'
|
import useDialog, { ConnDialogType } from 'stores/dialog'
|
||||||
import Close from '@/components/icons/Close.vue'
|
import Close from '@/components/icons/Close.vue'
|
||||||
import useConnectionStore from 'stores/connections.js'
|
import useConnectionStore from 'stores/connections.js'
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ const generalFormRules = () => {
|
||||||
keySeparator: { required: true, message: requiredMsg, trigger: 'input' },
|
keySeparator: { required: true, message: requiredMsg, trigger: 'input' },
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const isEditMode = computed(() => !isEmpty(editName.value))
|
const isEditMode = computed(() => dialogStore.connType === ConnDialogType.EDIT)
|
||||||
const closingConnection = computed(() => {
|
const closingConnection = computed(() => {
|
||||||
if (isEmpty(editName.value)) {
|
if (isEmpty(editName.value)) {
|
||||||
return false
|
return false
|
||||||
|
@ -133,11 +133,7 @@ const onTestConnection = async () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
const onClose = () => {
|
const onClose = () => {
|
||||||
if (isEditMode.value) {
|
dialogStore.closeConnDialog()
|
||||||
dialogStore.closeEditDialog()
|
|
||||||
} else {
|
|
||||||
dialogStore.closeNewDialog()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -73,16 +73,16 @@ const menuOptions = {
|
||||||
label: i18n.t('interface.disconnect'),
|
label: i18n.t('interface.disconnect'),
|
||||||
icon: renderIcon(Unlink),
|
icon: renderIcon(Unlink),
|
||||||
},
|
},
|
||||||
{
|
|
||||||
key: 'server_dup',
|
|
||||||
label: i18n.t('interface.dup_conn'),
|
|
||||||
icon: renderIcon(CopyLink),
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
key: 'server_edit',
|
key: 'server_edit',
|
||||||
label: i18n.t('interface.edit_conn'),
|
label: i18n.t('interface.edit_conn'),
|
||||||
icon: renderIcon(Config),
|
icon: renderIcon(Config),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
key: 'server_dup',
|
||||||
|
label: i18n.t('interface.dup_conn'),
|
||||||
|
icon: renderIcon(CopyLink),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
type: 'divider',
|
type: 'divider',
|
||||||
key: 'd1',
|
key: 'd1',
|
||||||
|
@ -105,6 +105,11 @@ const menuOptions = {
|
||||||
label: i18n.t('interface.edit_conn'),
|
label: i18n.t('interface.edit_conn'),
|
||||||
icon: renderIcon(Config),
|
icon: renderIcon(Config),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
key: 'server_dup',
|
||||||
|
label: i18n.t('interface.dup_conn'),
|
||||||
|
icon: renderIcon(CopyLink),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
type: 'divider',
|
type: 'divider',
|
||||||
key: 'd1',
|
key: 'd1',
|
||||||
|
@ -387,6 +392,9 @@ const handleSelectContextMenu = (key) => {
|
||||||
dialogStore.openEditDialog(name)
|
dialogStore.openEditDialog(name)
|
||||||
}
|
}
|
||||||
break
|
break
|
||||||
|
case 'server_dup':
|
||||||
|
dialogStore.openDuplicateDialog(name)
|
||||||
|
break
|
||||||
case 'server_remove':
|
case 'server_remove':
|
||||||
removeConnection(name)
|
removeConnection(name)
|
||||||
break
|
break
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
/**
|
||||||
|
* all types of connection item
|
||||||
|
* @enum {number}
|
||||||
|
*/
|
||||||
export const ConnectionType = {
|
export const ConnectionType = {
|
||||||
Group: 0,
|
Group: 0,
|
||||||
Server: 1,
|
Server: 1,
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
/**
|
||||||
|
* all redis type
|
||||||
|
* @enum {string}
|
||||||
|
*/
|
||||||
export const types = {
|
export const types = {
|
||||||
STRING: 'STRING',
|
STRING: 'STRING',
|
||||||
HASH: 'HASH',
|
HASH: 'HASH',
|
||||||
|
@ -7,6 +11,10 @@ export const types = {
|
||||||
STREAM: 'STREAM',
|
STREAM: 'STREAM',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* mark color for redis type
|
||||||
|
* @enum {string}
|
||||||
|
*/
|
||||||
export const typesColor = {
|
export const typesColor = {
|
||||||
[types.STRING]: '#8256DC',
|
[types.STRING]: '#8256DC',
|
||||||
[types.HASH]: '#0171F5',
|
[types.HASH]: '#0171F5',
|
||||||
|
@ -16,6 +24,10 @@ export const typesColor = {
|
||||||
[types.STREAM]: '#F5C201',
|
[types.STREAM]: '#F5C201',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* background mark color for redis type
|
||||||
|
* @enum {string}
|
||||||
|
*/
|
||||||
export const typesBgColor = {
|
export const typesBgColor = {
|
||||||
[types.STRING]: '#F2EDFB',
|
[types.STRING]: '#F2EDFB',
|
||||||
[types.HASH]: '#E4F0FC',
|
[types.HASH]: '#E4F0FC',
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
/**
|
||||||
|
* string view mode
|
||||||
|
* @enum {string}
|
||||||
|
*/
|
||||||
export const types = {
|
export const types = {
|
||||||
PLAIN_TEXT: 'Plain Text',
|
PLAIN_TEXT: 'Plain Text',
|
||||||
JSON: 'JSON',
|
JSON: 'JSON',
|
||||||
|
|
|
@ -1,9 +1,20 @@
|
||||||
import { defineStore } from 'pinia'
|
import { defineStore } from 'pinia'
|
||||||
import useConnectionStore from './connections.js'
|
import useConnectionStore from './connections.js'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* connection dialog type
|
||||||
|
* @enum {number}
|
||||||
|
*/
|
||||||
|
export const ConnDialogType = {
|
||||||
|
NEW: 0,
|
||||||
|
EDIT: 1,
|
||||||
|
}
|
||||||
|
|
||||||
const useDialogStore = defineStore('dialog', {
|
const useDialogStore = defineStore('dialog', {
|
||||||
state: () => ({
|
state: () => ({
|
||||||
connDialogVisible: false,
|
connDialogVisible: false,
|
||||||
|
/** @type {ConnDialogType} **/
|
||||||
|
connType: ConnDialogType.NEW,
|
||||||
connParam: null,
|
connParam: null,
|
||||||
|
|
||||||
groupDialogVisible: false,
|
groupDialogVisible: false,
|
||||||
|
@ -59,9 +70,10 @@ const useDialogStore = defineStore('dialog', {
|
||||||
actions: {
|
actions: {
|
||||||
openNewDialog() {
|
openNewDialog() {
|
||||||
this.connParam = null
|
this.connParam = null
|
||||||
|
this.connType = ConnDialogType.NEW
|
||||||
this.connDialogVisible = true
|
this.connDialogVisible = true
|
||||||
},
|
},
|
||||||
closeNewDialog() {
|
closeConnDialog() {
|
||||||
this.connDialogVisible = false
|
this.connDialogVisible = false
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -69,10 +81,21 @@ const useDialogStore = defineStore('dialog', {
|
||||||
const connStore = useConnectionStore()
|
const connStore = useConnectionStore()
|
||||||
const profile = await connStore.getConnectionProfile(name)
|
const profile = await connStore.getConnectionProfile(name)
|
||||||
this.connParam = profile || connStore.newDefaultConnection(name)
|
this.connParam = profile || connStore.newDefaultConnection(name)
|
||||||
|
this.connType = ConnDialogType.EDIT
|
||||||
this.connDialogVisible = true
|
this.connDialogVisible = true
|
||||||
},
|
},
|
||||||
closeEditDialog() {
|
|
||||||
this.connDialogVisible = false
|
async openDuplicateDialog(name) {
|
||||||
|
const connStore = useConnectionStore()
|
||||||
|
const profile = await connStore.getConnectionProfile(name)
|
||||||
|
if (profile != null) {
|
||||||
|
profile.name += '2'
|
||||||
|
this.connParam = profile
|
||||||
|
} else {
|
||||||
|
this.connParam = connStore.newDefaultConnection(name)
|
||||||
|
}
|
||||||
|
this.connType = ConnDialogType.NEW
|
||||||
|
this.connDialogVisible = true
|
||||||
},
|
},
|
||||||
|
|
||||||
openNewGroupDialog() {
|
openNewGroupDialog() {
|
||||||
|
|
Loading…
Reference in New Issue