DetachNetwork.vue 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <template>
  2. <base-dialog @cancel="cancelDialog">
  3. <div slot="header">{{action}}</div>
  4. <div slot="body">
  5. <dialog-selected-tips :name="$t('compute.nic')" :count="params.data.length" :action="action" />
  6. <dialog-table :data="params.data" :columns="columns" />
  7. <a-form-item>
  8. <a-checkbox v-model="syncConfigImmediately" :disabled="!isVmPoweroff">
  9. {{ $t('compute.nics.sync_config_immediately') }}
  10. </a-checkbox>
  11. </a-form-item>
  12. <a-form-item>
  13. <a-checkbox v-model="forceRemove" :disabled="!isVmPoweroff">
  14. {{ $t('compute.nics.force_remove') }}
  15. </a-checkbox>
  16. </a-form-item>
  17. </div>
  18. <div slot="footer">
  19. <a-button type="primary" @click="handleConfirm" :loading="loading">{{ $t('dialog.ok') }}</a-button>
  20. <a-button @click="cancelDialog">{{ $t('dialog.cancel') }}</a-button>
  21. </div>
  22. </base-dialog>
  23. </template>
  24. <script>
  25. import DialogMixin from '@/mixins/dialog'
  26. import WindowsMixin from '@/mixins/windows'
  27. import expectStatus from '@/constants/expectStatus'
  28. export default {
  29. name: 'VmDetachNetworkDialog',
  30. mixins: [DialogMixin, WindowsMixin],
  31. data () {
  32. return {
  33. loading: false,
  34. action: this.$t('compute.detach_network_title'),
  35. syncConfigImmediately: true,
  36. forceRemove: false,
  37. }
  38. },
  39. computed: {
  40. columns () {
  41. const showFields = ['ifname', 'ip_addr', 'mac_addr']
  42. return this.params.columns.filter((item) => { return showFields.includes(item.field) })
  43. },
  44. isVmPoweroff () {
  45. return this.params.server.power_states === 'off'
  46. },
  47. },
  48. methods: {
  49. async doDetachSubmit () {
  50. const manager = new this.$Manager('servers')
  51. const params = {
  52. disable_sync_config: !this.syncConfigImmediately,
  53. force: this.forceRemove,
  54. }
  55. if (this.params.data[0].ip_addr) {
  56. params.ip_addr = this.params.data[0].ip_addr
  57. }
  58. if (this.params.data[0].ip6_addr) {
  59. params.ip6_addr = this.params.data[0].ip6_addr
  60. }
  61. return manager.performAction({
  62. id: this.params.data[0].guest_id,
  63. action: 'detachnetwork',
  64. data: params,
  65. })
  66. },
  67. async handleConfirm () {
  68. this.loading = true
  69. try {
  70. await this.doDetachSubmit()
  71. this.loading = false
  72. this.params.refresh()
  73. this.$bus.$emit('VMInstanceListSingleRefresh', [this.params.data[0].guest_id, Object.values(expectStatus.server).flat()])
  74. this.cancelDialog()
  75. } catch (error) {
  76. this.loading = false
  77. }
  78. },
  79. },
  80. }
  81. </script>