tableColumns.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. import * as R from 'ramda'
  2. import _ from 'lodash'
  3. import i18n from '@/locales'
  4. export const k8sStatusColumn = ({ path = 'podsInfo.warnings', statusModule = 'k8s_resource' } = {}) => {
  5. return {
  6. field: 'status',
  7. title: i18n.t('k8s.text_35'),
  8. width: 100,
  9. slots: {
  10. default: ({ row }, h) => {
  11. const warnings = (_.get(row, path) || []).map(v => v.message)
  12. let warnTooltip = null
  13. if (warnings && warnings.length) {
  14. warnTooltip = (
  15. <a-tooltip placement="top">
  16. <template slot="title">
  17. { warnings.map(val => (<div> { val } </div>)) }
  18. </template>
  19. <div class='text-truncate'>
  20. <a-icon type="bulb" theme="twoTone" twoToneColor="#f5222d" class="mr-2" />
  21. <span>{ i18n.t('k8s.text_402') }</span>
  22. </div>
  23. </a-tooltip>
  24. )
  25. }
  26. return [
  27. <div class='text-truncate'>
  28. <status status={ row.status } statusModule={ statusModule }>
  29. { warnTooltip }
  30. </status>
  31. </div>,
  32. ]
  33. },
  34. },
  35. }
  36. }
  37. export const k8sLabelColumn = ({ field = 'labels', title = i18n.t('k8s.text_82') } = {}) => {
  38. return {
  39. field,
  40. title,
  41. minWidth: 200,
  42. slots: {
  43. default: ({ row }, h) => {
  44. if (!row[field] || !R.is(Object, row[field])) return '-'
  45. const colors = ['pink', 'orange', 'green', 'cyan', 'blue', 'purple', 'red']
  46. const labels = Object.entries(row[field]).map(arr => ({ key: arr[0], value: arr[1] }))
  47. return [
  48. <div>
  49. {
  50. labels.map((val, i) => {
  51. return (
  52. <div class="mb-1"><a-tag class="d-block text-truncate" color={ colors[i % colors.length] }>{ `${val.key}:${val.value}` }</a-tag></div>
  53. )
  54. })
  55. }
  56. </div>,
  57. ]
  58. },
  59. },
  60. }
  61. }
  62. export const k8sImageColumn = ({ field = 'containerImages', title = i18n.t('k8s.text_42'), itemField = 'image' } = {}) => {
  63. return {
  64. field,
  65. title,
  66. minWidth: 200,
  67. slots: {
  68. default: ({ row }, h) => {
  69. if (!row[field] || !row[field].length) return '-'
  70. return row[field].map(v => {
  71. return (
  72. <a-tooltip title={`${v.name}: ${v[itemField]}`}>
  73. <a-tag class="d-block text-truncate mb-1" style="max-width: 400px;">{v.name}: { v[itemField] }</a-tag>
  74. </a-tooltip>
  75. )
  76. })
  77. },
  78. },
  79. }
  80. }
  81. export const k8sEnvColumn = ({ field = 'env', title = i18n.t('k8s.text_111') } = {}) => {
  82. return {
  83. field,
  84. title,
  85. slots: {
  86. default: ({ row }, h) => {
  87. if (!row[field] || !R.is(Array, row[field])) return '-'
  88. return [
  89. <div>
  90. {
  91. row[field].map((val, i) => {
  92. return (
  93. <a-tooltip title={ `${val.name}:${val.value || '-'}` }>
  94. <div class="mb-1" title={`${val.name}:${val.value || '-'}`}><a-tag class="d-block text-truncate">{ `${val.name}:${val.value || '-'}` }</a-tag></div>
  95. </a-tooltip>
  96. )
  97. })
  98. }
  99. </div>,
  100. ]
  101. },
  102. },
  103. }
  104. }
  105. export const federatedResClusterCountColumn = () => ({
  106. field: 'cluster_count',
  107. title: i18n.t('k8s.text_403'),
  108. minWidth: 100,
  109. formatter: ({ row }) => `${row.cluster_count}` || '-',
  110. })
  111. export const federatednamespaceColumn = () => ({
  112. field: 'federatednamespace',
  113. title: i18n.t('dictionary.federatednamespaces'),
  114. formatter: ({ row }) => row.federatednamespace || '-',
  115. })