createMixin.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. import * as R from 'ramda'
  2. import { PROVIDER_MAP, EXTRA_HYPERVISORS } from '@/constants'
  3. import { keySecretFields } from '@Cloudenv/views/cloudaccount/constants'
  4. import BlockedResources from '@Cloudenv/views/cloudaccount/components/BlockedResources'
  5. export default {
  6. components: {
  7. BlockedResources,
  8. },
  9. props: {
  10. provider: {
  11. type: String,
  12. required: true,
  13. },
  14. cloneData: {
  15. type: Object,
  16. default: () => ({}),
  17. },
  18. },
  19. data () {
  20. let initialProject = {
  21. key: this.$store.getters.userInfo.projectId,
  22. label: this.$store.getters.userInfo.project,
  23. }
  24. let initIsOpenBlockedResources = false
  25. let initBlockedResources = []
  26. if (this.cloneData) {
  27. const { tenant, tenant_id, skip_sync_resources = [] } = this.cloneData
  28. if (tenant || tenant_id) {
  29. initialProject = {
  30. key: tenant_id,
  31. label: tenant,
  32. }
  33. }
  34. if (skip_sync_resources.length > 0) {
  35. initIsOpenBlockedResources = true
  36. initBlockedResources = skip_sync_resources
  37. }
  38. }
  39. return {
  40. form: {
  41. fc: this.$form.createForm(this, {
  42. onValuesChange: this.handleValuesChange,
  43. }),
  44. fd: {
  45. domain: '',
  46. share_mode: 'account_domain',
  47. },
  48. },
  49. keySecretFieldInit: keySecretFields[this.provider.toLowerCase()],
  50. formLayout: {
  51. wrapperCol: {
  52. md: { span: 18 },
  53. xl: { span: 19 },
  54. xxl: { span: 21 },
  55. },
  56. labelCol: {
  57. md: { span: 8 },
  58. xl: { span: 5 },
  59. xxl: { span: 3 },
  60. },
  61. },
  62. domainProjectShow: false,
  63. decorators: {
  64. project: [
  65. 'project',
  66. {
  67. initialValue: initialProject,
  68. rules: [
  69. { required: true, message: this.$t('rules.project') },
  70. ],
  71. },
  72. ],
  73. isOpenBlockedResources: [
  74. 'isOpenBlockedResources',
  75. {
  76. initialValue: initIsOpenBlockedResources,
  77. valuePropName: 'checked',
  78. },
  79. ],
  80. blockedResources: [
  81. 'blockedResources',
  82. {
  83. initialValue: initBlockedResources,
  84. rules: [
  85. { required: true, message: this.$t('common.tips.select', [this.$t('cloudenv.block_resources_type')]) },
  86. ],
  87. },
  88. ],
  89. },
  90. }
  91. },
  92. computed: {
  93. keySecretField () {
  94. return keySecretFields[this.provider.toLowerCase()]
  95. },
  96. isAliyun () {
  97. return this.provider.toLowerCase() === 'aliyun'
  98. },
  99. },
  100. watch: {
  101. provider (val) {
  102. this.decorators = this.getDecorators()
  103. },
  104. },
  105. activated () { // 使 DomainProject 组件避免被缓存住
  106. this.domainProjectShow = true
  107. },
  108. deactivated () {
  109. this.domainProjectShow = false
  110. if (this.keepAliveFields) return
  111. this.form.fc.resetFields()
  112. },
  113. created () {
  114. },
  115. methods: {
  116. transformParams (params) {
  117. // 处理屏蔽同步资源
  118. if (params.isOpenBlockedResources) {
  119. params.skip_sync_resources = params.blockedResources
  120. delete params.isOpenBlockedResources
  121. delete params.blockedResources
  122. }
  123. // 针对oracle cloud oracle_private_pem参数做转换处理
  124. if (params.oracle_private_pem) {
  125. params.oracle_private_key = params.oracle_private_pem
  126. delete params.oracle_private_pem
  127. }
  128. if (this.provider === PROVIDER_MAP.VMware.key) {
  129. if (params.zone) {
  130. params.zone = params.zone?.key
  131. delete params.cloudregion
  132. }
  133. }
  134. if (this.provider === EXTRA_HYPERVISORS.CephFS.key) {
  135. if (params.mon_host || params.secret || params.option_name) {
  136. params.options = params.options || {}
  137. params.options.mon_host = params.mon_host
  138. params.options.password = params.secret
  139. params.options.name = params.option_name
  140. delete params.mon_host
  141. delete params.secret
  142. delete params.option_name
  143. }
  144. }
  145. return params
  146. },
  147. validateForm () {
  148. return new Promise((resolve, reject) => {
  149. this.form.fc.validateFields((err, values) => {
  150. if (err) {
  151. reject(err)
  152. } else {
  153. const params = {}
  154. R.forEachObjIndexed((value, key) => {
  155. if (R.is(String, value)) {
  156. params[key] = value.trim()
  157. } else {
  158. params[key] = value
  159. }
  160. }, values)
  161. if (this.provider === 'Huawei' && !params.environment) {
  162. params.environment = 'ChinaCloud'
  163. }
  164. resolve(this.transformParams(params))
  165. }
  166. })
  167. })
  168. },
  169. project_change () {
  170. const proxySettingref = this.$refs.proxySetting
  171. if (proxySettingref && proxySettingref.fetchQueryProxy) {
  172. // 根据域获取代理列表信息
  173. proxySettingref.fetchQueryProxy()
  174. }
  175. },
  176. async handleValuesChange (vm, changedFields) {
  177. // await this.$nextTick()
  178. const fields = Object.keys(changedFields)
  179. if (changedFields && fields.length > 0) {
  180. fields.forEach(field => {
  181. this.$set(this.form.fd, field, changedFields[field])
  182. // this.form.fd[field] = changedFields[field]
  183. const fn = this[`${field}_change`]
  184. if (fn && typeof fn === 'function') {
  185. fn()
  186. }
  187. })
  188. }
  189. },
  190. },
  191. }