BindKeypair.vue 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <template>
  2. <base-dialog @cancel="cancelDialog">
  3. <div slot="header">{{$t('compute.text_361')}}</div>
  4. <div slot="body">
  5. <dialog-selected-tips :name="$t('dictionary.server')" :count="params.data.length" :action="$t('compute.text_361')" />
  6. <dialog-table :data="params.data" :columns="params.columns.slice(0, 3)" />
  7. <a-form :form="form.fc" hideRequiredMark>
  8. <a-form-item :label="$t('compute.text_1182')" v-bind="formItemLayout">
  9. <base-select
  10. v-decorator="decorators.keypair"
  11. resource="keypairs"
  12. :select-props="{ allowClear: true, placeholder: $t('compute.text_1183') }" />
  13. </a-form-item>
  14. <a-form-item :label="$t('compute.text_494')" v-bind="formItemLayout" :extra="$t('compute.text_1184')">
  15. <a-switch :checkedChildren="$t('compute.text_115')" :unCheckedChildren="$t('compute.text_116')" v-decorator="decorators.auto_start" :disabled="isSomeRunning" />
  16. </a-form-item>
  17. </a-form>
  18. </div>
  19. <div slot="footer">
  20. <a-button type="primary" @click="handleConfirm" :loading="loading">{{ $t('dialog.ok') }}</a-button>
  21. <a-button @click="cancelDialog">{{ $t('dialog.cancel') }}</a-button>
  22. </div>
  23. </base-dialog>
  24. </template>
  25. <script>
  26. import DialogMixin from '@/mixins/dialog'
  27. import WindowsMixin from '@/mixins/windows'
  28. export default {
  29. name: 'VmBindKeypairDialog',
  30. mixins: [DialogMixin, WindowsMixin],
  31. data () {
  32. const autoStart = this.params.data.some(val => val.status === 'running')
  33. return {
  34. loading: false,
  35. form: {
  36. fc: this.$form.createForm(this),
  37. },
  38. decorators: {
  39. keypair: [
  40. 'keypair',
  41. {
  42. rules: [
  43. { required: true, message: this.$t('compute.text_203'), trigger: 'blur' },
  44. ],
  45. },
  46. ],
  47. auto_start: [
  48. 'auto_start',
  49. {
  50. initialValue: autoStart,
  51. valuePropName: 'checked',
  52. },
  53. ],
  54. },
  55. formItemLayout: {
  56. wrapperCol: {
  57. span: 21,
  58. },
  59. labelCol: {
  60. span: 3,
  61. },
  62. },
  63. }
  64. },
  65. computed: {
  66. isSomeRunning () {
  67. return this.params.data.some(val => val.status === 'running')
  68. },
  69. },
  70. methods: {
  71. async handleConfirm () {
  72. this.loading = true
  73. try {
  74. const values = await this.form.fc.validateFields()
  75. const ids = this.params.data.map(item => item.id)
  76. await this.params.onManager('batchPerformAction', {
  77. id: ids,
  78. steadyStatus: ['running', 'ready'],
  79. managerArgs: {
  80. action: 'deploy',
  81. data: values,
  82. },
  83. })
  84. this.$bus.$emit('VMInstanceListSingleUpdate', [this.params.data[0].id])
  85. this.cancelDialog()
  86. } finally {
  87. this.loading = false
  88. }
  89. },
  90. },
  91. }
  92. </script>