Authored by 陈轩

filter sub page

... ... @@ -21,9 +21,20 @@ exports.index = (req, res) => {
res.render('search', view);
};
/* 筛选的二级页面 */
exports.subFilter = (req, res) => {
const view = {
module: 'product',
page: 'filter-sub'
};
res.render('filter-sub', view);
};
/* 获取 筛选配置 */
exports.fetchFilters = (req, res, next) => {
const params = {
uid: 14741796, // mock data
page: req.body.page || 1,
order: req.body.order || 1,
yh_channel: req.body.yh_channel || 'all',
... ... @@ -41,10 +52,15 @@ exports.fetchFilters = (req, res, next) => {
.then(result => {
let filterConfig = {};
prettyFilter(result.data.filter);
filterConfig = camelCase(result.data.filter);
if (result.code === 200) {
prettyFilter(result.data.filter);
filterConfig = camelCase(result.data.filter);
}
res.json(filterConfig);
res.json({
code: result.code,
data: filterConfig
});
})
.catch(next);
};
... ... @@ -52,6 +68,7 @@ exports.fetchFilters = (req, res, next) => {
/* 查询 产品列表 */
exports.fetchProducts = (req, res, next) => {
const params = {
uid: 14741796, // mock data
page: req.body.page || 1,
order: req.body.order || 1,
yh_channel: req.body.yh_channel || 'all',
... ... @@ -67,9 +84,10 @@ exports.fetchProducts = (req, res, next) => {
code: 200
})
.then(result => {
result.data.productList = processProductList(result.data.productList);
result = camelCase(result);
if (result.code === 200) {
result.data.productList = processProductList(result.data.productList);
result = camelCase(result);
}
res.json(result);
})
.catch(next);
... ...
... ... @@ -16,6 +16,7 @@ const search = require(`${cRoot}/search`);
router.get('/search', search.index);
router.post('/search', search.fetchProducts);
router.get('/filter', search.subFilter);
router.get('/filters.json', search.fetchFilters);
// 商品详情controller
... ...
{{! 筛选的 二级菜单}}
<div id="filter-sub">
<filter-sub :data="data" :val="val" type="color"><filter-sub>
</div>
\ No newline at end of file
... ...
const Vue = require('yoho-vue');
const filterSub = require('product/filter/filter-sub.vue');
// TODO: 该mock数据 应该有 上级页面传过来
const page = {
type: 'brand', // 二级筛选的 类型
data: [ // 二级筛选的 数据
{ id: 1, name: '红色' },
{ id: 2, name: '红色' },
{ id: 3, name: '红色' }
],
val: 3 // 二级筛选 的值
};
new Vue({
el: '#filter-sub',
data: function() {
return {
type: page.type,
data: page.data,
val: page.val
};
},
components: {
filterSub
}
});
... ...
... ... @@ -2,7 +2,6 @@
<div>
<brand-filter v-if="type === 'brand'" :data="data" :val.sync="val"></brand-filter>
<normal-filter v-else :data="data" :val.sync="val">
<slot></slot>
</normal-filter>
</div>
</template>
... ... @@ -19,7 +18,7 @@ module.exports = {
watch: {
val: function(newV, oldV) {
console.log(`type: ${this.type}, value: ${newV}`);
}
}
}
};
</script>
... ...
<template>
<div class="filter-detail">
<div class="item" v-for="item in data" :class="{active: item.id === value}" @click="toggleCheck(item.id)">
<div class="item" v-for="item in data" :class="{active: item.id === val}" @click="toggleCheck(item.id)">
<div class="item-inner">
{{item.name}}
</div>
... ... @@ -10,12 +10,11 @@
</template>
<script>
module.exports = {
props: ['data', 'type', 'value'],
props: ['data', 'type', 'val'],
computed: {},
methods: {
toggleCheck: function(val) {
this.value = val;
this.$parent.select(val);
this.val = val;
}
}
};
... ...
... ... @@ -3,7 +3,7 @@
<ul class="cardlist card-large clearfix">
<li class="card" v-for="item in data">
<div class="card-pic">
<a href="">
<a href="/product/{{item.id}}">
<img v-lazy="item.goodsList[0].imagesUrl | resize 372 499" alt="{{item.productName}}">
</a>
</div>
... ... @@ -28,7 +28,7 @@ module.exports = {
/* 开启滚动加载 */
disableFetch: Boolean,
//数据
// 数据
data: Array
},
methods: {
... ...
<template>
<div>
<!--<filter-sub :data="brand" :value="3" type="brand"></filter-sub>-->
<Sort :config="sortConfig" :val="sort">
</Sort>
<List :data="productList"></List>
... ... @@ -19,7 +18,6 @@
const list = require('product/list.vue');
const drawer = require('product/drawer.vue');
const filter = require('product/filter.vue');
const filterSub = require('product/filter/filter-detail.vue');
Vue.use(lazyload);
Vue.use(infinitScroll);
... ... @@ -51,7 +49,6 @@
list,
sort,
filter,
filterSub,
drawer
},
methods: {
... ... @@ -76,9 +73,11 @@
page: nextPage
})
.done(res => {
self.page = res.data.page;
self.totalPage = res.data.pageTotal;
self.$set('productList', self.productList.concat(res.data.productList));
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('网络出错~');
... ...