Public.vue 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  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_21')">
  7. <a-input v-decorator="decorators.name" :placeholder="$t('validator.resourceName')" />
  8. </a-form-item>
  9. <a-form-item :label="$t('common.description')">
  10. <a-textarea :auto-size="{ minRows: 1, maxRows: 3 }" v-decorator="decorators.description" :placeholder="$t('common_367')" />
  11. </a-form-item>
  12. <area-selects
  13. v-bind="areaParams"
  14. filterBrandResource="loadbalancer_engine"
  15. @providerFetchSuccess="providerFetchSuccess"
  16. @cloudregionFetchSuccess="cloudregionFetchSuccess"
  17. @zoneFetchSuccess="zoneFetchSuccess"
  18. class="mb-0" />
  19. <a-form-item :label="$t('network.text_268')" v-if="isAliyun">
  20. <base-select
  21. v-decorator="decorators.loadbalancer_spec"
  22. :options="specOpts"
  23. :select-props="{ placeholder: $t('network.text_269') }" />
  24. </a-form-item>
  25. <a-form-item :label="$t('compute.text_266')" v-if="isAws">
  26. <a-radio-group v-decorator="decorators.instance_type">
  27. <a-radio-button v-for="item in instanceOpts" :value="item.key" :label="item.label" :key="item.key">{{ item.label }}</a-radio-button>
  28. </a-radio-group>
  29. </a-form-item>
  30. <a-form-item :label="$t('network.text_16')">
  31. <a-radio-group v-decorator="decorators.address_type">
  32. <a-radio-button value="internet">{{$t('network.text_270')}}</a-radio-button>
  33. <a-radio-button value="intranet">{{$t('network.text_271')}}</a-radio-button>
  34. </a-radio-group>
  35. </a-form-item>
  36. <a-form-item :label="$t('network.text_272')" v-if="(isAliyun || isQcloud) && form.fd.address_type === 'internet' ">
  37. <charge-type-radio :decorators="decorators" />
  38. </a-form-item>
  39. <a-form-item :label="$t('network.text_273')">
  40. <a-radio-group v-decorator="decorators.ip">
  41. <a-radio-button value="ipv4">IPv4</a-radio-button>
  42. </a-radio-group>
  43. </a-form-item>
  44. <a-form-item :label="$t('common_711')" v-if="isShowCloudprovider">
  45. <base-select
  46. v-decorator="decorators.manager"
  47. resource="cloudproviders"
  48. need-params
  49. filterable
  50. :params="cloudproviderParams"
  51. :select-props="{ placeholder: $t('common_588') }" />
  52. </a-form-item>
  53. <a-form-item :label="$t('cloudenv.text_7')" v-else>
  54. <a-row :gutter="9">
  55. <a-col :span="12">
  56. <oc-select
  57. width="100%"
  58. v-decorator="decorators.vpc"
  59. show-status
  60. :status-desc="$t('compute.vpc_status_desc')"
  61. resource="vpcs"
  62. label="VPC"
  63. :formatter="vpcFormatter"
  64. :params="vpcParams"
  65. :sort="(arr) => arr.sort((a, b) => a.network_count > b.network_count ? -1 : 1)"
  66. :placeholder="$t('compute.text_194')"
  67. @selectChange="handleVpcChange" />
  68. </a-col>
  69. <a-col :span="12" v-if="(isQcloud && form.fd.address_type === 'intranet') || !isQcloud">
  70. <base-select
  71. v-decorator="decorators.network"
  72. resource="networks"
  73. need-params
  74. filterable
  75. :item.sync="networkObj"
  76. :params="networkParams"
  77. :select-props="{ placeholder: $t('network.text_275') }" />
  78. </a-col>
  79. </a-row>
  80. </a-form-item>
  81. <a-form-item :label="$t('network.text_221')" v-if="isHuawei && form.fd.address_type === 'internet'">
  82. <base-select
  83. v-decorator="decorators.eip.eip"
  84. resource="eips"
  85. need-params
  86. :params="eipParams"
  87. :showSync="true"
  88. :select-props="{ placeholder: $t('network.text_278') }" />
  89. <div slot="extra">{{$t('system.text_439')}}<help-link href="/eip">{{$t('system.text_440')}}</help-link>
  90. </div>
  91. </a-form-item>
  92. <a-form-item :label="$t('table.title.tag')">
  93. <tag v-decorator="decorators.__meta__" :allowNoValue="false" />
  94. </a-form-item>
  95. </a-form>
  96. </template>
  97. <script>
  98. import * as R from 'ramda'
  99. import ChargeTypeRadio from '@/sections/ChargeTypeRadio'
  100. import { LB_SPEC } from '@Network/views/lb/constants'
  101. import AreaSelects from '@/sections/AreaSelects'
  102. import lbCreate from './mixin.js'
  103. export default {
  104. name: 'LbAliyunCreate',
  105. components: {
  106. ChargeTypeRadio,
  107. AreaSelects,
  108. },
  109. mixins: [lbCreate],
  110. data () {
  111. return {
  112. specOpts: LB_SPEC.aliyun,
  113. instanceOpts: LB_SPEC.aws,
  114. }
  115. },
  116. computed: {
  117. eipParams () {
  118. let params = {}
  119. if (this.form.fd.cloudregion && !R.isEmpty(this.scopeParams)) {
  120. params = { ...this.scopeParams, usable: true, region: this.form.fd.cloudregion }
  121. if (this.isAdminMode || this.isDomainMode) {
  122. params.project = this.form.fd.project
  123. }
  124. }
  125. if (!R.isEmpty(this.vpcObj) && this.vpcObj.manager_id) {
  126. params.manager_id = this.vpcObj.manager_id
  127. }
  128. return params
  129. },
  130. },
  131. methods: {
  132. providerFetchSuccess (list) {
  133. const showProvider = ['Aliyun', 'Aws', 'Qcloud', 'Huawei']
  134. if (list && list.length > 0) {
  135. return list.filter(item => {
  136. const { name } = item
  137. return showProvider.indexOf(name) > -1
  138. })
  139. }
  140. return list
  141. },
  142. cloudregionFetchSuccess (list) {
  143. const showProvider = ['Aliyun', 'Aws', 'Qcloud', 'Huawei']
  144. if (list && list.length > 0) {
  145. return list.filter(item => {
  146. const { provider } = item
  147. return showProvider.indexOf(provider) > -1
  148. })
  149. }
  150. return list
  151. },
  152. zoneFetchSuccess (list) {
  153. const showProvider = ['Aliyun', 'Aws', 'Qcloud', 'Huawei']
  154. if (list && list.length > 0) {
  155. return list.filter(item => {
  156. const { provider } = item
  157. return showProvider.indexOf(provider) > -1
  158. })
  159. }
  160. return list
  161. },
  162. async submit () {
  163. try {
  164. const values = await this.form.fc.validateFields()
  165. if (!this.validateIp()) throw Error(this.$t('network.text_276'))
  166. if (!R.isEmpty(this.vpcObj)) {
  167. values.manager = this.vpcObj.manager
  168. }
  169. if (this.isAdminMode) {
  170. values.admin = true
  171. } else {
  172. delete values.domain
  173. }
  174. if (values.charge_type === 'bandwidth') {
  175. values.egress_mbps = values.bandwidth
  176. }
  177. if (this.isAws) {
  178. values.loadbalancer_spec = values.instance_type
  179. delete values.instance_type
  180. }
  181. return values
  182. } catch (error) {
  183. throw error
  184. }
  185. },
  186. },
  187. }
  188. </script>