List.vue 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <template>
  2. <page-list
  3. :list="list"
  4. :columns="columns"
  5. :group-actions="groupActions"
  6. :single-actions="singleActions"
  7. :export-data-options="exportDataOptions" />
  8. </template>
  9. <script>
  10. import { getStatusFilter, getDomainFilter, getTenantFilter, getDescriptionFilter } from '@/utils/common/tableFilter'
  11. import WindowsMixin from '@/mixins/windows'
  12. import ListMixin from '@/mixins/list'
  13. import expectStatus from '@/constants/expectStatus'
  14. import SingleActionsMixin from '../mixins/singleActions'
  15. import ColumnsMixin from '../mixins/columns'
  16. export default {
  17. name: 'InstanceGroupList',
  18. mixins: [WindowsMixin, ListMixin, ColumnsMixin, SingleActionsMixin],
  19. props: {
  20. id: String,
  21. getParams: {
  22. type: Object,
  23. default: () => ({}),
  24. },
  25. },
  26. data () {
  27. return {
  28. list: this.$list.createList(this, {
  29. id: this.id,
  30. resource: 'instancegroups',
  31. steadyStatus: Object.values(expectStatus.instanceGroup).flat(),
  32. getParams: this.getParam,
  33. filterOptions: {
  34. id: {
  35. label: this.$t('table.title.id'),
  36. },
  37. name: {
  38. label: this.$t('table.title.name'),
  39. filter: true,
  40. formatter: val => {
  41. return `name.contains(${val})`
  42. },
  43. },
  44. description: getDescriptionFilter(),
  45. status: getStatusFilter('instanceGroup'),
  46. force_dispersion: {
  47. label: this.$t('table.title.strategy'),
  48. dropdown: true,
  49. items: [
  50. { label: this.$t('compute.text_695'), key: true },
  51. { label: this.$t('compute.text_696'), key: false },
  52. ],
  53. },
  54. enabled: {
  55. label: this.$t('table.title.enable_status'),
  56. dropdown: true,
  57. items: [
  58. { label: this.$t('compute.text_656'), key: true },
  59. { label: this.$t('compute.text_569'), key: false },
  60. ],
  61. },
  62. projects: getTenantFilter(),
  63. project_domains: getDomainFilter(),
  64. },
  65. hiddenColumns: ['created_at'],
  66. }),
  67. exportDataOptions: {
  68. items: [
  69. { label: 'ID', key: 'id' },
  70. { label: this.$t('table.title.enable_status'), key: 'enabled' },
  71. { label: this.$t('table.title.name'), key: 'name' },
  72. { label: this.$t('table.title.strategy'), key: 'force_dispersion' },
  73. { label: this.$t('table.title.granularity'), key: 'granularity' },
  74. { label: this.$t('table.title.associated_server'), key: 'guest_count' },
  75. { label: this.$t('res.project'), key: 'tenant' },
  76. { label: this.$t('table.title.create_time'), key: 'created_at' },
  77. ],
  78. },
  79. groupActions: [
  80. {
  81. label: this.$t('compute.perform_create'),
  82. permission: 'instancegroups_create',
  83. action: () => {
  84. this.createDialog('InstanceGroupCreateDialog', {
  85. onManager: this.onManager,
  86. refresh: this.refresh,
  87. })
  88. },
  89. meta: () => {
  90. return {
  91. buttonType: 'primary',
  92. }
  93. },
  94. },
  95. {
  96. label: this.$t('compute.perform_delete'),
  97. permission: 'instancegroups_delete',
  98. action: () => {
  99. this.createDialog('DeleteResDialog', {
  100. vm: this,
  101. data: this.list.selectedItems,
  102. columns: this.columns,
  103. title: this.$t('compute.text_700', [this.$t('dictionary.instancegroup')]),
  104. name: this.$t('dictionary.instancegroup'),
  105. onManager: this.onManager,
  106. })
  107. },
  108. meta: () => this.$getDeleteResult(this.list.selectedItems),
  109. },
  110. ],
  111. }
  112. },
  113. created () {
  114. this.initSidePageTab('instance-group-detail')
  115. this.list.fetchData()
  116. this.$bus.$on('InstanceGroupListRefresh', (id) => {
  117. this.list.singleRefresh(id, Object.values(expectStatus.instanceGroup).flat())
  118. })
  119. },
  120. methods: {
  121. getParam () {
  122. const ret = {
  123. details: true,
  124. ...this.getParams,
  125. }
  126. return ret
  127. },
  128. handleOpenSidepage (row, tab) {
  129. this.sidePageTriggerHandle(this, 'InstanceGroupSidePage', {
  130. id: row.id,
  131. resource: 'instancegroups',
  132. getParams: this.getParam,
  133. }, {
  134. list: this.list,
  135. tab,
  136. })
  137. },
  138. },
  139. }
  140. </script>