UserList.vue 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  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 {
  11. getEnabledTableColumn,
  12. getProjectDomainTableColumn,
  13. getNameDescriptionTableColumn,
  14. } from '@/utils/common/tableColumn'
  15. import i18n from '@/locales'
  16. import WindowsMixin from '@/mixins/windows'
  17. export default {
  18. name: 'GroupUserList',
  19. mixins: [WindowsMixin],
  20. props: {
  21. resId: String,
  22. id: String,
  23. getParams: {
  24. type: Object,
  25. },
  26. onManager: Function,
  27. data: {
  28. type: Object,
  29. },
  30. },
  31. data () {
  32. return {
  33. list: this.$list.createList(this, {
  34. id: this.id,
  35. resource: `groups/${this.resId}/users`,
  36. apiVersion: 'v1',
  37. getParams: this.getParam,
  38. filterOptions: {
  39. name: {
  40. label: this.$t('system.text_101'),
  41. filter: true,
  42. formatter: val => {
  43. return `name.contains("${val}")`
  44. },
  45. },
  46. },
  47. }),
  48. exportDataOptions: {
  49. items: [
  50. { label: 'ID', key: 'id' },
  51. { label: this.$t('dictionary.user'), key: 'name' },
  52. { label: this.$t('system.text_163'), key: 'enabled' },
  53. { label: this.$t('table.title.owner_domain'), key: 'project_domain' },
  54. ],
  55. },
  56. columns: [
  57. {
  58. title: this.$t('dictionary.user'),
  59. field: 'name',
  60. slots: {
  61. default: ({ row }, h) => {
  62. return [
  63. <list-body-cell-wrap copy row={row} field='name' title={row.name} message={row.name} hideField={true}>
  64. <side-page-trigger permission='users_get' name='UserSidePage' id={row.id} vm={this}>{ row.name }</side-page-trigger>
  65. </list-body-cell-wrap>,
  66. ]
  67. },
  68. },
  69. },
  70. getEnabledTableColumn(),
  71. getProjectDomainTableColumn(),
  72. ],
  73. groupActions: [
  74. {
  75. label: this.$t('system.text_452', [this.$t('dictionary.user')]),
  76. permission: 'groups_perform_add_users',
  77. action: () => {
  78. this.createDialog('GroupJoinUserDialog', {
  79. data: [this.data],
  80. columns: [
  81. getNameDescriptionTableColumn({
  82. onManager: this.onManager,
  83. hideField: true,
  84. slotCallback: row => {
  85. return (
  86. <side-page-trigger onTrigger={ () => this.handleOpenSidepage(row) }>{ row.name }</side-page-trigger>
  87. )
  88. },
  89. formRules: [{
  90. required: true,
  91. message: i18n.t('system.text_168'),
  92. whitespace: true,
  93. }],
  94. }),
  95. getProjectDomainTableColumn(),
  96. ],
  97. title: this.$t('system.text_452', [this.$t('dictionary.user')]),
  98. success: () => {
  99. this.list.refresh()
  100. },
  101. })
  102. },
  103. meta: () => {
  104. return {
  105. buttonType: 'primary',
  106. }
  107. },
  108. },
  109. {
  110. label: this.$t('compute.text_950'),
  111. permission: 'groups_perform_remove_users',
  112. action: () => {
  113. this.createDialog('GroupLeaveUserDialog', {
  114. title: this.$t('system.text_525'),
  115. data: this.list.selectedItems,
  116. resItem: this.data,
  117. columns: this.columns,
  118. success: () => {
  119. this.list.refresh()
  120. },
  121. })
  122. },
  123. meta: () => ({
  124. validate: this.list.selectedItems.length > 0,
  125. }),
  126. },
  127. ],
  128. singleActions: [
  129. {
  130. label: this.$t('compute.text_950'),
  131. permission: 'groups_perform_remove_users',
  132. action: (obj) => {
  133. this.createDialog('GroupLeaveUserDialog', {
  134. title: this.$t('compute.text_950'),
  135. data: [obj],
  136. resItem: this.data,
  137. columns: this.columns,
  138. success: () => {
  139. this.list.refresh()
  140. },
  141. })
  142. },
  143. },
  144. ],
  145. }
  146. },
  147. created () {
  148. this.list.fetchData()
  149. this.$bus.$on('GroupUserListRefresh', () => {
  150. this.list.refresh()
  151. }, this)
  152. },
  153. methods: {
  154. getParam () {
  155. const ret = {
  156. ...this.getParams,
  157. details: true,
  158. }
  159. return ret
  160. },
  161. },
  162. }
  163. </script>