columns.js 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import PasswordFetcher from '@Compute/sections/PasswordFetcher'
  2. import SystemIcon from '@/sections/SystemIcon'
  3. import { sizestr } from '@/utils/utils'
  4. import { getProjectTableColumn, getStatusTableColumn, getCopyWithContentTableColumn, getIpsTableColumn, getNameDescriptionTableColumn, getTagTableColumn, getRegionTableColumn, getTimeTableColumn, getBrandTableColumn, getAccountTableColumn } from '@/utils/common/tableColumn'
  5. import i18n from '@/locales'
  6. export default {
  7. created () {
  8. this.columns = [
  9. getNameDescriptionTableColumn({
  10. onManager: this.onManager,
  11. hideField: true,
  12. addLock: true,
  13. addBackup: true,
  14. slotCallback: row => {
  15. return (
  16. <side-page-trigger onTrigger={ () => this.handleOpenSidepage(row) }>{ row.name }</side-page-trigger>
  17. )
  18. },
  19. }),
  20. getStatusTableColumn({ statusModule: 'server', vm: this }),
  21. getStatusTableColumn({
  22. field: 'power_states',
  23. title: this.$t('compute.power_states'),
  24. statusModule: 'server',
  25. }),
  26. getTagTableColumn({ onManager: this.onManager, resource: 'server', columns: () => this.columns }),
  27. getIpsTableColumn({ field: 'ip', title: 'IP' }),
  28. {
  29. field: 'instance_type',
  30. title: i18n.t('table.title.flavor'),
  31. showOverflow: 'ellipsis',
  32. minWidth: 120,
  33. sortable: true,
  34. slots: {
  35. default: ({ row }) => {
  36. const ret = []
  37. if (row.instance_type) {
  38. ret.push(<div class='text-truncate' style={{ color: '#0A1F44' }}>{ row.instance_type }</div>)
  39. }
  40. const config = row.vcpu_count + 'C' + sizestr(row.vmem_size, 'M', 1024) + (row.disk ? sizestr(row.disk, 'M', 1024) : '')
  41. return ret.concat(<div class='text-truncate' style={{ color: '#53627C' }}>{ config }</div>)
  42. },
  43. },
  44. },
  45. {
  46. field: 'os_type',
  47. title: i18n.t('table.title.os'),
  48. width: 50,
  49. slots: {
  50. default: ({ row }) => {
  51. let name = (row.metadata && row.metadata.os_distribution) ? row.metadata.os_distribution : row.os_type || ''
  52. if (name.includes('Windows') || name.includes('windows')) {
  53. name = 'Windows'
  54. }
  55. const version = (row.metadata && row.metadata.os_version) ? `${row.metadata.os_version}` : ''
  56. const tooltip = (version.includes(name) ? version : `${name} ${version}`) || i18n.t('compute.text_339') // 去重
  57. return [
  58. <SystemIcon tooltip={ tooltip } name={ name } />,
  59. ]
  60. },
  61. },
  62. },
  63. {
  64. field: 'login_account',
  65. title: i18n.t('table.title.init_keypair'),
  66. width: 50,
  67. slots: {
  68. default: ({ row }) => {
  69. return [<PasswordFetcher serverId={ row.id } resourceType='servers' />]
  70. },
  71. },
  72. },
  73. getCopyWithContentTableColumn({
  74. field: 'host',
  75. title: i18n.t('res.machine'),
  76. hideField: true,
  77. slotCallback: row => {
  78. if (!row.host) return '-'
  79. return [<span>{ row.host }</span>]
  80. },
  81. hidden: () => this.$store.getters.isProjectMode,
  82. }),
  83. getBrandTableColumn(),
  84. {
  85. field: 'host_sn',
  86. title: 'SN',
  87. minWidth: 70,
  88. showOverflow: 'ellipsis',
  89. },
  90. getProjectTableColumn(),
  91. getRegionTableColumn(),
  92. getAccountTableColumn(),
  93. getTimeTableColumn(),
  94. ]
  95. },
  96. }