columns.js 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. import _ from 'lodash'
  2. import { mapGetters } from 'vuex'
  3. import {
  4. getProjectTableColumn,
  5. getRegionTableColumn,
  6. getBrandTableColumn,
  7. getStatusTableColumn,
  8. getCopyWithContentTableColumn,
  9. // getNameDescriptionTableColumn,
  10. getAccountTableColumn,
  11. getPublicScopeTableColumn,
  12. getTagTableColumn,
  13. getTimeTableColumn,
  14. } from '@/utils/common/tableColumn'
  15. import i18n from '@/locales'
  16. export default {
  17. created () {
  18. this.columns = [
  19. {
  20. field: 'name',
  21. title: i18n.t('network.text_21'),
  22. sortable: true,
  23. showOverflow: 'ellipsis',
  24. minWidth: 100,
  25. slots: {
  26. default: ({ row }, h) => {
  27. const ret = []
  28. ret.push(h('list-body-cell-wrap', {
  29. props: {
  30. copy: true,
  31. edit: this.isPower(row),
  32. row,
  33. hideField: true,
  34. onManager: this.onManager,
  35. },
  36. scopedSlots: {
  37. default: () => { return (<side-page-trigger onTrigger={ () => this.handleOpenSidepage(row) }>{ row.name }</side-page-trigger>) },
  38. },
  39. }))
  40. ret.push(h('list-body-cell-wrap', {
  41. props: {
  42. edit: this.isPower(row),
  43. field: 'description',
  44. row,
  45. onManager: this.onManager,
  46. },
  47. }))
  48. return ret
  49. },
  50. },
  51. hidden: () => this.$isScopedPolicyMenuHidden('network_hidden_columns.name'),
  52. },
  53. getStatusTableColumn({
  54. statusModule: 'network',
  55. vm: this,
  56. hidden: () => this.$isScopedPolicyMenuHidden('network_hidden_columns.status'),
  57. }),
  58. getTagTableColumn({
  59. onManager: this.onManager,
  60. resource: 'networks',
  61. columns: () => this.columns,
  62. editCheck: (row) => (row.provider || '').toLowerCase() !== 'bingocloud',
  63. hidden: () => this.$isScopedPolicyMenuHidden('network_hidden_columns.metadata'),
  64. }),
  65. {
  66. field: 'server_type',
  67. title: i18n.t('network.text_249'),
  68. width: 100,
  69. formatter: ({ cellValue }) => {
  70. return this.$t('networkServerType')[cellValue] || i18n.t('network.text_507')
  71. },
  72. hidden: () => this.$isScopedPolicyMenuHidden('network_hidden_columns.server_type'),
  73. },
  74. getStatusTableColumn({
  75. field: 'is_auto_alloc',
  76. statusModule: 'networIsAutoAlloc',
  77. title: i18n.t('common_498'),
  78. minWidth: 140,
  79. hidden: () => this.$isScopedPolicyMenuHidden('network_hidden_columns.is_auto_alloc'),
  80. }),
  81. {
  82. field: 'ip',
  83. title: i18n.t('network.text_213'),
  84. width: 180,
  85. slots: {
  86. default: ({ row }) => {
  87. if (!row.guest_ip_start || !row.guest_ip_end) {
  88. return '-'
  89. }
  90. return [
  91. <div>{ this.$t('network.ip.start', [row.guest_ip_start, row.guest_ip_mask])}</div>,
  92. <div>{ this.$t('network.ip.end', [row.guest_ip_end, row.guest_ip_mask])}</div>,
  93. ]
  94. },
  95. },
  96. formatter: ({ row }) => {
  97. if (!row.guest_ip_start || !row.guest_ip_end) {
  98. return '-'
  99. }
  100. return `${this.$t('network.ip.start', [row.guest_ip_start, row.guest_ip_mask])},${this.$t('network.ip.end', [row.guest_ip_end, row.guest_ip_mask])}`
  101. },
  102. hidden: () => this.$isScopedPolicyMenuHidden('network_hidden_columns.ip'),
  103. },
  104. {
  105. field: 'ip6',
  106. title: i18n.t('network.ipv6.address'),
  107. width: 180,
  108. slots: {
  109. default: ({ row }) => {
  110. if (!row.guest_ip6_start || !row.guest_ip6_end) {
  111. return '-'
  112. }
  113. return [
  114. <div>{ this.$t('network.ip.start', [row.guest_ip6_start, row.guest_ip6_mask])}</div>,
  115. <div>{ this.$t('network.ip.end', [row.guest_ip6_end, row.guest_ip6_mask])}</div>,
  116. ]
  117. },
  118. },
  119. formatter: ({ row }) => {
  120. if (!row.guest_ip6_start || !row.guest_ip6_end) {
  121. return '-'
  122. }
  123. return `${this.$t('network.ip.start', [row.guest_ip6_start, row.guest_ip6_mask])},${this.$t('network.ip.end', [row.guest_ip6_end, row.guest_ip6_mask])}`
  124. },
  125. hidden: () => this.$isScopedPolicyMenuHidden('network_hidden_columns.ip6'),
  126. },
  127. {
  128. field: 'ports',
  129. title: i18n.t('network.text_622'),
  130. minWidth: 100,
  131. slots: {
  132. default: ({ row }) => {
  133. if (this.isPreLoad && !row.ports) return [<data-loading />]
  134. return [
  135. <div class='text-truncate'>{ this.$t('network.text_727', [row.ports])}</div>,
  136. <div class='text-truncate'>{ this.$t('network.text_728', [(row.ports_used <= 0 ? 0 : row.ports_used) + (row.ports6_used <= 0 ? 0 : row.ports6_used)])}</div>,
  137. ]
  138. },
  139. },
  140. formatter: ({ row }) => {
  141. return `${this.$t('network.text_727', [row.ports])},${this.$t('network.text_728', [row.ports_used + row.ports6_used])}`
  142. },
  143. hidden: () => this.$isScopedPolicyMenuHidden('network_hidden_columns.ports'),
  144. },
  145. getCopyWithContentTableColumn({
  146. field: 'vpc',
  147. title: 'VPC',
  148. hidden: () => this.$store.getters.isProjectMode || this.hiddenColumns.includes('vpc') || this.$isScopedPolicyMenuHidden('network_hidden_columns.vpc'),
  149. }),
  150. getCopyWithContentTableColumn({
  151. field: 'wire',
  152. title: i18n.t('network.text_571'),
  153. hidden: () => this.hiddenColumns.includes('wire') || this.$isScopedPolicyMenuHidden('network_hidden_columns.wire'),
  154. }),
  155. {
  156. field: 'vlan_id',
  157. title: 'VLAN',
  158. width: 60,
  159. hidden: () => this.$isScopedPolicyMenuHidden('network_hidden_columns.vlan_id'),
  160. },
  161. {
  162. field: 'schedtags',
  163. title: i18n.t('network.text_630'),
  164. width: 120,
  165. slots: {
  166. default: ({ row }) => {
  167. const tags = _.sortBy(row.schedtags, ['default', 'name'])
  168. if (!tags.length) {
  169. return [
  170. <div class='text-color-help'>{this.$t('network.text_729')}</div>,
  171. ]
  172. }
  173. const list = tags.map(tag => <a-tag class='mb-2 mr-1' color='blue'>{tag.name}</a-tag>)
  174. return [<list-body-cell-popover text={this.$t('compute.text_619', [tags.length])} max-width="400px">
  175. <div style="display: inline-flex; flex-wrap: wrap; max-width: 40vw;">
  176. {...list}
  177. </div>
  178. </list-body-cell-popover>]
  179. },
  180. },
  181. formatter: ({ row }) => {
  182. const tags = _.sortBy(row.schedtags, ['default', 'name'])
  183. if (tags.length > 0) {
  184. return tags.map(tag => tag.name).join(',')
  185. }
  186. return this.$t('network.text_729')
  187. },
  188. hidden: () => this.$isScopedPolicyMenuHidden('network_hidden_columns.schedtag'),
  189. },
  190. getBrandTableColumn({
  191. hidden: () => this.hiddenColumns.includes('brand') || this.$isScopedPolicyMenuHidden('network_hidden_columns.brand'),
  192. }),
  193. getAccountTableColumn({
  194. hidden: () => this.hiddenColumns.includes('account') || this.$isScopedPolicyMenuHidden('network_hidden_columns.account'),
  195. }),
  196. getPublicScopeTableColumn({
  197. vm: this,
  198. resource: 'networks',
  199. hidden: () => this.$isScopedPolicyMenuHidden('network_hidden_columns.public_scope'),
  200. }),
  201. getProjectTableColumn({
  202. hidden: () => this.hiddenColumns.includes('tenant') || this.$isScopedPolicyMenuHidden('network_hidden_columns.tenant'),
  203. }),
  204. getRegionTableColumn({
  205. hidden: () => this.hiddenColumns.includes('region') || this.$isScopedPolicyMenuHidden('network_hidden_columns.region'),
  206. vm: this,
  207. }),
  208. getTimeTableColumn({
  209. hidden: () => this.$isScopedPolicyMenuHidden('network_hidden_columns.created_at'),
  210. }),
  211. ]
  212. },
  213. computed: {
  214. ...mapGetters(['isAdminMode', 'isDomainMode', 'userInfo']),
  215. },
  216. methods: {
  217. isPower (obj) {
  218. if (this.isAdminMode) return true
  219. if (this.isDomainMode) return obj.domain_id === this.userInfo.projectDomainId
  220. return obj.tenant_id === this.userInfo.projectId
  221. },
  222. },
  223. }