sizes.vue 3.2 KB

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