Authored by htoooth

Merge remote-tracking branch 'origin/release/1.0' into release/1.0

... ... @@ -158,7 +158,7 @@ const exchangeDeatail = (req, res) => {
* 换货申请提交
*/
const exchangeSubmit = (req, res, next) => {
const uid = req.user.uid || '8050882';
const uid = req.user.uid;
returns.submitChange(req.query, uid).then(result => {
res.json(result);
... ...
... ... @@ -75,7 +75,7 @@ const _getTitle = (type)=> {
* 个人设置页面加载
*/
const index = (req, res, next) => {
let uid = req.user.uid || '8041246';
let uid = req.user.uid;
settingModel.getUserInfo(uid).then(result=> {
result.info.gender ? result.genders[result.info.gender - 1].checked = true :
... ...
... ... @@ -25,20 +25,6 @@ const returnAddress = {
phone: '17714194699'
};
// const _reduceArrByProductSku = data => {
// const d = [];
//
// d.push(data[0]);
//
// data.reduce((p, c) => { //eslint-disable-line
// if (p && c && p.productSku !== c.productSku) {
// d.push[c];
// }
// });
//
// return d;
// };
/**
* 获取用户退换货列表
* @function getUserReturn
... ... @@ -64,8 +50,8 @@ const getUserReturn = (uid, page) => {
};
const urlIndex = {
1: '/return/refund/detail/',
2: '/return/exchange/detail/'
1: '/me/return/refund/detail/',
2: '/me/return/exchange/detail/'
};
const typeIndex = {
... ... @@ -321,11 +307,10 @@ const _setRefundGoodList = (data) => {
*/
const _setRefundDetailData = (data) => {
let resData = {
id: data.id || 0
id: data.id || 0,
orderCode: data.source_order_code || ''
};
data.status = 20;
switch (data.status) {
case 10:
Object.assign(resData, {
... ...
... ... @@ -74,7 +74,7 @@
<div class="edit-content{{#if number}} hide{{/if}}"{{# expressList}} data-{{id}}="{{name}}"{{/ expressList}}>
<h4 class="third-title">填写物流</h4>
<p>请您在<span class="blue">7月30日24:00</span>将商品寄回并填写物流,逾期将自动取消申请</p>
<p>请您在<span class="blue">7天内</span>将商品寄回并填写物流,逾期将自动取消申请</p>
<dl class="express-wrap">
<dd>
物流公司:
... ... @@ -109,7 +109,7 @@
{{/ refundAddress}}
<div class="refund-detail-goods">
<h4 class="third-title">退货商品&nbsp;&nbsp;&nbsp;&nbsp;订单编号:{{id}}</h4>
<h4 class="third-title">退货商品&nbsp;&nbsp;&nbsp;&nbsp;订单编号:{{orderCode}}</h4>
<ul class="goods-header">
<li class="info">商品信息</li>
<li>退货原因</li>
... ...
... ... @@ -19,7 +19,11 @@
<p class="subtext badge refund-type">{{refundStr}}</p>
</div>
<div class="common-column special-border operation">
<p class="subtext cancel-apply" data-type="{{method}}" data-apply-id="{{id}}">取消申请</p>
{{#isY canCancel}}
{{# ../this}}
<p class="subtext cancel-apply" data-type="{{type}}" data-apply-id="{{id}}">取消申请</p>
{{/ ../this}}
{{/isY}}
<a href="{{detailUrl}}">
<p class="subtext">查看详情</p>
</a>
... ...
... ... @@ -9,6 +9,7 @@
<label class="label-name">真实姓名:</label>
<input id="username" class="input" type="text" placeholder="请输入2-12个汉字或英文"
value="{{info.username}}" minlength="2" maxlength="12">
<span class="blue error-tips">{{> icon/error-round}}2-12个汉字或英文</span>
</div>
<div class="form-group">
<label class="label-name">昵称:</label>
... ...
... ... @@ -54,7 +54,7 @@ const list = {
queryParams: q
};
res.display('list', _.assign(retData, {
products: DataHelper.handleProductList(data.productList),
products: DataHelper.handleProductList(data.productList, q),
order: q.order
}));
} else {
... ... @@ -108,7 +108,7 @@ const list = {
queryParams: q
};
res.display('newList', _.assign(retData, {
products: DataHelper.handleProductList(data.productList),
products: DataHelper.handleProductList(data.productList, q),
order: q.order
}));
} else {
... ...
... ... @@ -60,7 +60,7 @@ const Query = {
queryParams: q
};
res.display('list', _.assign(retData, {
products: DataHelper.handleProductList(data.productList),
products: DataHelper.handleProductList(data.productList, q),
order: q.order
}));
} else {
... ...
... ... @@ -144,7 +144,7 @@ const shop = {
};
res.display('shop-list', _.assign(data, {
products: DataHelper.handleProductList(ret.productList),
products: DataHelper.handleProductList(ret.productList, q),
order: q.order
}));
} else {
... ...
... ... @@ -44,6 +44,45 @@ const helpers = {
return letters;
},
getLettersFromBrand(brands, numberIndex) {
numberIndex = numberIndex || 0;
let letters = new Set();
let other = false;
_.forEach(brands, (b) => {
let name = b.brandNameEn || b.brandName;
let char = name.toLowerCase().charAt(0);
if ((char >= 'a' && char <= 'z') || (char >= 'A' && char <= 'Z')) {
letters.add(char);
} else {
other = true;
}
});
letters = Array.from(letters).sort().map(s => {
return {
letter: s.toUpperCase(),
selected: false
};
});
if (other && numberIndex === -1) {
letters.push({
letter: '0-9',
selected: false
});
} else if (other && numberIndex === 0) {
letters.unshift({
letter: '0-9',
selected: false
});
}
return letters;
},
/**
* 男女条件
* @returns {*[]}
... ... @@ -280,7 +319,7 @@ const helpers = {
priceRange: priceRange,
filters: filters,
showFilters: filters.length > 0,
letters: this.brandLetters(),
letters: this.getLettersFromBrand(brands),
customPriceLow: customPriceLow,
customPriceHigh: customPriceHigh,
showSize: showSize,
... ... @@ -294,10 +333,11 @@ const helpers = {
* @param list
* @returns {*}
*/
handleProductList(list) {
handleProductList(list, q) {
if (_.isArray(list)) {
list.forEach(g => {
let goodsList = g.goodsList;
let defaultImages = g.defaultImages;
let goodsId;
if (goodsList && goodsList.length > 0) {
... ... @@ -305,9 +345,13 @@ const helpers = {
goodsList.forEach(o => {
o.url = `${config.siteUrl}/product/pro_${g.productId}_${o.goodsId}/${o.cnAlphabet}.html`;
if (q.color && q.color === o.colorId) {
defaultImages = o.imagesUrl;
}
});
}
g.salesPrice = g.salesPrice || g.marketPrice;
g.defaultImages = defaultImages;
if (g.salesPrice === g.marketPrice) {
delete g.marketPrice;
}
... ...
... ... @@ -25,7 +25,7 @@ const Alipay = {
partner: payParams.merchant_id,
_input_charset: 'utf-8',
notify_url: config.pay.serviceNotify + 'payment/alipay_notify',
return_url: helpers.urlFormat('/shopping/pay/callback/alipay'),
return_url: 'http:' + helpers.urlFormat('/shopping/pay/callback/alipay'),
subject: '有货订单号:' + order.orderId,
out_trade_no: order.orderCode,
it_b_pay: common.getPayExpireMin(order.payExpire) + 'm',
... ...
... ... @@ -49,7 +49,7 @@ const updateOrderPayBank = (code, payment, bankCode) => {
const sendPayConfirm = (code, payment, uid) => {
return api.get('', {
method: 'app.SpaceOrders.payConfirm',
orderCode: code,
order_code: code,
payment_id: payment,
uid: uid
});
... ...
... ... @@ -18,7 +18,7 @@ const logger = global.yoho.logger;
const _ = require('lodash');
const payments = {
alipay: 33
alipay: 2
};
/**
... ... @@ -32,13 +32,13 @@ const getOnlinePayProvider = () => {
}
let online = _(result.data)
.filter(i => _.includes([33], i.id))
.filter(i => _.includes([payments.alipay], i.id))
.map(i => {
return {
id: i.id,
name: i.payName,
img: i.payIcon,
selected: i.id === 33
selected: i.id === payments.alipay
};
})
.value();
... ...
<label class="round-color{{#if cur}} cur{{/if}}" title="{{title}}" style="background: {{rgb}}">
<label class="round-color{{#if cur}} cur{{/if}}" title="{{title}}">
<div class="icon-back" style="background: {{rgb}}"></div>
<span class="iconfont icon-cover">&#xe61b;</span>
<span class="iconfont icon-round">&#xe620;</span>
</label>
\ No newline at end of file
... ...
... ... @@ -51,8 +51,6 @@ $searchForm.on('keyup', '#search-key', function(e) {
if (key) {
$searchForm.submit();
}
} else {
$searchKey.val(key.replace(new RegExp('\'', 'gm'), ''));
}
if (key) {
... ...
... ... @@ -17,11 +17,11 @@ var page = 1;
var Bll = {
// 获取路由中的请求参数
getQueryString: function() {
let queryArr = location.search.substr(1).split('&');
let query = {};
var queryArr = location.search.substr(1).split('&');
var query = {};
queryArr.forEach(function(pair) {
let arr = pair.split('=');
var arr = pair.split('=');
query[arr[0]] = arr[1];
});
... ... @@ -33,7 +33,7 @@ var Bll = {
delivering: 2
},
getDataList: function(type1, page1, beginTime1) {
let query = ['page=' + page1, 'queryType=' + type1, 'beginTime=' + beginTime1];
var query = ['page=' + page1, 'queryType=' + type1, 'beginTime=' + beginTime1];
location.search = query.join('&');
}
... ... @@ -44,7 +44,7 @@ require('./me');
// tab切换
$('.tabs li').on('click', function() {
let $this = $(this);
var $this = $(this);
type = Bll.typeMap[$this.data('type')];
page = 1;
... ... @@ -60,7 +60,7 @@ $('.tabs li').on('click', function() {
// 时间控件切换
$('#begin-time').on('change', function() {
let months = parseInt($(this).val(), 10);
var months = parseInt($(this).val(), 10);
type = Bll.getQueryString().queryType || 1;
page = 1;
... ...
... ... @@ -7,8 +7,8 @@ var cascadingAddress = require('../plugins/cascading-address');
var dialog = require('../plugins/dialog');
var _dialog = dialog.Dialog;
var _alert = dialog.Alert;
var modifyHead = require('./setting/modifyHead');
var tip;
var modifyHead = require('./setting/modifyHead');// flash操作
var tip;// 头像编辑弹框
var headHtml = modifyHead.swfobject('head', '600px', '400px', '../../img/me/head.swf?code=' + Math.random() +
'&upload_url=' + encodeURIComponent(location.protocol + '//' +
... ... @@ -27,17 +27,21 @@ var Bll = {
validate: function(info) {
var regBirth = new RegExp(/^[1-2][0-9][0-9][0-9]-[0-1]{0,1}[0-9]-[0-3]{0,1}[0-9]$/);
var regName = new RegExp(/^[\u4e00-\u9fa5_-a-zA-Z0-9]+$/);
var regRealName = new RegExp(/^[\u4e00-\u9fa5a-zA-Z]{2,12}$/);
var birthdayForm = $('#birthday');
var nickForm = $('#nick_name');
var realNameForm = $('#username');
var addressForm = $('.form-group-address');
var flag = true;
!regBirth.test(info.birthday) ? birthdayForm.next().show() : birthdayForm.next().hide();
!regName.test(info.nick_name) ? nickForm.next().show() : nickForm.next().hide();
!regRealName.test(info.username) ? realNameForm.next().show() : realNameForm.next().hide();
typeof (info.area_code) === 'undefined' ?
addressForm.css('margin-bottom', '20px').find('.error-tips').show() :
addressForm.css('margin-bottom', '70px').find('.error-tips').hide();
if (!regBirth.test(info.birthday) || !regName.test(info.nick_name) || typeof (info.area_code) === 'undefined') {
if (!regBirth.test(info.birthday) || !regName.test(info.nick_name) ||
!regRealName.test(info.username) || typeof (info.area_code) === 'undefined') {
flag = false;
}
return flag;
... ... @@ -46,9 +50,12 @@ var Bll = {
require('./me');
require('../plugins/check');
require('../me/setting/step1');
require('../me/setting/step2');
require('../me/setting/step3');
// 第一步:身份验证
require('../me/setting/validate');
// 第二步:操作
require('../me/setting/operate');
// 编辑头像移入移出切换效果
... ...
... ... @@ -20,9 +20,7 @@ var disableSMSBtn = function() {
second -= 1;
if (second < 0) {
second = 60;
$sms.text('获取短信验证码');
$sms.removeClass('disable');
$sms.removeClass('progress');
$sms.removeClass('progress').removeClass('disable').text('获取短信验证码');
} else {
$sms.add('progress');
$sms.text(second + '秒后可重新操作');
... ...
... ... @@ -20,23 +20,7 @@ var YohoListPage = {
require('../../common/header');
lazyload();
$('.nano').nanoScroller();
$('.yoho-ui-accordion', this.rootDoc).each(function() {
var opts = {
collapsible: true,
heightStyle: 'content',
active: 0
};
if ($(this).hasClass('no-active')) {
opts.active = false;
}
$(this).find('h3').each(function(index) {
if ($(this).hasClass('active')) {
opts.active = index;
}
});
$(this).accordion(opts);
});
YohoListPage.initAccordion();
$('.sex-body .input-radio', this.rootDoc).check({
type: 'radio',
... ... @@ -100,7 +84,29 @@ var YohoListPage = {
YohoListPage.eventBind();
},
initAccordion() {
$('.yoho-ui-accordion', this.rootDoc).each(function() {
var opts = {
collapsible: true,
heightStyle: 'content',
active: 0
};
if ($(this).hasClass('no-active')) {
opts.active = false;
}
$(this).find('h3').each(function(index) {
if ($(this).hasClass('active')) {
opts.active = index;
}
});
$(this).accordion(opts);
});
},
eventBind: function() {
$(window).resize(function() {
YohoListPage.initAccordion();
});
$('.mulit-choose', this.rootDoc).click(function() {
YohoListPage.openBrandMulitChoose();
});
... ...
... ... @@ -8,17 +8,23 @@
.iconfont {
font-size: 30px;
position: absolute;
top: 0;
left: 0;
}
.icon-back {
width: 90%;
height: 90%;
margin: 5%;
}
.icon-cover {
color: #fff;
color: #fefefe;
}
.icon-round {
color: #eee;
top: 0;
left: 0;
position: absolute;
}
&.cur .icon-round {
... ...
... ... @@ -80,6 +80,8 @@
overflow: hidden;
text-overflow: ellipsis;
line-height: 18px;
margin-top: 10px;
padding: 0 10px;
}
.price {
... ... @@ -118,7 +120,7 @@
.slide-switch {
display: block;
position: absolute;
top: 70px;
top: 90px;
width: 100%;
.iconfont {
... ...