Create.vue 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <template>
  2. <base-dialog @cancel="cancelDialog">
  3. <div slot="header">{{params.title}}</div>
  4. <a-form slot="body" :form="form.fc" class="mt-3" v-bind="formItemLayout">
  5. <a-form-item v-bind="formItemLayout" :label="$t('network.text_205', [$t('dictionary.domain')])" v-if="$store.getters.isAdminMode">
  6. <domain-select v-decorator="decorators.project_domain" />
  7. </a-form-item>
  8. <a-form-item :label="$t('network.text_21')">
  9. <a-input v-decorator="decorators.name" :placeholder="$t('network.text_116')" />
  10. </a-form-item>
  11. </a-form>
  12. <div slot="footer">
  13. <a-button type="primary" @click="handleConfirm" :loading="loading">{{ $t('dialog.ok') }}</a-button>
  14. <a-button @click="cancelDialog">{{ $t('dialog.cancel') }}</a-button>
  15. </div>
  16. </base-dialog>
  17. </template>
  18. <script>
  19. import { CreateServerForm } from '@Compute/constants'
  20. import DialogMixin from '@/mixins/dialog'
  21. import WindowsMixin from '@/mixins/windows'
  22. import validateForm from '@/utils/validate'
  23. import DomainSelect from '@/sections/DomainSelect'
  24. export default {
  25. name: 'GlobalVpcCreateDialog',
  26. components: {
  27. DomainSelect,
  28. },
  29. mixins: [DialogMixin, WindowsMixin],
  30. data () {
  31. return {
  32. loading: false,
  33. form: {
  34. fc: this.$form.createForm(this),
  35. },
  36. formItemLayout: {
  37. wrapperCol: { span: CreateServerForm.wrapperCol },
  38. labelCol: { span: CreateServerForm.labelCol },
  39. },
  40. }
  41. },
  42. computed: {
  43. decorators () {
  44. const { initialValues = {} } = this.params
  45. const decorators = {
  46. name: [
  47. 'name',
  48. {
  49. initialValue: initialValues.name,
  50. validateFirst: true,
  51. rules: [
  52. { required: true, message: this.$t('network.text_116') },
  53. { validator: validateForm('resourceName') },
  54. ],
  55. },
  56. ],
  57. project_domain: [
  58. 'project_domain',
  59. {
  60. initialValue: this.$store.getters.userInfo.projectDomainId,
  61. },
  62. ],
  63. }
  64. return decorators
  65. },
  66. },
  67. methods: {
  68. validateForm () {
  69. return new Promise((resolve, reject) => {
  70. this.form.fc.validateFields((err, values) => {
  71. if (!err) {
  72. resolve(values)
  73. } else {
  74. reject(err)
  75. }
  76. })
  77. })
  78. },
  79. async handleConfirm () {
  80. this.loading = true
  81. try {
  82. const values = await this.validateForm()
  83. await this.params.onManager('create', {
  84. managerArgs: {
  85. data: values,
  86. },
  87. })
  88. this.loading = false
  89. this.cancelDialog()
  90. } catch (error) {
  91. this.loading = false
  92. }
  93. },
  94. },
  95. }
  96. </script>