Authored by biao

Merge branch 'release/1.0' of http://git.yoho.cn/fe/yoho-blk into release/1.0

... ... @@ -21,7 +21,6 @@ const getAddressDataAsync = (uid, limit) => {
uid: uid,
limit: limit
}).then(result => {
console.log(result);
return result;
});
};
... ...
... ... @@ -19,7 +19,7 @@
<div class="form-group">
<lable class="label-name">手机验证码:</lable>
<input id="msg-code" type="text" class="input small-input">
<span id="send-code" class="btn white">发送验证码</span>
<span id="send-code" class="btn white disable">发送验证码</span>
</div>
<div class="form-group">
<span id="mobile-step1" class="btn submit">提交</span>
... ...
... ... @@ -24,7 +24,7 @@
<div class="form-group">
<lable class="label-name">手机验证码:</lable>
<input id="msg-code" type="text" class="input small-input">
<span id="send-code2" class="btn white">发送验证码</span>
<span id="send-code2" class="btn white disable">发送验证码</span>
</div>
<div class="form-group">
<span id="mobile-step2" class="btn submit">提交</span>
... ...
... ... @@ -21,7 +21,7 @@ const list = {
q.page = parseInt(q.page || 1, 10);
q.order = q.order || 's_n_desc';
q.channel = channel;
q.yh_channel = channel;
let retData = {
module: 'product',
... ... @@ -76,7 +76,7 @@ const list = {
q.page = parseInt(q.page || 1, 10);
q.order = q.order || 's_n_desc';
q.channel = channel;
q.yh_channel = channel;
let retData = {
module: 'product',
... ...
... ... @@ -29,9 +29,8 @@ const Query = {
query: query
};
Promise.all([Search.queryAllSort(q), Search.queryProduct(q)]).then(allResult => {
let allSort = camelCase(allResult[0]);
let result = allResult[1];
Promise.all([Search.queryProduct(q)]).then(allResult => {
let result = allResult[0];
if (result && result.code === 200 && result.data) {
let data = camelCase(result.data);
... ... @@ -43,12 +42,12 @@ const Query = {
if (data.filter) {
data.filter.standard = data.standard;
data.filter.groupSort = DataHelper.sortConvert(allSort.data.sort);
retData.filter = DataHelper.filterHandle(data.filter, q);
retData.filter.showPrice = data.total > 10;
retData.filter.showInfo = (retData.filter.style && retData.filter.style.length > 0)
|| (data.standard && data.standard.length > 0); //eslint-disable-line
retData.filter.useSmallSort = 1;
}
retData.navPath = {
... ...
... ... @@ -101,7 +101,7 @@ const shop = {
q.order = q.order || 's_n_desc';
q.page = parseInt(q.page || 1, 10);
q.channel = channel;
q.yh_channel = channel;
ShopData.getShopHeadData(domain, uid).then(result => {
data.banner = result;
... ...
... ... @@ -246,7 +246,7 @@ const helpers = {
let filters = [];
let customPriceLow = '';
let customPriceHigh = '';
let showSize = (!!q.msort || !!q.misort);
let showSize = (!!q.msort || !!q.misort) && sizeInfo;
genders.forEach(g => {
if (g.value === q.gender) {
... ... @@ -275,6 +275,9 @@ const helpers = {
s.sub.unshift({
categoryName: '全部' + s.categoryName,
categoryId: '',
relationParameter: {
sort: s.relationParameter ? s.relationParameter.sort : ''
},
checked: q.msort && q.msort === s.categoryId && !q.misort
});
... ...
... ... @@ -36,19 +36,24 @@ function _paramHanlde(obj) {
obj.standard_value_id = standards[1];
}
if (obj.channel) {
switch (obj.channel) {
let _gender;
if (obj.yh_channel) {
switch (obj.yh_channel) {
case 'men':
obj.gender = '1,3';
_gender = '1,3';
break;
case 'women':
obj.gender = '2,3';
_gender = '2,3';
break;
default:
break;
}
}
if (obj.gender || _gender) {
obj.gender = obj.gender || _gender;
}
return obj;
}
... ... @@ -62,8 +67,9 @@ const Search = {
queryProduct(params) {
let finalParams = {
method: 'app.search.li',
limit: 45
method: 'web.search.search',
limit: 45,
need_filter: '1'
};
Object.assign(finalParams, _paramHanlde(params));
... ... @@ -72,7 +78,7 @@ const Search = {
},
queryProductOfBrand(params) {
let finalParams = {
method: 'app.search.li',
method: 'web.search.search',
limit: 45
};
... ... @@ -82,7 +88,7 @@ const Search = {
},
queryNewProduct(params) {
let finalParams = {
method: 'app.search.newProduct',
method: 'web.search.search',
limit: 45
};
... ...
... ... @@ -139,6 +139,7 @@ const ShopService = {
info.info = shopIntro.shopIntro;
info.btnName = '品牌介绍';
info.isFavorite = brandInfo.isFavorite === 'Y';
info.showShopName = shopIntro.isShowShopName === 'Y';
let shopData = yield Promise.all([ShopService.getShopDecorator(shopId),
ShopService.getShopSecondSorts(domainInfo.id, shopId)]);
... ...
{{# banner}}
<div class="brand-banner" data-brand="{{brandId}}" data-shop="{{shopId}}">
<div class="brand-img" style="height:150px; background: url('{{image banner 1150 150}}')"></div>
{{#if showShopName}}
<div class="shop-name">{{name}}</div>
{{/if}}
<p class="opts">
<a id="brand-info">
<i class="iconfont">&#xe631;</i>
... ...
... ... @@ -20,7 +20,7 @@
<div class="list-body nano">
<div class="nano-content">
{{#each sortData}}
<div class="input-radio" data-value="{{relationParameter.sort}}"
<div class="input-radio" data-value="{{relationParameter.sort}}" data-usesmall="{{../useSmallSort}}"
data-category="{{categoryId}}">
{{> icon/radio }}
<label>{{categoryName}}</label>
... ... @@ -39,7 +39,7 @@
<div class="list-body nano">
<div class="nano-content">
{{#each sub}}
<div class="input-radio" data-value="{{relationParameter.sort}}"
<div class="input-radio" data-value="{{relationParameter.sort}}" data-usesmall="{{../../useSmallSort}}"
data-category="{{categoryId}}">
{{> icon/radio }}
<label>{{categoryName}}</label>
... ... @@ -161,7 +161,7 @@
<div class="title">商品属性</div>
<div class="yoho-ui-accordion">
<div class="yoho-ui-accordion no-active">
{{#if style}}
<h3>风格</h3>
<div class="body">
... ...
... ... @@ -62,7 +62,7 @@ const index = (req, res, next) => {
}
];
res.header('Cache-Control', 'no-cache');
res.header('Cache-Control', 'no-store');
res.display('order', {
content: data,
... ...
... ... @@ -47,7 +47,7 @@ exports.showStorage = (leftNumber) => {
leftNumber = +leftNumber;
if (leftNumber <= 3 && leftNumber >= 0) {
return `仅剩${leftNumber}件`;
return '余量有限';
} else if (leftNumber < 0) {
return '库存不足';
}
... ...
... ... @@ -53,7 +53,6 @@ const Payment = {
let bankCode = ''; // 暂时写成'', 参考php代码 Payment.php:564
console.log(paymentRecord);
if (!paymentRecord || paymentRecord.code !== 200 || !prePayResult || prePayResult.code !== 200) {
let message = paymentRecord && paymentRecord.message ? paymentRecord.message : '系统繁忙,请稍后再试';
... ...
... ... @@ -139,7 +139,7 @@ const _submit = (uid, other) => {
address_id: other.address_id,
use_yoho_coin: other.use_yoho_coin,
remark: other.remark,
isPrintPrice: other.isPrintPrice,
is_print_price: other.isPrintPrice,
delivery_time: other.delivery_time,
delivery_way: other.delivery_way,
payment_id: other.payment_id,
... ...
... ... @@ -56,7 +56,7 @@
<div class="bag-content">
<p class="cn">您的购物袋暂无商品</p>
<p class="en">
Your shopping bags no goods ,<br>
Your shopping bag is empty ,<br>
welcome go to shopping !
</p>
</div>
... ...
... ... @@ -7,7 +7,7 @@ module.exports = function(leftNumber) {
leftNumber = +leftNumber;
if (leftNumber <= 3 && leftNumber >= 0) {
return '仅剩' + leftNumber + '件';
return '余量有限';
} else if (leftNumber < 0) {
return '库存不足';
}
... ...
... ... @@ -94,7 +94,7 @@ $('.yoho-group a').hover(function() {
$(this).text(data.en);
});
$('.tag-bag').hover(function() {
$('.tag-bag').mouseenter(function() {
refreshBag();
});
... ...
... ... @@ -11,7 +11,7 @@ var type = types[types.length - 1];// 界面操作类型
var $imgCaptchaInput = $('#captcha');
var second = 60;
var $sms = $('#send-code2');// 发送短信验证码按钮
var area = $('#country-code').text().substring(0) || '86';// 地区码
var area = $('#country-code').text().substring(1) || '86';// 地区码
// 发送短信后倒计时显示
var disableSMSBtn = function() {
second -= 1;
... ... @@ -53,6 +53,7 @@ $('[placeholder]').placeholder();
*/
$('#region').on('change', function() {
$('#country-code').text($(this).val());
area = $(this).val().substring(1);
});
// 校验手机号码
... ... @@ -71,6 +72,7 @@ $('#real-mobile').blur(function() {
},
success: function(data) {
if (data.code === 200) {
$sms.removeClass('disable');
self.find('.tips-success').addClass('ok').show();
self.find('.tips-error').removeClass('notok').hide();
} else {
... ...
... ... @@ -8,7 +8,7 @@ var dialog = require('../../plugins/dialog');
var _alert = dialog.Alert;
var types = location.pathname.split('/');
var type = types[types.length - 1];// 界面操作类型
var area = $('#country-code').text() || '86';
var area = $('#country-code').text().substring(1) || '86';
/**
* 手机号码验证
... ...
... ... @@ -24,10 +24,12 @@ var jQuery = require('yoho-jquery');
init: function(options) {
var type = options.type || defaults.type;
var ele = this;
var _checked = options.checked || $('.iconfont', this).hasClass('checked');
var _checked;
options = $.extend({}, defaults, $(this).data('options'), defaultsHtml[type], options);
_checked = options.checked || $('.iconfont', this).hasClass('checked');
$('.iconfont', this).removeClass('radio').removeClass('checkbox').addClass(options.type);
$('.iconfont', this).html(_checked ? options.checkedHtml : options.uncheckedHtml);
... ...
... ... @@ -59,15 +59,23 @@ var YohoListPage = {
type: 'radio',
group: 'sort',
onChange: function(ele) {
var useSmall = $(ele).data('usesmall') === 1;
var subCategoryId = $(ele).data('category');
var sort = $(ele).data('value');
var categoryId = $(ele).parents('.body').data('value');
var data = {
page: 1,
size: ''
};
YohoListPage.go({
msort: categoryId,
misort: subCategoryId,
size: '',
page: 1
});
if (useSmall) {
data.sort = sort;
} else {
data.msort = categoryId;
data.misort = subCategoryId;
}
YohoListPage.go(data);
}
});
... ...
... ... @@ -107,12 +107,17 @@ $(function() {
$('#removed_products').delegate('.send-to-favorite', 'click', function() {
var $removedProduct = $(this).parents('.removed-product');
Cart.sendToFavorite([$.parseJSON($(this).attr('data-product_info'))], function() {
var info = $.parseJSON($(this).attr('data-product_info'));
Cart.sendToFavorite([info], function() {
if ($('#removed_products .removed-product').length > 1) {
$removedProduct.remove();
} else {
$('#removed_products').html('');
}
// clear removed memory
Cart.clearRemovedMemory(info.productSku);
});
}).delegate('.buy-again', 'click', function() {
var productInfo = $.parseJSON($(this).attr('data-rebuy_info')),
... ... @@ -125,6 +130,9 @@ $(function() {
} else {
$('#removed_products').html('');
}
// clear removed memory
Cart.clearRemovedMemory(productInfo.productSku);
});
});
});
... ...
... ... @@ -286,6 +286,25 @@ Cart = {
}));
},
clearRemovedMemory: function(sku) {
var idx;
if (!sku) {
return;
}
// remove sku
removedProSkus.splice(removedProSkus.indexOf(sku), 1);
// remove info
for (idx = removedProsInfo.length - 1; idx >= 0; idx--) {
if (removedProsInfo[idx].productSku === sku) {
removedProsInfo.splice(idx, 1);
return;
}
}
},
/*
* 商品移入收藏夹
* @function [sendToFavorite]
... ... @@ -392,14 +411,14 @@ Cart = {
filterSet.push({
proId: res.id,
color: color.color,
active: color.cur,
active: color.color === defaultColor ? true : false,
sizes: color.sizes,
pic: color.thumbs[0],
selectable: color.total > 0,
colorName: color.name,
rgb: color.rgb
});
if (color.color === defaultColor && color.cur) {
if (color.color === defaultColor) {
defaultImg = color.thumbs[0];
}
}
... ... @@ -477,18 +496,18 @@ Cart = {
editTarget.find('.size-item').click(function() {
var $this = $(this);
if ($this.hasClass('current')) {
if ($this.hasClass('active') || $this.hasClass('disabled')) {
return;
}
$(this).addClass('current').siblings('.current').removeClass('current');
$(this).addClass('active').siblings('.active').removeClass('active');
newProductSku = $(this).attr('data-sku');
});
// 初始化size list选中项(其他颜色中第一个尺码)
editTarget.find('.sizes-list.mb10').each(function() {
if ($(this).find('.current').length === 0) {
$(this).find('.size-item').first().addClass('current');
if ($(this).find('.active').length === 0) {
$(this).find('.size-item').first().addClass('active');
}
});
},
... ...
... ... @@ -241,7 +241,7 @@ $('.used-coin').on('click', '.modify', function() {
});
// 添加备注-是否打印价格
$printPrice.printPrice = true; // 默认为true
$printPrice.printPrice = false; // 默认为false
$('.print-price-radio').check({
type: 'radio',
... ...
... ... @@ -11,6 +11,15 @@
background-size: 100% 100%;
position: relative;
.shop-name {
display: block;
position: absolute;
left: 20px;
bottom: 15px;
font-size: 35px;
color: #fff;
}
p.opts {
display: block;
position: absolute;
... ...
... ... @@ -189,6 +189,15 @@ $hoverColor: #379ed6;
text-align: center;
font-size: 12px;
padding: 4px;
&.disabled {
color: #f0f0f0;
border-color: #f0f0f0;
}
&.current.disabled {
background-color: #999;
}
}
.color-item {
... ...
... ... @@ -36,7 +36,7 @@
border-width: 10px;
}
.current {
.active {
background-color: #444;
color: #fff;
}
... ...
... ... @@ -38,7 +38,7 @@
</a>
</li>
<li class="pro-info">
{{!-- <div class="brand-name">{{brand_name}}</div> --}}
<a class="brand-name" href="/product/shop/{{brand_domain}}" target="_blank">{{brand_name}}</a>
<div class="pro-name"><a href="/product/pro_{{product_id}}_{{goods_id}}/{{cn_alphabet}}.html" target="_blank">{{product_name}}</a></div>
<div class="color-size editable" data-productId="{{product_id}}" id="edit_{{product_id}}" data-productSkn="{{product_skn}}">
{{#if color_name}}
... ... @@ -60,7 +60,7 @@
<span class="iconfont">&#xe621;</span>
</div>
<div class="num">
<input type="text" class="input" value={{buy_number}} />
<input type="text" class="input" value={{buy_number}} readonly />
</div>
<div class="plus action {{#isEqual left_number 0}}disable{{/isEqual}}">
<span class="iconfont">&#xe61f;</span>
... ... @@ -108,7 +108,7 @@
</a>
</li>
<li class="pro-info">
{{!-- <div class="brand-name">{{brandName}}</div> --}}
<a class="brand-name" href="/product/shop/{{brand_domain}}" target="_blank">{{brand_name}}</a>
<div class="pro-name"><a href="/product/pro_{{product_id}}_{{goods_id}}/{{cn_alphabet}}.html" target="_blank">{{product_name}}</a></div>
<div class="color-size editable" data-productId="{{product_id}}" id="edit_{{product_id}}" data-productSkn="{{product_skn}}">
{{#if color_name}}
... ... @@ -127,7 +127,7 @@
<span class="iconfont">&#xe621;</span>
</div>
<div class="num">
<input type="text" class="input" value={{buy_number}} />
<input type="text" class="input" value={{buy_number}} readonly />
</div>
<div class="plus action {{#isEqual left_number 0}}disable{{/isEqual}}">
<span class="iconfont">&#xe61f;</span>
... ... @@ -166,6 +166,7 @@
</a>
</li>
<li class="pro-info">
<a class="brand-name" href="/product/shop/{{brand_domain}}" target="_blank">{{brand_name}}</a>
<div class="pro-name"><a href="javascript:void(0)">{{product_name}}</a></div>
<div>
{{#if color_name}}
... ... @@ -183,7 +184,7 @@
<span class="iconfont">&#xe621;</span>
</div>
<div class="num">
<input type="text" class="input" value={{buy_number}} />
<input type="text" class="input" value={{buy_number}} readonly />
</div>
<div class="plus action {{#isEqual left_number 0}}disable{{/isEqual}}">
<span class="iconfont">&#xe61f;</span>
... ...
... ... @@ -26,7 +26,7 @@
<div class="sizes-list mb10">
{{#each sizes}}
<span class="size-item mr10 mb10{{#isEqual ../../defaultSize name}} current{{/isEqual}}{{#isEqual num 0}} disabled{{/isEqual}}"
<span class="size-item mr10 mb10{{#isEqual ../../defaultSize name}} current active{{/isEqual}}{{#isEqual num 0}} disabled{{/isEqual}}"
data-sku="{{sku}}">{{name}}</span>
{{/each}}
</div>
... ...