CardItem.vue 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <template>
  2. <div class="card-container" :style="{ height: `${height}px` }">
  3. <div class="card-name">
  4. <img :src="img_src" class="logo" />
  5. <div class="name">{{ name }}</div>
  6. </div>
  7. <div class="card-label">
  8. <slot name="labels"></slot>
  9. </div>
  10. <div class="card-des">
  11. <slot name="description"></slot>
  12. </div>
  13. <div class="card-label">
  14. <slot name="labelBtn"></slot>
  15. </div>
  16. <div class="card-bottom">
  17. <slot name="bottom"></slot>
  18. </div>
  19. <div class="card-settings">
  20. <slot name="settings"></slot>
  21. </div>
  22. </div>
  23. </template>
  24. <script setup>
  25. const props = defineProps({
  26. name: {
  27. type: String
  28. },
  29. img_src: {
  30. type: String
  31. },
  32. height: {
  33. type: Number,
  34. default: 175
  35. }
  36. });
  37. </script>
  38. <style scoped lang="css">
  39. .card-container {
  40. position: relative;
  41. padding: 10px 20px;
  42. background-color: var(--color-bg-2);
  43. overflow: hidden;
  44. }
  45. .card-name .name {
  46. margin-top: 10px;
  47. font-size: 16px;
  48. font-weight: bold;
  49. color: var(--color-neutral-8);
  50. }
  51. .card-label {
  52. width: 100%;
  53. margin-top: 15px;
  54. color: var(--color-neutral-4);
  55. }
  56. .card-des {
  57. display: -webkit-box;
  58. overflow: hidden;
  59. min-height: 32px;
  60. margin-top: 5px;
  61. color: var(--color-neutral-4);
  62. -webkit-line-clamp: 2;
  63. -webkit-box-orient: vertical;
  64. text-overflow: ellipsis;
  65. }
  66. .card-bottom {
  67. position: absolute;
  68. bottom: 10px;
  69. left: 20px;
  70. width: calc(100% - 40px);
  71. }
  72. .card-settings {
  73. position: absolute;
  74. right: 20px;
  75. top: 20px;
  76. cursor: pointer;
  77. }
  78. </style>