CephFS.vue 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  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. <a-form-item :label="$t('cloudenv.text_261')">
  11. <a-input v-decorator="decorators.host" />
  12. </a-form-item>
  13. <a-form-item :label="$t('cloudenv.text_266')">
  14. <a-input v-decorator="decorators.port" />
  15. </a-form-item>
  16. <a-form-item :label="keySecretField.label.k">
  17. <a-input v-decorator="decorators.username" :placeholder="keySecretField.placeholder.k" />
  18. </a-form-item>
  19. <a-form-item :label="keySecretField.label.s">
  20. <a-input-password v-decorator="decorators.password" :placeholder="keySecretField.placeholder.s" />
  21. </a-form-item>
  22. <a-form-item label="Name">
  23. <a-input v-decorator="decorators.option_name" />
  24. </a-form-item>
  25. <a-form-item label="Mon Host" :extra="$t('cloudenv.mon_host_extra')">
  26. <a-input v-decorator="decorators.mon_host" />
  27. </a-form-item>
  28. <a-form-item label="Secret">
  29. <a-input-password v-decorator="decorators.secret" />
  30. </a-form-item>
  31. <domain-project :fc="form.fc" :form-layout="formLayout" :decorators="{ project: decorators.project, domain: decorators.domain, auto_create_project: decorators.auto_create_project }" :cloneData="cloneData" />
  32. <blocked-resources :decorators="{ isOpenBlockedResources: decorators.isOpenBlockedResources, blockedResources: decorators.blockedResources }" :cloneData="cloneData" />
  33. <proxy-setting :fc="form.fc" :fd="form.fd" ref="proxySetting" :cloneData="cloneData" />
  34. <auto-sync :fc="form.fc" :form-layout="formLayout" :cloneData="cloneData" />
  35. <share-mode :fd="form.fd" :cloneData="cloneData" />
  36. </a-form>
  37. </div>
  38. </template>
  39. <script>
  40. import AutoSync from '@Cloudenv/views/cloudaccount/components/AutoSync'
  41. import ProxySetting from '@Cloudenv/views/cloudaccount/components/ProxySetting'
  42. import ShareMode from '@Cloudenv/views/cloudaccount/components/ShareMode'
  43. import DomainProject from '@Cloudenv/views/cloudaccount/components/DomainProject'
  44. import { keySecretFields } from '@Cloudenv/views/cloudaccount/constants'
  45. import { isRequired } from '@/utils/validate'
  46. import regexp from '@/utils/regexp'
  47. import { DOCS_MAP, showDocsLink } from '@/constants/docs'
  48. import createMixin from './createMixin'
  49. export default {
  50. name: 'CephFSCreate',
  51. components: {
  52. AutoSync,
  53. DomainProject,
  54. ProxySetting,
  55. ShareMode,
  56. },
  57. mixins: [createMixin],
  58. data () {
  59. const keySecretField = keySecretFields[this.provider.toLowerCase()]
  60. let initHost = ''
  61. let initPort = ''
  62. let initMonHost = ''
  63. let initName = ''
  64. let initDomain = {
  65. key: this.$store.getters.userInfo.projectDomainId,
  66. label: this.$store.getters.userInfo.projectDomain,
  67. }
  68. let initAutoCreateProject = false
  69. if (this.cloneData) {
  70. const { access_url, domain_id, project_domain, auto_create_project = false, options = {} } = this.cloneData
  71. if (domain_id && project_domain) {
  72. initDomain = {
  73. key: domain_id,
  74. label: project_domain,
  75. }
  76. }
  77. initAutoCreateProject = auto_create_project
  78. if (access_url) {
  79. const str = access_url.replace('https://', '').replace('http://', '')
  80. const list = str.split(':')
  81. initHost = list[0]
  82. initPort = list[1] || 8006
  83. }
  84. initMonHost = options.mon_host || ''
  85. initName = options.name || ''
  86. }
  87. return {
  88. docs: DOCS_MAP.cloudaccount(),
  89. showDocsLink,
  90. decorators: {
  91. name: [
  92. 'name',
  93. {
  94. validateFirst: true,
  95. rules: [
  96. { required: true, message: this.$t('cloudenv.text_190') },
  97. // { validator: this.$validate('resourceName') },
  98. ],
  99. },
  100. ],
  101. description: ['description'],
  102. host: [
  103. 'host',
  104. {
  105. validateFirst: true,
  106. initialValue: initHost,
  107. rules: [
  108. { required: true, message: this.$t('cloudenv.text_262') },
  109. { validator: this.$validate(['domain', 'IPv4'], true, 'some'), trigger: ['blur', 'change'], message: this.$t('cloudenv.text_269') },
  110. ],
  111. },
  112. ],
  113. port: [
  114. 'port',
  115. {
  116. initialValue: initPort || 443,
  117. rules: [
  118. { type: 'number', min: 0, max: 65535, message: this.$t('cloudenv.text_270'), trigger: 'blur', transform: (v) => parseFloat(v) },
  119. ],
  120. },
  121. ],
  122. username: [
  123. keySecretField.k,
  124. {
  125. rules: [
  126. { required: true, message: keySecretField.placeholder.k },
  127. ],
  128. },
  129. ],
  130. password: [
  131. keySecretField.s,
  132. {
  133. rules: [
  134. { required: true, message: keySecretField.placeholder.s },
  135. ],
  136. },
  137. ],
  138. mon_host: [
  139. 'mon_host',
  140. {
  141. initialValue: initMonHost,
  142. rules: [
  143. {
  144. validator: (rule, value, callback) => {
  145. if (!value) callback()
  146. const list = value.split(',')
  147. if (list.every(str => {
  148. return regexp.isIPv4AndPort(str)
  149. })) {
  150. callback()
  151. }
  152. callback(new Error(this.$t('cloudenv.check_mon_host')))
  153. },
  154. },
  155. ],
  156. },
  157. ],
  158. secret: [
  159. 'secret',
  160. ],
  161. option_name: [
  162. 'option_name',
  163. {
  164. initialValue: initName,
  165. },
  166. ],
  167. domain: [
  168. 'domain',
  169. {
  170. initialValue: initDomain,
  171. rules: [
  172. { validator: isRequired(), message: this.$t('rules.domain'), trigger: 'change' },
  173. ],
  174. },
  175. ],
  176. auto_create_project: [
  177. 'auto_create_project',
  178. {
  179. initialValue: initAutoCreateProject,
  180. valuePropName: 'checked',
  181. },
  182. ],
  183. },
  184. keepAliveFields: true,
  185. }
  186. },
  187. }
  188. </script>