policyNews.vue 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. <template>
  2. <view>
  3. <u-swiper
  4. :list="bannerList"
  5. name="bannerUrl"
  6. border-radius="0"
  7. mode="none"
  8. height="427"
  9. :title="true"
  10. :effect3d="false"
  11. img-mode="scaleToFill"
  12. @click="swiperClick"
  13. ></u-swiper>
  14. <u-tabs :list="tabs" :is-scroll="false" name="label" :current="tabIndex" @change="tabChange"></u-tabs>
  15. <!-- <me-tabs v-model="tabIndex" :tabs="tabs" @change="tabChange"></me-tabs> -->
  16. <!-- top="xxx"下拉布局往下偏移,防止被悬浮菜单遮住 -->
  17. <mescroll-uni ref="mescrollRef" @init="mescrollInit" top="500" @down="downCallback" :up="upOption" @up="upCallback" @emptyclick="emptyClick">
  18. <!-- 数据列表 -->
  19. <u-card class="news-list"
  20. :body-style="{'padding-top':0}"
  21. :head-style="{'padding':0}"
  22. :border="false"
  23. :foot-border-top="false"
  24. :full="true" border-radius="0">
  25. <view class="news-list-head" slot="head">
  26. <view class="">新闻动态</view>
  27. </view>
  28. <view class="news-list-body" slot="body">
  29. <view v-for="(item,index) in newsList"
  30. @click="$u.route('/pages/policyNewsDetails/policyNewsDetails',{artId:item.artId})"
  31. :key="item.artId"
  32. class="u-body-item u-flex u-border-bottom u-col-between u-row-between">
  33. <view class="news-text">
  34. <view class="u-body-item-title u-line-2">{{item.artTitle}}</view>
  35. <view class="foot u-flex">
  36. <view class="">{{item.artCategoryName}}</view>
  37. <view class="time">{{$u.timeFormat(item.createTime.replace(/-/g, '/'), 'mm月dd日 hh时MM分')}}</view>
  38. </view>
  39. </view>
  40. <image :src="item.artImage" mode="aspectFill"></image>
  41. </view>
  42. </view>
  43. </u-card>
  44. </mescroll-uni>
  45. </view>
  46. </template>
  47. <script>
  48. import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
  49. export default{
  50. mixins: [MescrollMixin], // 使用mixin (在main.js注册全局组件)
  51. data(){
  52. return{
  53. bannerList: [],
  54. upOption:{
  55. // page: {
  56. // size: 10 // 每页数据的数量
  57. // },
  58. auto:false,
  59. // use:false,
  60. noMoreSize: 4, //如果列表已无数据,可设置列表的总数量要大于半页才显示无更多数据;避免列表数据过少(比如只有一条数据),显示无更多数据会不好看; 默认5
  61. empty:{
  62. tip: '~ 暂无数据 ~', // 提示
  63. // btnText: '去看看'
  64. }
  65. },
  66. newsList: [], //列表数据
  67. tabs: [],
  68. tabIndex: 0, // tab下标
  69. }
  70. },
  71. onLoad(){
  72. this.getPolicyType();
  73. this.getBannerList();
  74. },
  75. onShow(){
  76. },
  77. methods:{
  78. // 获取新闻类别
  79. getPolicyType(){
  80. this.$u.api.getDictdataUrl({key:'policy_type'}).then(res=>{
  81. if(res.code == 200){
  82. // console.log('getPolicyType',res)
  83. this.tabs = res.data;
  84. this.mescroll.resetUpScroll();
  85. console.log('this.tabs',this.tabs)
  86. }else{
  87. uni.showToast({
  88. icon:'none',
  89. title:res.msg
  90. })
  91. }
  92. });
  93. },
  94. getBannerList(){
  95. this.$u.api.getIndexBannerList()
  96. .then(res=>{
  97. this.bannerList = res.data;
  98. // console.log('bannerList',JSON.parse(JSON.stringify(res)));
  99. })
  100. },
  101. // 轮播图点击
  102. swiperClick (index) {
  103. // console.log('swiperClick',index);
  104. // console.log('bannerList',this.bannerList);
  105. if(this.bannerList[index].jumpUrl){
  106. // console.log(this.bannerList[index].jumpUrl);
  107. let url = this.bannerList[index].jumpUrl.split('#')[1];
  108. // console.log('url',url);
  109. this.$u.route({
  110. url: url,
  111. });
  112. }else{
  113. this.$u.route({
  114. url: 'pages/bannerDetails/bannerDetails',
  115. params: {
  116. id: this.bannerList[index].id
  117. }
  118. })
  119. }
  120. },
  121. /*上拉加载的回调: 其中page.num:当前页 从1开始, page.size:每页数据条数,默认10 */
  122. upCallback(page) {
  123. // console.log('page',page)
  124. //联网加载数据
  125. let keyword = this.tabs[this.tabIndex]?.text;
  126. let params ={
  127. artCategoryId:keyword,
  128. pageNum:page.num,
  129. pageSize:page.size
  130. }
  131. this.$u.api.getpolicyNewsList(params).then(curPageData=>{
  132. // console.log('curPageData',curPageData)
  133. //联网成功的回调,隐藏下拉刷新和上拉加载的状态;
  134. this.mescroll.endSuccess(curPageData.rows.length);
  135. //设置列表数据
  136. if(page.num == 1) this.newsList = []; //如果是第一页需手动制空列表
  137. this.newsList=this.newsList.concat(curPageData.rows); //追加新数据
  138. }).catch((err)=>{
  139. uni.showToast({
  140. title:'链接失败'
  141. });
  142. console.log('err',err)
  143. //联网失败, 结束加载
  144. this.mescroll.endErr();
  145. })
  146. },
  147. // 切换菜单
  148. tabChange(index) {
  149. this.newsList = [];// 先置空列表,显示加载进度
  150. this.tabIndex = index;
  151. this.mescroll.resetUpScroll(); // 再刷新列表数据
  152. },
  153. //点击空布局按钮的回调
  154. emptyClick(){
  155. },
  156. }
  157. }
  158. </script>
  159. <style lang="scss" scoped>
  160. @import './policyNews.scss'
  161. </style>