uni-app:实现点击按钮,进行数据累加展示(解决数据过多,导致出错)

效果

代码

核心代码

一、标签显示

html 复制代码
<!-- 加载更多 -->
<view class="load_more" v-if="info.length >= pageNum * pageSize" @tap="loadMore">
        加载更多
</view>
  • v-if="info.length >= pageNum * pageSize":这是一个条件渲染的指令,当满足条件时才会渲染该元素。条件是判断当前已加载的元素数量是否达到了当前页码乘以每页的元素数量。
  • @tap="loadMore" :这是一个点击事件绑定的指令,当用户点击该元素时,会触发loadMore方法。

二、变量设置

javascript 复制代码
data() {
	return {
		search: getApp().globalData.icon + 'index/search.png',
		add: getApp().globalData.icon + 'index/index/add.png',
		info: [],
		pageNum: 1,//默认初始页码
		pageSize: 3,//一页显示的条数
		like_trans_num:'',//模糊查询的单号
	}
},

定义变量pageNum默认初始页码;pageSize一页显示的条数

三、加载更多

javascript 复制代码
loadMore() {
	this.pageNum++;
	this.requestData();
},

点击加载更多按钮,执行内容: 页码数+1,再次执行获取数据的函数

四、获取数据

javascript 复制代码
requestData() {
	uni.request({
		url: getApp().globalData.position + 'Warehouse/select_inhouse',
		data: {
			page: this.pageNum,
			pageSize: this.pageSize,
			like_trans_num:this.like_trans_num
		},
		header: {
			"Content-Type": "application/x-www-form-urlencoded"
		},
		method: 'POST',
		dataType: 'json',
		success: res => {
			if (res.data.info.length > 0) {
				this.info = this.info.concat(res.data.info);
			} else {
				// 没有更多数据
				// 可以在界面上显示相应提示
			}
		},
		fail(res) {
			console.log("查询失败") 
		}
	});
}
  • 将页码、每次查询数量、模糊查询数据传入后端作为条件,获取数据库中数据
  • if (res.data.info.length > 0) {this.info = this.info.concat(res.data.info);}:判断是满足本页长度是否大于0,如果大于0,进行数据的拼接

五、后端

php 复制代码
$page = input('post.page', 1);//获取前端传来的页码数,如果不存在默认为1
$pageSize = input('post.pageSize', 10);//获取前端传来的每页数量,如果不存在默认为10
$start = ($page - 1) * $pageSize; // 查询起始位置
->limit($start,$pageSize)//查询数据库时,作为查询条件

全部代码

前端

html 复制代码
<template>
	<view>
		<!--新增-->
		<image class='img' :src="add" @tap='add_inhouse'></image>
		<!-- 搜索框 -->
		<view class="top">
			<view class="search">
				<view class="search_in">
					<image :src="search"></image>
					<input type="text" placeholder="请输入工单信息" placeholder-style="color:#CCCCCC"
						@confirm="search_inhouse" />
				</view>
			</view>
		</view>
		<!-- 主干内容 -->
		<view class="item_info" v-for="(item, index) in info" :key="index">
			<view class="all_content" :data-id="item.trans_num" @tap="detail_inhouse">
				<view class="all_position">
					<!-- 第一行 -->
					<view class="line1">
						<!-- 单号 -->
						<view class="line1_left">
							{{item.trans_num}}
						</view>
						<view class="line1_right">
							{{item.created_by}}
						</view>
					</view>
					<view class="line2">
						<!-- 供应商名称 -->
						<view class="line2_item">
							交易类型:{{item.transaction_type}}
						</view>
						<view class="line2_item">
							仓库名称:{{item.subinventory_from}}
						</view>
						<view class="line2_item">	
							创建时间:{{item.creation_date}}
						</view>
					</view>
				</view>
			</view>
		</view>

		<!-- 加载更多 -->
		<view class="load_more" v-if="info.length >= pageNum * pageSize" @tap="loadMore">
			加载更多
		</view>

	</view>
</template>

<script>
	export default {
		data() {
			return {
				search: getApp().globalData.icon + 'index/search.png',
				add: getApp().globalData.icon + 'index/index/add.png',
				info: [],
				pageNum: 1,//默认初始页码
				pageSize: 3,//一页显示的条数
				like_trans_num:'',//模糊查询的单号
			}
		},
		methods: {
			//查询杂项入库的详情页
			detail_inhouse(e){
				// console.log(e.currentTarget.dataset.id)
				var trans_num = e.currentTarget.dataset.id
				uni.navigateTo({
					url: '../detail_inhouse/detail_inhouse?trans_num='+trans_num,
				})
			},
			//新增采购入库
			add_inhouse(){
				uni.navigateTo({
					url: '../add_inhouse/add_inhouse',
				})
			},
			loadMore() {
				this.pageNum++;
				this.requestData();
			},
			//模糊查询
			search_inhouse(e){
				this.info=[];
				this.pageNum= 1;
				this.pageSize=3;
				// console.log(e.target.value);
				this.like_trans_num = e.target.value;
				this.requestData();
			},
			requestData() {
				uni.request({
					url: getApp().globalData.position + 'Warehouse/select_inhouse',
					data: {
						page: this.pageNum,
						pageSize: this.pageSize,
						like_trans_num:this.like_trans_num
					},
					header: {
						"Content-Type": "application/x-www-form-urlencoded"
					},
					method: 'POST',
					dataType: 'json',
					success: res => {
						// console.log(res.data.info)
						// console.log(res.data.all_count)
						if (res.data.info.length > 0) {
							this.info = this.info.concat(res.data.info);
						} else {
							// 没有更多数据
							// 可以在界面上显示相应提示
						}
					},
					fail(res) {
						console.log("查询失败") 
					}
				});
			}
		},
		onLoad() {
			this.requestData();
		}
	}
