看不懂就对了,这里本身也只是自己的一个记录而已。
layui和vue的融合,这里只是个过程,代码最终不是这样的。
接上面吧。
加了个滑动下拉加载。本来准备自己写的。jq那版是我自己写的。结果发现网上有个现成的插件,直接调用吧。
上代码。继续上面的代码的。
<style> .btn-circle .layui-icon {font-size: 18px;} </style> <!-- 正文开始 --> <div class="layui-fluid mescroll" id="Business_lst_html" v-cloak > <div class="layui-row layui-col-space15" > <div class="layui-col-xs12"> <div class="layui-card"> <div class="layui-card-body"> <div class="layui-form" lay-filter="butsinLstFormTop" > <div class="layui-block layui-form" style="margin-bottom:10px;"> <input type="type" name="seachTest" class="myseach-input" v-model="seachText" lay-verify="required" placeholder="按事项关键字搜索" /> <button class="layui-btn icon-btn layui-btn-sm myseach" lay-submit @click="search" > <i class="layui-icon"></i>搜 </button> </div> <div class="layui-btn-container"> <button class="layui-btn btn-circle" @click="openWin()" style="bottom: 60px; z-index: 9999;font-size: 18px" title="增加业务"> <i class="layui-icon"></i> </button> <!--<button data-tableid="butsinLstTable" ew-event="exportCsv" class="layui-btn icon-btn layui-btn-sm"> <i class="layui-icon"></i>导出 </button>--> <button class="layui-btn layui-btn-sm layui-btn-primary" v-on:click="only_debts"> 只看欠款 </button> <button class="layui-btn layui-btn-sm layui-btn-danger" v-on:click="wait_works(1)"> 待处理 </button> <button class="layui-btn layui-btn-sm layui-btn-normal" v-on:click="wait_works(2)"> 处理中 </button> <button class="layui-btn layui-btn-sm" v-on:click="wait_works(3)"> 待结账 </button> </div> </div> </div> </div> </div> </div> <div class="layui-row layui-col-space15 " id="Business_html" > <div class="layui-col-xs12 layui-col-sm6 layui-col-md6 mymain" v-for="(obj,index) in listData" v-bind:key="obj.id" > <div class="layui-card"> <div class="layui-card-body"> <div class="layui-text"> <template v-if="obj.img_url != 'assets/images/default.png' "> <div class="user-text-head" > <img @click="imgprev(obj.img_url)" v-bind:src=`${obj.img_url}?x-oss-process=style/thumb` v-bind:layer-src="obj.img_url" /> </div> </template> <div class="con-right "> <h3>事项</h3> <p>{{obj.matters}} </p> <p>{{obj.bus_detailed}}</p> </div> <div class="layui-clear"></div> <div class="layui-text"><span>{{obj.create_time}}</span><span class="pull-right" style="color:#FF5722;" >¥{{obj.actual_pay}}<span></div> <template v-if="obj.phone"> <div class="layui-text" > <span>客户:{{obj.user_name}}</span> <span style="margin-left:10px;">{{obj.phone}}</span> <a v-bind:href=`tel:${obj.phone}` class=" pull-right layui-btn layui-btn-primary layui-btn-xs">直拨电话</a> </div> </template> <div class="layui-text layui-clear" style="margin-top:5px;"> <a v-if="obj.status == 1 " class="layui-btn layui-btn-danger layui-btn-xs" @click="openWin(index)">{{obj.status_text}}</a> <a v-else-if="obj.status == 2 " class="layui-btn layui-btn-normal layui-btn-xs" @click="openWin(index)">{{obj.status_text}}</a> <a v-else-if="obj.status == 3 " class="layui-btn layui-btn-xs" @click="openWin(index)">{{obj.status_text}}</a> <template v-else class="layui-btn layui-btn-xs"> <span v-if="obj.dabt == 0 " >完成</span> <a v-else class="layui-btn layui-btn-xs" @click="openWin(index)" >欠款{{obj.dabt}}</a> </template> <span v-if="obj.status == 10 " class="layui-ml10">收款:{{obj.pay_type_title}}</span> <button class="layui-btn layui-btn-xs layui-btn-primary" @click="del(index)" style="float: right;"><i class="layui-icon"></i> 删除</button> <button class="layui-btn layui-btn-xs layui-btn-primary" @click="openWin(index)" style="float: right;margin-right: 10px;"><i class="layui-icon"></i> 修改</button> </div> </div> </div> </div> </div> </div> </div> <script > layui.use(['layer', 'form', 'config','common'], function () { "use strict"; var $ = layui.jquery; var layer = layui.layer; var form = layui.form; var config = layui.config; var my_html_data = { title:'业务', mainId:"Business_lst_html", addurl:"business/gethtml/method/business_add/", searchsUrl:'Business/searchs', //搜索用地址 delurl:'Business/del', searchKey:'matters' , //搜索key totalRow:false //是否开启合计 ,totalKey:"actual_pay" //合计字段 ,butkey:'status' //按钮事件key项目,这里是按天 } var paylst = new Vue({ el: '#'+ my_html_data.mainId, data: { mescroll: null, seachText:'', listData:[], initData:my_html_data, searchData:{ //请求搜索时的对象 'page': 1, 'limit': 30, 'search':[] }, total_money:'0.00' //合计金额 }, methods: { //计算合计 toatFun:function(){ let _that = this; let mkey = _that.initData.totalKey ; if(_that.initData.totalRow){ let totaldata = _that.listData ; let taoal = 0 ; for (let index = 0; index < totaldata.length; index++) { const element = totaldata[index]; const money = parseFloat(element[mkey]); taoal += money; } _that.total_money = taoal.toFixed(2); } }, //初始加载 gethtml:function(url){ let _that = this; this.seachInit(); admin.req(url,_that.searchData, function (res) { if(res.code != 0) return wx.miniProgram.navigateTo({url:'/pages/start/start'}); // 如果超过了500条,就清空免得影响性能,这么长谁看 if(_that.listData.length > 500){ _that.listData = []; } _that.listData = _that.listData.concat(res.data); //如果开启了合计,计算合计 _that.toatFun(); if(_that.listData.length ==0){ layer.msg("暂无数据"); } }, 'POST'); }, //页面参数重新初始化 seachInit:function(){ this.searchData.page = 1; this.searchData.limit = 10; this.listData=[]; }, //只看欠账 only_debts:function(){ this.searchData.search = {arrears:1}; this.gethtml(config.base_server + this.initData.searchsUrl); }, //按天年日月统计 wait_works:function(status_text){ let skey = this.initData.butkey ; this.searchData.search = {[skey]:status_text}; this.gethtml(config.base_server + this.initData.searchsUrl); }, //绑定微信预览图片接口事件 imgprev:function(src){ wx.previewImage({ current: src, // 当前显示图片的http链接 urls: [src] // 需要预览的图片http链接列表 }); }, //打开窗口事件 openWin(tabid){ let _that = this; let id = (typeof(tabid) !='undefined') ? 1 : 0; //因为js中0算假,因此加1判断 let title = id ? "修改":"增加"; let url = id ? _that.initData.addurl+'/id/'+_that.listData[tabid].id : _that.initData.addurl; url = config.base_server + url; admin.open({ title: title + _that.initData.title, url: url, end:function(){ if(id){ let data = admin.getTempData('tr_temp_data'); if(data){ let olddata = _that.listData.splice(tabid,1,data); //如果开启了合计,计算合计 if(_that.initData.totalRow){ let mkey = _that.initData.totalKey ; let addmoney = parseFloat(data[mkey]); let oldmoney = parseFloat(olddata[0][mkey]); let taoal = parseFloat(_that.total_money); taoal = taoal + addmoney -oldmoney; _that.total_money = taoal.toFixed(2); } admin.putTempData('tr_temp_data'); //清除临时缓存 } }else{ let data = admin.getTempData('tr_temp_data'); if(data){ _that.listData.unshift(data); //数组插入到首位 if(_that.initData.totalRow){ let mkey = _that.initData.totalKey ; let addmoney = parseFloat(data[mkey]); let taoal = parseFloat(_that.total_money); taoal += addmoney ; _that.total_money = taoal.toFixed(2); } admin.putTempData('tr_temp_data'); //清除临时缓存 } } } }); }, //删除 del:function(tabid){ let _that = this; layer.confirm('确定删除吗?注意,删除后不可恢复', function(index){ admin.req(_that.initData.delurl,{id:_that.listData[tabid].id} ,function(data){ if(data.code==1001){ _that.listData.splice(tabid, 1); } layer.msg(data.msg); },'POST' ); layer.close(index); }); }, search:function(){ //搜索 var that = this; var seachText = that.seachText; if (seachText.replace(/(^s*)|(s*$)/g, "").length ==0) return ; var key= that.initData.searchKey; that.searchData.search = {[key]:seachText}; this.gethtml(config.base_server + this.initData.searchsUrl); return false; }, //上拉回调 page = {num:1, size:10}; num:当前页 ,默认从1开始; size:每页数据条数,默认10 upCallback: function(page) { //联网加载数据 var self = this; self.searchData.page = page.num; self.searchData.limit = page.size; admin.req(config.base_server + self.initData.searchsUrl,self.searchData, function (res) { if(res.code != 0) return wx.miniProgram.navigateTo({url:'/pages/start/start'}); // 如果超过了500条,就清空免得影响性能,这么长谁看 if(self.listData.length > 500){ self.listData = []; } if(page.num == 1) self.listData = []; let curPageData = res.data ; self.listData = self.listData.concat(res.data); self.toatFun(); self.mescroll.endBySize(curPageData.length,res.count); //必传参数(当前页的数据个数, 总数据量) if(self.listData.length ==0){ layer.msg("暂无数据"); } }, 'POST'); }, }, mounted:function() { //创建MeScroll对象,down可以不用配置,因为内部已默认开启下拉刷新,重置列表数据为第一页 //解析: 下拉回调默认调用mescroll.resetUpScroll(); 而resetUpScroll会将page.num=1,再执行up.callback,从而实现刷新列表数据为第一页; var self = this; self.mescroll = new MeScroll(my_html_data.mainId, { //请至少在vue的mounted生命周期初始化mescroll,以确保您配置的id能够被找到 up: { callback: self.upCallback, //上拉回调 isBounce: false, //此处禁止ios回弹,解析(务必认真阅读,特别是最后一点): http://www.mescroll.com/qa.html#q10 lazyLoad: { use: true // 是否开启懒加载,默认false } } }); } }) }) </script>
这个滑动插件真的非常好用,感谢。放上他的链接吧。http://www.mescroll.com/index.html?v=191101