VMware.vue 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. <template>
  2. <div>
  3. <a-form :form="form.fc" v-bind="formLayout">
  4. <a-alert class="my-2" banner>
  5. <template slot="message">{{ $t('cloudenv.vmware.message') }}<help-link :href="vmDocLink">{{ $t('cloudenv.vmware.message.doc') }}</help-link></template>
  6. </a-alert>
  7. <a-form-item :label="$t('cloudenv.text_95')">
  8. <a-input v-decorator="decorators.name" :placeholder="$t('cloudenv.text_190')" />
  9. </a-form-item>
  10. <a-form-item :label="$t('common.description')">
  11. <a-textarea :auto-size="{ minRows: 1, maxRows: 3 }" v-decorator="decorators.description" :placeholder="$t('common_367')" />
  12. </a-form-item>
  13. <a-form-item :label="$t('cloudenv.text_10')" class="mb-0">
  14. <cloudregion-zone
  15. :zone-params="zoneParams"
  16. :cloudregion-params="cloudregionParams"
  17. :decorator="decorators.cloudregionZone" />
  18. </a-form-item>
  19. <a-form-item :label="$t('cloudenv.text_264')" :extra="this.$t('common_572')">
  20. <a-input v-decorator="decorators.host" />
  21. </a-form-item>
  22. <a-form-item :label="$t('cloudenv.text_266')">
  23. <a-input v-decorator="decorators.port" />
  24. </a-form-item>
  25. <a-form-item :label="keySecretField.label.k">
  26. <a-input v-decorator="decorators.username" :placeholder="keySecretField.placeholder.k" />
  27. <div slot="extra" v-if="showDocsLink()">
  28. <span class="mr-3">{{$t('cloudenv.text_267')}}</span>
  29. {{$t('cloudenv.text_236', [keySecretField.text, keySecretField.label.k])}}
  30. <help-link :href="docs[provider.toLowerCase()]">{{$t('cloudenv.text_237')}}</help-link>
  31. </div>
  32. </a-form-item>
  33. <a-form-item :label="keySecretField.label.s">
  34. <a-input-password v-decorator="decorators.password" :placeholder="keySecretField.placeholder.s" />
  35. </a-form-item>
  36. <domain-project :fc="form.fc" :form-layout="formLayout" :decorators="{ project: decorators.project, domain: decorators.domain, auto_create_project: decorators.auto_create_project }" :cloneData="cloneData" />
  37. <blocked-resources :decorators="{ isOpenBlockedResources: decorators.isOpenBlockedResources, blockedResources: decorators.blockedResources }" :cloneData="cloneData" />
  38. <proxy-setting :fc="form.fc" :fd="form.fd" ref="proxySetting" :cloneData="cloneData" />
  39. <auto-sync :fc="form.fc" :form-layout="formLayout" :cloneData="cloneData" />
  40. <share-mode :fd="form.fd" :cloneData="cloneData" />
  41. </a-form>
  42. </div>
  43. </template>
  44. <script>
  45. import AutoSync from '@Cloudenv/views/cloudaccount/components/AutoSync'
  46. import ProxySetting from '@Cloudenv/views/cloudaccount/components/ProxySetting'
  47. import ShareMode from '@Cloudenv/views/cloudaccount/components/ShareMode'
  48. import { keySecretFields } from '@Cloudenv/views/cloudaccount/constants'
  49. import CloudregionZone from '@/sections/CloudregionZone'
  50. import { isRequired } from '@/utils/validate'
  51. import { DOCS_MAP, showDocsLink } from '@/constants/docs'
  52. import createMixin from './createMixin'
  53. import DomainProject from '../../../components/DomainProject'
  54. export default {
  55. name: 'VMwareCreate',
  56. components: {
  57. AutoSync,
  58. DomainProject,
  59. ProxySetting,
  60. ShareMode,
  61. CloudregionZone,
  62. },
  63. provide () {
  64. return {
  65. form: this.form,
  66. }
  67. },
  68. mixins: [createMixin],
  69. data () {
  70. const keySecretField = keySecretFields[this.provider.toLowerCase()]
  71. let initDomain = {
  72. key: this.$store.getters.userInfo.projectDomainId,
  73. label: this.$store.getters.userInfo.projectDomain,
  74. }
  75. let initHost = ''
  76. let initPort = 443
  77. const {
  78. domain_id,
  79. project_domain,
  80. auto_create_project: initAutoCreateProject = false,
  81. access_url,
  82. } = this.cloneData
  83. if (domain_id && project_domain) {
  84. initDomain = {
  85. key: domain_id,
  86. label: project_domain,
  87. }
  88. }
  89. if (access_url) {
  90. const str = access_url.replace('https://', '').replace('http://', '')
  91. const list = str.split(':')
  92. initHost = list[0]
  93. initPort = list[1] || 8006
  94. }
  95. return {
  96. docs: DOCS_MAP.cloudaccount(),
  97. showDocsLink,
  98. decorators: {
  99. name: [
  100. 'name',
  101. {
  102. validateFirst: true,
  103. rules: [
  104. { required: true, message: this.$t('cloudenv.text_190') },
  105. // { validator: this.$validate('resourceName') },
  106. ],
  107. },
  108. ],
  109. description: ['description'],
  110. host: [
  111. 'host',
  112. {
  113. validateFirst: true,
  114. initialValue: initHost,
  115. rules: [
  116. { required: true, message: this.$t('cloudenv.text_268') },
  117. { validator: this.$validate(['domain', 'IPv4'], true, 'some'), trigger: ['blur', 'change'], message: this.$t('cloudenv.text_269') },
  118. ],
  119. },
  120. ],
  121. port: [
  122. 'port',
  123. {
  124. initialValue: initPort,
  125. rules: [
  126. { type: 'number', min: 0, max: 65535, message: this.$t('cloudenv.text_270'), trigger: 'blur', transform: (v) => parseFloat(v) },
  127. ],
  128. },
  129. ],
  130. username: [
  131. keySecretField.k,
  132. {
  133. rules: [
  134. { required: true, message: keySecretField.placeholder.k },
  135. ],
  136. },
  137. ],
  138. password: [
  139. keySecretField.s,
  140. {
  141. rules: [
  142. { required: true, message: keySecretField.placeholder.s },
  143. ],
  144. },
  145. ],
  146. domain: [
  147. 'domain',
  148. {
  149. initialValue: initDomain,
  150. rules: [
  151. { validator: isRequired(), message: this.$t('rules.domain'), trigger: 'change' },
  152. ],
  153. },
  154. ],
  155. auto_create_project: [
  156. 'auto_create_project',
  157. {
  158. initialValue: initAutoCreateProject,
  159. valuePropName: 'checked',
  160. },
  161. ],
  162. cloudregionZone: {
  163. cloudregion: [
  164. 'cloudregion',
  165. {
  166. initialValue: { key: '', label: '' },
  167. rules: [
  168. { validator: isRequired(), message: this.$t('compute.text_212') },
  169. ],
  170. },
  171. ],
  172. zone: [
  173. 'zone',
  174. {
  175. initialValue: { key: '', label: '' },
  176. rules: [
  177. { validator: isRequired(), message: this.$t('compute.text_213') },
  178. ],
  179. },
  180. ],
  181. },
  182. },
  183. keepAliveFields: true,
  184. }
  185. },
  186. computed: {
  187. vmDocLink () {
  188. return DOCS_MAP.cloudaccountVMwareNet()
  189. },
  190. cloudregionParams () {
  191. return {
  192. cloud_env: 'onpremise',
  193. // usable: true,
  194. show_emulated: false,
  195. scope: this.$store.getters.scope,
  196. }
  197. },
  198. zoneParams () {
  199. return {
  200. // usable: true,
  201. show_emulated: false,
  202. order_by: 'created_at',
  203. order: 'asc',
  204. scope: this.$store.getters.scope,
  205. }
  206. },
  207. },
  208. }
  209. </script>