Server.vue 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. <template>
  2. <page-list
  3. :list="list"
  4. :columns="columns"
  5. :single-actions="singleActions"
  6. :group-actions="groupActions" />
  7. </template>
  8. <script>
  9. import {
  10. getCopyWithContentTableColumn,
  11. getStatusTableColumn,
  12. getRegionTableColumn,
  13. getIpsTableColumn,
  14. } from '@/utils/common/tableColumn'
  15. import WindowsMixin from '@/mixins/windows'
  16. import ListMixin from '@/mixins/list'
  17. import expectStatus from '@/constants/expectStatus'
  18. import { sizestr } from '@/utils/utils'
  19. export default {
  20. name: 'DiskListForVmSnapshotPolicySidePage',
  21. mixins: [WindowsMixin, ListMixin],
  22. props: {
  23. resId: String,
  24. data: {
  25. type: Object,
  26. required: true,
  27. },
  28. },
  29. data () {
  30. return {
  31. list: this.$list.createList(this, {
  32. id: 'ServerListForVmSnapshotPolicySidePage',
  33. resource: 'servers',
  34. steadyStatus: Object.values(expectStatus.server).flat(),
  35. getParams: { ...this.getParams, snapshotpolicy_id: this.resId },
  36. filterOptions: {
  37. name: {
  38. label: this.$t('compute.text_228'),
  39. filter: true,
  40. formatter: val => {
  41. return `name.contains("${val}")`
  42. },
  43. },
  44. },
  45. }),
  46. columns: [
  47. getCopyWithContentTableColumn({
  48. field: 'name',
  49. title: this.$t('compute.text_228'),
  50. hideField: true,
  51. slotCallback: row => {
  52. return [<side-page-trigger permission="servers_get" name="VmInstanceSidePage" id={row.id} vm={this}>{ row.name }</side-page-trigger>]
  53. },
  54. }),
  55. getStatusTableColumn({ statusModule: 'server' }),
  56. getIpsTableColumn({
  57. field: 'ips',
  58. title: 'IP',
  59. vm: this,
  60. sortable: true,
  61. hidden: () => {
  62. return this.$isScopedPolicyMenuHidden('server_hidden_columns.ips')
  63. },
  64. }),
  65. {
  66. field: 'vcpu_count',
  67. title: 'CPU',
  68. sortable: true,
  69. minWidth: 80,
  70. slots: {
  71. default: ({ row }) => {
  72. if (row.vcpu_count) {
  73. return [<list-body-cell-wrap row={{ row }} hide-field field="vcpu_count">{row.vcpu_count}</list-body-cell-wrap>]
  74. }
  75. return []
  76. },
  77. },
  78. hidden: () => {
  79. return this.$isScopedPolicyMenuHidden('server_hidden_columns.vcpu_count')
  80. },
  81. },
  82. {
  83. field: 'vmem_size',
  84. title: this.$t('table.title.vmem_size'),
  85. sortable: true,
  86. minWidth: 80,
  87. slots: {
  88. default: ({ row }) => {
  89. if (row.vmem_size) {
  90. const config = (row.vmem_size / 1024) + 'G'
  91. return [<list-body-cell-wrap row={{ row }} hide-field field="vmem_size">{config}</list-body-cell-wrap>]
  92. }
  93. return []
  94. },
  95. },
  96. formatter: ({ row }) => {
  97. if (row.vmem_size) {
  98. const config = (row.vmem_size / 1024) + 'G'
  99. return config
  100. }
  101. return ''
  102. },
  103. hidden: () => {
  104. return this.$isScopedPolicyMenuHidden('server_hidden_columns.vmem_size')
  105. },
  106. },
  107. {
  108. field: 'disk',
  109. title: this.$t('table.title.disk'),
  110. sortable: true,
  111. minWidth: 80,
  112. slots: {
  113. default: ({ row }) => {
  114. if (this.isPreLoad && !row.disk) return [<data-loading />]
  115. const config = row.disk ? sizestr(row.disk, 'M', 1024) : ''
  116. return [<list-body-cell-wrap row={{ row }} hide-field field="disk">{config}</list-body-cell-wrap>]
  117. },
  118. },
  119. formatter: ({ row }) => {
  120. if (!row.disk) return ''
  121. const config = row.disk ? sizestr(row.disk, 'M', 1024) : ''
  122. return config
  123. },
  124. hidden: () => {
  125. return this.$isScopedPolicyMenuHidden('server_hidden_columns.disk')
  126. },
  127. },
  128. getRegionTableColumn(),
  129. ],
  130. groupActions: [
  131. {
  132. label: this.$t('compute.text_723'),
  133. action: () => {
  134. this.createDialog('UnbindResourcesDialog', {
  135. data: this.list.selectedItems,
  136. resourceType: 'server',
  137. columns: this.columns,
  138. title: this.$t('compute.text_723'),
  139. resId: this.resId,
  140. onManager: this.onManager,
  141. refresh: this.refresh,
  142. })
  143. },
  144. meta: () => {
  145. return {
  146. validate: this.list.selectedItems.length > 0,
  147. }
  148. },
  149. },
  150. ],
  151. singleActions: [
  152. {
  153. label: this.$t('compute.text_723'),
  154. action: obj => {
  155. this.createDialog('UnbindResourcesDialog', {
  156. resourceType: 'server',
  157. data: [obj],
  158. columns: this.columns,
  159. title: this.$t('compute.text_723'),
  160. resId: this.resId,
  161. onManager: this.onManager,
  162. refresh: this.refresh,
  163. })
  164. },
  165. meta: obj => {
  166. const ret = {
  167. validate: true,
  168. tooltip: null,
  169. }
  170. return ret
  171. },
  172. },
  173. ],
  174. }
  175. },
  176. created () {
  177. this.list.fetchData()
  178. },
  179. }
  180. </script>