columns.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. import { sizestr } from '@/utils/utils'
  2. import i18n from '@/locales'
  3. export const getDeviceModelTableColumn = () => {
  4. return {
  5. field: 'device',
  6. title: i18n.t('aice.device'),
  7. minWidth: 120,
  8. slots: {
  9. default: ({ row }, h) => {
  10. const devices = row.devices
  11. if (devices?.length) {
  12. return devices.map(v => {
  13. return <div class={'mb-1'}><a-tag>{v.model}</a-tag></div>
  14. })
  15. }
  16. return '-'
  17. },
  18. },
  19. formatter: ({ row }) => {
  20. const devices = row.devices
  21. if (devices?.length) {
  22. return devices.map(v => v.model).join(',')
  23. }
  24. return '-'
  25. },
  26. }
  27. }
  28. export const getEnvsTableColumn = () => {
  29. return {
  30. field: 'envs',
  31. title: i18n.t('aice.envs'),
  32. minWidth: 120,
  33. slots: {
  34. default: ({ row }, h) => {
  35. if (row.envs?.length) {
  36. return row.envs.map(v => {
  37. return <div class={'mb-1'}><a-tag>{v.key}={v.value}</a-tag></div>
  38. })
  39. }
  40. return '-'
  41. },
  42. },
  43. formatter: ({ row }) => {
  44. if (row.envs?.length) {
  45. return row.envs.map(v => v.key).join(',')
  46. }
  47. return '-'
  48. },
  49. }
  50. }
  51. export const getImageTableColumn = ({ vm = {} } = {}) => {
  52. return {
  53. field: 'image',
  54. title: i18n.t('aice.image'),
  55. width: 180,
  56. formatter: ({ row }) => {
  57. return row.image || '-'
  58. },
  59. slots: {
  60. default: ({ row }, h) => {
  61. return [
  62. <list-body-cell-wrap copy hideField={true} field='image' row={row} message={row.image}>
  63. <side-page-trigger permission='llm_images_get' name='LlmImageSidePage' id={row.llm_image_id} vm={vm}>{row.image}</side-page-trigger>
  64. </list-body-cell-wrap>,
  65. ]
  66. },
  67. },
  68. }
  69. }
  70. export const getBandwidthTableColumn = () => {
  71. return {
  72. field: 'bandwidth',
  73. title: i18n.t('aice.bandwidth'),
  74. width: 120,
  75. formatter: ({ row }) => {
  76. if (!row.bandwidth) return '-'
  77. if (row.bandwidth === 0) return `0(${i18n.t('common.not_limited')})`
  78. return `${row.bandwidth}M`
  79. },
  80. }
  81. }
  82. export const getCpuTableColumn = () => {
  83. return {
  84. field: 'cpu',
  85. title: 'CPU',
  86. width: 120,
  87. sortable: true,
  88. formatter: ({ row }) => {
  89. return row.cpu
  90. },
  91. }
  92. }
  93. export const getMemoryTableColumn = () => {
  94. return {
  95. field: 'memory',
  96. title: i18n.t('aice.memory'),
  97. width: 120,
  98. formatter: ({ row }) => {
  99. return sizestr(row.memory, 'M', 1024)
  100. },
  101. }
  102. }
  103. export const getDiskTableColumn = () => {
  104. return {
  105. field: 'disk',
  106. title: i18n.t('aice.disk'),
  107. width: 120,
  108. formatter: ({ row }) => {
  109. let size = 0
  110. const volumes = row.volumes || []
  111. volumes.forEach(v => {
  112. size += v.size_mb
  113. })
  114. return sizestr(size, 'M', 1024)
  115. },
  116. }
  117. }
  118. export const getLlmTypeTableColumn = (isApplyType = false) => {
  119. return {
  120. field: 'llm_type',
  121. title: isApplyType ? i18n.t('aice.llm_type.app') : i18n.t('aice.llm_type.llm'),
  122. formatter: ({ row }) => {
  123. return row.llm_type || '-'
  124. },
  125. }
  126. }
  127. export const getLlmModelNameTableColumn = ({ vm = {} } = {}) => {
  128. return {
  129. field: 'mounted_models',
  130. title: i18n.t('aice.model'),
  131. formatter: ({ row }) => {
  132. if (row.mounted_model_details && row.mounted_model_details.length) {
  133. return row.mounted_model_details.map(v => v.fullname).join(',')
  134. }
  135. return '-'
  136. },
  137. slots: {
  138. default: ({ row }, h) => {
  139. if (row.mounted_model_details && row.mounted_model_details.length) {
  140. const ret = []
  141. row.mounted_model_details.forEach(v => {
  142. ret.push(
  143. <list-body-cell-wrap copy hideField={true} field='id' row={v} message={v.fullname}>
  144. <side-page-trigger permission='llm_instant_models_get' name='LlmInstantModelSidePage' id={v.id} vm={vm}>{v.fullname}</side-page-trigger>
  145. </list-body-cell-wrap>,
  146. )
  147. })
  148. return ret
  149. }
  150. return '-'
  151. },
  152. },
  153. }
  154. }
  155. export const getNetworkTableColumn = () => {
  156. return {
  157. field: 'network',
  158. title: i18n.t('cloudenv.text_7'),
  159. formatter: ({ row }) => {
  160. return row.network || '-'
  161. },
  162. }
  163. }
  164. export const getNetworkTypeTableColumn = () => {
  165. return {
  166. field: 'network_type',
  167. title: i18n.t('common.network.type'),
  168. formatter: ({ row }) => {
  169. return i18n.t('networkServerType')[row.network_type] || '-'
  170. },
  171. }
  172. }