Authored by shuaiguo

Merge branch 'refs/heads/develop'

1 phantomjs_cdnurl=http://npm.taobao.org/mirrors/phantomjs 1 phantomjs_cdnurl=http://npm.taobao.org/mirrors/phantomjs
  2 +sass_binary_site=https://npm.taobao.org/mirrors/node-sass/
2 registry=http://npm.yohops.com 3 registry=http://npm.yohops.com
  4 +package-lock=false
@@ -29,7 +29,21 @@ @@ -29,7 +29,21 @@
29 <br/> 29 <br/>
30 2、关于“Yoho!Buy有货” 30 2、关于“Yoho!Buy有货”
31 <br/> 31 <br/>
32 - &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;“Yoho!Buy有货”(www.yohobuy.com)——年轻人潮流购物中心,同样秉承YOHO!“年轻是种态度”的口号,Yoho!Buy有货专注于潮流趋势和受众的需要,凭借专业的买手团队和对潮流趋势敏锐的嗅觉,积极开拓符合年轻人喜爱的品牌和商品。销售包括国际知名、日韩港台流行、明星设计师、内地原创等等超过1400 个潮流品牌商品,满足18-35岁年轻群体的时尚个性化述求,涵盖男女服装、鞋帽、配件、童装及创意生活用品等。Yoho!Buy有货所销售的品牌均与品牌直接签订销售协议,保持货品与国际国内实体店铺同步,通过定制、限定发售、明星合作品牌等,并结合“逛”内容频道及社区互动引导消费。Yoho!Buy有货已成为年轻态群体热爱的潮流购物平台。 32 + &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;“Yoho!Buy 有货”( www.yohobuy.com )——年轻人潮流购物中心,同样秉承YOHO!“年轻是种态度”的口号,是依托YOHO!社区所开发的B2C网络商城,致力于打造中国最大的网络分销B2M商圈,由南京新与力文化传播有限公司在2009年投资创立,并于17年开始陆续开业4家线下店,打通了线上线下⼀体化运营能⼒。拥有超过1200家上游品牌供应商。通过更多元化的供应链解决办法,从纯B2C转型到B2C+C2C模式,以“新潮正”的定位最⼤化满⾜精准⽤户的购物需求。
  33 + <br/>
  34 + &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Yoho!Buy有货专注于潮流趋势和受众的需要,凭借专业的买手团队和对潮流趋势敏锐的嗅觉,积极开拓符合年轻人喜爱的品牌和商品。销售包括国际知名、日韩港台流行、明星设计师、内地原创等1200多个潮流品牌商品,满足主体为18-35岁年轻群体的时尚个性述求,涵盖男女服装、鞋帽、配件、童装及创意生活用品等。Yoho!Buy有货所销售的品牌均与品牌直接签订销售协议,保持货品与国际国内实体店铺同步,通过定制、限定发售、明星合作品牌等,并结合“逛”内容频道及“YO!社区”引导消费。
  35 + <br/>
  36 + &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;⽬前有货的注册会员中,50%集中于⼀⼆线及沿海城市。是具有⼀定消费⼒、品牌认知和潮流意识的群体。他们追求个性的表达,有⾃⼰热衷和喜欢的爱好以及属于⾃⼰的各种⼩圈⼦。这个群体构成了当前最具潜⼒也是未来最⼤的消费群体。
  37 + <br/>
  38 + &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;同时有货也是国际潮流品牌在中国最重要的合作伙伴,伴随有货发展成⻓的本地原创潮流品牌设计师也随着潮流⾏业的发展⽇趋成熟和形成规模。现有的1200多合作品牌中,国际100+,商业500+,国潮及原创400+,孵化品牌10+。
  39 + <br/>
  40 + &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有货旗下球鞋转售平台UFO飞碟好物,自2018年12月上线以来,已入住超过3000款球鞋和潮流单品,并致力于运用基于真人实物鉴定+区块链+RFID的鉴定核心技术,从收到包装开始,到拆包、鉴定、封装、发货的全流程进行录像,确保所有在其平台交易的货品所有鉴定步骤都有据可查,为球鞋玩家以及潮流爱好者提供开放式交易环节。
  41 + <br/>
  42 + &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有货在与国内原创潮流品牌、设计师以及海外品牌保持紧密合作关系和对⾏业的观察的基础之上,推出了“YOHOPE”品牌孵化项⽬,早期是以为有货平台供货为主,现在正在调整为孵化品牌为主。并将通过线上线下⼀体化运营,培育更多国潮品牌以及海外潮牌在中国的发展。
  43 + <br/>
  44 + &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;YOHO!不光通过自建丰富化线上线下一体化渠道,并且广用第三方渠道,与天猫、苏宁、淘宝、京东等进行合作,更大限度地传播优质内容。通过对供应链的管理,结合对潮流领域的洞察,运用多元化的合作方式,为Human made、Madness、SMG等众多新锐品牌进行全方位的管理和孵化。
  45 + <br/>
  46 + &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Yoho!Buy有货已成为年轻态群体热爱的潮流购物平台。
