NetworkSplitDialog.vue 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <template>
  2. <base-dialog @cancel="cancelDialog">
  3. <div slot="header">{{$t('network.text_632')}}</div>
  4. <div slot="body">
  5. <dialog-selected-tips :name="$t('dictionary.network')" :count="params.data.length" :action="$t('network.text_632')" />
  6. <dialog-table :data="params.data" :columns="params.columns.slice(0, 3)" />
  7. <a-form
  8. :form="form.fc">
  9. <a-form-item :label="$t('network.text_633')" v-bind="formItemLayout">
  10. <a-input v-decorator="decorators.name" :placeholer="$t('network.text_634')" />
  11. </a-form-item>
  12. <a-form-item :label="$t('network.text_635')" v-bind="formItemLayout">
  13. <a-input v-decorator="decorators.split_ip" :placeholer="$t('network.text_636')" />
  14. </a-form-item>
  15. </a-form>
  16. </div>
  17. <div slot="footer">
  18. <a-button type="primary" @click="handleConfirm" :loading="loading">{{ $t('dialog.ok') }}</a-button>
  19. <a-button @click="cancelDialog">{{ $t('dialog.cancel') }}</a-button>
  20. </div>
  21. </base-dialog>
  22. </template>
  23. <script>
  24. import DialogMixin from '@/mixins/dialog'
  25. import WindowsMixin from '@/mixins/windows'
  26. export default {
  27. name: 'NetworkSplitDialog',
  28. mixins: [DialogMixin, WindowsMixin],
  29. data () {
  30. return {
  31. loading: false,
  32. form: {
  33. fc: this.$form.createForm(this),
  34. },
  35. decorators: {
  36. name: [
  37. 'name',
  38. {
  39. rules: [
  40. { required: true, message: this.$t('network.text_637') },
  41. ],
  42. },
  43. ],
  44. split_ip: [
  45. 'split_ip',
  46. {
  47. validateFirst: true,
  48. rules: [
  49. { required: true, message: this.$t('network.text_638') },
  50. { validator: this.$validate('IPv4') },
  51. ],
  52. },
  53. ],
  54. },
  55. formItemLayout: {
  56. wrapperCol: {
  57. span: 20,
  58. },
  59. labelCol: {
  60. span: 4,
  61. },
  62. },
  63. }
  64. },
  65. methods: {
  66. doSplit (data) {
  67. return this.params.onManager('performAction', {
  68. id: this.params.data[0].id,
  69. managerArgs: {
  70. action: 'split',
  71. data,
  72. },
  73. })
  74. },
  75. async handleConfirm () {
  76. this.loading = true
  77. try {
  78. const values = await this.form.fc.validateFields()
  79. if (values.split_ip === this.params.data[0].guest_ip_start || values.split_ip === this.params.data[0].guest_ip_end) {
  80. this.$message.error(this.$t('network.text_639'))
  81. return
  82. }
  83. this.loading = true
  84. await this.doSplit(values)
  85. this.loading = false
  86. this.cancelDialog()
  87. this.params.refresh()
  88. } catch (error) {
  89. this.loading = false
  90. }
  91. },
  92. },
  93. }
  94. </script>