list.vue 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <template>
  2. <view class="d-flex flex-column bg-base" style="min-height:100vh">
  3. <view class="p-3">
  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="d-flex flex-column p-3">
  15. <Box2LineImageRightShadow
  16. v-for="item in listLoader.list.value"
  17. :key="item.id"
  18. classNames="ml-2 mb-3"
  19. titleColor="title-text"
  20. :image="item.thumbnail || item.image"
  21. :title="item.title"
  22. :tags="item.keywords"
  23. :desc="item.desc"
  24. @click="goDetail(item.id)"
  25. />
  26. </view>
  27. <SimplePageListLoader :loader="listLoader" />
  28. </view>
  29. </template>
  30. <script setup lang="ts">
  31. import { GetContentListItem } from '@/api/CommonContent';
  32. import SimplePageListLoader from '@/common/components/SimplePageListLoader.vue';
  33. import { useSimplePageListLoader } from '@/common/composeabe/SimplePageListLoader';
  34. import { ref } from 'vue';
  35. import { navTo } from '@/common/utils/PageAction';
  36. import { onLoad } from '@dcloudio/uni-app';
  37. import ContributeApi from '@/api/user/ContributeApi';
  38. import Box2LineImageRightShadow from '@/pages/parts/Box2LineImageRightShadow.vue';
  39. const searchText = ref('');
  40. const listLoader = useSimplePageListLoader<GetContentListItem>(
  41. 8,
  42. async (page, pageSize, params) => {
  43. return await ContributeApi.getContributeList(page, pageSize);
  44. });
  45. function goDetail(id: number) {
  46. navTo('/pages/article/details', { id });
  47. }
  48. function search() {
  49. listLoader.loadData(undefined, true);
  50. }
  51. onLoad(() => {
  52. listLoader.loadData()
  53. })
  54. </script>
  55. <style lang="scss">
  56. .article_list {
  57. padding: 20rpx;
  58. }
  59. </style>