index.vue 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <template>
  2. <app-block class="app-article">
  3. <h4 class="app-article__title">
  4. <span>{{ title }}</span>
  5. <span @click="$router.push({ name: 'news-list' })">
  6. {{ $t('common.more') }}
  7. <Icon name="arrow" />
  8. </span>
  9. </h4>
  10. <section class="app-article__section" v-for="(group, i) in newsGroup" :key="i">
  11. <dl class="news-list">
  12. <dt class="news-list__date">
  13. <time class="news-list__time">{{ group.time }}</time>
  14. </dt>
  15. <dd class="news-list__item" v-for="(item, n) in group.list" :key="n">
  16. <div class="news-item" @click="$router.push({ name: 'news-detail', query: { id: item.id } })">
  17. <div class="news-item__content">
  18. <div class="news-item__title">{{ item.title }}</div>
  19. <div class="news-item__meta">
  20. <span class="news-item__time">{{ formatDate(item.publishdate, 'HH:mm') }}</span>
  21. <span class="news-item__author" v-if="item.author">{{ item.author }}</span>
  22. </div>
  23. </div>
  24. <div class="news-item__image" v-if="item.coverimage">
  25. <Image class="news-item__img" fit="cover" :src="item.coverimage" :width="68" :height="60"
  26. :radius="4" />
  27. </div>
  28. </div>
  29. </dd>
  30. </dl>
  31. </section>
  32. </app-block>
  33. </template>
  34. <script lang="ts" setup>
  35. import { Image, Icon } from 'vant'
  36. import { formatDate } from '@/filters'
  37. import { useRequest } from '@/hooks/request'
  38. import { useNewsTitle } from '@/business/news'
  39. import { queryNewTitles } from '@/services/api/news'
  40. defineProps({
  41. title: {
  42. type: String,
  43. default: '新闻资讯'
  44. }
  45. })
  46. useRequest(queryNewTitles, {
  47. defaultParams: {
  48. pagesize: 20
  49. },
  50. onSuccess: (res) => {
  51. appendData(res.data)
  52. },
  53. })
  54. const { appendData, newsGroup } = useNewsTitle()
  55. </script>
  56. <style lang="less">
  57. @import "./index.less";
  58. </style>