List.vue 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. <template>
  2. <div>
  3. <page-list
  4. :list="list"
  5. :columns="columns"
  6. :group-actions="groupActions"
  7. :single-actions="singleActions"
  8. :showSearchbox="showSearchbox"
  9. :showGroupActions="showGroupActions"
  10. :export-data-options="exportDataOptions" />
  11. </div>
  12. </template>
  13. <script>
  14. import jumper from '@/mixins/jumper'
  15. import expectStatus from '@/constants/expectStatus'
  16. import WindowsMixin from '@/mixins/windows'
  17. import ListMixin from '@/mixins/list'
  18. import { getEnabledSwitchActions } from '@/utils/common/tableActions'
  19. import { getEnabledFilter, getStatusFilter, getDescriptionFilter, getCreatedAtFilter } from '@/utils/common/tableFilter'
  20. import { getRequestT } from '@/utils/utils'
  21. import GlobalSearchMixin from '@/mixins/globalSearch'
  22. import SingleActionsMixin from '../mixins/singleActions'
  23. import ColumnsMixin from '../mixins/columns'
  24. export default {
  25. name: 'IDPList',
  26. mixins: [WindowsMixin, ListMixin, GlobalSearchMixin, ColumnsMixin, SingleActionsMixin, jumper],
  27. props: {
  28. id: String,
  29. getParams: {
  30. type: Object,
  31. },
  32. },
  33. data () {
  34. return {
  35. serverUrl: '',
  36. list: this.$list.createList(this, {
  37. id: this.id,
  38. resource: 'identity_providers',
  39. apiVersion: 'v1',
  40. getParams: this.getParam,
  41. filterOptions: {
  42. id: {
  43. label: this.$t('table.title.id'),
  44. },
  45. name: {
  46. label: this.$t('system.text_101'),
  47. filter: true,
  48. formatter: val => {
  49. return `name.contains("${val}")`
  50. },
  51. },
  52. description: getDescriptionFilter(),
  53. enabled: getEnabledFilter(),
  54. status: getStatusFilter('idp'),
  55. auto_create_user: getEnabledFilter({
  56. label: this.$t('common_501'),
  57. }),
  58. // driver: {
  59. // label: this.$t('system.text_204'),
  60. // dropdown: true,
  61. // multiple: true,
  62. // items: Object.keys(this.$t('idpDrivers')).map(k => {
  63. // return { label: k, key: k.toLocaleLowerCase() }
  64. // }),
  65. // },
  66. template: {
  67. label: this.$t('common_550'),
  68. dropdown: true,
  69. multiple: true,
  70. items: Object.keys(this.$t('idpDrivers')).flatMap(k => {
  71. const templs = this.$t(`idpDrivers.${k}`)
  72. return Object.values(templs).map(v => {
  73. return {
  74. label: this.$t(`idpTmplTitles.${v}`),
  75. key: v.toLocaleLowerCase(),
  76. }
  77. })
  78. }),
  79. },
  80. created_at: getCreatedAtFilter(),
  81. },
  82. steadyStatus: {
  83. status: Object.values(expectStatus.idp).flat(),
  84. sync_status: Object.values(expectStatus.sync).flat(),
  85. },
  86. responseData: this.responseData,
  87. hiddenColumns: ['created_at'],
  88. }),
  89. exportDataOptions: {
  90. items: [
  91. { label: 'ID', key: 'id' },
  92. { label: this.$t('system.text_101'), key: 'name' },
  93. { label: this.$t('system.text_158'), key: 'enabled' },
  94. { label: this.$t('system.text_164'), key: 'status' },
  95. { label: this.$t('system.text_203'), key: 'sync_status' },
  96. { label: this.$t('system.text_204'), key: 'driver' },
  97. { label: this.$t('common.createdAt'), key: 'created_at' },
  98. ],
  99. },
  100. groupActions: [
  101. {
  102. label: this.$t('system.text_128'),
  103. permission: 'idps_create',
  104. action: () => {
  105. this.jumpTo('create')
  106. },
  107. meta: () => {
  108. return {
  109. buttonType: 'primary',
  110. }
  111. },
  112. },
  113. {
  114. label: this.$t('storage.text_33'),
  115. actions: () => {
  116. return [
  117. ...getEnabledSwitchActions(this, undefined, ['idps_perform_enable', 'idps_perform_disable']),
  118. {
  119. label: this.$t('common.delete'),
  120. permission: 'idps_delete',
  121. action: () => {
  122. this.createDialog('DeleteResDialog', {
  123. title: this.$t('common.delete'),
  124. name: this.$t('dictionary.identity_provider'),
  125. vm: this,
  126. data: this.list.selectedItems,
  127. columns: this.columns,
  128. onManager: this.onManager,
  129. })
  130. },
  131. meta: () => this.$getDeleteResult(this.list.selectedItems),
  132. },
  133. ]
  134. },
  135. meta: () => {
  136. return {
  137. validate: !!this.list.selectedItems.length,
  138. }
  139. },
  140. },
  141. ],
  142. }
  143. },
  144. created () {
  145. this.initSidePageTab('idp-detail')
  146. this.list.fetchData()
  147. this.getServerUrl()
  148. },
  149. methods: {
  150. getParam () {
  151. const ret = {
  152. ...this.getParams,
  153. details: true,
  154. }
  155. return ret
  156. },
  157. handleOpenSidepage (row) {
  158. this.sidePageTriggerHandle(this, 'IDPSidePage', {
  159. id: row.id,
  160. resource: 'identity_providers',
  161. apiVersion: 'v1',
  162. getParams: this.getParam,
  163. }, {
  164. list: this.list,
  165. })
  166. },
  167. async getServerUrl () {
  168. let manager = new this.$Manager('services', 'v1')
  169. try {
  170. const response = await manager.list({
  171. params: {
  172. type: ['common'],
  173. $t: getRequestT(),
  174. },
  175. })
  176. const id = (response.data.data && response.data.data.length && response.data.data[0].id) || ''
  177. if (id) {
  178. const configResponse = await manager.getSpecific({
  179. id,
  180. spec: 'config',
  181. params: {
  182. $t: getRequestT(),
  183. },
  184. })
  185. const config = (configResponse.data.config && configResponse.data.config.default) || {}
  186. const apiServer = config.api_server || ''
  187. this.serverUrl = apiServer
  188. }
  189. } catch (error) {
  190. throw error
  191. } finally {
  192. manager = null
  193. }
  194. },
  195. },
  196. }
  197. </script>