diff --git a/apps/product/controllers/search.js b/apps/product/controllers/search.js index 853f425..9fa6014 100644 --- a/apps/product/controllers/search.js +++ b/apps/product/controllers/search.js @@ -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); diff --git a/apps/product/router.js b/apps/product/router.js index e705c48..4e5d501 100644 --- a/apps/product/router.js +++ b/apps/product/router.js @@ -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 diff --git a/apps/product/views/action/filter-sub.hbs b/apps/product/views/action/filter-sub.hbs new file mode 100644 index 0000000..c21342f --- /dev/null +++ b/apps/product/views/action/filter-sub.hbs @@ -0,0 +1,4 @@ +{{! 筛选的 二级菜单}} +<div id="filter-sub"> + <filter-sub :data="data" :val="val" type="color"><filter-sub> +</div> \ No newline at end of file diff --git a/public/js/product/filter-sub.page.js b/public/js/product/filter-sub.page.js new file mode 100644 index 0000000..6d7b71e --- /dev/null +++ b/public/js/product/filter-sub.page.js @@ -0,0 +1,29 @@ +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 + } +}); + + diff --git a/public/vue/product/filter/filter-detail.vue b/public/vue/product/filter/filter-sub.vue index 3f63cd8..59965ef 100644 --- a/public/vue/product/filter/filter-detail.vue +++ b/public/vue/product/filter/filter-sub.vue @@ -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> diff --git a/public/vue/product/filter/normal.vue b/public/vue/product/filter/normal.vue index 080abeb..9aa0330 100644 --- a/public/vue/product/filter/normal.vue +++ b/public/vue/product/filter/normal.vue @@ -1,6 +1,6 @@ <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; } } }; diff --git a/public/vue/product/index.vue b/public/vue/product/index.vue deleted file mode 100644 index e69de29..0000000 --- a/public/vue/product/index.vue +++ /dev/null diff --git a/public/vue/product/list.vue b/public/vue/product/list.vue index 5b51de8..d2c2acd 100644 --- a/public/vue/product/list.vue +++ b/public/vue/product/list.vue @@ -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: { diff --git a/public/vue/product/search.vue b/public/vue/product/search.vue index 64e6088..3efa01f 100644 --- a/public/vue/product/search.vue +++ b/public/vue/product/search.vue @@ -1,6 +1,5 @@ <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('网络出错~');