main.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <template>
  2. <view class="screen_all flex container">
  3. <view class="header row">
  4. <view class="header-aside flex-all-1"
  5. v-for="(item,index) in screenData"
  6. :key="index"
  7. :class="{
  8. 'header-aside-active': screenOption.select === index
  9. }"
  10. @click="triggerScreen(index)"
  11. >
  12. <!-- 排序 -->
  13. <view v-if="item.type==='order'" class="screen_all row center">
  14. <view>{{item.label}}</view>
  15. <view class="header-aside-order flex center"
  16. :class="['header-aside-'+screenOption.value]"
  17. >
  18. <text class="iconfont iconfont-up header-aside-icon"></text>
  19. <text class="iconfont iconfont-down header-aside-icon"></text>
  20. </view>
  21. </view>
  22. <view v-else class="screen_all center relative">{{item.label}}
  23. <view class="absolute header-aside-line center">
  24. <view></view>
  25. </view>
  26. </view>
  27. </view>
  28. </view>
  29. <view class="flex-all-1 shop-container">
  30. <flat-list
  31. @changeData="flatChangeData"
  32. background="#F6F6F6"
  33. @fetch="fetch"
  34. :mode="skeleton?'skeleton':undefined"
  35. :skeleton="skeleton"
  36. :ref="base_flat_id"
  37. >
  38. <view class="row wrap jSpaceBetween shop-padding">
  39. <layout-shop
  40. v-for="(item,index) in base_flat_data.data"
  41. :key="index"
  42. :item="item"
  43. ></layout-shop>
  44. </view>
  45. </flat-list>
  46. </view>
  47. </view>
  48. </template>
  49. <script>
  50. import screenData from './data/screen';
  51. import layoutShop from '@/layout/layout-shop/main.vue';
  52. import flatList from '@/components/flat-list/src/main.vue';
  53. import mixins from './mixins';
  54. import Throttle from '@/utils/tool/throttle';
  55. import props from './props';
  56. export default {
  57. props,
  58. data(){
  59. return {
  60. screenData,
  61. screenOption:{
  62. select:0,
  63. value:0
  64. },
  65. skeleton:undefined
  66. }
  67. },
  68. mixins,
  69. methods:{
  70. triggerScreen(index){
  71. if (this.screenOption.select === index) {
  72. if (this.screenData[index].type === 'order') {
  73. this.screenOption.value = this.screenOption.value === 1 ? 2 : 1;
  74. this.reloadFetch();
  75. }
  76. } else {
  77. this.screenOption.select = index;
  78. if (this.screenData[index] && this.screenData[index].type === 'order') {
  79. this.screenOption.value = 1;
  80. }
  81. this.reloadFetch();
  82. }
  83. },
  84. fetch(obj){
  85. let params = {};
  86. let item = this.screenData[this.screenOption.select];
  87. if (item && item.key ) {
  88. params[item.key] = this.screenOption.value;
  89. }
  90. //
  91. return this.$request({
  92. url:'product/getProductList',
  93. data:{
  94. is_recommend:0,
  95. ...params,
  96. is_datebuy: this.dateBuy || 0
  97. },
  98. page:obj
  99. }).then((data)=>{
  100. if (this.skeleton === undefined) {
  101. this.skeleton = data.data.length;
  102. }
  103. return obj.success(data.data);
  104. }).catch(obj.fail);
  105. },
  106. reloadFetch(){
  107. return this.flatReload(1,true);
  108. }
  109. },
  110. components:{
  111. layoutShop,
  112. flatList
  113. },
  114. created(){
  115. this.throttle = new Throttle({
  116. delay:200,
  117. first:false,
  118. handle: this.reloadFetch,
  119. call: this
  120. });
  121. this.reloadFetch = this.throttle.supper;
  122. },
  123. beforeDestroy(){
  124. this.throttle && this.throttle.destroy();
  125. }
  126. }
  127. </script>
  128. <style scoped lang="scss" src="./style.scss"></style>