columns.js 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import { SERVER_TYPE } from '@Compute/constants'
  2. import { sizestr } from '@/utils/utils'
  3. import { getNameDescriptionTableColumn, getBrandTableColumn, getStatusTableColumn, getCopyWithContentTableColumn, getIpsTableColumn, getTimeTableColumn } from '@/utils/common/tableColumn'
  4. import SystemIcon from '@/sections/SystemIcon'
  5. import i18n from '@/locales'
  6. import { findPlatform } from '@/utils/common/hypervisor'
  7. export default {
  8. created () {
  9. this.columns = [
  10. getNameDescriptionTableColumn({
  11. field: 'name',
  12. edit: false,
  13. editDesc: false,
  14. hideField: true,
  15. slotCallback: row => {
  16. return (
  17. <side-page-trigger onTrigger={() => this.handleOpenSidepage(row)}>{row.name}</side-page-trigger>
  18. )
  19. },
  20. }),
  21. getCopyWithContentTableColumn({ field: 'id', title: 'ID' }),
  22. getCopyWithContentTableColumn({ field: 'external_id', title: i18n.t('table.title.external_id') }),
  23. getStatusTableColumn({ statusModule: 'server', hiddenLogView: true }),
  24. getIpsTableColumn({ field: 'ips', title: 'IP' }),
  25. {
  26. field: 'instance_type',
  27. title: i18n.t('compute.text_295'),
  28. minWidth: 120,
  29. showOverflow: 'ellipsis',
  30. slots: {
  31. default: ({ row }) => {
  32. const ret = []
  33. if (row.instance_type) {
  34. ret.push(<div class='text-truncate' style={{ color: '#0A1F44' }}>{ row.instance_type }</div>)
  35. }
  36. const config = row.vcpu_count + 'C' + sizestr(row.vmem_size, 'M', 1024) + (row.disk ? sizestr(row.disk, 'M', 1024) : '')
  37. return ret.concat(<div class='text-truncate' style={{ color: '#53627C' }}>{ config }</div>)
  38. },
  39. },
  40. },
  41. {
  42. field: 'os_type',
  43. title: i18n.t('table.title.os'),
  44. width: 60,
  45. slots: {
  46. default: ({ row }) => {
  47. if (this.isPreLoad && !row.metadata) return [<data-loading />]
  48. let name = (row.metadata && row.metadata.os_distribution) ? row.metadata.os_distribution : row.os_type || ''
  49. if (name.includes('Windows') || name.includes('windows')) {
  50. name = 'Windows'
  51. }
  52. const version = (row.metadata && row.metadata.os_version) ? `${row.metadata.os_version}` : ''
  53. const tooltip = (version.includes(name) ? version : `${name} ${version}`) || i18n.t('compute.text_339') // 去重
  54. return [
  55. <SystemIcon tooltip={ tooltip } name={ name } />,
  56. ]
  57. },
  58. },
  59. },
  60. getBrandTableColumn(),
  61. getCopyWithContentTableColumn({
  62. field: 'host',
  63. title: i18n.t('compute.text_111'),
  64. hideField: true,
  65. slotCallback: row => {
  66. if (this.isPreLoad && !row.host) return [<data-loading />]
  67. if (findPlatform(row.hypervisor, 'hypervisor') === SERVER_TYPE.public) {
  68. return '-'
  69. }
  70. return row.host
  71. },
  72. }),
  73. getTimeTableColumn({ field: 'auto_delete_at', title: i18n.t('compute.text_480'), vm: this }),
  74. ]
  75. },
  76. }