diff --git a/apps/passport/auth.js b/apps/passport/auth.js index 80a024d..1528982 100644 --- a/apps/passport/auth.js +++ b/apps/passport/auth.js @@ -52,12 +52,6 @@ passport.use('local', new LocalStrategy({ return done({message: '登录账号格式错误'}, null); } - let expire = req.cookies['LE' + md5('_LOGIN_EXPIRE')]; - - if (_.isEmpty(expire) || expire < (new Date()).getTime() / 1000) { - return done({message: '页面停留时间过长,请刷新页面'}, null); - } - let verifyCode = req.body.captcha; if (verifyCode && verifyCode !== req.session.captcha) { diff --git a/apps/passport/controllers/login.js b/apps/passport/controllers/login.js index fcabf0d..bc8780c 100644 --- a/apps/passport/controllers/login.js +++ b/apps/passport/controllers/login.js @@ -102,14 +102,6 @@ const common = { const local = { loginPage: (req, res) => { - // 先清除cookie - res.clearCookie('LE' + md5('_LOGIN_EXPIRE'), { - domain: 'yohobuy.com' - }); - - // 设置登录有效时间30分钟, 防机器刷,cache不稳定,改为cookie - res.cookie('LE' + md5('_LOGIN_EXPIRE'), (new Date()).getTime() / 1000 + 1800); - // 清除cookie res.clearCookie('_UID', { domain: 'yohobuy.com' diff --git a/apps/product/controllers/detail.js b/apps/product/controllers/detail.js index 6edbdd0..2a99173 100644 --- a/apps/product/controllers/detail.js +++ b/apps/product/controllers/detail.js @@ -14,7 +14,6 @@ const detailHelper = require(`${mRoot}/detail-helper`); const Actions = require('./lib/actions'); const YohoAction = require('./lib/yoho-action'); const moment = require('moment'); -const camelCase = global.yoho.camelCase; const DEFAULT_AVATAR_ICO = 'http://static.yohobuy.com/images/v3/boy.jpg'; const _ = require('lodash'); @@ -94,7 +93,7 @@ class CommentAction extends YohoAction { this.response.json({ code: result.code, - data: camelCase(_.get(pageResponse, 'list', [])).map((item)=> { + data: _.get(pageResponse, 'list', []).map((item)=> { return { avatar: _.get(item, 'userInfo.headIco', '') ? @@ -102,8 +101,8 @@ class CommentAction extends YohoAction { DEFAULT_AVATAR_ICO, userName: _.get(item, 'userInfo.nickName', ''), date: moment(item.createTime, 'X').format('YYYY-MM-DD HH:mm:ss'), - color: _.get(item, 'goods.colorName', ''), - size: _.get(item, 'goods.sizeName', ''), + color: _.get(item, 'goods.color_name', ''), + size: _.get(item, 'goods.size_name', ''), comment: item.content, total: pageResponse.totalCount }; diff --git a/apps/product/controllers/outlets.js b/apps/product/controllers/outlets.js index 58e72cc..4ec9b1a 100644 --- a/apps/product/controllers/outlets.js +++ b/apps/product/controllers/outlets.js @@ -17,18 +17,14 @@ const _ = require('lodash'); * @return {[type]} [description] */ exports.index = (req, res, next) => { - let resData = { - module: 'product', - page: 'outlets' - }; - let channel = req.query.channel || req.cookies._Channel || 'otltIdxDflt'; - outlets.getOutletsIndexData(req.query, channel).then(result => { - Object.assign(resData, result); - res.render('outlets/index', resData); + outlets.getOutletsIndexData(req.query, channel).then((result) => { + res.render('outlets/index', Object.assign({ + module: 'product', + page: 'outlets' + }, result)); }).catch(next); - }; /** @@ -38,14 +34,13 @@ exports.index = (req, res, next) => { * @return {[type]} [description] */ exports.channel = (req, res, next) => { - let resData = { - module: 'product', - page: 'outlets' - }; let channel = req.params.channel || req.query.channel || req.cookies._Channel || 'boys'; - outlets.getOutletsChannelData(req.query, channel).then(result => { - res.render('outlets/channel', Object.assign(resData, result)); + outlets.getOutletsChannelData(req.query, channel).then((result) => { + res.render('outlets/channel', Object.assign({ + module: 'product', + page: 'outlets' + }, result)); }).catch(next); }; @@ -58,10 +53,6 @@ exports.channel = (req, res, next) => { exports.special = (req, res, next) => { let params = req.query; let channel = req.query.channel || req.cookies._Channel || 'boys'; - let resData = { - module: 'product', - page: 'outlets' - }; // 判断活动id是否合法 if (!params.id || !+params.id || !_.isNumber(+params.id)) { @@ -69,7 +60,10 @@ exports.special = (req, res, next) => { } outlets.getOutletsSpecialData(params, channel).then(result => { - res.render('outlets/special', Object.assign(resData, result)); + res.render('outlets/special', Object.assign({ + module: 'product', + page: 'outlets' + }, result)); }).catch(next); }; @@ -81,18 +75,15 @@ exports.special = (req, res, next) => { */ exports.list = (req, res, next) => { let params = req.query; - let channel = req.query.channel || req.cookies._Channel || 'boys'; params.uid = req.user.uid || 0; - let responseData = { - module: 'product', - page: 'outlets' - }; - outlets.getOutletsCategoryData(params, channel).then((result) => { - res.render('sale/other', Object.assign(responseData, result)); + res.render('sale/other', Object.assign({ + module: 'product', + page: 'outlets' + }, result)); }).catch(next); }; diff --git a/apps/product/controllers/sale.js b/apps/product/controllers/sale.js index c114910..0beb185 100644 --- a/apps/product/controllers/sale.js +++ b/apps/product/controllers/sale.js @@ -18,20 +18,16 @@ const sale = require(`${mRoot}/sale`); // sale 页 model exports.index = (req, res, next) => { let channel = req.query.channel || req.cookies._Channel || 'boys'; - let responseData = { - module: 'product', - page: 'sale' - }; - // 真实数据输出 sale.getSaleIndexData(channel).then(result => { - responseData.result = result; - if (result) { - responseData.headerData = result.headerData; - } - res.render('sale/index', responseData); + res.render('sale/index', Object.assign({ + module: 'product', + page: 'sale' + }, { + result: result, + headerData: result.headerData + })); }).catch(next); - }; /** @@ -76,17 +72,14 @@ exports.vip = (req, res, next) => { params.uid = req.user.uid || 0; - let responseData = { - module: 'product', - page: 'sale' - }; - sale.getSaleOthersData(params, channel).then((result) => { - responseData.saleList = result; - if (result) { - responseData.headerData = result.headerData; - } - res.render('sale/other', responseData); + res.render('sale/other', Object.assign({ + module: 'product', + page: 'sale' + }, { + saleList: result, + headerData: result.headerData + })); }).catch(next); }; @@ -104,17 +97,14 @@ exports.newSale = (req, res, next) => { let channel = req.query.channel || req.cookies._Channel || 'boys'; - let responseData = { - module: 'product', - page: 'sale' - }; - sale.getSaleOthersData(params, channel).then((result) => { - responseData.saleList = result; - if (result) { - responseData.headerData = result.headerData; - } - res.render('sale/other', responseData); + res.render('sale/other', Object.assign({ + module: 'product', + page: 'sale' + }, { + saleList: result, + headerData: result.headerData + })); }).catch(next); }; @@ -176,7 +166,7 @@ exports.getGoodsList = (req, res, next) => { params.uid = req.user.uid || 0; - return sale.getSaleGoodsData(params).then(result => { + sale.getSaleGoodsData(params).then(result => { let responseData = {}; responseData.footerTop = false; diff --git a/apps/product/models/detail-service.js b/apps/product/models/detail-service.js index b23e3f5..6206abd 100644 --- a/apps/product/models/detail-service.js +++ b/apps/product/models/detail-service.js @@ -896,8 +896,6 @@ const _sizeInfoBoSort = (sizeInfoBo) => { return {}; } - // TODO: 这里的排序代码很乱 - _.get(sizeInfoBo, 'sizeBoList', []).forEach((sizeBoList, sizek)=> { let sortAttr = {}; diff --git a/apps/product/models/outlets-handler.js b/apps/product/models/outlets-handler.js index 224e4ed..39e7c21 100644 --- a/apps/product/models/outlets-handler.js +++ b/apps/product/models/outlets-handler.js @@ -8,7 +8,6 @@ const utils = '../../../utils'; const helpers = global.yoho.helpers; const _ = require('lodash'); -const camelCase = global.yoho.camelCase; const productProcess = require(`${utils}/product-process`); const url = require('url'); const queryString = require('querystring'); @@ -110,15 +109,14 @@ const categoryNavigation = (data, params) => { * @return {[array]} */ exports.processFloor = (list, params) => { - const formatData = []; + const formatData = {}; let floorData; list = list || []; - list = camelCase(list); // 格式化数据 _.forEach(list, (floor) => { - switch (floor.templateName) { + switch (floor.template_name) { case 'NL2R': floorData = {topBanner: floor.data}; break; diff --git a/apps/product/models/sale.js b/apps/product/models/sale.js index fd2b52c..9eb2eb1 100644 --- a/apps/product/models/sale.js +++ b/apps/product/models/sale.js @@ -6,9 +6,9 @@ */ 'use strict'; -const logger = global.yoho.logger; -const camelCase = global.yoho.camelCase; +const utils = '../../../utils'; const api = global.yoho.API; +const Promise = require('bluebird'); const saleApi = require('./sale-api'); const searchApi = require('./search-api'); const publicHandler = require('./public-handler'); @@ -75,37 +75,31 @@ exports.getSaleGoodsData = (params) => { delete finalResult.goods[key].tags.isSale;// 屏蔽 sale 标签 delete finalResult.goods[key].discount; // 屏蔽折扣信息 }); - } else { - logger.error('search sale api code no 200'); } // 处理 VIP 商品数据 if (result[1].code === 200) { - let userInfo = result[1].data.vip_info ? camelCase(result[1].data.vip_info) : {}; - - if (_.isEmpty(userInfo)) { - logger.info('no user info'); - } + let vipInfo = _.get(result, '[1].data.vip_info', {}); if (params.saleType === '2') { _.forEach(finalResult.goods, (value, key) => { - switch (userInfo.curLevel) { + switch (vipInfo.cur_level) { case '1': - finalResult.goods[key].salesPrice = value.vip1Price; + finalResult.goods[key].sales_price = value.vip1_price; finalResult.goods[key].vip1 = true; break; case '2': - finalResult.goods[key].salesPrice = value.vip2Price; + finalResult.goods[key].sales_price = value.vip2_price; finalResult.goods[key].vip2 = true; break; case '3': - finalResult.goods[key].salesPrice = value.vip3Price; + finalResult.goods[key].sales_price = value.vip3_price; finalResult.goods[key].vip3 = true; break; default: finalResult.goods[key].vip = true; - delete finalResult.goods[key].salesPrice; + delete finalResult.goods[key].sales_price; break; } @@ -168,16 +162,12 @@ exports.getSaleIndexData = (channel) => { if (result[1].data.length > 0) { finalResult.brandSale = saleHandler.handleSaleActivityData(result[1].data, channel); } - } else { - logger.error('discount activities api code no 200'); } // 资源位数据处理 if (result[2].code === 200 && !_.isEmpty(result[2].data)) { finalResult.topBanner = saleHandler.handleSaleBannerData(result[2].data); finalResult.activityEnter = saleHandler.handleSaleBannerSmallData(result[2].data); - } else { - logger.error('content code api code no 200 or no data'); } // 分类处理 @@ -192,21 +182,21 @@ exports.getSaleIndexData = (channel) => { {forVip: true} ) ); - } else { - logger.error('index vip category api code no 200'); } // 断码区分类处理 if (result[4].code === 200) { let breakingSizeSort = saleHandler.handleSaleBreakingSizeData(result[4].data); - return api.all([saleApi.getSaleGoodsList({ - channel: channel, - saleType: '5', // app 与 pc 有冲突,为 PC 加一个 5 的选项 - limit: '1', - breakSize: breakingSizeSort.breakSize, - breakSort: breakingSizeSort.breakSort - })]).then(subResult => { + return api.all([ + saleApi.getSaleGoodsList({ + channel: channel, + saleType: '5', // app 与 pc 有冲突,为 PC 加一个 5 的选项 + limit: '1', + breakSize: breakingSizeSort.breakSize, + breakSort: breakingSizeSort.breakSort + }) + ]).then(subResult => { if (subResult[0].code === 200) { finalResult.saleCategory.push( saleHandler.handleSaleCategoryData( @@ -224,14 +214,10 @@ exports.getSaleIndexData = (channel) => { finalResult.saleCategory.push( saleHandler.handleSaleCategoryData(result[5].data.filter.group_sort, '3', channel) ); - } else { - logger.error('newSale category api code no 200'); } return finalResult; }); - } else { - logger.error('breakYards category api code no 200'); } return finalResult; }); @@ -275,8 +261,6 @@ exports.getSaleOthersData = (params, channel) => { if (!_.isEmpty(result[1].data.filter)) { // 顶部筛选条件 finalResult.filters = publicHandler.handleSaleFilterData(result[1].data.filter, params); - } else { - logger.error('data filter is empty'); } // 处理排序数据 @@ -291,12 +275,10 @@ exports.getSaleOthersData = (params, channel) => { }; _.forEach(finalResult.goods, (value, key) => { - delete finalResult.goods[key].tags.isNew; // 屏蔽 new 标签 - delete finalResult.goods[key].tags.isSale;// 屏蔽 sale 标签 + delete finalResult.goods[key].tags.is_new; // 屏蔽 new 标签 + delete finalResult.goods[key].tags.is_sale;// 屏蔽 sale 标签 delete finalResult.goods[key].discount; // 屏蔽折扣信息 }); - } else { - logger.error('goods list api code no 200'); } // 获取焦点图数据 @@ -307,8 +289,6 @@ exports.getSaleOthersData = (params, channel) => { delete finalResult.topBanner.list[key].href; }); } - } else { - logger.error('content code api code no 200'); } // 获取分类筛选数据 @@ -317,46 +297,36 @@ exports.getSaleOthersData = (params, channel) => { // 获取左侧类目数据 finalResult.leftContent = publicHandler.handleSaleSortData(result[3].data.filter.group_sort, params); - } else { - logger.error('left content category api code no 200'); } if (!_.isEmpty(result[4])) { // 处理 VIP 商品数据 if (result[4].code === 200 && parseInt(params.saleType, 10) === 2) { - let userInfo = result[4].data.vip_info ? camelCase(result[4].data.vip_info) : {}; - - if (_.isEmpty(userInfo)) { - logger.info('no user info'); - } + let vipInfo = _.get(result, '[4].data.vip_info', {}); _.forEach(finalResult.goods, (value, key) => { - switch (userInfo.curLevel) { + switch (vipInfo.cur_level) { case '1': - finalResult.goods[key].salesPrice = value.vip1Price; + finalResult.goods[key].sales_price = value.vip1_price; finalResult.goods[key].vip1 = true; break; case '2': - finalResult.goods[key].salesPrice = value.vip2Price; + finalResult.goods[key].sales_price = value.vip2_price; finalResult.goods[key].vip2 = true; break; case '3': - finalResult.goods[key].salesPrice = value.vip3Price; + finalResult.goods[key].sales_price = value.vip3_price; finalResult.goods[key].vip3 = true; break; default: finalResult.goods[key].vip = true; - delete finalResult.goods[key].salesPrice; + delete finalResult.goods[key].sales_price; break; } }); - } else { - logger.error('user api code no 200 or no vip category'); } - } else { - logger.info('no user info get from api'); } return finalResult; @@ -386,13 +356,15 @@ exports.getSaleDiscountData = (params, channel) => { } ] }; - } else { - logger.error('discount activity data[0] web_url empty'); } } return api.all([ - saleApi.getSaleGoodsList({channel: channel, saleType: '3', limit: '1', - productPool: result[1].data[0].product_pool}), + saleApi.getSaleGoodsList({ + channel: channel, + saleType: '3', + limit: '1', + productPool: result[1].data[0].product_pool + }), saleApi.getSaleGoodsList(Object.assign(params, {productPool: result[1].data[0].product_pool})) ]).then(subResult => { @@ -406,8 +378,6 @@ exports.getSaleDiscountData = (params, channel) => { opts: publicHandler.handleSaleOptsData(params, subResult[0].data.total) } }); - } else { - logger.error('category api no 200'); } @@ -416,18 +386,14 @@ exports.getSaleDiscountData = (params, channel) => { finalResult.saleList.goods = productProcess.processProductList(subResult[1].data.product_list); finalResult.saleList.totalCount = subResult[1].data.total; _.forEach(finalResult.saleList.goods, (value, key) => { - delete finalResult.saleList.goods[key].tags.isNew; // 屏蔽 new 标签 - delete finalResult.saleList.goods[key].tags.isSale;// 屏蔽 sale 标签 + delete finalResult.saleList.goods[key].tags.is_new; // 屏蔽 new 标签 + delete finalResult.saleList.goods[key].tags.is_sale;// 屏蔽 sale 标签 delete finalResult.saleList.goods[key].discount; // 屏蔽折扣信息 }); - } else { - logger.error('discount goods list api code no 200'); } return finalResult; }); - } else { - logger.error('discount activity api code no 200'); } return finalResult; }); @@ -453,8 +419,6 @@ exports.getSalebreakingYardsData = (params, channel) => { _.forEach(finalResult.topBanner.list, (value, key) => { delete finalResult.topBanner.list[key].href; }); - } else { - logger.error('content code api code no 200'); } // 断码区产品筛选需要断码区尺码数据,改为串行处理 @@ -485,8 +449,6 @@ exports.getSalebreakingYardsData = (params, channel) => { if (subResult[0].code === 200) { finalResult.leftContent = publicHandler.handleSaleSortData(subResult[0].data.filter.group_sort, params); - } else { - logger.error('breakYards left content api code no 200'); } // 处理商品数据 @@ -511,17 +473,15 @@ exports.getSalebreakingYardsData = (params, channel) => { }; _.forEach(finalResult.goods, (value, key) => { - delete finalResult.goods[key].tags.isNew; // 屏蔽 new 标签 - delete finalResult.goods[key].tags.isSale;// 屏蔽 sale 标签 + delete finalResult.goods[key].tags.is_new; // 屏蔽 new 标签 + delete finalResult.goods[key].tags.is_sale;// 屏蔽 sale 标签 delete finalResult.goods[key].discount; // 屏蔽折扣信息 }); - } else { - logger.error('breakYards goods list code no 200'); } return finalResult; }); } else { - logger.error('breakYards size api code no 200'); + return Promise.reject(); } }); }; diff --git a/apps/product/models/students-handler.js b/apps/product/models/students-handler.js index ecff032..d60b70d 100644 --- a/apps/product/models/students-handler.js +++ b/apps/product/models/students-handler.js @@ -35,7 +35,7 @@ const getCoupon = (data) => { * @params data array * @return Object */ -const pad = (num, n) =>{ +const pad = (num, n) => { let len = num.toString().length; while (len < n) { @@ -110,9 +110,9 @@ exports.stuProducts = (data) => { _.forEach(data, (value, key) => { delete data[key].discount; - data[key].marketPrice = data[key].salesPrice; - delete data[key].salesPrice; - if (value.studentPrice) { + data[key].market_price = data[key].sales_price; + delete data[key].sales_price; + if (value.student_price) { Object.assign(data[key], {forStu: true}); } @@ -122,7 +122,7 @@ exports.stuProducts = (data) => { exports.stuVerify = (result) => { let data = {}; - + if (result.code === 200) { data.isError = false; data = result.data; diff --git a/apps/product/models/students.js b/apps/product/models/students.js index de3f0da..e563e2d 100644 --- a/apps/product/models/students.js +++ b/apps/product/models/students.js @@ -6,10 +6,6 @@ 'use strict'; -// const utils = '../../../utils'; - -// const logger = global.yoho.logger; -// const camelCase = global.yoho.camelCase; const api = global.yoho.API; const queryString = require('querystring'); const _ = require('lodash'); @@ -59,8 +55,12 @@ exports.getStudentsData = (channel, req) => { module: 'product', page: 'students', realData: { - sortItem: [{title: '学生权益介绍', href: 'stu-rights'}, {title: '我要验证身份', href: 'stu-identity'}, - {title: '学生热门单品', href: 'stu-good'}, {title: '更多活动推荐', href: 'stu-activity'}], + sortItem: [ + {title: '学生权益介绍', href: 'stu-rights'}, + {title: '我要验证身份', href: 'stu-identity'}, + {title: '学生热门单品', href: 'stu-good'}, + {title: '更多活动推荐', href: 'stu-activity'} + ], identityItem: { stuNum: [] } @@ -97,33 +97,21 @@ exports.getStudentsData = (channel, req) => { * 获取学校地区数据 * @return Object 接口数据 */ -exports.getSchoolArea = () => { - return studentsApi.getArea().then(result => { - return result; - }); -}; +exports.getSchoolArea = studentsApi.getArea; /** * 根据地区码查询学校列表 * @params areaCode int 地区码 * @return Object 接口数据 */ -exports.getSchoolList = (areaCode) => { - return studentsApi.getSchool(areaCode).then(result => { - return result; - }); -}; +exports.getSchoolList = studentsApi.getSchool; /** * 学历层次 * @params areaCode int 地区码 * @return Object 接口数据 */ -exports.getEduLevel = () => { - return studentsApi.getEduLevelList().then(result => { - return result; - }); -}; +exports.getEduLevel = studentsApi.getEduLevelList; /** * 身份验证 @@ -131,13 +119,13 @@ exports.getEduLevel = () => { * @return Object 接口数据 */ exports.verifyIdentity = (uid, params) => { - let pageUrl = helpers.urlFormat('/product/students?') + - queryString.stringify({collegeName: params.collegeName, - educationDegree: params.educationDegree, enrollmentYear: params.enrollmentYear}) + '&'; + let pageUrl = helpers.urlFormat('/product/students', { + collegeName: params.collegeName, + educationDegree: params.educationDegree, + enrollmentYear: params.enrollmentYear + }) + '&'; - return studentsApi.verifyIdentity(uid, params.certNo, params.name, pageUrl).then(result => { - return result; - }); + return studentsApi.verifyIdentity(uid, params.certNo, params.name, pageUrl); }; /** @@ -146,10 +134,7 @@ exports.verifyIdentity = (uid, params) => { * @return Object 接口数据 */ exports.verifyStudents = (params) => { - return studentsApi.verifyStudent(params.uid, params.collegeName, params.educationDegree, params.enrollmentYear). - then(result => { - return result; - }); + return studentsApi.verifyStudent(params.uid, params.collegeName, params.educationDegree, params.enrollmentYear); }; /** @@ -158,24 +143,12 @@ exports.verifyStudents = (params) => { * @return */ exports.userAcquireStatus = (uid, couponIds) => { - let ids = ''; + let ids = couponIds.map(coupon => crypto.decrypt(null, coupon)).join(','); - for (let i = 0; i < couponIds.length; i++) { - if (i === couponIds.length - 1) { - ids += crypto.decrypt('yoho9646abcdefgh', couponIds[i]); - } else { - ids += crypto.decrypt('yoho9646abcdefgh', couponIds[i]) + ','; - } - } - - return studentsApi.userAcquireStatus(uid, ids). - then(result => { + return studentsApi.userAcquireStatus(uid, ids).then(result => { if (result.code === 200) { _.forEach(result.data, (value) => { - let couponId = value.couponId.toString(), - cryptoId = crypto.encryption('yoho9646abcdefgh', couponId); - - value.couponId = cryptoId; + value.couponId = crypto.encryption(null, value.couponId + ''); }); } return result; diff --git a/doraemon/models/header.js b/doraemon/models/header.js index 5d2645e..949bc3c 100644 --- a/doraemon/models/header.js +++ b/doraemon/models/header.js @@ -49,9 +49,8 @@ const getNavBar = (data, type) => { let navBars = []; _.forEach(data, item => { - let obj = {}, - lowEn = _.camelCase(item.sort_name_en).toLowerCase(); - + let obj = {}; + let lowEn = _.camelCase(item.sort_name_en).toLowerCase(); obj.link = item.sort_url; obj.cn = item.sort_name; diff --git a/doraemon/views/partial/footer.hbs b/doraemon/views/partial/footer.hbs index 40f60e1..725aa9c 100644 --- a/doraemon/views/partial/footer.hbs +++ b/doraemon/views/partial/footer.hbs @@ -330,6 +330,9 @@ <div class="footer-link"> <div class="center-content clearfix"> <div class="left right-flag"> + <a class='govicon' href="http://odr.jsdsgsxt.gov.cn:8081/mbm/entweb/elec/certView?siteId=f2b6e3b8d18241afb8dd6cadf7f15406" target="_blank" rel="nofollow"> + <div class="govimg"></div> + </a> <a href="https://ss.knet.cn/verifyseal.dll?sn=e14021832010046477dka7000000&ct=df&a=1&pa=0.5902942178957805" target="_blank" rel="nofollow"> <img src="//static.yohobuy.com/images/v3/icon/credit-flag3.png"> </a> diff --git a/doraemon/views/partial/header.hbs b/doraemon/views/partial/header.hbs index bbc2b7b..24ff9d6 100644 --- a/doraemon/views/partial/header.hbs +++ b/doraemon/views/partial/header.hbs @@ -253,7 +253,7 @@ </div> <div class="go-full-cart"> <div> - <a href="/shopping/cart">去购物车结算</a> + <a href="//www.yohobuy.com/shopping/cart">去购物车结算</a> </div> </div> </div> diff --git a/doraemon/views/partial/product/good.hbs b/doraemon/views/partial/product/good.hbs index e946a03..22c97bc 100644 --- a/doraemon/views/partial/product/good.hbs +++ b/doraemon/views/partial/product/good.hbs @@ -1,67 +1,67 @@ <div class="good-info" data-skn="{{skn}}" data-from="{{from}}"> <div class="tag-container clearfix"> {{# tags}} - {{# isNew}} + {{# is_new}} <span class="good-tag new-tag">NEW</span> - {{/ isNew}} - {{# isReNew}} + {{/ is_new}} + {{# is_re_new}} <span class="good-tag renew-tag">再到着</span> - {{/ isReNew}} - {{# isSale}} + {{/ is_re_new}} + {{# is_sale}} <span class="good-tag sale-tag">SALE</span> - {{/ isSale}} - {{# isNewFestival}} + {{/ is_sale}} + {{# is_new_festival}} <span class="good-tag new-festival-tag">新品节</span> - {{/ isNewFestival}} - {{# isLimit}} + {{/ is_new_festival}} + {{# is_limit}} <span class="good-tag limit-tag">限量商品</span> - {{/ isLimit}} - {{# isYearEndPromotion}} + {{/ is_limit}} + {{# is_year_end_promotion}} <span class="good-tag yep-tag">年终大促</span> - {{/ isYearEndPromotion}} - {{# isYearMidPromotion}} + {{/ is_year_end_promotion}} + {{# is_year_mid_promotion}} <span class="good-tag ymp-tag">年中热促</span> - {{/ isYearMidPromotion}} + {{/ is_year_mid_promotion}} {{/ tags}} </div> <div class="good-detail-img"> <a class="good-thumb" href="{{url}}" target="_blank"> <img class="lazy" data-original="{{image thumb 235 314}}"> </a> - {{# isFew}} + {{# is_few}} <p class="few-tag">即将售罄</p> - {{/ isFew}} + {{/ is_few}} - {{#if isSaleOut}} + {{#if is_sale_out}} <a class="sale-out" href="{{url}}"> <span class="sale-out-tip">已抢光</span> </a> {{/if}} - {{#if showColBtn}} + {{#if show_col_btn}} <span class="col-btn iconfont{{#if coled}} coled{{/if}}"></span> {{/if}} </div> - <div class="good-detail-text {{#forStu}} stu-good-detail {{/forStu}}"> - <a href="{{url}}" target="_blank">{{{productName}}}</a> + <div class="good-detail-text {{#for_stu}} stu-good-detail {{/for_stu}}"> + <a href="{{url}}" target="_blank">{{{product_name}}}</a> <p class="brand"> - <a href="{{brandUrl}}">{{brandName}}</a> + <a href="{{brand_url}}">{{brand_name}}</a> </p> <p class="price {{#if vip}}vip-center{{/if}}"> - {{# marketPrice}} + {{# market_price}} <span class="market-price">¥{{round . 2}}</span> - {{/ marketPrice}} - {{# salesPrice}} - <span class="sale-price {{#unless marketPrice}}prime-cost{{/unless}}"> + {{/ market_price}} + {{# sales_price}} + <span class="sale-price {{#unless market_price}}prime-cost{{/unless}}"> ¥{{round . 2}} </span> - {{/ salesPrice}} + {{/ sales_price}} - {{# studentPrice}} + {{# student_price}} <span class="sale-price"> ¥{{round . 2}} </span> - {{/ studentPrice}} + {{/ student_price}} {{# discount}} <span class="discount">{{.}}折</span> @@ -71,12 +71,12 @@ {{#vip1}}<span class="vip-1 vip-span"></span>{{/vip1}} {{#vip2}}<span class="vip-2 vip-span"></span>{{/vip2}} {{#vip3}}<span class="vip-3 vip-span"></span>{{/vip3}} - {{#forStu}}<span class="stu-tag"> 学生价 </span>{{/forStu}} + {{#for_stu}}<span class="stu-tag"> 学生价 </span>{{/for_stu}} </p> <div class="hideList hide"> - {{#goodsList}} - <li data-src="{{image imagesUrl 235 314}}" data-url="{{../url}}"></li> - {{/goodsList}} + {{#goods_list}} + <li data-src="{{image images_url 235 314}}" data-url="{{../url}}"></li> + {{/goods_list}} </div> </div> </div> diff --git a/package.json b/package.json index 3947519..da39ca8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "yohobuy-node", - "version": "4.9.2", + "version": "4.9.4", "private": true, "description": "A New Yohobuy Project With Express", "repository": { diff --git a/public/dist/yohobuy-node/assets/img/sprite.passport.png b/public/dist/yohobuy-node/assets/img/sprite.passport.png index 7d76982..6d4fef2 100644 Binary files a/public/dist/yohobuy-node/assets/img/sprite.passport.png and b/public/dist/yohobuy-node/assets/img/sprite.passport.png differ diff --git a/public/img/layout/ebsIcon.png b/public/img/layout/ebsIcon.png new file mode 100644 index 0000000..a640826 Binary files /dev/null and b/public/img/layout/ebsIcon.png differ diff --git a/public/js/home/QRcode.page.js b/public/js/home/QRcode.page.js index 5ed9232..074f4d8 100644 --- a/public/js/home/QRcode.page.js +++ b/public/js/home/QRcode.page.js @@ -7,6 +7,8 @@ var len = $item.length, slide; var src = /url\("([^'"]*)"\)/g.exec($('.print_qrcode').css('background'))[1]; $('.print_qrcode').find('img').attr('src', src); +require('../common'); + function slideDo(to) { $item.each(function(index) { index === to ? $(this).stop().animate({ diff --git a/public/js/passport/back-index.page.js b/public/js/passport/back-index.page.js index ad52ef8..737061b 100644 --- a/public/js/passport/back-index.page.js +++ b/public/js/passport/back-index.page.js @@ -3,3 +3,4 @@ */ require('./back/back'); +require('../common'); \ No newline at end of file diff --git a/public/js/passport/back-reset-pwd.page.js b/public/js/passport/back-reset-pwd.page.js index 9eb28de..5d441ff 100644 --- a/public/js/passport/back-reset-pwd.page.js +++ b/public/js/passport/back-reset-pwd.page.js @@ -3,3 +3,4 @@ */ require('./back/reset'); +require('../common'); \ No newline at end of file diff --git a/public/js/passport/back-reset-success.js b/public/js/passport/back-reset-success.js index fb5a4cb..72481e3 100644 --- a/public/js/passport/back-reset-success.js +++ b/public/js/passport/back-reset-success.js @@ -1,3 +1,4 @@ /** * Created by TaoHuang on 2016/6/21. */ +require('../common'); \ No newline at end of file diff --git a/public/js/passport/back-send-email-ok.page.js b/public/js/passport/back-send-email-ok.page.js index fb5a4cb..72481e3 100644 --- a/public/js/passport/back-send-email-ok.page.js +++ b/public/js/passport/back-send-email-ok.page.js @@ -1,3 +1,4 @@ /** * Created by TaoHuang on 2016/6/21. */ +require('../common'); \ No newline at end of file diff --git a/public/js/passport/back-verify-mobile-code.page.js b/public/js/passport/back-verify-mobile-code.page.js index fff44a1..7b66fcf 100644 --- a/public/js/passport/back-verify-mobile-code.page.js +++ b/public/js/passport/back-verify-mobile-code.page.js @@ -3,3 +3,4 @@ */ require('./back/verification'); +require('../common'); \ No newline at end of file diff --git a/public/js/passport/bind-success.page.js b/public/js/passport/bind-success.page.js index 7942eac..e036a7f 100644 --- a/public/js/passport/bind-success.page.js +++ b/public/js/passport/bind-success.page.js @@ -2,3 +2,4 @@ * 绑定成功页面 **/ require('../simple-header'); +require('../common'); \ No newline at end of file diff --git a/public/js/passport/bind.page.js b/public/js/passport/bind.page.js index 991eb66..ccf4f14 100644 --- a/public/js/passport/bind.page.js +++ b/public/js/passport/bind.page.js @@ -1 +1,2 @@ require('./bind/thirdlogin'); +require('../common'); \ No newline at end of file diff --git a/public/js/passport/login.page.js b/public/js/passport/login.page.js index abd2558..c5de64a 100644 --- a/public/js/passport/login.page.js +++ b/public/js/passport/login.page.js @@ -1 +1,2 @@ require('./login/index'); +require('../common'); \ No newline at end of file diff --git a/public/js/passport/noregist.page.js b/public/js/passport/noregist.page.js index d7820f6..5fa3315 100644 --- a/public/js/passport/noregist.page.js +++ b/public/js/passport/noregist.page.js @@ -1 +1,2 @@ require('./bind/bind-info'); +require('../common'); \ No newline at end of file diff --git a/public/js/passport/reg.page.js b/public/js/passport/reg.page.js index b4d9d96..eb6e2a8 100644 --- a/public/js/passport/reg.page.js +++ b/public/js/passport/reg.page.js @@ -1,3 +1,4 @@ var reg = require('./reg/reg'); reg.init('reg'); +require('../common'); \ No newline at end of file diff --git a/public/js/passport/relate.page.js b/public/js/passport/relate.page.js index f7c15b3..de814dd 100644 --- a/public/js/passport/relate.page.js +++ b/public/js/passport/relate.page.js @@ -1 +1,2 @@ require('./bind/relate'); +require('../common'); \ No newline at end of file diff --git a/public/js/product/detail.page.js b/public/js/product/detail.page.js index 2e370a9..6998703 100644 --- a/public/js/product/detail.page.js +++ b/public/js/product/detail.page.js @@ -324,20 +324,12 @@ $addToCart.click(function() { } }).then(function(data) { var code = data.code; - var strK; if (code === 200) { $('#type-chose').slideUp(SLIDETIME); $('#balance').slideDown(SLIDETIME); $('#cart-num').text(data.data.goods_count); // 更新数目 - - strK = '{"_k":"' + data.data._k + '","_nac":0' + ',"_ac":0,"_r":0}'; //eslint-disable-line - - window.setCookie('_g', strK, { - path: '/', - domain: '.yohobuy.com' - }); } }); }); diff --git a/public/scss/common/_footer.css b/public/scss/common/_footer.css index 26fb6ec..41373cd 100644 --- a/public/scss/common/_footer.css +++ b/public/scss/common/_footer.css @@ -298,6 +298,21 @@ a { margin-right: 5px; } + .govicon { + display: inline-block; + float: left; + border-radius: 2px; + margin-right: 8px; + background: #fff; + width: 26px; + height: 34px; + } + + .govimg { + width: 100%; + height: 100%; + background: resolve(layout/ebsIcon.png) no-repeat; + } } .about-us { diff --git a/utils/product-process.js b/utils/product-process.js index a38af84..837dc31 100644 --- a/utils/product-process.js +++ b/utils/product-process.js @@ -14,14 +14,14 @@ const images = require(`${global.utils}/images`); */ const procProductImg = (product, gender, newSort) => { if (gender === '2,3') { - return product.cover2 || product.cover1 || product.imagesUrl || ''; + return product.cover_2 || product.cover_1 || product.images_url || ''; } if (newSort && gender === '1,2,3') { - return product.imagesUrl || ''; + return product.images_url || ''; } - return product.cover1 || product.cover2 || product.imagesUrl || ''; + return product.cover_1 || product.cover_2 || product.images_url || ''; }; @@ -32,10 +32,10 @@ const procProductImg = (product, gender, newSort) => { */ const handleGoodsListData = (origin) => { _.forEach(origin, (value, key) => { - if (!_.isEmpty(value.goodsList)) { - _.forEach(value.goodsList, (subValue, subKey) => { - origin[key].goodsList[subKey].url = - helpers.urlFormat(`/product/pro_${value.productId}_${subValue.goodsId}/${value.cnAlphabet}.html`); + if (!_.isEmpty(value.goods_list)) { + _.forEach(value.goods_list, (subValue, subKey) => { + origin[key].goods_list[subKey].url = + helpers.urlFormat(`/product/pro_${value.product_id}_${subValue.goods_id}/${value.cn_alphabet}.html`); }); } }); @@ -113,93 +113,87 @@ exports.processProductList = (list, options) => { gender: '2,3' }, options); - list = camelCase(list); - _.forEach(list, (product) => { // 商品信息有问题,则不显示 - if (!product.productSkn || !product.goodsList.length) { + if (!product.product_skn || !product.goods_list.length) { return; } // 如果库存为0,显示已抢完 - if (product.storageNum === 0 && product.status === 1) { - product.isSaleOut = true; + if (product.storage_num === 0 && product.status === 1) { + product.is_sale_out = true; } // 市场价和售价一样,则不显示市场价, 不显示折扣信息 - if (product.marketPrice === product.salesPrice) { - delete product.marketPrice; + if (product.market_price === product.sales_price) { + delete product.market_price; } else if (options.showDiscount) { - product.discount = (product.salesPrice / product.marketPrice * 10).toFixed(1); + product.discount = (product.sales_price / product.market_price * 10).toFixed(1); } - // 如果设置了默认图片,就取默认的图片 - _.forEach(procGoodsList(product.goodsList), (goods) => { + // 判别默认的商品是否将默认的图片URL赋值到skn + let flag = false; - // (颜色优先) - if (options.color) { - if (goods.colorId === options.color) { - product.defaultImages = procProductImg(goods, options.gender, options.newCoverSort); - return; - } - } else { - if (goods.isDefault === 'Y') { - product.defaultImages = procProductImg(goods, options.gender, options.newCoverSort); - return; - } + // 如果设置了默认图片,就取默认的图片 + _.forEach(product.goods_list, (goods) => { + if (flag) { + return; + } + if (goods.is_default === 'Y') { + product.default_images = procProductImg(goods); + flag = true; } }); // 如果还未赋值,则取第一个skc产品的默认图片 - if (!product.defaultImages) { - product.defaultImages = procProductImg(product.goodsList[0], options.gender, options.newCoverSort); + if (!flag) { + product.default_images = procProductImg(product.goods_list[0]); } product = Object.assign(product, { - id: product.productSkn, - thumb: product.defaultImages + id: product.product_skn, + thumb: product.default_images }); - product.isFew = product.isSoonSoldOut === 'Y'; - product.url = helpers.urlFormat(`/product/pro_${product.productId}_${product.goodsList[0].goodsId}/${product.cnAlphabet}.html`); // eslint-disable-line + product.is_few = product.is_soon_sold_out === 'Y'; + product.url = helpers.urlFormat(`/product/pro_${product.product_id}_${product.goods_list[0].goods_id}/${product.cn_alphabet}.html`); // eslint-disable-line // tar add 1606071146 品牌链接处理 - product.brandUrl = helpers.urlFormat('', '', product.brandDomain); + product.brandUrl = helpers.urlFormat('', '', product.brand_domain); // APP访问需要加附加的参数 // 备注:如果以后APP的接口太多,可以把这边参数提取出来,变成一个公共的方法来生成,便于以后管理维护 if (options.isApp) { - product.url += `?openby:yohobuy={"action":"go.productDetail","params":{"product_skn":'${product.productId}'}}`; // eslint-disable-line + product.url += `?openby:yohobuy={"action":"go.productDetail","params":{"product_skn":'${product.product_id}'}}`; // eslint-disable-line } if (options.showTags) { product.tags = {}; - product.tags.isNew = options.showNew && product.isNew === 'Y'; // 新品 - //product.tags.isDiscount = options.showSale && product.isDiscount === 'Y'; // 在售 - product.tags.isSale = options.showSale && product.isDiscount === 'Y' && product.salesPrice && (product.marketPrice / product.salesPrice > 2); - product.tags.isLimited = product.isLimited === 'Y'; // 限量 - product.tags.isYohood = product.isYohood === 'Y'; // YOHOOD - product.tags.midYear = product.midYear === 'Y'; // 年中 - product.tags.yearEnd = product.yearEnd === 'Y'; // 年末 - product.tags.isAdvance = product.isAdvance === 'Y'; // 再到着 + product.tags.is_new = options.showNew && product.is_new === 'Y'; // 新品 + product.tags.is_sale = options.showSale && product.is_discount === 'Y'; // 在售 + product.tags.is_limited = product.is_limited === 'Y'; // 限量 + product.tags.is_yohood = product.is_yohood === 'Y'; // YOHOOD + product.tags.mid_year = product.mid_year === 'Y'; // 年中 + product.tags.year_end = product.year_end === 'Y'; // 年末 + product.tags.is_advance = product.is_advance === 'Y'; // 再到着 // 打折与即将售完组合显示打折 - /*if (product.isFew && product.tags.isDiscount) { - product.isFew = false; - } else*/ - if(product.tags.isNew) { - product.tags.isSale = false; + /*if (product.is_soon_sold_out && product.tags.is_discount) { + product.tags.is_few = false; + } else*/ + if(product.tags.is_new) { + product.tags.is_sale = false; } - if (product.tags.isSale && - (product.isFew || product.tags.isLimited || product.tags.isYohood || product.tags.isAdvance)) { + if (product.tags.is_sale && + (product.is_few || product.tags.is_limited || product.tags.is_yohood || product.tags.is_advance)) { // 打折与其它组合则隐藏打折 - product.tags.isSale = false; - } else if (product.tags.isYohood && product.isFew) { + product.tags.is_sale = false; + } else if (product.tags.is_yohood && product.is_few) { // YOHOOD和新品组合显示YOHOOD - product.isFew = false; + product.is_few = false; } } diff --git a/utils/resources-process.js b/utils/resources-process.js index f825f2b..2a1afcd 100644 --- a/utils/resources-process.js +++ b/utils/resources-process.js @@ -10,6 +10,7 @@ module.exports = (list) => { const formatData = []; list = list || []; + // TODO: list = camelCase(list); _.forEach(list, (floor) => {