index.vue 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <template>
  2. <div class="k-list">
  3. <slot name="header" style="width: 100%"> </slot>
  4. <van-list v-model="isLoading" :finished="isFinished" finished-text @load="next">
  5. <slot v-for="(data, index) in dataList" :data="data" :index="index"></slot>
  6. </van-list>
  7. <van-empty v-if="dataList.length == 0 && !isLoading" description="暂无数据" />
  8. </div>
  9. </template>
  10. <script>
  11. import { debounce } from 'lodash'
  12. export default {
  13. components: {},
  14. data() {
  15. return {
  16. isLoading: false,
  17. isFinished: true,
  18. page: {
  19. pageNum: 0,
  20. pageSize: 10,
  21. },
  22. dataList: []
  23. }
  24. },
  25. computed: {},
  26. watch: {
  27. params: {
  28. deep: true,
  29. handler: debounce(
  30. function () {
  31. this.page = { pageNum: 0, pageSize: 10 }
  32. this.dataList = []
  33. this.next()
  34. },
  35. 300,
  36. { leading: true }
  37. )
  38. }
  39. },
  40. props: {
  41. list: {
  42. type: [Function, Array],
  43. required: true
  44. },
  45. params: {},
  46. wrap: {
  47. default() {
  48. return () => {}
  49. }
  50. },
  51. auto: {
  52. default: true
  53. },
  54. // 是否分页
  55. pageable: {
  56. type: Boolean,
  57. default: true
  58. }
  59. },
  60. methods: {
  61. //
  62. async next() {
  63. this.page.pageNum++
  64. try {
  65. this.isLoading = true
  66. const data = await this.list({
  67. ...this.params,
  68. ...this.page
  69. })
  70. console.log(data,'data')
  71. // 工程商列表获取接口/api/service/find/v2/all返回结构为dataList
  72. const content = data.rows ? data.rows : data.dataList || data
  73. this.isFinished = content.length < this.page.pageSize
  74. await this.wrap(content)
  75. if (this.page.pageNum === 0) {
  76. this.dataList = content
  77. } else {
  78. this.dataList = this.dataList.concat(content)
  79. }
  80. // this.dataList.concat(content);
  81. this.$emit('load', content)
  82. } catch (e) {
  83. console.error(e)
  84. this.isFinished = true
  85. } finally {
  86. this.isLoading = false
  87. }
  88. //不分页既完成
  89. if (!this.pageable) {
  90. this.isFinished = true
  91. }
  92. }
  93. },
  94. async created() {},
  95. async mounted() {
  96. this.auto && this.next()
  97. }
  98. }
  99. </script>
  100. <style lang="scss">
  101. .k-list {
  102. }
  103. </style>