|                                                                                                                                        |  | // 简化版列表的混入
export default {	data() {		return {			list: [],      pageNo : 1,      pageSize : 8,      mixinListApi: '',      isLoading: false,      hasMore: true,      // 额外返回出去的数据
      extraData: null,      // 每次更新数据后执行的函数 可以进行数据处理
      afterUpdateDataFn: function() {},      // 每次更新数据前执行的函数,
      beforeUpdateDataFn: function() {},      // 混入配置
      mixinListConfig: {        // 数据返回的直接路径
        responsePath: 'result.records',        // 列表是否需要下拉刷新
        isPullDownRefresh: true,        // 列表是否需要上拉加载
        isReachBottomLoad: true,        // 额外返回出去的数据的路径
        extraDataPath: ''       }		}	},  computed: {    // 自定义onShow前会执行的函数
    mixinFnBeforePageShow() {      return function() {}    }  },	methods: {    // 获取文件的自定义传参 -- 可以在页面中重写
    mixinSetParams() {      return {}    },    // 解析分路径获取嵌套值
    resolvePath(obj, path) {      if (path){        return path.split('.').reduce((acc, key) => (acc && acc[key] !== undefined ? acc[key] : null), obj)      }else {        return obj      }    },    // 初始化分页
    initPage(){      this.pageNo = 1,      this.hasMore = true    },    // 获取列表
    async getList(isRefresh = false) {      // console.log('本次请求的pageNo和pageSize', this.pageNo, this.pageSize)
      if (!this.hasMore) {        return      }      this.isLoading = true      const apiMethod = this.resolvePath(this.$api, this.mixinListApi)      if (typeof apiMethod !== 'function') {        console.log('mixinApi不存在', this.mixinListApi);        return      }      // 每次更新数据前执行的函数
      if (this.beforeUpdateDataFn) {        this.beforeUpdateDataFn(this.list)      }            const res = await apiMethod({        pageNo: this.pageNo,        pageSize: this.pageSize,        ...this.mixinSetParams()      })      const resData = this.resolvePath(res, this.mixinListConfig.responsePath) || []      if (res.code === 200) {        // 如果没有值了
        if (!resData.length) {          this.hasMore = false          uni.showToast({            title: '暂无更多数据',            icon: 'none'          })        }else {          this.pageNo++        }
        if (isRefresh ) {          // 如果是刷新,直接覆盖
          this.list = resData                  } else {          this.list = [...this.list, ...resData]        }
        // 如果有额外数据的路径,刷新后,需要将额外数据也刷新
        if (this.mixinListConfig.extraDataPath !== '') {          this.extraData = this.resolvePath(res, this.mixinListConfig.extraDataPath)        }      }      // 每次更新数据后执行的函数
      if (this.afterUpdateDataFn) {        this.afterUpdateDataFn(this.list)      }      // 如果有在加载中
      if (this.isLoading) {        this.isLoading = false      }      // 有过有在下拉加载
      uni.stopPullDownRefresh()    },	},  async onShow() {    // if (!this.list.length) {
      if (this.mixinFnBeforePageShow) this.mixinFnBeforePageShow()      this.initPage()      await this.getList(true)    // }
  },  async onPullDownRefresh() {    // 在下拉还没结束前 不做任何操作
    if (this.isLoading) {      return    }    this.initPage()    await this.getList(true)  },  async onReachBottom() {    if (this.isLoading) {      return    }    await this.getList()  }}
 |