mirror of
https://github.com/Fabio286/antares.git
synced 2025-06-05 21:59:22 +02:00
fix: reload twice after element rename
This commit is contained in:
@ -454,8 +454,8 @@ export default {
|
|||||||
|
|
||||||
this.changeBreadcrumbs({ schema: this.schema, table: this.localOptions.name });
|
this.changeBreadcrumbs({ schema: this.schema, table: this.localOptions.name });
|
||||||
}
|
}
|
||||||
|
else
|
||||||
this.getFieldsData();
|
this.getFieldsData();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
this.addNotification({ status: 'error', message: response });
|
this.addNotification({ status: 'error', message: response });
|
||||||
|
@ -269,8 +269,8 @@ export default {
|
|||||||
|
|
||||||
this.changeBreadcrumbs({ schema: this.schema, function: this.localFunction.name });
|
this.changeBreadcrumbs({ schema: this.schema, function: this.localFunction.name });
|
||||||
}
|
}
|
||||||
|
else
|
||||||
this.getFunctionData();
|
this.getFunctionData();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
this.addNotification({ status: 'error', message: response });
|
this.addNotification({ status: 'error', message: response });
|
||||||
|
@ -268,8 +268,8 @@ export default {
|
|||||||
|
|
||||||
this.changeBreadcrumbs({ schema: this.schema, procedure: this.localRoutine.name });
|
this.changeBreadcrumbs({ schema: this.schema, procedure: this.localRoutine.name });
|
||||||
}
|
}
|
||||||
|
else
|
||||||
this.getRoutineData();
|
this.getRoutineData();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
this.addNotification({ status: 'error', message: response });
|
this.addNotification({ status: 'error', message: response });
|
||||||
|
@ -309,8 +309,8 @@ export default {
|
|||||||
|
|
||||||
this.changeBreadcrumbs({ schema: this.schema, scheduler: this.localScheduler.name });
|
this.changeBreadcrumbs({ schema: this.schema, scheduler: this.localScheduler.name });
|
||||||
}
|
}
|
||||||
|
else
|
||||||
this.getSchedulerData();
|
this.getSchedulerData();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
this.addNotification({ status: 'error', message: response });
|
this.addNotification({ status: 'error', message: response });
|
||||||
|
@ -320,8 +320,8 @@ export default {
|
|||||||
|
|
||||||
this.changeBreadcrumbs({ schema: this.schema, trigger: triggerName });
|
this.changeBreadcrumbs({ schema: this.schema, trigger: triggerName });
|
||||||
}
|
}
|
||||||
|
else
|
||||||
this.getTriggerData();
|
this.getTriggerData();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
this.addNotification({ status: 'error', message: response });
|
this.addNotification({ status: 'error', message: response });
|
||||||
|
@ -242,8 +242,8 @@ export default {
|
|||||||
|
|
||||||
this.changeBreadcrumbs({ schema: this.schema, triggerFunction: this.localFunction.name });
|
this.changeBreadcrumbs({ schema: this.schema, triggerFunction: this.localFunction.name });
|
||||||
}
|
}
|
||||||
|
else
|
||||||
this.getFunctionData();
|
this.getFunctionData();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
this.addNotification({ status: 'error', message: response });
|
this.addNotification({ status: 'error', message: response });
|
||||||
|
@ -333,8 +333,8 @@ export default {
|
|||||||
|
|
||||||
this.changeBreadcrumbs({ schema: this.schema, view: this.localView.name });
|
this.changeBreadcrumbs({ schema: this.schema, view: this.localView.name });
|
||||||
}
|
}
|
||||||
|
else
|
||||||
this.getViewData();
|
this.getViewData();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
this.addNotification({ status: 'error', message: response });
|
this.addNotification({ status: 'error', message: response });
|
||||||
|
@ -1,489 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="modal active">
|
|
||||||
<a class="modal-overlay c-hand" @click="closeModal" />
|
|
||||||
<div class="modal-container">
|
|
||||||
<div class="modal-header pl-2">
|
|
||||||
<div class="modal-title h6">
|
|
||||||
<div class="d-flex">
|
|
||||||
<i class="mdi mdi-24px mdi-server mr-1" /> {{ $t('message.editConnection') }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<a class="btn btn-clear c-hand" @click="closeModal" />
|
|
||||||
</div>
|
|
||||||
<div class="modal-body p-0">
|
|
||||||
<div class="panel">
|
|
||||||
<div class="panel-nav">
|
|
||||||
<ul class="tab tab-block">
|
|
||||||
<li
|
|
||||||
class="tab-item c-hand"
|
|
||||||
:class="{'active': selectedTab === 'general'}"
|
|
||||||
@click="selectTab('general')"
|
|
||||||
>
|
|
||||||
<a class="tab-link">{{ $t('word.general') }}</a>
|
|
||||||
</li>
|
|
||||||
<li
|
|
||||||
class="tab-item c-hand"
|
|
||||||
:class="{'active': selectedTab === 'ssl'}"
|
|
||||||
@click="selectTab('ssl')"
|
|
||||||
>
|
|
||||||
<a class="tab-link">{{ $t('word.ssl') }}</a>
|
|
||||||
</li>
|
|
||||||
<li
|
|
||||||
class="tab-item"
|
|
||||||
:class="{'active': selectedTab === 'ssh'}"
|
|
||||||
@click="selectTab('ssh')"
|
|
||||||
>
|
|
||||||
<a class="c-hand">{{ $t('word.sshTunnel') }}</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div v-if="selectedTab === 'general'" class="panel-body py-0">
|
|
||||||
<div class="container">
|
|
||||||
<form class="form-horizontal">
|
|
||||||
<fieldset class="m-0" :disabled="isTesting">
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-4 col-sm-12">
|
|
||||||
<label class="form-label">{{ $t('word.connectionName') }}</label>
|
|
||||||
</div>
|
|
||||||
<div class="col-8 col-sm-12">
|
|
||||||
<input
|
|
||||||
ref="firstInput"
|
|
||||||
v-model="localConnection.name"
|
|
||||||
class="form-input"
|
|
||||||
type="text"
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-4 col-sm-12">
|
|
||||||
<label class="form-label">{{ $t('word.client') }}</label>
|
|
||||||
</div>
|
|
||||||
<div class="col-8 col-sm-12">
|
|
||||||
<select v-model="localConnection.client" class="form-select">
|
|
||||||
<option value="mysql">
|
|
||||||
MySQL
|
|
||||||
</option>
|
|
||||||
<option value="maria">
|
|
||||||
MariaDB
|
|
||||||
</option>
|
|
||||||
<option value="pg">
|
|
||||||
PostgreSQL
|
|
||||||
</option>
|
|
||||||
<!-- <option value="mssql">
|
|
||||||
Microsoft SQL
|
|
||||||
</option>
|
|
||||||
<option value="oracledb">
|
|
||||||
Oracle DB
|
|
||||||
</option> -->
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-4 col-sm-12">
|
|
||||||
<label class="form-label">{{ $t('word.hostName') }}/IP</label>
|
|
||||||
</div>
|
|
||||||
<div class="col-8 col-sm-12">
|
|
||||||
<input
|
|
||||||
v-model="localConnection.host"
|
|
||||||
class="form-input"
|
|
||||||
type="text"
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-4 col-sm-12">
|
|
||||||
<label class="form-label">{{ $t('word.port') }}</label>
|
|
||||||
</div>
|
|
||||||
<div class="col-8 col-sm-12">
|
|
||||||
<input
|
|
||||||
v-model="localConnection.port"
|
|
||||||
class="form-input"
|
|
||||||
type="number"
|
|
||||||
min="1"
|
|
||||||
max="65535"
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div v-if="customizations.database" class="form-group">
|
|
||||||
<div class="col-4 col-sm-12">
|
|
||||||
<label class="form-label">{{ $t('word.database') }}</label>
|
|
||||||
</div>
|
|
||||||
<div class="col-8 col-sm-12">
|
|
||||||
<input
|
|
||||||
v-model="localConnection.database"
|
|
||||||
class="form-input"
|
|
||||||
type="text"
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-4 col-sm-12">
|
|
||||||
<label class="form-label">{{ $t('word.user') }}</label>
|
|
||||||
</div>
|
|
||||||
<div class="col-8 col-sm-12">
|
|
||||||
<input
|
|
||||||
v-model="localConnection.user"
|
|
||||||
class="form-input"
|
|
||||||
type="text"
|
|
||||||
:disabled="localConnection.ask"
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-4 col-sm-12">
|
|
||||||
<label class="form-label">{{ $t('word.password') }}</label>
|
|
||||||
</div>
|
|
||||||
<div class="col-8 col-sm-12">
|
|
||||||
<input
|
|
||||||
v-model="localConnection.password"
|
|
||||||
class="form-input"
|
|
||||||
type="password"
|
|
||||||
:disabled="localConnection.ask"
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-4 col-sm-12" />
|
|
||||||
<div class="col-8 col-sm-12">
|
|
||||||
<label class="form-checkbox form-inline">
|
|
||||||
<input v-model="localConnection.ask" type="checkbox"><i class="form-icon" /> {{ $t('message.askCredentials') }}
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</fieldset>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
<BaseToast
|
|
||||||
class="mb-2"
|
|
||||||
:message="toast.message"
|
|
||||||
:status="toast.status"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div v-if="selectedTab === 'ssl'" class="panel-body py-0">
|
|
||||||
<div class="container">
|
|
||||||
<form class="form-horizontal">
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-4 col-sm-12">
|
|
||||||
<label class="form-label">
|
|
||||||
{{ $t('message.enableSsl') }}
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
<div class="col-8 col-sm-12">
|
|
||||||
<label class="form-switch d-inline-block" @click.prevent="toggleSsl">
|
|
||||||
<input type="checkbox" :checked="localConnection.ssl">
|
|
||||||
<i class="form-icon" />
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<fieldset class="m-0" :disabled="isTesting || !localConnection.ssl">
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-4 col-sm-12">
|
|
||||||
<label class="form-label">{{ $t('word.privateKey') }}</label>
|
|
||||||
</div>
|
|
||||||
<div class="col-8 col-sm-12">
|
|
||||||
<BaseUploadInput
|
|
||||||
:value="localConnection.key"
|
|
||||||
:message="$t('word.browse')"
|
|
||||||
@clear="pathClear('key')"
|
|
||||||
@change="pathSelection($event, 'key')"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-4 col-sm-12">
|
|
||||||
<label class="form-label">{{ $t('word.certificate') }}</label>
|
|
||||||
</div>
|
|
||||||
<div class="col-8 col-sm-12">
|
|
||||||
<BaseUploadInput
|
|
||||||
:value="localConnection.cert"
|
|
||||||
:message="$t('word.browse')"
|
|
||||||
@clear="pathClear('cert')"
|
|
||||||
@change="pathSelection($event, 'cert')"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-4 col-sm-12">
|
|
||||||
<label class="form-label">{{ $t('word.caCertificate') }}</label>
|
|
||||||
</div>
|
|
||||||
<div class="col-8 col-sm-12">
|
|
||||||
<BaseUploadInput
|
|
||||||
:value="localConnection.ca"
|
|
||||||
:message="$t('word.browse')"
|
|
||||||
@clear="pathClear('ca')"
|
|
||||||
@change="pathSelection($event, 'ca')"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-4 col-sm-12">
|
|
||||||
<label class="form-label">{{ $t('word.ciphers') }}</label>
|
|
||||||
</div>
|
|
||||||
<div class="col-8 col-sm-12">
|
|
||||||
<input
|
|
||||||
ref="firstInput"
|
|
||||||
v-model="localConnection.ciphers"
|
|
||||||
class="form-input"
|
|
||||||
type="text"
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</fieldset>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
<BaseToast
|
|
||||||
class="mb-2"
|
|
||||||
:message="toast.message"
|
|
||||||
:status="toast.status"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div v-if="selectedTab === 'ssh'" class="panel-body py-0">
|
|
||||||
<div class="container">
|
|
||||||
<form class="form-horizontal">
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-4 col-sm-12">
|
|
||||||
<label class="form-label">
|
|
||||||
{{ $t('message.enableSsh') }}
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
<div class="col-8 col-sm-12">
|
|
||||||
<label class="form-switch d-inline-block" @click.prevent="toggleSsh">
|
|
||||||
<input type="checkbox" :checked="localConnection.ssh">
|
|
||||||
<i class="form-icon" />
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<fieldset class="m-0" :disabled="isTesting || !localConnection.ssh">
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-4 col-sm-12">
|
|
||||||
<label class="form-label">{{ $t('word.hostName') }}/IP</label>
|
|
||||||
</div>
|
|
||||||
<div class="col-8 col-sm-12">
|
|
||||||
<input
|
|
||||||
v-model="localConnection.sshHost"
|
|
||||||
class="form-input"
|
|
||||||
type="text"
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-4 col-sm-12">
|
|
||||||
<label class="form-label">{{ $t('word.user') }}</label>
|
|
||||||
</div>
|
|
||||||
<div class="col-8 col-sm-12">
|
|
||||||
<input
|
|
||||||
v-model="localConnection.sshUser"
|
|
||||||
class="form-input"
|
|
||||||
type="text"
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-4 col-sm-12">
|
|
||||||
<label class="form-label">{{ $t('word.password') }}</label>
|
|
||||||
</div>
|
|
||||||
<div class="col-8 col-sm-12">
|
|
||||||
<input
|
|
||||||
v-model="localConnection.sshPass"
|
|
||||||
class="form-input"
|
|
||||||
type="password"
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-4 col-sm-12">
|
|
||||||
<label class="form-label">{{ $t('word.port') }}</label>
|
|
||||||
</div>
|
|
||||||
<div class="col-8 col-sm-12">
|
|
||||||
<input
|
|
||||||
v-model="localConnection.sshPort"
|
|
||||||
class="form-input"
|
|
||||||
type="number"
|
|
||||||
min="1"
|
|
||||||
max="65535"
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-4 col-sm-12">
|
|
||||||
<label class="form-label">{{ $t('word.privateKey') }}</label>
|
|
||||||
</div>
|
|
||||||
<div class="col-8 col-sm-12">
|
|
||||||
<BaseUploadInput
|
|
||||||
:value="localConnection.sshKey"
|
|
||||||
:message="$t('word.browse')"
|
|
||||||
@clear="pathClear('sshKey')"
|
|
||||||
@change="pathSelection($event, 'sshKey')"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</fieldset>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
<BaseToast
|
|
||||||
class="mb-2"
|
|
||||||
:message="toast.message"
|
|
||||||
:status="toast.status"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<button
|
|
||||||
class="btn btn-gray mr-2"
|
|
||||||
:class="{'loading': isTesting}"
|
|
||||||
@click="startTest"
|
|
||||||
>
|
|
||||||
{{ $t('message.testConnection') }}
|
|
||||||
</button>
|
|
||||||
<button class="btn btn-primary mr-2" @click="saveEditConnection">
|
|
||||||
{{ $t('word.save') }}
|
|
||||||
</button>
|
|
||||||
<button class="btn btn-link" @click="closeModal">
|
|
||||||
{{ $t('word.close') }}
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<ModalAskCredentials
|
|
||||||
v-if="isAsking"
|
|
||||||
@close-asking="closeAsking"
|
|
||||||
@credentials="continueTest"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import { mapActions } from 'vuex';
|
|
||||||
import customizations from 'common/customizations';
|
|
||||||
import Connection from '@/ipc-api/Connection';
|
|
||||||
import ModalAskCredentials from '@/components/ModalAskCredentials';
|
|
||||||
import BaseToast from '@/components/BaseToast';
|
|
||||||
import BaseUploadInput from '@/components/BaseUploadInput';
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: 'ModalEditConnection',
|
|
||||||
components: {
|
|
||||||
ModalAskCredentials,
|
|
||||||
BaseToast,
|
|
||||||
BaseUploadInput
|
|
||||||
},
|
|
||||||
props: {
|
|
||||||
connection: Object
|
|
||||||
},
|
|
||||||
data () {
|
|
||||||
return {
|
|
||||||
toast: {
|
|
||||||
status: '',
|
|
||||||
message: ''
|
|
||||||
},
|
|
||||||
isTesting: false,
|
|
||||||
isAsking: false,
|
|
||||||
localConnection: null,
|
|
||||||
selectedTab: 'general'
|
|
||||||
};
|
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
customizations () {
|
|
||||||
return customizations[this.connection.client];
|
|
||||||
}
|
|
||||||
},
|
|
||||||
created () {
|
|
||||||
this.localConnection = Object.assign({}, this.connection);
|
|
||||||
window.addEventListener('keydown', this.onKey);
|
|
||||||
|
|
||||||
setTimeout(() => {
|
|
||||||
this.$refs.firstInput.focus();
|
|
||||||
}, 20);
|
|
||||||
},
|
|
||||||
beforeDestroy () {
|
|
||||||
window.removeEventListener('keydown', this.onKey);
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
...mapActions({
|
|
||||||
editConnection: 'connections/editConnection'
|
|
||||||
}),
|
|
||||||
async startTest () {
|
|
||||||
this.isTesting = true;
|
|
||||||
this.toast = {
|
|
||||||
status: '',
|
|
||||||
message: ''
|
|
||||||
};
|
|
||||||
|
|
||||||
if (this.localConnection.ask)
|
|
||||||
this.isAsking = true;
|
|
||||||
else {
|
|
||||||
try {
|
|
||||||
const res = await Connection.makeTest(this.localConnection);
|
|
||||||
if (res.status === 'error')
|
|
||||||
this.toast = { status: 'error', message: res.response.message };
|
|
||||||
else
|
|
||||||
this.toast = { status: 'success', message: this.$t('message.connectionSuccessfullyMade') };
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
this.toast = { status: 'error', message: err.stack };
|
|
||||||
}
|
|
||||||
|
|
||||||
this.isTesting = false;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
async continueTest (credentials) { // if "Ask for credentials" is true
|
|
||||||
this.isAsking = false;
|
|
||||||
const params = Object.assign({}, this.localConnection, credentials);
|
|
||||||
try {
|
|
||||||
const res = await Connection.makeTest(params);
|
|
||||||
if (res.status === 'error')
|
|
||||||
this.toast = { status: 'error', message: res.response.message };
|
|
||||||
else
|
|
||||||
this.toast = { status: 'success', message: this.$t('message.connectionSuccessfullyMade') };
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
this.toast = { status: 'error', message: err.stack };
|
|
||||||
}
|
|
||||||
|
|
||||||
this.isTesting = false;
|
|
||||||
},
|
|
||||||
saveEditConnection () {
|
|
||||||
this.editConnection(this.localConnection);
|
|
||||||
this.closeModal();
|
|
||||||
},
|
|
||||||
closeAsking () {
|
|
||||||
this.isTesting = false;
|
|
||||||
this.isAsking = false;
|
|
||||||
},
|
|
||||||
closeModal () {
|
|
||||||
this.$emit('close');
|
|
||||||
},
|
|
||||||
onKey (e) {
|
|
||||||
e.stopPropagation();
|
|
||||||
if (e.key === 'Escape')
|
|
||||||
this.closeModal();
|
|
||||||
},
|
|
||||||
selectTab (tab) {
|
|
||||||
this.selectedTab = tab;
|
|
||||||
},
|
|
||||||
toggleSsl () {
|
|
||||||
this.localConnection.ssl = !this.localConnection.ssl;
|
|
||||||
},
|
|
||||||
toggleSsh () {
|
|
||||||
this.localConnection.ssh = !this.localConnection.ssh;
|
|
||||||
},
|
|
||||||
pathSelection (event, name) {
|
|
||||||
const { files } = event.target;
|
|
||||||
if (!files.length) return;
|
|
||||||
|
|
||||||
this.localConnection[name] = files[0].path;
|
|
||||||
},
|
|
||||||
pathClear (name) {
|
|
||||||
this.localConnection[name] = '';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
.modal-container {
|
|
||||||
position: absolute;
|
|
||||||
max-width: 450px;
|
|
||||||
top: 17.5vh;
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -1,518 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="modal active">
|
|
||||||
<a class="modal-overlay c-hand" @click="closeModal" />
|
|
||||||
<div class="modal-container">
|
|
||||||
<div class="modal-header pl-2">
|
|
||||||
<div class="modal-title h6">
|
|
||||||
<div class="d-flex">
|
|
||||||
<i class="mdi mdi-24px mdi-server-plus mr-1" />
|
|
||||||
<span class="cut-text">{{ $t('message.createNewConnection') }}</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<a class="btn btn-clear c-hand" @click="closeModal" />
|
|
||||||
</div>
|
|
||||||
<div class="modal-body p-0">
|
|
||||||
<div class="panel">
|
|
||||||
<div class="panel-nav">
|
|
||||||
<ul class="tab tab-block">
|
|
||||||
<li
|
|
||||||
class="tab-item c-hand"
|
|
||||||
:class="{'active': selectedTab === 'general'}"
|
|
||||||
@click="selectTab('general')"
|
|
||||||
>
|
|
||||||
<a class="tab-link">{{ $t('word.general') }}</a>
|
|
||||||
</li>
|
|
||||||
<li
|
|
||||||
class="tab-item c-hand"
|
|
||||||
:class="{'active': selectedTab === 'ssl'}"
|
|
||||||
@click="selectTab('ssl')"
|
|
||||||
>
|
|
||||||
<a class="tab-link">{{ $t('word.ssl') }}</a>
|
|
||||||
</li>
|
|
||||||
<li
|
|
||||||
class="tab-item"
|
|
||||||
:class="{'active': selectedTab === 'ssh'}"
|
|
||||||
@click="selectTab('ssh')"
|
|
||||||
>
|
|
||||||
<a class="c-hand">{{ $t('word.sshTunnel') }}</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div v-if="selectedTab === 'general'" class="panel-body py-0">
|
|
||||||
<div class="container">
|
|
||||||
<form class="form-horizontal">
|
|
||||||
<fieldset class="m-0" :disabled="isTesting">
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-4 col-sm-12">
|
|
||||||
<label class="form-label">{{ $t('word.connectionName') }}</label>
|
|
||||||
</div>
|
|
||||||
<div class="col-8 col-sm-12">
|
|
||||||
<input
|
|
||||||
ref="firstInput"
|
|
||||||
v-model="connection.name"
|
|
||||||
class="form-input"
|
|
||||||
type="text"
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-4 col-sm-12">
|
|
||||||
<label class="form-label">{{ $t('word.client') }}</label>
|
|
||||||
</div>
|
|
||||||
<div class="col-8 col-sm-12">
|
|
||||||
<select
|
|
||||||
v-model="connection.client"
|
|
||||||
class="form-select"
|
|
||||||
@change="setDefaults"
|
|
||||||
>
|
|
||||||
<option value="mysql">
|
|
||||||
MySQL
|
|
||||||
</option>
|
|
||||||
<option value="maria">
|
|
||||||
MariaDB
|
|
||||||
</option>
|
|
||||||
<option value="pg">
|
|
||||||
PostgreSQL
|
|
||||||
</option>
|
|
||||||
<!-- <option value="mssql">
|
|
||||||
Microsoft SQL
|
|
||||||
</option>
|
|
||||||
<option value="oracledb">
|
|
||||||
Oracle DB
|
|
||||||
</option> -->
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-4 col-sm-12">
|
|
||||||
<label class="form-label">{{ $t('word.hostName') }}/IP</label>
|
|
||||||
</div>
|
|
||||||
<div class="col-8 col-sm-12">
|
|
||||||
<input
|
|
||||||
v-model="connection.host"
|
|
||||||
class="form-input"
|
|
||||||
type="text"
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-4 col-sm-12">
|
|
||||||
<label class="form-label">{{ $t('word.port') }}</label>
|
|
||||||
</div>
|
|
||||||
<div class="col-8 col-sm-12">
|
|
||||||
<input
|
|
||||||
v-model="connection.port"
|
|
||||||
class="form-input"
|
|
||||||
type="number"
|
|
||||||
min="1"
|
|
||||||
max="65535"
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div v-if="customizations.database" class="form-group">
|
|
||||||
<div class="col-4 col-sm-12">
|
|
||||||
<label class="form-label">{{ $t('word.database') }}</label>
|
|
||||||
</div>
|
|
||||||
<div class="col-8 col-sm-12">
|
|
||||||
<input
|
|
||||||
v-model="connection.database"
|
|
||||||
class="form-input"
|
|
||||||
type="text"
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-4 col-sm-12">
|
|
||||||
<label class="form-label">{{ $t('word.user') }}</label>
|
|
||||||
</div>
|
|
||||||
<div class="col-8 col-sm-12">
|
|
||||||
<input
|
|
||||||
v-model="connection.user"
|
|
||||||
class="form-input"
|
|
||||||
type="text"
|
|
||||||
:disabled="connection.ask"
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-4 col-sm-12">
|
|
||||||
<label class="form-label">{{ $t('word.password') }}</label>
|
|
||||||
</div>
|
|
||||||
<div class="col-8 col-sm-12">
|
|
||||||
<input
|
|
||||||
v-model="connection.password"
|
|
||||||
class="form-input"
|
|
||||||
type="password"
|
|
||||||
:disabled="connection.ask"
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-4 col-sm-12" />
|
|
||||||
<div class="col-8 col-sm-12">
|
|
||||||
<label class="form-checkbox form-inline">
|
|
||||||
<input v-model="connection.ask" type="checkbox"><i class="form-icon" /> {{ $t('message.askCredentials') }}
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</fieldset>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
<BaseToast
|
|
||||||
class="mb-2"
|
|
||||||
:message="toast.message"
|
|
||||||
:status="toast.status"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div v-if="selectedTab === 'ssl'" class="panel-body py-0">
|
|
||||||
<div class="container">
|
|
||||||
<form class="form-horizontal">
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-4 col-sm-12">
|
|
||||||
<label class="form-label">
|
|
||||||
{{ $t('message.enableSsl') }}
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
<div class="col-8 col-sm-12">
|
|
||||||
<label class="form-switch d-inline-block" @click.prevent="toggleSsl">
|
|
||||||
<input type="checkbox" :checked="connection.ssl">
|
|
||||||
<i class="form-icon" />
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<fieldset class="m-0" :disabled="isTesting || !connection.ssl">
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-4 col-sm-12">
|
|
||||||
<label class="form-label">{{ $t('word.privateKey') }}</label>
|
|
||||||
</div>
|
|
||||||
<div class="col-8 col-sm-12">
|
|
||||||
<BaseUploadInput
|
|
||||||
:value="connection.key"
|
|
||||||
:message="$t('word.browse')"
|
|
||||||
@clear="pathClear('key')"
|
|
||||||
@change="pathSelection($event, 'key')"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-4 col-sm-12">
|
|
||||||
<label class="form-label">{{ $t('word.certificate') }}</label>
|
|
||||||
</div>
|
|
||||||
<div class="col-8 col-sm-12">
|
|
||||||
<BaseUploadInput
|
|
||||||
:value="connection.cert"
|
|
||||||
:message="$t('word.browse')"
|
|
||||||
@clear="pathClear('cert')"
|
|
||||||
@change="pathSelection($event, 'cert')"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-4 col-sm-12">
|
|
||||||
<label class="form-label">{{ $t('word.caCertificate') }}</label>
|
|
||||||
</div>
|
|
||||||
<div class="col-8 col-sm-12">
|
|
||||||
<BaseUploadInput
|
|
||||||
:value="connection.ca"
|
|
||||||
:message="$t('word.browse')"
|
|
||||||
@clear="pathClear('ca')"
|
|
||||||
@change="pathSelection($event, 'ca')"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-4 col-sm-12">
|
|
||||||
<label class="form-label">{{ $t('word.ciphers') }}</label>
|
|
||||||
</div>
|
|
||||||
<div class="col-8 col-sm-12">
|
|
||||||
<input
|
|
||||||
ref="firstInput"
|
|
||||||
v-model="connection.ciphers"
|
|
||||||
class="form-input"
|
|
||||||
type="text"
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</fieldset>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
<BaseToast
|
|
||||||
class="mb-2"
|
|
||||||
:message="toast.message"
|
|
||||||
:status="toast.status"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div v-if="selectedTab === 'ssh'" class="panel-body py-0">
|
|
||||||
<div class="container">
|
|
||||||
<form class="form-horizontal">
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-4 col-sm-12">
|
|
||||||
<label class="form-label">
|
|
||||||
{{ $t('message.enableSsh') }}
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
<div class="col-8 col-sm-12">
|
|
||||||
<label class="form-switch d-inline-block" @click.prevent="toggleSsh">
|
|
||||||
<input type="checkbox" :checked="connection.ssh">
|
|
||||||
<i class="form-icon" />
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<fieldset class="m-0" :disabled="isTesting || !connection.ssh">
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-4 col-sm-12">
|
|
||||||
<label class="form-label">{{ $t('word.hostName') }}/IP</label>
|
|
||||||
</div>
|
|
||||||
<div class="col-8 col-sm-12">
|
|
||||||
<input
|
|
||||||
v-model="connection.sshHost"
|
|
||||||
class="form-input"
|
|
||||||
type="text"
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-4 col-sm-12">
|
|
||||||
<label class="form-label">{{ $t('word.user') }}</label>
|
|
||||||
</div>
|
|
||||||
<div class="col-8 col-sm-12">
|
|
||||||
<input
|
|
||||||
v-model="connection.sshUser"
|
|
||||||
class="form-input"
|
|
||||||
type="text"
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-4 col-sm-12">
|
|
||||||
<label class="form-label">{{ $t('word.password') }}</label>
|
|
||||||
</div>
|
|
||||||
<div class="col-8 col-sm-12">
|
|
||||||
<input
|
|
||||||
v-model="connection.sshPass"
|
|
||||||
class="form-input"
|
|
||||||
type="password"
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-4 col-sm-12">
|
|
||||||
<label class="form-label">{{ $t('word.port') }}</label>
|
|
||||||
</div>
|
|
||||||
<div class="col-8 col-sm-12">
|
|
||||||
<input
|
|
||||||
v-model="connection.sshPort"
|
|
||||||
class="form-input"
|
|
||||||
type="number"
|
|
||||||
min="1"
|
|
||||||
max="65535"
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-4 col-sm-12">
|
|
||||||
<label class="form-label">{{ $t('word.privateKey') }}</label>
|
|
||||||
</div>
|
|
||||||
<div class="col-8 col-sm-12">
|
|
||||||
<BaseUploadInput
|
|
||||||
:value="connection.sshKey"
|
|
||||||
:message="$t('word.browse')"
|
|
||||||
@clear="pathClear('sshKey')"
|
|
||||||
@change="pathSelection($event, 'sshKey')"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</fieldset>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
<BaseToast
|
|
||||||
class="mb-2"
|
|
||||||
:message="toast.message"
|
|
||||||
:status="toast.status"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<button
|
|
||||||
class="btn btn-gray mr-2"
|
|
||||||
:class="{'loading': isTesting}"
|
|
||||||
@click="startTest"
|
|
||||||
>
|
|
||||||
{{ $t('message.testConnection') }}
|
|
||||||
</button>
|
|
||||||
<button class="btn btn-primary mr-2" @click="saveNewConnection">
|
|
||||||
{{ $t('word.save') }}
|
|
||||||
</button>
|
|
||||||
<button class="btn btn-link" @click="closeModal">
|
|
||||||
{{ $t('word.close') }}
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<ModalAskCredentials
|
|
||||||
v-if="isAsking"
|
|
||||||
@close-asking="closeAsking"
|
|
||||||
@credentials="continueTest"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import { mapActions } from 'vuex';
|
|
||||||
import customizations from 'common/customizations';
|
|
||||||
import Connection from '@/ipc-api/Connection';
|
|
||||||
import { uidGen } from 'common/libs/uidGen';
|
|
||||||
import ModalAskCredentials from '@/components/ModalAskCredentials';
|
|
||||||
import BaseToast from '@/components/BaseToast';
|
|
||||||
import BaseUploadInput from '@/components/BaseUploadInput';
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: 'ModalNewConnection',
|
|
||||||
components: {
|
|
||||||
ModalAskCredentials,
|
|
||||||
BaseToast,
|
|
||||||
BaseUploadInput
|
|
||||||
},
|
|
||||||
data () {
|
|
||||||
return {
|
|
||||||
connection: {
|
|
||||||
name: '',
|
|
||||||
client: 'mysql',
|
|
||||||
host: '127.0.0.1',
|
|
||||||
database: null,
|
|
||||||
port: null,
|
|
||||||
user: null,
|
|
||||||
password: '',
|
|
||||||
ask: false,
|
|
||||||
uid: uidGen('C'),
|
|
||||||
ssl: false,
|
|
||||||
cert: '',
|
|
||||||
key: '',
|
|
||||||
ca: '',
|
|
||||||
ciphers: '',
|
|
||||||
ssh: false,
|
|
||||||
sshHost: '',
|
|
||||||
sshUser: '',
|
|
||||||
sshPass: '',
|
|
||||||
sshKey: '',
|
|
||||||
sshPort: 22
|
|
||||||
},
|
|
||||||
toast: {
|
|
||||||
status: '',
|
|
||||||
message: ''
|
|
||||||
},
|
|
||||||
isTesting: false,
|
|
||||||
isAsking: false,
|
|
||||||
selectedTab: 'general'
|
|
||||||
};
|
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
customizations () {
|
|
||||||
return customizations[this.connection.client];
|
|
||||||
}
|
|
||||||
},
|
|
||||||
created () {
|
|
||||||
this.setDefaults();
|
|
||||||
window.addEventListener('keydown', this.onKey);
|
|
||||||
|
|
||||||
setTimeout(() => {
|
|
||||||
this.$refs.firstInput.focus();
|
|
||||||
}, 20);
|
|
||||||
},
|
|
||||||
beforeDestroy () {
|
|
||||||
window.removeEventListener('keydown', this.onKey);
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
...mapActions({
|
|
||||||
closeModal: 'application/hideNewConnModal',
|
|
||||||
addConnection: 'connections/addConnection'
|
|
||||||
}),
|
|
||||||
setDefaults () {
|
|
||||||
this.connection.user = this.customizations.defaultUser;
|
|
||||||
this.connection.port = this.customizations.defaultPort;
|
|
||||||
this.connection.database = this.customizations.defaultDatabase;
|
|
||||||
},
|
|
||||||
async startTest () {
|
|
||||||
this.isTesting = true;
|
|
||||||
this.toast = {
|
|
||||||
status: '',
|
|
||||||
message: ''
|
|
||||||
};
|
|
||||||
|
|
||||||
if (this.connection.ask)
|
|
||||||
this.isAsking = true;
|
|
||||||
else {
|
|
||||||
try {
|
|
||||||
const res = await Connection.makeTest(this.connection);
|
|
||||||
console.log(res.response);
|
|
||||||
if (res.status === 'error')
|
|
||||||
this.toast = { status: 'error', message: res.response.message };
|
|
||||||
else
|
|
||||||
this.toast = { status: 'success', message: this.$t('message.connectionSuccessfullyMade') };
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
this.toast = { status: 'error', message: err.stack };
|
|
||||||
}
|
|
||||||
|
|
||||||
this.isTesting = false;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
async continueTest (credentials) { // if "Ask for credentials" is true
|
|
||||||
this.isAsking = false;
|
|
||||||
const params = Object.assign({}, this.connection, credentials);
|
|
||||||
|
|
||||||
try {
|
|
||||||
const res = await Connection.makeTest(params);
|
|
||||||
if (res.status === 'error')
|
|
||||||
this.toast = { status: 'error', message: res.response.message };
|
|
||||||
else
|
|
||||||
this.toast = { status: 'success', message: this.$t('message.connectionSuccessfullyMade') };
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
this.toast = { status: 'error', message: err.stack };
|
|
||||||
}
|
|
||||||
|
|
||||||
this.isTesting = false;
|
|
||||||
},
|
|
||||||
saveNewConnection () {
|
|
||||||
this.addConnection(this.connection);
|
|
||||||
this.closeModal();
|
|
||||||
},
|
|
||||||
closeAsking () {
|
|
||||||
this.isAsking = false;
|
|
||||||
this.isTesting = false;
|
|
||||||
},
|
|
||||||
onKey (e) {
|
|
||||||
e.stopPropagation();
|
|
||||||
if (e.key === 'Escape')
|
|
||||||
this.closeModal();
|
|
||||||
},
|
|
||||||
selectTab (tab) {
|
|
||||||
this.selectedTab = tab;
|
|
||||||
},
|
|
||||||
toggleSsl () {
|
|
||||||
this.connection.ssl = !this.connection.ssl;
|
|
||||||
},
|
|
||||||
toggleSsh () {
|
|
||||||
this.connection.ssh = !this.connection.ssh;
|
|
||||||
},
|
|
||||||
pathSelection (event, name) {
|
|
||||||
const { files } = event.target;
|
|
||||||
if (!files.length) return;
|
|
||||||
|
|
||||||
this.connection[name] = files[0].path;
|
|
||||||
},
|
|
||||||
pathClear (name) {
|
|
||||||
this.connection[name] = '';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
.modal-container {
|
|
||||||
position: absolute;
|
|
||||||
max-width: 450px;
|
|
||||||
top: 17.5vh;
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -1,82 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="columns">
|
|
||||||
<div class="column col-12 empty">
|
|
||||||
<div class="empty-icon">
|
|
||||||
<i class="mdi mdi-48px mdi-power-plug-off" />
|
|
||||||
</div>
|
|
||||||
<p class="empty-title h5">
|
|
||||||
{{ isConnecting ? $t('word.connecting') : $t('word.disconnected') }}
|
|
||||||
</p>
|
|
||||||
<div class="empty-action">
|
|
||||||
<button
|
|
||||||
class="btn btn-success"
|
|
||||||
:class="{'loading': isConnecting}"
|
|
||||||
@click="startConnection"
|
|
||||||
>
|
|
||||||
{{ $t('word.connect') }}
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<ModalAskCredentials
|
|
||||||
v-if="isAsking"
|
|
||||||
@close-asking="closeAsking"
|
|
||||||
@credentials="continueTest"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import { mapActions } from 'vuex';
|
|
||||||
import ModalAskCredentials from '@/components/ModalAskCredentials';
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: 'WorkspaceConnectPanel',
|
|
||||||
components: {
|
|
||||||
ModalAskCredentials
|
|
||||||
},
|
|
||||||
props: {
|
|
||||||
connection: Object
|
|
||||||
},
|
|
||||||
data () {
|
|
||||||
return {
|
|
||||||
isConnecting: false,
|
|
||||||
isAsking: false
|
|
||||||
};
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
...mapActions({
|
|
||||||
connectWorkspace: 'workspaces/connectWorkspace'
|
|
||||||
}),
|
|
||||||
async startConnection () {
|
|
||||||
this.isConnecting = true;
|
|
||||||
|
|
||||||
if (this.connection.ask)
|
|
||||||
this.isAsking = true;
|
|
||||||
else {
|
|
||||||
await this.connectWorkspace(this.connection);
|
|
||||||
this.isConnecting = false;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
async continueTest (credentials) { // if "Ask for credentials" is true
|
|
||||||
this.isAsking = false;
|
|
||||||
const params = Object.assign({}, this.connection, credentials);
|
|
||||||
await this.connectWorkspace(params);
|
|
||||||
this.isConnecting = false;
|
|
||||||
},
|
|
||||||
closeAsking () {
|
|
||||||
this.isAsking = false;
|
|
||||||
this.isConnecting = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
.empty {
|
|
||||||
height: 100%;
|
|
||||||
border-radius: 0;
|
|
||||||
background: transparent;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
</style>
|
|
Reference in New Issue
Block a user