33 <br/> 47 <br/>
34 <br/> 48 <br/>
35 3、关于“mars - 新鲜好去处” 49 3、关于“mars - 新鲜好去处”
@@ -19,8 +19,21 @@ @@ -19,8 +19,21 @@
19 <p style="font-family:微软雅黑; text-align:left;"> 19 <p style="font-family:微软雅黑; text-align:left;">
20 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;“Yoho!Buy 有货”( 20 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;“Yoho!Buy 有货”(
21 <a style=" font:#000;" href="//www.yohobuy.com" target="_blank">www.yohobuy.com</a> 21 <a style=" font:#000;" href="//www.yohobuy.com" target="_blank">www.yohobuy.com</a>
22 - )——年轻人潮流购物中心,同样秉承YOHO!“年轻是种态度”的口号,Yoho!Buy有货专注于潮流趋势和受众的需要,凭借专业的买手团队和对潮流趋势敏锐的嗅觉,积极开拓符合年轻人喜爱的品牌和商品。销售包括国际知名、日韩港台流行、明星设计师、内地原创等等超过1400 个潮流品牌商品,满足18-35岁年轻群体的时尚个性化述求,涵盖男女服装、鞋帽、配件、童装及创意生活用品等。Yoho!Buy有货所销售的品牌均与品牌直接签订销售协议,保持货品与国际国内实体店铺同步,通过定制、限定发售、明星合作品牌等,并结合“逛”内容频道及社区互动引导消费。Yoho!Buy有货已成为年轻态群体热爱的潮流购物平台 22 + )——年轻人潮流购物中心,同样秉承YOHO!“年轻是种态度”的口号,是依托YOHO!社区所开发的B2C网络商城,致力于打造中国最大的网络分销B2M商圈,由南京新与力文化传播有限公司在2009年投资创立,并于17年开始陆续开业4家线下店,打通了线上线下⼀体化运营能⼒。拥有超过1200家上游品牌供应商。通过更多元化的供应链解决办法,从纯B2C转型到B2C+C2C模式,以“新潮正”的定位最⼤化满⾜精准⽤户的购物需求
23 <br> 23 <br>
  24 + &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Yoho!Buy有货专注于潮流趋势和受众的需要,凭借专业的买手团队和对潮流趋势敏锐的嗅觉,积极开拓符合年轻人喜爱的品牌和商品。销售包括国际知名、日韩港台流行、明星设计师、内地原创等1200多个潮流品牌商品,满足主体为18-35岁年轻群体的时尚个性述求,涵盖男女服装、鞋帽、配件、童装及创意生活用品等。Yoho!Buy有货所销售的品牌均与品牌直接签订销售协议,保持货品与国际国内实体店铺同步,通过定制、限定发售、明星合作品牌等,并结合“逛”内容频道及“YO!社区”引导消费。
  25 + <br>
  26 + &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;⽬前有货的注册会员中,50%集中于⼀⼆线及沿海城市。是具有⼀定消费⼒、品牌认知和潮流意识的群体。他们追求个性的表达,有⾃⼰热衷和喜欢的爱好以及属于⾃⼰的各种⼩圈⼦。这个群体构成了当前最具潜⼒也是未来最⼤的消费群体。
  27 + <br>
  28 + &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;同时有货也是国际潮流品牌在中国最重要的合作伙伴,伴随有货发展成⻓的本地原创潮流品牌设计师也随着潮流⾏业的发展⽇趋成熟和形成规模。现有的1200多合作品牌中,国际100+,商业500+,国潮及原创400+,孵化品牌10+。
  29 + <br>
  30 + &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有货旗下球鞋转售平台UFO飞碟好物,自2018年12月上线以来,已入住超过3000款球鞋和潮流单品,并致力于运用基于真人实物鉴定+区块链+RFID的鉴定核心技术,从收到包装开始,到拆包、鉴定、封装、发货的全流程进行录像,确保所有在其平台交易的货品所有鉴定步骤都有据可查,为球鞋玩家以及潮流爱好者提供开放式交易环节。
  31 + <br>
  32 + &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有货在与国内原创潮流品牌、设计师以及海外品牌保持紧密合作关系和对⾏业的观察的基础之上,推出了“YOHOPE”品牌孵化项⽬,早期是以为有货平台供货为主,现在正在调整为孵化品牌为主。并将通过线上线下⼀体化运营,培育更多国潮品牌以及海外潮牌在中国的发展。
  33 + <br>
  34 + &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;YOHO!不光通过自建丰富化线上线下一体化渠道,并且广用第三方渠道,与天猫、苏宁、淘宝、京东等进行合作,更大限度地传播优质内容。通过对供应链的管理,结合对潮流领域的洞察,运用多元化的合作方式,为Human made、Madness、SMG等众多新锐品牌进行全方位的管理和孵化。
  35 + <br>
  36 + &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Yoho!Buy有货已成为年轻态群体热爱的潮流购物平台。
