columns.js 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. import { sizestr } from '@/utils/utils'
  2. import { getProjectTableColumn, getStatusTableColumn, getNameDescriptionTableColumn, getBrandTableColumn, getBillingTableColumn, getTagTableColumn, getAccountTableColumn, getTimeTableColumn } from '@/utils/common/tableColumn'
  3. import i18n from '@/locales'
  4. import { DBINSTANCE_CATEGORY, DBINSTANCE_STORAGE_TYPE } from '../constants/index.js'
  5. export default {
  6. created () {
  7. this.columns = [
  8. getNameDescriptionTableColumn({
  9. onManager: this.onManager,
  10. hideField: true,
  11. addLock: true,
  12. addBackup: true,
  13. formRules: [
  14. { required: true, message: i18n.t('db.text_136') },
  15. { validator: this.$validate('resourceCreateName') },
  16. ],
  17. slotCallback: row => {
  18. return (
  19. <side-page-trigger onTrigger={ () => this.handleOpenSidepage(row) }>{ row.name }</side-page-trigger>
  20. )
  21. },
  22. hidden: () => {
  23. return this.$isScopedPolicyMenuHidden('rds_hidden_columns.name')
  24. },
  25. }),
  26. getStatusTableColumn({
  27. statusModule: 'rds',
  28. vm: this,
  29. hidden: () => {
  30. return this.$isScopedPolicyMenuHidden('rds_hidden_columns.status')
  31. },
  32. }),
  33. getTagTableColumn({
  34. onManager: this.onManager,
  35. resource: 'rds_dbinstances',
  36. columns: () => this.columns,
  37. hidden: () => {
  38. return this.$isScopedPolicyMenuHidden('rds_hidden_columns.metadata')
  39. },
  40. }),
  41. {
  42. field: 'category',
  43. title: i18n.t('db.text_61'),
  44. width: 100,
  45. formatter: ({ row }) => {
  46. return DBINSTANCE_CATEGORY[row.category] || row.category || '-'
  47. },
  48. hidden: () => {
  49. return this.$isScopedPolicyMenuHidden('rds_hidden_columns.category')
  50. },
  51. },
  52. {
  53. field: 'vcpu_count',
  54. title: i18n.t('db.text_109'),
  55. width: 120,
  56. formatter: ({ row }) => {
  57. if (!row.brand) return '-'
  58. if (row.brand.toLowerCase() === 'qcloud') return i18n.t('db.text_349', [row.vcpu_count, sizestr(row.vmem_size_mb, 'M', 1024), row.disk_size_gb])
  59. if (row.brand.toLowerCase() === 'azure') {
  60. if (row.metadata && row.metadata['sys:DTU']) {
  61. return row.metadata['sys:DTU'] + 'DTU'
  62. }
  63. }
  64. return i18n.t('db.text_151', [row.vcpu_count, sizestr(row.vmem_size_mb, 'M', 1024)])
  65. },
  66. hidden: () => {
  67. return this.$isScopedPolicyMenuHidden('rds_hidden_columns.vcpu_count')
  68. },
  69. },
  70. {
  71. field: 'engine',
  72. title: i18n.t('db.text_57'),
  73. width: 100,
  74. formatter: ({ row }) => {
  75. return `${row.engine} ${row.engine_version}`
  76. },
  77. hidden: () => {
  78. return this.$isScopedPolicyMenuHidden('rds_hidden_columns.engine')
  79. },
  80. },
  81. {
  82. field: 'internal_connection_str',
  83. title: i18n.t('db.text_152'),
  84. minWidth: 200,
  85. slots: {
  86. default: ({ row }) => {
  87. const pri = row.internal_connection_str
  88. const pub = row.connection_str
  89. const ip_addrs = (row.ip_addrs || '').split(',')
  90. if (!pri && !pub) {
  91. return '-'
  92. }
  93. const connection = (title, value) => {
  94. if (!value) {
  95. return null
  96. }
  97. // return (
  98. // <div class="d-flex align-items-center">
  99. // <span class="text-truncate">
  100. // {title}:{value}
  101. // </span>
  102. // <copy message={value} />
  103. // </div>
  104. // )
  105. return [
  106. <list-body-cell-wrap field='value' row={{ value }} hide-field copy message={value}>
  107. {title} : <span>{ value || '-' }</span>
  108. </list-body-cell-wrap>,
  109. ]
  110. }
  111. return [
  112. connection(i18n.t('db.text_153'), pri),
  113. connection(i18n.t('db.text_154'), pub),
  114. ...ip_addrs.map(ip => {
  115. return (<list-body-cell-wrap hide-field field='ip' row={{ ip }} copy message={ip}><span>IP: {ip}</span></list-body-cell-wrap>)
  116. }),
  117. ]
  118. },
  119. },
  120. formatter: ({ row }) => {
  121. const pri = row.internal_connection_str
  122. const pub = row.connection_str
  123. const ip_addrs = (row.ip_addrs || '').split(',')
  124. if (!pri && !pub) {
  125. return '-'
  126. }
  127. return `${i18n.t('db.text_153') + ':' + pri},${i18n.t('db.text_154') + ':' + pub}, IP:${ip_addrs}`
  128. },
  129. hidden: () => {
  130. return this.$isScopedPolicyMenuHidden('rds_hidden_columns.internal_connection_str')
  131. },
  132. },
  133. {
  134. title: i18n.t('db.text_64'),
  135. field: 'port',
  136. width: 120,
  137. formatter: ({ row }) => {
  138. return row.port || '-'
  139. },
  140. hidden: () => {
  141. return this.$isScopedPolicyMenuHidden('rds_hidden_columns.port')
  142. },
  143. },
  144. {
  145. field: 'storage_type',
  146. title: this.$t('db.text_120'),
  147. slots: {
  148. default: ({ row }) => {
  149. return DBINSTANCE_STORAGE_TYPE[row.storage_type] || row.storage_type || '-'
  150. },
  151. },
  152. },
  153. {
  154. field: 'secgroups',
  155. title: i18n.t('res.secgroup'),
  156. minWidth: 80,
  157. showOverflow: 'ellipsis',
  158. slots: {
  159. default: ({ row }) => {
  160. return row.secgroups?.map(item => item.name).join(',')
  161. },
  162. },
  163. formatter: ({ row }) => {
  164. return row.secgroups?.map(item => item.name).join(',')
  165. },
  166. hidden: () => {
  167. return this.$isScopedPolicyMenuHidden('slb_hidden_columns.secgroups')
  168. },
  169. },
  170. getBillingTableColumn({
  171. vm: this,
  172. hidden: () => {
  173. return this.$isScopedPolicyMenuHidden('rds_hidden_columns.billing_type')
  174. },
  175. }),
  176. getBrandTableColumn({
  177. hidden: () => {
  178. return this.$isScopedPolicyMenuHidden('rds_hidden_columns.brand')
  179. },
  180. }),
  181. getAccountTableColumn({
  182. hidden: () => {
  183. return this.$isScopedPolicyMenuHidden('rds_hidden_columns.account')
  184. },
  185. }),
  186. getProjectTableColumn({
  187. hidden: () => {
  188. return this.$isScopedPolicyMenuHidden('rds_hidden_columns.tenant')
  189. },
  190. }),
  191. {
  192. field: 'region',
  193. minWidth: 120,
  194. showOverflow: 'ellipsis',
  195. title: i18n.t('db.text_40'),
  196. slots: {
  197. default: ({ row }, h) => {
  198. const ret = []
  199. ret.push(
  200. <list-body-cell-wrap hide-field copy field={'region'} row={row}>
  201. <span style={{ color: '#0A1F44' }}>{ row.region }</span>
  202. </list-body-cell-wrap>,
  203. )
  204. if (row.zone1_name) {
  205. ret.push(
  206. <list-body-cell-wrap hide-field copy field="zone1_name" row={row}>
  207. <span style={{ color: '#53627C' }}>{ row.zone1_name }</span>
  208. </list-body-cell-wrap>,
  209. )
  210. }
  211. return ret
  212. },
  213. },
  214. formatter: ({ row }) => {
  215. return row.region
  216. },
  217. hidden: () => {
  218. return this.$isScopedPolicyMenuHidden('rds_hidden_columns.region')
  219. },
  220. },
  221. getTimeTableColumn({
  222. hidden: () => {
  223. return this.$isScopedPolicyMenuHidden('rds_hidden_columns.created_at')
  224. },
  225. }),
  226. ]
  227. },
  228. }