index.vue 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. <template>
  2. <div>
  3. <filters ref="FILTERS" :rds-item="rdsItem" />
  4. <size-filters ref="SIZE_FILTER" :rds-item="rdsItem">
  5. <div v-if="$slots.zone" slot="zone">
  6. <slot name="zone" />
  7. </div>
  8. </size-filters>
  9. <list ref="LIST" @change="handleSkuChange" />
  10. <!-- aws zone -->
  11. <a-form-item :label="$t('db.text_133')" v-bind="formItemLayout" v-if="form.fd.provider === 'Aws'">
  12. <a-radio-group v-decorator="['multi_az',{initialValue: false}]">
  13. <a-radio-button key="multi_az_no" :value="false">{{$t('db.zone_single')}}</a-radio-button>
  14. <a-radio-button key="multi_az_yes" :value="true" :disabled="!zoneMultiEnabled">{{$t('db.zone_multi')}}</a-radio-button>
  15. </a-radio-group>
  16. </a-form-item>
  17. <disk-input :selectedSku="selectedSku" :min="rdsItem ? rdsItem.disk_size_gb : -1" />
  18. </div>
  19. </template>
  20. <script>
  21. import Filters from './components/Filters'
  22. import SizeFilters from './components/SizeFilters'
  23. import List from './components/List'
  24. import DiskInput from './components/DiskInput'
  25. export default {
  26. name: 'rdsSku',
  27. components: {
  28. Filters,
  29. SizeFilters,
  30. List,
  31. DiskInput,
  32. },
  33. props: {
  34. disableds: {
  35. type: Array,
  36. default: () => {
  37. return []
  38. },
  39. },
  40. rdsItem: {
  41. type: Object,
  42. },
  43. },
  44. inject: ['form', 'formItemLayout'],
  45. provide () {
  46. return {
  47. disableds: this.disabledData,
  48. }
  49. },
  50. data () {
  51. const _F = () => {}
  52. return {
  53. selectedSku: {},
  54. fetchFilters: _F,
  55. fetchSpecs: _F,
  56. fetchSkus: _F,
  57. }
  58. },
  59. computed: {
  60. disabledData () {
  61. const _ = {}
  62. this.disableds.forEach(item => {
  63. _[item] = true
  64. })
  65. return _
  66. },
  67. // aws用
  68. zoneMultiEnabled () {
  69. if (this.form.fd.provider !== 'Aws') {
  70. return true
  71. }
  72. return this.selectedSku ? this.selectedSku.multi_az : false
  73. },
  74. },
  75. mounted () {
  76. const { fetchFilters, getVersion } = this.$refs.FILTERS
  77. const { fetchSpecs } = this.$refs.SIZE_FILTER
  78. const { fetchSkus } = this.$refs.LIST
  79. this.fetchCapability = fetchFilters
  80. this.fetchSpecs = fetchSpecs
  81. this.fetchSkus = fetchSkus
  82. this.linkageValue = getVersion
  83. },
  84. methods: {
  85. handleSkuChange (sku) {
  86. this.selectedSku = sku
  87. this.initMultiAz(sku)
  88. },
  89. initMultiAz (sku) {
  90. if (this.form.fd.provider !== 'Aws') {
  91. return
  92. }
  93. if (sku && !sku.multi_az) {
  94. this.form.fc.setFieldsValue({
  95. multi_az: false,
  96. })
  97. }
  98. },
  99. },
  100. }
  101. </script>