</script>

<style>
	/* 主体内容 */
	.all_content {
		margin-top: 25rpx;
		/* border: 1px solid black; */
		width: 100%;
		background-color: #ffffff;
		display: flex;
		justify-content: center;
	}

	.all_position {
		width: 92%;
		/* border: 1px solid red; */
	}

	.line1 {
		display: flex;
		width: 100%;
		padding: 20rpx 0;
		border-bottom: 4rpx solid #e5e5e5;
	}

	.line1_left {
		width: 50%;
	}

	.line1_right {
		width: 50%;
		text-align: right;
	}

	.line2 {
		/* border: 1px solid red; */
		padding: 20rpx 0 20rpx 0;
	}

	.line2_item {
		/* border: 1px solid red; */
		padding: 10rpx 0;
	}

	/* 背景色 */
	page {
		background-color: #F0F4F7; 
	}

	/* 悬浮按钮 */
	.img {
		float: right;
		position: fixed;
		bottom: 6%;
		right: 2%;
		width: 100rpx;
		height: 100rpx;
	}

	/* 搜索框 */
	.search {
		display: flex;
		align-items: center;
		justify-content: center;
		background-color: #ffffff;
		/* border:1px solid black; */
		width: 100%;
		height: 100rpx;
	}

	.search .search_in {
		display: flex;
		align-items: center;
		justify-content: space-between;
		padding: 0 20rpx;
		box-sizing: border-box;
		height: 70rpx;
		width: 90%;
		background-color: #F0F4F7;
		border-radius: 10rpx;
		/* border:1px solid black; */
	}

	.search_in image {
		height: 40rpx;
		width: 45rpx;
		margin-right: 20rpx;
	}

	.search input {
		width: 100%;
	}

	/* 加载更多 */
	.load_more {
		text-align: center;
		padding: 20rpx 0;
		color: #999999;
		font-size: 28rpx;
	}
</style>

后端

php 复制代码
   public function select_inhouse() {
        $page = input('post.page', 1);
        $pageSize = input('post.pageSize', 10);
        $like_trans_num = input('post.like_trans_num', '');
        $start = ($page - 1) * $pageSize; // 查询起始位置
        $subQuery = db::table('inv_transactions_all')
            ->field('trans_num, subinventory_from, transaction_type, creation_date')
            ->where('trans_num', 'like', 'ZR%')
            ->where([
                'trans_num'=>['like', '%' . $like_trans_num . '%'],
                ])
            ->order('creation_date DESC')
            ->group('trans_num, subinventory_from, transaction_type, creation_date')
            ->limit($start,$pageSize)
            ->buildSql();
        $data['info'] = db::table([$subQuery => 't'])
            ->select();
        // 格式化时间
        foreach ($data['info'] as &$item) {
            $item['creation_date'] = date('Y-m-d H:i:s', $item['creation_date']);
        }
        // 格式化时间
        echo json_encode($data);
    }
相关推荐
公子艾1 小时前
uniapp设置tabBar高斯模糊并设置tabBar高度占位
uni-app
晓风伴月3 小时前
uniapp: IOS微信小程序输入框部分被软键盘遮挡问题
微信小程序·小程序·uni-app
转角羊儿3 小时前
uni-app文章列表制作⑧
前端·javascript·uni-app
糊涂涂是个小盆友4 小时前
前端 - 使用uniapp+vue搭建前端项目(app端)
前端·vue.js·uni-app
阿巴阿巴Ovo5 小时前
uniapp中多角色导致tabbar过多的解决方式
uni-app
Json____8 小时前
学法减分交管12123模拟练习小程序源码前端和后端和搭建教程
前端·后端·学习·小程序·uni-app·学法减分·驾考题库
云深时现月9 小时前
jenkins使用cli发行uni-app到h5
前端·uni-app·jenkins
diygwcom10 小时前
低代码可视化-uniapp开关选择组件-低码生成器
uni-app
fakaifa1 天前
CRMEB Pro版v3.1源码全开源+PC端+Uniapp前端+搭建教程
前端·小程序·uni-app·php·源码下载
转角羊儿1 天前
uni-app请求方法封装⑦
uni-app