vue scrolle在tab 中使用

1. 使用npm 安装 
  npm i vue-scroller -S
 地址: https://github.com/wangdahoo/vue-scroller

2. 引入 main.js:
  import Vue from 'vue'
  import VueScroller from 'vue-scroller'   Vue.use(VueScroller)

3.页面使用

  1 <template>
  2     <div class="container" style="height:100%;overflow: scroll;">
  3         <section class="bg-white" style="height:100%;overflow: scroll;">
  4             <!-- navbar -->
  5             <mt-navbar class="page-part" v-model="selected">
  6                 <mt-tab-item :id="1">未完成</mt-tab-item>
  7                 <mt-tab-item :id="0">已完成</mt-tab-item>
  8             </mt-navbar>
  9             <!-- tabcontainer -->
 10             <mt-tab-container v-model="selected">
 11                 <scroller :on-infinite="infinite" ref="my_scroller">
 12                     <div style="height: 44px; margin-top: -44px;"></div>
 13                     <div class="itemContent clear" v-for="(item,index) in listData" :key="index" @click="toDetail(item.sign_url)">
 14                         <p class="itemTitle clear">
 15                             <span class="fl itemTitle-name">{{item.flow_id}}{{item.contract_name}}</span>
 16                             <span v-if="selected==0" :class="(item.sign_status_employee==1?'itemTitle-state-green':(item.sign_status_employee==3?'itemTitle-state-red':'itemTitle-state-gray'))" class="fr itemTitle-state">{{item.sign_status_employee | showState}}</span>
 17                             <span v-if="selected==1" class="fr itemTitle-state itemTitle-state-blue">待签署</span>
 18                         </p>
 19                         <div class="itemDetail m14">
 20                             <div class="fl itemTime">
 21                                 <p>开始日期:{{item.start_time}}</p>
 22                                 <p>失效日期:{{item.lose_efficacy_time}}</p>
 23                             </div>
 24                             <div  class="fr" v-if="selected==0">
 25                                 <div v-if="item.sign_status_employee==1" @click.stop="openDownload(item.flow_id)">
 26                                     <i class="itemBtn icon iconfont icon-upload_icon"></i>
 27                                 </div>
 28                             </div>
 29                         </div>
 30                     </div>
 31                 </scroller>
 32             </mt-tab-container>
 33         </section>
 34     </div>
 35 </template>
 36 
 37 <script>
 38     import { Navbar, TabItem, Toast, Indicator } from 'mint-ui';
 39     import { getListData, getDownloadUrl } from '@/api/api';
 40 
 41     export default {
 42         name: 'page-navbar',
 43         data() {
 44             return {
 45                 employeeId: '', //易路员工编号
 46                 selected: 1, //completed (0:已完成,1:未完成)
 47                 pageNo: 0,//当前页
 48                 pageSize: 10,//页面条数
 49                 maxpage: 0,//最大页码数
 50                 counts: 0,//总条数
 51                 listData: []//列表数据
 52             };
 53         },
 54         watch: {
 55             //监听tab切换
 56             selected: function(val, oldVal) {
 57                 this.pageNo = 0;
 58                 this.selected = val;
 59                 this.listData = [];
 60                 this.$refs.my_scroller.finishInfinite(false);  //详情见 备注
 61             }
 62         },
 63         mounted() {
 64             //截取易路员工编号
 65             this.employeeId = this.$utils.getUrlKey("accesskey");
 66 //            this.employeeId='yl001';
 67         },
 68         methods: {
 69             infinite(done) {
 70                 this.pageNo++; 
 71                 var self1 = this;
 72                 setTimeout(() => {
 73                     var params = {
 74                         accesskey: this.employeeId,
 75                         completed: this.selected,
 76                         page: this.pageNo,
 77                         pageSize: this.pageSize
 78                     };
 79                     //获取列表数据
 80                     getListData(params).then(res => {
 81                         if(res.data.code == 0) {
 82                             var re = res.data.model[0];
 83                             if(re.length > 0) {
 84                                 this.counts = re[0].rows;
 85                                 var n = re[0].rows;
 86                                 var m = this.pageSize;
 87                                 if(n % m > 0) {
 88                                     this.maxpage = parseInt(n / m) + 1;
 89                                 } else {
 90                                     this.maxpage = parseInt(n / m);
 91                                 }
 92                                 if(this.pageNo > this.maxpage) {
 93                                     self1.noData = "没有更多数据"
 94                                     done(true);
 95                                     return;
 96                                 } else {
 97                                     done();
 98                                     this.listData = this.listData.concat(res.data.model[0]);
 99                                 }
100                             } else {
101                                 self1.noData = "没有更多数据"
102                                 done(true);
103                                 return;
104                             }
105                         } else {
106                             Toast({
107                                 message: res.data.msg
108                             });
109                             done(true);
110                             return;
111                         }
112                     })
113                 }, 1500)
114             },
115 
116             //row跳转详情页面
117             toDetail(sign_url) {
118                 console.log("列表id==" + sign_url)
119                 window.location.href = sign_url;
120             },
121             //打开下载页面
122             openDownload(flow_id) {
123                 console.log("下载id==" + flow_id);
124                 var params = {
125                     flowId: 143
126                 };
127                 getDownloadUrl(params).then(res => {
128                     console.log(res);
129                     if(res.data.code == 0) {
130                         window.location.href = res.data.model[0].downloadUrl;
131                     }
132                 })
133             }
134         }
135     }
136 </script>
137 <style rel="stylesheet/less" lang="less" scoped>
138     .container {
139         overflow: auto;
140         -webkit-overflow-scrolling: touch;
141         /*修改nav默认样式*/
142         .mint-navbar .mint-tab-item.is-selected {
143             color: #788897 !important;
144         }
145         .mint-tab-item {
146             .mint-tab-item-label {
147                 font-size: 18px !important;
148             }
149         }
150         .page-part {
151             margin-bottom: 2px;
152         }
153         .scroller {
154             overflow: scroll;
155         }
156         .itemContent {
157             border-top: 1px solid #F2F2F2;
158             padding: 20px 0;
159             .itemTitle {
160                 color: #2b2b2b;
161                 margin: 0 14px;
162                 .itemTitle-name {
163                     font-weight: bolder;
164                     font-size: 16px;
165                 }
166                 .itemTitle-state {
167                     padding: 0 6px;
168                     height: 16px;
169                     line-height: 16px;
170                     border-radius: 2px;
171                 }
172                 .itemTitle-state-blue {
173                     border: 1px solid #617fde;
174                     color: #617fde
175                 }
176                 .itemTitle-state-red {
177                     border: 1px solid #f05d6e;
178                     color: #f05d6e;
179                 }
180                 .itemTitle-state-green {
181                     border: 1px solid #24c875;
182                     color: #24c875;
183                 }
184                 .itemTitle-state-gray {
185                     border: 1px solid #d8d8d8;
186                     color: #d8d8d8
187                 }
188             }
189             .itemDetail {
190                 .itemTime {
191                     width: calc(100% - 85px);
192                     color: #bebebe;
193                 }
194                 .itemBtn {
195                     padding: 0 14px;
196                     height: 18px;
197                     line-height: 18px;
198                     color: #A4ACB6;
199                 }
200             }
201         }
202     }
203 </style>                                                
 备注: finishInfinite(isNoMoreData :Boolean)  当参数为false时,上拉获取数据可以重新调用。
当参数为true,上拉获取数据回调函数停止使用,下拉下部不再显示loading,会显示‘’暂无更多数据


效果如下:





猜你喜欢

转载自www.cnblogs.com/zhaozhenzhen/p/10748814.html
今日推荐