RouteSet.vue 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. <template>
  2. <page-list
  3. :list="list"
  4. :columns="columns"
  5. :group-actions="groupActions"
  6. :single-actions="singleActions" />
  7. </template>
  8. <script>
  9. import {
  10. getCopyWithContentTableColumn,
  11. getStatusTableColumn,
  12. } from '@/utils/common/tableColumn'
  13. import {
  14. getStatusFilter,
  15. } from '@/utils/common/tableFilter'
  16. import WindowsMixin from '@/mixins/windows'
  17. import ListMixin from '@/mixins/list'
  18. import {
  19. NEXT_HOP_TYPES,
  20. NEXT_HOP_TYPES_MAP,
  21. TYPES,
  22. TYPES_MAP,
  23. } from '../constants'
  24. export default {
  25. name: 'routeListForVpcPeerConnectSidePage',
  26. mixins: [WindowsMixin, ListMixin],
  27. props: {
  28. resId: String,
  29. data: {
  30. type: Object,
  31. required: true,
  32. },
  33. },
  34. data () {
  35. return {
  36. list: this.$list.createList(this, {
  37. id: 'routeListForVpcPeerConnectSidePage',
  38. resource: 'route_table_route_sets',
  39. getParams: { next_hop_id: this.data.id, next_hop_type: 'VpcPeering' },
  40. filterOptions: {
  41. cidr: {
  42. label: this.$t('network.vpc_network.target_address'),
  43. filter: true,
  44. formatter: val => {
  45. return `cidr.contains('${val}')`
  46. },
  47. },
  48. status: getStatusFilter('routeSet'),
  49. next_hop_type: {
  50. label: this.$t('network.next_hop_type'),
  51. dropdown: true,
  52. multiple: true,
  53. items: NEXT_HOP_TYPES.map(v => {
  54. return {
  55. label: v.value,
  56. key: v.key,
  57. }
  58. }),
  59. filter: true,
  60. formatter: val => {
  61. return `next_hop_type.contains("${val}")`
  62. },
  63. },
  64. type: {
  65. label: this.$t('network.text_249'),
  66. dropdown: true,
  67. multiple: true,
  68. items: TYPES.map(v => {
  69. return {
  70. label: v.value,
  71. key: v.key,
  72. }
  73. }),
  74. filter: true,
  75. formatter: val => {
  76. return `type.contains("${val}")`
  77. },
  78. },
  79. },
  80. }),
  81. columns: [
  82. getCopyWithContentTableColumn({
  83. field: 'cidr',
  84. title: this.$t('network.vpc.cidr_block.ipv4.label'),
  85. sortable: true,
  86. }),
  87. getStatusTableColumn({ statusModule: 'routeSet' }),
  88. {
  89. field: 'next_hop_id',
  90. title: this.$t('network.vpc_network.next_hop'),
  91. slots: {
  92. default: ({ row }) => {
  93. return row.next_hop_id
  94. },
  95. },
  96. },
  97. {
  98. field: 'next_hop_type',
  99. title: this.$t('network.next_hop_type'),
  100. slots: {
  101. default: ({ row }) => {
  102. return NEXT_HOP_TYPES_MAP[row.next_hop_type]?.value || row.next_hop_type
  103. },
  104. },
  105. },
  106. {
  107. field: 'type',
  108. title: this.$t('network.text_249'),
  109. slots: {
  110. default: ({ row }) => {
  111. return TYPES_MAP[row.type]?.value || row.type
  112. },
  113. },
  114. },
  115. {
  116. field: 'route_table_id',
  117. title: this.$t('dictionary.route_table'),
  118. slots: {
  119. default: ({ row }) => {
  120. return [
  121. <side-page-trigger name='RouteTableSidePage' options={{ resource: 'route_tables' }} id={row.route_table_id} vm={this}>{row.route_table_id}</side-page-trigger>,
  122. ]
  123. },
  124. },
  125. },
  126. ],
  127. groupActions: [],
  128. singleActions: [],
  129. }
  130. },
  131. created () {
  132. this.list.fetchData()
  133. },
  134. methods: {
  135. refresh () {
  136. this.list.fetchData()
  137. },
  138. handleOpenSidepage (row) {
  139. this.sidePageTriggerHandle(this, 'VpcSidePage', {
  140. id: row.vpc_id,
  141. resource: 'vpcs',
  142. getParams: this.getParam,
  143. }, {
  144. list: this.list,
  145. })
  146. },
  147. },
  148. }
  149. </script>