index.vue 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <template>
  2. <div>
  3. <a-form
  4. v-bind="formItemLayout"
  5. :form="form.fc">
  6. <!-- <a-form-item :label="$t('common.name')">
  7. <a-input v-decorator="decorators.name" :placeholder="$t('common.placeholder')" />
  8. </a-form-item> -->
  9. </a-form>
  10. <div v-for="(item, i) in formList" :key="item.key" class="mb-3">
  11. <monitor-form
  12. :panel="panel"
  13. :query-only="queryOnly"
  14. :defaultPanelShow="item.show"
  15. :showDelete="formList.length > 1"
  16. :formItemLayout="formItemLayout"
  17. :timeRangeParams="timeRangeParams"
  18. :extraParams="extraParams"
  19. @nameChange="val => nameChange(val, i)"
  20. @mertricItemChange="val => mertricItemChange(val, i)"
  21. @resetChart="() => resetChart(i)"
  22. @paramsChange="(val, resVal) => paramsChange(val, resVal, i)"
  23. @remove="() => remove(i)" />
  24. </div>
  25. <div class="d-flex align-items-center" v-if="multiQuery">
  26. <a-button type="primary" shape="circle" icon="plus" size="small" :disabled="addDisabled" @click="add" />
  27. <a-button type="link" @click="add" :disabled="addDisabled">{{ $t('monitor.monitor_add') }}</a-button>
  28. </div>
  29. </div>
  30. </template>
  31. <script>
  32. import { uuid } from '@/utils/utils'
  33. import MonitorForm from './form'
  34. export default {
  35. name: 'MonitorForms',
  36. components: {
  37. MonitorForm,
  38. },
  39. props: {
  40. timeRangeParams: {
  41. type: Object,
  42. default: () => ({}),
  43. },
  44. extraParams: {
  45. type: Object,
  46. default: () => ({}),
  47. },
  48. panel: {
  49. type: Object,
  50. default: () => ({}),
  51. },
  52. queryOnly: {
  53. type: Boolean,
  54. default: true,
  55. },
  56. multiQuery: {
  57. type: Boolean,
  58. default: true,
  59. },
  60. },
  61. data () {
  62. return {
  63. formList: [{ key: uuid(), show: true }],
  64. form: {
  65. fc: this.$form.createForm(this),
  66. },
  67. formItemLayout: {
  68. wrapperCol: {
  69. span: 20,
  70. },
  71. labelCol: {
  72. span: 4,
  73. },
  74. },
  75. decorators: {
  76. name: [
  77. 'name',
  78. {
  79. rules: [
  80. { required: true, message: this.$t('monitor.text_7') },
  81. ],
  82. },
  83. ],
  84. },
  85. }
  86. },
  87. computed: {
  88. addDisabled () {
  89. return !this.formList[this.formList.length - 1].model
  90. },
  91. },
  92. methods: {
  93. add () {
  94. const list = this.formList.map(val => ({ ...val, show: false }))
  95. this.formList = list.concat({ key: uuid(), show: true })
  96. },
  97. paramsChange (params, resParams, i) {
  98. this.$set(this.formList[i], 'model', params)
  99. this.$set(this.formList[i], 'result_reducer', resParams)
  100. this.$emit('refresh', params, resParams, i)
  101. },
  102. remove (idx) {
  103. this.formList.splice(idx, 1)
  104. this.$emit('remove', idx)
  105. if (idx === this.formList.length) {
  106. this.formList = this.formList.map((val, i, arr) => {
  107. if (i === arr.length - 1) {
  108. return { ...val, show: true }
  109. }
  110. return { ...val, show: false }
  111. })
  112. }
  113. },
  114. resetChart (i) {
  115. this.$emit('resetChart', i)
  116. },
  117. mertricItemChange (val, i) {
  118. this.$emit('mertricItemChange', val, i)
  119. },
  120. nameChange (name, i) {
  121. this.$emit('nameChange', name, i)
  122. },
  123. },
  124. }
  125. </script>