list.vue 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <template>
  2. <view class="article_list">
  3. <view class="search">
  4. <uni-search-bar
  5. v-model="searchText"
  6. radius="100"
  7. bgColor="#fff"
  8. placeholder="搜一搜"
  9. clearButton="auto"
  10. cancelButton="none"
  11. @confirm="search"
  12. />
  13. </view>
  14. <view class="complex-list-horizontal-1">
  15. <view
  16. class="item"
  17. hover-class="pressed"
  18. v-for="item in listLoader.list.value"
  19. :key="item.id"
  20. @click="goDetail(item.id)"
  21. >
  22. <ImageWrapper :src="item.image" width="170rpx" height="190rpx" />
  23. <view class="info">
  24. <view class="name ellipsis-2">{{ item.title }}</view>
  25. <view class="desc">{{ item.date }}</view>
  26. </view>
  27. </view>
  28. </view>
  29. <SimplePageListLoader :loader="listLoader" />
  30. </view>
  31. </template>
  32. <script setup lang="ts">
  33. import CommonContent, { GetContentListParams } from '@/api/CommonContent';
  34. import SimplePageListLoader from '@/common/components/SimplePageListLoader.vue';
  35. import ImageWrapper from '@/common/components/ImageWrapper.vue';
  36. import { useSimplePageListLoader } from '@/common/composeabe/SimplePageListLoader';
  37. import { ref } from 'vue';
  38. import { DataDateUtils } from '@imengyu/js-request-transform';
  39. import { navTo } from '@/common/utils/PageAction';
  40. import { onLoad } from '@dcloudio/uni-app';
  41. const searchText = ref('');
  42. const listLoader = useSimplePageListLoader<{
  43. id: number,
  44. image: string,
  45. title: string,
  46. date: string
  47. }, {
  48. modelId: number|undefined,
  49. mainBodyColumnId: number|undefined,
  50. }>(8, async (page, pageSize, params) => {
  51. if (!params || !params.modelId || !params.mainBodyColumnId)
  52. throw new Error("未传入参数,当前页面需要参数");
  53. const res = await CommonContent.getContentList(new GetContentListParams().setSelfValues({
  54. keywords: searchText.value,
  55. type: GetContentListParams.TYPE_ARTICLE,
  56. modelId: params.modelId,
  57. mainBodyColumnId: params.mainBodyColumnId ,
  58. }), page, pageSize);
  59. return res.list.map((item) => {
  60. return {
  61. id: item.id,
  62. image: item.image,
  63. title: item.title,
  64. date: DataDateUtils.formatDate(item.publishAt, 'YYYY-MM-dd'),
  65. }
  66. })
  67. });
  68. function goDetail(id: number) {
  69. navTo('/pages/article/details', { id });
  70. }
  71. function search() {
  72. listLoader.loadData(undefined, true);
  73. }
  74. onLoad((query) => {
  75. if (query?.title) {
  76. uni.setNavigationBarTitle({
  77. title: query.title,
  78. });
  79. }
  80. listLoader.loadData({
  81. modelId: query?.modelId ? Number(query.modelId) : undefined,
  82. mainBodyColumnId: query?.mainBodyColumnId? Number(query.mainBodyColumnId) : undefined ,
  83. })
  84. })
  85. </script>
  86. <style lang="scss">
  87. .article_list {
  88. padding: 20rpx;
  89. }
  90. </style>