columns.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. import { sizestr } from '@/utils/utils'
  2. import {
  3. getBrandTableColumn,
  4. getNameDescriptionTableColumn,
  5. getStatusTableColumn,
  6. getProjectTableColumn,
  7. getTimeTableColumn,
  8. getTagTableColumn,
  9. getOsArch,
  10. } from '@/utils/common/tableColumn'
  11. import i18n from '@/locales'
  12. export default {
  13. created () {
  14. this.columns = [
  15. getNameDescriptionTableColumn({
  16. onManager: this.onManager,
  17. hideField: true,
  18. addEncrypt: true,
  19. slotCallback: row => {
  20. return (
  21. <side-page-trigger onTrigger={ () => this.handleOpenSidepage(row) }>{ row.name }</side-page-trigger>
  22. )
  23. },
  24. }),
  25. getStatusTableColumn({ statusModule: 'snapshot', vm: this }),
  26. getTagTableColumn({ onManager: this.onManager, resource: 'instance_snapshots', columns: () => this.columns }),
  27. {
  28. field: 'rules',
  29. title: i18n.t('table.title.sub_snapshot'),
  30. minWidth: 220,
  31. slots: {
  32. default: ({ row }) => {
  33. if (this.isPreLoad && !row.snapshots) return [<data-loading />]
  34. const len = (row.snapshots && row.snapshots.length) || 0
  35. if (len === 0) return i18n.t('compute.text_619', [len])
  36. const list = row.snapshots.map(val => (
  37. <a-tag class='mb-2 mr-1'>{ val.name }</a-tag>
  38. ))
  39. return [<list-body-cell-popover text={i18n.t('compute.text_619', [len])} max-width="400px">
  40. <div style="display: inline-flex; flex-wrap: wrap; max-width: 40vw;">
  41. {...list}
  42. </div>
  43. </list-body-cell-popover>]
  44. },
  45. },
  46. formatter: ({ row }) => {
  47. const { snapshots = [] } = row
  48. const len = snapshots.length
  49. const list = snapshots.map(item => item.name)
  50. if (len) {
  51. return `${i18n.t('compute.text_619', [len])}(${list.join(',')})`
  52. }
  53. return ''
  54. },
  55. },
  56. {
  57. field: 'with_memory',
  58. title: i18n.t('compute.mem_snapshot'),
  59. width: 100,
  60. formatter: ({ row }) => {
  61. return row.with_memory ? i18n.t('compute.contains') : i18n.t('compute.not_contains')
  62. },
  63. },
  64. getOsArch(),
  65. {
  66. field: 'size_mb',
  67. title: i18n.t('table.title.snapshot_size'),
  68. width: 70,
  69. slots: {
  70. default: ({ row }) => {
  71. if (this.isPreLoad && !row.size_mb) return [<data-loading />]
  72. return sizestr(row.size_mb, 'M', 1024)
  73. },
  74. },
  75. formatter: ({ row }) => {
  76. return sizestr(row.size_mb, 'M', 1024)
  77. },
  78. },
  79. {
  80. field: 'guest',
  81. title: i18n.t('res.server'),
  82. minWidth: 70,
  83. showOverflow: 'ellipsis',
  84. slots: {
  85. default: ({ row }, h) => {
  86. if (this.isPreLoad && !row.guest) return [<data-loading />]
  87. return [
  88. <div class='text-truncate'>
  89. {row.guest ? <list-body-cell-wrap copy field='guest' row={row} /> : '-'}
  90. {row.guest_status ? <status status={ row.guest_status } statusModule='server'/> : ''}
  91. </div>,
  92. ]
  93. },
  94. },
  95. formatter: ({ row }) => row.guest,
  96. },
  97. getBrandTableColumn(),
  98. getTimeTableColumn(),
  99. getProjectTableColumn(),
  100. ]
  101. },
  102. }