index.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. <template>
  2. <app-layout>
  3. <view class="book-index">
  4. <view class="page-width quick-navigation">
  5. <app-quick-navigation></app-quick-navigation>
  6. </view>
  7. <view class="page-width head-nav-list">
  8. <app-head-nav-list
  9. v-bind:catList="catList"
  10. @click="changeStatus"
  11. v-bind:cat_id="cat_id"
  12. ></app-head-nav-list>
  13. </view>
  14. <view class="page-width product-list" v-if="goods_list.length > 0">
  15. <app-product-list v-bind:goodsList="goods_list"></app-product-list>
  16. </view>
  17. <view class="page-width no-goods" v-else>
  18. <app-no-goods background="#f7f7f7"></app-no-goods>
  19. </view>
  20. </view>
  21. </app-layout>
  22. </template>
  23. <script>
  24. import appHeadNavList from '../components/app-head-nav-list.vue';
  25. import appProductList from '../components/app-product-list.vue';
  26. import appQuickNavigation from "../../../components/page-component/app-quick-navigation/app-quick-navigation.vue";
  27. import appNoGoods from '../../../components/page-component/app-no-goods/app-no-goods.vue';
  28. export default {
  29. name: "index",
  30. data() {
  31. return {
  32. catList: [
  33. {
  34. name: '全部',
  35. id: 0
  36. }
  37. ],
  38. cat_id: 0,
  39. page: 1,
  40. goods_list: [],
  41. page_count: 1,
  42. }
  43. },
  44. onLoad(option) {
  45. uni.showLoading({
  46. title: '加载中',
  47. });
  48. if (option.cat_id) {
  49. this.cat_id = option.cat_id;
  50. } else {
  51. this.cat_id = this.catList[0].id;
  52. }
  53. this.request();
  54. this.$request({
  55. url: this.$api.book.cats
  56. }).then(response => {
  57. uni.hideLoading();
  58. if (response.code === 0) {
  59. this.catList = [...this.catList, ...response.data.cat];
  60. // this.request();
  61. }
  62. });
  63. },
  64. methods: {
  65. changeStatus(status) {
  66. this.page = 1;
  67. this.cat_id = status;
  68. this.goods_list = [];
  69. this.request();
  70. },
  71. async request() {
  72. uni.showLoading({
  73. title: '加载中',
  74. });
  75. const res = await this.$request({
  76. url: this.$api.book.list,
  77. data: {
  78. page: this.page,
  79. cat_id: this.cat_id,
  80. }
  81. });
  82. uni.hideLoading();
  83. if (res.code === 0) {
  84. this.dataProcessing(res.data);
  85. }
  86. },
  87. dataProcessing(data) {
  88. for (let i = 0; i < data.list.length; i+=2) {
  89. if (i+1 !== data.list.length) {
  90. this.goods_list.push([data.list[i], data.list[i+1]]);
  91. } else {
  92. this.goods_list.push([data.list[i]]);
  93. }
  94. }
  95. this.page_count = data.pagination.page_count;
  96. }
  97. },
  98. onReachBottom() {
  99. if (this.page < this.page_count) {
  100. this.page++;
  101. this.request();
  102. }
  103. },
  104. onShareAppMessage() {
  105. return this.$shareAppMessage({
  106. path: '/plugins/book/index/index',
  107. title: this.$children[0].navigationBarTitle,
  108. });
  109. },
  110. components: {
  111. 'app-head-nav-list': appHeadNavList,
  112. 'app-product-list': appProductList,
  113. 'app-quick-navigation': appQuickNavigation,
  114. 'app-no-goods': appNoGoods,
  115. },
  116. }
  117. </script>
  118. <style scoped lang="scss">
  119. .head-nav-list {
  120. position: fixed;
  121. top: 0;
  122. left: 0;
  123. z-index: 1500;
  124. }
  125. .product-list {
  126. margin-top: #{100rpx};
  127. }
  128. .no-goods {
  129. margin-top: #{150rpx};
  130. }
  131. </style>