@hzy1123581324/z-view-ui
Version:
z-view-ui是使用vue3开发的组件,开发中,有部分组件功能未实现,慎用
287 lines (263 loc) • 8.62 kB
JavaScript
import { onShow,onReachBottom,onHide,onReady,onPullDownRefresh } from "@dcloudio/uni-app";
import {ref, reactive,watch} from "vue";
const targetFunc = ()=>{
console.warn('targetFunc 是分页接口函数')
console.warn('targetFunc 是分页接口函数')
console.warn('targetFunc 是分页接口函数')
console.warn('targetFunc 是分页接口函数')
console.warn('targetFunc 是分页接口函数')
console.warn('接口内部使用setData 方法 更新数据')
return new Promise()
}
/**
* @description 分页生命周期
* @return
*/
export const usePaginate = ({onShowRefresh = 1, pageInit = 1,limitInit = 10,targetFunc,scrolltolowerBefore = ()=>true }={})=>{
// onShowRefresh 0 onshow 不刷新 1 onshow 刷新 2 onshow 第一次 不刷新以后每次都刷新 3 只在页面初始加载onready时加载一次,onshow都不加载
let ishide = false;
let page = ref(pageInit);
let limit = ref(limitInit);
let hasmore = ref(true);
// let state = false;
let paginateList = reactive([]);
/**
* @description 更新数据
* @param {Array} list 要更新的数组
* @param {Number} currentPage 当前页数
*/
function setData(list , currentPage = page.value){
let start = (currentPage - 1) * limit.value;
let len = limit.value;
if(currentPage == pageInit){
len = paginateList.length;
}
paginateList.splice(start,len,...list);
console.log(paginateList,'&&&&&&&&');
}
/**
* @description 更新某一页数据
* @param {Array} list 要更新的数组
* @param {Number} currentPage 当前页数
*/
function updateData(list,currentPage = page.value){
let start = (currentPage - 1) * limit.value;
paginateList.splice(start,limit.value,...list);
}
/**
* @description 更新数据
* @param {Array} total 总条数
* @param {Number} currentPage 当前页数
*/
function isHasmore(total,currentPage){
currentPage||(currentPage = page.value);
hasmore.value = total > currentPage * limit.value;
console.log(hasmore,"是否还有更多")
return hasmore.value;
}
function refresh(){
page.value = 1;
hasmore.value = true
// state = true;
return targetFunc();
}
// 滚动到底部 使用scroll-view 时用到
function scrolltolower(){
if (process.env.NODE_ENV === 'development') { // 开发环境
console.warn("触底了++++++++++");
}
if(hasmore.value&&scrolltolowerBefore()){
page.value ++;
targetFunc();
}
}
onReachBottom(scrolltolower);
onPullDownRefresh(()=>{
if(onShowRefresh==1||(onShowRefresh == 2 && ishide == true)){
ishide = false;
refresh().finally(()=>{
uni.stopPullDownRefresh()
}).catch(err=>{
console.log(err)
});
}
})
onShow(() => {
if(onShowRefresh==1||(onShowRefresh == 2 && ishide == true)){
ishide = false;
refresh();
}
});
onReady(()=>{
if(onShowRefresh==3){
ishide = false;
refresh();
}
})
onHide(()=>{
ishide = true;
});
return {
page,
limit,
hasmore,
paginateList,
targetFunc,
setData,
updateData,
isHasmore,
scrolltolower,
refresh
}
}
/**
* @description 分页生命周期 一个页面有多个分页
* @param {String|Number} onShowRefresh 总数据条数
* @param {Boolean} isWatch 是否监听activeindex 下标的变化 , true ,监听,刷新,false 不处理
* @param {Number} limitInit 每页的条数
* @param {Number} pageInit 页数初始值
*
*/
export const useListPaginate = ({targetFunc,length,onShowRefresh = 1,pageInit=1,limitInit = 10,isWatch = false,scrolltolowerBefore = ()=>true }={})=>{
// let pageList = reactive(pageInit.toString().repeat(length).split(""));
// let limitList = reactive(limitInit.toString().repeat(length).split(""));
// let hasmoreList = reactive(true);
// let activeIndex = ref(0);
// let paginateList = reactive([]);
// onShowRefresh 0 onshow 不刷新 1 onshow 刷新 2 onshow 第一次 不刷新以后每次都刷新 3 只在页面初始加载onready时加载一次,onshow都不加载
let ishide = false;
let pageList = reactive([]);
let limitList = reactive([]);
let hasmoreList = reactive([]);
let activeIndex = ref(0);
let paginateList = reactive([]);
function lengthChange(length){
// let pageList = reactive(pageInit.toString().repeat(length).split(""));
// let limitList = reactive(limitInit.toString().repeat(length).split(""));
// let hasmoreList = reactive(true);
// let activeIndex = ref(0);
// let paginateList = reactive([]);
pageList.length = length;
limitList.length = length;
hasmoreList.length = length;
paginateList.length = length;
// for(let i=0;i<length;i++){
// if(pageList[i]!=pageInit){
// pageList[i] = pageInit;
// }
// pageList[i] = (0,pageList.length,)
// }
}
/**
* @description 更新数据
* @param {Array} list 要更新的数组
* @param {Number} currentIndex 当前展示的数组下标
* @param {Number} currentPage 当前页数
* @param {Number} limit 每页的条数
*/
function setData(list,currentIndex = activeIndex.value, currentPage,){
currentPage||(currentPage = pageList[currentIndex]);
limitList[currentPage]||(limitList[currentPage] = limitInit)
let start = (currentPage - 1) * limitList[currentPage];
let len = limitList[currentPage];
paginateList[currentIndex]||(paginateList[currentIndex]=[])
if(currentPage == pageInit){
len = paginateList[currentIndex].length;
}
paginateList[currentIndex].splice(start,len,...list);
console.log(paginateList,'&&&&&&&&');
}
/**
* @description 更新某一页数据
* @param {Array} list 要更新的数组
* @param {Number} currentIndex 当前展示的数组下标
* @param {Number} currentPage 当前页数
* @param {Number} limit 每页的条数
*/
function updateData(list,currentIndex = activeIndex.value, currentPage,){
currentPage||(currentPage = pageList[currentIndex]);
limitList[currentPage]||(limitList[currentPage] = limitInit)
let start = (currentPage - 1) * limitList[currentPage];
paginateList[currentIndex]||(paginateList[currentIndex]=[])
paginateList[currentIndex].splice(start,limitList[currentPage],...list);
console.log(paginateList,'&&&&&&&&');
}
/**
* @description 判断是否还有更多数据
* @param {String|Number} total 总数据条数
* @param {Number} currentPage 当前页数
* @returns {Boolean} 是否还有更多
*/
function isHasmore(total,currentIndex = activeIndex.value, currentPage,){
currentPage||(currentPage = pageList[currentIndex]);
limitList[currentPage]||(limitList[currentPage] = limitInit)
hasmoreList[currentIndex] = total > currentPage * limitList[currentPage];
console.log(hasmoreList,"是否还有更多")
return hasmoreList;
}
// 滚动到底部 使用scroll-view 时用到
function scrolltolower(index){
console.log(index,'8888891234108237410293847')
index||(index = activeIndex.value);
isNaN(index)&&(index = activeIndex.value);
if (process.env.NODE_ENV === 'development') { // 开发环境
console.warn("触底了++++++++++"+index);
console.log(hasmoreList[index]);
}
if(hasmoreList[index]&&scrolltolowerBefore()){
pageList[index]++;
targetFunc(index);
}
}
function refresh(index = activeIndex.value){
console.log('开始调接口了');
pageList[index] = 1;
hasmoreList[index] = true;
limitList[index] = limitInit;
return targetFunc(index);
}
onReachBottom(scrolltolower);
onPullDownRefresh(()=>{
if(onShowRefresh==1||(onShowRefresh == 2 && ishide == true)){
ishide = false;
refresh().finally(()=>{
uni.stopPullDownRefresh()
}).catch(err=>{
console.log(err)
});
}
})
onShow(() => {
if(onShowRefresh==1||(onShowRefresh == 2 && ishide == true)){
ishide = false;
console.log("1234");
refresh();
}
});
onReady(()=>{
if(onShowRefresh==3){
ishide = false;
refresh();
}
})
onHide(()=>{
ishide = true;
});
watch(activeIndex,(newval,oldval)=>{
console.log(newval,newval.value,'分页++++++')
isWatch&&newval>-1&&refresh();
})
return {
pageList,
limitList,
hasmoreList,
paginateList,
targetFunc,
setData,
updateData,
isHasmore,
activeIndex,
scrolltolower,
refresh
}
}