card.vue 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. <script setup lang="ts">
  2. import type { INewsItem } from "@/types/data";
  3. const props = defineProps<{
  4. data: INewsItem
  5. }>()
  6. const openNewsPage = () => {
  7. window.open(props.data.content);
  8. }
  9. </script>
  10. <template>
  11. <div
  12. class="
  13. news-item
  14. border-y-[1px] border-x-[0px] px-[10px] rounded-[0px] py-[10px] mb-[10px]
  15. md:border-x-[1px]
  16. md:rounded-[8px] md:px-[31px] md:py-[31px] md:mb-[24px]
  17. "
  18. @click="openNewsPage"
  19. >
  20. <div class="
  21. img-card
  22. w-[120px] h-[87px] mr-[10px]
  23. md:w-[200px] md:h-[134px] md:mr-[0px]
  24. ">
  25. <img :src="data.photo" alt="">
  26. </div>
  27. <div class="
  28. content-card flex flex-col justify-between items-start h-[87px]
  29. md:pr-[70px] md:pl-[30px] md:h-[134px] md:justify-start
  30. ">
  31. <h3 class="
  32. title text-[18px]
  33. md:text-[20px] h-[60px]
  34. ">
  35. {{ data.title }}
  36. </h3>
  37. <div class="hidden md:block">
  38. <p class="content">
  39. {{ data.brief }}
  40. </p>
  41. </div>
  42. <p class="block md:hidden phone-text-color">{{data.year}}-{{ data.month }}-{{data.day}}</p>
  43. </div>
  44. <div class="time-card hidden md:flex">
  45. <div class="time-box">
  46. <p class="month">{{data.month}}-{{data.day}}</p>
  47. <p class="year">{{data.year}}</p>
  48. </div>
  49. <BaseIcon name="icon-arrow-right" width="14" height="14" />
  50. </div>
  51. </div>
  52. </template>
  53. <style scoped lang="scss">
  54. .news-item {
  55. @include flex(x, start, between);
  56. align-items: center;
  57. border-style: solid;
  58. border-color: #F5F7FA;
  59. transition: all .5s ease .1s;
  60. cursor: pointer;
  61. &:hover {
  62. transform: scale(1.02);
  63. .content-card .title {
  64. color: $primary;
  65. }
  66. }
  67. .img-card {
  68. border-radius: 4px;
  69. background: #eee;
  70. overflow: hidden;
  71. img {
  72. width: 100%;
  73. height: 100%;
  74. object-fit: cover;
  75. }
  76. }
  77. .content-card {
  78. flex: 1;
  79. .phone-text-color {
  80. color: #797979;
  81. }
  82. .title {
  83. margin-bottom: 10px;
  84. font-weight: bold;
  85. word-break: break-all;
  86. overflow: hidden;
  87. display: -webkit-box;
  88. -webkit-line-clamp: 2;
  89. -webkit-box-orient: vertical;
  90. color: $t-color-primary;
  91. transition: color .3s;
  92. }
  93. .content {
  94. font-size: 14px;
  95. line-height: 22px;
  96. color: #565E66;
  97. word-break: break-all;
  98. overflow: hidden;
  99. display: -webkit-box;
  100. -webkit-line-clamp: 3;
  101. -webkit-box-orient: vertical;
  102. }
  103. }
  104. .time-card {
  105. align-items: center;
  106. justify-content: center;
  107. height: 100%;
  108. .time-box {
  109. width: 166px;
  110. padding: 0 18px 0 40px;
  111. border-left: 1px solid #F3F3F5;
  112. .month {
  113. font-size: 18px;
  114. font-weight: bold;
  115. line-height: 30px;
  116. color: #565E66;
  117. }
  118. .year {
  119. line-height: 20px;
  120. color: #797979;
  121. }
  122. }
  123. }
  124. }
  125. </style>