CardItem.vue 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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. }
  44. .card-name .name {
  45. margin-top: 10px;
  46. font-size: 16px;
  47. font-weight: bold;
  48. color: var(--color-neutral-8);
  49. }
  50. .card-label {
  51. width: 100%;
  52. margin-top: 15px;
  53. color: var(--color-neutral-4);
  54. }
  55. .card-des {
  56. display: -webkit-box;
  57. overflow: hidden;
  58. margin-top: 5px;
  59. color: var(--color-neutral-4);
  60. -webkit-line-clamp: 2;
  61. -webkit-box-orient: vertical;
  62. text-overflow: ellipsis;
  63. }
  64. .card-bottom {
  65. position: absolute;
  66. bottom: 10px;
  67. left: 20px;
  68. width: calc(100% - 40px);
  69. }
  70. .card-settings {
  71. position: absolute;
  72. right: 20px;
  73. top: 20px;
  74. cursor: pointer;
  75. }
  76. </style>