List.vue 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. <template>
  2. <page-list
  3. :list="list"
  4. :columns="templateListColumns || columns"
  5. :single-actions="singleActions"
  6. :group-actions="groupActions"
  7. :showSearchbox="showSearchbox"
  8. :showGroupActions="showGroupActions"
  9. :export-data-options="exportDataOptions"
  10. :show-single-actions="!isTemplate"
  11. :show-page="!isTemplate" />
  12. </template>
  13. <script>
  14. import * as R from 'ramda'
  15. import { mapGetters } from 'vuex'
  16. import ListMixin from '@/mixins/list'
  17. import ResTemplateListMixin from '@/mixins/resTemplateList'
  18. import WindowsMixin from '@/mixins/windows'
  19. import { getTenantFilter, getDomainFilter, getDescriptionFilter, getCreatedAtFilter } from '@/utils/common/tableFilter'
  20. import GlobalSearchMixin from '@/mixins/globalSearch'
  21. import ColumnsMixin from '../mixins/columns'
  22. import SingleActionsMixin from '../mixins/singleActions'
  23. export default {
  24. name: 'LbaclsList',
  25. mixins: [WindowsMixin, ListMixin, GlobalSearchMixin, ColumnsMixin, SingleActionsMixin, ResTemplateListMixin],
  26. props: {
  27. id: String,
  28. getParams: {
  29. type: [Function, Object],
  30. },
  31. },
  32. data () {
  33. return {
  34. list: this.$list.createList(this, {
  35. ctx: this,
  36. id: this.id,
  37. resource: 'loadbalanceracls',
  38. getParams: this.getParam,
  39. isTemplate: this.isTemplate,
  40. templateLimit: this.templateLimit,
  41. filterOptions: {
  42. id: {
  43. label: this.$t('table.title.id'),
  44. },
  45. name: {
  46. label: this.$t('network.text_291'),
  47. filter: true,
  48. formatter: val => {
  49. return `name.contains(${val})`
  50. },
  51. },
  52. description: getDescriptionFilter(),
  53. projects: getTenantFilter(),
  54. project_domains: getDomainFilter(),
  55. created_at: getCreatedAtFilter(),
  56. },
  57. responseData: this.responseData,
  58. }),
  59. exportDataOptions: {
  60. items: [
  61. { label: 'ID', key: 'id' },
  62. { label: this.$t('network.text_291'), key: 'name' },
  63. { label: this.$t('network.text_312'), key: 'acl_entries' },
  64. { label: this.$t('network.text_313'), key: 'created_at' },
  65. { label: this.$t('network.text_314'), key: 'updated_at' },
  66. { label: this.$t('dictionary.project'), key: 'tenant' },
  67. { label: this.$t('common.createdAt'), key: 'created_at' },
  68. ],
  69. },
  70. groupActions: [
  71. {
  72. label: this.$t('network.text_26'),
  73. permission: 'loadbalanceracls_create',
  74. action: () => {
  75. this.createDialog('LbaclsCreateDialog', {
  76. title: this.$t('network.text_315'),
  77. data: this.list.selectedItems,
  78. onManager: this.onManager,
  79. type: 'create',
  80. })
  81. },
  82. meta: () => {
  83. return {
  84. buttonType: 'primary',
  85. // validate: this.hasService(this.userInfo, 'lbagent') || this.hasHypervisors(['Aliyun', 'Qcloud', 'Huawei', 'Aws']),
  86. }
  87. },
  88. },
  89. {
  90. label: this.$t('network.text_131'),
  91. permission: 'loadbalanceracls_delete',
  92. action: () => {
  93. this.createDialog('DeleteResDialog', {
  94. vm: this,
  95. title: this.$t('network.text_131'),
  96. name: this.$t('network.text_142'),
  97. alert: this.$t('network.text_767'),
  98. data: this.list.selectedItems,
  99. columns: this.columns,
  100. onManager: this.onManager,
  101. })
  102. },
  103. meta: () => {
  104. return {
  105. validate: this.list.allowDelete(),
  106. }
  107. },
  108. },
  109. ],
  110. }
  111. },
  112. computed: {
  113. ...mapGetters(['userInfo', 'capability']),
  114. },
  115. created () {
  116. this.initSidePageTab('lbacl-detail')
  117. this.list.fetchData()
  118. },
  119. methods: {
  120. getParam () {
  121. const ret = {
  122. ...(R.is(Function, this.getParams) ? this.getParams() : this.getParams),
  123. }
  124. return ret
  125. },
  126. hasService ($userInfo, service) {
  127. if ($userInfo && $userInfo.services && $userInfo.services.length) {
  128. const results = $userInfo.services.filter(item => {
  129. return item.type === service && item.status === true
  130. })
  131. return results && results.length > 0
  132. }
  133. return false
  134. },
  135. hasHypervisors (hypervisors) {
  136. for (let i = 0, len = hypervisors.length; i < len; i++) {
  137. if ((this.capability.loadbalancer_engine_brands || []).indexOf(hypervisors[i]) !== -1) {
  138. return true
  139. }
  140. }
  141. return false
  142. },
  143. handleOpenSidepage (row) {
  144. this.sidePageTriggerHandle(this, 'LbaclSidePage', {
  145. id: row.id,
  146. resource: 'loadbalanceracls',
  147. getParams: this.getParam,
  148. }, {
  149. list: this.list,
  150. })
  151. },
  152. },
  153. }
  154. </script>