columns.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. import {
  2. getProjectTableColumn,
  3. getRegionTableColumn,
  4. getStatusTableColumn,
  5. getBrandTableColumn,
  6. getCopyWithContentTableColumn,
  7. getNameDescriptionTableColumn,
  8. getBillingTypeTableColumn,
  9. getOsArch,
  10. getTimeTableColumn,
  11. } from '@/utils/common/tableColumn'
  12. import SystemIcon from '@/sections/SystemIcon'
  13. import { sizestr } from '@/utils/utils'
  14. import i18n from '@/locales'
  15. export default {
  16. created () {
  17. this.columns = [
  18. getNameDescriptionTableColumn({
  19. onManager: this.onManager,
  20. hideField: true,
  21. // addLock: true,
  22. addBackup: true,
  23. formRules: [
  24. { required: true, message: i18n.t('compute.text_210') },
  25. { validator: this.$validate('resourceCreateName') },
  26. ],
  27. slotCallback: row => {
  28. return (
  29. <side-page-trigger onTrigger={ () => this.handleOpenSidepage(row) }>{ row.name }</side-page-trigger>
  30. )
  31. },
  32. }),
  33. getStatusTableColumn({ statusModule: 'servertemplate', vm: this }),
  34. getOsArch({ field: 'content.os_arch' }),
  35. {
  36. field: 'instance_type',
  37. title: i18n.t('table.title.flavor'),
  38. showOverflow: 'ellipsis',
  39. minWidth: 120,
  40. sortable: true,
  41. slots: {
  42. default: ({ row }) => {
  43. if (!row.config_info) return [<data-loading />]
  44. const { sku, disks } = row.config_info
  45. const diskSize = disks.map(item => item.size_mb).reduce((a, b) => {
  46. return a + b
  47. })
  48. const ret = []
  49. if (row.name) {
  50. ret.push(<div class='text-truncate' style={{ color: '#0A1F44' }}>{ sku.name }</div>)
  51. }
  52. const config = sku.cpu_core_count + 'C' + sizestr(sku.memory_size_mb, 'M', 1024) + (diskSize ? sizestr(diskSize, 'M', 1024) : '')
  53. return ret.concat(<div class='text-truncate' style={{ color: '#53627C' }}>{ config }</div>)
  54. },
  55. },
  56. formatter: ({ row }) => {
  57. const { sku, disks } = row.config_info || {}
  58. const diskSize = disks.map(item => item.size_mb).reduce((a, b) => {
  59. return a + b
  60. })
  61. const ret = []
  62. if (row.name) {
  63. ret.push(sku.name)
  64. }
  65. const config = sku.cpu_core_count + 'C' + sizestr(sku.memory_size_mb, 'M', 1024) + (diskSize ? sizestr(diskSize, 'M', 1024) : '')
  66. return ret.concat(config).join(',')
  67. },
  68. },
  69. {
  70. field: 'os_type',
  71. title: i18n.t('table.title.os'),
  72. width: 50,
  73. slots: {
  74. default: ({ row }) => {
  75. let name = (row.metadata && row.metadata.os_distribution) ? row.metadata.os_distribution : row.os_type || ''
  76. if (name.includes('Windows') || name.includes('windows')) {
  77. name = 'Windows'
  78. }
  79. const version = (row.metadata && row.metadata.os_version) ? `${row.metadata.os_version}` : ''
  80. const tooltip = (version.includes(name) ? version : `${name} ${version}`) || i18n.t('compute.text_339') // 去重
  81. return [
  82. <SystemIcon tooltip={ tooltip } name={ name } />,
  83. ]
  84. },
  85. },
  86. formatter: ({ row }) => {
  87. let name = (row.metadata && row.metadata.os_distribution) ? row.metadata.os_distribution : row.os_type || ''
  88. if (name.includes('Windows') || name.includes('windows')) {
  89. name = 'Windows'
  90. }
  91. return name
  92. },
  93. },
  94. {
  95. field: 'config_info.image',
  96. title: i18n.t('res.image'),
  97. showOverflow: 'ellipsis',
  98. minWidth: 190,
  99. slots: {
  100. default: ({ row }) => {
  101. if (!row.config_info) return [<data-loading />]
  102. return row.config_info.image
  103. },
  104. },
  105. formatter: ({ row }) => {
  106. return row.config_info?.image
  107. },
  108. },
  109. getCopyWithContentTableColumn({ field: 'vpc', title: 'VPC', vm: this }),
  110. getBillingTypeTableColumn(),
  111. getBrandTableColumn(),
  112. getProjectTableColumn(),
  113. getRegionTableColumn(),
  114. getTimeTableColumn(),
  115. ]
  116. },
  117. }