index.vue
3.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
<template>
<div>
<Order :config="orderConfig" :val="order" v-if="!empty">
</Order>
<List :data="productList" :empty="empty"></List>
</div>
</template>
<script>
const Vue = require('vue');
const $ = require('jquery');
const lazyload = require('vue-lazyload');
const infinitScroll = require('vue-infinite-scroll');
const qs = require('yoho-qs');
const bus = require('common/vue-bus');
const tip = require('common/tip');
const order = require('component/product/order.vue');
const list = require('component/product/list.vue');
Vue.use(lazyload);
Vue.use(infinitScroll);
require('common/vue-filter');
module.exports = {
el: '#product-search',
data: function() {
return {
orderConfig: [],
// query
url: '/search.json',
order: '',
query: qs.query,
page: 0, // 未搜索 page=0; 全部加载完 page = totalPage; 无数据: page !=0 && productList.length=0
totalPage: null,
// 产品列表
productList: [],
// state
inSearching: false // 请求中
};
},
computed: {
// 无数据
empty: function() {
return this.page !== 0 && !this.productList.length;
}
},
components: {
list,
order
},
methods: {
search: function() {
const self = this;
const nextPage = this.page + 1;
if (this.inSearching) {
return;
}
// page = 0, 始终执行搜索
if (this.page && nextPage > this.totalPage) {
return;
}
this.inSearching = true;
console.log(nextPage);
$.get(this.url, {
order: this.order, // 排序 信息
query: this.query,
page: nextPage
})
.done(res => {
if (res.code === 200) {
self.page = res.data.page;
self.totalPage = res.data.pageTotal;
self.$set('productList', self.productList.concat(res.data.productList));
}
})
.fail(error => {
tip('网络出错~');
})
.always(() => {
self.inSearching = false;
});
},
/**
* 清空数据(page=0) 重新搜索
*/
research: function() {
this.page = 0;
this.$set('productList', []);
this.search();
}
},
watch: {
/* order 改变 都会触发 重新搜索 */
order: function() {
this.research();
}
},
created: function() {
const self = this;
bus.$on('list.paging', function() {
self.search();
});
bus.$on('order.change', function({
val
}) {
self.order = val;
});
this.search();
}
};
</script>
<style>
</style>