Authored by lijing

合5.5.1

Showing 100 changed files with 1363 additions and 936 deletions

Too many changes to show.

To preserve performance only 100 of 100+ files are displayed.

{
"presets": ["es2015"],
"plugins": ["transform-runtime"],
"comments": false
"presets": [
["env", {
"targets": {
"browsers": [">1%", "android >=4", "ios >=8"]
}
}]
]
}
... ...
**/bundle/**/*.js
**/dist/**/*.js
coverage
public/js/home/jquery.upload.js
\ No newline at end of file
public/js/home/jquery.upload.js
public/js/activity/live/yas_live_data.js
\ No newline at end of file
... ...
... ... @@ -96,7 +96,6 @@ fabric.properties
### NetBeans ###
nbproject/private/
build/
nbbuild/
dist/
nbdist/
... ... @@ -143,6 +142,8 @@ typings/
### YOHO ###
dist
public/build/bundle/*
public/build/dist/*
public/css/*
public/bundle/*
.eslintcache
... ... @@ -150,3 +151,4 @@ public/bundle/*
nbproject/*
.DS_Store
.devhost
.happypack/*
... ...
phantomjs_cdnurl=http://npm.taobao.org/mirrors/phantomjs
... ...
**/css/**/*.css
**/dist/**/*.css
**/scss/activity/_aslider.css
**/scss/layout/_swiper.css
**/scss/activity/trend/_map.css
**/scss/activity/live/*.css
... ...
... ... @@ -20,7 +20,6 @@ const path = require('path');
const compression = require('compression');
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');
const favicon = require('serve-favicon');
const uuid = require('uuid');
const pkg = require('./package.json');
... ... @@ -74,8 +73,6 @@ app.use(global.yoho.hbs({
app.use(global.yoho.middleware());
app.use(favicon(path.join(__dirname, '/favicon.ico')));
app.use(express.static(path.join(__dirname, 'public')));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: false
... ... @@ -109,7 +106,10 @@ app.use(cookieSession({
requestKey: 'session2',
cookieName: 'yohobuy_session_cookie',
secret: '82dd7e724f2c6870472c89dfa43cf48d',
domain: 'yohobuy.com'
cookie: {
domain: 'yohobuy.com',
ephemeral: true
}
}));
app.use((req, res, next) => {
... ...
... ... @@ -21,6 +21,7 @@ exports.submit = (req, res) => {
if (req.body.captcha === captchaCode) {
let key = `pc:limiter:${remoteIp}`;
cache.delAsync(key).then(() => {
return res.json({
code: 200
... ...
... ... @@ -7,7 +7,7 @@ exports.index = function(req, res, next) {
type: req.query.type
}).then((result) => {
if (!result) {
return next();
return next();
}
res.render('feature', {
module: 'activity',
... ...
... ... @@ -10,7 +10,7 @@ const inviteTitle = {
normal: '有货 邀请好友赢福利'
};
const _ = require('lodash');
const md5 = require('md5');
const md5 = require('yoho-md5');
const secretKey = '5466ee572bcbc75830d044e66ab429bc';// 秘钥
... ... @@ -235,7 +235,6 @@ exports.myCoupons = (req, res, next) => {
// 好友领取完页面
exports.shareover = (req, res) => {
let amount = req.query.amount * 1 || 5;
let sign = req.query.sign;
res.render('invite/shareover', {
module: 'activity',
... ...
... ... @@ -3,11 +3,6 @@
'use strict';
const model = require('../models/live');
const status = {
wait: 0,
living: 1,
end: 2
};
const liveModel = require('../models/live');
exports.index = (req, res, next) => {
... ...
... ... @@ -13,9 +13,9 @@ const api = global.yoho.API;
exports.index = (req, res, next) => {
let responseData = {
pageHeader: headerModel.setNav({
navTitle: '邀请同学认证送大礼',
}),
pageHeader: headerModel.setNav({
navTitle: '邀请同学认证送大礼',
}),
module: 'activity',
page: 'promotion',
title: 'Yoho!Buy 有货 | 邀请同学认证送大礼',
... ...
'use strict';
const shopModel = require('../models/shopCollect'),
headerModel = require('../../../doraemon/models/header'),
_ = require('lodash');
headerModel = require('../../../doraemon/models/header');
const crypto = global.yoho.crypto;
... ...
... ... @@ -3,16 +3,14 @@ const serviceApi = global.yoho.ServiceAPI;
const api = global.yoho.API;
const helpers = global.yoho.helpers;
const crypto = global.yoho.crypto;
const queryString = require('querystring');
const Promise = require('bluebird');
const co = Promise.coroutine;
const headerModel = require('../../../doraemon/models/header'); // 头部model
const _ = require('lodash');
const productProcess = require(`${utils}/product-process`);
const productProcess = require(`${global.utils}/product-process`);
const stdntMrktModel = require('../models/student-market');
const userAcquireStatus = (uid, couponIds) => {
if (couponIds != '') {
if (couponIds !== '') {
return api.get('', {
method: 'app.coupons.userAcquireStatus',
uid: uid,
... ... @@ -27,7 +25,7 @@ const userAcquireStatus = (uid, couponIds) => {
* @returns {*}
*/
const _getRelatedData = (idList) => {
if (idList != '') {
if (idList !== '') {
return api.get('', {
productSkn: idList,
method: 'h5.product.batch'
... ... @@ -58,7 +56,9 @@ exports.index = (req, res, next) => {
let code = 'c9b9639ce2884b768cfbc5cf9e68a53f';
let uid = req.__USER__.uid;
let options;
let noLoginUrl = helpers.urlFormat('/activity/student/register') + '?openby:yohobuy={"action":"go.weblogin","params":{"jumpurl":{"url":"' + req.__USER__.http + '//m.yohobuy.com/activity/student-market"}}}';
let noLoginUrl = helpers.urlFormat('/activity/student/register') +
'?openby:yohobuy={"action":"go.weblogin","params":{"jumpurl":{"url":"' +
req.__USER__.http + '//m.yohobuy.com/activity/student-market"}}}';
return serviceApi.get('operations/api/v5/resource/get', {
content_code: code,
... ... @@ -72,7 +72,6 @@ exports.index = (req, res, next) => {
link,
studentGoods,
idList = [],
goodShow,
// url,
// param,
... ... @@ -105,7 +104,8 @@ exports.index = (req, res, next) => {
});
if (coupons && coupons.data) {
coupons.link = link && link.data ? link.data[0].url + (req.__USER__.isApp ? '&app_version=' + req.__USER__.app_version : '') : '';
coupons.link = link && link.data ?
link.data[0].url + (req.__USER__.isApp ? '&app_version=' + req.__USER__.app_version : '') : '';
coupons.data = (coupons.data || []).map((item) => {
// let url = item.image.url;
... ... @@ -131,7 +131,10 @@ exports.index = (req, res, next) => {
});
}
return Promise.all([userAcquireStatus(uid, couponids.join(',')), _getRelatedData(idList.join(','))]).then(datas => {
return Promise.all([
userAcquireStatus(uid, couponids.join(',')),
_getRelatedData(idList.join(','))])
.then(datas => {
coupons.data = _.get(coupons, 'data', []).map((item)=>{
item.status = 1;
(datas[0].data || []).forEach((it) => {
... ... @@ -174,10 +177,10 @@ exports.index = (req, res, next) => {
options.loginUrl = '//m.yohobuy.com/activity/student/register';
if (options.isApp) {
if (options.isLogin) {
options.loginUrl = options.loginUrl + '?openby:yohobuy={"action":"go.h5","params":{"islogin":"N","url":"' + req.__USER__.http + '//m.yohobuy.com/activity/student/register"}}';
options.loginUrl = options.loginUrl + '?openby:yohobuy={"action":"go.h5","params":{"islogin":"N","url":"' + req.__USER__.http + '//m.yohobuy.com/activity/student/register"}}'; // eslint-disable-line
} else {
// no login
options.loginUrl = options.loginUrl + '?openby:yohobuy={"action":"go.weblogin","params":{"jumpurl":{"url":"' + req.__USER__.http + '//m.yohobuy.com/activity/student/register","antarget":"1"}}}';
options.loginUrl = options.loginUrl + '?openby:yohobuy={"action":"go.weblogin","params":{"jumpurl":{"url":"' + req.__USER__.http + '//m.yohobuy.com/activity/student/register","antarget":"1"}}}'; // eslint-disable-line
}
}
... ...
... ... @@ -13,7 +13,25 @@ const headerModel = require('../../../doraemon/models/header'); // 头部model
const _ = require('lodash');
const urlP = require('url');
/**
* 处理旧版本的app兼容新接口
* @param {*} url url
* @param {*} data data
* @param {*} param param
* @param {*} method method
*/
const middleApi = (url, data, param, method) => {
try {
let promise = method === 'post' ? api.post : api.get;
if (!_.get(data, 'uid.sessionKey', '') && data.uid) {
data.app_version = '5.5.0';
}
return promise.call(api, url, data, param);
} catch (err) {
return null;
}
};
const getResource = code => {
return serviceApi.get('operations/api/v5/resource/get', {
content_code: code,
... ... @@ -21,43 +39,43 @@ const getResource = code => {
});
};
const vip = (limit) => {
return api.get('', {
return middleApi('', {
method: 'app.student.vip',
limit: limit || 60
});
};
const verifiedStudentTotal = () => {
return api.get('', {
return middleApi('', {
method: 'app.student.verifiedStudentTotal'
});
};
const getProvince = () => {
return api.get('', {
return middleApi('', {
method: 'app.studentMarket.getAddressList'
}, {
cache: true
});
};
const getSchool = code => {
return api.get('', {
return middleApi('', {
method: 'app.studentMarket.getSchoolInfoList',
areaCode: code
});
};
const getEducationLevelList = () => {
return api.get('', {
return middleApi('', {
method: 'app.studentMarket.getEducationLevelList'
});
};
const userAcquireStatus = (uid, couponIds) => {
return api.get('', {
return middleApi('', {
method: 'app.coupons.userAcquireStatus',
uid: uid,
couponIds: couponIds
});
};
const verifyStudent = (uid, collegename, educationdegree, enrollmentyear) => {
return api.get('', {
return middleApi('', {
method: 'app.student.verifyStudent',
uid: uid,
client_type: 'h5',
... ... @@ -67,7 +85,7 @@ const verifyStudent = (uid, collegename, educationdegree, enrollmentyear) => {
});
};
const verifyIdentity = (uid, certno, name, pageurl) => {
return api.get('', {
return middleApi('', {
method: 'app.student.verifyIdentity',
uid: uid,
client_type: 'h5',
... ... @@ -83,7 +101,7 @@ const getUser = (uid) => {
data: {}
});
}
return api.get('', {
return middleApi('', {
method: 'app.passport.profile',
uid: uid
}, {
... ... @@ -100,6 +118,12 @@ const getPlatForm = (req) => {
let arrs = [];
let isNewVersion = false;
const isProduction = process.env.NODE_ENV === 'production';
let sessionKey = req.query.session_key || req.session.SESSION_KEY;
let uid;
if (sessionKey && !req.session.SESSION_KEY) {
req.session.SESSION_KEY = sessionKey;
}
// console.log(req.get('User-Agent'));
// console.log(req.query.uid);
... ... @@ -137,8 +161,16 @@ const getPlatForm = (req) => {
if (isProduction) {
yoho.http = 'https:';
}
yoho.uid = uids && uids.length === 2 ? uids[1] : ''; // 8041246
yoho.uid = req.user.uid || yoho.uid || req.query.uid || '';
uid = uids && uids.length === 2 ? uids[1] : ''; // 8041246
uid = req.user.uid && req.user.uid.toString() || uid || req.query.uid || req.cookies.studentUID || '';
if (uid) {
yoho.uid = {
toString: () => {
return uid;
},
sessionKey: sessionKey
};
}
yoho.isLogin = yoho.uid ? true : false;
return co(function*() {
let data = yield getUser(yoho.uid);
... ... @@ -158,7 +190,7 @@ exports.index = (req, res, next) => {
let code = 'a83b7d55324fb65f96c1f85a3387ebd8';
let uid = req.__USER__.uid;
let options;
let noLoginUrl = helpers.urlFormat('/activity/student/register') + '?openby:yohobuy={"action":"go.weblogin","params":{"jumpurl":{"url":"' + req.__USER__.http + '//m.yohobuy.com/activity/student"}}}';
let noLoginUrl = helpers.urlFormat('/activity/student/register') + '?openby:yohobuy={"action":"go.weblogin","params":{"jumpurl":{"url":"' + req.__USER__.http + '//m.yohobuy.com/activity/student"}}}'; // eslint-disable-line
... ... @@ -196,7 +228,8 @@ exports.index = (req, res, next) => {
}
});
if (coupons && coupons.data) {
coupons.link = link && link.data ? link.data[0].url + (req.__USER__.isApp ? '&app_version=' + req.__USER__.app_version : '') : '';
coupons.link = link && link.data ? link.data[0].url +
(req.__USER__.isApp ? '&app_version=' + req.__USER__.app_version : '') : '';
coupons.data = (coupons.data || []).map((item) => {
// let url = item.image.url;
couponids.push(item.couponID);
... ... @@ -233,7 +266,8 @@ exports.index = (req, res, next) => {
value.cn_alphabet = productNameProcess(value.cn_alphabet);
}
value.url = helpers.urlFormat(`/product/${value.product_skn}.html`) + `?openby:yohobuy={"action":"go.productDetail","params":{"product_skn":${value.product_skn}}}`; // 商品url改版
// 商品url改版
value.url = helpers.urlFormat(`/product/${value.product_skn}.html`) + `?openby:yohobuy={"action":"go.productDetail","params":{"product_skn":${value.product_skn}}}`; // eslint-disable-line
return value;
});
... ... @@ -267,11 +301,11 @@ exports.index = (req, res, next) => {
if (options.isStudent) {
options.loginUrl = false;
} else {
options.loginUrl = options.loginUrl + '?openby:yohobuy={"action":"go.h5","params":{"islogin":"N","url":"' + req.__USER__.http + '//m.yohobuy.com/activity/student/register"}}';
options.loginUrl = options.loginUrl + '?openby:yohobuy={"action":"go.h5","params":{"islogin":"N","url":"' + req.__USER__.http + '//m.yohobuy.com/activity/student/register"}}'; // eslint-disable-line
}
} else {
// no login
options.loginUrl = options.loginUrl + '?openby:yohobuy={"action":"go.weblogin","params":{"jumpurl":{"url":"' + req.__USER__.http + '//m.yohobuy.com/activity/student/register","antarget":"1"}}}';
options.loginUrl = options.loginUrl + '?openby:yohobuy={"action":"go.weblogin","params":{"jumpurl":{"url":"' + req.__USER__.http + '//m.yohobuy.com/activity/student/register","antarget":"1"}}}'; // eslint-disable-line
}
} else {
if (options.isLogin) {
... ... @@ -312,6 +346,9 @@ exports.register = (req, res, next) => {
res.redirect(helpers.urlFormat(refer));
} else {
if (req.query.uid) {
res.cookie('studentUID', req.query.uid);
}
res.render('register', {
title: '认证信息填写',
isApp: req.__USER__.isApp,
... ... @@ -371,7 +408,7 @@ exports.verifyidentity = (req, res, next) => {
// 添加分享成功记录
const addStudent = (ownuid, shareId) => {
return api.get('', {
return middleApi('', {
method: 'app.student.addShare',
uid: ownuid,
shareUid: shareId
... ... @@ -387,7 +424,11 @@ exports.verifystudent = (req, res, next) => {
let shareId = req.query.shareId;
Promise.all([verifiedStudentTotal(), vip(), verifyStudent(uid, params.college_name, params.education_degree, params.enrollment_year, params.token), addStudent(ownuid, shareId)])
Promise.all([
verifiedStudentTotal(),
vip(),
verifyStudent(uid, params.college_name, params.education_degree, params.enrollment_year, params.token),
addStudent(ownuid, shareId)])
.then((datas) => {
let isverify = false,
prompt = '您的学校信息未通过审核';
... ... @@ -431,7 +472,8 @@ exports.verifystudent = (req, res, next) => {
value.cn_alphabet = productNameProcess(value.cn_alphabet);
}
value.url = helpers.urlFormat(`/product/${value.product_skn}.html`) + `?openby:yohobuy={"action":"go.productDetail","params":{"product_skn":${value.product_skn}}}`; // 商品url改版
// 商品url改版
value.url = helpers.urlFormat(`/product/${value.product_skn}.html`) + `?openby:yohobuy={"action":"go.productDetail","params":{"product_skn":${value.product_skn}}}`; // eslint-disable-line
return value;
});
return getUser(uid).then((user) => {
... ...
... ... @@ -208,7 +208,7 @@ exports.appointment = function(req, res, next) {
exports.travel = function(req, res, next) {
Object.assign(responseData, {
let resData = Object.assign({}, responseData, {
pageHeader: headerModel.setNav({
navTitle: '潮流之旅'
}),
... ... @@ -227,7 +227,7 @@ exports.travel = function(req, res, next) {
domain: 'yohobuy.com',
path: '/'
});
res.render('trend/travel', Object.assign(responseData, result));
res.render('trend/travel', Object.assign(resData, result));
}).catch(next);
};
... ... @@ -286,7 +286,8 @@ exports.photography = function(req, res, next) {
storeId: req.query.storeId,
id: req.query.id,
activityType: 4,
isFront: req.query.isFront || req.cookies.isFront
isFront: req.query.isFront || req.cookies.isFront,
// filter: 2
};
trendModel.photography(params).then((result) => {
... ... @@ -296,7 +297,7 @@ exports.photography = function(req, res, next) {
exports.kidStyle = function(req, res, next) {
Object.assign(responseData, {
let resData = Object.assign({}, responseData, {
pageHeader: headerModel.setNav({
navTitle: '儿童造型'
}),
... ... @@ -311,7 +312,7 @@ exports.kidStyle = function(req, res, next) {
};
trendModel.kidStyle(params).then((result) => {
res.render('trend/kidStyle', Object.assign(responseData, result));
res.render('trend/kidStyle', Object.assign(resData, result));
}).catch(next);
};
... ... @@ -368,6 +369,7 @@ exports.cutter = function(req, res, next) {
activityType: 5,
id: req.query.id,
activityId: req.query.id,
hairStylistId: req.query.id,
isFront: req.query.isFront || req.cookies.isFront
};
... ... @@ -420,7 +422,7 @@ exports.orderDetail = function(req, res, next) {
// 选择页面
exports.chosenPackage = function(req, res, next) {
Object.assign(responseData, {
let resData = Object.assign({}, responseData, {
pageHeader: headerModel.setNav({
navTitle: '选择套餐'
}),
... ... @@ -430,11 +432,13 @@ exports.chosenPackage = function(req, res, next) {
let params = {
storeId: req.query.storeId,
activityType: req.query.typeStatus,
isFront: req.query.isFront || req.cookies.isFront
isFront: req.query.isFront || req.cookies.isFront,
hairStylistId: req.cookies.cutterId,
filter: 2
};
trendModel.chosenPackage(params).then((result) => {
res.render('trend/chosen-package', Object.assign(responseData, result));
res.render('trend/chosen-package', Object.assign(resData, result));
}).catch(next);
};
... ... @@ -468,6 +472,7 @@ exports.chosenTime = function(req, res, next) {
activityType: req.query.typeStatus,
activityId: req.cookies.packageId || req.query.activityId || req.cookies.adviserId,
travelId: req.cookies.travelId,
storeId: req.query.storeId,
isFront: req.query.isFront || req.cookies.isFront
};
... ... @@ -477,7 +482,7 @@ exports.chosenTime = function(req, res, next) {
};
exports.chosenCutter = function(req, res, next) {
Object.assign(responseData, {
let resData = Object.assign({}, responseData, {
pageHeader: headerModel.setNav({
navTitle: '选择发型师'
}),
... ... @@ -486,11 +491,12 @@ exports.chosenCutter = function(req, res, next) {
let params = {
storeId: req.query.storeId,
isFront: req.query.isFront || req.cookies.isFront
isFront: req.query.isFront || req.cookies.isFront,
filter: 2
};
trendModel.chosenCutter(params).then((result) => {
res.render('trend/chosen-cutter', Object.assign(responseData, result));
res.render('trend/chosen-cutter', Object.assign(resData, result));
}).catch(next);
};
... ... @@ -506,7 +512,8 @@ exports.chosenAdviser = function(req, res, next) {
storeId: req.query.storeId,
activityType: req.query.typeStatus,
isFront: req.query.isFront || req.cookies.isFront,
hairStylistId: req.cookies.travelId
hairStylistId: req.cookies.travelId,
filter: 2
};
trendModel.chosenAdviser(params).then((result) => {
... ... @@ -572,14 +579,14 @@ exports.delOrder = function(req, res, next) {
};
exports.needKnow = function(req, res) {
let type = req.query.type;
Object.assign(responseData, {
pageHeader: headerModel.setNav({
navTitle: req.query.title
}),
title: req.query.title
});
let type = req.query.type;
switch (type) {
case '1':
res.render('trend/need-know1', responseData);
... ... @@ -596,6 +603,8 @@ exports.needKnow = function(req, res) {
case '5':
res.render('trend/need-know5', responseData);
break;
default:
break;
}
};
... ...
... ... @@ -59,7 +59,7 @@ const getNoLoginUrl = (params, appVersion) => {
const playUrlEncode = `${playUrl}?code=${params.contentCode}&app_version=${appVersion}`.replace(/\//g, '\\\/');
const noLoginUrl = {
appUrl: `${playUrl}?openby:yohobuy={"action":"go.weblogin","params":{"jumpurl":{"url":"http:${playUrlEncode}","param":{"from":"app"}},"requesturl":{"url":"","param":{}},"priority":"N"}}`,
appUrl: `${playUrl}?openby:yohobuy={"action":"go.weblogin","params":{"jumpurl":{"url":"http:${playUrlEncode}","param":{"from":"app"}},"requesturl":{"url":"","param":{}},"priority":"N"}}`, // eslint-disable-line
wapUrl: helpers.urlFormat('/signin.html', {
refer: playUrl + '?code=' + params.contentCode
})
... ... @@ -204,9 +204,9 @@ const processFun = {
}
if (isApp) {
image.url = !image.url ? 'javascript:void(0);' : image.url;
image.url = !image.url ? 'javascript:void(0);' : image.url;// eslint-disable-line
} else {
image.url = !image.url ? 'javascript:void(0);' : _getFilterUrl(image.url);
image.url = !image.url ? 'javascript:void(0);' : _getFilterUrl(image.url);// eslint-disable-line
}
}
result.isImageList = true;
... ... @@ -248,7 +248,8 @@ const _getContent = (data, isApp) => {
}
// tar note 处理楼层标题
if (fun === 'getCoupon' && data[i].data.length && _.has(data[i - 1], 'template_name') && data[i - 1].template_name === 'text') {
if (fun === 'getCoupon' && data[i].data.length &&
_.has(data[i - 1], 'template_name') && data[i - 1].template_name === 'text') {
data[i].data[0].floorTitle = data[i - 1].data;
}
... ...
... ... @@ -10,9 +10,10 @@ const _getProductBySkns = function(productObj) {
productObj.defaultPros = [];
if (result && result.data && result.data.product_list && result.code === 200) {
result.data.product_list.forEach(function(val) {
var goods_id = Array.isArray(val.goods_list) && val.goods_list.length ? val.goods_list[0].goods_id : null;
var goods_id = Array.isArray(val.goods_list) &&
val.goods_list.length ? val.goods_list[0].goods_id : null;
var obj = {
producturl: `//m.yohobuy.com/product/pro_${val.product_id}_${goods_id}/${val.cn_alphabet}.html?openby:yohobuy={"action":"go.productDetail","params":{"product_skn":${val.product_skn}}}`,
producturl: `//m.yohobuy.com/product/pro_${val.product_id}_${goods_id}/${val.cn_alphabet}.html?openby:yohobuy={"action":"go.productDetail","params":{"product_skn":${val.product_skn}}}`, // eslint-disable-line
productimg: helpers.image(val.default_images, 213, 284, 2, 60).replace('quality/80', 'quality/60'),
productname: val.product_name,
saleprice: val.sales_price,
... ... @@ -21,9 +22,9 @@ const _getProductBySkns = function(productObj) {
};
if (val.shop_id) {
obj.brandurl = `//m.yohobuy.com/product/index/brand?domain=${val.brand_domain}&openby:yohobuy={"action":"go.shop","params":{"shop_id":${val.shop_id},"shop_template_type":${val.shop_template_type}}}`;
obj.brandurl = `//m.yohobuy.com/product/index/brand?domain=${val.brand_domain}&openby:yohobuy={"action":"go.shop","params":{"shop_id":${val.shop_id},"shop_template_type":${val.shop_template_type}}}`; // eslint-disable-line
} else {
obj.brandurl = `//m.yohobuy.com/product/index/brand?domain=${val.brand_domain}&openby:yohobuy={"action":"go.brand","params":{"brand_id":${val.brand_id}}}`;
obj.brandurl = `//m.yohobuy.com/product/index/brand?domain=${val.brand_domain}&openby:yohobuy={"action":"go.brand","params":{"brand_id":${val.brand_id}}}`; // eslint-disable-line
}
productObj.defaultPros.push(obj);
... ... @@ -55,11 +56,14 @@ module.exports = {
cache: true
});
}
if (!data) {
return;
}
data = data.data;
if (data && data.floors) {
data.floors.forEach(function(f) {
if (f.component && f.component[0] && f.component[0].type === 'productGroup' && f.component[0].defaultSkns) {
if (f.component && f.component[0] &&
f.component[0].type === 'productGroup' && f.component[0].defaultSkns) {
sknsArr.push(_getProductBySkns(f.component[0]));
}
});
... ...
... ... @@ -19,7 +19,7 @@ let _getProduct = function(o) {
sales_price: o.sales_price,
cn_alphabet: o.cn_alphabet,
default_images: o.default_images,
goods_id: Array.isArray(o.goods_list) && o.goods_list.length ? o.goods_list[0].goods_id : undefined
goods_id: Array.isArray(o.goods_list) && o.goods_list.length ? o.goods_list[0].goods_id : void 0
};
};
... ... @@ -31,7 +31,7 @@ module.exports = {
cache: true
}).then(res => {
var data = [],
lst = (res.data && res.data.product_list) || [];
lst = (res && res.data && res.data.product_list) || [];
lst.forEach(function(o) {
o && data.push(_getProduct(o));
... ...
... ... @@ -57,7 +57,7 @@ const _studentState = (params) => {
unLogin: true
};
return resu;
} else if (!(params.shareUid === 'undefined') && !(params.shareUid === undefined)) {
} else if (params.shareUid !== 'undefined' && typeof params.shareUid !== 'undefined') {
// 已登录,为分享链接,验证是否已认证
return service.all([
_studentInfo(params),
... ...
... ... @@ -60,14 +60,14 @@ const activity = (params) => {
let prizesList = result[0].data.prizes;
prizesList.forEach((val, index) => {
if (newPrizes == '') {
if (newPrizes === '') {
newPrizes[0] = {
name: prizesList[0].name,
remark: prizesList[0].remark,
};
} else {
newPrizes.forEach((item, po) => {
if (prizesList[index].name == newPrizes[po].name) {
if (prizesList[index].name === newPrizes[po].name) {
same = true;
x = index;
y = po;
... ...
... ... @@ -31,12 +31,14 @@ const shopList = (uid, tabName, channelId) => {
}).then((result) => {
if (result && result.code === 200) {
_.forEach(result.data, function(data) {
let href = '//m.yohobuy.com/product/index/brand?shop_id=' + data.shopsId + '&openby:yohobuy={"action":"go.shop","params":{"shop_id":"' +
data.shopsId + '","shop_template_type":"' + data.shopTemplateType + '","shop_name":"' + data.shopName + '"}}';
let href = '//m.yohobuy.com/product/index/brand?shop_id=' +
data.shopsId + '&openby:yohobuy={"action":"go.shop","params":{"shop_id":"' +
data.shopsId + '","shop_template_type":"' +
data.shopTemplateType + '","shop_name":"' + data.shopName + '"}}';
data.isFavorite = data.isFavorite === 'Y';
if (parseInt(data.collectionNum) > 10000) {
if (parseInt(data.collectionNum, 10) > 10000) {
data.collectionNum = (data.collectionNum / 10000).toFixed(1) + ' w';
}
... ...
... ... @@ -8,7 +8,6 @@
const service = global.yoho.ServiceAPI;
const moment = require('moment');
const helpers = global.yoho.helpers;
// 格式年月日
const _formatDay = (day) => {
... ... @@ -52,7 +51,7 @@ const _HM = (day) => {
// 资讯列表
const info = (params) => {
return service.get('InformationController/getFrontAllList', {
return service.get('InformationController/getFrontMainPushList', {
storeId: params.storeId,
isFront: params.isFront
}, {
... ... @@ -134,7 +133,12 @@ const articleDetail = (params) => {
let resu = {};
if (result && result.data) {
resu = result.data;
resu = {
coverUrl: result.data.coverUrl,
titles: result.data.title,
summary: result.data.summary,
content: result.data.content
};
}
return resu;
});
... ... @@ -189,7 +193,7 @@ const oldList = (params) => {
if (result && result.data) {
resu = result.data;
}
return resu;
});
};
... ... @@ -243,7 +247,7 @@ const classActList = (params) => {
startTime: val.activityDayStartTime,
endTime: val.activityDayEndTime,
free: val.isFree === 1,
price: helpers.round(val.price, 0),
price: val.price,
needApo: val.isAppointment === 1,
apoStatus: val.appointStatus === 1,
id: val.id,
... ... @@ -282,10 +286,13 @@ const classActList = (params) => {
startTime: val.activityDayStartTime,
endTime: val.activityDayEndTime,
end: true,
free: true,
// free: true,
id: val.id,
status: status,
storeId: params.storeId
storeId: params.storeId,
free: val.isFree === 1,
price: val.price,
});
});
... ... @@ -327,6 +334,58 @@ const classActDetail = (params) => {
});
};
// 获取日期,星期(所有潮流顾问, 发型师详情页)
const getDate2 = (params) => {
return service.get('ActivityConfigController/getAppointDateForTour', {
storeId: params.storeId,
activityType: params.activityType,
hairStylistId: params.id || '',
isFront: params.isFront
}, {
code: 200
}).then(result => {
return result;
});
};
// 获取日期,星期
const getDate = (params) => {
let apiUrl = 'ActivityConfigController/getAppointInfoById';
if (!params.activityId && (params.activityType === '3')) {
params.activityId = params.travelId;
params.activityType = 6;
} else if (!params.activityId && (params.activityType !== '3')) {
apiUrl = 'ActivityConfigController/getAllAppointDate';
}
return service.get(apiUrl, {
storeId: params.storeId,
activityId: params.activityId,
activityType: params.activityType,
isFront: params.isFront
}, {
code: 200
}).then(result => {
return result;
});
};
// 潮流顾问,发型师套餐列表
const adviserList = (params) => {
return service.get('ActivityConfigController/getActivityList', {
storeId: params.storeId,
activityType: params.activityType,
id: params.id || '',
hairStylistId: params.hairStylistId || '',
isFront: params.isFront,
filter: params.filter || '',
}, {
code: 200
}).then(result => {
return result;
});
};
// 潮流之旅详情
const travelDetail = (params) => {
return service.get('MenuConfigController/getFrontMainTour', {
... ... @@ -354,21 +413,6 @@ const travelDetail = (params) => {
});
};
// 潮流顾问,发型师套餐列表
const adviserList = (params) => {
return service.get('ActivityConfigController/getActivityList', {
storeId: params.storeId,
activityType: params.activityType,
id: params.id || '',
hairStylistId: params.hairStylistId || '',
isFront: params.isFront
}, {
code: 200
}).then(result => {
return result;
});
};
// 潮流之旅
const travel = (params) => {
return Promise.all([
... ... @@ -405,12 +449,14 @@ const travel = (params) => {
let build2 = [];
for (let item in result[0].dateList) {
build2.push({
date: _MD(item),
week: result[0].dateList[item],
dateOrigin: item,
dateParse: Date.parse(item) / 1000
});
if (item) {
build2.push({
date: _MD(item),
week: result[0].dateList[item],
dateOrigin: item,
dateParse: Date.parse(item) / 1000
});
}
}
resu.dateList = build2;
}
... ... @@ -449,6 +495,8 @@ const adviser = (params) => {
name: result[0].data.activityName,
summary: result[0].data.summary,
image: result[0].data.image,
isCanAppoint: result[0].data.isCanAppoint === 1,
storeId: params.storeId
};
resu.content = result[0].data.detail;
... ... @@ -459,12 +507,14 @@ const adviser = (params) => {
if (result && result[1] && result[1].data) {
for (let item in result[1].data) {
build.push({
date: _MD(item),
week: result[1].data[item],
dateOrigin: item,
dateParse: Date.parse(item) / 1000
});
if (item) {
build.push({
date: _MD(item),
week: result[1].data[item],
dateOrigin: item,
dateParse: Date.parse(item) / 1000
});
}
}
resu.dateList = build;
... ... @@ -499,37 +549,6 @@ const getStyle = (params) => {
});
};
// 获取日期,星期
const getDate = (params) => {
if (!params.activityId) {
params.activityId = params.travelId;
params.activityType = 6;
}
return service.get('ActivityConfigController/getAppointInfoById', {
activityId: params.activityId,
activityType: params.activityType,
isFront: params.isFront
}, {
code: 200
}).then(result => {
return result;
});
};
// 获取日期,星期(所有潮流顾问, 发型师详情页)
const getDate2 = (params) => {
return service.get('ActivityConfigController/getAppointDateForTour', {
storeId: params.storeId,
activityType: params.activityType,
hairStylistId: params.id || '',
isFront: params.isFront
}, {
code: 200
}).then(result => {
return result;
});
};
// 获取风格热推
const getStylePush = (params) => {
return service.get('MenuConfigController/getFrontMenuPhotoStyle', {
... ... @@ -545,17 +564,20 @@ const getStylePush = (params) => {
// 获取时间列表
const getTimeList = (params) => {
if (!params.activityId) {
params.activityId = params.travelId;
params.appointType = 6;
}
let ajaxUrl = '';
if (params.userId) {
ajaxUrl = 'ActivityConfigController/getAppointTimeForTour';
if (!params.activityId && (params.appointType !== '3')) {
ajaxUrl = 'ActivityConfigController/getAllAppointTime';
} else {
ajaxUrl = 'AppointmentController/getAppointTime';
if (!params.activityId) {
params.activityId = params.travelId;
params.appointType = 6;
}
if (params.userId) {
ajaxUrl = 'ActivityConfigController/getAppointTimeForTour';
} else {
ajaxUrl = 'AppointmentController/getAppointTime';
}
}
return service.get(ajaxUrl, {
... ... @@ -579,13 +601,15 @@ const getTimeList = (params) => {
if (result && result.data && result.data.timeMap) {
for (let item in result.data.timeMap) {
build.push({
time: _HM(new Date(item * 1000)),
originTime: item,
use: result.data.timeMap[item],
date2: _MDHm(new Date(item * 1000)),
date: _MYDHm(new Date(item * 1000)),
});
if (item) {
build.push({
time: _HM(new Date(item * 1000)),
originTime: item,
use: result.data.timeMap[item],
date2: _MDHm(new Date(item * 1000)),
date: _MYDHm(new Date(item * 1000)),
});
}
}
resu.appointNum = result.data.appointNum;
resu.getTimeList = build;
... ... @@ -616,7 +640,7 @@ const photography = (params) => {
if (result) {
if (result[0] && result[0].data) {
resu.detail = {
bigPic: result[0].data.mainPushUrl
bigPic: result[0].data.pictureUrl.split(',')[0]
};
resu.content = result[0].data.detail;
}
... ... @@ -697,7 +721,7 @@ const packageDetail = (params) => {
limit: result[0].data.styleNumber,
styleId: result[0].data.styleList
};
resu.isAppointment = result[0].data.isAppointment === 1;
resu.isAppointment = result[0].data.isCanAppoint === 1;
resu.content = result[0].data.detail;
}
... ... @@ -720,6 +744,7 @@ const styleDetail = (params) => {
if (result && result[0] && result[0].data && result[0].data[0]) {
resu.introduction = result[0].data[0].introduction;
resu.sharePic = result[0].data[0].styleImage;
resu.picList = result[0].data[0].styleDemo.split(',');
resu.picList.forEach(val => {
bulid.push({
... ... @@ -753,7 +778,7 @@ const appointment = (params) => {
babyName: params.activityType === '4' || params.activityType === '5',
classChosen: params.activityType === '1',
actChosen: params.activityType === '2',
hideChosen: params.activityType === '3' ? false : true,
// hideChosen: params.activityType === '3' ? false : true,
};
if (result && result[0] && result[0].data) {
... ... @@ -846,12 +871,14 @@ const chosenTime = (params) => {
if (result && result[0] && result[0].data) {
for (let item in result[0].data) {
build.push({
date: _MD(item),
week: result[0].data[item],
dateOrigin: item,
dateParse: Date.parse(item) / 1000
});
if (item) {
build.push({
date: _MD(item),
week: result[0].data[item],
dateOrigin: item,
dateParse: Date.parse(item) / 1000
});
}
}
resu.dateList = build;
... ... @@ -861,10 +888,21 @@ const chosenTime = (params) => {
});
};
// 不选发型师价格
const cutterPrice = (params) => {
return service.get('ActivityConfigController/getMinTimeStylistPrice', {
storeId: params.storeId,
isFront: params.isFront
}).then(result => {
return result;
});
};
// 选择发型师
const chosenCutter = (params) => {
return Promise.all([
cutterList(params),
cutterList(params), // eslint-disable-line
cutterPrice(params),
]).then(result => {
let resu = {};
... ... @@ -882,11 +920,15 @@ const chosenCutter = (params) => {
radio: true,
arr: false,
free: val.minPrice === -1,
noPackage: val.minPrice === null
noPackage: val.minPrice === null,
id: val.id
});
});
resu.cutterList = build;
}
if (result[1]) {
resu.minPrice = result[1].data;
}
return resu;
});
... ... @@ -963,13 +1005,15 @@ const orderList = (params) => {
let params2 = params;
return Promise.all([
orderList1(Object.assign(params1, {statusList: '1,2'})),
orderList1(Object.assign(params2, {statusList: '3,4'}))
orderList1(Object.assign(params1, {statusList: '1'})),
orderList1(Object.assign(params2, {statusList: '2,3,4'})),
storeInfo(params)
]).then(result => {
let resu = {
list1: [],
list2: [],
storeInfo: {},
noOrder: false
};
... ... @@ -1011,6 +1055,14 @@ const orderList = (params) => {
resu.list2 = build;
}
if (result[2] && result[2].data) {
resu.storeInfo = {
name: result[2].data.storeName,
introduction: result[2].data.introduction,
pictureUrl: result[2].data.pictureUrl
};
}
if (!result[0].data && !result[1].data) {
resu.noOrder = true;
}
... ... @@ -1045,7 +1097,6 @@ const orderDetail = (params) => {
latitude: result[1].data.latitude,
storeName: result[1].data.storeName,
address: result[1].data.address,
telephone: result[1].data.telephone,
introduction: result[1].data.introduction,
pictureUrl: result[1].data.pictureUrl
};
... ... @@ -1068,13 +1119,14 @@ const orderDetail = (params) => {
activityId: result[0].data[0].activityId,
stylesName: result[0].data[0].stylesName,
typeStatus: result[0].data[0].activityType,
status: result[0].data[0].appointStatusStr,
status: result[0].data[0].detailStatusStr,
id: result[0].data[0].id,
showBtn: params.showBtn === 'true',
originUrl: result[0].data[0].url,
personName: result[0].data[0].personName,
personId: result[0].data[0].personId,
num: result[0].data[0].appointPersonNum
num: result[0].data[0].appointPersonNum,
canChangeTime: result[0].data[0].isCanAppoint === 1
};
}
}
... ... @@ -1088,11 +1140,10 @@ const orderDetail = (params) => {
};
}
return adviserDetail(newNarams).then(newResult => {
let adviserDetail= '';
let adviserDetailData = '';
if (newResult && newResult.data) {
adviserDetail = {
adviserDetailData = {
name: newResult.data.activityName,
summary: newResult.data.summary,
free: newResult.data.isFree === 1,
... ... @@ -1111,12 +1162,12 @@ const orderDetail = (params) => {
endTime: newResult.data.activityDayEndTime
};
} else {
adviserDetail = {
adviserDetailData = {
adviser: true,
hideAd: true
};
}
resu = Object.assign(resu, {adviserDetail: adviserDetail});
resu = Object.assign(resu, {adviserDetail: adviserDetailData});
return resu;
});
});
... ... @@ -1127,11 +1178,13 @@ const cutterList = (params) => {
return service.get('MenuConfigController/getFrontMenuStylist', {
storeId: params.storeId,
id: params.id || '',
isFront: params.isFront
isFront: params.isFront,
filter: params.filter || '',
}).then(result => {
return result;
});
};
const cutterList2 = (params) => {
return service.get('MenuConfigController/getFrontMenuStylist', {
storeId: params.storeId,
... ... @@ -1198,7 +1251,7 @@ const kidStyle = (params) => {
if (result[2] && result[2].data) {
resu.detail = {
bigPic: result[2].data.mainPushUrl
bigPic: result[2].data.pictureUrl.split(',')[0]
};
resu.content = result[2].data.detail;
}
... ... @@ -1288,19 +1341,22 @@ const cutter = (params) => {
if (result && result[2] && result[2].data) {
for (let item in result[2].data) {
build.push({
date: _MD(item),
week: result[2].data[item],
dateOrigin: item,
dateParse: Date.parse(item) / 1000
});
if (item) {
build.push({
date: _MD(item),
week: result[2].data[item],
dateOrigin: item,
dateParse: Date.parse(item) / 1000
});
}
}
resu.dateList = build;
}
}
}
resu.storeId = params.storeId;
resu.id = params.id;
return resu;
});
};
... ...
... ... @@ -10,17 +10,15 @@ const helpers = global.yoho.helpers;
// 签到
// doc: http://git.yoho.cn/yoho-documents/api-interfaces/blob/master/%E4%BC%9A%E5%91%98%E6%97%A5%E6%B4%BB%E5%8A%A8/%E4%BC%9A%E5%91%98%E6%97%A5%E7%AD%BE%E5%88%B0.md
exports.signin = (uid)=> {
const url = '/activity/UserdaySigninController/signin';
return serviceAPI.post(url, {uid});
return serviceAPI.post('/activity/UserdaySigninController/signin', {uid});
};
// 写留言
// doc: http://git.yoho.cn/yoho-documents/api-interfaces/blob/master/%E4%BC%9A%E5%91%98%E6%97%A5%E6%B4%BB%E5%8A%A8/%E4%BF%9D%E5%AD%98%E7%94%A8%E6%88%B7%E7%95%99%E8%A8%80.md
exports.saveMsg = (uid, nick_name, content) => {
const url = '/activity/UserdayLeaveWordsController/addLeaveWords';
return serviceAPI.post(url, {
return serviceAPI.post('/activity/UserdayLeaveWordsController/addLeaveWords', {
uid,
nick_name,
content
... ... @@ -28,18 +26,16 @@ exports.saveMsg = (uid, nick_name, content) => {
};
exports.queryLeaveWordsList = (uid) => {
const url = '/activity/UserdayLeaveWordsController/queryLeaveWordsList';
return serviceAPI.get(url, {uid});
return serviceAPI.get('/activity/UserdayLeaveWordsController/queryLeaveWordsList', {uid});
};
// 拼手气大转盘 抽奖
// doc: http://git.yoho.cn/yoho-documents/api-interfaces/blob/master/%E4%BC%9A%E5%91%98%E6%97%A5%E6%B4%BB%E5%8A%A8/%E6%8B%BC%E6%89%8B%E6%B0%94%E5%A4%A7%E8%BD%AC%E7%9B%98%E6%8A%BD%E5%A5%96.md
exports.addPrizeLog = (uid, prize_type) => {
const url = '/activity/UserdayPrizeLogController/addPrizeLog';
return serviceAPI.post(url, {
return serviceAPI.post('/activity/UserdayPrizeLogController/addPrizeLog', {
uid,
prize_type
});
... ... @@ -47,9 +43,8 @@ exports.addPrizeLog = (uid, prize_type) => {
// 查询 中奖纪录
exports.queryPrizeLog = (uid, prize_type) => {
const url = '/activity/UserdayPrizeLogController/queryPrizeLog';
return serviceAPI.get(url, {
return serviceAPI.get('/activity/UserdayPrizeLogController/queryPrizeLog', {
uid,
prize_type
});
... ... @@ -68,9 +63,8 @@ exports.getCoins = uid => {
// 获取抽奖人数
// doc: http://git.yoho.cn/yoho-documents/api-interfaces/blob/master/%E4%BC%9A%E5%91%98%E6%97%A5%E6%B4%BB%E5%8A%A8/%E6%9F%A5%E8%AF%A2%E5%8F%82%E4%B8%8E%E6%8A%BD%E5%A5%96%E4%BA%BA%E6%95%B0.md
exports.getJoinNum = prize_type => {
const url = '/activity/UserdayPrizeLogController/queryPrizeLogNum';
return serviceAPI.get(url, {
return serviceAPI.get('/activity/UserdayPrizeLogController/queryPrizeLogNum', {
prize_type,
});
};
... ... @@ -82,7 +76,7 @@ exports.getGoods = cate => {
let skns = '';
let cates = Object.keys(cate);
_.forEach(cate, function(val, key) {
_.forEach(cate, function(val) {
skns = skns.concat(',').concat(val.join(','));
});
... ...
... ... @@ -10,24 +10,21 @@ const helpers = global.yoho.helpers;
// 签到
// doc: http://git.yoho.cn/yoho-documents/api-interfaces/blob/master/%E4%BC%9A%E5%91%98%E6%97%A5%E6%B4%BB%E5%8A%A8/%E4%BC%9A%E5%91%98%E6%97%A5%E7%AD%BE%E5%88%B0.md
exports.signin = (uid)=> {
const url = '/activity/UserdaySigninController/signin';
return serviceAPI.post(url, {uid});
return serviceAPI.post('/activity/UserdaySigninController/signin', {uid});
};
exports.queryLeaveWordsList = (uid) => {
const url = '/activity/UserdayLeaveWordsController/queryLeaveWordsList';
return serviceAPI.get(url, {uid});
return serviceAPI.get('/activity/UserdayLeaveWordsController/queryLeaveWordsList', {uid});
};
// 拼手气大转盘 抽奖
// doc: http://git.yoho.cn/yoho-documents/api-interfaces/blob/master/%E4%BC%9A%E5%91%98%E6%97%A5%E6%B4%BB%E5%8A%A8/%E6%8B%BC%E6%89%8B%E6%B0%94%E5%A4%A7%E8%BD%AC%E7%9B%98%E6%8A%BD%E5%A5%96.md
exports.addPrizeLog = (uid, prize_type) => {
const url = '/activity/UserdayPrizeLogController/addPrizeLog';
return serviceAPI.post(url, {
return serviceAPI.post('/activity/UserdayPrizeLogController/addPrizeLog', {
uid,
prize_type
});
... ... @@ -35,9 +32,8 @@ exports.addPrizeLog = (uid, prize_type) => {
// 查询 中奖纪录
exports.queryPrizeLog = (uid, prize_type) => {
const url = '/activity/UserdayPrizeLogController/queryPrizeLog';
return serviceAPI.get(url, {
return serviceAPI.get('/activity/UserdayPrizeLogController/queryPrizeLog', {
uid,
prize_type
});
... ... @@ -56,9 +52,8 @@ exports.getCoins = uid => {
// 获取抽奖人数
// doc: http://git.yoho.cn/yoho-documents/api-interfaces/blob/master/%E4%BC%9A%E5%91%98%E6%97%A5%E6%B4%BB%E5%8A%A8/%E6%9F%A5%E8%AF%A2%E5%8F%82%E4%B8%8E%E6%8A%BD%E5%A5%96%E4%BA%BA%E6%95%B0.md
exports.getJoinNum = prize_type => {
const url = '/activity/UserdayPrizeLogController/queryPrizeLogNum';
return serviceAPI.get(url, {
return serviceAPI.get('/activity/UserdayPrizeLogController/queryPrizeLogNum', {
prize_type,
});
};
... ... @@ -70,7 +65,7 @@ exports.getGoods = cate => {
let skns = '';
let cates = Object.keys(cate);
_.forEach(cate, function(val, key) {
_.forEach(cate, function(val) {
skns = skns.concat(',').concat(val.join(','));
});
... ...
... ... @@ -107,7 +107,8 @@ router.get('/invite/checkOldUserCoupon', invite.checkOldUserCoupon);
router.get('/invite/validRegCode', invite.validRegCode);
router.get('/invite/register', invite.register);
router.get('/invite/receiveCoupons', invite.receiveCoupons);
router.get(/\/invite\/mycoupons_([\d]+)_([\d]+)_([\d]+)_([\d]+).html/, invite.checkType, invite.myCoupons); // 好友领取完优惠券的页面
router.get(/\/invite\/mycoupons_([\d]+)_([\d]+)_([\d]+)_([\d]+).html/,
invite.checkType, invite.myCoupons); // 好友领取完优惠券的页面
router.get('/invite/getwxinfo', invite.getwxinfo);
router.get('/invite/shareover', invite.shareover);
router.get('/invite/over', invite.over);
... ...
<div class="yoho-live yoho-page">
{{! 导航条}}
{{#unless isApp}}
<div class="home-header clearfix yoho-header">
<div class="home-header clearfix yoho-header" id="home-header">
<a href="javascript:history.go(-1);" class="iconfont nav-back buriedpoint" data-bp-id="page_header_back_0"></a>
<p class="nav-title">直播列表</p>
</div>
<script type="text/javascript">
var isWechat = /micromessenger/i.test(navigator.userAgent || '');
if (isWechat) {
document.getElementById('home-header').classList.add('hide');
}
</script>
{{/unless}}
{{#content}}
{{! 头部banner}}
{{#if focus}}
... ...
... ... @@ -6,7 +6,7 @@
<span>{{this}}</span>
{{/ studentArr}}
</span>
<a class="checkMySchool"></a>
<a class="check-my-school"></a>
</div>
<div class="privilege clearfix">
<a class="privilege-item open-dia" href="javascript:void(0);">
... ...
... ... @@ -17,5 +17,9 @@
<p>2、您可以和2-3名好友一起来参加活动,共同体验潮流之旅;</p>
<p>3、活动时长预估时间,如超出时间请您谅解。</p>
</div>
{{# detail}}
{{#if isCanAppoint}}
<a class="foot-btn ok" href="//m.yohobuy.com/activity/trend/appointment?storeId={{storeId}}&typeStatus=3">立即预约</a>
{{/if}}
{{/ detail}}
</div>
\ No newline at end of file
... ...
... ... @@ -48,7 +48,7 @@
</div>
{{/ packageChosen}}
{{# styleChosen}}
<div class="chose-item select need">
<div class="chose-item select">
<span class="label">选择风格</span>
<a href="http://m.yohobuy.com/activity/trend/chosen-style?storeId={{storeId}}&chosenType=1&typeStatus={{typeStatus}}">
<input class="inp chosen-style eps require" type="text" label="风格" placeholder="未选择" readonly="readonly" />
... ...
... ... @@ -3,8 +3,8 @@
{{#if coverUrl}}
<img src="{{image coverUrl}}">
{{/if}}
<p class="title">{{title}}</p>
<p>{{summary}}</p>
<p class="title">{{titles}}</p>
<p class="tip-s hide">{{summary}}</p>
<div class="content">{{{content}}}</div>
</div>
</div>
\ No newline at end of file
... ...
<div class="trend-c no-pb share-store">
<div class="trend-c no-pb share-map">
{{# infos}}
{{> trend/article}}
{{/ infos}}
... ...
... ... @@ -4,12 +4,15 @@
<label class="top">
<input type="radio" name="cutter" class="diy" data="不预约发型师" />
不预约发型师
{{# minPrice}}
<span class="min-price">¥<span>{{this}}</span></span>
{{/ minPrice}}
</label>
<div class="cutter side">
{{# cutterList}}
<label class="cutter-item clearfix">
{{# radio}}
<input type="radio" name="cutter" class="diy" data={{name}} />
<input type="radio" name="cutter" class="diy" data="{{name}}" id="{{id}}" />
{{/ radio}}
<div class="pic">
<img src="{{image img}}">
... ...
<div class="trend-c">
<div class="side-main grey-bg">
<div class="style-c">
<div class="top"><span class="icon-pic tip"></span>如更换套餐请重新选择</div>
<div class="top"><span class="icon-pic tip"></span><span class="text">如更换套餐请重新选择</span></div>
<p class="style-tip">当前套餐可选风格<span class="total"></span>种,已选<span class="now"></span></p>
<ul class="style-ul clearfix">
{{# styleList}}
... ...
<div class="trend-c chosen-time">
<p class="date-tip {{#if hide}}hide{{/if}}"><span class="icon-pic tip"></span>如更换{{#if needAdv}}顾问{{else}}套餐{{/ if}}请重新选择</p>
<div class="trend-c chosen-time time-tag">
<p class="date-tip {{#if hide}}hide{{/if}}">
<span class="icon-pic tip"></span>
<span class="text">如更换{{#if needAdv}}顾问{{else}}套餐{{/ if}}请重新选择</span>
</p>
<div class="side-main">
<div class="time-nav wrapper clearfix">
<ul class="nav-ul">
... ...
... ... @@ -8,7 +8,6 @@
{{else}}
<span class="price">免费</span>
{{/if}}
</div>
<div class="tip">
<div>
... ...
<div class="trend-c share-cutter">
{{> trend/adviser-info}}
{{#if packageList}}
<div class="big-title">造型套餐</div>
<div class="package-top">
<span></span>
预约后需到店付款
</div>
{{/if}}
{{# packageList}}
{{> trend/cutter-package}}
{{/ packageList}}
... ... @@ -17,7 +19,7 @@
<div class="pull-pic-list clearfix">
{{# stylist}}
<div class="box">
<img src="{{image this}}" />
<img data="{{image this}}" />
</div>
{{/ stylist}}
</div>
... ...
... ... @@ -11,7 +11,7 @@
{{/if}}
</div>
<div class="tip-tittle">
<span class="icon-pic tip"></span>您可以选择<span class="red">预约发型师</span>或者<span class="red">直接预约套餐</span>来理发
<span class="icon-pic tip2"></span>您可以选择<span class="red">预约发型师</span>或者<span class="red">直接预约套餐</span>来理发
</div>
<div class="big-title">发型师</div>
<div class="cutter">
... ...
<div class="trend-c map-c share-store">
<div class="trend-c map-c share-map">
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=55E5CFCa68831302cebe0acdd575c77d"></script>
<script type="text/javascript" src="http://api.map.baidu.com/library/SearchInfoWindow/1.5/src/SearchInfoWindow_min.js"></script>
<div id="map"></div>
... ...
... ... @@ -21,6 +21,7 @@
门店电话:{{telephone}}
<span class="iconfont icon-arr">&#xe604;</span>
</a>
<input type="hidden" class="share-info" data-name="{{name}}" data-intro="{{introduction}}" data-pic="{{pictureUrl}}" />
{{/ storeInfo}}
</div>
{{# adviserDetail}}
... ... @@ -113,6 +114,7 @@
</div>
{{/if}}
{{#if ../adviserDetail/kidStyle}}
{{#if ../userInfo/personName}}
<div class="chosen chosen-detail">
<a class="chose-item select" href="//m.yohobuy.com/activity/trend/cutter?storeId={{../adviserDetail/storeId}}&id={{../userInfo/personId}}&typeStatus={{../adviserDetail/activityType}}&cutterName={{../userInfo/personName}}">
<span class="label">发型师</span>
... ... @@ -121,6 +123,7 @@
</a>
</div>
{{/if}}
{{/if}}
{{#if stylesName}}
<p class="tip-top">风格</p>
<p class="tip-main">{{stylesName}}</p>
... ... @@ -128,8 +131,10 @@
<p class="tip-top">预约时间</p>
<p class="tip-main"><span id="detail-time" date="{{originTime}}">{{appointTime}}</span>
{{#if showBtn}}
{{#if canChangeTime}}
<a class="chan-btn" id={{id}} href="//m.yohobuy.com/activity/trend/chosen-time?storeId={{storeId}}&activityId={{activityId}}&typeStatus={{typeStatus}}&chosenType=2&order=true">更改</a>
{{/if}}
{{/if}}
</p>
</div>
{{/ userInfo}}
... ...
<div class="trend-c share-order" {{#if noOrder}}style="background-color: #fff;"{{/if}}>
{{# storeInfo}}
<input type="hidden" class="share-info" data-name="{{name}}" data-intro="{{introduction}}" data-pic="{{pictureUrl}}" />
{{/ storeInfo}}
{{#if noOrder}}
<div class="success">
<div class="success-pic fail-pic"></div>
... ...
<div class="trend-c package-detail">
{{# detail}}
{{#if img}}
<img src="{{image img}}">
<img class="share-pic" src="{{image img}}">
{{/if}}
<div class="package-item only">
<div class="top clearfix package-detail">
... ...
<div class="trend-c">
<div class="trend-c share-photography">
<div class="box-padding">
{{# detail}}
{{#if bigPic}}
... ... @@ -16,11 +16,13 @@
<div class="swiper-wrapper">
{{# swiper}}
<div class="swiper-slide">
<a class="pic" href="http://m.yohobuy.com/activity/trend/style-detail?id={{id}}&storeId={{storeId}}&styleName={{name}}">
<img src="{{image pic}}">
</a>
<p class="title eps">{{name}}</p>
<p class="main">{{introduction}}</p>
<a href="http://m.yohobuy.com/activity/trend/style-detail?id={{id}}&storeId={{storeId}}&styleName={{name}}">
<div class="pic limit-pic">
<img src="{{image pic}}">
</div>
<p class="title eps">{{name}}</p>
<p class="main">{{introduction}}</p>
</a>
</div>
{{/ swiper}}
</div>
... ... @@ -33,15 +35,17 @@
<span>套餐</span>
</div>
<div class="tab-item hide">
<ul class="tab-ul clearfix">
{{# styleList}}
<li>
<a href="http://m.yohobuy.com/activity/trend/style-detail?id={{id}}&storeId={{../storeId}}&styleName={{name}}">
<img src="{{image img}}">
</a>
</li>
{{/ styleList}}
</ul>
<div class="tab-ul clearfix">
<div class="pull-pic-list clearfix">
{{# styleList}}
<div class="box">
<a href="http://m.yohobuy.com/activity/trend/style-detail?id={{id}}&storeId={{../storeId}}&styleName={{name}}">
<img data="{{image img}}">
</a>
</div>
{{/ styleList}}
</div>
</div>
</div>
<div class="tab-item hide">
<div class="package-top">
... ...
... ... @@ -4,7 +4,7 @@
{{/ infos}}
{{#if infos}}
{{#detail}}
<a class="more-article" href="//m.yohobuy.com/activity/trend/article-list?storeId={{storeId}}">更多活动咨询
<a class="more-article" href="//m.yohobuy.com/activity/trend/article-list?storeId={{storeId}}&name={{storeName}}&intro={{introduction}}&pic={{image pictureUrl}}">更多活动资讯
<span class="iconfont icon-arr">&#xe604;</span>
</a>
{{/ detail}}
... ... @@ -23,12 +23,13 @@
<a class="list-item">
<span class="icon-pic clock"></span>
营业时间:{{businessTime}}
<span class="iconfont icon-arr">&#xe604;</span>
</a>
<a class="list-item" href="//m.yohobuy.com/activity/trend/map?jd={{longitude}}&wd={{latitude}}&name={{storeName}}&intro={{introduction}}&tel={{telephone}}&adr={{address}}&pic={{image pictureUrl}}">
<a class="list-item"{{#if longitude}} href="//m.yohobuy.com/activity/trend/map?jd={{longitude}}&wd={{latitude}}&name={{storeName}}&intro={{introduction}}&tel={{telephone}}&adr={{address}}&pic={{image pictureUrl}}"{{/if}}>
<span class="icon-pic adr"></span>
门店地址:{{address}}
{{#if longitude}}
<span class="iconfont icon-arr">&#xe604;</span>
{{/if}}
</a>
<a class="list-item" href="tel:{{telephone}}">
<span class="icon-pic tel"></span>
... ... @@ -36,6 +37,7 @@
<span class="iconfont icon-arr">&#xe604;</span>
</a>
</div>
<input class="share-inp" type="hidden" data-name="{{storeName}}" data-tip="{{introduction}}" data-pic="{{pictureUrl}}" />
{{/ detail}}
</div>
</div>
... ...
<div class="trend-c">
<div class="box-padding style-detail">
<div class="content">{{introduction}}</div>
<input class="share-pic" type="hidden" value="{{sharePic}}" />
<div class="pull-pic-list clearfix">
{{# picList}}
<div class="box">
<img src="{{image imgSrc}}" />
<img data="{{image imgSrc}}" />
</div>
{{/ picList}}
</div>
... ...
... ... @@ -10,10 +10,12 @@
{{# adviser}}
{{> trend/adviser}}
{{/ adviser}}
{{#if dateList}}
<div class="big-title">
可预约时间
</div>
{{> trend/date-list}}
{{/if}}
<div class="s-tip">
<p>小贴士:</p>
<p>1、活动当天记得提前10-15分钟到店,以保证您能够准时参加活动;</p>
... ...
<div class="class">
<div class="class-item clearfix">
<a class="pic" href="//m.yohobuy.com/activity/trend/act-detail?activityId={{id}}&name={{name}}&price={{price}}&startDate={{startDate}}&endDate={{endDate}}&startTime={{startTime}}&endTime={{endTime}}&status={{status}}&storeId={{storeId}}">
<a class="pic" href="//m.yohobuy.com/activity/trend/act-detail?activityId={{id}}&name={{name}}&price={{price}}&startDate={{startDate}}&endDate={{endDate}}&startTime={{startTime}}&endTime={{endTime}}&status={{status}}&storeId={{storeId}}&pic={{image image}}">
<img src="{{image image}}">
</a>
<div class="info">
<span class="name">{{name}}</span>
{{#if free}}
<span class="free">免费</span>
{{else}}
<span class="price"><span>¥</span>{{price}}</span>
{{/if}}
</div>
<div class="tip">
<div>
<p>日期:{{startDate}}{{endDate}}</p>
<p>时间:{{startTime}}{{endTime}}</p>
<div class="info">
<span class="name">{{name}}</span>
{{#if free}}
<span class="free">免费</span>
{{else}}
<span class="price"><span>¥</span>{{price}}</span>
{{/if}}
</div>
{{#if end}}
<a class="end">已结束</a>
{{else}}
{{#if needApo}}
{{#if apoStatus}}
<a href="//m.yohobuy.com/activity/trend/act-detail?activityId={{id}}&name={{name}}&price={{price}}&startDate={{startDate}}&endDate={{endDate}}&startTime={{startTime}}&endTime={{endTime}}&status={{status}}&storeId={{storeId}}">立即预约</a>
<div class="tip">
<div>
<p>日期:{{startDate}}{{endDate}}</p>
<p>时间:{{startTime}}{{endTime}}</p>
</div>
{{#if end}}
<div class="end a">已结束</div>
{{else}}
{{#if needApo}}
{{#if apoStatus}}
<div class="a">立即预约</div>
{{else}}
<div class="disable a">已约满</div>
{{/if}}
{{else}}
<a class="disable">已约满</a>
<div class="any-time a">免预约</div>
{{/if}}
{{else}}
<a class="any-time">免预约</a>
{{/if}}
{{/if}}
</div>
</div>
</a>
</div>
</div>
\ No newline at end of file
... ...
... ... @@ -8,4 +8,5 @@
<div class="intro">{{summary}}</div>
<div class="info">{{intro}}</div>
</div>
<input class="cutter-id" type="hidden" value="{{id}}" />
</div>
\ No newline at end of file
... ...
... ... @@ -3,10 +3,12 @@
<a class="pic" href="//m.yohobuy.com/activity/trend/article-detail?informationId={{id}}">
<img src="{{image coverUrl}}">
</a>
<p class="title">{{title}}</p>
<a href="//m.yohobuy.com/activity/trend/article-detail?informationId={{id}}">
<p class="title">{{title}}</p>
</a>
<div class="tip">
{{summary}}
<a href="//m.yohobuy.com/activity/trend/article-detail?informationId={{id}}">查看详情</a>
<a href="//m.yohobuy.com/activity/trend/article-detail?informationId={{id}}">{{summary}}</a>
<a class="a" href="//m.yohobuy.com/activity/trend/article-detail?informationId={{id}}">查看详情</a>
</div>
</div>
</div>
\ No newline at end of file
... ...
<div class="class">
<div class="class-item clearfix">
<a class="pic" href="//m.yohobuy.com/activity/trend/class-detail?activityId={{id}}&name={{name}}&price={{price}}&startDate={{startDate}}&endDate={{endDate}}&startTime={{startTime}}&endTime={{endTime}}&status={{status}}&storeId={{storeId}}">
<a class="pic" href="//m.yohobuy.com/activity/trend/class-detail?activityId={{id}}&name={{name}}&price={{price}}&startDate={{startDate}}&endDate={{endDate}}&startTime={{startTime}}&endTime={{endTime}}&status={{status}}&storeId={{storeId}}&pic={{image image}}">
<img src="{{image image}}">
</a>
<div class="info">
<span class="name">{{name}}</span>
{{#if free}}
<span class="free">免费</span>
{{else}}
<span class="price"><span>¥</span>{{price}}</span>
{{/if}}
</div>
<div class="tip">
<div>
<p>日期:{{startDate}}{{endDate}}</p>
<p>时间:{{startTime}}{{endTime}}</p>
<div class="info">
<span class="name">{{name}}</span>
{{#if free}}
<span class="free">免费</span>
{{else}}
<span class="price"><span>¥</span>{{price}}</span>
{{/if}}
</div>
{{#if end}}
<a class="end">已结束</a>
{{else}}
{{#if needApo}}
{{#if apoStatus}}
<a href="//m.yohobuy.com/activity/trend/class-detail?activityId={{id}}&name={{name}}&price={{price}}&startDate={{startDate}}&endDate={{endDate}}&startTime={{startTime}}&endTime={{endTime}}&status={{status}}&storeId={{storeId}}">立即预约</a>
<div class="tip">
<div>
<p>日期:{{startDate}}{{endDate}}</p>
<p>时间:{{startTime}}{{endTime}}</p>
</div>
{{#if end}}
<div class="end a">已结束</div>
{{else}}
{{#if needApo}}
{{#if apoStatus}}
<div class="a">立即预约</div>
{{else}}
<div class="disable a">已约满</div>
{{/if}}
{{else}}
<a class="disable">已约满</a>
<div class="any-time a">免预约</div>
{{/if}}
{{else}}
<a class="any-time">免预约</a>
{{/if}}
{{/if}}
</div>
</div>
</a>
</div>
</div>
\ No newline at end of file
... ...
... ... @@ -29,7 +29,7 @@ const index = (req, res) => {
width750: true,
pageHeader: headerModel.setNav({
navTitle: '购物车',
backUrl: 'javascript:;',
backUrl: 'javascript:;', // eslint-disable-line
navBack: true,
suggestSub: {
text: ' '
... ... @@ -352,7 +352,9 @@ const modifyPriceGift = (req, res, next) => {
// shoppingKey = 'dc9d09e2ffd8607f2cfd8b9c95962923';
// uid = 20422448;
return indexModel.modifyCartPriceGiftProduct(uid, newProductSku, newProductSkn, promotionId, shoppingKey).then(data => {
return indexModel.modifyCartPriceGiftProduct(uid, newProductSku,
newProductSkn, promotionId, shoppingKey)
.then(data => {
data ? res.json(data) : res.status(400).json({
message: '操作失败'
});
... ...
... ... @@ -4,8 +4,8 @@ const helpers = global.yoho.helpers;
const co = require('bluebird').coroutine;
const cartModel = require('../models/cart');
const headerModel = require('../../../doraemon/models/header');
const userModel = require('../../serverAPI/user');
const addressModel = require('../../serverAPI/user/address');
const userModel = require('../models/user');
const addressModel = require('../models/address');
const orderModel = require('../models/order');
const crypto = global.yoho.crypto;
const authcode = require(global.utils + '/authcode');
... ... @@ -122,7 +122,8 @@ exports.orderEnsure = (req, res, next) => {
module: 'cart',
page: 'order-ensure',
width750: true,
title: '确认订单'
title: '确认订单',
localCss: true
};
res.render('order-ensure', viewData);
... ... @@ -296,7 +297,8 @@ exports.selectCoupon = (req, res) => {
title: '选择优惠券',
selectCouponPage: true,
pageHeader: headerData,
pageFooter: true
pageFooter: true,
localCss: true
});
};
... ... @@ -346,9 +348,7 @@ exports.selectAddress = (req, res, next) => {
let moreUrl = (req.get('Referer') && !/\/home\/addressAct/.test(req.get('Referer')) &&
!/selectAddress/.test(req.get('Referer'))) ?
req.get('Referer') : helpers.urlFormat('/cart/index/new/orderEnsure', {
cartType: req.cookies._cartType
}); // 取跳过来的url
req.get('Referer') : ''; // 取跳过来的url
address = address.data;
... ... @@ -360,7 +360,9 @@ exports.selectAddress = (req, res, next) => {
req.session.addressMore = moreUrl; // TODO: 注意cookie-session
}
// moreUrl = req.session.addressMore;
moreUrl = req.session.addressMore || moreUrl || helpers.urlFormat('/cart/index/new/orderEnsure', {
cartType: req.cookies._cartType
});
let headerData = headerModel.setNav({
navTitle: '选择地址',
... ... @@ -374,7 +376,8 @@ exports.selectAddress = (req, res, next) => {
pageHeader: headerData,
pageFooter: true,
moreUrl,
address
address,
localCss: true
});
}).catch(next);
};
... ... @@ -406,6 +409,7 @@ exports.invoiceInfo = (req, res, next) => {
pageHeader: headerData,
module: 'cart',
page: 'select-invoice',
localCss: true,
addressMore: helpers.urlFormat('/cart/index/new/orderEnsure', {cartType: req.cookies._cartType})
}));
})().catch(next);
... ...
... ... @@ -3,7 +3,7 @@
* @Author: Targaryen
* @Date: 2017-01-04 15:17:51
* @Last Modified by: Targaryen
* @Last Modified time: 2017-02-20 18:16:09
* @Last Modified time: 2017-03-20 14:03:48
*/
'use strict';
... ... @@ -18,7 +18,6 @@ const Payment = require('../helpers/payment');
const WxPay = require('../helpers/pay/wechat');
const common = require('../helpers/pay/common');
const logger = global.yoho.logger;
const _ = require('lodash');
/**
* 支付中心
... ... @@ -35,13 +34,13 @@ const payCenter = (req, res, next) => {
if (!orderCode || !uid) {
logger.info(`payCenter:no orderCode or uid:orderCode ${orderCode}, uid ${uid}`);
res.redirect('/');
return res.redirect('/');
}
// 如果支付开关关闭,走老版本的支付
if (_.get(req.app.locals.wap, 'pay.newPay', false) === false) {
return res.redirect(302, helpers.urlFormat('/home/orders/pay', {order_code: orderCode}));
}
// // 如果支付开关关闭,走老版本的支付
// if (!req.app.locals.devEnv && _.get(req.app.locals.wap, 'pay.newPay', false) === false) {
// return res.redirect(302, helpers.urlFormat('/home/orders/pay', {order_code: orderCode}));
// }
if (sessionKey) {
sessionKey = sessionKey.substr(0, sessionKey.length - 8);
... ... @@ -88,7 +87,7 @@ const payCenter = (req, res, next) => {
let responseData = {
pageHeader: headerModel.setNav({
navTitle: '支付中心',
backUrl: 'javascript:void(0);'
backUrl: 'javascript:void(0);' // eslint-disable-line
}),
module: 'cart',
page: 'pay',
... ... @@ -127,7 +126,11 @@ const pay = (req, res, next) => {
}
if (!orderCode || !uid) {
return res.redirect('/');
return res.json({
code: 400,
message: '订单或用户信息不存在!',
url: '/'
});
}
co(function* () {
... ... @@ -140,7 +143,7 @@ const pay = (req, res, next) => {
if (!orderDetail || !orderDetail.data) {
return res.json({
code: 400,
msg: '没有找到该订单!'
message: '没有找到该订单!'
});
}
... ... @@ -149,8 +152,9 @@ const pay = (req, res, next) => {
return res.json({
code: 400,
msg: '订单已经取消'
}).redirect(url);
message: '订单已经取消',
url: url
});
}
Payment.pay(user, orderDetail.data, payment, {
... ... @@ -162,9 +166,17 @@ const pay = (req, res, next) => {
return res.json(result);
}
if (result && result.data && result.data.href && paymentCode === payModel.payments.alipay) {
return res.redirect(result.data.href);
return res.json({
code: 200,
message: '校验成功',
url: result.data.href
});
} else {
return res.redirect('/');
return res.json({
code: 400,
message: '系统错误!',
url: '/'
});
}
});
})().catch(next);
... ... @@ -188,7 +200,7 @@ const payCod = (req, res, next) => {
let param = {
uid: req.user.uid,
udid: req.sessionID || require('md5')(req.ip) || 'yoho',
udid: req.sessionID || require('yoho-md5')(req.ip) || 'yoho',
orderCode: req.query.order_code,
contentCode: '78d0fb6c97d691863286edcb4d8abfa9',
client_id: req.cookies._yasvd || '',
... ... @@ -234,7 +246,7 @@ const payAli = (req, res, next) => {
let param = {
uid: req.user.uid,
udid: req.sessionID || require('md5')(req.ip) || 'yoho',
udid: req.sessionID || require('yoho-md5')(req.ip) || 'yoho',
orderCode: req.query.out_trade_no,
contentCode: '78d0fb6c97d691863286edcb4d8abfa9'
};
... ... @@ -285,7 +297,7 @@ const payZero = (req, res, next) => {
let param = {
uid: req.user.uid,
udid: req.sessionID || require('md5')(req.ip) || 'yoho',
udid: req.sessionID || require('yoho-md5')(req.ip) || 'yoho',
orderCode: req.query.order_code,
contentCode: '78d0fb6c97d691863286edcb4d8abfa9',
isPay: true
... ...
... ... @@ -11,7 +11,7 @@ const helpers = global.yoho.helpers;
const common = require('./common');
const sign = require('./sign');
const payHelpersBank = require('./bank');
const md5 = require('md5');
const md5 = require('yoho-md5');
const logger = global.yoho.logger;
const ALIPAY_URL = 'https://mapi.alipay.com/gateway.do';
... ...
... ... @@ -9,7 +9,7 @@
const config = global.yoho.config;
const helpers = global.yoho.helpers;
const sign = require('./sign');
const md5 = require('md5');
const md5 = require('yoho-md5');
const moment = require('moment');
const logger = global.yoho.logger;
const AlipayConfig = config.alipayConfig;
... ...
... ... @@ -14,7 +14,7 @@ const rp = require('request-promise');
const Promise = require('bluebird');
const co = Promise.coroutine;
const sign = require('./sign');
const md5 = require('md5');
const md5 = require('yoho-md5');
const moment = require('moment');
const common = require('./common');
... ...
... ... @@ -3,8 +3,9 @@
const _ = require('lodash');
const helpers = global.yoho.helpers;
const paymentProcess = require(global.utils + '/payment-process');
const shoppingAPI = require('../../serverAPI/order/shopping');
const shoppingAPI = require('./shopping');
const logger = global.yoho.logger;
const payModel = require('../models/pay');
/**
* 转换价格
... ... @@ -332,6 +333,19 @@ exports.searchCoupon = (uid, couponCode) => {
*/
exports.jitDetailData = (uid, cartType, skuList, orderCode, sessionKey,
deliveryId, paymentType, couponCode, yohoCoin) => {
// 订单详情页拆单
if (orderCode) {
return payModel.getOtherDetail({
uid: uid,
orderCode: orderCode,
sessionKey: sessionKey
}).then(result => {
return paymentProcess.transformJit(_.get(result, 'data.package_list', []));
});
}
// 购物车拆单
if (deliveryId) {
// 购物车选择改变字段,重新运算订单数据
... ...
... ... @@ -23,7 +23,7 @@ const indexData = (uid, shoppingKey, saleChannel, cartType) => {
shopping_key: shoppingKey,
sale_channel: saleChannel
}).then((data) => {
return data.code === 200 ? cartProcess.processData(data, cartType) : undefined;
return data.code === 200 ? cartProcess.processData(data, cartType) : void 0;
});
};
... ... @@ -42,7 +42,7 @@ const selectGood = (uid, sku, shoppingKey, cartType) => {
uid: uid,
shopping_key: shoppingKey
}).then((data) => {
return data.code === 200 ? cartProcess.processData(data, cartType) : undefined;
return data.code === 200 ? cartProcess.processData(data, cartType) : void 0;
});
};
... ... @@ -61,7 +61,7 @@ const removeFromCart = (uid, sku, shoppingKey, cartType) => {
uid: uid,
shopping_key: shoppingKey
}).then((data) => {
return data.code === 200 ? cartProcess.processData(data, cartType) : undefined;
return data.code === 200 ? cartProcess.processData(data, cartType) : void 0;
});
};
... ... @@ -80,7 +80,7 @@ const cartProductData = (uid, skn, num) => {
uid: uid,
showcomment: 'N'
}).then((data) => {
return data.code === 200 ? cartProcess.procGoodsDetail(data.data, num) : undefined;
return data.code === 200 ? cartProcess.procGoodsDetail(data.data, num) : void 0;
});
};
... ... @@ -172,7 +172,7 @@ const addToFav = (uid, sku, shoppingKey, cartType) => {
uid: uid,
shopping_key: shoppingKey
}).then((data) => {
return data.code === 200 ? cartProcess.processData(data, cartType) : undefined;
return data.code === 200 ? cartProcess.processData(data, cartType) : void 0;
});
};
... ... @@ -212,7 +212,7 @@ const handleBundleInfo = (productSkn) => {
method: 'app.query.bundleSkn',
product_skn: productSkn,
}).then(data => {
return data.code === 200 ? cartProcess.handleBundleInfo(data) : undefined;
return data.code === 200 ? cartProcess.handleBundleInfo(data) : void 0;
});
};
... ... @@ -229,7 +229,7 @@ const giftProductData = (skn, promotionId) => {
product_skn: skn,
promotion_id: promotionId
}).then(data => {
return data.code === 200 ? cartProcess.procGoodsDetail(data.data) : undefined;
return data.code === 200 ? cartProcess.procGoodsDetail(data.data) : void 0;
});
};
... ... @@ -241,7 +241,7 @@ const getPriceGiftList = (promotionIds, promotionType) => {
method: 'app.Shopping.queryPromotionGifts',
promotion_ids: promotionIds
}).then((data) => {
return data.code === 200 ? cartProcess.procPriceGiftData(data.data, promotionType) : undefined;
return data.code === 200 ? cartProcess.procPriceGiftData(data.data, promotionType) : void 0;
});
};
... ...
... ... @@ -11,7 +11,7 @@ const serviceAPI = global.yoho.ServiceAPI;
const utils = '../../../utils';
const productProcess = require(`${utils}/product-process`);
const ApipayConfig = global.yoho.config.alipayConfig;
const md5 = require('md5');
const md5 = require('yoho-md5');
const payApi = require('./pay-api');
const helpers = global.yoho.helpers;
const _ = require('lodash');
... ...
... ... @@ -4,10 +4,7 @@
{{/if}}
<div class="payapp-list">
{{# payAppInfo}}
{{#if payLink}}
<a href="{{payLink}}">
{{/if}}
<div class="box" id="{{appId}}">
<div class="box" id="{{appId}}" data-href="{{payLink}}">
<div class="icon">
{{#if appIcon}}
<img src="{{appIcon}}" alt="app图标">
... ... @@ -25,9 +22,6 @@
</div>
<div class="iconfont">&#xe604</div>
</div>
{{#if payLink}}
</a>
{{/if}}
{{/ payAppInfo}}
</div>
<div class="loading-toast hide"></div>
... ...
... ... @@ -4,7 +4,6 @@
* @date: 2016/05/09
*/
'use strict';
const _ = require('lodash');
const channelModel = require('../models/channel');
const homeModel = require('../../home/models/index');
const footerModel = require('../../../doraemon/models/footer_tab'); // 底部tab
... ... @@ -31,7 +30,7 @@ let _renderData = {
let _channelPage = (req, res, data) => {
return channelModel.getChannelData({
gender: data.gender,
uid: _.toString(req.user.uid),
uid: req.user.uid,
limit: 6// 首屏先获取前6个楼层,其余用ajax获取
}).then(result => {
_renderData.homeHeader.defaultTerms = result.defaultTerms;
... ... @@ -75,7 +74,7 @@ let getResourceContent = (req, res, next) => {
return channelModel.getChannelResource({
gender: req.query.gender,
uid: _.toString(req.user.uid),
uid: req.user.uid,
}).then(result => {
if (result.length) {
... ...
... ... @@ -170,10 +170,22 @@ const _getLeftNav = (choosed) => {
/**
* 获取热门搜索
**/
const _getSearchIndex = () => {
return API.get('', {
const _getSearchIndex = (params) => {
let channels = {
boys: 1,
girl: 2,
kids: 3,
lifestyle: 4
};
if (params.gender && channels[params.gender]) {
params.yh_channel = channels[params.gender];
delete params.gender;
}
return API.get('', _.assign({
method: 'app.search.getTerms'
}, {
}, params), {
cache: true
}).then((result) => {
if (result && result.code === 200) {
... ... @@ -270,10 +282,14 @@ let getChannelData = (params) => {
var channelData = {};
let navGender = _.cloneDeep(params.gender);
return Promise.all([getChannelResource(params), _getLeftNav(navGender), _getSearchIndex()]).then((data) => {
return Promise.all([getChannelResource(params), _getLeftNav(navGender), _getSearchIndex({
gender: navGender,
uid: params.uid,
})]).then((data) => {
channelData.content = data[0] || []; // 资源位数据
channelData.sideNav = data[1] || []; // 侧边栏数据
channelData.defaultTerms = (data[2] && data[2].defaultTerms && data[2].defaultTerms.length !== 0) ? data[2].defaultTerms[0].content : '搜索商品、品牌';
channelData.defaultTerms = (data[2] && data[2].defaultTerms && data[2].defaultTerms.length) ?
data[2].defaultTerms[0].content : '搜索商品、品牌';
return channelData;
});
};
... ...
<div class="brand-page yoho-page">
{{# channel}}
<div class="genderNav">
<div class="gender-nav">
<ul>
{{# channels}}
<li {{#if active}}class="active"{{/if}} data-id="{{@index}}" data-name="{{channelName}}">
... ... @@ -33,7 +33,7 @@
{{/ hotBrandsScroll}}
{{/ topData}}
<div class="brandNav">
<div class="brand-nav">
<ul>
<li class="allbrand active" data-id="0">
<span>{{brandType}}</span>
... ...
... ... @@ -25,7 +25,7 @@ const praiseArticle = (req, res, next) => {
/* 判断参数是否有效 */
let id = req.body.id,
opt = req.body.opt || 'ok',
udid = req.sessionID || require('md5')(req.ip) || 'yoho';
udid = req.sessionID || require('yoho-md5')(req.ip) || 'yoho';
if (!stringProcess.isNumeric(id)) {
res.json({ code: 400, message: '非法请求', data: '' });
... ...
... ... @@ -54,6 +54,8 @@ exports.index = (req, res, next) => {
case typeLib.gender.lifestyle:
gender = 4;
break;
default:
break;
}
plusstarModel.getAllChannels({
... ...
... ... @@ -40,7 +40,9 @@ const getListData = (req, res, next) => {
let list = r.list || [];
let head3 = _.take(list, 3);
_.forEach(head3, d => d._noLazy = true);
_.forEach(head3, d => {
d._noLazy = true;
});
});
... ... @@ -62,7 +64,9 @@ const getListData = (req, res, next) => {
let list = r.list || [];
let head3 = _.take(list, 3);
_.forEach(head3, d => d._noLazy = true);
_.forEach(head3, d => {
d._noLazy = true;
});
});
res.render('plustar/list', {
module: 'guang',
... ...
... ... @@ -10,21 +10,19 @@ const rssModel = require(`${mRoot}/rss`);
const Feed = require('feed');
const _ = require('lodash');
const moment = require('moment');
const helpers = global.yoho.helpers;
/**
* [订阅逛最新的资讯]
*/
const index = (req, res, next) => {
let gender = req.query.gender || '1,2,3',
items = [];
let gender = req.query.gender || '1,2,3';
return rssModel.getRssArticle(gender).then((result) => {
if (!result) {
return next();
}
res.setHeader('Content-Type', 'text/xml; charset=utf-8');
var feed = new Feed({
let feed = new Feed({
id: 'http://yohobuy.com',
title: '有货逛',
description: 'Yoho!Buy有货 | 年轻人潮流购物中心',
... ... @@ -43,7 +41,8 @@ const index = (req, res, next) => {
author: [{
name: (item.author && item.author.name) || ' '
}],
date: new Date(item.publishTimeLong && parseFloat(item.publishTimeLong) || moment(item.publishTime, 'MM月DD日 HH:mm'))
date: new Date(item.publishTimeLong &&
parseFloat(item.publishTimeLong) || moment(item.publishTime, 'MM月DD日 HH:mm'))
});
});
if (req.params[0] && req.params[0] === '/atom') {
... ... @@ -53,8 +52,7 @@ const index = (req, res, next) => {
}).catch(next);
};
const rss = (req, res, next, gmt) => {
let gender = req.query.gender || '1,2,3',
items = [];
let gender = req.query.gender || '1,2,3';
res.setHeader('Content-Type', 'text/xml; charset=utf-8');
return rssModel.getRssArticle(gender).then((result) => {
... ... @@ -63,7 +61,8 @@ const rss = (req, res, next, gmt) => {
}
_.forEach(result, item => {
item.url = item.url.indexOf('http') >= 0 ? item.url : 'http://' + item.url;
let time = new Date(item.publishTimeLong && parseFloat(item.publishTimeLong) || moment(item.publishTime, 'MM月DD日 HH:mm'));
let time = new Date(item.publishTimeLong &&
parseFloat(item.publishTimeLong) || moment(item.publishTime, 'MM月DD日 HH:mm'));
let format = gmt ? 'ddd, MM MMM YYYY hh:mm:ss +0800' : 'YYYY-MM-DD hh:mm:ss +0800';
item.publishTime = moment(time).format(format);
... ...
... ... @@ -171,13 +171,13 @@ const _processCateData = (list, channel, appType) => {
};
});
_.map(list, function(item, key) {
_.forEach(list, function(item, key) {
item.focus = key === channelNav[channel];
_.map(item, function(firstItem) {
_.forEach(item, function(firstItem) {
// 如果有二级菜单,二级菜单跳转,否则一级菜单跳转
if (firstItem.sub && firstItem.sub.length) {
_.map(firstItem.sub, function(secondItem) {
_.forEach(firstItem.sub, function(secondItem) {
secondItem.url = helpers.urlFormat('/', {
sort: _.get(secondItem, 'relation_parameter.sort'),
sort_name: secondItem.category_name,
... ... @@ -230,7 +230,12 @@ const _getCateData = (channel, appType) => {
};
const indexData = (gender, brandCode, channel, appType) => {
return Promise.all([_getChannelData(gender), _getResourcesData(brandCode), _getBrandListOriginData(gender), _getCateData(channel, appType)]).then(result => {
return Promise.all([
_getChannelData(gender),
_getResourcesData(brandCode),
_getBrandListOriginData(gender),
_getCateData(channel, appType)
]).then(result => {
let brandList = {};
let list = {};
let categoryData = {};
... ... @@ -241,10 +246,11 @@ const indexData = (gender, brandCode, channel, appType) => {
}
if (result[1]) {
_.forEach(result[1], function(data) {
if (data.focus_type && data.focus_type === '1') {
if (data.focus_type === '1') {
brandList.bannerTop = data;
} else if (data.focus_type && data.focus_type === '2') {
} else if (data.focus_type === '2') {
brandList.focusData = data.data;
}
});
... ... @@ -274,12 +280,10 @@ const brandListData = (code, gender) => {
if (result[0]) {
_.forEach(result[0], function(data) {
if (data.focus_type && data.focus_type === '1') {
if (data.focus_type === '1') {
brandList.bannerTop = data;
} else if (data.focus_type && data.focus_type === '2') {
} else if (data.focus_type === '2') {
brandList.focusData = data.data;
} else if (data.template_name === 'single_image') {
brandList.bannerTop = data;
}
});
}
... ...
... ... @@ -218,7 +218,8 @@ const packageData = (id, isApp, isWeixin, channel, isShare) => {
let i;
for (i = 0; i < getArticleContent.length; i++) {
if (getArticleContent[i].singleImage || getArticleContent[i].text || getArticleContent[i].smallPic) {
if (getArticleContent[i].singleImage ||
getArticleContent[i].text || getArticleContent[i].smallPic) {
preCount++;
}
}
... ... @@ -235,7 +236,8 @@ const packageData = (id, isApp, isWeixin, channel, isShare) => {
if (isShare && datas[5]) {
if (datas[5].wechatShareImgUrl) {
datas[5].wechatShareImgUrl = datas[5].wechatShareImgUrl.substring(datas[5].wechatShareImgUrl.indexOf('//'));
datas[5].wechatShareImgUrl =
datas[5].wechatShareImgUrl.substring(datas[5].wechatShareImgUrl.indexOf('//'));
if (datas[5].wechatShareImgUrl.indexOf('?') === -1) {
datas[5].wechatShareImgUrl = datas[5].wechatShareImgUrl + '?imageView2/2/interlace/1/q/75';
... ... @@ -247,7 +249,8 @@ const packageData = (id, isApp, isWeixin, channel, isShare) => {
datas[5].qqShareImgUrl = datas[5].wechatShareImgUrl + '?imageView2/2/interlace/1/q/75';
}
} else if (datas[5].showShareImgUrl) {
datas[5].showShareImgUrl = datas[5].showShareImgUrl.substring(datas[5].showShareImgUrl.indexOf('//'));
datas[5].showShareImgUrl =
datas[5].showShareImgUrl.substring(datas[5].showShareImgUrl.indexOf('//'));
if (datas[5].showShareImgUrl.indexOf('?') === -1) {
datas[5].showShareImgUrl = datas[5].showShareImgUrl + '?imageView2/2/interlace/1/q/75';
... ... @@ -258,7 +261,8 @@ const packageData = (id, isApp, isWeixin, channel, isShare) => {
let i;
for (i = 0; i < getArticleContent.length; i++) {
if (getArticleContent[i].singleImage || getArticleContent[i].text || getArticleContent[i].smallPic) {
if (getArticleContent[i].singleImage ||
getArticleContent[i].text || getArticleContent[i].smallPic) {
preCount = i + 1;
}
}
... ...
... ... @@ -5,6 +5,7 @@
*/
'use strict';
const serviceAPI = global.yoho.ServiceAPI;
const api = global.yoho.API;
/**
* [逛资讯点赞/取消赞]
... ... @@ -49,15 +50,16 @@ const collectArticle = (uid, id, opt) => {
// 品牌收藏
const favoriteBrand = (uid, id, opt) => {
let param;
if (opt === 'ok') {
let param = {
param = {
id: id,
uid: uid,
type: 'brand'
};
} else {
let param = {
param = {
fav_id: id,
uid: uid,
type: 'brand'
... ...
'use strict';
const productNameProcess = require(`${utils}/product-name-process`);
const productNameProcess = require(`${global.utils}/product-name-process`);
const api = global.yoho.API;
const serviceAPI = global.yoho.ServiceAPI;
const _ = require('lodash');
... ... @@ -101,7 +101,10 @@ const getListData = (gender, recom, all) => {
};
const getBrandsData = (gender, starBrand, originalBrand, channel, isRecommend) => {
return Promise.all([getContentData(gender, starBrand, isRecommend, channel), getContentData(gender, originalBrand, isRecommend, channel)]).then((result) => {
return Promise.all([
getContentData(gender, starBrand, isRecommend, channel),
getContentData(gender, originalBrand, isRecommend, channel)
]).then((result) => {
let ps = [];
if (result[1]) {
... ... @@ -168,7 +171,9 @@ const getNewProduct = (brandId, gender, url, isApp) => {
if (data.is_discount === true && list.is_soon_soldOut === true) {
data.is_new = true;
data.is_discount = false;
} else if (data.is_discount === true && (data.is_new === true || data.is_limited === true || data.is_yohood === true || data.is_advance === true)) {
} else if (data.is_discount === true &&
(data.is_new === true || data.is_limited === true ||
data.is_yohood === true || data.is_advance === true)) {
data.is_discount = false;
} else if (data.is_yohood === true && data.is_new === true) {
data.is_new = false;
... ... @@ -188,7 +193,7 @@ const getNewProduct = (brandId, gender, url, isApp) => {
let productUrl = '//m.yohobuy.com/product/' + list.product_skn + '.html'; // 商品url改版
if (isApp) {
productUrl += `?openby:yohobuy={"action":"go.productDetail","params":{"product_skn":"${list.product_skn}"}}`;
productUrl += `?openby:yohobuy={"action":"go.productDetail","params":{"product_skn":"${list.product_skn}"}}`; // eslint-disable-line
}
obj = _.assign(obj, {
... ... @@ -248,7 +253,7 @@ const getRelatedEditorial = (brandId, uid, udid, clientType, isApp) => {
list.push({
id: data.id,
url: isApp ? `${helpers.https(data.url)}&openby:yohobuy={"action":"go.h5","params":{"param":{"id":"${data.id}"},"shareparam":{"id":"${data.id}"},"share":"/guang/api/v1/share/guang","id":${data.id},"type":1,"url":"http:${helpers.urlFormat('/info/index', null, 'guang')}","islogin":"N"}}` : data.url,
url: isApp ? `${helpers.https(data.url)}&openby:yohobuy={"action":"go.h5","params":{"param":{"id":"${data.id}"},"shareparam":{"id":"${data.id}"},"share":"/guang/api/v1/share/guang","id":${data.id},"type":1,"url":"http:${helpers.urlFormat('/info/index', null, 'guang')}","islogin":"N"}}` : data.url, // eslint-disable-line
title: data.title,
text: data.intro,
img: helpers.image(data.src, 640, 640),
... ... @@ -311,7 +316,7 @@ const getDetailData = (id, uid, udid, gender, isApp, clientType) => {
let isDifferent = list.is_different;
if (isApp) {
url = '?openby:yohobuy={"action":"go.brand","params":{"brand_id":"' + brandId + '","is_different":"' + isDifferent + '"}}';
url = '?openby:yohobuy={"action":"go.brand","params":{"brand_id":"' + brandId + '","is_different":"' + isDifferent + '"}}'; // eslint-disable-line
uid = parseInt(uid, 10);
} else {
url = '//' + brandDomain + '.m.yohobuy.com';
... ... @@ -323,11 +328,11 @@ const getDetailData = (id, uid, udid, gender, isApp, clientType) => {
list.brand_ico = imageProcess.getSourceUrl(list.brand_ico, 'brandLogo');
return getNewProduct(brandId, gender, url, isApp).then((result) => {
return getNewProduct(brandId, gender, url, isApp).then((data) => {
return _.assign(list, {
isLike: false,
newArrival: result,
newArrival: data,
jumpToApp: jumpToApp,
shareLink: '//guang.m.yohobuy.com/plustar/brandinfo?id=' + id,
shareTitle: list.brand_name,
... ... @@ -348,7 +353,10 @@ const getDetailData = (id, uid, udid, gender, isApp, clientType) => {
* [品牌详情异步数据]
*/
const getDetailDataAsync = (brandId, uid, udid, clientType, isApp) => {
return Promise.all([isCollection(brandId, clientType, uid), getRelatedEditorial(brandId, uid, udid, clientType, isApp)]).then((result) => {
return Promise.all([
isCollection(brandId, clientType, uid),
getRelatedEditorial(brandId, uid, udid, clientType, isApp)
]).then((result) => {
return {
isLike: result[0],
infos: result[1]
... ...
... ... @@ -4,7 +4,6 @@
* @date: 2016/09/13
*/
'use strict';
const serviceAPI = global.yoho.ServiceAPI;
const mRoot = '../models';
const indexModel = require(`${mRoot}/index`);
const infoModel = require(`${mRoot}/info`);
... ... @@ -13,13 +12,42 @@ const htmlProcess = require(`${global.utils}/html-process`);
const helpers = global.yoho.helpers;
/**
* [构建信息内容]
* @param {[int]} id [资讯id]
* @return {[string]}
*/
const _genIntro = (id) => {
let result = '';
return infoModel.intro(id).then((resData) => {
if (resData.data) {
resData.data.forEach((value) => {
if (value.text) { // 文字
result += htmlProcess.removeHtml(htmlProcess.escapeToHtml(value.text.data.text)) + '<br/>';
} else if (value.singleImage) { // 单张图
result += `<img src="${helpers.image(value.singleImage.data[0].src, 640, 640)}"/><br/>`;
} else if (value.smallPic && value.smallPic.data) { // 多张小图
value.smallPic.data.forEach((small) => {
result += `<img src="${helpers.image(small.src, 315, 420)}"/>`;
});
result += '<br/>';
}
});
result += `<a href="http://guang.m.yohobuy.com/info/index?id=${id}">查看原文</a>`;
return result;
}
});
};
/**
* [获取订阅的资讯文章列表]
* @param {[int]} gender [性别参数(1,3表示男, 2,3表示女, 默认为所有)]
* @return {[array]}
*/
const getRssArticle = (gender) => {
let result = [],
article = {},
articlePromise;
switch (gender) {
... ... @@ -65,35 +93,6 @@ const getRssArticle = (gender) => {
});
};
/**
* [构建信息内容]
* @param {[int]} id [资讯id]
* @return {[string]}
*/
const _genIntro = (id) => {
let result = '';
return infoModel.intro(id).then((resData) => {
if (resData.data) {
resData.data.forEach((value) => {
if (value.text) { // 文字
result += htmlProcess.removeHtml(htmlProcess.escapeToHtml(value.text.data.text)) + '<br/>';
} else if (value.singleImage) { // 单张图
result += `<img src="${helpers.image(value.singleImage.data[0].src, 640, 640)}"/><br/>`;
} else if (value.smallPic && value.smallPic.data) { // 多张小图
value.smallPic.data.forEach((small) => {
result += `<img src="${helpers.image(small.src, 315, 420)}"/>`;
});
result += '<br/>';
}
});
result += `<a href="http://guang.m.yohobuy.com/info/index?id=${id}">查看原文</a>`;
return result;
}
});
};
module.exports = {
getRssArticle
... ...
... ... @@ -112,7 +112,8 @@ const _processIndexData = (dataList) => {
formatData.starAvatar.push({
// noLazy: index < 6,
url: url,
cover: data.cover ? (data.cover + '?imageView2/2/w/180/h/180/q/90').replace('http:', '') : data.cover.replace('http:', '')
cover: data.cover ? (data.cover +
'?imageView2/2/w/180/h/180/q/90').replace('http:', '') : data.cover.replace('http:', '')
});
});
}
... ...
... ... @@ -28,7 +28,7 @@
<img src="{{thumb}}">
</a>
{{# is_soon_sold_out}}
<p class="few-tag">即将售罄</p>
<p class="few-tag ">即将售罄</p>
{{/ is_soon_sold_out}}
{{# is_solded}}
... ...
... ... @@ -3,7 +3,7 @@
const headerModel = require('../../../doraemon/models/header'), // 头部model
model = require('../models/coupons');
// 处理Ajax请求,status为使用状态
// status为使用状态
const index = (req, res, next) => {
model.couponData({
method: 'app.coupons.li',
... ... @@ -21,15 +21,26 @@ const index = (req, res, next) => {
title: '优惠券',
pageFooter: true,
list: result,
used: req.body.status === '1' ? true : false,
localCss: true
};
req.body.page && (req.body.page !== '1' || req.body.status === '1') && (options.layout = false);
res.render('coupons', options);
}).catch(next);
};
const couponsAjax = (req, res, next) => {
model.couponData({
method: 'app.coupons.li',
uid: req.user.uid,
status: parseInt(req.body.status || 0, 10),
page: parseInt(req.body.page || 1, 10),
limit: 10,
}).then(result => {
res.json(result);
}).catch(next);
};
module.exports = {
index,
couponsAjax
};
... ...
... ... @@ -21,7 +21,7 @@ exports.index = (req, res, next) => {
let params = {
uid: req.user.uid,
channel: req.query.channel || 1,
udid: require('md5')(req.ip)
udid: require('yoho-md5')(req.ip)
};
let studentSwitch = !_.get(req.app.locals.wap, 'user.removeStudentIdentification', true);
... ...
... ... @@ -29,7 +29,7 @@ const _banksInit = () => {
// 还款列表公共处理块
const _repaymentList = (req, res, opt, params) => {
params = _.assign({
uid: req.cookies.installmentUid
uid: req.user.uid
}, params);
installmentModel.getQueryAmtList(params).then((result) => {
... ... @@ -49,7 +49,7 @@ const _repaymentList = (req, res, opt, params) => {
// 开通分期首页
const index = (req, res) => {
let uid = req.query.uid;
let uid = req.user.uid;
Promise.all([
installmentModel.getStauts(uid),
... ... @@ -124,7 +124,7 @@ const index = (req, res) => {
if (!result) {
return;
}
res.cookie('installmentUid', req.query.uid);
res.cookie('installmentUid', uid.toString());
res.cookie('yhChannel', req.query.yh_channel);
res.cookie('udid', req.query.udid);
res.cookie('clientType', req.query.client_type);
... ... @@ -172,7 +172,7 @@ const getInstallmentGoods = (req, res) => {
// 开通结果显示
const review = (req, res) => {
let openStatus = req.query.status || false;
let uid = req.query.uid;
let uid = req.user.uid;
let data = {
module: 'home',
page: 'installment',
... ... @@ -302,7 +302,7 @@ const repayRecordPage = (req, res) => {
// ajax 请求还款记录
const getRepayRecord = (req, res) => {
let params = _.assign({
uid: req.cookies.installmentUid,
uid: req.user.uid,
pageNo: req.query.page || 1
});
... ... @@ -328,7 +328,7 @@ const account = (req, res) => {
var url = req.yoho.isApp || req.cookies.appVersion ? '/home/installment/account' : '/home/installment/bank-card';
if (req.cookies.appVersion) {
var versions = req.cookies.appVersion.split('.');
let versions = req.cookies.appVersion.split('.');
if (versions.length >= 2) {
if (versions[0] < 5 || (parseInt(versions[0], 10) === 5 && versions[1] <= 1)) {
... ... @@ -367,7 +367,7 @@ const bindCard = (req, res) => {
// 添加新银行卡请求
const postAccount = (req, res) => {
var params = _.assign({
uid: req.cookies.installmentUid
uid: req.user.uid
}, req.query);
installmentModel.postAccount(params).then((result) => {
... ... @@ -410,7 +410,7 @@ function getRealIP(req) {
const activateService = (req, res) => {
installmentModel.activateService({
uid: req.cookies.installmentUid,
uid: req.user.uid,
userName: req.body.userName,
identityCardNo: req.body.identityCardNo,
cardNo: req.body.cardNo,
... ... @@ -434,7 +434,7 @@ const activateService = (req, res) => {
const getBankInfo = (req, res) => {
installmentModel.getBankInfo({
cardNo: req.query.cardNo,
uid: req.cookies.installmentUid
uid: req.user.uid
}).then((result)=> {
res.json(result);
}).catch(() => {
... ... @@ -445,7 +445,7 @@ const getBankInfo = (req, res) => {
};
const verifyCode = (req, res) => {
installmentModel.sendVerifyCode(req.cookies.installmentUid || 1, req.query.mobile).then((result)=> {
installmentModel.sendVerifyCode(req.user.uid || 1, req.query.mobile).then((result)=> {
res.json(result);
}).catch(() => {
_serverCrash(res, {
... ... @@ -467,7 +467,7 @@ const orderIndex = (req, res) => {
const orderList = (req, res) => {
const params = {
uid: req.cookies.installmentUid,
uid: req.user.uid,
type: req.query.type || 1,
page: req.query.page || 1,
limit: req.query.limit || 10
... ... @@ -503,7 +503,7 @@ const orderList = (req, res) => {
const orderDetail = (req, res) => {
const params = {
uid: req.cookies.installmentUid,
uid: req.user.uid,
orderCode: req.params.id
};
... ... @@ -597,7 +597,7 @@ const orderDetail = (req, res) => {
// 还款详情
const repayDetail = (req, res) => {
let params = {
uid: req.cookies.installmentUid,
uid: req.user.uid,
rePayNo: req.query.id || '',
pageNo: 1
};
... ... @@ -643,7 +643,7 @@ const totalAmount = (req, res) => {
// 检查验证码
const checkVerifyCode = (req, res) => {
installmentModel.checkVerifyCode(req.cookies.installmentUid, req.query.mobile, req.query.code).then((result) => {
installmentModel.checkVerifyCode(req.user.uid, req.query.mobile, req.query.code).then((result) => {
res.json(result);
}).catch(() => {
_serverCrash(res, {
... ... @@ -659,7 +659,7 @@ const serverCrash = (req, res) => {
// 银行卡列表
const bankCard = (req, res) => {
let uid = req.cookies.installmentUid;
let uid = req.user.uid;
installmentModel.getBankCards(uid).then((result) => {
res.render('installment/bank-card', {
... ... @@ -680,7 +680,7 @@ const bankCard = (req, res) => {
// 银行卡详情
const cardDetail = (req, res) => {
let uid = req.cookies.installmentUid;
let uid = req.user.uid;
let cardIdNo = req.query.cardIdNo;
installmentModel.getCardDetail(uid, cardIdNo).then((result) => {
... ... @@ -703,7 +703,7 @@ const cardDetail = (req, res) => {
// 删除绑定
const delBankCard = (req, res) => {
let params = {
uid: req.cookies.installmentUid,
uid: req.user.uid,
cardIdNo: req.query.cardIdNo
};
... ... @@ -720,7 +720,7 @@ const delBankCard = (req, res) => {
// 切换银行卡绑定
const setMasterCard = (req, res) => {
let params = {
uid: req.cookies.installmentUid,
uid: req.user.uid,
cardIdNo: req.query.cardIdNo
};
... ... @@ -734,6 +734,23 @@ const setMasterCard = (req, res) => {
});
};
const sessionKeyAuth = (req, res, next) => {
let uid = req.query.uid || req.cookies.installmentUid || req.user.uid.toString() || '';
let sessionKey = req.query.session_key ||
req.session.SESSION_KEY || req.user.uid && req.user.uid.sessionKey || '';
if (sessionKey && !req.session.SESSION_KEY) {
req.session.SESSION_KEY = uid.sessionKey;
}
req.user.uid = {
toString: () => {
return uid;
},
sessionKey: sessionKey
};
next();
};
module.exports = {
index,
review,
... ... @@ -763,5 +780,6 @@ module.exports = {
postAccount,
cardDetail,
delBankCard,
setMasterCard
setMasterCard,
sessionKeyAuth
};
... ...
'use strict';
const _ = require('lodash');
const model = require('../models/myqrcode'),
headerModel = require('../../../doraemon/models/header'); // 头部model
... ... @@ -6,9 +7,10 @@ const model = require('../models/myqrcode'),
exports.index = (req, res, next) => {
let params = req.query,
esc = false,
appversion = req.query.app_version || '';
appversion = _.isArray(req.query.app_version) ? req.query.app_version[0] : req.query.app_version || '';
if (Number(appversion.substr(0, 1) < 5) || (Number(appversion.substr(0, 1)) === 5 && Number(appversion.substr(2, 1)) < 2)) {
if (Number(appversion.substr(0, 1) < 5) ||
(Number(appversion.substr(0, 1)) === 5 && Number(appversion.substr(2, 1)) < 2)) {
esc = true;
}
let uname;
... ...
... ... @@ -36,8 +36,12 @@ exports.order = (req, res, next) => {
return Promise.all([
orderModel.order(params),
orderModel.getOrders(initialData)
orderModel.getOrders(initialData),
orderModel.refundReason()
]).then(result => {
// 申请退款原因
let refundReason = result[2];
res.render('order', {
module: 'home',
page: 'order',
... ... @@ -49,6 +53,7 @@ exports.order = (req, res, next) => {
localCss: true,
pageFooter: true,
order: result[0] || [],
refundReason: refundReason,
walkwayUrl: result[1] && result[1].length ? '' : '//m.yohobuy.com/product/new',
firstPageOrdersList: result[1] || []
});
... ...
... ... @@ -10,7 +10,10 @@ const helpers = global.yoho.helpers;
const _ = require('lodash');
const headerModel = require('../../../doraemon/models/header'); // 头部model
const orderDetailModel = require('../models/orderDetail');
const orderModel = require('../models/order');
const payModel = require('../../cart/models/pay');
const addressModel = require('../models/address');
const addressProcess = require(global.utils + '/address-process');
const orderDetailData = (req, res, next) => {
let uid = req.user.uid;
... ... @@ -24,22 +27,34 @@ const orderDetailData = (req, res, next) => {
payModel.sendPayConfirm(orderCode, 22, uid);
}
orderDetailModel.orderDetailData(uid, orderCode).then(result => {
if (!result || _.isEmpty(result)) {
Promise.all([
orderDetailModel.orderDetailData(uid, orderCode),
orderDetailModel.closeReasons(),
orderModel.refundReason()
]).then(result => {
let orderDetail = result[0];
let cancelReason = result[1];
let refundReason = result[2];
if (!orderDetail || _.isEmpty(orderDetail)) {
return next(404);
}
result.serviceUrl = serviceUrl;
Object.assign(orderDetail, {
cancelReason: cancelReason
});
orderDetail.serviceUrl = serviceUrl;
res.render('orderDetail', {
module: 'home',
page: 'orderdetail',
pageHeader: headerModel.setNav({
navTitle: '订单详情',
navBtn: false
navTitle: '订单详情'
}),
title: '订单详情',
pageFooter: true,
orderDetail: result,
orderDetail: orderDetail,
refundReason: refundReason,
localCss: true,
});
}).catch(next);
... ... @@ -81,6 +96,28 @@ const cancelOrder = (req, res, next) => {
};
/**
* 申请退款
*/
const refundApply = (req, res, next) => {
let orderCode = req.query.id;
if (!orderCode) {
return res.json({
code: 404,
msg: '订单号不存在!'
});
}
orderDetailModel.refundApply({
orderCode: req.query.id,
uid: req.user.uid,
reasonId: req.query.reasonId || 1,
reason: req.query.reason
}).then(result => {
res.json(result);
}).catch(next);
};
/**
* 我的订单-查看物流信息
*/
const logistic = (req, res, next) => {
... ... @@ -97,10 +134,87 @@ const logistic = (req, res, next) => {
}).catch(next);
};
/**
* 订单修改地址页面
*/
const addressModify = (req, res, next) => {
let uid = req.user.uid;
let orderCode = req.query.orderCode;
let areaCode = req.query.areaCode;
let provinceAreaCode = req.query.provinceAreaCode || false;
addressModel.getAddressData({uid: uid}).then(result => {
let userAddressList = result;
let addressData = addressProcess.getAddressByAreaCode(areaCode,
_.get(userAddressList, 'data', [])) || {};
Object.assign(addressData, {
orderCode: orderCode,
});
if (provinceAreaCode) {
// 不允许修改省份,字符串拆分
let areaArray = addressData.area.split(' ');
let area = _.slice(areaArray, 1);
Object.assign(addressData, {
changeProvince: false,
provinceCode: provinceAreaCode,
province: areaArray[0],
area: area
});
} else {
Object.assign(addressData, {
changeProvince: true,
});
}
res.render('order-address-modify', Object.assign(addressData, {
pageHeader: headerModel.setNav({
navTitle: '修改地址'
}),
module: 'home',
page: 'order-address-modify',
localCss: true
}));
}).catch(next);
};
/**
* 修改订单地址
* @param {*} req
* @param {*} res
* @param {*} next
*/
const changeAddress = (req, res, next) => {
let uid = req.user.uid;
if (!uid) {
return res.json({
code: 401,
message: '用户数据不存在!'
});
}
orderDetailModel.changeAddress({
uid: req.user.uid,
orderCode: req.body.orderCode,
username: req.body.username,
areaCode: req.body.area_code,
address: req.body.address,
mobile: req.body.mobile
}).then(result => {
res.json(result);
}).catch(next);
};
module.exports = {
orderDetailData,
delOrder,
readdData,
cancelOrder,
logistic
refundApply,
logistic,
addressModify,
changeAddress
};
... ...
... ... @@ -100,7 +100,8 @@ const address = (params) => {
/* 加密地址 ID */
_.forEach(selfAddress.data, (value, key) => {
selfAddress.data[key].address_id = encodeURIComponent(crypto.encryption(null, selfAddress.data[key].address_id));
selfAddress.data[key].address_id =
encodeURIComponent(crypto.encryption(null, selfAddress.data[key].address_id));
});
/* 如果有 ID 是地址编辑页面 */
... ... @@ -218,5 +219,6 @@ module.exports = {
setDefaultAddress,
locationList,
newGetAddress,
chooseAddress
chooseAddress,
getAddressData: _getAddressData
};
... ...
... ... @@ -2,14 +2,41 @@
'use strict';
const api = global.yoho.API;
const helpers = global.yoho.helpers;
const couponData = (params) => {
return api.get('', params).then(result => {
if (result && result.data && result.data.info) {
return result.data.info;
} else {
return 0;
if (result && result.data && result.data.couponList) {
let status0 = params.status === 0;
let status1 = params.status === 1;
return result.data.couponList.map(function(elem) {
delete elem.id;
elem.isNoLimit = elem.isNoLimit === 'true';// 全场通用
elem.isDiscount = (`,${elem.shopPriceLimits},`).indexOf(',1,') !== -1;// 三折以下
elem.isLimited = (`,${elem.shopPriceLimits},`).indexOf(',2,') !== -1;// 限量
elem.brandNameLimits = elem.brandNameLimit && elem.brandNameLimit.join('、');
elem.sortNameLimits = elem.sortNameLimit && elem.sortNameLimit.join('、');
if (status0) {
elem.bestowLink = helpers.urlFormat('/product/index/index',
{
coupon_id: elem.couponId,
title: '优惠活动商品',
intro_text: `以下商品可使用【${elem.couponDetailInfomation}】优惠券`
}
);
} else if (status1) {
delete elem.overState;
elem.employbg = true;
}
return elem;
});
}
return [];
});
};
... ...
... ... @@ -178,7 +178,8 @@ const favfavBrand = (uid, page, limit) => {
link: '/product/' + data.productSkn + '.html', // 商品url改版
imgUrl: data.defaultImages,
price: '¥' + Number(data.marketPrice).toFixed(2),
discount: data.marketPrice > data.salesPrice ? '¥' + Number(data.salesPrice).toFixed(2) : false,
discount: data.marketPrice > data.salesPrice ? '¥' +
Number(data.salesPrice).toFixed(2) : false,
top3: key < 3 ? 1 : 0
});
});
... ...
... ... @@ -12,6 +12,9 @@ const singleAPI = global.yoho.SingleAPI;
const helpers = global.yoho.helpers;
const _ = require('lodash');
const crypto = global.yoho.crypto;
const service = global.yoho.ServiceAPI;
const utils = '../../../utils';
const resourcesProcess = require(`${utils}/resources-process`);
/**
* 个人详情数据
... ... @@ -92,6 +95,24 @@ const _getAddressData = (params) => {
}
};
// 资源位
const _getRes = () => {
return service.get('/operations/api/v5/resource/home', {
content_code: '5d05d443a557783b1489d328c127e9bf',
}).then(result => {
if (result && result.code === 200 && result.data && result.data.list) {
for (let item of result.data.list) {
item.template_name === 'single_image' &&
item.data.length === 1 &&
(item.singleOne = true);
}
return resourcesProcess(result.data.list);
} else {
return result;
}
});
};
/**
* 个人中心首页
* @param params
... ... @@ -116,7 +137,8 @@ const index = (params) => {
_noticeData(),
_favoriteData(params),
_infoNum(params),
_getAddressData(params)
_getAddressData(params),
_getRes()
]).then(result => {
if (result[0] && result[0].data) {
Object.assign(finalResult, {
... ... @@ -167,6 +189,10 @@ const index = (params) => {
});
}
if (result[5]) {
finalResult.content = result[5];
}
return finalResult;
});
};
... ...
... ... @@ -19,6 +19,26 @@ const codeContent = {
advertisement: 'f3fe0793a7d59479542a14b15359c47d'
};
/**
* 处理旧版本的app兼容新接口
* @param {*} url url
* @param {*} data data
* @param {*} param param
* @param {*} method method
*/
const middleApi = (url, data, param, method) => {
try {
let promise = method === 'post' ? api.post : api.get;
if (!_.get(data, 'uid.sessionKey', '') && data.uid) {
data.app_version = '5.5.0';
}
return promise.call(api, url, data, param);
} catch (err) {
return null;
}
};
// 处理还款列表数据
const _processAmtList = (listData, queryDays) => {
let overduecount = 0;
... ... @@ -197,7 +217,7 @@ const _DEBUG = false;// true;
// 获取分期开通状态
const getStauts = (uid) => {
return api.get('', {
return middleApi('', {
method: 'user.instalment.getStatus',
uid: uid
}, {
... ... @@ -214,7 +234,7 @@ const getStauts = (uid) => {
// 获取用户可用额度信息
const getQueryCreditInfo = (uid) => {
return api.get('', {
return middleApi('', {
method: 'user.instalment.queryCreditLimit',
uid: uid
}, {
... ... @@ -231,7 +251,7 @@ const getQueryCreditInfo = (uid) => {
// 获取用户待还款金额
const getQueryAmtInfo = (uid) => {
return api.get('', {
return middleApi('', {
method: 'app.order.queryAmtInfo',
uid: uid
}, {
... ... @@ -250,7 +270,7 @@ const getQueryAmtInfo = (uid) => {
// 获取用户待还列表信息 queryDays -1:逾期待还;0:全部待还;7:七日待还;30:本月待还
const getQueryAmtList = (params) => {
return api.get('', _.assign({
return middleApi('', _.assign({
method: 'app.order.queryAmtList',
pageSize: '20'
}, params), {
... ... @@ -267,7 +287,7 @@ const getQueryAmtList = (params) => {
// 分期专享推荐商品
const getSearchIntallment = (params) => {
return api.post('', {
return middleApi('', {
method: 'app.search.instalment',
limit: '50',
order: 's_t_desc',
... ... @@ -275,7 +295,7 @@ const getSearchIntallment = (params) => {
}, {
cache: true,
timeout: API_TIMEOUT
}).then((result) => {
}, 'post').then((result) => {
if (result && result.code === 200) {
let goods = productProcess.processProductList(result.data.product_list);
... ... @@ -300,7 +320,7 @@ const getSearchIntallment = (params) => {
* @param mobile 手机号码
*/
const sendVerifyCode = (uid, mobile) => {
return api.get('', {
return middleApi('', {
method: 'user.instalment.getSnsCheckCode',
uid: uid,
mobile: mobile,
... ... @@ -323,7 +343,7 @@ const sendVerifyCode = (uid, mobile) => {
* @returns {*}
*/
const activateService = (params) => {
return api.get('', Object.assign({
return middleApi('', Object.assign({
method: 'user.instalment.activate'
}, params), {
timeout: 30000
... ... @@ -338,7 +358,7 @@ const activateService = (params) => {
* @returns {*}
*/
const getBankInfo = (params) => {
return api.get('', {
return middleApi('', {
method: 'user.instalment.getBankInfoByCardNo',
cardNo: params.cardNo,
uid: params.uid
... ... @@ -361,7 +381,7 @@ const getInstallmentOrders = (params) => {
const method = 'app.SpaceOrders.getInstallment';
if (!_DEBUG) {
return api.get('', {
return middleApi('', {
method: method,
uid: params.uid,
type: params.type || 1,
... ... @@ -379,7 +399,7 @@ const getInstallmentOrders = (params) => {
// 还款记录查询
const getQueryRePayList = (params) => {
return api.get('', _.assign({
return middleApi('', _.assign({
method: 'app.order.queryRePayList',
pageSize: '20'
}, params), {
... ... @@ -396,7 +416,7 @@ const getQueryRePayList = (params) => {
// 账号管理
const getBankCards = (uid) => {
return api.get('', {
return middleApi('', {
method: 'user.instalment.getBankCards',
uid: uid
}, {
... ... @@ -422,7 +442,7 @@ const getBankCards = (uid) => {
const getInstallmentOrderDetail = (params) => {
const method = 'app.SpaceOrders.installDetail';
return api.get('', {
return middleApi('', {
method: method,
uid: params.uid,
order_code: params.orderCode
... ... @@ -443,7 +463,7 @@ const getInstallmentOrderDetail = (params) => {
const totalAmount = (params) => {
const method = 'app.order.calPrice';
return api.get('', {
return middleApi('', {
method: method,
prices: params
}, {
... ... @@ -457,7 +477,7 @@ const totalAmount = (params) => {
const checkVerifyCode = (uid, mobile, code) => {
const method = 'user.instalment.validateSnsCheckCode';
return api.get('', {
return middleApi('', {
uid: uid,
method: method,
mobile: mobile,
... ... @@ -472,7 +492,7 @@ const checkVerifyCode = (uid, mobile, code) => {
// 添加银行卡请求
const postAccount = (params) => {
return api.get('', _.assign({
return middleApi('', _.assign({
method: 'user.instalment.bindingCards'
}, params), {
timeout: 6000
... ... @@ -481,7 +501,7 @@ const postAccount = (params) => {
// 获取银行卡详情
const getCardDetail = (uid, cardIdNo) => {
return api.get('', {
return middleApi('', {
method: 'user.instalment.getBankCardDetail',
uid: uid,
cardIdNo: cardIdNo
... ... @@ -499,7 +519,7 @@ const getCardDetail = (uid, cardIdNo) => {
// 解除银行卡绑定
const delBankCard = (params) => {
return api.get('', _.assign({
return middleApi('', _.assign({
method: 'user.instalment.unbindCard'
}, params)).then((res) => {
return res;
... ... @@ -508,7 +528,7 @@ const delBankCard = (params) => {
// 切换银行卡主卡
const setMasterCard = (params) => {
return api.get('', _.assign({
return middleApi('', _.assign({
method: 'user.instalment.toggleCard'
}, params)).then((res) => {
return res;
... ... @@ -517,7 +537,7 @@ const setMasterCard = (params) => {
// 公告
const getNotices = () => {
return api.get('', {
return middleApi('', {
method: 'app.resources.getNotices',
position: 8,
client_type: 'iphone'
... ... @@ -536,6 +556,7 @@ const getNotices = () => {
});
};
module.exports = {
getStauts,
getQueryCreditInfo,
... ...
'use strict';
const serviceAPI = global.yoho.ServiceAPI;
const api = global.yoho.API;
const _ = require('lodash');
const camelCase = global.yoho.camelCase;
const logger = global.yoho.logger;
const getOnlineServiceInfo = (contentCode) => {
... ... @@ -20,7 +18,6 @@ const getOnlineServiceInfo = (contentCode) => {
};
_.forEach(result.data, function(val, index) {
let question = [];
if (index < 3) {
formData.tab.push({
... ... @@ -29,12 +26,9 @@ const getOnlineServiceInfo = (contentCode) => {
iscut: true
});
_.forEach(val.sub, function(data, key) {
data = _.assign(data, {
title: data.category_name,
link: '/home/onlineservicedetail?cateInfo=' + data.id + '_' + data.category_name
});
_.forEach(val.sub, function(data) {
data.title = data.category_name;
data.link = '/home/onlineservicedetail?cateInfo=' + data.id + '_' + data.category_name;
});
formData.question.push({
... ...
... ... @@ -77,24 +77,6 @@ const _formatOrderGoods = (orderGoods, count, haveLink, tickets) => {
};
/**
* 获取快递有关信息
* @private
*/
const _assignExpressInfo = (showLogistics, order) => {
let data = {};
if (showLogistics && order.express_company && order.express_company.caption) {
data = {
logisticsUrl: helpers.urlFormat('/home/logistic', {order_code: order.order_code}),
logisticsCompany: order.express_company.caption,
logisticsNum: order.express_number || ''
};
}
return data;
};
/**
* 调用接口获取订单数据
* @returns {*}
* @private
... ... @@ -116,123 +98,95 @@ const _getOrderData = (params) => {
* 获取订单状态
* @private
*/
const _getOrderStatus = (order, showLogistics) => {
let result = {};
const _getOrderStatus = (order) => {
let orderBtn = [];
if (!order) {
return {};
}
result.useLimitCode = order.use_limit_code === 'Y';
if (order.is_cancel === 'Y') {
return Object.assign(result, {
canceled: true
if (parseInt(order.attribute, 10) === 9) {
/* 预售商品,不能进行任何操作 */
orderBtn.push({
isAdvance: true
});
return {orderBtn: orderBtn};
}
// 先判断订单付款方式,根据不同的付款方式计算订单状态。(注:货到付款没有待付款状态)
// 支付方式为非货到付款时,计算订单状态。
if (parseInt(order.payment_type, 10) !== 2) {
switch (order.status) {
case -1:
/* 倒计时时间 */
if (order.counter_flag === 'Y' && parseInt(order.pay_lefttime, 10)) {
orderBtn.push({
leftTime: order.pay_lefttime * 1000
});
}
/* 预售商品,不能进行任何操作 */
Object.assign(result, {
isAdvance: true
_.each(order.links, function(val) {
switch (val) {
case 'refundApply':// 申请退款
orderBtn.push({
refundApply: true
});
break;
case 0:
/* 待付款 */
Object.assign(result, {
unpaid: true,
payUrl: helpers.urlFormat('/home/orders/paynew', {order_code: order.order_code})
case 'modifyAddress':// 修改收货地址
orderBtn.push({
modifyAddress: true,
link: helpers.urlFormat('/home/orders/addressModify', {
relation: order.relate_order_code === 'Y', // 判断是否有关联订单
orderCode: order.order_code,
areaCode: _.get(order, 'delivery_address.area_code', ''),
provinceAreaCode: order.is_support_change_province !== 'Y' &&
_.get(order, 'delivery_address.province_area_code', '') || ''// 如果不允许修改省
})
});
break;
case 1:
case 2:
case 3:
/* 已付款状态不给查看物流 URL */
Object.assign(result, {
unreceived: true
case 'buyNow':// 立即付款
orderBtn.push({
buyNow: true,
link: helpers.urlFormat('/home/orders/paynew', {order_code: order.order_code}),
});
break;
case 4:
case 5:
/* 已发货状态,给查看物流或二维码URL */
Object.assign(result, {
unreceived: true
case 'closeOrder':// 取消订单
orderBtn.push({
closeOrder: true
});
/* 是否门票 */
if (order.virtual_type && parseInt(order.virtual_type, 10) === 3) {
Object.assign(result, {
qrcode: helpers.urlFormat(`/home/QRcode/${order.order_code}`)
});
} else {
Object.assign(result, _assignExpressInfo(showLogistics, order));
}
break;
case 6:
/* 已成功订单,给查看物流或二维码URL */
Object.assign(result, {
completed: true
case 'confirm':// 订单确认
break;
case 'getExpress':// 查看物流
orderBtn.push({
getExpress: true,
logisticsUrl: helpers.urlFormat('/home/logistic', {order_code: order.order_code}),
});
/* 是否门票 */
if (order.virtual_type && parseInt(order.virtual_type, 10) === 3) {
Object.assign(result, {
qrcode: helpers.urlFormat(`/home/QRcode/${order.order_code}`)
});
} else {
Object.assign(result, _assignExpressInfo(showLogistics, order));
}
break;
default:
case 'shareOrder':// 晒单评价
break;
}
} else {
/* 订单为货到付款订单时,计算订单状态。(货到付款没有待付款状态) */
switch (order.status) {
case 0:
/* 备货中 */
Object.assign(result, {
unpaid: true
case 'delOrder':// 删除订单
orderBtn.push({
delOrder: true,
});
break;
case 1:
case 2:
case 3:
/* 已付款状态不给查看物流URL */
Object.assign(result, {
unreceived: true
case 'lookQrcode':// 查看二维码
orderBtn.push({
lookQrcode: true,
link: helpers.urlFormat(`/home/QRcode/${order.order_code}`),
});
break;
case 4:
case 5:
/* 待收货状态,给查看物流 url */
Object.assign(result, {
unreceived: true
case 'afterService':// 售后服务
orderBtn.push({
afterService: true
});
Object.assign(result, _assignExpressInfo(showLogistics, order));
break;
case 6:
/* 待收货状态,给查看物流 url */
Object.assign(result, {
completed: true
case 'readd':// 再次购买
orderBtn.push({
readd: true
});
Object.assign(result, _assignExpressInfo(showLogistics, order));
break;
default:
break;
}
}
});
return result;
return {orderBtn: orderBtn};
};
/**
... ... @@ -263,21 +217,21 @@ const _getNavs = (type) => {
};
/**
* 订单页面数据
* 订单页面导航条和取消订单原因
* @param params
* @returns {*|Promise.<TResult>}
*/
const order = (params) => {
let finalResult = {};
Object.assign(finalResult, {navs: _getNavs(params.type)});
let finalResult = {
navs: _getNavs(params.type)
};
return api.get('', _.assign({
method: 'app.SpaceOrders.closeReasons'
}, params), {
cache: true,
code: 200
}).then((result) => {
}).then(result => {
if (result.data) {
Object.assign(finalResult, {cancelReason: result.data});
... ... @@ -288,6 +242,17 @@ const order = (params) => {
};
/**
* 申请退款原因
*/
const refundReason = () => {
return api.get('', {
method: 'app.SpaceOrders.refundApplyReasons'
}, {code: 200, cache: true}).then(result => {
return _.get(result, 'data', []);
});
};
/**
* 获取订单列表
* @param params
*/
... ... @@ -315,8 +280,7 @@ const getOrders = (params) => {
goods: _formatOrderGoods(value.order_goods, count, false, isTickets),
detailUrl: helpers.urlFormat('/home/orderdetail', {order_code: value.order_code}),
count: value.buy_total,
isVirtual: isTickets,
isDepositAdvance: value.attribute * 1 === 9// 定金预售
isVirtual: isTickets
});
/* 如果运费大于0,会显示运费 */
... ... @@ -326,13 +290,6 @@ const getOrders = (params) => {
});
}
/* 倒计时时间 */
if (value.counter_flag && value.counter_flag === 'Y') {
Object.assign(perOrder, {
leftTime: parseInt(value.pay_lefttime, 10) * 1000
});
}
finalResult.push(perOrder);
});
}
... ... @@ -343,5 +300,6 @@ const getOrders = (params) => {
module.exports = {
order,
getOrders
getOrders,
refundReason
};
... ...
... ... @@ -50,129 +50,94 @@ const _assignExpressInfo = (showLogistics, order) => {
* @private
*/
const _getOrderStatus = (order, showLogistics) => {
let result = {};
let orderBtn = [];
if (order.isCancel === 'Y') {
return {
canceled: true
};
if (!order) {
return {};
}
order.status = parseInt(order.status, 10);
// 先判断订单付款方式,根据不同的付款方式计算订单状态。(注:货到付款没有待付款状态)
// 支付方式为非货到付款时,计算订单状态。
if (parseInt(order.paymentType, 10) !== 2) {
Object.assign(result, {
isPayonline: true
if (parseInt(order.attribute, 10) === 9) {
/* 预售商品,不能进行任何操作 */
orderBtn.push({
isAdvance: true
});
return {orderBtn: orderBtn};
}
let isPayaly = order.paymentName === '' ? false : true;
switch (order.status) {
case 0:
/* 倒计时时间 订单详情页倒计时不在同一级*/
if (order.counterFlag === 'Y' && parseInt(order.payLefttime, 10)) {
orderBtn.push({
leftTimeTop: order.payLefttime * 1000
});
}
/* 待付款 */
Object.assign(result, {
unpaid: true,
payUrl: helpers.urlFormat('/home/orders/paynew', {order_code: order.orderCode})
_.each(order.links, function(val) {
switch (val) {
case 'refundApply':// 申请退款
orderBtn.push({
refundApply: true
});
break;
case 1:
case 2:
case 3:
/* 已付款状态不给查看物流 URL */
Object.assign(result, {
unreceived: true,
payAly: isPayaly
case 'modifyAddress':// 修改收货地址
orderBtn.push({
modifyAddress: true,
link: helpers.urlFormat('/home/orders/addressModify', {
relation: order.relateOrderCode === 'Y', // 判断是否有关联订单
orderCode: order.orderCode,
areaCode: _.get(order, 'deliveryAddress.areaCode', ''),
provinceAreaCode: order.isSupportChangeProvince !== 'Y' &&
_.get(order, 'deliveryAddress.provinceAreaCode', '') || ''// 如果不允许修改省
})
});
break;
case 4:
case 5:
/* 已发货状态,给查看物流或二维码URL */
Object.assign(result, {
unreceived: true,
payAly: isPayaly
case 'buyNow':// 立即付款
orderBtn.push({
buyNow: true,
link: helpers.urlFormat('/home/orders/paynew', {order_code: order.orderCode}),
});
/* 是否门票 */
if (order.virtualType && parseInt(order.virtualType, 10) === 3) {
Object.assign(result, {
qrcode: helpers.urlFormat(`/home/QRcode/${order.orderCode}`)
});
} else {
Object.assign(result, _assignExpressInfo(showLogistics, order));
}
break;
case 6:
/* 已成功订单,给查看物流或二维码URL */
Object.assign(result, {
completed: true,
payAly: isPayaly
case 'closeOrder':// 取消订单
orderBtn.push({
closeOrder: true
});
/* 是否门票 */
if (order.virtual_type && parseInt(order.virtual_type, 10) === 3) {
Object.assign(result, {
qrcode: helpers.urlFormat(`/home/QRcode/${order.orderCode}`)
});
} else {
Object.assign(result, _assignExpressInfo(showLogistics, order));
}
break;
default:
case 'confirm':// 订单确认
break;
}
} else {
Object.assign(result, {
payAly: true,
paymentName: (order.paymentName !== '') ? order.paymentName : '货到付款'
});
/* 订单为货到付款订单时,计算订单状态。(货到付款没有待付款状态) */
switch (order.status) {
case 0:
/* 备货中 */
Object.assign(result, {
unpaid: true
case 'getExpress':// 查看物流
orderBtn.push(Object.assign(
{getExpress: true},
_assignExpressInfo(showLogistics, order)
));
break;
case 'shareOrder':// 晒单评价
break;
case 'delOrder':// 删除订单
orderBtn.push({
delOrder: true,
});
break;
case 1:
case 2:
case 3:
/* 已付款状态不给查看物流URL */
Object.assign(result, {
unreceived: true
case 'lookQrcode':// 查看二维码
orderBtn.push({
lookQrcode: true,
link: helpers.urlFormat(`/home/QRcode/${order.orderCode}`),
});
break;
case 4:
case 5:
/* 待收货状态,给查看物流 url */
Object.assign(result, {
unreceived: true
case 'afterService':// 售后服务
orderBtn.push({
afterService: true
});
Object.assign(result, _assignExpressInfo(showLogistics, order));
break;
case 6:
/* 待收货状态,给查看物流 url */
Object.assign(result, {
completed: true
case 'readd':// 再次购买
orderBtn.push({
readd: true
});
Object.assign(result, _assignExpressInfo(showLogistics, order));
break;
default:
break;
}
}
});
return result;
return {orderBtn: orderBtn};
};
... ... @@ -182,7 +147,7 @@ const orderDetailData = (uid, orderCode) => {
method: 'app.SpaceOrders.detail',
uid: uid,
order_code: orderCode
}).then((result) => {
}).then(result => {
if (result && result.code === 200) {
let orderDetail = camelCase(result.data);
... ... @@ -191,7 +156,7 @@ const orderDetailData = (uid, orderCode) => {
orderDetail = _.assign(orderDetail, status);
if (orderDetail.virtualType && orderDetail.virtualType === 3) {
if (parseInt(orderDetail.attribute, 10) === 3) {
orderDetail = _.assign(orderDetail, {
isVirtual: true,
mobile: result.data.mobile
... ... @@ -200,16 +165,8 @@ const orderDetailData = (uid, orderCode) => {
orderDetail = _.assign(orderDetail, {
addressAll: orderDetail.area + orderDetail.address
// createTime: date('Y-m-d H:i:s', orderDetail.createTime)
});
if (orderDetail.counterFlag && orderDetail.counterFlag === 'Y') {
orderDetail = _.assign(orderDetail, {
leftTime: parseInt(orderDetail.payLefttime, 10) * 1000
});
}
_.forEach(orderDetail.orderGoods, function(data) {
let obj = {};
let count = +data.buyNumber;
... ... @@ -255,55 +212,10 @@ const orderDetailData = (uid, orderCode) => {
orderDetail.goods = goods;
if (orderDetail.paymentStatus === 'Y') {
orderDetail = _.assign(orderDetail, {
isPay: true
});
}
// 判断是否可以修改地址
if (orderDetail.canUpdateDeliveryAddress === 'Y') {
orderDetail = _.assign(orderDetail, {
changeable: true
});
}
// 判断是否有关联订单
if (orderDetail.relateOrderCode === 'Y') {
orderDetail = _.assign(orderDetail, {
relation: true
});
} else {
orderDetail = _.assign(orderDetail, {
relation: false
});
}
// 定金预售
if (orderDetail.attribute * 1 === 9) {
// 为支付的拆单配送信息
if (orderDetail.isMultiPackage === 'Y') {
orderDetail = _.assign(orderDetail, {
isDepositAdvance: true
});
}
orderDetail = _.assign(orderDetail, {
goodsAmount: orderDetail.paymentAmount,
url: '/home/addressModify?orderCode=' + orderCode + '&relation=' + orderDetail.relation
});
// 为支付的拆单配送信息
if (orderDetail.isMultiPackage && orderDetail.isMultiPackage === 'Y') {
let jitInfo = {
deliveryId: orderDetail.deliveryId,
paymentType: orderDetail.paymentType,
couponCode: orderDetail.couponCode,
yohoCoin: orderDetail.yohoCoin,
cartType: 'ordinary'
};
orderDetail = _.assign(orderDetail, {
isJit: true,
jitDetailUrl: helpers.urlFormat('/cart/index/new/jitDetail', jitInfo)
jitDetailUrl: helpers.urlFormat('/cart/index/new/jitDetail', {orderCode: orderCode})
});
}
... ... @@ -311,18 +223,7 @@ const orderDetailData = (uid, orderCode) => {
orderDetail.invoice.type = (orderDetail.invoice.type + '' === '2');
}
// 取消订单原因列表
let resons = closeReasons();
return closeReasons().then(list => {
resons = list;
orderDetail = _.assign(orderDetail, {
cancelReason: resons
});
return orderDetail;
});
return orderDetail;
} else {
logger.error('detail info return no 200');
return {};
... ... @@ -375,6 +276,19 @@ const cancelOrder = (orderCode, uid, reasonId, gender, channel, reason) => {
});
};
/**
* 申请退款
*/
const refundApply = (params) => {
return api.get('', {
method: 'app.SpaceOrders.refundApply',
uid: params.uid,
order_code: params.orderCode,
reason_id: params.reasonId,
reason: params.reason
});
};
/*
* 我的订单-查看物流
* @param int $orderCode 订单号
... ... @@ -448,11 +362,43 @@ const logistics = (orderCode, uid) => {
});
};
/**
* 修改订单地址
* @param {参数} params
*/
const changeAddress = (params) => {
let apiParams = {
method: 'app.SpaceOrders.updateDeliveryAddress',
order_code: params.orderCode,
uid: params.uid,
user_name: params.username,
area_code: params.areaCode,
address: params.address,
mobile: params.mobile
};
if (params.addressId) {
Object.assign(apiParams, {
address_id: params.addressId
});
}
if (params.phone) {
Object.assign(apiParams, {
phone: params.phone
});
}
return api.post('', apiParams);
};
module.exports = {
orderDetailData,
closeReasons,
delOrder,
readdData,
cancelOrder,
logistics
refundApply,
logistics,
changeAddress
};
... ...
... ... @@ -55,6 +55,10 @@ router.get('/orders/detail', auth, orderDetailController.orderDetailData); // 霈
router.get('/delOrder', auth, orderDetailController.delOrder); // 删除订单
router.get('/readd', auth, orderDetailController.readdData); // 再次购买
router.get('/cancelOrder', auth, orderDetailController.cancelOrder); // 取消订单
router.get('/refundApply', auth, orderDetailController.refundApply); // 申请退款
router.get('/orders/addressModify', auth, orderDetailController.addressModify); // 订单详情地址修改页面
router.post('/orders/changeAddress', orderDetailController.changeAddress); // 提交新的地址数据
router.get('/', homeController.index); // 个人中心首页
router.get('/mydetails', auth, homeController.myDetails); // 个人基本资料页面
... ... @@ -77,6 +81,7 @@ router.post('/favoriteDel', auth, favorite.favoriteDelete);//
// 优惠券
router.use('/coupons', auth, coupons.index);
router.use('/couponsAjax', coupons.couponsAjax);
// 帮助中心
router.get('/help', help.index);
... ... @@ -99,39 +104,39 @@ router.get('/onlineservice', onlineService.getOnlineServiceInfo);
router.get('/onlineservicedetail', onlineService.getOnlineServiceDetail);
// 分期付款
router.get('/installment/index', installment.index); // 开通分期首页
router.get('/installment/review', installment.review); // 开通分期首页
router.get('/installment/starting-service', installment.startingService); // 分期付款开通
router.get('/installment/starting-service/verify-code', installment.verifyCode);
router.get('/installment/starting-service/check-verify-code', installment.checkVerifyCode);
router.get('/installment/get-goods', installment.getInstallmentGoods); // ajax请求分期专享商品数据
router.get('/installment/repay/overdue', installment.overdueList); // 逾期未还款列表
router.get('/installment/repay/7daylist', installment.sevenDayList); // 7日待还款列表
router.get('/installment/repay/month', installment.monthRepayList); // 本月待还款列表
router.get('/installment/repay/total', installment.totalRepayList); // 待还总金额列表
router.get('/installment/repay/record', installment.repayRecordPage); // 还款记录
router.get('/installment/repay/get-record', installment.getRepayRecord); // ajax请求还款记录
router.get('/installment/repay/detail', installment.repayDetail); // 还款详情
router.get('/installment/account', installment.account); // 账户管理
router.get('/installment/bind-card', installment.bindCard); // 添加新银行卡
router.get('/installment/post-account', installment.postAccount); // 添加新卡请求
router.get('/installment/bank-info', installment.getBankInfo);
router.post('/installment/activate-service', installment.activateService);
router.get('/installment/order', installment.orderIndex);
router.get('/installment/order.html', installment.orderList);
router.get('/installment/order/:id', installment.orderDetail);
router.get('/installment/total-amount.json', installment.totalAmount);
router.get('/installment/help', installment.help);// 帮助静态页面
router.get('/installment/agreement', installment.agreement);// 服务协议静态页面
router.get('/installment/server-crash', installment.serverCrash); // 服务器崩溃
router.get('/installment/bank-card', installment.bankCard); // 银行卡列表
router.get('/installment/card-detail', installment.cardDetail); // 银行卡详情
router.get('/installment/delBankCard', installment.delBankCard); // 删除绑定
router.get('/installment/setMasterCard', installment.setMasterCard); // 切换主卡
router.get('/installment/index', installment.sessionKeyAuth, installment.index); // 开通分期首页
router.get('/installment/review', installment.sessionKeyAuth, installment.review); // 开通分期首页
router.get('/installment/starting-service', installment.sessionKeyAuth, installment.startingService); // 分期付款开通
router.get('/installment/starting-service/verify-code', installment.sessionKeyAuth, installment.verifyCode);
router.get('/installment/starting-service/check-verify-code', installment.sessionKeyAuth, installment.checkVerifyCode);
router.get('/installment/get-goods', installment.sessionKeyAuth, installment.getInstallmentGoods); // ajax请求分期专享商品数据
router.get('/installment/repay/overdue', installment.sessionKeyAuth, installment.overdueList); // 逾期未还款列表
router.get('/installment/repay/7daylist', installment.sessionKeyAuth, installment.sevenDayList); // 7日待还款列表
router.get('/installment/repay/month', installment.sessionKeyAuth, installment.monthRepayList); // 本月待还款列表
router.get('/installment/repay/total', installment.sessionKeyAuth, installment.totalRepayList); // 待还总金额列表
router.get('/installment/repay/record', installment.sessionKeyAuth, installment.repayRecordPage); // 还款记录
router.get('/installment/repay/get-record', installment.sessionKeyAuth, installment.getRepayRecord); // ajax请求还款记录
router.get('/installment/repay/detail', installment.sessionKeyAuth, installment.repayDetail); // 还款详情
router.get('/installment/account', installment.sessionKeyAuth, installment.account); // 账户管理
router.get('/installment/bind-card', installment.sessionKeyAuth, installment.bindCard); // 添加新银行卡
router.get('/installment/post-account', installment.sessionKeyAuth, installment.postAccount); // 添加新卡请求
router.get('/installment/bank-info', installment.sessionKeyAuth, installment.getBankInfo);
router.post('/installment/activate-service', installment.sessionKeyAuth, installment.activateService);
router.get('/installment/order', installment.sessionKeyAuth, installment.orderIndex);
router.get('/installment/order.html', installment.sessionKeyAuth, installment.orderList);
router.get('/installment/order/:id', installment.sessionKeyAuth, installment.orderDetail);
router.get('/installment/total-amount.json', installment.sessionKeyAuth, installment.totalAmount);
router.get('/installment/help', installment.sessionKeyAuth, installment.help);// 帮助静态页面
router.get('/installment/agreement', installment.sessionKeyAuth, installment.agreement);// 服务协议静态页面
router.get('/installment/server-crash', installment.sessionKeyAuth, installment.serverCrash); // 服务器崩溃
router.get('/installment/bank-card', installment.sessionKeyAuth, installment.bankCard); // 银行卡列表
router.get('/installment/card-detail', installment.sessionKeyAuth, installment.cardDetail); // 银行卡详情
router.get('/installment/delBankCard', installment.sessionKeyAuth, installment.delBankCard); // 删除绑定
router.get('/installment/setMasterCard', installment.sessionKeyAuth, installment.setMasterCard); // 切换主卡
router.get('/getaddress.json', addressController.newGetAddress); // TODO 模拟省数据
... ...
<div class="yoho-page my-coupon-page">
<div class="employ">
<span class="active">未使用</span>
<span>已使用</span>
</div>
<div id="employ" class="coupon-list">
{{#if list}}
{{#list}}
<div class="employ-main">
<span>{{money}}</span>
<p class="coupon-name">{{coupon_name}}</p>
<p>有效期:{{couponValidity}}</p>
{{#if ../used}}
<i></i>
{{/if}}
</div>
{{/list}}
<div class="coupon-tab">
<ul>
<li class="activate">未使用</li>
<li>已使用</li>
</ul>
</div>
{{else}}
<div class="null">
<i></i>
<p>您还没有优惠券!</p>
<a href="/product/new">随便逛逛</a>
</div>
{{!--coupon-list start--}}
<div class="coupon-list coupon-tab1">
{{#each list}}
<div class="coupon-group" data-coupon-id={{couponId}}>
<div class="coupon-header">{{couponDetailInfomation}}</div>
<div class="coupon-content">
<div class="coupon-content-group1">
<p class="coupon-money">{{couponValue}}</p>
<p>{{rule4ShortName}}</p>
</div>
<div class="coupon-content-group2">
<div class="coupon-content-group2-table">
<div>
{{couponValidity}}
{{#if overState}}<span class="coupon-soon-expire">{{overState}}</span>{{/if}}
</div>
<div>
<div class="left down info-btn">详细信息<i class="iconfont"></i></div>
<div class="right">
{{#if employbg}}
<span class="employ"></span>
{{else if bestowLink}}
<a href="javascript:void(0);" data-link="{{bestowLink}}" class="btn">立即使用</a>
{{/if}}
</div>
</div>
</div>
</div>
</div>
<div class="coupon-footer hide">
{{#if isNoLimit}}
<p>全场通用</p>
{{/if}}
{{/if}}
</div>
<div id="employ2" class="coupon-list">
</div>
\ No newline at end of file
{{#if brandNameLimits}}
<p>限品牌:{{brandNameLimits}}</p>
{{/if}}
{{#if sortNameLimits}}
<p>限品类:{{sortNameLimits}}</p>
{{/if}}
<p>特例商品(秒杀、限定、境外、预售{{#if isDiscount}}、3折以下{{/if}}{{#if isLimited}}、限量{{/if}}等)暂不支持使用优惠券。</p>
{{#if explains}}<p>说明:{{explains}}</p>{{/if}}
</div>
</div>
{{/each}}
</div>
{{!--coupon-list end--}}
<div class="coupon-list coupon-tab2"></div>
<div class="coupon-list coupon-tab3"></div>
</div>
... ...
... ... @@ -121,6 +121,13 @@
</a>
</div>
{{! 资源位}}
<div class="res-c">
<div class="resource-content">
{{> content}}
</div>
</div>
{{!--
<div class="group-list">
<a class="list-item" href="/home/onlineService">
... ...
<div class="address-modify">
{{#unless changeProvince}}
<div class="tip">由于需要仓库调拨,目前暂不支持省地址修改,请您谅解!</div>
{{/unless}}
<form class="form edit-address" id="areaForm">
<div class="form-group">
<label for="username">收货人:</label>
<input name="username" type="text" value="{{consignee}}">
</div>
<div class="form-group">
<label for="mobile">联系电话:</label>
<input name="mobile" type="text" value="{{mobile}}">
</div>
{{#unless changeProvince}}
<div class="form-group disable">
<label for="province">所在省:</label>
<input name="province" type="text" value="{{province}}" class="disable" readonly>
<input name="provinceCode" type="hidden" value="{{provinceCode}}">
</div>
{{/unless}}
<div class="form-group" id="area">
<label for="area">所在地区:</label>
<input name="area" type="text" value="{{area}}" readonly>
<input name="area_code" type="hidden" value={{area_code}}>
</div>
<div class="form-group">
<label for="address" class="label-address">详细地址:</label>
<textarea name="address" type="text" value="" maxlength="255">{{address}}</textarea>
</div>
<input type="hidden" name="orderCode" value="{{orderCode}}">
</form>
<div class="tip"><span class="iconfont icon-info"></span>修改地址仅可修改一次,且会影响送货时间,请您谅解!</div>
<div class="btn-sure-line">
<button id="btnSure" class="btn-sure">确认修改</button>
</div>
</div>
<div id="vAddressAct">
<vue-address-act></vue-address-act>
</div>
\ No newline at end of file
... ...
... ... @@ -44,5 +44,20 @@
</div>
</div>
{{/ order}}
</div>
{{!-- 申请退款原因 --}}
<div class="refund-reason-mask">
<div class="refund-reason-box" >
<div class="box-head"><span class="box-cmp">完成</span></div>
<div class="swiper-container refund-box-main">
<ul class="swiper-wrapper">
{{#refundReason}}
<li class="swiper-slide" data-reason-id="{{id}}"><span >{{reason}}</span></li>
{{/refundReason}}
</ul>
<div class="refund-active-mask"></div>
</div>
</div>
</div>
</div>
... ...
... ... @@ -9,25 +9,20 @@
</div>
</section>
{{else}}
<section class="owner-info block" data-changeable="{{changeable}}" data-url="{{url}}">
<section class="owner-info block">
<span class="iconfont">&#xe637;</span>
<div class="beside-icon">
<p class="name-phone">
{{userName}}
<span>{{mobile}}</span>
</p>
<p class="address">
{{addressAll}}
</p>
<div class="rest">其他地址<span class="iconfont iconAddress">&#xe614;</span></div>
</div>
</section>
<div class="range"></div>
{{/if}}
<div class="range"></div>
<section class="order-status block">
<div class="status sub">
<span class="iconfont">&#xe632;</span>
... ... @@ -36,34 +31,34 @@
<span class="sub-title">订单编号:{{orderCode}}</span>
<span >订单状态:{{statusStr}}</span>
<span>下单时间:<b class="createTime">{{createTime}}</b></span>
{{#if payAly}}
<span>支付方式:{{paymentName}}</span>
{{#if paymentName}}
<span>支付方式:{{paymentName}}</span>
{{/if}}
</p>
<a href="{{serviceUrl}}" target="_blank" class="iconfont icon-right">&#xe63c;</a>
</div>
{{#if logisticsUrl}}
<a class="logistics sub" href="{{logisticsUrl}}">
<span class="iconfont">&#xe630;</span>
<p class="beside-icon sub-content">
<span class="sub-title">物流信息</span>
<span>物流公司:{{logisticsCompany}}</span>
{{#if logisticsNum}}
<span>快递单号:{{logisticsNum}}</span>
{{/if}}
</p>
<span class="iconfont icon-right">&#xe614;</span>
</a>
{{/if}}
{{# orderBtn}}
{{#if getExpress}}
<a class="logistics sub" href="{{logisticsUrl}}">
<span class="iconfont">&#xe630;</span>
<p class="beside-icon sub-content">
<span class="sub-title">物流信息</span>
<span>物流公司:{{logisticsCompany}}</span>
{{#if logisticsNum}}
<span>快递单号:{{logisticsNum}}</span>
{{/if}}
</p>
<span class="iconfont icon-right">&#xe614;</span>
</a>
{{/if}}
{{/orderBtn}}
</section>
<section class="goods block">
{{#if isJit}}
{{> jit-more}}
{{/if}}
{{# goods}}
{{> order/good}}
{{> order/good}}
{{/ goods}}
</section>
... ... @@ -108,53 +103,20 @@
</ul>
{{/invoice}}
<div class="opt block">
{{#if isDepositAdvance}}
<div class="order-opt">
<span class="order-opt-info">请到App完成订单相关操作</span>
</div>
{{else}}
{{#unless unreceived}}
{{#unless unpaid}}
<span class="btn btn-del">删除订单</span>
{{#if isVirtual}}
<!--虚拟商品-->
{{else}}
{{#unless useLimitCode}}<span class="btn btn-rebuy">再次购买</span>{{/unless}}
{{/if}}
{{/unless}}
{{/unless}}
{{#if unpaid}}
{{!--时间倒计时按钮--}}
{{# orderBtn}}
{{#if leftTimeTop}}
<div class="clock">
<ul class="count-down hide">
<li>
<span class="iconfont count-down-icon">&#xe64a;</span>
</li>
<li>
<span class="hours">{{leftTime}}</span>
</li>
<li><span class="iconfont count-down-icon">&#xe64a;</span></li>
<li><span class="hours">{{leftTimeTop}}</span></li>
</ul>
<span class="btn btn-cancel">取消订单</span>
{{#if payUrl}}
<a href="{{payUrl}}">
<span class="btn btn-pay">立即付款</span>
</a>
{{/if}}
{{/if}}
{{#if logisticsUrl}}
<a href="{{logisticsUrl}}">
<span class="btn btn-check-logistics">查看物流</span>
</a>
{{/if}}
{{#if qrcode}}
<a href="{{qrcode}}">
<span class="btn btn-check-logistics">查看二维码</span>
</a>
{{/if}}
</div>
{{/if}}
</div>
{{/orderBtn}}
{{!--按钮组--}}
{{> order/order-btns}}
</div>
<div class="reason-mask">
... ... @@ -171,7 +133,24 @@
</div>
</div>
{{/ orderDetail}}
{{!-- 申请退款原因 --}}
<div class="refund-reason-mask">
<div class="refund-reason-box" >
<div class="box-head"><span class="box-cmp">完成</span></div>
<div class="swiper-container refund-box-main">
<ul class="swiper-wrapper">
{{#refundReason}}
<li class="swiper-slide" data-reason-id="{{id}}"><span >{{reason}}</span></li>
{{/refundReason}}
</ul>
<div class="refund-active-mask"></div>
</div>
</div>
</div>
</div>
<script>_ozprm = "orderid={{orderCode}}&ordertotal={{orderTotal}}";</script>
<script type="text/javascript" src="//static.yohobuy.com/m/v1/js/AG_Tracking.js"></script>
<script type="text/javascript">
... ...
{{#content}}
{{! 中间banner}}
{{#if singleImage}}
<div data-id="{{template_id}}">
{{> resources/banner}}
</div>
{{/if}}
{{! 两个小图}}
{{#if smallPic}}
{{> resources/thumb-row}}
{{/if}}
{{! 分隔楼层}}
{{#if divideImage}}
{{> resources/divide-image}}
{{/if}}
{{/content}}
... ...
<section class="block more-jit">
<a href="{{jitDetailUrl}}">
<div class="more-jit">
<span>{{packageTitle}}</span>
<span class="iconfont icon-right-arrow">&#xe614;</span>
</div>
</a>
</section>
{{#if jitDetailUrl}}
<section class="block more-jit">
<a href="{{jitDetailUrl}}">
<div class="more-jit">
<span>{{packageTitle}}</span>
<span class="iconfont icon-right-arrow">&#xe614;</span>
</div>
</a>
</section>
{{/if}}
... ...
... ... @@ -15,7 +15,6 @@ const AlipayStrategy = require('./models/passport-alipay').Strategy;
const _ = require('lodash');
// const md5 = require('md5');
const config = global.yoho.config;
const logger = global.yoho.logger;
... ...
... ... @@ -15,8 +15,6 @@ const privacy = (req, res) => {
};
const newpower = (req, res) => {
let parameter = {};
res.render('agreement/newpower', {
title: '关于新力传媒',
width750: true
... ... @@ -33,7 +31,6 @@ const aboutYoho = (req, res) => {
const agreement = (req, res) => {
let parameter = {};
let isApp = req.query.app_version || req.query.client_type || false;
if (req.yoho.isApp) {
parameter = {
... ...