Google.vue 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. <template>
  2. <div>
  3. <a-form :form="form.fc" 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. <domain-project :fc="form.fc" :form-layout="formLayout" :decorators="{ project: decorators.project, domain: decorators.domain, auto_create_project: decorators.auto_create_project }" :cloneData="cloneData" />
  11. <blocked-resources :decorators="{ isOpenBlockedResources: decorators.isOpenBlockedResources, blockedResources: decorators.blockedResources }" :cloneData="cloneData" />
  12. <upload-json-file :fc="form.fc">
  13. <a-form-item label="project_id">
  14. <a-input v-decorator="decorators.project_id" :placeholder="$t('cloudenv.text_247')" />
  15. <div slot="extra" v-if="showDocsLink()">{{$t('cloudenv.text_248', [ `如何获取Google云project_id?点击查看帮助` ])}}<help-link :href="docs['google']">{{$t('cloudenv.text_237')}}</help-link>
  16. </div>
  17. </a-form-item>
  18. <a-form-item label="private_key_id">
  19. <a-input v-decorator="decorators.private_key_id" :placeholder="$t('cloudenv.text_162')" />
  20. </a-form-item>
  21. <a-form-item label="private_key">
  22. <a-textarea style="overflow-y:auto" :autosize="{ minRows: 3, maxRows: 35 }" v-decorator="decorators.private_key" :placeholder="$t('cloudenv.text_161')" />
  23. </a-form-item>
  24. <a-form-item label="client_email">
  25. <a-input v-decorator="decorators.client_email" :placeholder="$t('cloudenv.text_249')" />
  26. </a-form-item>
  27. </upload-json-file>
  28. <proxy-setting :fc="form.fc" :fd="form.fd" ref="proxySetting" :cloneData="cloneData" />
  29. <auto-sync :fc="form.fc" :form-layout="formLayout" :cloneData="cloneData" />
  30. <read-only :cloneData="cloneData" />
  31. <share-mode :fd="form.fd" :cloneData="cloneData" />
  32. </a-form>
  33. </div>
  34. </template>
  35. <script>
  36. import AutoSync from '@Cloudenv/views/cloudaccount/components/AutoSync'
  37. import ProxySetting from '@Cloudenv/views/cloudaccount/components/ProxySetting'
  38. import ShareMode from '@Cloudenv/views/cloudaccount/components/ShareMode'
  39. import ReadOnly from '@Cloudenv/views/cloudaccount/components/ReadOnly'
  40. import UploadJsonFile from '@Cloudenv/views/cloudaccount/components/UploadJsonFile'
  41. import { keySecretFields } from '@Cloudenv/views/cloudaccount/constants'
  42. import { isRequired } from '@/utils/validate'
  43. import { DOCS_MAP, showDocsLink } from '@/constants/docs'
  44. import createMixin from './createMixin'
  45. import DomainProject from '../../../components/DomainProject'
  46. export default {
  47. name: 'GoogleCreate',
  48. components: {
  49. AutoSync,
  50. DomainProject,
  51. UploadJsonFile,
  52. ProxySetting,
  53. ShareMode,
  54. ReadOnly,
  55. },
  56. mixins: [createMixin],
  57. data () {
  58. const keySecretField = keySecretFields[this.provider.toLowerCase()]
  59. let initDomain = {
  60. key: this.$store.getters.userInfo.projectDomainId,
  61. label: this.$store.getters.userInfo.projectDomain,
  62. }
  63. let initAutoCreateProject = false
  64. let initProjectId = ''
  65. let initPrivateKeyId = ''
  66. let initPrivateKey = ''
  67. let initClientEmail = ''
  68. if (this.cloneData) {
  69. const {
  70. domain_id,
  71. project_domain,
  72. auto_create_project = false,
  73. gcp_project_id = '',
  74. gcp_private_key_id = '',
  75. gcp_private_key = '',
  76. gcp_client_email = '',
  77. } = this.cloneData
  78. if (domain_id && project_domain) {
  79. initDomain = {
  80. key: domain_id,
  81. label: project_domain,
  82. }
  83. }
  84. initProjectId = gcp_project_id
  85. initPrivateKeyId = gcp_private_key_id
  86. initPrivateKey = gcp_private_key
  87. initClientEmail = gcp_client_email
  88. initAutoCreateProject = auto_create_project
  89. }
  90. return {
  91. docs: DOCS_MAP.cloudaccount(),
  92. showDocsLink,
  93. keySecretField,
  94. decorators: {
  95. name: [
  96. 'name',
  97. {
  98. validateFirst: true,
  99. rules: [
  100. { required: true, message: this.$t('cloudenv.text_190') },
  101. // { validator: this.$validate('resourceName') },
  102. ],
  103. },
  104. ],
  105. description: ['description'],
  106. project_id: [
  107. 'gcp_project_id',
  108. {
  109. initialValue: initProjectId,
  110. rules: [
  111. { required: true, message: this.$t('cloudenv.text_247') },
  112. ],
  113. },
  114. ],
  115. private_key_id: [
  116. 'gcp_private_key_id',
  117. {
  118. initialValue: initPrivateKeyId,
  119. rules: [
  120. { required: true, message: this.$t('cloudenv.text_162') },
  121. ],
  122. },
  123. ],
  124. private_key: [
  125. 'gcp_private_key',
  126. {
  127. initialValue: initPrivateKey,
  128. rules: [
  129. { required: true, message: this.$t('cloudenv.text_161') },
  130. ],
  131. },
  132. ],
  133. client_email: [
  134. 'gcp_client_email',
  135. {
  136. initialValue: initClientEmail,
  137. rules: [
  138. { required: true, message: this.$t('cloudenv.text_249') },
  139. { type: 'email', message: this.$t('cloudenv.text_250') },
  140. ],
  141. },
  142. ],
  143. domain: [
  144. 'domain',
  145. {
  146. initialValue: initDomain,
  147. rules: [
  148. { validator: isRequired(), message: this.$t('rules.domain'), trigger: 'change' },
  149. ],
  150. },
  151. ],
  152. auto_create_project: [
  153. 'auto_create_project',
  154. {
  155. initialValue: initAutoCreateProject,
  156. valuePropName: 'checked',
  157. },
  158. ],
  159. },
  160. }
  161. },
  162. }
  163. </script>