Detail.vue 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. <template>
  2. <detail
  3. :on-manager="onManager"
  4. :data="data"
  5. :base-info="baseInfo"
  6. :extra-info="extraInfo"
  7. resource="snapshots"
  8. status-module="snapshot"
  9. auto-hidden-columns-key="snapshot_hidden_columns" />
  10. </template>
  11. <script>
  12. import {
  13. getUserTagColumn,
  14. getExtTagColumn,
  15. } from '@/utils/common/detailColumn'
  16. import { sizestr } from '@/utils/utils'
  17. import { getBrandTableColumn, getOsArch } from '@/utils/common/tableColumn'
  18. import WindowsMixin from '@/mixins/windows'
  19. import { findPlatform } from '@/utils/common/hypervisor'
  20. import { SERVER_TYPE } from '../../../constants'
  21. import { CREATE_METHODS } from '../constants'
  22. import { getStorageTypeTableColumn } from '../utils/columns'
  23. export default {
  24. name: 'SnapshotDetail',
  25. mixins: [WindowsMixin],
  26. props: {
  27. data: {
  28. type: Object,
  29. required: true,
  30. },
  31. onManager: {
  32. type: Function,
  33. required: true,
  34. },
  35. columns: Array,
  36. },
  37. data () {
  38. return {
  39. baseInfo: [
  40. getUserTagColumn({ onManager: this.onManager, resource: 'snapshot', columns: () => this.columns, tipName: this.$t('compute.text_462') }),
  41. getExtTagColumn({ onManager: this.onManager, resource: 'snapshot', columns: () => this.columns, tipName: this.$t('compute.text_462') }),
  42. getBrandTableColumn(),
  43. {
  44. field: 'size',
  45. title: this.$t('compute.text_422'),
  46. formatter: ({ cellValue, row }) => {
  47. return sizestr(cellValue, 'M', 1024)
  48. },
  49. },
  50. {
  51. field: 'virtual_size',
  52. title: this.$t('compute.disk_size'),
  53. formatter: ({ cellValue, row }) => {
  54. return sizestr(cellValue, 'M', 1024)
  55. },
  56. },
  57. {
  58. field: 'created_by',
  59. title: this.$t('compute.text_1070'),
  60. formatter: ({ cellValue }) => {
  61. return CREATE_METHODS[cellValue]
  62. },
  63. },
  64. {
  65. field: 'resource',
  66. title: this.$t('compute.text_1071'),
  67. formatter: ({ cellValue }) => {
  68. return this.$t('compute.text_101')
  69. },
  70. },
  71. getOsArch(),
  72. {
  73. field: 'guest',
  74. title: this.$t('dictionary.server'),
  75. slots: {
  76. default: ({ row }, h) => {
  77. if (row.guest) {
  78. return [
  79. <div>
  80. <side-page-trigger permission="server_get" name="VmInstanceSidePage" id={row.guest_id} vm={this}>{row.guest}</side-page-trigger>
  81. {row.guest_status ? <status status={ row.guest_status } statusModule='server'/> : ''}
  82. </div>,
  83. ]
  84. }
  85. return [<div>-</div>]
  86. },
  87. },
  88. },
  89. {
  90. field: 'disk_type',
  91. title: this.$t('compute.text_1072'),
  92. formatter: ({ cellValue }) => {
  93. return cellValue === 'sys' ? this.$t('compute.text_49') : this.$t('compute.text_50')
  94. },
  95. },
  96. {
  97. field: 'disk_name',
  98. title: this.$t('compute.text_100'),
  99. slots: {
  100. default: ({ row }, h) => {
  101. if (row.disk_status) {
  102. return [
  103. <div>
  104. <side-page-trigger permission="disks_get" name="DiskSidePage" id={row.disk_id} vm={this}>{ row.disk_name }</side-page-trigger>
  105. {row.disk_status ? <status status={ row.disk_status } statusModule='disk'/> : ''}
  106. </div>,
  107. ]
  108. }
  109. return [<div>-</div>]
  110. },
  111. },
  112. },
  113. getStorageTypeTableColumn(),
  114. {
  115. field: 'storage',
  116. title: this.$t('compute.text_99'),
  117. showOverflow: 'ellipsis',
  118. slots: {
  119. default: ({ row }, h) => {
  120. if (findPlatform(row.provider, 'provider') === SERVER_TYPE.public) {
  121. return '-'
  122. }
  123. const text = row.storage || '-'
  124. return [
  125. <list-body-cell-wrap copy hideField={true} field='storage' row={row} message={text}>
  126. <side-page-trigger permission='storages_get' name='BlockStorageSidePage' id={row.storage_id} vm={this}>{row.storage}</side-page-trigger>
  127. </list-body-cell-wrap>,
  128. ]
  129. },
  130. },
  131. hidden: () => this.$store.getters.isProjectMode,
  132. },
  133. ],
  134. extraInfo: [
  135. {
  136. title: this.$t('compute.title.encryption'),
  137. items: [
  138. {
  139. field: 'encrypt_key_id',
  140. title: this.$t('compute.title.encryption_key'),
  141. formatter: ({ callValue, row }) => {
  142. if (row.encrypt_key_id) {
  143. if (row.encrypt_key && row.encrypt_alg) {
  144. return row.encrypt_key + ' (' + row.encrypt_key_id + ')'
  145. } else {
  146. return row.encrypt_key_id
  147. }
  148. } else {
  149. return this.$t('compute.no_encryption')
  150. }
  151. },
  152. },
  153. {
  154. field: 'encrypt_alg',
  155. title: this.$t('compute.title.encrypt_alg'),
  156. formatter: ({ callValue, row }) => {
  157. if (row.encrypt_alg) {
  158. return row.encrypt_alg.toUpperCase()
  159. } else {
  160. return '-'
  161. }
  162. },
  163. },
  164. {
  165. field: 'encrypt_key_user',
  166. title: this.$t('compute.title.encrypt_key_user'),
  167. formatter: ({ callValue, row }) => {
  168. if (row.encrypt_key_user) {
  169. return row.encrypt_key_user + ' / ' + row.encrypt_key_user_domain
  170. } else {
  171. return '-'
  172. }
  173. },
  174. },
  175. ],
  176. hidden: () => this.$isScopedPolicyMenuHidden('snapshot_hidden_columns.encryption'),
  177. },
  178. ],
  179. }
  180. },
  181. }
  182. </script>