Authored by 郭成尧

'店铺支持ID直接访问'

@@ -16,7 +16,8 @@ module.exports = { @@ -16,7 +16,8 @@ module.exports = {
16 res.render('shop/index', { 16 res.render('shop/index', {
17 module: 'product', 17 module: 'product',
18 page: 'shop', 18 page: 'shop',
19 - domain: req.params.domain 19 + domain: req.params.domain,
  20 + shopId: req.query.id
20 }); 21 });
21 }, 22 },
22 23
@@ -24,6 +25,7 @@ module.exports = { @@ -24,6 +25,7 @@ module.exports = {
24 getShopInfo: (req, res, next) => { 25 getShopInfo: (req, res, next) => {
25 shopModel.getShopData({ 26 shopModel.getShopData({
26 domain: req.query.domain, 27 domain: req.query.domain,
  28 + shopId: req.query.id,
27 uid: req.user.uid 29 uid: req.user.uid
28 }).then(result => { 30 }).then(result => {
29 res.json(result); 31 res.json(result);
@@ -39,7 +41,7 @@ module.exports = { @@ -39,7 +41,7 @@ module.exports = {
39 channel: req.query.channel || 'men', 41 channel: req.query.channel || 'men',
40 gender: req.query.gender || '1,2,3', 42 gender: req.query.gender || '1,2,3',
41 brand: req.query.brand, 43 brand: req.query.brand,
42 - shopId: req.query.shopId, 44 + shopId: req.query.id,
43 order: req.query.order || 's_t_desc', 45 order: req.query.order || 's_t_desc',
44 limit: req.query.limit || '60', 46 limit: req.query.limit || '60',
45 color: req.query.color, 47 color: req.query.color,
@@ -13,6 +13,76 @@ const _ = require('lodash'); @@ -13,6 +13,76 @@ const _ = require('lodash');
13 const prettyFilter = require(`${global.utils}/beautify/filters`); 13 const prettyFilter = require(`${global.utils}/beautify/filters`);
14 14
15 /** 15 /**
  16 + * 获取店铺数据
  17 + * @param params
  18 + * @returns {*|Promise.<TResult>}
  19 + */
  20 +const _getShopInfoData = (finalResult, params) => {
  21 + return shopApi.getShopInfoData({
  22 + shopId: params.shopId,
  23 + uid: params.uid
  24 + }).then(subResult => {
  25 +
  26 + if (subResult.data) {
  27 +
  28 + /* 取店铺的基本信息 */
  29 + Object.assign(finalResult, {
  30 + shopLogo: subResult.data.shop_logo,
  31 + shopName: subResult.data.shop_name,
  32 + shopIntro: subResult.data.shop_intro,
  33 + isFav: subResult.data.is_favorite === 'Y'
  34 + });
  35 +
  36 + /* 取资源位店铺背景图 */
  37 + return shopApi.getShopsDecoratorList({
  38 + shopId: params.shopId
  39 + }).then(thResult => {
  40 + if (thResult.data) {
  41 + _.forEach(thResult.data.list, value => {
  42 +
  43 + if (value.resource_name === 'shopTopBanner_app') {
  44 + Object.assign(finalResult, {
  45 + shopBg: JSON.parse(value.resource_data).shopSrc
  46 + });
  47 + }
  48 + });
  49 + }
  50 +
  51 + return finalResult;
  52 + });
  53 + }
  54 + return finalResult;
  55 + });
  56 +};
  57 +
  58 +/**
  59 + * 获取品牌店铺商品数据
  60 + * @param params
  61 + * @returns {*|Promise.<TResult>}
  62 + */
  63 +const _getGoodsList = params => {
  64 + let finalResult = {};
  65 +
  66 + return shopApi.getBrandShopGoodsOriginData(Object.assign(params, {
  67 + shopId: params.shopId
  68 + })).then(subResult => {
  69 + if (subResult.data) {
  70 + prettyFilter(subResult.data.filter);
  71 + finalResult = {
  72 + data: {
  73 + productList: processProductList(subResult.data.product_list, { gender: params.gender }),
  74 + filter: subResult.data.filter,
  75 + page: subResult.data.page,
  76 + pageTotal: subResult.data.page_total
  77 + },
  78 + code: 200
  79 + };
  80 + }
  81 + return camelCase(finalResult);
  82 + });
  83 +};
  84 +
  85 +/**
16 * 获取品牌店铺数据 86 * 获取品牌店铺数据
17 * @param params 87 * @param params
18 * @returns {*|Promise.<TResult>} 88 * @returns {*|Promise.<TResult>}
@@ -20,111 +90,70 @@ const prettyFilter = require(`${global.utils}/beautify/filters`); @@ -20,111 +90,70 @@ const prettyFilter = require(`${global.utils}/beautify/filters`);
20 const getShopData = params => { 90 const getShopData = params => {
21 let finalResult = {}; 91 let finalResult = {};
22 92
23 - return shopApi.getBrandInfoByDomain({  
24 - domain: params.domain  
25 - }).then(result => { 93 + // 如果有店铺 ID,直接取店铺信息
  94 + if (params.shopId) {
26 95
27 - if (result.data) { 96 + /* 是 BLK 的店铺 */
  97 + Object.assign(finalResult, {
  98 + isBlkShop: true,
  99 + shopId: params.shopId
  100 + });
28 101
29 - /* 品牌名称 */  
30 - Object.assign(finalResult, {  
31 - brandName: result.data.brand_name,  
32 - brandId: result.data.id  
33 - }); 102 + return _getShopInfoData(finalResult, params);
  103 + } else {
  104 + return shopApi.getBrandInfoByDomain({
  105 + domain: params.domain
  106 + }).then(result => {
34 107
35 - /* 品牌是否有店铺 */  
36 - if (result.data.shop_id) { 108 + if (result.data) {
37 109
38 - /* 是 BLK 的店铺 */ 110 + /* 品牌名称 */
39 Object.assign(finalResult, { 111 Object.assign(finalResult, {
40 - isBlkShop: true,  
41 - shopId: result.data.shop_id 112 + brandName: result.data.brand_name,
  113 + brandId: result.data.id
42 }); 114 });
43 115
44 - return shopApi.getShopInfoData({  
45 - shopId: result.data.shop_id,  
46 - uid: params.uid  
47 - }).then(subResult => {  
48 -  
49 - if (subResult.data) {  
50 -  
51 - /* 取店铺的基本信息 */  
52 - Object.assign(finalResult, {  
53 - shopLogo: subResult.data.shop_logo,  
54 - shopName: subResult.data.shop_name,  
55 - shopIntro: subResult.data.shop_intro,  
56 - isFav: subResult.data.is_favorite === 'Y'  
57 - });  
58 -  
59 - /* 取资源位店铺背景图 */  
60 - return shopApi.getShopsDecoratorList({  
61 - shopId: result.data.shop_id  
62 - }).then(thResult => {  
63 - if (thResult.data) {  
64 - _.forEach(thResult.data.list, value => {  
65 -  
66 - if (value.resource_name === 'shopTopBanner_app') {  
67 - Object.assign(finalResult, {  
68 - shopBg: JSON.parse(value.resource_data).shopSrc  
69 - });  
70 - }  
71 - });  
72 - }  
73 -  
74 - return finalResult;  
75 - });  
76 - }  
77 - return finalResult;  
78 - });  
79 - } else { 116 + /* 品牌是否有店铺 */
  117 + if (result.data.shop_id) {
80 118
81 - /* 不是 BLK 的店铺 */  
82 - Object.assign(finalResult, {  
83 - isBlkShop: false  
84 - }); 119 + /* 是 BLK 的店铺 */
  120 + Object.assign(finalResult, {
  121 + isBlkShop: true,
  122 + shopId: result.data.shop_id
  123 + });
  124 + return _getShopInfoData(finalResult, Object.assign(params, {shopId: result.data.shop_id}));
  125 + } else {
85 126
86 - logger.info('brand has no shop'); 127 + /* 不是 BLK 的店铺 */
  128 + Object.assign(finalResult, {
  129 + isBlkShop: false
  130 + });
  131 +
  132 + logger.info('brand has no shop');
  133 + }
  134 + return finalResult;
87 } 135 }
88 - return finalResult;  
89 - }  
90 136
91 - return finalResult;  
92 - }); 137 + return finalResult;
  138 + });
  139 + }
93 }; 140 };
94 141
95 /** 142 /**
96 - * 获取品牌店铺商品数据 143 + * 获取品牌店铺商品
97 * @param params 144 * @param params
98 * @returns {*|Promise.<TResult>} 145 * @returns {*|Promise.<TResult>}
99 */ 146 */
100 const getBrandShopGoodsData = params => { 147 const getBrandShopGoodsData = params => {
101 - let finalResult = {};  
102 -  
103 - return shopApi.getBrandInfoByDomain({  
104 - domain: params.domain  
105 - }).then(result => {  
106 - if (result.data) {  
107 - return shopApi.getBrandShopGoodsOriginData(Object.assign(params, {  
108 - brand: result.data.id,  
109 - shopId: result.data.shop_id  
110 - })).then(subResult => {  
111 - if (subResult.data) {  
112 - prettyFilter(subResult.data.filter);  
113 - finalResult = {  
114 - data: {  
115 - productList: processProductList(subResult.data.product_list, {gender: params.gender}),  
116 - filter: subResult.data.filter,  
117 - page: subResult.data.page,  
118 - pageTotal: subResult.data.page_total  
119 - },  
120 - code: 200  
121 - };  
122 - }  
123 - return camelCase(finalResult);  
124 - });  
125 - }  
126 - return camelCase(finalResult);  
127 - }); 148 + if (params.shopId) {
  149 + return _getGoodsList(params);
  150 + } else {
  151 + return shopApi.getBrandInfoByDomain({
  152 + domain: params.domain
  153 + }).then(result => {
  154 + return _getGoodsList(Object.assign(params, {shopId: result.data.shop_id}));
  155 + });
  156 + }
128 }; 157 };
129 158
130 /** 159 /**
@@ -36,8 +36,8 @@ router.get('/brand', shop.index); // 品牌 集合页 @@ -36,8 +36,8 @@ router.get('/brand', shop.index); // 品牌 集合页
36 router.get('/product/shop/info.json', shop.getShopInfo); // 店铺介绍 36 router.get('/product/shop/info.json', shop.getShopInfo); // 店铺介绍
37 router.get('/product/shop/goods.json', shop.getBrandShopGoods); // 店铺商品列表 37 router.get('/product/shop/goods.json', shop.getBrandShopGoods); // 店铺商品列表
38 router.post('/product/shop/collect.json', shop.collectShop); // 收藏品牌店铺 38 router.post('/product/shop/collect.json', shop.collectShop); // 收藏品牌店铺
39 -router.get('/product/shop/:domain/', shop.index); // 品牌店铺页  
40 -router.get('/product/shop/:domain/share', shop.shopShare); // 品牌店铺页 39 +router.get('/product/shop/:domain', shop.index); // 品牌店铺页
  40 +router.get('/product/shop/:domain/share', shop.shopShare); // 品牌店铺页分享
41 41
42 // 商品详情controller 42 // 商品详情controller
43 const detail = require(`${cRoot}/detail`); 43 const detail = require(`${cRoot}/detail`);
1 -<div id="shop" data-domain="{{domain}}"> 1 +<div id="shop" data-domain="{{domain}}" data-shopid = "{{shopId}}">
2 <shop-box></shop-box> 2 <shop-box></shop-box>
3 </div> 3 </div>
@@ -75,7 +75,8 @@ @@ -75,7 +75,8 @@
75 $.get({ 75 $.get({
76 url: '/product/shop/info.json', 76 url: '/product/shop/info.json',
77 data: { 77 data: {
78 - domain: $shop.data('domain') 78 + domain: $shop.data('domain'),
  79 + id: $shop.data('shopid') // 店铺 ID
79 } 80 }
80 }).done(result => { 81 }).done(result => {
81 if (result) { 82 if (result) {