24 </p> 37 </p>
25 <p> 38 <p>
26 <img src="//img11.static.yhbimg.com/evidenceImages/2017/07/11/16/01e66a43c7eff25fef57e5c9795474bddc.jpg" /> 39 <img src="//img11.static.yhbimg.com/evidenceImages/2017/07/11/16/01e66a43c7eff25fef57e5c9795474bddc.jpg" />
1 'use strict'; 1 'use strict';
2 2
3 -const request = require('request-promise');  
4 const fs = require('fs'); 3 const fs = require('fs');
5 const _ = require('lodash'); 4 const _ = require('lodash');
6 5
7 const utils = require('../models/utils'); 6 const utils = require('../models/utils');
  7 +const yohoApi = global.yoho.API;
  8 +
  9 +const AllowedBucket = {
  10 + sns: 'sns',
  11 + evidenceImages: 'evidenceImages'
  12 +};
8 13
9 const uploadImg = (req, res, next) => { 14 const uploadImg = (req, res, next) => {
10 let files = req.files && req.files.file || []; 15 let files = req.files && req.files.file || [];
@@ -16,7 +21,6 @@ const uploadImg = (req, res, next) => { @@ -16,7 +21,6 @@ const uploadImg = (req, res, next) => {
16 21
17 req.body.files = []; 22 req.body.files = [];
18 files.forEach(file => { 23 files.forEach(file => {
19 -  
20 let types = file.type.split('/'); 24 let types = file.type.split('/');
21 25
22 if (!types || types[0] !== 'image') { 26 if (!types || types[0] !== 'image') {
@@ -27,7 +31,6 @@ const uploadImg = (req, res, next) => { @@ -27,7 +31,6 @@ const uploadImg = (req, res, next) => {
27 errTip = '上传文件尺寸太大!'; 31 errTip = '上传文件尺寸太大!';
28 } 32 }
29 req.body.files.push(fs.createReadStream(file.path)); 33 req.body.files.push(fs.createReadStream(file.path));
30 - req.body.files.push(file.name);  
31 }); 34 });
32 35
33 if (errTip) { 36 if (errTip) {
@@ -36,24 +39,42 @@ const uploadImg = (req, res, next) => { @@ -36,24 +39,42 @@ const uploadImg = (req, res, next) => {
36 }); 39 });
37 } 40 }
38 41
39 - request({  
40 - method: 'post',  
41 - url: 'http://upload.static.yohobuy.com',  
42 - formData: {  
43 - fileData: req.body.files,  
44 - project: req.body.bucket  
45 - },  
46 - json: true  
47 - }).then(function(result) {  
48 -  
49 - if (result && result.code === 200) {  
50 - result.data = result.data || {};  
51 - result.data.images = _.map(_.get(result, 'data.imagesList'), (it) => {  
52 - return utils.getUploadImgAbsoluteUrl(it, req.body.bucket); 42 + const bucket = AllowedBucket[req.body.bucket];
  43 +
  44 + if (!bucket) {
  45 + return res.json({
  46 + code: 400,
  47 + message: '参数错误'
53 }); 48 });
54 } 49 }
55 50
56 - res.json(result); 51 + Promise.all(
  52 + req.body.files.map(f => {
  53 + return yohoApi.postFile('', {
  54 + bucket: req.body.bucket,
  55 + file: f,
  56 + uid: req.user.uid.toString(),
  57 + method: 'yoho.fileupload'
  58 + }).then(result => {
  59 + if (result.code !== 200) {
  60 + return Promise.reject(Error('上传出错'));
  61 + }
  62 +
  63 + return result;
  64 + });
  65 + })
  66 + ).then(result => {
  67 + const data = result.reduce((t, r) => {
  68 + t.images.push(utils.getUploadImgAbsoluteUrl(_.get(r, 'data'), req.body.bucket));
  69 + t.imagesList.push(_.get(r, 'data'));
  70 + return t;
  71 + }, { images: [], imagesList: [] });
  72 +
  73 + res.json({
  74 + code: 200,
  75 + data,
  76 + message: '上传成功'
  77 + });
57 }).catch(next); 78 }).catch(next);
58 }; 79 };
59 80
@@ -18,11 +18,12 @@ const erp2goods = require(`${cRoot}/erp2goods`); @@ -18,11 +18,12 @@ const erp2goods = require(`${cRoot}/erp2goods`);
18 const getBanner = require(`${cRoot}/getBanner`); 18 const getBanner = require(`${cRoot}/getBanner`);
19 const passport = require(`${cRoot}/passport`); 19 const passport = require(`${cRoot}/passport`);
20 const suggestFeedBack = require(`${cRoot}/suggestFeedBack`); 20 const suggestFeedBack = require(`${cRoot}/suggestFeedBack`);
  21 +const auth = require(`${global.middleware}/auth`);
21 22
22 router.get('/recentReview', rvCtrl.index); // 最近浏览 23 router.get('/recentReview', rvCtrl.index); // 最近浏览
23 router.post('/getRecommend', rvCtrl.getRecommend); // 为你优选 24 router.post('/getRecommend', rvCtrl.getRecommend); // 为你优选
24 25
25 -router.post('/upload/image', multipartMiddleware, uploadCtrl.uploadImg); 26 +router.post('/upload/image', auth, multipartMiddleware, uploadCtrl.uploadImg);
26 27
27 router.get('/erp2goods', erp2goods.find); 28 router.get('/erp2goods', erp2goods.find);
28 29
@@ -25,6 +25,10 @@ exports.index = (req, res, next) => { @@ -25,6 +25,10 @@ exports.index = (req, res, next) => {
25 _.isEmpty(req.query) ? null : req.query)); 25 _.isEmpty(req.query) ? null : req.query));
26 } 26 }
27 27
  28 + if (isNaN(+shopId)) {
  29 + return res.redirect(301, '/404');
  30 + }
  31 +
