123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- <template>
- <view class="mta-refresh-list">
- <slot></slot>
- </view>
- </template>
- <script setup>
- import {
- onReachBottom,
- onLoad,
- onPullDownRefresh
- } from "@dcloudio/uni-app"
- import {
- ref
- } from "vue";
- const props = defineProps({
- refreshUrl: {
- type: String,
- default: '/api/admin/config'
- },
- options: {
- type: Object,
- default: () => {}
- },
- size: {
- type: Number,
- default: 10
- }
- })
- const Emits = defineEmits(['pull-down-refresh', 'reach-buttom']);
- /**
- * 页码
- */
- const page = ref(1);
- /**
- * @summary 将请求转换为promise
- */
- const transformUniRequestToPromise = (config) =>
- new Promise((resolve, reject) => {
- uni.request({
- ...config,
- success(data) {
- resolve(data);
- },
- fail(err) {
- reject(err);
- },
- });
- });
- /**
- * @summary 更新数据
- * @param {String} action 'pull-down-refresh' | 'reach-buttom'
- */
- async function getData(action) {
- try {
- // 刷新页码重置
- action === 'pull-down-refresh' && (page.value = 1);
- // 触底页码 加1
- action === 'reach-buttom' && (page.value++);
- const opt = {
- url: props.refreshUrl,
- method: "POST",
- data: {
- page: page.value,
- size: props.size,
- ...props.options
- }
- }
- const data = await transformUniRequestToPromise(opt)
- action === 'pull-down-refresh' && (uni.stopPullDownRefresh());
- Emit(action, data)
- } catch (err) {
- console.log('错误', err)
- uni.stopPullDownRefresh()
- }
- }
- /**
- * @summary 下拉刷新
- */
- onPullDownRefresh(() => getData('pull-down-refresh'));
- /**
- * @summary 加载完成 首次进行下拉刷新
- */
- onLoad(() => uni.startPullDownRefresh());
- /**
- * @summary 触底更新
- */
- onReachBottom(() => getData('reach-buttom'));
- </script>
- <style lang="scss">
- </style>
|