sizes.vue 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. <template>
  2. <el-radio-group v-model="size">
  3. <el-radio label="large">Large</el-radio>
  4. <el-radio>Default</el-radio>
  5. <el-radio label="small">Small</el-radio>
  6. </el-radio-group>
  7. <el-descriptions class="margin-top" title="With border" :column="3" :size="size" border>
  8. <template #extra>
  9. <el-button type="primary">Operation</el-button>
  10. </template>
  11. <el-descriptions-item>
  12. <template #label>
  13. <div class="cell-item">
  14. <el-icon :style="iconStyle">
  15. <user />
  16. </el-icon>
  17. Username
  18. </div>
  19. </template>
  20. kooriookami
  21. </el-descriptions-item>
  22. <el-descriptions-item>
  23. <template #label>
  24. <div class="cell-item">
  25. <el-icon :style="iconStyle">
  26. <iphone />
  27. </el-icon>
  28. Telephone
  29. </div>
  30. </template>
  31. 18100000000
  32. </el-descriptions-item>
  33. <el-descriptions-item>
  34. <template #label>
  35. <div class="cell-item">
  36. <el-icon :style="iconStyle">
  37. <location />
  38. </el-icon>
  39. Place
  40. </div>
  41. </template>
  42. Suzhou
  43. </el-descriptions-item>
  44. <el-descriptions-item>
  45. <template #label>
  46. <div class="cell-item">
  47. <el-icon :style="iconStyle">
  48. <tickets />
  49. </el-icon>
  50. Remarks
  51. </div>
  52. </template>
  53. <el-tag size="small">School</el-tag>
  54. </el-descriptions-item>
  55. <el-descriptions-item>
  56. <template #label>
  57. <div class="cell-item">
  58. <el-icon :style="iconStyle">
  59. <office-building />
  60. </el-icon>
  61. Address
  62. </div>
  63. </template>
  64. No.1188, Wuzhong Avenue, Wuzhong District, Suzhou, Jiangsu Province
  65. </el-descriptions-item>
  66. </el-descriptions>
  67. <el-descriptions class="margin-top" title="Without border" :column="3" :size="size" :style="blockMargin">
  68. <template #extra>
  69. <el-button type="primary">Operation</el-button>
  70. </template>
  71. <el-descriptions-item label="Username">kooriookami</el-descriptions-item>
  72. <el-descriptions-item label="Telephone">18100000000</el-descriptions-item>
  73. <el-descriptions-item label="Place">Suzhou</el-descriptions-item>
  74. <el-descriptions-item label="Remarks">
  75. <el-tag size="small">School</el-tag>
  76. </el-descriptions-item>
  77. <el-descriptions-item label="Address">No.1188, Wuzhong Avenue, Wuzhong District, Suzhou, Jiangsu Province </el-descriptions-item>
  78. </el-descriptions>
  79. </template>
  80. <script setup lang="ts">
  81. import { computed, ref } from 'vue'
  82. import { Iphone, Location, OfficeBuilding, Tickets, User } from '@element-plus/icons-vue'
  83. const size = ref('')
  84. const iconStyle = computed(() => {
  85. const marginMap = {
  86. large: '8px',
  87. default: '6px',
  88. small: '4px',
  89. }
  90. return {
  91. marginRight: marginMap[size.value] || marginMap.default,
  92. }
  93. })
  94. const blockMargin = computed(() => {
  95. const marginMap = {
  96. large: '32px',
  97. default: '28px',
  98. small: '24px',
  99. }
  100. return {
  101. marginTop: marginMap[size.value] || marginMap.default,
  102. }
  103. })
  104. </script>
  105. <style scoped>
  106. .el-descriptions {
  107. margin-top: 20px;
  108. }
  109. .cell-item {
  110. display: flex;
  111. align-items: center;
  112. }
  113. .margin-top {
  114. margin-top: 20px;
  115. }
  116. </style>