28 if (req.xhr && req.query._pjax && shopId) { 32 if (req.xhr && req.query._pjax && shopId) {
29 return req.ctx(shopModel).getShopGoodsData(shopId, req.yoho.channel, req.query).then(result => { 33 return req.ctx(shopModel).getShopGoodsData(shopId, req.yoho.channel, req.query).then(result => {
30 Object.assign(result, { 34 Object.assign(result, {
@@ -88,7 +88,7 @@ module.exports = { @@ -88,7 +88,7 @@ module.exports = {
88 infoFile: { 88 infoFile: {
89 name: 'info', 89 name: 'info',
90 level: 'info', 90 level: 'info',
91 - filename: '/Data/logs/yohobuy-node/info/info.log', 91 + filename: './Data/logs/yohobuy-node/info/info.log',
92 maxFiles: 1, 92 maxFiles: 1,
93 tailable: true, 93 tailable: true,
94 maxsize: Math.pow(1024, 3), 94 maxsize: Math.pow(1024, 3),
@@ -100,7 +100,7 @@ module.exports = { @@ -100,7 +100,7 @@ module.exports = {
100 errorFile: { 100 errorFile: {
101 name: 'error', 101 name: 'error',
102 level: 'error', 102 level: 'error',
103 - filename: '/Data/logs/yohobuy-node/error/error.log', 103 + filename: './Data/logs/yohobuy-node/error/error.log',
104 maxFiles: 1, 104 maxFiles: 1,
105 tailable: true, 105 tailable: true,
106 maxsize: Math.pow(1024, 3), 106 maxsize: Math.pow(1024, 3),
1 { 1 {
2 "name": "yohobuy-node", 2 "name": "yohobuy-node",
3 - "version": "6.9.11", 3 + "version": "6.9.13",
4 "private": true, 4 "private": true,
5 "description": "A New Yohobuy Project With Express", 5 "description": "A New Yohobuy Project With Express",
6 "repository": { 6 "repository": {
@@ -57,10 +57,10 @@ @@ -57,10 +57,10 @@
57 "sitemap": "^1.12.1", 57 "sitemap": "^1.12.1",
58 "urlencode": "^1.1.0", 58 "urlencode": "^1.1.0",
59 "uuid": "^2.0.2", 59 "uuid": "^2.0.2",
  60 + "yo-cli": "=2.1.13",
60 "yoho-express-session": "^2.0.0", 61 "yoho-express-session": "^2.0.0",
61 - "yoho-node-lib": "=0.6.40",  
62 - "yoho-zookeeper": "^1.0.10",  
63 - "yo-cli": "=1.0.7" 62 + "yoho-node-lib": "^0.6.46",
  63 + "yoho-zookeeper": "^1.0.10"
64 }, 64 },
65 "devDependencies": { 65 "devDependencies": {
66 "autoprefixer": "^8.3.0", 66 "autoprefixer": "^8.3.0",
@@ -103,8 +103,6 @@ @@ -103,8 +103,6 @@
103 "stylelint": "^9.2.0", 103 "stylelint": "^9.2.0",
104 "stylelint-config-yoho": "1.3.0", 104 "stylelint-config-yoho": "1.3.0",
105 "stylelint-formatter-table": "^1.0.3", 105 "stylelint-formatter-table": "^1.0.3",
106 - "webpack": "^4.6.0",  
107 - "webpack-cli": "^2.0.15",  
108 "webpack-dev-server": "^3.1.4", 106 "webpack-dev-server": "^3.1.4",
109 "yoho-eventproxy": "^0.3.6", 107 "yoho-eventproxy": "^0.3.6",
110 "yoho-handlebars": "^4.0.6", 108 "yoho-handlebars": "^4.0.6",
@@ -35,7 +35,8 @@ _.mergeWith(baseConfig, { @@ -35,7 +35,8 @@ _.mergeWith(baseConfig, {
35 }, 35 },
36 headers: { 36 headers: {
37 'Access-Control-Allow-Origin': '*' 37 'Access-Control-Allow-Origin': '*'
38 - } 38 + },
  39 + disableHostCheck: true
39 }, 40 },
40 plugins: [ 41 plugins: [
41 new ExtractTextPlugin('[name].css'), 42 new ExtractTextPlugin('[name].css'),
  1 +@import "../variables";
1 @import "../channel/index"; 2 @import "../channel/index";
2 @import "activity"; 3 @import "activity";
1 @charset "utf-8"; 1 @charset "utf-8";
2 2
3 /* 公共 */ 3 /* 公共 */
  4 +@import "variables";
4 @import "common/index"; 5 @import "common/index";
5 @import "plugin/index"; 6 @import "plugin/index";
6 @import "common/dialog"; 7 @import "common/dialog";
7 @import "pager"; 8 @import "pager";
8 @import "path-nav"; 9 @import "path-nav";
9 @import "share"; 10 @import "share";
10 -@import "variables";  
11 -  
1 -@import "../channel/index" 1 +@import "../variables";
  2 +@import "../channel/index";
  1 +@import "../variables";
1 @import "order-ensure"; 2 @import "order-ensure";
2 @import "easypay"; 3 @import "easypay";
3 @import "cart"; 4 @import "cart";
4 @import "goods-detail"; 5 @import "goods-detail";
5 @import "cart-togetherGoods"; 6 @import "cart-togetherGoods";
6 -@import "../variables";  
  1 +@import "../variables";
1 @import "base"; 2 @import "base";
2 @import "index-pliffy"; 3 @import "index-pliffy";
3 @import "min-index"; 4 @import "min-index";
4 @import "brand"; 5 @import "brand";
5 @import "coupon"; 6 @import "coupon";
6 -@import "../variables";  
  1 +@import "../variables";
1 @import "base"; 2 @import "base";
2 @import "default"; 3 @import "default";
3 @import "order-block"; 4 @import "order-block";
@@ -19,7 +20,6 @@ @@ -19,7 +20,6 @@
19 @import "coupons"; 20 @import "coupons";
20 @import "favorite"; 21 @import "favorite";
21 @import "user-info"; 22 @import "user-info";
22 -@import "../variables";  
23 @import "returns-detail"; 23 @import "returns-detail";
24 @import "returns-save"; 24 @import "returns-save";
25 @import "me-gift"; 25 @import "me-gift";
  1 +@import "../variables";
1 @import "base"; 2 @import "base";
2 @import "login"; 3 @import "login";
3 @import "register"; 4 @import "register";
@@ -6,4 +7,3 @@ @@ -6,4 +7,3 @@
6 @import "relate"; 7 @import "relate";
7 @import "third"; 8 @import "third";
8 @import "_bind-tip.css"; 9 @import "_bind-tip.css";
9 -@import "../variables";  
  1 +@import "../variables";
1 @import "search"; 2 @import "search";
2 @import "filter-box"; 3 @import "filter-box";
3 @import "sort-pager"; 4 @import "sort-pager";
@@ -15,7 +16,6 @@ @@ -15,7 +16,6 @@
15 @import "top-coupon"; 16 @import "top-coupon";
16 @import "new-arrive"; 17 @import "new-arrive";
17 @import "good-slide"; 18 @import "good-slide";
18 -@import "../variables";  
19 @import "seo/index"; 19 @import "seo/index";
20 20
21 .product-page { 21 .product-page {
This diff could not be displayed because it is too large.