usePageData.ts 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import { ref, unref } from "vue";
  2. import { onReachBottom, onPullDownRefresh } from "@dcloudio/uni-app";
  3. /**
  4. * usePageData页面公共方法
  5. *
  6. * @param options
  7. */
  8. interface AgmsTs {
  9. [propName : string] : any;
  10. }
  11. export function usePageData(ApiFn : Function, agms : AgmsTs) {
  12. const LoadStatus = ref<'loadmore' | 'loading' | 'nomore' | ''>(''); // 加载状态
  13. const RowsList = ref<any[]>([]); // 列表数据
  14. const params = ref<any>(null); // 请求参数
  15. const Pages = ref({
  16. pageNum: 1,
  17. pageSize: 10
  18. })
  19. const Total = ref(0);
  20. const initData = (p) => {
  21. params.value = p;
  22. Pages.value.pageNum = 0;
  23. getLsit()
  24. };
  25. const getLsit = async () => {
  26. if (LoadStatus.value === 'loading') return
  27. try {
  28. Pages.value.pageNum += 1;
  29. if (unref(Pages).pageNum === 1) {
  30. RowsList.value = []
  31. }
  32. LoadStatus.value = 'loading';
  33. const P_ = {
  34. ...unref(Pages),
  35. ...(unref(params) || {})
  36. };
  37. const { rows, total } = await ApiFn(P_);
  38. RowsList.value = RowsList.value.concat(rows || []);
  39. Total.value = total;
  40. uni.stopPullDownRefresh();
  41. if (unref(RowsList).length < total) {
  42. LoadStatus.value = 'loadmore';
  43. } else {
  44. LoadStatus.value = 'nomore';
  45. }
  46. } catch (error) {
  47. uni.stopPullDownRefresh();
  48. LoadStatus.value = 'nomore';
  49. }
  50. }
  51. onReachBottom(() => {
  52. if (LoadStatus.value === 'loadmore') getLsit();
  53. })
  54. onPullDownRefresh(() => {
  55. initData(params.value);
  56. })
  57. return {
  58. initData,
  59. LoadStatus,
  60. RowsList,
  61. Total
  62. }
  63. }