HCSO.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369
  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="keySecretField.label.k">
  11. <a-input v-decorator="decorators.username" :placeholder="keySecretField.placeholder.k" />
  12. <div slot="extra" v-if="showDocsLink()">
  13. {{$t('cloudenv.text_236', [keySecretField.text, keySecretField.label.k])}}
  14. <help-link :href="docs[provider.toLowerCase()]">{{$t('cloudenv.text_237')}}</help-link>
  15. </div>
  16. </a-form-item>
  17. <a-form-item :label="keySecretField.label.s">
  18. <a-input-password v-decorator="decorators.password" :placeholder="keySecretField.placeholder.s" />
  19. </a-form-item>
  20. <a-form-item :label="$t('cloudenv.cloudaccount.region_id')">
  21. <a-input v-decorator="decorators.region_id" :placeholder="$t('common.tips.input', [$t('cloudenv.cloudaccount.region_id')])" />
  22. <div slot="extra">
  23. {{$t('cloudenv.cloudaccount.hcso.endpoint_domain.tips')}}
  24. </div>
  25. </a-form-item>
  26. <a-form-item :label="$t('cloudenv.cloudaccount.hcso.endpoint_domain')">
  27. <a-input v-decorator="decorators.endpoint_domain" :placeholder="$t('common.tips.input', [$t('cloudenv.cloudaccount.hcso.endpoint_domain')])" />
  28. </a-form-item>
  29. <a-form-item :label="$t('cloudenv.cloudaccount.hcso.iam')">
  30. <a-input v-decorator="decorators.iam" :placeholder="$t('common.tips.optional_input', [$t('cloudenv.cloudaccount.hcso.iam')])" />
  31. </a-form-item>
  32. <a-form-item :label="$t('cloudenv.cloudaccount.hcso.ecs')">
  33. <a-input v-decorator="decorators.ecs" :placeholder="$t('common.tips.input', [$t('cloudenv.cloudaccount.hcso.ecs')])" />
  34. </a-form-item>
  35. <a-form-item :label="$t('cloudenv.cloudaccount.hcso.vpc')">
  36. <a-input v-decorator="decorators.vpc" :placeholder="$t('common.tips.input', [$t('cloudenv.cloudaccount.hcso.vpc')])" />
  37. </a-form-item>
  38. <a-form-item :label="$t('cloudenv.cloudaccount.hcso.ims')">
  39. <a-input v-decorator="decorators.ims" :placeholder="$t('common.tips.optional_input', [$t('cloudenv.cloudaccount.hcso.ims')])" />
  40. </a-form-item>
  41. <a-form-item :label="$t('cloudenv.cloudaccount.hcso.evs')">
  42. <a-input v-decorator="decorators.evs" :placeholder="$t('common.tips.optional_input', [$t('cloudenv.cloudaccount.hcso.evs')])" />
  43. </a-form-item>
  44. <a-form-item :label="$t('cloudenv.cloudaccount.hcso.dcs')">
  45. <a-input v-decorator="decorators.dcs" :placeholder="$t('common.tips.optional_input', [$t('cloudenv.cloudaccount.hcso.dcs')])" />
  46. </a-form-item>
  47. <a-form-item :label="$t('cloudenv.cloudaccount.hcso.elb')">
  48. <a-input v-decorator="decorators.elb" :placeholder="$t('common.tips.optional_input', [$t('cloudenv.cloudaccount.hcso.elb')])" />
  49. </a-form-item>
  50. <a-form-item :label="$t('cloudenv.cloudaccount.hcso.obs')">
  51. <a-input v-decorator="decorators.obs" :placeholder="$t('common.tips.optional_input', [$t('cloudenv.cloudaccount.hcso.obs')])" />
  52. </a-form-item>
  53. <a-form-item :label="$t('cloudenv.cloudaccount.hcso.rds')">
  54. <a-input v-decorator="decorators.rds" :placeholder="$t('common.tips.optional_input', [$t('cloudenv.cloudaccount.hcso.rds')])" />
  55. </a-form-item>
  56. <a-form-item :label="$t('cloudenv.cloudaccount.hcso.nat')">
  57. <a-input v-decorator="decorators.nat" :placeholder="$t('common.tips.optional_input', [$t('cloudenv.cloudaccount.hcso.nat')])" />
  58. </a-form-item>
  59. <a-form-item :label="$t('cloudenv.cloudaccount.hcso.cts')">
  60. <a-input v-decorator="decorators.cts" :placeholder="$t('common.tips.optional_input', [$t('cloudenv.cloudaccount.hcso.cts')])" />
  61. </a-form-item>
  62. <a-form-item :label="$t('cloudenv.cloudaccount.hcso.ces')">
  63. <a-input v-decorator="decorators.ces" :placeholder="$t('common.tips.optional_input', [$t('cloudenv.cloudaccount.hcso.ces')])" />
  64. </a-form-item>
  65. <a-form-item :label="$t('cloudenv.cloudaccount.hcso.eps')">
  66. <a-input v-decorator="decorators.eps" :placeholder="$t('common.tips.optional_input', [$t('cloudenv.cloudaccount.hcso.eps')])" />
  67. </a-form-item>
  68. <a-form-item :label="$t('cloudenv.cloudaccount.hcso.sfs_turbo')">
  69. <a-input v-decorator="decorators.sfs_turbo" :placeholder="$t('common.tips.optional_input', [$t('cloudenv.cloudaccount.hcso.sfs_turbo')])" />
  70. </a-form-item>
  71. <a-form-item :label="$t('cloudenv.cloudaccount.hcso.default_subnet_dns')">
  72. <a-input v-decorator="decorators.default_subnet_dns" :placeholder="$t('common.tips.optional_input', [$t('cloudenv.cloudaccount.hcso.default_subnet_dns')])" />
  73. <div slot="extra">
  74. {{$t('cloudenv.cloudaccount.hcso.default_subnet_dns.tips')}}
  75. </div>
  76. </a-form-item>
  77. <domain-project :fc="form.fc" :form-layout="formLayout" :decorators="{ project: decorators.project, domain: decorators.domain, auto_create_project: decorators.auto_create_project }" :cloneData="cloneData" />
  78. <blocked-resources :decorators="{ isOpenBlockedResources: decorators.isOpenBlockedResources, blockedResources: decorators.blockedResources }" :cloneData="cloneData" />
  79. <proxy-setting :fc="form.fc" :fd="form.fd" ref="proxySetting" :cloneData="cloneData" />
  80. <auto-sync :fc="form.fc" :cloneData="cloneData" />
  81. <read-only :cloneData="cloneData" />
  82. <share-mode :fd="form.fd" :cloneData="cloneData" />
  83. </a-form>
  84. </div>
  85. </template>
  86. <script>
  87. import _ from 'lodash'
  88. import AutoSync from '@Cloudenv/views/cloudaccount/components/AutoSync'
  89. import ProxySetting from '@Cloudenv/views/cloudaccount/components/ProxySetting'
  90. import ShareMode from '@Cloudenv/views/cloudaccount/components/ShareMode'
  91. import ReadOnly from '@Cloudenv/views/cloudaccount/components/ReadOnly'
  92. import { keySecretFields } from '@Cloudenv/views/cloudaccount/constants'
  93. import { isRequired } from '@/utils/validate'
  94. import { DOCS_MAP, showDocsLink } from '@/constants/docs'
  95. import createMixin from './createMixin'
  96. import DomainProject from '../../../components/DomainProject'
  97. export default {
  98. name: 'HCSO',
  99. components: {
  100. AutoSync,
  101. DomainProject,
  102. ProxySetting,
  103. ShareMode,
  104. ReadOnly,
  105. },
  106. mixins: [createMixin],
  107. data () {
  108. const keySecretField = keySecretFields[this.provider.toLowerCase()]
  109. this.endpoint_domain_change = _.debounce(this.endpoint_domain_change, 500)
  110. this.region_id_change = _.debounce(this.region_id_change, 500)
  111. return {
  112. docs: DOCS_MAP.cloudaccount(),
  113. showDocsLink,
  114. decorators: this.getDecorators(keySecretField),
  115. services: {
  116. iam: 'iam',
  117. ecs: 'ecs',
  118. vpc: 'vpc',
  119. ims: 'ims',
  120. evs: 'evs',
  121. dcs: 'dcs',
  122. elb: 'elb',
  123. obs: 'obs',
  124. rds: 'rds',
  125. nat: 'nat',
  126. cts: 'cts',
  127. ces: 'ces',
  128. eps: 'eps',
  129. sfs_turbo: 'sfs-turbo',
  130. },
  131. prevs: {
  132. region_id: '',
  133. endpoint_domain: '',
  134. },
  135. }
  136. },
  137. methods: {
  138. getDecorators (initKeySecretFields) {
  139. const keySecretField = this.keySecretField || initKeySecretFields
  140. let initDomain = {
  141. key: this.$store.getters.userInfo.projectDomainId,
  142. label: this.$store.getters.userInfo.projectDomain,
  143. }
  144. const {
  145. domain_id,
  146. project_domain,
  147. auto_create_project: initAutoCreateProject = false,
  148. endpoint_domain: initEndpointDomain = '',
  149. region_id: initRegionId = '',
  150. iam: initIam = '',
  151. ecs: initEcs = '',
  152. vpc: initVpc = '',
  153. ims: initIms = '',
  154. evs: initEvs = '',
  155. dcs: initDcs = '',
  156. elb: initElb = '',
  157. obs: initObs = '',
  158. rds: initRds = '',
  159. nat: initNat = '',
  160. cts: initCts = '',
  161. ces: initCes = '',
  162. eps: initEps = '',
  163. sfs_turbo: initSfsTurbo = '',
  164. default_subnet_dns: initDefaultSubnetDns = '',
  165. } = this.cloneData
  166. if (domain_id && project_domain) {
  167. initDomain = {
  168. key: domain_id,
  169. label: project_domain,
  170. }
  171. }
  172. const decorators = {
  173. name: [
  174. 'name',
  175. {
  176. validateFirst: true,
  177. rules: [
  178. { required: true, message: this.$t('cloudenv.text_190') },
  179. // { validator: this.$validate('resourceName') },
  180. ],
  181. },
  182. ],
  183. description: ['description'],
  184. username: [
  185. keySecretField.k,
  186. {
  187. rules: [
  188. { required: true, message: keySecretField.placeholder.k },
  189. ],
  190. },
  191. ],
  192. password: [
  193. keySecretField.s,
  194. {
  195. rules: [
  196. { required: true, message: keySecretField.placeholder.s },
  197. ],
  198. },
  199. ],
  200. domain: [
  201. 'domain',
  202. {
  203. initialValue: initDomain,
  204. rules: [
  205. { validator: isRequired(), message: this.$t('rules.domain'), trigger: 'change' },
  206. ],
  207. },
  208. ],
  209. auto_create_project: [
  210. 'auto_create_project',
  211. {
  212. initialValue: initAutoCreateProject,
  213. valuePropName: 'checked',
  214. },
  215. ],
  216. endpoint_domain: [
  217. 'endpoint_domain',
  218. {
  219. initialValue: initEndpointDomain,
  220. rules: [
  221. { required: true, message: this.$t('common.tips.input', [this.$t('cloudenv.cloudaccount.hcso.endpoint_domain')]) },
  222. ],
  223. },
  224. ],
  225. region_id: [
  226. 'region_id',
  227. {
  228. initialValue: initRegionId,
  229. rules: [
  230. { required: true, message: this.$t('common.tips.input', [this.$t('cloudenv.cloudaccount.region_id')]) },
  231. ],
  232. },
  233. ],
  234. iam: [
  235. 'iam',
  236. {
  237. initialValue: initIam,
  238. },
  239. ],
  240. ecs: [
  241. 'ecs',
  242. {
  243. initialValue: initEcs,
  244. },
  245. ],
  246. vpc: [
  247. 'vpc',
  248. {
  249. initialValue: initVpc,
  250. },
  251. ],
  252. ims: [
  253. 'ims',
  254. {
  255. initialValue: initIms,
  256. },
  257. ],
  258. evs: [
  259. 'evs',
  260. {
  261. initialValue: initEvs,
  262. },
  263. ],
  264. dcs: [
  265. 'dcs',
  266. {
  267. initialValue: initDcs,
  268. },
  269. ],
  270. elb: [
  271. 'elb',
  272. {
  273. initialValue: initElb,
  274. },
  275. ],
  276. obs: [
  277. 'obs',
  278. {
  279. initialValue: initObs,
  280. },
  281. ],
  282. rds: [
  283. 'rds',
  284. {
  285. initialValue: initRds,
  286. },
  287. ],
  288. nat: [
  289. 'nat',
  290. {
  291. initialValue: initNat,
  292. },
  293. ],
  294. cts: [
  295. 'cts',
  296. {
  297. initialValue: initCts,
  298. },
  299. ],
  300. ces: [
  301. 'ces',
  302. {
  303. initialValue: initCes,
  304. },
  305. ],
  306. eps: [
  307. 'eps',
  308. {
  309. initialValue: initEps,
  310. },
  311. ],
  312. sfs_turbo: [
  313. 'sfs_turbo',
  314. {
  315. initialValue: initSfsTurbo,
  316. },
  317. ],
  318. default_subnet_dns: [
  319. 'default_subnet_dns',
  320. {
  321. initialValue: initDefaultSubnetDns,
  322. },
  323. ],
  324. }
  325. return decorators
  326. },
  327. endpoints (domain, region) {
  328. const prevs = {}
  329. for (const k in this.services) {
  330. prevs[k] = this.form.fc.getFieldValue(k)
  331. }
  332. const currents = {}
  333. for (const k in prevs) {
  334. if (prevs[k] && prevs[k].length > 0) {
  335. const i = prevs[k].lastIndexOf(this.prevs.endpoint_domain)
  336. if (i > -1 && domain && domain.length > 0) {
  337. prevs[k] = prevs[k].substring(0, i) + domain
  338. }
  339. if (region && region.length > 0) {
  340. prevs[k] = prevs[k].replace(this.prevs.region_id, region)
  341. }
  342. currents[k] = prevs[k]
  343. } else {
  344. if (domain && domain.length > 0 && region && region.length > 0) {
  345. currents[k] = [k, region, domain].join('.')
  346. }
  347. }
  348. }
  349. return currents
  350. },
  351. endpoint_domain_change () {
  352. const d = this.form.fc.getFieldValue('endpoint_domain')
  353. const r = this.form.fc.getFieldValue('region_id')
  354. this.form.fc.setFieldsValue(this.endpoints(d, r))
  355. this.prevs.endpoint_domain = d
  356. },
  357. region_id_change () {
  358. const d = this.form.fc.getFieldValue('endpoint_domain')
  359. const r = this.form.fc.getFieldValue('region_id')
  360. this.form.fc.setFieldsValue(this.endpoints(d, r))
  361. this.prevs.region_id = r
  362. },
  363. },
  364. }
  365. </script>