Proxmox.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')" :extra="this.$t('common_572')">
  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="$t('cloudenv.verify_method')">
  17. <a-radio-group v-decorator="decorators.verify_method" @change="onVerifyMethodChange">
  18. <a-radio-button v-for="item of verifyMethodOptions" :key="item.key" :value="item.key">{{ item.label }}</a-radio-button>
  19. </a-radio-group>
  20. </a-form-item>
  21. <a-form-item :label="keySecretField.label.k">
  22. <a-input v-decorator="decorators.username" :placeholder="keySecretField.placeholder.k" :suffix="usernameSuffix" />
  23. <div slot="extra" v-if="showDocsLink()">
  24. {{$t('cloudenv.text_236', [keySecretField.text, keySecretField.label.k])}}
  25. <help-link :href="docs[provider.toLowerCase()]">{{$t('cloudenv.text_237')}}</help-link>
  26. </div>
  27. </a-form-item>
  28. <a-form-item :label="keySecretField.label.s">
  29. <a-input-password v-decorator="decorators.password" :placeholder="keySecretField.placeholder.s" />
  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 { keySecretFields } from '@Cloudenv/views/cloudaccount/constants'
  44. import { isRequired } from '@/utils/validate'
  45. import { DOCS_MAP, showDocsLink } from '@/constants/docs'
  46. import createMixin from './createMixin'
  47. import DomainProject from '../../../components/DomainProject'
  48. const verifyMethodOptions = [
  49. { key: 'pam', label: 'PAM' },
  50. { key: 'pve', label: 'PVE' },
  51. ]
  52. export default {
  53. name: 'ProxmoxCreate',
  54. components: {
  55. AutoSync,
  56. DomainProject,
  57. ProxySetting,
  58. ShareMode,
  59. },
  60. mixins: [createMixin],
  61. data () {
  62. const keySecretField = keySecretFields[this.provider.toLowerCase()]
  63. let initDomain = {
  64. key: this.$store.getters.userInfo.projectDomainId,
  65. label: this.$store.getters.userInfo.projectDomain,
  66. }
  67. let initHost = ''
  68. let initPort = 8006
  69. let initVerifyMethod = verifyMethodOptions[0].key
  70. const {
  71. domain_id,
  72. project_domain,
  73. auto_create_project: initAutoCreateProject = false,
  74. account,
  75. access_url = '',
  76. } = this.cloneData
  77. if (domain_id && project_domain) {
  78. initDomain = {
  79. key: domain_id,
  80. label: project_domain,
  81. }
  82. }
  83. if (access_url) {
  84. const str = access_url.replace('https://', '').replace('http://', '')
  85. const list = str.split(':')
  86. initHost = list[0]
  87. initPort = list[1] || 8006
  88. }
  89. if (account && account.includes(verifyMethodOptions[1].key)) {
  90. initVerifyMethod = verifyMethodOptions[1].key
  91. }
  92. return {
  93. verifyMethodOptions,
  94. docs: DOCS_MAP.cloudaccount(),
  95. showDocsLink,
  96. decorators: {
  97. name: [
  98. 'name',
  99. {
  100. validateFirst: true,
  101. rules: [
  102. { required: true, message: this.$t('cloudenv.text_190') },
  103. // { validator: this.$validate('resourceName') },
  104. ],
  105. },
  106. ],
  107. description: ['description'],
  108. host: [
  109. 'host',
  110. {
  111. validateFirst: true,
  112. initialValue: initHost,
  113. rules: [
  114. { required: true, message: this.$t('cloudenv.text_262') },
  115. { validator: this.$validate(['domain', 'IPv4'], true, 'some'), trigger: ['blur', 'change'], message: this.$t('cloudenv.text_269') },
  116. ],
  117. },
  118. ],
  119. port: [
  120. 'port',
  121. {
  122. initialValue: initPort,
  123. rules: [
  124. { type: 'number', min: 0, max: 65535, message: this.$t('cloudenv.text_270'), trigger: 'blur', transform: (v) => parseFloat(v) },
  125. ],
  126. },
  127. ],
  128. verify_method: [
  129. 'verify_method',
  130. {
  131. initialValue: initVerifyMethod,
  132. },
  133. ],
  134. username: [
  135. keySecretField.k,
  136. {
  137. rules: [
  138. { required: true, message: keySecretField.placeholder.k },
  139. ],
  140. },
  141. ],
  142. password: [
  143. keySecretField.s,
  144. {
  145. rules: [
  146. { required: true, message: keySecretField.placeholder.s },
  147. ],
  148. },
  149. ],
  150. domain: [
  151. 'domain',
  152. {
  153. initialValue: initDomain,
  154. rules: [
  155. { validator: isRequired(), message: this.$t('rules.domain'), trigger: 'change' },
  156. ],
  157. },
  158. ],
  159. auto_create_project: [
  160. 'auto_create_project',
  161. {
  162. initialValue: initAutoCreateProject,
  163. valuePropName: 'checked',
  164. },
  165. ],
  166. },
  167. keepAliveFields: true,
  168. form: {
  169. fd: {
  170. verify_method: initVerifyMethod,
  171. },
  172. },
  173. }
  174. },
  175. computed: {
  176. usernameSuffix () {
  177. const suffix = this.form.fd.verify_method || verifyMethodOptions[0].key
  178. return `@${suffix}`
  179. },
  180. },
  181. methods: {
  182. onVerifyMethodChange (e) {
  183. this.form.fc.setFieldsValue({ verify_method: e.target.value })
  184. },
  185. },
  186. }
  187. </script>