columns.js 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. import { CHARGE_TYPE, LB_SPEC } from '@Network/views/lb/constants'
  2. import LbListCell from '@Network/views/lb/components/LbListCell'
  3. import {
  4. getNameDescriptionTableColumn,
  5. getStatusTableColumn,
  6. getTimeTableColumn,
  7. getProjectTableColumn,
  8. getBrandTableColumn,
  9. getTagTableColumn,
  10. getRegionTableColumn,
  11. } from '@/utils/common/tableColumn'
  12. import i18n from '@/locales'
  13. export default {
  14. components: {
  15. LbListCell,
  16. },
  17. created () {
  18. this.columns = [
  19. getNameDescriptionTableColumn({
  20. onManager: this.onManager,
  21. hideField: true,
  22. addLock: true,
  23. title: i18n.t('network.text_21'),
  24. slotCallback: row => {
  25. return (
  26. <side-page-trigger onTrigger={ () => this.handleOpenSidepage(row) }>{ row.name }</side-page-trigger>
  27. )
  28. },
  29. hidden: () => {
  30. return this.$isScopedPolicyMenuHidden('slb_hidden_columns.name')
  31. },
  32. }),
  33. getStatusTableColumn({
  34. statusModule: 'lb',
  35. title: i18n.t('network.text_27'),
  36. vm: this,
  37. hidden: () => {
  38. return this.$isScopedPolicyMenuHidden('slb_hidden_columns.status')
  39. },
  40. }),
  41. getTagTableColumn({
  42. onManager: this.onManager,
  43. resource: 'lb_loadbalancers',
  44. columns: () => this.columns,
  45. hidden: () => {
  46. return this.$isScopedPolicyMenuHidden('slb_hidden_columns.metadata')
  47. },
  48. }),
  49. {
  50. field: 'address',
  51. title: i18n.t('network.text_248'),
  52. minWidth: 150,
  53. slots: {
  54. default: ({ row }) => {
  55. let text = row.address || '-'
  56. let weakTip = ''
  57. if (row.eip) {
  58. text = row.eip
  59. if (row.eip_mode === 'elastic_ip') {
  60. weakTip = i18n.t('network.text_304')
  61. } else if (row.eip_mode === 'public_ip') {
  62. weakTip = i18n.t('network.text_305')
  63. } else {
  64. weakTip = ''
  65. }
  66. } else {
  67. weakTip = row.address_type === 'intranet' ? i18n.t('network.text_306') : i18n.t('network.text_307')
  68. }
  69. return [<div>
  70. <list-body-cell-wrap hide-field copy field={row.eip ? 'eip' : 'address' } row={row}>
  71. <span style={{ color: '#53627C' }}>{ text }</span>
  72. </list-body-cell-wrap>
  73. <span class="text-color-secondary">{ weakTip }</span>
  74. </div>]
  75. },
  76. },
  77. hidden: () => {
  78. return this.$isScopedPolicyMenuHidden('slb_hidden_columns.address')
  79. },
  80. },
  81. {
  82. field: 'loadbalancer_spec',
  83. title: i18n.t('network.text_268'),
  84. minWidth: 100,
  85. formatter: ({ row }) => {
  86. let { provider } = row
  87. if (provider) {
  88. provider = provider.toLowerCase()
  89. const platformList = LB_SPEC[provider]
  90. if (platformList) {
  91. const specItem = platformList.find(val => val.key === row.loadbalancer_spec)
  92. if (specItem) return specItem.label
  93. }
  94. }
  95. return row.loadbalancer_spec || '-'
  96. },
  97. hidden: () => {
  98. return this.$isScopedPolicyMenuHidden('slb_hidden_columns.loadbalancer_spec')
  99. },
  100. },
  101. {
  102. field: 'vpc',
  103. title: 'VPC',
  104. minWidth: 100,
  105. formatter: ({ row }) => {
  106. return row.vpc || '-'
  107. },
  108. hidden: () => {
  109. if (this.$store.getters.isProjectMode) return true
  110. return this.$isScopedPolicyMenuHidden('slb_hidden_columns.loadbalancer_spec')
  111. },
  112. },
  113. {
  114. field: 'secgroups',
  115. title: i18n.t('res.secgroup'),
  116. minWidth: 80,
  117. showOverflow: 'ellipsis',
  118. slots: {
  119. default: ({ row }) => {
  120. return row.secgroups?.map(item => item.name).join(',')
  121. },
  122. },
  123. formatter: ({ row }) => {
  124. return row.secgroups?.map(item => item.name).join(',')
  125. },
  126. hidden: () => {
  127. return this.$isScopedPolicyMenuHidden('slb_hidden_columns.secgroups')
  128. },
  129. },
  130. {
  131. field: 'charge_type',
  132. title: i18n.t('network.text_192'),
  133. minWidth: 100,
  134. formatter: ({ row }) => {
  135. if (row.charge_type) return CHARGE_TYPE[row.charge_type] || row.charge_type
  136. return '-'
  137. },
  138. hidden: () => {
  139. return this.$isScopedPolicyMenuHidden('slb_hidden_columns.loadbalancer_spec')
  140. },
  141. },
  142. getBrandTableColumn({
  143. hidden: () => {
  144. return this.$isScopedPolicyMenuHidden('slb_hidden_columns.brand')
  145. },
  146. }),
  147. {
  148. field: 'cluster',
  149. title: i18n.t('network.text_19'),
  150. minWidth: 100,
  151. formatter: ({ row }) => {
  152. return row.cluster || '-'
  153. },
  154. hidden: () => {
  155. return this.$isScopedPolicyMenuHidden('slb_hidden_columns.cluster')
  156. },
  157. },
  158. // {
  159. // field: 'server_type',
  160. // title: '端口/健康检查/后端服务器',
  161. // minWidth: 300,
  162. // slots: {
  163. // default: ({ row }, h) => {
  164. // const attrs = {
  165. // props: {
  166. // params: {
  167. // loadbalancer: row.id,
  168. // scope: this.$store.getters.scope,
  169. // },
  170. // type: 'lb',
  171. // manager: new this.$Manager('loadbalancerlisteners', 'v2'),
  172. // format: item => {
  173. // const healthText = item.health_check === 'on' ? '启用' : '未启用'
  174. // return `${item.listener_type}:${item.listener_port} ${healthText} ${item.backend_group || '-'}`
  175. // },
  176. // status: row.status,
  177. // },
  178. // }
  179. // return [<LbListCell { ...attrs } />]
  180. // },
  181. // },
  182. // },
  183. getProjectTableColumn({
  184. hidden: () => {
  185. return this.$isScopedPolicyMenuHidden('slb_hidden_columns.tenant')
  186. },
  187. }),
  188. getRegionTableColumn({
  189. showOverflow: false,
  190. hidden: () => {
  191. return this.$isScopedPolicyMenuHidden('slb_hidden_columns.region')
  192. },
  193. }),
  194. {
  195. field: 'account',
  196. title: i18n.t('network.text_196'),
  197. minWidth: 120,
  198. slots: {
  199. default: ({ row }) => {
  200. const ret = []
  201. ret.push(
  202. <list-body-cell-wrap hide-field copy field='account' row={row}>
  203. <span style={{ color: '#0A1F44' }}>{ row.account }</span>
  204. </list-body-cell-wrap>,
  205. )
  206. if (row.manager) {
  207. ret.push(
  208. <list-body-cell-wrap hide-field copy field='manager' row={row}>
  209. <span style={{ color: '#53627C' }}>{ row.manager }</span>
  210. </list-body-cell-wrap>,
  211. )
  212. }
  213. return ret
  214. },
  215. },
  216. hidden: () => {
  217. if (this.$store.getters.isProjectMode) return true
  218. return this.$isScopedPolicyMenuHidden('slb_hidden_columns.cluster')
  219. },
  220. },
  221. getTimeTableColumn({
  222. hidden: () => {
  223. return this.$isScopedPolicyMenuHidden('slb_hidden_columns.created_at')
  224. },
  225. }),
  226. ]
  227. },
  228. }