Network.vue 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. <template>
  2. <page-list
  3. :hideRowselect="true"
  4. :list="list"
  5. :columns="columns"
  6. :group-actions="groupActions"
  7. :single-actions="singleActions" />
  8. </template>
  9. <script>
  10. import * as R from 'ramda'
  11. import WindowsMixin from '@/mixins/windows'
  12. import ListMixin from '@/mixins/list'
  13. import {
  14. getStatusTableColumn,
  15. getBrandTableColumn,
  16. getProjectTableColumn,
  17. getRegionTableColumn,
  18. } from '@/utils/common/tableColumn'
  19. import {
  20. getNameFilter,
  21. getStatusFilter,
  22. getBrandFilter,
  23. getTenantFilter,
  24. getDomainFilter,
  25. getRegionFilter,
  26. } from '@/utils/common/tableFilter'
  27. export default {
  28. name: 'NetworkListForRouteTableSidePage',
  29. mixins: [WindowsMixin, ListMixin],
  30. props: {
  31. resId: String,
  32. data: {
  33. type: Object,
  34. required: true,
  35. },
  36. },
  37. data () {
  38. const brandFilter = getBrandFilter('network_manage_brands')
  39. if (!R.find(R.propEq('key', 'OneCloud'))(brandFilter.items)) {
  40. brandFilter.items.push({ key: 'OneCloud', label: 'OneCloud' })
  41. }
  42. return {
  43. list: this.$list.createList(this, {
  44. id: 'networkListForVpcNetworkSidePage',
  45. resource: 'networks',
  46. getParams: { details: true, route_table_id: this.resId },
  47. filterOptions: {
  48. name: getNameFilter(),
  49. status: getStatusFilter('network'),
  50. ip_match: {
  51. label: 'IP',
  52. },
  53. brand: brandFilter,
  54. projects: getTenantFilter(),
  55. project_domains: getDomainFilter(),
  56. region: getRegionFilter(),
  57. },
  58. }),
  59. columns: [
  60. {
  61. field: 'name',
  62. title: this.$t('table.title.name'),
  63. sortable: true,
  64. slots: {
  65. default: ({ row }, h) => {
  66. return [
  67. <side-page-trigger name='NetworkSidePage' id={row.id} vm={this}>{row.name}</side-page-trigger>,
  68. ]
  69. },
  70. },
  71. },
  72. getStatusTableColumn({ statusModule: 'network' }),
  73. {
  74. field: 'ip',
  75. title: this.$t('network.text_213'),
  76. width: 180,
  77. slots: {
  78. default: ({ row }) => {
  79. return [
  80. <div>{ this.$t('network.ip.start', [row.guest_ip_start, row.guest_ip_mask])}</div>,
  81. <div>{ this.$t('network.ip.end', [row.guest_ip_end, row.guest_ip_mask])}</div>,
  82. ]
  83. },
  84. },
  85. },
  86. {
  87. field: 'ip6',
  88. title: this.$t('network.ipv6.address'),
  89. width: 180,
  90. slots: {
  91. default: ({ row }) => {
  92. if (!row.guest_ip6_start || !row.guest_ip6_end) {
  93. return '-'
  94. }
  95. return [
  96. <div>{ this.$t('network.ip.start', [row.guest_ip6_start, row.guest_ip6_mask])}</div>,
  97. <div>{ this.$t('network.ip.end', [row.guest_ip6_end, row.guest_ip6_mask])}</div>,
  98. ]
  99. },
  100. },
  101. },
  102. {
  103. field: 'ports',
  104. title: this.$t('network.text_622'),
  105. minWidth: 100,
  106. slots: {
  107. default: ({ row }) => {
  108. if (this.isPreLoad && !row.ports) return [<data-loading />]
  109. return [
  110. <div class='text-truncate'>{ this.$t('network.text_727', [row.ports])}</div>,
  111. <div class='text-truncate'>{ this.$t('network.text_728', [row.ports_used])}</div>,
  112. ]
  113. },
  114. },
  115. },
  116. getBrandTableColumn(),
  117. getProjectTableColumn(),
  118. getRegionTableColumn(),
  119. ],
  120. groupActions: [],
  121. singleActions: [],
  122. }
  123. },
  124. created () {
  125. this.list.fetchData()
  126. },
  127. }
  128. </script>