columns.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. import HostColumn from '@Network/views/wire/sections/hosts'
  2. import {
  3. getNameDescriptionTableColumn,
  4. getRegionTableColumn,
  5. getCopyWithContentTableColumn,
  6. getPublicScopeTableColumn,
  7. getProjectDomainTableColumn,
  8. getBrandTableColumn,
  9. getTagTableColumn, getStatusTableColumn,
  10. getTimeTableColumn,
  11. } from '@/utils/common/tableColumn'
  12. import i18n from '@/locales'
  13. import { getBandwidthTableColumn, getMTUTableColumn } from '../utils/columns'
  14. export default {
  15. created () {
  16. this.columns = [
  17. getNameDescriptionTableColumn({
  18. onManager: this.onManager,
  19. hideField: true,
  20. slotCallback: row => {
  21. return (
  22. <side-page-trigger onTrigger={ () => this.handleOpenSidepage(row) }>{ row.name }</side-page-trigger>
  23. )
  24. },
  25. }),
  26. getStatusTableColumn({ statusModule: 'wire', vm: this }),
  27. getTagTableColumn({ onManager: this.onManager, resource: 'wires', columns: () => this.columns }),
  28. getBandwidthTableColumn(),
  29. getMTUTableColumn(),
  30. getCopyWithContentTableColumn({ field: 'vpc', title: 'VPC', sortable: true }),
  31. {
  32. field: 'networks',
  33. title: i18n.t('network.text_695'),
  34. width: 100,
  35. sortable: true,
  36. slots: {
  37. default: ({ row }) => {
  38. const handleVisibleChange = async (visible) => {
  39. if (!visible) return
  40. const hasLoaded = Array.isArray(row.wireNetworks) || Array.isArray(row.wireHosts)
  41. if (hasLoaded || row._loadingWireDetails || !row.id) return
  42. this.$set(row, '_loadingWireDetails', true)
  43. try {
  44. await this.loadDetails({ row })
  45. } finally {
  46. this.$set(row, '_loadingWireDetails', false)
  47. }
  48. }
  49. const columns = [
  50. {
  51. field: 'name',
  52. title: i18n.t('network.text_21'),
  53. width: '25%',
  54. slots: {
  55. default: ({ row }) => row.name,
  56. },
  57. },
  58. {
  59. field: 'server_type',
  60. title: i18n.t('network.text_249'),
  61. width: '25%',
  62. formatter: ({ cellValue }) => {
  63. return this.$t('networkServerType')[cellValue] || i18n.t('network.text_507')
  64. },
  65. },
  66. {
  67. field: 'guest_ip_start',
  68. title: i18n.t('network.text_607'),
  69. width: '25%',
  70. slots: {
  71. default: ({ row }) => <div>{ row.guest_ip_start }</div>,
  72. },
  73. },
  74. {
  75. field: 'guest_ip_end',
  76. title: i18n.t('network.text_608'),
  77. width: '25%',
  78. slots: {
  79. default: ({ row }) => <div>{ row.guest_ip_end }</div>,
  80. },
  81. },
  82. ]
  83. const networks = Array.isArray(row.wireNetworks) ? row.wireNetworks : null
  84. const hosts = Array.isArray(row.wireHosts) ? row.wireHosts : null
  85. const hasLoadedContent = (networks && networks.length > 0) || (hosts && hosts.length > 0)
  86. const contentStyle = hasLoadedContent ? { minWidth: '640px', maxWidth: '80vw' } : {}
  87. const keySuffix = `${networks ? networks.length : 'n'}-${hosts ? hosts.length : 'h'}`
  88. return [<a-popover trigger="hover" destroyTooltipOnHide onVisibleChange={handleVisibleChange} key={`wire-network-${row.id}-${keySuffix}`}>
  89. <div slot="content" style={contentStyle}>
  90. {networks || hosts ? (
  91. <div>
  92. <HostColumn hosts={ hosts || [] } />
  93. <div style="font-size: larger;font-weight: bold;" class="mt-2 mb-2">{i18n.t('network.wire.networks')}:</div>
  94. {networks && networks.length > 0 ? (
  95. <vxe-grid size="mini" border showOverflow={false} columns={columns} data={ networks } />
  96. ) : (
  97. <div>{i18n.t('common.notData')}</div>
  98. )}
  99. </div>
  100. ) : (
  101. <data-loading />
  102. )}
  103. </div>
  104. <span style="color: var(--antd-wave-shadow-color)" onMouseenter={() => handleVisibleChange(true)}>{i18n.t('compute.text_619', [row.networks])}</span>
  105. </a-popover>]
  106. },
  107. },
  108. },
  109. getBrandTableColumn(),
  110. getPublicScopeTableColumn({ vm: this, resource: 'wires' }),
  111. getProjectDomainTableColumn(),
  112. getRegionTableColumn(),
  113. getTimeTableColumn(),
  114. ]
  115. },
  116. }