OpenstackZstack.vue 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. <template>
  2. <div>
  3. <a-alert v-if="isOpenstack" class="my-2" :message="$t('cloudenv.text_252')" banner />
  4. <a-form :form="form.fc" v-bind="formLayout">
  5. <a-form-item :label="$t('cloudenv.text_95')">
  6. <a-input v-decorator="decorators.name" :placeholder="$t('cloudenv.text_190')" />
  7. </a-form-item>
  8. <a-form-item :label="$t('common.description')">
  9. <a-textarea :auto-size="{ minRows: 1, maxRows: 3 }" v-decorator="decorators.description" :placeholder="$t('common_367')" />
  10. </a-form-item>
  11. <a-form-item :label="$t('cloudenv.text_253')">
  12. <a-input v-decorator="decorators.auth_url" />
  13. <span slot="extra" v-if="isOpenstack">
  14. {{$t('common_569')}}
  15. </span>
  16. <span slot="extra" v-else-if="isZStack">
  17. {{$t('cloudenv.zstack.auth_url_extra')}}
  18. </span>
  19. <span slot="extra" v-else>
  20. {{$t('common_570')}}
  21. </span>
  22. </a-form-item>
  23. <a-form-item :label="keySecretField.label.k">
  24. <a-input v-decorator="decorators.username" :placeholder="keySecretField.placeholder.k" />
  25. <div slot="extra" v-if="showDocsLink()">
  26. {{$t('cloudenv.text_236', [keySecretField.text, keySecretField.label.k])}}
  27. <help-link :href="docs[provider.toLowerCase()]">{{$t('cloudenv.text_237')}}</help-link>
  28. </div>
  29. </a-form-item>
  30. <a-form-item :label="keySecretField.label.s">
  31. <a-input-password v-decorator="decorators.password" :placeholder="keySecretField.placeholder.s" />
  32. </a-form-item>
  33. <a-form-item :label="$t('cloudenv.text_254')" v-if="isOpenstack">
  34. <a-input v-decorator="decorators.project_name" :placeholder="$t('cloudenv.text_255')" />
  35. </a-form-item>
  36. <a-form-item label="Domain Name" v-if="isOpenstack">
  37. <a-input v-decorator="decorators.domain_name" />
  38. </a-form-item>
  39. <domain-project :provider="provider" :fc="form.fc" :form-layout="formLayout" :decorators="{ project: decorators.project, domain: decorators.domain, auto_create_project: decorators.auto_create_project }" :cloneData="cloneData" />
  40. <blocked-resources :decorators="{ isOpenBlockedResources: decorators.isOpenBlockedResources, blockedResources: decorators.blockedResources }" :cloneData="cloneData" />
  41. <proxy-setting :fc="form.fc" :fd="form.fd" ref="proxySetting" :cloneData="cloneData" />
  42. <auto-sync :fc="form.fc" :form-layout="formLayout" :cloneData="cloneData" />
  43. <read-only :cloneData="cloneData" />
  44. <share-mode :fd="form.fd" :cloneData="cloneData" />
  45. </a-form>
  46. </div>
  47. </template>
  48. <script>
  49. import AutoSync from '@Cloudenv/views/cloudaccount/components/AutoSync'
  50. import ProxySetting from '@Cloudenv/views/cloudaccount/components/ProxySetting'
  51. import ShareMode from '@Cloudenv/views/cloudaccount/components/ShareMode'
  52. import ReadOnly from '@Cloudenv/views/cloudaccount/components/ReadOnly'
  53. import { keySecretFields } from '@Cloudenv/views/cloudaccount/constants'
  54. import { isRequired } from '@/utils/validate'
  55. import { DOCS_MAP, showDocsLink } from '@/constants/docs'
  56. import createMixin from './createMixin'
  57. import DomainProject from '../../../components/DomainProject'
  58. export default {
  59. name: 'OpenstackZstack',
  60. components: {
  61. AutoSync,
  62. DomainProject,
  63. ProxySetting,
  64. ShareMode,
  65. ReadOnly,
  66. },
  67. mixins: [createMixin],
  68. data () {
  69. const keySecretField = keySecretFields[this.provider.toLowerCase()]
  70. return {
  71. docs: DOCS_MAP.cloudaccount(),
  72. showDocsLink,
  73. decorators: this.getDecorators(keySecretField),
  74. }
  75. },
  76. computed: {
  77. isOpenstack () {
  78. return this.provider.toLowerCase() === 'openstack'
  79. },
  80. urlPlaceholder () {
  81. if (this.isOpenstack) {
  82. return this.$t('cloudenv.text_256')
  83. }
  84. return this.$t('cloudenv.text_257')
  85. },
  86. isZStack () {
  87. return this.provider.toLowerCase() === 'zstack'
  88. },
  89. },
  90. deactivated () {
  91. this.form.fc.resetFields()
  92. },
  93. methods: {
  94. getDecorators (initKeySecretFields) {
  95. const keySecretField = this.keySecretField || initKeySecretFields
  96. let initDomain = {
  97. key: this.$store.getters.userInfo.projectDomainId,
  98. label: this.$store.getters.userInfo.projectDomain,
  99. }
  100. const {
  101. domain_id,
  102. project_domain,
  103. auto_create_project: initAutoCreateProject = false,
  104. access_url: initAuthUrl = '',
  105. } = this.cloneData
  106. if (domain_id && project_domain) {
  107. initDomain = {
  108. key: domain_id,
  109. label: project_domain,
  110. }
  111. }
  112. const decorators = {
  113. name: [
  114. 'name',
  115. {
  116. validateFirst: true,
  117. rules: [
  118. { required: true, message: this.$t('cloudenv.text_190') },
  119. // { validator: this.$validate('resourceName') },
  120. ],
  121. },
  122. ],
  123. description: ['description'],
  124. auth_url: [
  125. 'auth_url',
  126. {
  127. validateFirst: true,
  128. initialValue: initAuthUrl,
  129. rules: [
  130. { required: true, message: this.$t('cloudenv.text_258') },
  131. { validator: this.$validate('url') },
  132. ],
  133. },
  134. ],
  135. username: [
  136. keySecretField.k,
  137. {
  138. rules: [
  139. { required: true, message: keySecretField.placeholder.k },
  140. ],
  141. },
  142. ],
  143. password: [
  144. keySecretField.s,
  145. {
  146. rules: [
  147. { required: true, message: keySecretField.placeholder.s },
  148. ],
  149. },
  150. ],
  151. project_name: [
  152. 'project_name',
  153. {
  154. rules: [
  155. { required: true, message: this.$t('cloudenv.text_259') },
  156. ],
  157. },
  158. ],
  159. domain_name: [
  160. 'domain_name',
  161. ],
  162. domain: [
  163. 'domain',
  164. {
  165. initialValue: initDomain,
  166. rules: [
  167. { validator: isRequired(), message: this.$t('rules.domain'), trigger: 'change' },
  168. ],
  169. },
  170. ],
  171. auto_create_project: [
  172. 'auto_create_project',
  173. {
  174. initialValue: initAutoCreateProject || this.provider.toLowerCase() === 'openstack',
  175. valuePropName: 'checked',
  176. },
  177. ],
  178. }
  179. return decorators
  180. },
  181. },
  182. }
  183. </script>