index.vue 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. <template>
  2. <div class="box">
  3. <van-nav-bar title="爱心帮扶" @click-left="$router.back()" left-arrow fixed placeholder safe-area-inset-top />
  4. <van-sticky>
  5. <van-search v-model="form.name" shape="round" show-action placeholder="请输入名称" @search="onSearch">
  6. <template #action>
  7. <div style="display:flex;align-items:center;">
  8. <div @click="onSearch">搜索</div>
  9. <van-button v-if="roleIdStr==23" size="mini" @click="$router.push({path:'/loveHelp/details'})">新建</van-button>
  10. </div>
  11. </template>
  12. </van-search>
  13. </van-sticky>
  14. <van-list v-model="loading" :finished="finished" :immediate-check="false" finished-text="没有更多了" @load="onLoad">
  15. <div class="list" v-for="item in dataList" :key="item.id" @click="$router.push({path:'/loveHelp/details',query:{id:item.id,orgId:item.orgId}})">
  16. <div class="img">
  17. <van-image fit="cover" :src="getpics(item.pics)" alt="" />
  18. </div>
  19. <div class="text">
  20. <p class="title">{{item.name}}</p>
  21. <p class="mes">活动日期:{{item.workDate}}</p>
  22. <p class="date">主办单位:{{item.orgName}}</p>
  23. <p class="date address">活动地址:{{item.address}}</p>
  24. </div>
  25. </div>
  26. </van-list>
  27. </div>
  28. </template>
  29. <script>
  30. import { lovingHelpPage } from '../../api/index.js'
  31. export default {
  32. data() {
  33. return {
  34. bgimg: require('../../assets/newsbg.png'),
  35. roleIdStr: JSON.parse(sessionStorage.getItem('userInfo')).roleIdStr,
  36. loading: false,
  37. finished: false,
  38. dataList: [],
  39. form: {
  40. pageNum: 1,
  41. pageSize: 10,
  42. },
  43. }
  44. },
  45. created() {
  46. this.lovingHelpPage()
  47. },
  48. methods: {
  49. async lovingHelpPage() {
  50. const res = await lovingHelpPage(this.form)
  51. this.loading = false
  52. if (this.form.pageNum == 1) {
  53. this.dataList = res.data.records
  54. } else {
  55. this.dataList = this.dataList.concat(res.data.records)
  56. }
  57. this.form.pageNum = this.form.pageNum + 1
  58. if (this.dataList.length >= res.data.total) {
  59. this.finished = true
  60. } else {
  61. this.finished = false
  62. }
  63. },
  64. onLoad() {
  65. this.loading = true
  66. this.finished = false
  67. this.lovingHelpPage()
  68. },
  69. onSearch() {
  70. this.form.pageNum = 1
  71. this.lovingHelpPage()
  72. },
  73. getpics(item) {
  74. if (!item) return this.bgimg
  75. var url = ''
  76. var arr = item.split(',')
  77. arr.forEach((item, index) => {
  78. if (item.indexOf('.jpg') || item.indexOf('.png')) {
  79. url = arr[index]
  80. console.log(url, 'url')
  81. return
  82. }
  83. })
  84. return url
  85. },
  86. },
  87. }
  88. </script>
  89. <style lang="scss" scoped>
  90. .address {
  91. width: 100%;
  92. white-space: nowrap;
  93. overflow: hidden;
  94. text-overflow: ellipsis;
  95. }
  96. p {
  97. margin: 0;
  98. margin-top: 16px;
  99. }
  100. .van-list {
  101. padding: 0 30px;
  102. }
  103. .van-button {
  104. width: 100px;
  105. background-color: #1677ff;
  106. color: #fff;
  107. font-size: 24px;
  108. border-radius: 8px;
  109. margin-left: 10px;
  110. }
  111. .list {
  112. display: flex;
  113. align-items: center;
  114. margin-top: 16px;
  115. .img {
  116. .van-image {
  117. width: 260px;
  118. height: 160px;
  119. }
  120. }
  121. .text {
  122. text-align: left;
  123. margin-left: 26px;
  124. width: calc(100% - 286px);
  125. .title {
  126. overflow: hidden;
  127. white-space: nowrap;
  128. text-overflow: ellipsis;
  129. font-size: 30px;
  130. }
  131. .mes,
  132. .date {
  133. font-size: 26px;
  134. }
  135. p {
  136. margin: 0;
  137. margin-bottom: 16px;
  138. }
  139. }
  140. }
  141. /deep/.van-search__action:active {
  142. background-color: transparent;
  143. }
  144. </style>