index.vue 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. <template>
  2. <page-list
  3. v-if="list"
  4. :list="list"
  5. :columns="columns"
  6. :group-actions="groupActions"
  7. :single-actions="singleActions" />
  8. </template>
  9. <script>
  10. import WindowsMixin from '@/mixins/windows'
  11. import { getTimeTableColumn } from '@/utils/common/tableColumn'
  12. const RESOURCE_KEYWORD_MAP = {
  13. namespace: 'K8SNamespaceSidePage',
  14. rbacrole: 'K8SRbacRoleSidePage',
  15. rbacclusterrole: 'K8SRbacclusteroleSidePage',
  16. rbacrolebinding: 'K8sRbacrolebindingSidePage',
  17. rbacclusterrolebinding: 'K8SRbacclusterrolebindingSidePage',
  18. }
  19. export default {
  20. name: 'K8SFederatedAccachClsuterSidepage',
  21. mixins: [WindowsMixin],
  22. props: {
  23. id: String,
  24. data: {
  25. type: Object,
  26. },
  27. onManager: {
  28. type: Function,
  29. required: true,
  30. },
  31. resource: {
  32. type: String,
  33. required: true,
  34. },
  35. title: {
  36. type: String,
  37. required: true,
  38. },
  39. },
  40. data () {
  41. return {
  42. list: this.$list.createList(this, {
  43. id: this.id,
  44. resource: this.fetchData,
  45. idKey: 'cluster_id',
  46. filterOptions: {
  47. cluster_name: {
  48. label: this.$t('k8s.text_243'),
  49. },
  50. resource_name: {
  51. label: this.$t('k8s.text_409'),
  52. },
  53. },
  54. }),
  55. groupActions: [
  56. {
  57. label: this.$t('k8s.text_366'),
  58. permission: `k8s_${this.resource}_perform_attach_cluster`,
  59. action: () => {
  60. this.createDialog('AttachClusterDialog', {
  61. vm: this,
  62. data: this.data,
  63. columns: this.columns,
  64. title: this.$t('k8s.text_368'),
  65. name: this.$t('k8s.text_365'),
  66. onManager: this.onManager,
  67. resource: this.resource.replace(/^(\w+)s$/, '$1'), // 把 resource 复数变单数
  68. success: () => {
  69. this.list.refresh()
  70. },
  71. })
  72. },
  73. meta: () => ({
  74. buttonType: 'primary',
  75. }),
  76. },
  77. ],
  78. singleActions: [
  79. {
  80. label: this.$t('k8s.text_199'),
  81. permission: `k8s_${this.resource}_perform_detach_cluster`,
  82. action: (obj) => {
  83. this.createDialog('DetachClusterDialog', {
  84. vm: this,
  85. data: [obj],
  86. columns: this.columns,
  87. onManager: this.onManager,
  88. name: this.title,
  89. success: () => {
  90. this.list.refresh()
  91. },
  92. })
  93. },
  94. },
  95. ],
  96. columns: [
  97. {
  98. field: 'cluster',
  99. title: this.$t('k8s.text_243'),
  100. slots: {
  101. default: ({ row }, h) => {
  102. const ret = [<side-page-trigger onTrigger={ () => this.handleOpenSidepage(row) }>{ row.cluster }</side-page-trigger>]
  103. return ret
  104. },
  105. },
  106. },
  107. {
  108. field: 'resource_id',
  109. title: this.$t('k8s.text_64'),
  110. slots: {
  111. default: ({ row }, h) => {
  112. let ret = [row.resource]
  113. if (row.resource_keyword && RESOURCE_KEYWORD_MAP[row.resource_keyword]) {
  114. const sidepageName = RESOURCE_KEYWORD_MAP[row.resource_keyword]
  115. ret = [<side-page-trigger onTrigger={ () => this.handleOpenResourceSidepage(row, sidepageName) }>{ row.resource }</side-page-trigger>]
  116. }
  117. return ret
  118. },
  119. },
  120. },
  121. getTimeTableColumn(),
  122. getTimeTableColumn({
  123. field: 'updated_at',
  124. title: this.$t('common.updatedAt'),
  125. }),
  126. ],
  127. }
  128. },
  129. created () {
  130. this.list.fetchData()
  131. },
  132. methods: {
  133. handleOpenSidepage (row) {
  134. this.sidePageTriggerHandle(this, 'K8SClusterSidePage', {
  135. id: row.cluster_id,
  136. resource: 'kubeclusters',
  137. apiVersion: 'v1',
  138. getParams: this.list.getParams,
  139. }, {
  140. cancel: () => {
  141. this.list.refresh()
  142. },
  143. })
  144. },
  145. handleOpenResourceSidepage (row, sidepageName) {
  146. this.sidePageTriggerHandle(this, sidepageName, {
  147. id: row.resource_id,
  148. resource: `${row.resource_keyword}s`,
  149. apiVersion: 'v1',
  150. getParams: this.list.getParams,
  151. }, {
  152. cancel: () => {
  153. this.list.refresh()
  154. },
  155. })
  156. },
  157. async fetchData (params) {
  158. try {
  159. const managerArgs = {
  160. id: this.data.id,
  161. spec: 'kubeclusters',
  162. params: {
  163. details: true,
  164. ...params,
  165. },
  166. }
  167. const res = await new this.$Manager(this.resource, 'v1').getSpecific(managerArgs)
  168. return res
  169. } catch (error) {
  170. throw error
  171. }
  172. },
  173. },
  174. }
  175. </script>