Form.vue 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. <template>
  2. <div class="w-75">
  3. <a-form :form="form.fc" v-bind="formItemLayout">
  4. <a-form-item :label="$t('k8s.text_41')">
  5. <a-input :placeholder="$t('k8s.text_60')" v-decorator="decorators.name" />
  6. </a-form-item>
  7. <a-form-item :label="$t('k8s.text_19')">
  8. <cluster-select v-decorator="decorators.cluster" @input="setCluster" :clusterObj.sync="clusterObj" />
  9. </a-form-item>
  10. <a-form-item :label="$t('k8s.text_23')">
  11. <namespace-select v-decorator="decorators.namespace" @input="setNamespace" :cluster="cluster" :namespaceObj.sync="namespaceObj" />
  12. </a-form-item>
  13. <a-form-item :label="$t('k8s.text_339')" class="mb-0">
  14. <a-radio-group v-model="form.fd.selectorType">
  15. <a-radio-button value="deployments">{{$t('k8s.text_4')}}</a-radio-button>
  16. <a-radio-button value="statefulsets">{{$t('k8s.text_5')}}</a-radio-button>
  17. <a-radio-button value="daemonsets">{{$t('k8s.text_6')}}</a-radio-button>
  18. </a-radio-group>
  19. <a-form-item>
  20. <base-select
  21. v-decorator="decorators.selector"
  22. :resource="form.fd.selectorType"
  23. version="v1"
  24. idKey="name"
  25. :item.sync="selectedObj"
  26. :need-params="true"
  27. :isDefaultSelect="true"
  28. :params="resParams"
  29. :select-props="{ placeholder: $t('k8s.text_77') }" />
  30. </a-form-item>
  31. </a-form-item>
  32. <a-form-item :label="$t('k8s.text_13')">
  33. <port-mapping
  34. :form="form"
  35. ignore-none
  36. :decorators="decorators.portMappings"
  37. :cluster-obj="clusterObj" />
  38. </a-form-item>
  39. </a-form>
  40. </div>
  41. </template>
  42. <script>
  43. import ClusterSelect from '@K8S/sections/ClusterSelect'
  44. import NamespaceSelect from '@K8S/sections/NamespaceSelect'
  45. import PortMapping from '@K8S/sections/PortMapping'
  46. import k8sCreateMixin from '@K8S/mixins/create'
  47. import { getServiceConfigDecorators, getServiceCreateParams } from '@K8S/utils'
  48. export default {
  49. name: 'K8sServiceCreate',
  50. components: {
  51. ClusterSelect,
  52. NamespaceSelect,
  53. PortMapping,
  54. },
  55. mixins: [k8sCreateMixin],
  56. data () {
  57. return {
  58. selectedObj: {},
  59. form: {
  60. fc: this.$form.createForm(this),
  61. fd: {
  62. selectorType: 'deployments',
  63. },
  64. },
  65. formItemLayout: {
  66. labelCol: { span: 4 },
  67. wrapperCol: { span: 20 },
  68. },
  69. decorators: {
  70. ...getServiceConfigDecorators(),
  71. name: [
  72. 'name',
  73. {
  74. validateFirst: true,
  75. rules: [
  76. { required: true, message: this.$t('k8s.text_60') },
  77. { min: 2, max: 24, message: this.$t('k8s.text_132'), trigger: 'blur' },
  78. { validator: this.$validate('k8sName') },
  79. ],
  80. },
  81. ],
  82. cluster: [
  83. 'cluster',
  84. {
  85. initialValue: this.$store.state.common.k8s.cluster,
  86. rules: [
  87. { required: true, message: this.$t('k8s.text_30'), trigger: 'blur' },
  88. ],
  89. },
  90. ],
  91. namespace: [
  92. 'namespace',
  93. {
  94. initialValue: this.$store.state.common.k8s.namespace,
  95. rules: [
  96. { required: true, message: this.$t('k8s.text_61'), trigger: 'blur' },
  97. ],
  98. },
  99. ],
  100. selector: [
  101. 'selector',
  102. {
  103. rules: [
  104. { required: true, message: this.$t('k8s.text_77'), trigger: 'blur' },
  105. ],
  106. },
  107. ],
  108. },
  109. clusterObj: {},
  110. namespaceObj: {},
  111. }
  112. },
  113. computed: {
  114. resParams () {
  115. const params = {}
  116. if (this.cluster && this.namespaceObj.name) {
  117. params.cluster = this.cluster
  118. params.limit = 0
  119. params.namespace = this.namespaceObj.id
  120. params.scope = this.$store.getters.scope
  121. params.details = true
  122. }
  123. return params
  124. },
  125. },
  126. methods: {
  127. validateForm () {
  128. return new Promise((resolve, reject) => {
  129. this.form.fc.validateFieldsAndScroll({ scroll: { alignWithTop: true, offsetTop: 100 } }, (err, values) => {
  130. if (!err) {
  131. resolve(values)
  132. } else {
  133. reject(err)
  134. }
  135. })
  136. })
  137. },
  138. async _doCreate (data) {
  139. await new this.$Manager('k8s_services', 'v1').create({ data })
  140. },
  141. async doCreate () {
  142. try {
  143. const values = await this.validateForm()
  144. let params = {
  145. name: values.name,
  146. cluster: values.cluster,
  147. namespace: values.namespace,
  148. selector: this.selectedObj.selector,
  149. }
  150. const service = getServiceCreateParams(values)
  151. params = { ...params, ...service }
  152. await this._doCreate(params)
  153. this.$message.success(this.$t('k8s.text_46'))
  154. } catch (error) {
  155. throw error
  156. }
  157. },
  158. },
  159. }
  160. </script>