list.vue 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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. modelId: params.modelId,
  56. mainBodyColumnId: params.mainBodyColumnId ,
  57. }), page, pageSize);
  58. return res.list.map((item) => {
  59. return {
  60. id: item.id,
  61. image: item.image,
  62. title: item.title,
  63. date: DataDateUtils.formatDate(item.publishAt, 'YYYY-MM-dd'),
  64. }
  65. })
  66. });
  67. function goDetail(id: number) {
  68. navTo('/pages/article/details', { id });
  69. }
  70. function search() {
  71. listLoader.loadData(undefined, true);
  72. }
  73. onLoad((query) => {
  74. if (query?.title) {
  75. uni.setNavigationBarTitle({
  76. title: query.title,
  77. });
  78. }
  79. listLoader.loadData({
  80. modelId: query?.modelId ? Number(query.modelId) : undefined,
  81. mainBodyColumnId: query?.mainBodyColumnId? Number(query.mainBodyColumnId) : undefined ,
  82. })
  83. })
  84. </script>
  85. <style lang="scss">
  86. .article_list {
  87. padding: 20rpx;
  88. }
  89. </style>