BingoCloud.vue 5.3 KB

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