List.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. <template>
  2. <page-list
  3. :list="list"
  4. :columns="columns"
  5. :single-actions="singleActions"
  6. :group-actions="groupActions"
  7. :export-data-options="exportDataOptions" />
  8. </template>
  9. <script>
  10. import * as R from 'ramda'
  11. import { mapGetters } from 'vuex'
  12. import ColumnsMixin from '../mixins/columns'
  13. import SingleActionsMixin from '../mixins/singleActions'
  14. import ListMixin from '@/mixins/list'
  15. import WindowsMixin from '@/mixins/windows'
  16. export default {
  17. name: 'ReservedIPList',
  18. mixins: [WindowsMixin, ListMixin, ColumnsMixin, SingleActionsMixin],
  19. props: {
  20. id: String,
  21. getParams: {
  22. type: Object,
  23. default: () => ({}),
  24. },
  25. data: Object,
  26. },
  27. data () {
  28. return {
  29. list: this.$list.createList(this, {
  30. id: this.id,
  31. resource: 'reservedips',
  32. getParams: this.getParam,
  33. filterOptions: {
  34. ip_addr: {
  35. label: this.$t('network.text_213'),
  36. },
  37. },
  38. }),
  39. exportDataOptions: {
  40. items: [
  41. { label: 'ID', key: 'id' },
  42. { label: this.$t('network.text_565'), key: 'network' },
  43. { label: this.$t('network.text_213'), key: 'ip_addr' },
  44. { label: this.$t('network.text_668'), key: 'notes' },
  45. ],
  46. },
  47. groupActions: [
  48. {
  49. label: this.$t('network.text_26'),
  50. permission: 'reservedips_create',
  51. action: () => {
  52. this.createDialog('ReservedIpCreateDialog', {
  53. title: this.$t('network.text_26'),
  54. onManager: this.onManager,
  55. refresh: this.refreshData,
  56. network: this.data,
  57. })
  58. },
  59. meta: () => {
  60. let validate = true
  61. if (!R.isNil(this.data) && !R.isEmpty(this.data)) {
  62. validate = this.isOwner(this.data)
  63. }
  64. return {
  65. validate,
  66. tooltip: !validate ? this.$t('network.text_627') : null,
  67. buttonType: 'primary',
  68. }
  69. },
  70. },
  71. {
  72. label: this.$t('network.text_666'),
  73. permission: 'reservedips_delete',
  74. action: () => {
  75. this.createDialog('ReservedIPFreedDialog', {
  76. title: this.$t('network.text_666'),
  77. onManager: this.onManager,
  78. refresh: this.refreshData,
  79. columns: this.columns,
  80. data: this.list.selectedItems,
  81. name: this.$t('network.text_651'),
  82. query: this.getParams,
  83. })
  84. },
  85. meta: () => {
  86. let { validate, tooltip } = this.$getDeleteResult(this.list.selectedItems)
  87. if (validate) {
  88. if (!R.isNil(this.data) && !R.isEmpty(this.data)) {
  89. validate = this.isOwner(this.data)
  90. }
  91. }
  92. return {
  93. validate,
  94. tooltip,
  95. }
  96. },
  97. },
  98. ],
  99. }
  100. },
  101. computed: {
  102. ...mapGetters(['isAdminMode', 'isDomainMode', 'userInfo']),
  103. },
  104. created () {
  105. this.initSidePageTab('detail')
  106. this.list.fetchData()
  107. },
  108. methods: {
  109. refreshData () {
  110. this.$emit('refresh')
  111. this.refresh()
  112. },
  113. getParam () {
  114. const ret = {
  115. details: true,
  116. with_meta: true,
  117. ...this.getParams,
  118. }
  119. return ret
  120. },
  121. isOwner (obj) {
  122. if (this.isAdminMode) return true
  123. if (this.isDomainMode) return obj.domain_id === this.userInfo.projectDomainId
  124. return obj.tenant_id === this.userInfo.projectId
  125. },
  126. },
  127. }
  128. </script>