ChildrenImage.vue 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <template>
  2. <vxe-grid :data="resourceData" :columns="columns" :resizable="true" />
  3. </template>
  4. <script>
  5. import { getNameDescriptionTableColumn, getStatusTableColumn, getTimeTableColumn } from '@/utils/common/tableColumn'
  6. import { sizestr } from '@/utils/utils'
  7. import expectStatus from '@/constants/expectStatus'
  8. import WindowsMixin from '@/mixins/windows'
  9. export default {
  10. name: 'ImageChildrenImageList',
  11. mixins: [WindowsMixin],
  12. props: {
  13. resId: String,
  14. data: {
  15. type: Object,
  16. required: true,
  17. },
  18. },
  19. data () {
  20. const getResourceData = () => {
  21. if (!this.data.data_images) {
  22. return [{ ...this.data.root_image, type: 'sys' }]
  23. }
  24. return [{ ...this.data.root_image, type: 'sys' }].concat(this.data.data_images.map(val => ({ ...val, type: 'data' })))
  25. }
  26. return {
  27. columns: [
  28. getNameDescriptionTableColumn({
  29. width: 200,
  30. onManager: this.onManager,
  31. hideField: true,
  32. addLock: true,
  33. addEncrypt: true,
  34. slotCallback: (row, h) => {
  35. return (
  36. <side-page-trigger onTrigger={() => this.handleOpenSidepage(row)}>{ row.name }</side-page-trigger>
  37. )
  38. },
  39. formRules: [
  40. { required: true, message: this.$t('compute.text_210') },
  41. { validator: this.$validate('imageName') },
  42. ],
  43. }),
  44. {
  45. field: 'type',
  46. title: this.$t('compute.text_628'),
  47. formatter: ({ cellValue }) => {
  48. return cellValue === 'data' ? this.$t('compute.text_50') : this.$t('compute.text_49')
  49. },
  50. },
  51. {
  52. field: 'size',
  53. title: this.$t('compute.text_377'),
  54. formatter: ({ cellValue }) => {
  55. return sizestr(cellValue, 'B', 1024)
  56. },
  57. },
  58. getStatusTableColumn({ statusModule: 'image' }),
  59. {
  60. field: 'disk_format',
  61. title: this.$t('compute.text_398'),
  62. formatter: ({ cellValue }) => {
  63. return (cellValue && cellValue.toUpperCase()) || '-'
  64. },
  65. },
  66. getTimeTableColumn(),
  67. ],
  68. resourceData: getResourceData(),
  69. }
  70. },
  71. methods: {
  72. handleOpenSidepage (row) {
  73. this.sidePageTriggerHandle(this, 'SystemImageSidePage', {
  74. id: row.id,
  75. resource: 'images',
  76. apiVersion: 'v1',
  77. getParams: this.getParam,
  78. steadyStatus: Object.values(expectStatus.image).flat(),
  79. }, {
  80. list: this.list,
  81. })
  82. },
  83. },
  84. }
  85. </script>