MultiZones.vue 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <template>
  2. <div>
  3. <a-form-item class="mb-0">
  4. <a-checkbox :value="checked" @change="onChecked">
  5. {{ $t('db.redis.replicas_zones') }}
  6. </a-checkbox>
  7. <div v-for="(z, i) of this.selectedZones" :key="i">
  8. <span>{{ $t('db.redis.replicas', [i + 1]) + ' ' }}</span>
  9. <base-select
  10. class="w-50"
  11. v-model="selectedZones[i]"
  12. isDefaultSelect
  13. filterable
  14. :key="'slave_zone_'+i+z"
  15. :options="options"
  16. @change="onChange"
  17. style="display: inline-block;" />
  18. </div>
  19. </a-form-item>
  20. </div>
  21. </template>
  22. <script>
  23. export default {
  24. name: 'MultiZones',
  25. props: {
  26. form: {
  27. type: Object,
  28. },
  29. options: {
  30. type: Array,
  31. },
  32. },
  33. data () {
  34. return {
  35. checked: false,
  36. selectedZones: undefined,
  37. }
  38. },
  39. watch: {
  40. 'form.fd.sku.replicas_num' () {
  41. this.resetZones()
  42. },
  43. 'form.fd.zone' () {
  44. this.resetZones()
  45. },
  46. },
  47. methods: {
  48. resetZones () {
  49. if (!this.checked) {
  50. this.selectedZones = undefined
  51. } else {
  52. const selectedZones = []
  53. const mainZone = this.form.fd.zone || ''
  54. const replicasNumber = this.form.fd.sku.replicas_num || 0
  55. for (let i = 0; i < replicasNumber; i++) {
  56. selectedZones.push(mainZone)
  57. }
  58. this.selectedZones = selectedZones
  59. }
  60. this.form.fc.setFieldsValue({ slave_zones: this.selectedZones })
  61. },
  62. onChecked (v) {
  63. this.checked = v.target.checked
  64. this.resetZones()
  65. },
  66. onChange () {
  67. this.form.fc.setFieldsValue({ slave_zones: this.selectedZones })
  68. },
  69. },
  70. }
  71. </script>
  72. <style scoped>
  73. </style>