columns.js 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. import { PREALLOCATION_OPTION_MAP, MEDIUM_MAP } from '@Compute/constants'
  2. import {
  3. getNameDescriptionTableColumn,
  4. getBrandTableColumn,
  5. getStatusTableColumn,
  6. getProjectTableColumn,
  7. getTimeTableColumn,
  8. getCopyWithContentTableColumn,
  9. getRegionTableColumn,
  10. getBillingTypeTableColumn,
  11. getTagTableColumn,
  12. getAccountTableColumn,
  13. } from '@/utils/common/tableColumn'
  14. import { sizestr } from '@/utils/utils'
  15. import i18n from '@/locales'
  16. import { BRAND_MAP } from '@/constants'
  17. import {
  18. getUnusedTableColumn,
  19. getStorageTypeTableColumn,
  20. // getPreallocationTableColumn,
  21. } from '../utils/columns'
  22. export default {
  23. created () {
  24. this.columns = [
  25. getNameDescriptionTableColumn({
  26. onManager: this.onManager,
  27. hideField: true,
  28. addEncrypt: true,
  29. formRules: [
  30. { required: true, message: i18n.t('compute.text_210') },
  31. { validator: this.$validate('resourceCreateName') },
  32. ],
  33. slotCallback: row => {
  34. return (
  35. <side-page-trigger onTrigger={ () => this.handleOpenSidepage(row) }>{ row.name }</side-page-trigger>
  36. )
  37. },
  38. hidden: () => {
  39. return this.$isScopedPolicyMenuHidden('disk_hidden_columns.name')
  40. },
  41. }),
  42. // getStatusTableColumn({ statusModule: 'disk' }),
  43. getTagTableColumn({
  44. onManager: this.onManager,
  45. resource: 'disks',
  46. columns: () => this.columns,
  47. editCheck: (row) => (row.provider || '').toLowerCase() !== 'bingocloud',
  48. hidden: () => {
  49. return this.$isScopedPolicyMenuHidden('disk_hidden_columns.metadata')
  50. },
  51. }),
  52. {
  53. field: 'disk_size',
  54. title: i18n.t('table.title.disk_size'),
  55. sortable: true,
  56. minWidth: 50,
  57. slots: {
  58. default: ({ row }, h) => {
  59. const preallocation = PREALLOCATION_OPTION_MAP[row.preallocation]?.label
  60. const isVMware = row.brand === BRAND_MAP.VMware.key
  61. return [
  62. <div class={'d-flex'}>
  63. <span>{ sizestr(row.disk_size, 'M', 1024) }</span>
  64. { isVMware && preallocation ? <span class={'text-color-help'}>({ preallocation })</span> : null }
  65. </div>,
  66. ]
  67. },
  68. },
  69. formatter: ({ row }) => {
  70. const preallocation = PREALLOCATION_OPTION_MAP[row.preallocation]?.label
  71. const isVMware = row.brand === BRAND_MAP.VMware.key
  72. if (isVMware && preallocation) {
  73. return `${sizestr(row.disk_size, 'M', 1024)}(${preallocation})`
  74. }
  75. return sizestr(row.disk_size, 'M', 1024)
  76. },
  77. hidden: () => {
  78. return this.$isScopedPolicyMenuHidden('disk_hidden_columns.disk_size')
  79. },
  80. },
  81. // getPreallocationTableColumn(),
  82. {
  83. field: 'iops',
  84. title: i18n.t('compute.max_iops'),
  85. formatter: ({ row }) => {
  86. return row.iops || '-'
  87. },
  88. hidden: () => {
  89. return this.$isScopedPolicyMenuHidden('disk_hidden_columns.iops')
  90. },
  91. },
  92. {
  93. field: 'disk_format',
  94. title: i18n.t('table.title.disk_format'),
  95. width: 70,
  96. hidden: () => {
  97. return this.$isScopedPolicyMenuHidden('disk_hidden_columns.disk_format')
  98. },
  99. },
  100. getStorageTypeTableColumn({
  101. hidden: () => {
  102. return this.$isScopedPolicyMenuHidden('disk_hidden_columns.storage_type')
  103. },
  104. }),
  105. {
  106. field: 'disk_type',
  107. title: i18n.t('table.title.disk_type'),
  108. width: 70,
  109. formatter: ({ row }) => {
  110. return row.disk_type === 'sys' ? i18n.t('compute.text_49') : i18n.t('compute.text_50')
  111. },
  112. hidden: () => {
  113. return this.$isScopedPolicyMenuHidden('disk_hidden_columns.disk_type')
  114. },
  115. },
  116. getUnusedTableColumn({
  117. vm: this,
  118. hidden: () => {
  119. return this.$isScopedPolicyMenuHidden('disk_hidden_columns.guest_count')
  120. },
  121. }),
  122. {
  123. field: 'guest',
  124. title: this.$t('res.server'),
  125. minWidth: 100,
  126. showOverflow: 'ellipsis',
  127. sortable: true,
  128. sortBy: 'order_by_server',
  129. slots: {
  130. default: ({ row }, h) => {
  131. if (this.isPreLoad && !row.guest) return [<data-loading />]
  132. if (!row.guest || row.guests.length <= 0) return '-'
  133. const guests = row.guests.map((guest, index) => {
  134. return <side-page-trigger permission="server_get" name="VmInstanceSidePage" id={guest.id} vm={this} tab="vm-instance-detail">
  135. {guest.name}
  136. <status status={ guest.status } statusModule='server'/>
  137. </side-page-trigger>
  138. })
  139. return [
  140. <div>
  141. { guests }
  142. </div>,
  143. ]
  144. },
  145. },
  146. formatter: ({ row }) => {
  147. if (!row.guest || row.guests.length <= 0) return '-'
  148. const guests = row.guests.map((guest, index) => guest.name)
  149. return guests.length ? guests.join(',') : '-'
  150. },
  151. hidden: () => {
  152. return this.$isScopedPolicyMenuHidden('disk_hidden_columns.guest')
  153. },
  154. },
  155. {
  156. field: 'device',
  157. title: this.$t('compute.disk_device'),
  158. formatter: ({ row }) => {
  159. return row.device || '-'
  160. },
  161. hidden: () => {
  162. return this.$isScopedPolicyMenuHidden('disk_hidden_columns.device')
  163. },
  164. },
  165. getCopyWithContentTableColumn({
  166. field: 'storage',
  167. title: i18n.t('table.title.disk_storage'),
  168. hideField: true,
  169. slotCallback: (row) => {
  170. if (this.isPreLoad && !row.storage) return [<data-loading />]
  171. return row.storage
  172. },
  173. formatter: ({ row }) => row.storage,
  174. hidden: () => {
  175. return this.$isScopedPolicyMenuHidden('disk_hidden_columns.storage')
  176. },
  177. }),
  178. getTimeTableColumn({
  179. hidden: () => {
  180. return this.$isScopedPolicyMenuHidden('disk_hidden_columns.created_at')
  181. },
  182. }),
  183. getBrandTableColumn({
  184. hidden: () => {
  185. return this.$isScopedPolicyMenuHidden('disk_hidden_columns.brand')
  186. },
  187. }),
  188. getRegionTableColumn({
  189. vm: this,
  190. hidden: () => {
  191. return this.$isScopedPolicyMenuHidden('disk_hidden_columns.region')
  192. },
  193. }),
  194. getBillingTypeTableColumn({
  195. hidden: () => {
  196. return this.$isScopedPolicyMenuHidden('disk_hidden_columns.billing_type')
  197. },
  198. }),
  199. getStatusTableColumn({
  200. statusModule: 'disk',
  201. vm: this,
  202. hidden: () => {
  203. return this.$isScopedPolicyMenuHidden('disk_hidden_columns.status')
  204. },
  205. }),
  206. getProjectTableColumn({
  207. hidden: () => {
  208. return this.$isScopedPolicyMenuHidden('disk_hidden_columns.tenant')
  209. },
  210. }),
  211. getAccountTableColumn({
  212. vm: this,
  213. hidden: () => {
  214. return this.$isScopedPolicyMenuHidden('disk_hidden_columns.account')
  215. },
  216. }),
  217. {
  218. field: 'medium_type',
  219. title: i18n.t('table.title.disk_medium_type'),
  220. width: 70,
  221. slots: {
  222. default: ({ row }) => {
  223. if (this.isPreLoad && !row.medium_type) return [<data-loading />]
  224. return MEDIUM_MAP[row.medium_type]
  225. },
  226. },
  227. formatter: ({ row }) => row.medium_type ? MEDIUM_MAP[row.medium_type] : '-',
  228. hidden: () => {
  229. if (this.hiddenColumns.includes('medium_type')) return true
  230. return this.$isScopedPolicyMenuHidden('disk_hidden_columns.storage')
  231. },
  232. },
  233. {
  234. field: 'auto_reset',
  235. title: this.$t('compute.shutdown_auto_reset'),
  236. formatter: ({ row }) => {
  237. return row.auto_reset ? this.$t('common.true') : this.$t('common.false')
  238. },
  239. },
  240. ]
  241. },
  242. }