List.vue 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. <template>
  2. <div class="event-list">
  3. <page-list
  4. :list="list"
  5. :columns="columns"
  6. :export-data-options="exportDataOptions"
  7. :show-group-actions="true"
  8. :show-page="false"
  9. :refresh-method="refresh"
  10. :single-actions="singleActions" />
  11. </div>
  12. </template>
  13. <script>
  14. import get from 'lodash/get'
  15. import {
  16. getCopyWithContentTableColumn,
  17. getTimeTableColumn,
  18. getBrandTableColumn,
  19. } from '@/utils/common/tableColumn'
  20. import { getNameFilter, distinctFieldFilter, getSuccessFilter, getTimeRangeFilter } from '@/utils/common/tableFilter'
  21. import WindowsMixin from '@/mixins/windows'
  22. export default {
  23. name: 'CloudeventsList',
  24. mixins: [WindowsMixin],
  25. props: {
  26. id: String,
  27. },
  28. data () {
  29. return {
  30. list: this.$list.createList(this, {
  31. id: this.id,
  32. getParams: this.getParam,
  33. resource: 'cloudevents',
  34. apiVersion: 'v1',
  35. idKey: 'event_id',
  36. filterOptions: {
  37. created_at: getTimeRangeFilter({ label: this.$t('cloudenv.text_326'), field: 'created_at' }),
  38. name: getNameFilter({ label: this.$t('cloudenv.text_320') }),
  39. provider: distinctFieldFilter({ service: 'cloudevent', field: 'provider' }),
  40. account: distinctFieldFilter({ service: 'cloudevent', field: 'account' }),
  41. action: distinctFieldFilter({ service: 'cloudevent', field: 'action' }),
  42. service: distinctFieldFilter({ service: 'cloudevent', field: 'service' }),
  43. resource_type: distinctFieldFilter({ service: 'cloudevent', field: 'resource_type' }),
  44. success: getSuccessFilter(),
  45. manager: distinctFieldFilter({ service: 'cloudevent', field: 'manager' }),
  46. },
  47. }),
  48. columns: [
  49. getTimeTableColumn({
  50. field: 'created_at',
  51. title: this.$t('cloudenv.text_326'),
  52. }),
  53. getBrandTableColumn({
  54. field: 'provider',
  55. }),
  56. getCopyWithContentTableColumn({
  57. field: 'account',
  58. title: this.$t('cloudenv.text_498'),
  59. }),
  60. getCopyWithContentTableColumn({
  61. title: this.$t('cloudenv.text_322'),
  62. field: 'logAction',
  63. hideField: true,
  64. message: row => row.action,
  65. slotCallback: (row) => {
  66. return row.action
  67. },
  68. }),
  69. getCopyWithContentTableColumn({
  70. title: this.$t('cloudenv.Service'),
  71. field: 'service',
  72. }),
  73. getCopyWithContentTableColumn({
  74. title: this.$t('cloudenv.text_321'),
  75. field: 'resource_type',
  76. }),
  77. getCopyWithContentTableColumn({
  78. title: this.$t('cloudenv.text_320'),
  79. field: 'name',
  80. hideField: true,
  81. slotCallback: (row) => {
  82. const resource_name = get(row, 'request.resource_name')
  83. return resource_name || row.name
  84. },
  85. message: (row) => {
  86. const resource_name = get(row, 'request.resource_name')
  87. return resource_name || row.name
  88. },
  89. }),
  90. {
  91. title: this.$t('cloudenv.text_323'),
  92. field: 'success',
  93. width: 80,
  94. slots: {
  95. default: ({ row }) => {
  96. const txt = row.success ? this.$t('cloudenv.text_324', ['']) : this.$t('cloudenv.text_325', [''])
  97. const color = row.success ? '#67C23A' : '#F56C6C'
  98. return [<span style={{ color }}>{ txt }</span>]
  99. },
  100. },
  101. },
  102. getCopyWithContentTableColumn({
  103. field: 'manager',
  104. title: this.$t('cloudenv.text_318'),
  105. }),
  106. ],
  107. singleActions: [{
  108. label: this.$t('common.view'),
  109. action: row => {
  110. let text = ''
  111. try {
  112. text = JSON.stringify(JSON.parse(row.notes), null, 4)
  113. } catch (e) {
  114. text = row.notes
  115. }
  116. this.clickHandler(text)
  117. },
  118. }],
  119. exportDataOptions: {
  120. items: [
  121. // { label: 'ID', key: 'id' },
  122. { label: this.$t('cloudenv.text_320'), key: 'name' },
  123. { label: this.$t('cloudenv.Service'), key: 'service' },
  124. { label: this.$t('cloudenv.text_322'), key: 'action' },
  125. { label: this.$t('cloudenv.text_323'), key: 'success' },
  126. { label: this.$t('cloudenv.text_326'), key: 'created_at' },
  127. { label: this.$t('cloudenv.text_102'), key: 'provider' },
  128. { label: this.$t('cloudenv.text_498'), key: 'account' },
  129. { label: this.$t('cloudenv.text_318'), key: 'manager' },
  130. // { label: '备注', key: 'notes' },
  131. ],
  132. limit: () => Object.keys(this.list.data).length,
  133. export: 'custom',
  134. notCombineListParams: true,
  135. exportType: {
  136. custom: { label: this.$t('cloudenv.text_328'), key: 'custom' },
  137. },
  138. },
  139. }
  140. },
  141. created () {
  142. this.initSidePageTab('cloudregion-detail')
  143. this.list.fetchData()
  144. },
  145. methods: {
  146. clickHandler (val) {
  147. this.createDialog('EventLogDialog', {
  148. data: val,
  149. })
  150. },
  151. refresh (clearSelected) {
  152. clearSelected()
  153. this.list.reset()
  154. this.list.fetchData()
  155. },
  156. },
  157. }
  158. </script>