Terminal.vue 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <template>
  2. <div>
  3. <a-form-model :model="form" layout="inline">
  4. <a-form-model-item :label="$t('k8s.text_1')">
  5. <a-select style="min-width: 200px;" v-model="form.activeContainer" @change="fetchUrl">
  6. <a-select-option v-for="item in containers" :value="item.name" :key="item.name">{{ item.name }}</a-select-option>
  7. </a-select>
  8. </a-form-model-item>
  9. </a-form-model>
  10. <xterm :connectParams="connectParams" />
  11. </div>
  12. </template>
  13. <script>
  14. export default {
  15. name: 'K8SPodTerminal',
  16. props: {
  17. data: {
  18. type: Object,
  19. required: true,
  20. },
  21. },
  22. data () {
  23. return {
  24. containers: [],
  25. form: {
  26. activeContainer: '',
  27. },
  28. connectParams: '',
  29. }
  30. },
  31. created () {
  32. this.manager = new this.$Manager('pods', 'v1')
  33. this.fetchData()
  34. },
  35. methods: {
  36. async fetchData () {
  37. const { data: { containers } } = await this.manager.get({
  38. id: this.data.id,
  39. params: {
  40. cluster: this.data.clusterID,
  41. namespace: this.data.namespace,
  42. },
  43. })
  44. this.containers = containers
  45. this.form.activeContainer = containers[0].name
  46. this.fetchUrl(this.form.activeContainer)
  47. },
  48. async fetchUrl (container) {
  49. const params = {
  50. cluster: this.data.cluster,
  51. namespace: this.data.namespace,
  52. name: this.data.name,
  53. container,
  54. }
  55. const { data } = await new this.$Manager('webconsole', 'v1').objectRpc({
  56. methodname: 'DoK8sShellConnect',
  57. objId: this.data.name,
  58. params,
  59. })
  60. this.connectParams = data.connect_params
  61. },
  62. },
  63. }
  64. </script>