RDS.vue 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. <template>
  2. <page-list
  3. show-tag-columns
  4. show-tag-columns2
  5. show-tag-filter
  6. show-tag-config
  7. :columns="columns"
  8. :list="list"
  9. :showSearchbox="showSearchbox"
  10. :defaultSearchKey="defaultSearchKey"
  11. :export-data-options="exportDataOptions"
  12. :tag-config-params="tagConfigParams" />
  13. </template>
  14. <script>
  15. import ListMixin from '@/mixins/list'
  16. import {
  17. getNameFilter,
  18. getFilter,
  19. getTenantFilter,
  20. getDomainFilter,
  21. getStatusFilter,
  22. getBrandFilter,
  23. getCloudProviderFilter,
  24. getAccountFilter,
  25. getDescriptionFilter,
  26. getCreatedAtFilter,
  27. } from '@/utils/common/tableFilter'
  28. import expectStatus from '@/constants/expectStatus'
  29. import WindowsMixin from '@/mixins/windows'
  30. import regexp from '@/utils/regexp'
  31. import ColumnsMixin from '@DB/views/rds/mixins/columns'
  32. export default {
  33. name: 'RDSList',
  34. mixins: [WindowsMixin, ListMixin, ColumnsMixin],
  35. props: {
  36. id: String,
  37. getParams: {
  38. type: Object,
  39. },
  40. },
  41. data () {
  42. return {
  43. list: this.$list.createList(this, {
  44. ctx: this,
  45. id: this.id,
  46. resource: 'dbinstances',
  47. getParams: this.getParam,
  48. steadyStatus: Object.values(expectStatus.rds).flat(),
  49. filterOptions: {
  50. external_id: {
  51. label: this.$t('table.title.external_id'),
  52. },
  53. id: {
  54. label: this.$t('table.title.id'),
  55. },
  56. name: getNameFilter(),
  57. description: getDescriptionFilter(),
  58. status: getStatusFilter('rds'),
  59. brand: getBrandFilter('rds_engine_brands'),
  60. account: getAccountFilter(),
  61. manager: getCloudProviderFilter(),
  62. projects: getTenantFilter(),
  63. billing_type: getFilter({
  64. field: 'billing_type',
  65. title: this.$t('db.text_54'),
  66. items: [
  67. { label: this.$t('db.text_55'), key: 'postpaid' },
  68. { label: this.$t('db.text_56'), key: 'prepaid' },
  69. ],
  70. }),
  71. engine: getFilter({
  72. field: 'engine',
  73. title: this.$t('db.text_57'),
  74. items: [
  75. { label: 'MySQL', key: 'MySQL' },
  76. { label: 'PostgreSQL', key: 'PostgreSQL' },
  77. { label: 'SQLServer', key: 'SQLServer' },
  78. ],
  79. }),
  80. internal_connection_str: getFilter({
  81. field: 'internal_connection_str',
  82. title: this.$t('db.text_58'),
  83. }),
  84. connection_str: getFilter({
  85. hiddenField: 'internal_connection_str',
  86. field: 'connection_str',
  87. title: this.$t('db.text_59'),
  88. }),
  89. ip_addr: { hiddenField: 'internal_connection_str', label: this.$t('db.url_ip') },
  90. region: {
  91. label: this.$t('db.text_40'),
  92. },
  93. project_domains: getDomainFilter(),
  94. created_at: getCreatedAtFilter(),
  95. },
  96. responseData: this.responseData,
  97. hiddenColumns: ['metadata', 'vcpu_count', 'account', 'created_at'],
  98. autoHiddenFilterKey: 'rds_hidden_columns',
  99. }),
  100. tagConfigParams: {
  101. resource: 'dbinstances',
  102. queryTreeId: 'project-tag-value-tree',
  103. },
  104. }
  105. },
  106. computed: {
  107. exportDataOptions () {
  108. return {
  109. items: [
  110. { label: 'ID', key: 'id' },
  111. ...this.columns,
  112. ],
  113. title: this.$t('dictionary.dbinstance'),
  114. downloadType: 'local',
  115. }
  116. },
  117. },
  118. created () {
  119. this.webconsoleManager = new this.$Manager('webconsole', 'v1')
  120. this.list.fetchData()
  121. this.initSidePageTab('detail')
  122. this.$bus.$on('RdsRefresh', () => {
  123. this.refresh()
  124. })
  125. },
  126. beforeDestroy () {
  127. this.$bus.$off('RdsRefresh')
  128. },
  129. methods: {
  130. getParam () {
  131. const ret = {
  132. ...this.getParams,
  133. details: true,
  134. }
  135. return ret
  136. },
  137. handleOpenSidepage (row, tab) {
  138. this.sidePageTriggerHandle(this, 'RDSSidePage', {
  139. id: row.id,
  140. resource: 'dbinstances',
  141. getParams: {
  142. details: true,
  143. },
  144. steadyStatus: Object.values(expectStatus.rds).flat(),
  145. }, {
  146. list: this.list,
  147. tab,
  148. })
  149. },
  150. refresh () {
  151. this.list.refresh()
  152. },
  153. defaultSearchKey (search) {
  154. if (regexp.isIPv4(search)) {
  155. return 'ip_addr'
  156. }
  157. return 'name'
  158. },
  159. },
  160. }
  161. </script>
  162. <style lang="less">
  163. .td-ellipsis {
  164. width: 150px;
  165. word-break: keep-all;
  166. white-space: nowrap;
  167. overflow: hidden;
  168. text-overflow: ellipsis;
  169. }
  170. </style>