@deepjs/uni-pull
Version:
封装 uni-app 上拉加载 && 下拉刷新
174 lines (139 loc) • 5.51 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _qs = require("@deepjs/qs");
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
// TODO: 有一个warn 未排查出原因
var _default = {
data: function data() {
return {
scrollTop: 0,
isLoading: true,
// 页面是否在load 默认页面在loading
pullLoading: false,
// 翻页load
finished: false,
// 是否到底部 显示提示
scrollCheck: false,
// 是否初始化完成后调用
loadingTip: '加载中...',
// 翻页加载提示
finishedTip: '已经到底了',
// 到底提示
noDataTip: '暂无数据!',
listData: [],
//
pullParamsDefault: {
// 默认参数
page_num: 1,
// 当前页
page_limit: 20,
// 没页条数
need_pagination: 1,
page_serial: ''
},
pullParams: {} // 参数
};
},
methods: {
// 初始化参数
initPullList: function initPullList() {
// console.log('init....')
this.pullParams.page_serial = ''; // 分页序列号
this.pullParams.page_num = 1;
this.finished = false; // 是否到底
this.pullLoading = false;
this.listData = [];
},
// 刷新
onRefresh: function onRefresh() {
this.initPullList(); // window.scrollTo(0, 10)
},
onScroll: function onScroll() {
console.log('scroll');
},
// 加载下一页
onScrollToLower: function onScrollToLower() {
var _this = this;
console.log('reach bottom...');
if (this.pullLoading) return; // 翻页是否还在load
// 已到底部
if (this.finished) {
this.pullLoading = false;
console.log('没有更多数据了');
return;
} // 显示loading
if (this.pullParams.page_num > 1) {
this.pullLoading = true;
} // console.log('ajax...start');
var params = _objectSpread(_objectSpread(_objectSpread({}, this.pullParamsDefault), this.pullParams), {}, {
hideLoading: true,
isLoading: false
}); // console.log(params)
this.pullModel(params, function (res) {
_this.$hideLoading();
console.log('ajax...end');
_this.isLoading = false;
_this.pullLoading = false;
if (typeof _this.afterPull === 'function') {
_this.afterPull(res);
}
_this.dealData(res);
}, function (err) {
// console.log(err);
_this.$hideLoading();
_this.pullLoading = false;
}, this);
},
// 统一api
// 需要外部重写
pullModel: function pullModel() {// api.getItem.apply(this, rest)
},
// 处理数据业务逻辑
dealData: function dealData() {
var res = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
this.$hideLoading();
this.isLoading = false;
this.pullLoading = false;
if (typeof this.preDealList === 'function') {
this.preDealList(res);
}
var _this$pullParams$page = this.pullParams.page_num,
pageNum = _this$pullParams$page === void 0 ? 1 : _this$pullParams$page;
var _res$data = res.data,
data = _res$data === void 0 ? {} : _res$data;
this.pullParams.page_serial = data.page_serial || ''; // 分页序列号
var newList = data.list || []; // list 数据
// 后台返回 是否还有下一页
var hasMore = (data.total_page || data.totalPage) > pageNum; // 如果第一页没有数据 默认已经到达最底部
if (pageNum === 1 && !newList.length) {
hasMore = false;
}
if (pageNum === 1) {
this.listData = [];
}
if (hasMore) {
this.pullParams.page_num += 1; // 页数加一
}
this.finished = !hasMore; // dealList 方法 外部重写
if (typeof this.dealList === 'function') {
var temp = this.dealList(newList) || [];
if (!temp) {
this.$showToast('处理数据返回格式有问题');
return;
}
newList = (0, _qs.deepCopy)(temp);
} // 数组去重
this.listData = this.listData.concat(newList); // console.log(this.listData)
// console.log(typeof this.afterPullData)
if (typeof this.afterPullData === 'function') {
this.afterPullData(res);
}
}
}
};
exports.default = _default;