ImageSecretCreate.vue 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. <template>
  2. <base-dialog @cancel="cancelDialog">
  3. <div slot="header">{{ params.title || $t('k8s.create') }}</div>
  4. <div slot="body">
  5. <a-form
  6. v-bind="formItemLayout"
  7. :form="form.fc">
  8. <a-form-item :label="$t('k8s.text_50')">
  9. <a-input v-decorator="decorators.name" :placeholder="$t('k8s.text_51')" />
  10. </a-form-item>
  11. <a-form-item :label="$t('k8s.text_19')">
  12. <cluster-select v-decorator="decorators.cluster" :setDefault="false" :disabled="true" />
  13. </a-form-item>
  14. <a-form-item :label="$t('k8s.text_23')">
  15. <namespace-select v-decorator="decorators.namespace" :cluster="params.cluster" :setDefault="false" :disabled="true" />
  16. </a-form-item>
  17. <a-form-item :label="$t('k8s.text_52')" prop="server">
  18. <a-input v-decorator="decorators.server" :placeholder="$t('k8s.text_53')" />
  19. </a-form-item>
  20. <a-form-item :label="$t('k8s.text_54')">
  21. <a-input v-decorator="decorators.user" :placeholder="$t('k8s.text_55')" />
  22. </a-form-item>
  23. <a-form-item :label="$t('k8s.text_56')">
  24. <a-input-password v-decorator="decorators.password" :placeholder="$t('k8s.text_57')" />
  25. </a-form-item>
  26. <a-form-item :label="$t('k8s.text_58')">
  27. <a-input v-decorator="decorators.email" :placeholder="$t('k8s.text_59')" />
  28. </a-form-item>
  29. </a-form>
  30. </div>
  31. <div slot="footer">
  32. <a-button type="primary" @click="handleConfirm" :loading="loading">{{ $t('dialog.ok') }}</a-button>
  33. <a-button @click="cancelDialog">{{ $t('dialog.cancel') }}</a-button>
  34. </div>
  35. </base-dialog>
  36. </template>
  37. <script>
  38. import ClusterSelect from '@K8S/sections/ClusterSelect'
  39. import NamespaceSelect from '@K8S/sections/NamespaceSelect'
  40. import { SECRET_DEFAULT_TYPE } from '@K8S/constants'
  41. import DialogMixin from '@/mixins/dialog'
  42. import WindowsMixin from '@/mixins/windows'
  43. import { REGEXP } from '@/utils/validate'
  44. const validateEmail = (rule, value, cb) => {
  45. if (!value) {
  46. cb()
  47. } else {
  48. const { regexp, message } = REGEXP.email
  49. if (regexp.test(value)) {
  50. cb()
  51. } else {
  52. cb(Error(message))
  53. }
  54. }
  55. }
  56. export default {
  57. name: 'K8SImageSecretCreateDialog',
  58. components: {
  59. ClusterSelect,
  60. NamespaceSelect,
  61. },
  62. mixins: [DialogMixin, WindowsMixin],
  63. data () {
  64. return {
  65. loading: false,
  66. form: {
  67. fc: this.$form.createForm(this),
  68. fd: {},
  69. },
  70. decorators: {
  71. name: [
  72. 'name',
  73. {
  74. validateFirst: true,
  75. rules: [
  76. { required: true, message: this.$t('k8s.text_60') },
  77. { validator: this.$validate('k8sName') },
  78. ],
  79. },
  80. ],
  81. cluster: [
  82. 'cluster',
  83. {
  84. initialValue: this.params.cluster,
  85. rules: [
  86. { required: true, message: this.$t('k8s.text_30'), trigger: 'blur' },
  87. ],
  88. },
  89. ],
  90. namespace: [
  91. 'namespace',
  92. {
  93. initialValue: this.params.namespace,
  94. rules: [
  95. { required: true, message: this.$t('k8s.text_61'), trigger: 'blur' },
  96. ],
  97. },
  98. ],
  99. server: [
  100. 'server',
  101. {
  102. rules: [
  103. { required: true, message: this.$t('k8s.text_53'), trigger: 'blur' },
  104. ],
  105. },
  106. ],
  107. user: [
  108. 'user',
  109. {
  110. rules: [
  111. { required: true, message: this.$t('k8s.text_62'), trigger: 'blur' },
  112. ],
  113. },
  114. ],
  115. password: [
  116. 'password',
  117. {
  118. rules: [
  119. { required: true, message: this.$t('k8s.text_57'), trigger: 'blur' },
  120. ],
  121. },
  122. ],
  123. email: [
  124. 'email',
  125. {
  126. rules: [
  127. { validator: validateEmail, trigger: 'blur' },
  128. ],
  129. },
  130. ],
  131. },
  132. formItemLayout: {
  133. wrapperCol: {
  134. span: 20,
  135. },
  136. labelCol: {
  137. span: 4,
  138. },
  139. },
  140. }
  141. },
  142. created () {
  143. this.secretsM = new this.$Manager('secrets', 'v1')
  144. },
  145. methods: {
  146. validateForm () {
  147. return new Promise((resolve, reject) => {
  148. this.form.fc.validateFields((err, values) => {
  149. if (!err) {
  150. resolve(values)
  151. } else {
  152. reject(err)
  153. }
  154. })
  155. })
  156. },
  157. async doCreate (values) {
  158. const data = {
  159. cluster: values.cluster,
  160. dockerConfigJson: {
  161. email: values.email,
  162. password: values.password,
  163. user: values.user,
  164. server: values.server,
  165. },
  166. name: values.name,
  167. namespace: values.namespace,
  168. type: SECRET_DEFAULT_TYPE,
  169. }
  170. try {
  171. await this.secretsM.create({ data })
  172. } catch (error) {
  173. throw error
  174. }
  175. },
  176. async handleConfirm () {
  177. this.loading = true
  178. try {
  179. const values = await this.validateForm()
  180. await this.doCreate(values)
  181. this.loading = false
  182. this.cancelDialog()
  183. this.params.success && this.params.success(values.name)
  184. } catch (error) {
  185. this.loading = false
  186. }
  187. },
  188. },
  189. }
  190. </script>