List.vue 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <template>
  2. <page-list
  3. :list="list"
  4. :columns="columns"
  5. :group-actions="groupActions"
  6. :single-actions="singleActions" />
  7. </template>
  8. <script>
  9. import WindowsMixin from '@/mixins/windows'
  10. import ListMixin from '@/mixins/list'
  11. import expectStatus from '@/constants/expectStatus'
  12. import { getEnabledFilter } from '@/utils/common/tableFilter'
  13. import SingleActionsMixin from '../mixins/singleActions'
  14. import ColumnsMixin from '../mixins/columns'
  15. export default {
  16. name: 'CloudproviderregionList',
  17. mixins: [WindowsMixin, ListMixin, ColumnsMixin, SingleActionsMixin],
  18. props: {
  19. getParams: {
  20. type: [Function, Object],
  21. },
  22. cloudproviderId: {
  23. type: String,
  24. required: true,
  25. },
  26. },
  27. data () {
  28. // const ownerDomain = list => this.$store.getters.isAdminMode || this.list.selectedItems.every(obj => obj.domain_id === this.$store.getters.userInfo.projectDomainId)
  29. return {
  30. list: this.$list.createList(this, {
  31. resource: 'cloudproviderregions',
  32. getParams: this.getParams,
  33. steadyStatus: {
  34. sync_status: Object.values(expectStatus.cloudaccountSyncStatus).flat(),
  35. },
  36. idKey: 'cloudregion_id',
  37. filterOptions: {
  38. cloudregion: {
  39. label: this.$t('cloudenv.text_10'),
  40. dropdown: true,
  41. multiple: true,
  42. items: [],
  43. filter: true,
  44. jointFilter: true,
  45. formatter: val => {
  46. return `cloudregions.id(cloudregion_id).id.in(${val.map(item => `'${item}'`).join(',')})`
  47. },
  48. },
  49. enabled: getEnabledFilter({
  50. label: this.$t('cloudenv.text_366'),
  51. }),
  52. },
  53. params: { scope: this.$store.getters.scope },
  54. batchItemGetParamsFormatter: (params) => {
  55. if (params.id) {
  56. const p = { ...params, joint_filter: `cloudregions.id(cloudregion_id).id.in(${params.id.map(item => `'${item}'`).join(',')})` }
  57. delete p.id
  58. return p
  59. }
  60. return params
  61. },
  62. }),
  63. groupActions: [
  64. {
  65. label: this.$t('cloudenv.text_363'),
  66. action: () => {
  67. this.createDialog('cloudproviderregionsSetAutoSyncDialog', {
  68. data: this.list.selectedItems,
  69. columns: this.columns,
  70. refresh: this.refresh,
  71. cloudproviderId: this.cloudproviderId,
  72. })
  73. },
  74. meta: () => {
  75. return {
  76. validate: this.list.selectedItems.length,
  77. }
  78. },
  79. },
  80. ],
  81. }
  82. },
  83. watch: {
  84. cloudproviderId (Val, oldVal) {
  85. if (oldVal !== Val && Val) {
  86. this.fetchRegionList()
  87. }
  88. },
  89. },
  90. created () {
  91. this.fetchRegionList()
  92. this.list.fetchData()
  93. },
  94. methods: {
  95. refresh () {
  96. this.list.refresh()
  97. },
  98. fetchRegionList () {
  99. const params = {
  100. manager: this.cloudproviderId,
  101. scope: this.$store.getters.scope,
  102. }
  103. const self = this
  104. try {
  105. const m = new this.$Manager('cloudregions')
  106. m.list({ params }).then((ret) => {
  107. self.list.filterOptions.cloudregion.items = ret.data.data.map((item) => {
  108. return {
  109. label: item._i18n ? item._i18n.name : item.name,
  110. key: item.id,
  111. }
  112. })
  113. })
  114. } catch (e) {
  115. this.regionItems = []
  116. throw e
  117. }
  118. },
  119. },
  120. }
  121. </script>