AccountLisCreate.vue 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. <template>
  2. <base-dialog @cancel="cancelDialog">
  3. <div slot="header">{{$t('db.text_282')}}</div>
  4. <a-form slot="body" :form="form.fc" class="mt-3" v-bind="formItemLayout">
  5. <a-form-item :label="$t('db.text_283')">
  6. <a-input :placeholder="$t('validator.dbName')" v-decorator="decorators.name" />
  7. </a-form-item>
  8. <a-form-item :label="$t('db.text_284')">
  9. <a-radio-group v-decorator="decorators.account_privilege">
  10. <a-radio v-for="k in Object.keys(privileges)" :key="k" :value="k">
  11. {{privileges[k]}}
  12. </a-radio>
  13. </a-radio-group>
  14. </a-form-item>
  15. <a-form-item :label="$t('db.text_195')">
  16. <server-password :loginTypes="loginTypes" :decorator="decorators.loginConfig" :form="form" />
  17. </a-form-item>
  18. </a-form>
  19. <div slot="footer">
  20. <a-button type="primary" @click="handleConfirm" :loading="loading">{{ $t('dialog.ok') }}</a-button>
  21. <a-button @click="cancelDialog">{{ $t('dialog.cancel') }}</a-button>
  22. </div>
  23. </base-dialog>
  24. </template>
  25. <script>
  26. import { ACCOUNT_PRIVILEGES } from '../constants'
  27. import ServerPassword from '@Compute/sections/ServerPassword'
  28. import DialogMixin from '@/mixins/dialog'
  29. import WindowsMixin from '@/mixins/windows'
  30. import validateForm, { passwordValidator } from '@/utils/validate'
  31. export default {
  32. name: 'RedisAccountDialog',
  33. components: {
  34. ServerPassword,
  35. },
  36. mixins: [DialogMixin, WindowsMixin],
  37. data () {
  38. return {
  39. loading: false,
  40. loginTypes: ['random', 'password'],
  41. form: {
  42. fc: this.$form.createForm(this),
  43. },
  44. formItemLayout: {
  45. wrapperCol: { span: 19 },
  46. labelCol: { span: 5 },
  47. },
  48. }
  49. },
  50. computed: {
  51. privileges () {
  52. const ret = ACCOUNT_PRIVILEGES
  53. if (this.params.redisItem.brand === 'Qcloud') {
  54. delete ret.repl
  55. }
  56. return ret
  57. },
  58. decorators () {
  59. const { initialValues = {} } = this.params
  60. const decorators = {
  61. name: [
  62. 'name',
  63. {
  64. initialValue: initialValues.name,
  65. validateFirst: true,
  66. rules: [
  67. { required: true, message: this.$t('db.text_136') },
  68. { validator: validateForm('dbName') },
  69. ],
  70. },
  71. ],
  72. account_privilege: [
  73. 'account_privilege',
  74. {
  75. initialValue: 'read',
  76. rules: [{ required: true, message: this.$t('db.text_136') }],
  77. },
  78. ],
  79. password: [
  80. 'password',
  81. {
  82. validateFirst: true,
  83. rules: [
  84. { required: true, message: this.$t('db.text_207') },
  85. { validator: passwordValidator },
  86. ],
  87. },
  88. ],
  89. checkPassword: [
  90. 'checkPassword',
  91. {
  92. initialValue: initialValues.ip_list,
  93. rules: [
  94. { required: true, message: this.$t('db.text_208') },
  95. { validator: this.rulesCheckPassword },
  96. ],
  97. },
  98. ],
  99. loginConfig: {
  100. loginType: [
  101. 'loginType',
  102. {
  103. initialValue: 'random',
  104. },
  105. ],
  106. },
  107. }
  108. return decorators
  109. },
  110. },
  111. methods: {
  112. rulesCheckPassword (rule, value, callback) {
  113. const form = this.form.fc
  114. if (value && value !== form.getFieldValue('password')) {
  115. callback(new Error(this.$t('db.text_209')))
  116. } else {
  117. callback()
  118. }
  119. },
  120. validateForm () {
  121. return new Promise((resolve, reject) => {
  122. this.form.fc.validateFields((err, values) => {
  123. if (!err) {
  124. resolve(values)
  125. } else {
  126. reject(err)
  127. }
  128. })
  129. })
  130. },
  131. async handleConfirm () {
  132. this.loading = true
  133. try {
  134. const values = await this.validateForm()
  135. const params = {
  136. ...values,
  137. elasticcache: this.params.redisItem.id,
  138. }
  139. if (params.loginType === 'random') {
  140. params.reset_password = true
  141. }
  142. delete params.checkPassword
  143. delete params.loginType
  144. await this.params.list.onManager('create', {
  145. managerArgs: {
  146. data: params,
  147. },
  148. })
  149. this.loading = false
  150. this.cancelDialog()
  151. } catch (error) {
  152. this.loading = false
  153. }
  154. },
  155. },
  156. }
  157. </script>