Form.vue 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  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" />
  9. </a-form-item>
  10. <a-form-item :label="$t('k8s.text_23')">
  11. <namespace-select v-decorator="decorators.namespace" :cluster="cluster" @input="setNamespace" :namespaceObj.sync="namespaceObj" />
  12. </a-form-item>
  13. <a-form-item :label="$t('k8s.text_82')" required>
  14. <labels :decorators="decorators.labels" ref="labelRef" :firstCanDelete="false" />
  15. </a-form-item>
  16. </a-form>
  17. </div>
  18. </template>
  19. <script>
  20. import ClusterSelect from '@K8S/sections/ClusterSelect'
  21. import NamespaceSelect from '@K8S/sections/NamespaceSelect'
  22. import Labels from '@K8S/sections/Labels'
  23. import { getLabels } from '@K8S/utils'
  24. import k8sCreateMixin from '@K8S/mixins/create'
  25. export default {
  26. name: 'K8sConfigmapCreate',
  27. components: {
  28. ClusterSelect,
  29. NamespaceSelect,
  30. Labels,
  31. },
  32. mixins: [k8sCreateMixin],
  33. data () {
  34. return {
  35. form: {
  36. fc: this.$form.createForm(this),
  37. },
  38. formItemLayout: {
  39. labelCol: { span: 4 },
  40. wrapperCol: { span: 20 },
  41. },
  42. decorators: {
  43. name: [
  44. 'name',
  45. {
  46. validateFirst: true,
  47. rules: [
  48. { required: true, message: this.$t('k8s.text_60') },
  49. { min: 2, max: 24, message: this.$t('k8s.text_132'), trigger: 'blur' },
  50. { validator: this.$validate('k8sName') },
  51. ],
  52. },
  53. ],
  54. cluster: [
  55. 'cluster',
  56. {
  57. initialValue: this.$store.state.common.k8s.cluster,
  58. rules: [
  59. { required: true, message: this.$t('k8s.text_30'), trigger: 'blur' },
  60. ],
  61. },
  62. ],
  63. namespace: [
  64. 'namespace',
  65. {
  66. initialValue: this.$store.state.common.k8s.namespace,
  67. rules: [
  68. { required: true, message: this.$t('k8s.text_61'), trigger: 'blur' },
  69. ],
  70. },
  71. ],
  72. labels: {
  73. key: i => [
  74. `labelKeys[${i}]`,
  75. {
  76. rules: [
  77. { required: true, message: this.$t('k8s.text_138') },
  78. ],
  79. },
  80. ],
  81. value: i => [
  82. `labelValues[${i}]`,
  83. {
  84. rules: [
  85. { required: true, message: this.$t('k8s.text_139') },
  86. ],
  87. },
  88. ],
  89. },
  90. },
  91. namespaceObj: {},
  92. }
  93. },
  94. mounted () {
  95. this.$refs.labelRef.add()
  96. },
  97. methods: {
  98. validateForm () {
  99. return new Promise((resolve, reject) => {
  100. this.form.fc.validateFieldsAndScroll({ scroll: { alignWithTop: true, offsetTop: 100 } }, (err, values) => {
  101. if (!err) {
  102. resolve(values)
  103. } else {
  104. reject(err)
  105. }
  106. })
  107. })
  108. },
  109. async _doCreate (data) {
  110. await new this.$Manager('configmaps', 'v1').create({ data })
  111. },
  112. async doCreate () {
  113. try {
  114. const values = await this.validateForm()
  115. const labels = getLabels(values, 'labelKeys', 'labelValues')
  116. const params = {
  117. name: values.name,
  118. cluster: values.cluster,
  119. namespace: values.namespace,
  120. data: labels,
  121. }
  122. await this._doCreate(params)
  123. this.$message.success(this.$t('k8s.text_46'))
  124. } catch (error) {
  125. throw error
  126. }
  127. },
  128. },
  129. }
  130. </script>