article.vue 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <script setup lang="ts">
  2. import dayjs from 'dayjs'
  3. defineProps({
  4. title: {
  5. type: String,
  6. default: '',
  7. },
  8. author: {
  9. type: Object,
  10. default: () => ({ name: '匿名' }),
  11. },
  12. createdAt: {
  13. type: Date,
  14. default: () => new Date(),
  15. },
  16. viewNum: {
  17. type: Number,
  18. default: 0,
  19. },
  20. content: {
  21. type: String,
  22. default: '<div>1111</div>',
  23. },
  24. })
  25. </script>
  26. <template>
  27. <div class="px-3.5 bg-white flex-grow">
  28. <div class="text-black text-xl font-normal font-['PingFang SC'] leading-loose">
  29. {{ title }}
  30. </div>
  31. <div class="flex items-center my-5">
  32. <div class="w-7 h-7 overflow-hidden roudnded-full">
  33. <slot name="avatar"></slot>
  34. </div>
  35. <div class="flex-1 ml-1">
  36. <div class="text-black/90 text-sm font-normal font-['PingFang SC'] leading-normal">
  37. {{ author.name }}
  38. </div>
  39. <div class="text-black/40 text-xs font-normal font-['PingFang SC'] leading-normal">
  40. 编辑于
  41. {{ dayjs(createdAt).format('YYYY/MM/DD') }}
  42. </div>
  43. </div>
  44. <div class="flex items-center">
  45. <slot name="viewLeft"></slot>
  46. <div class="text-black/40 text-xs font-normal font-['PingFang SC'] leading-normal">
  47. {{ viewNum }}
  48. </div>
  49. </div>
  50. </div>
  51. <div v-html="content"></div>
  52. </div>
  53. </template>