Private.vue 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. <template>
  2. <a-form :form="form.fc" class="mt-3" v-bind="formItemLayout">
  3. <a-form-item :label="$t('network.text_205', [$t('dictionary.project')])" class="mb-0">
  4. <domain-project :fc="form.fc" :decorators="decorators" :domain.sync="domain" :project.sync="project" :labelInValue="false" />
  5. </a-form-item>
  6. <a-form-item :label="$t('network.text_199')" class="mb-0">
  7. <cloudregion-zone
  8. :decorator="decorators"
  9. :cloudregionParams="cloudregionParams"
  10. :zoneParams="zoneParams"
  11. :zone.sync="zoneObj"
  12. filterBrandResource="loadbalancer_engine" />
  13. </a-form-item>
  14. <a-form-item :label="$t('network.text_21')">
  15. <a-input v-decorator="decorators.name" :placeholder="$t('validator.resourceName')" />
  16. </a-form-item>
  17. <a-form-item :label="$t('common.description')">
  18. <a-textarea :auto-size="{ minRows: 1, maxRows: 3 }" v-decorator="decorators.description" :placeholder="$t('common_367')" />
  19. </a-form-item>
  20. <a-form-item :label="$t('cloudenv.text_7')">
  21. <a-row :gutter="9">
  22. <a-col :span="12">
  23. <oc-select
  24. width="100%"
  25. v-decorator="decorators.vpc"
  26. show-status
  27. :status-desc="$t('compute.vpc_status_desc')"
  28. resource="vpcs"
  29. label="VPC"
  30. :formatter="vpcFormatter"
  31. :params="vpcParams"
  32. :sort="(arr) => arr.sort((a, b) => a.network_count > b.network_count ? -1 : 1)"
  33. :placeholder="$t('compute.text_194')" />
  34. </a-col>
  35. <a-col :span="12">
  36. <base-select
  37. v-decorator="decorators.network"
  38. resource="networks"
  39. need-params
  40. filterable
  41. :item.sync="networkObj"
  42. :params="networkParams"
  43. :select-props="{ placeholder: $t('network.text_275') }" />
  44. </a-col>
  45. </a-row>
  46. </a-form-item>
  47. <a-form-item :label="$t('network.text_16')" v-if="isHCSO || isHCS">
  48. <a-radio-group v-decorator="decorators.address_type">
  49. <a-radio-button value="internet">{{$t('network.text_270')}}</a-radio-button>
  50. <a-radio-button value="intranet">{{$t('network.text_271')}}</a-radio-button>
  51. </a-radio-group>
  52. </a-form-item>
  53. <a-form-item :label="$t('network.text_273')" v-if="isHCSO || isHCS">
  54. <a-radio-group v-decorator="decorators.ip">
  55. <a-radio-button value="ipv4">IPv4</a-radio-button>
  56. </a-radio-group>
  57. </a-form-item>
  58. <a-form-item :label="$t('network.text_221')" v-if="(isHCSO || isHCS) && form.fd.address_type === 'internet'">
  59. <base-select
  60. v-decorator="decorators.eip"
  61. resource="eips"
  62. need-params
  63. :params="eipParams"
  64. :showSync="true"
  65. :select-props="{ placeholder: $t('network.text_278') }" />
  66. <div slot="extra">{{$t('system.text_439')}}<help-link href="/eip">{{$t('system.text_440')}}</help-link>
  67. </div>
  68. </a-form-item>
  69. <a-form-item :label="$t('table.title.tag')">
  70. <tag v-decorator="decorators.__meta__" :allowNoValue="false" />
  71. </a-form-item>
  72. </a-form>
  73. </template>
  74. <script>
  75. import * as R from 'ramda'
  76. import CloudregionZone from '@/sections/CloudregionZone'
  77. import lbCreate from './mixin'
  78. import { HYPERVISORS_MAP } from '../../../../../../src/constants'
  79. export default {
  80. name: 'LbOnecloudCreate',
  81. components: {
  82. CloudregionZone,
  83. },
  84. mixins: [lbCreate],
  85. provide () {
  86. return {
  87. form: this.form,
  88. }
  89. },
  90. data () {
  91. return {
  92. zoneObj: {},
  93. hadVpc: false,
  94. }
  95. },
  96. computed: {
  97. eipParams () {
  98. let params = {}
  99. if (this.form.fd.cloudregion && !R.isEmpty(this.scopeParams)) {
  100. const region = R.is(Object, this.form.fd.cloudregion) ? this.form.fd.cloudregion.key : this.form.fd.cloudregion
  101. params = { ...this.scopeParams, usable: true, region: region }
  102. if (this.isAdminMode || this.isDomainMode) {
  103. params.project = this.form.fd.project
  104. }
  105. }
  106. if (!R.isEmpty(this.vpcObj) && this.vpcObj.manager_id) {
  107. params.manager_id = this.vpcObj.manager_id
  108. }
  109. return params
  110. },
  111. isHCSO () {
  112. if (this.zoneObj) {
  113. return this.zoneObj.provider === HYPERVISORS_MAP.hcso.provider
  114. }
  115. return false
  116. },
  117. isHCS () {
  118. if (this.zoneObj) {
  119. return this.zoneObj.provider === HYPERVISORS_MAP.hcs.provider
  120. }
  121. return false
  122. },
  123. },
  124. methods: {
  125. async submit () {
  126. const { manager_id } = this.vpcObj
  127. try {
  128. const values = await this.form.fc.validateFields()
  129. const data = {
  130. manager: manager_id,
  131. name: values.name.trim(),
  132. description: values.description,
  133. project: values.project,
  134. network: values.network,
  135. __meta__: values.__meta__,
  136. }
  137. if (this.isHCSO || this.isHCS) {
  138. data.zone = values.zone.key
  139. data.cloudregion = values.cloudregion.key
  140. data.address_type = values.address_type
  141. data.ip = values.ip
  142. data.vpc = values.vpc
  143. if (values.eip) data.eip = values.eip
  144. }
  145. if (this.isAdminMode) {
  146. data.domain = values.domain
  147. data.admin = true
  148. }
  149. return data
  150. } catch (error) {
  151. throw error
  152. }
  153. },
  154. },
  155. }
  156. </script>