announcementList.vue 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <template>
  2. <view class="list">
  3. <view v-for="(item, index) in list" :key="item.id" class="item">
  4. <img :src="loadImgSrc(`${item.announcementImg}`)" class="avatar" />
  5. <view class="info" style="height: 10em;">
  6. <view class="name" @click="handleNavigate(item)">
  7. {{ item.announcementTitle }}
  8. <view class="unread-dot" v-if="item.readType == 0"></view>
  9. </view>
  10. </view>
  11. <em class="iconfont icon-xiangyoujiantou" @click="handleNavigate(item)"></em>
  12. </view>
  13. </view>
  14. </template>
  15. <script>
  16. import { getList } from '@/api/index/index.js';
  17. export default {
  18. data() {
  19. return {
  20. queryParam: {
  21. pageNum: 1,
  22. pageSize: 10,
  23. userId: getApp().globalData.userId
  24. },
  25. total: null,
  26. list: []
  27. };
  28. },
  29. onLoad() {
  30. this.getAnnoList();
  31. },
  32. onReachBottom() {
  33. let pageNum = this.queryParam.pageNum;
  34. let pageSize = this.queryParam.pageSize;
  35. let total = this.total;
  36. if (pageNum * pageSize >= total) {
  37. uni.showToast({
  38. title: '暂无更多数据'
  39. });
  40. return;
  41. } else {
  42. this.queryParam.pageNum += 1;
  43. this.getAnnoList();
  44. }
  45. },
  46. methods: {
  47. getAnnoList() {
  48. console.log(this.queryParam)
  49. getList(this.queryParam).then((res) => {
  50. this.list = [...this.list,...res.rows]
  51. // this.list = res.rows;
  52. this.total = res.total;
  53. });
  54. },
  55. handleNavigate(item) {
  56. item.readType = 1;
  57. uni.navigateTo({
  58. url: '/pages/index/announcementDetails?id=' + item.id
  59. });
  60. }
  61. }
  62. };
  63. </script>
  64. <style>
  65. .list {
  66. padding: 20rpx;
  67. }
  68. .item {
  69. display: flex;
  70. align-items: center;
  71. margin-bottom: 20rpx;
  72. }
  73. .avatar {
  74. width: 60rpx;
  75. height: 60rpx;
  76. border-radius: 50%;
  77. }
  78. .info {
  79. display: flex;
  80. align-items: center;
  81. }
  82. .name {
  83. font-size: 28rpx;
  84. font-weight: bold;
  85. margin-right: 10rpx; /* 添加间距 */
  86. position: relative;
  87. }
  88. .unread-dot {
  89. width: 10rpx;
  90. height: 10rpx;
  91. background-color: red;
  92. border-radius: 50%;
  93. position: absolute;
  94. right: -15rpx; /* 相对于父容器位置调整 */
  95. top: 50%;
  96. transform: translateY(-50%);
  97. }
  98. </style>