index.vue 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. <template>
  2. <div>
  3. <page-header :title="$t('network.text_769')" />
  4. <page-body needMarginBottom>
  5. <a-form
  6. class="mt-3"
  7. :form="form.fc">
  8. <a-form-item v-bind="formItemLayout" :label="$t('network.text_205', [$t('dictionary.domain')])" v-if="$store.getters.isAdminMode">
  9. <domain-select v-decorator="decorators.project_domain" @change="handleDomainChange" />
  10. </a-form-item>
  11. <a-form-item :label="$t('network.text_198')" v-bind="formItemLayout">
  12. <a-radio-group v-decorator="decorators.platform">
  13. <a-radio-button value="Google">Google</a-radio-button>
  14. </a-radio-group>
  15. </a-form-item>
  16. <a-form-item :label="$t('network.text_21')" v-bind="formItemLayout">
  17. <a-input v-decorator="decorators.name" :placeholder="$t('network.text_684')" />
  18. </a-form-item>
  19. <a-form-item :label="$t('common.description')" v-bind="formItemLayout">
  20. <a-textarea :auto-size="{ minRows: 1, maxRows: 3 }" v-decorator="decorators.description" :placeholder="$t('common_367')" />
  21. </a-form-item>
  22. <a-form-item :label="$t('compute.text_15')" required v-bind="formItemLayout">
  23. <base-select
  24. class="w-50"
  25. v-decorator="decorators.cloudprovider"
  26. resource="cloudproviders"
  27. :params="cloudproviderParams"
  28. :isDefaultSelect="true"
  29. :needParams="true"
  30. :showSync="true"
  31. :select-props="{ placeholder: $t('compute.text_149') }"
  32. :resList.sync="cloudproviderData" />
  33. </a-form-item>
  34. </a-form>
  35. </page-body>
  36. <page-footer>
  37. <div slot="right">
  38. <a-button class="ml-3 float-right" @click="() => $router.back()">{{$t('common.cancel')}}</a-button>
  39. <a-button class="float-right" type="primary" @click="handleConfirm" :loading="loading">{{ $t('common_258') }}</a-button>
  40. </div>
  41. </page-footer>
  42. </div>
  43. </template>
  44. <script>
  45. import { mapGetters } from 'vuex'
  46. import DomainSelect from '@/sections/DomainSelect'
  47. export default {
  48. name: 'GlobalVPCCreate',
  49. components: {
  50. DomainSelect,
  51. },
  52. data () {
  53. return {
  54. loading: false,
  55. isGoogle: false,
  56. isAws: false,
  57. form: {
  58. fc: this.$form.createForm(this, {
  59. onValuesChange: (props, values) => {
  60. if (values.cloudregion) {
  61. this.cloudregion = values.cloudregion
  62. }
  63. },
  64. }),
  65. },
  66. decorators: {
  67. name: [
  68. 'name',
  69. {
  70. validateFirst: true,
  71. validateTrigger: ['blur'],
  72. rules: [
  73. { required: true, message: this.$t('network.text_770') },
  74. { validator: this.$validate('broadName') },
  75. ],
  76. },
  77. ],
  78. platform: [
  79. 'platform',
  80. {
  81. initialValue: 'Google',
  82. rules: [{ required: true }],
  83. },
  84. ],
  85. description: ['description'],
  86. cloudprovider: [
  87. 'cloudprovider',
  88. {
  89. rules: [
  90. { required: true, message: this.$t('network.text_689') },
  91. ],
  92. },
  93. ],
  94. project_domain: [
  95. 'project_domain',
  96. {
  97. initialValue: this.$store.getters.userInfo.projectDomainId,
  98. },
  99. ],
  100. },
  101. formItemLayout: {
  102. wrapperCol: {
  103. md: { span: 17 },
  104. xl: { span: 19 },
  105. xxl: { span: 21 },
  106. },
  107. labelCol: {
  108. md: { span: 7 },
  109. xl: { span: 5 },
  110. xxl: { span: 3 },
  111. },
  112. },
  113. project_domain: this.$store.getters.userInfo.projectDomainId,
  114. cloudproviderData: [],
  115. cloudregion: '',
  116. regionList: {},
  117. }
  118. },
  119. computed: {
  120. ...mapGetters(['isAdminMode', 'scope', 'userInfo']),
  121. cloudproviderParams () {
  122. const params = {
  123. limit: 0,
  124. enabled: 1,
  125. details: true,
  126. scope: this.scope,
  127. read_only: false,
  128. provider: 'Google',
  129. }
  130. if (this.isAdminMode) {
  131. params.admin = true
  132. params.project_domain = this.project_domain
  133. delete params.scope
  134. }
  135. return params
  136. },
  137. },
  138. provide () {
  139. return {
  140. form: this.form,
  141. }
  142. },
  143. methods: {
  144. doCreate (data) {
  145. return new this.$Manager('globalvpcs').create({ data })
  146. },
  147. handleDomainChange (val) {
  148. this.project_domain = val
  149. },
  150. async handleConfirm () {
  151. this.loading = true
  152. try {
  153. const values = await this.form.fc.validateFields()
  154. const params = {
  155. name: values.name,
  156. description: values.description,
  157. manager: values.cloudprovider,
  158. platform: values.platform, // 未起作用
  159. }
  160. if (values.project_domain) {
  161. params.project_domain = values.project_domain
  162. }
  163. await this.doCreate(params)
  164. this.loading = false
  165. this.$message.success(this.$t('k8s.text_184'))
  166. this.$router.push('/globalvpc')
  167. } catch (error) {
  168. this.loading = false
  169. }
  170. },
  171. },
  172. }
  173. </script>