diff --git a/ui/public/locales/en.json b/ui/public/locales/en.json index 17532b36a47a..cb7a49e91b90 100644 --- a/ui/public/locales/en.json +++ b/ui/public/locales/en.json @@ -502,6 +502,7 @@ "label.copied.clipboard": "Copied to clipboard", "label.copy": "Copy", "label.copy.clipboard": "Copy to clipboard", +"label.copy.consoleurl": "Copy console URL to clipboard", "label.copyid": "Copy ID", "label.core": "Core", "label.core.zone.type": "Core zone type", diff --git a/ui/src/components/view/ActionButton.vue b/ui/src/components/view/ActionButton.vue index 95554f238202..5f5761cbe1c3 100644 --- a/ui/src/components/view/ActionButton.vue +++ b/ui/src/components/view/ActionButton.vue @@ -21,7 +21,26 @@ - + + + + + {{ $t('label.view.console') }} - + + + + + diff --git a/ui/src/components/widgets/Console.vue b/ui/src/components/widgets/Console.vue index 03a37a2e03ad..d73753c142ee 100644 --- a/ui/src/components/widgets/Console.vue +++ b/ui/src/components/widgets/Console.vue @@ -20,7 +20,8 @@ v-if="['vm', 'systemvm', 'router', 'ilbvm'].includes($route.meta.name) && 'listVirtualMachines' in $store.getters.apis && 'createConsoleEndpoint' in $store.getters.apis" @click="consoleUrl"> - + + @@ -39,7 +40,8 @@ export default { size: { type: String, default: 'small' - } + }, + copyUrlToClipboard: Boolean }, data () { return { @@ -53,7 +55,21 @@ export default { api('createConsoleEndpoint', params).then(json => { this.url = (json && json.createconsoleendpointresponse) ? json.createconsoleendpointresponse.consoleendpoint.url : '#/exception/404' if (json.createconsoleendpointresponse.consoleendpoint.success) { - window.open(this.url, '_blank') + if (this.copyUrlToClipboard) { + this.$message.success({ + content: this.$t('label.copied.clipboard') + }) + const hiddenElement = document.createElement('textarea') + hiddenElement.value = this.url + document.body.appendChild(hiddenElement) + hiddenElement.focus() + hiddenElement.select() + + document.execCommand('copy') + document.body.removeChild(hiddenElement) + } else { + window.open(this.url, '_blank') + } } else { this.$notification.error({ message: this.$t('error.execute.api.failed') + ' ' + 'createConsoleEndpoint',