Authored by zhangxiaoru

资讯

@@ -130,11 +130,11 @@ const getProductInfo = (req, res, next) => { @@ -130,11 +130,11 @@ const getProductInfo = (req, res, next) => {
130 * 换货详情页 130 * 换货详情页
131 */ 131 */
132 const exchangeDeatail = (req, res) => { 132 const exchangeDeatail = (req, res) => {
133 - let id = parseInt(req.params.applyId, 10),  
134 - uid = req.user.uid; 133 + // let id = parseInt(req.params.applyId, 10),
  134 + // uid = req.user.uid;
135 135
136 - // let id = 125946;  
137 - // let uid = 8050560; 136 + let id = 125946;
  137 + let uid = 8050560;
138 138
139 returns.getExchangeDetailData(id, uid).then(result => { 139 returns.getExchangeDetailData(id, uid).then(result => {
140 140
@@ -79,7 +79,7 @@ const changeSubmitAsync = (data, uid) => { @@ -79,7 +79,7 @@ const changeSubmitAsync = (data, uid) => {
79 goods: JSON.stringify(data.goods) 79 goods: JSON.stringify(data.goods)
80 }); 80 });
81 81
82 - return api.get('', requestData, {code: 200}); 82 + return api.get('', requestData);
83 }; 83 };
84 84
85 const setExpressNumberAsync = (uid, param, isChange) => { 85 const setExpressNumberAsync = (uid, param, isChange) => {
@@ -368,23 +368,34 @@ const _setExpressData = (data) => { @@ -368,23 +368,34 @@ const _setExpressData = (data) => {
368 const _setExchangeDetailData = (data) => { 368 const _setExchangeDetailData = (data) => {
369 data = camelCase(data); 369 data = camelCase(data);
370 370
371 - data.status = 10;  
372 -  
373 let list = {}; 371 let list = {};
374 372
375 switch (data.status) { 373 switch (data.status) {
376 case 0: 374 case 0:
377 list.audit = true; 375 list.audit = true;
  376 + list.reminder = true;
378 break; 377 break;
379 case 10: 378 case 10:
380 list.through = true; 379 list.through = true;
  380 + list.reminder = true;
381 381
382 if (data.deliveryTpyeName === '寄回换货') { 382 if (data.deliveryTpyeName === '寄回换货') {
383 - list.courier = true; 383 + list.logistics = true;
  384 + list.sendBack = true;
  385 + list.exchangeAddress = returnAddress;
  386 + } else {
  387 + list.inDoor = true;
  388 + }
  389 +
  390 + break;
  391 + case 30:
  392 + if (data.deliveryTpyeName === '寄回换货') {
  393 + list.takeGoods = true;
384 } 394 }
385 break; 395 break;
386 case 50: 396 case 50:
387 list.send = true; 397 list.send = true;
  398 + list.reminder = true;
388 list.auditSuccess = true; 399 list.auditSuccess = true;
389 break; 400 break;
390 case 40: 401 case 40:
@@ -392,7 +403,7 @@ const _setExchangeDetailData = (data) => { @@ -392,7 +403,7 @@ const _setExchangeDetailData = (data) => {
392 list.auditSuccess = true; 403 list.auditSuccess = true;
393 break; 404 break;
394 case 91: 405 case 91:
395 - list.cancel = true; 406 + list.abolish = true;
396 break; 407 break;
397 default: 408 default:
398 break; 409 break;
@@ -576,16 +587,6 @@ const getExchangeDetailData = (id, uid) => { @@ -576,16 +587,6 @@ const getExchangeDetailData = (id, uid) => {
576 exchangeDetail: {} 587 exchangeDetail: {}
577 }; 588 };
578 589
579 - // if (result.data) {  
580 - // // console.log(_setRefundDetailData(result.data));  
581 -  
582 - // Object.assign(exchangeData.exchangeDetail, _setReturnStatus(result.data.statusList));// 头部  
583 -  
584 - // Object.assign(exchangeData.exchangeDetail, _setExchangeDetailData(result.data));  
585 -  
586 - // Object.assign(exchangeData.exchangeDetail, camelCase(result.data));  
587 - // }  
588 -  
589 if (result[0] && result[0].data) { 590 if (result[0] && result[0].data) {
590 591
591 let data = result[0].data; 592 let data = result[0].data;
@@ -602,7 +603,6 @@ const getExchangeDetailData = (id, uid) => { @@ -602,7 +603,6 @@ const getExchangeDetailData = (id, uid) => {
602 603
603 } 604 }
604 605
605 - // console.log(exchangeData.exchangeDetail.expressList);  
606 return exchangeData; 606 return exchangeData;
607 }); 607 });
608 }; 608 };
@@ -11,6 +11,10 @@ @@ -11,6 +11,10 @@
11 <p class="state"><span class="iconfont">&#xe60f;</span>换货申请已通过</p> 11 <p class="state"><span class="iconfont">&#xe60f;</span>换货申请已通过</p>
12 {{/if}} 12 {{/if}}
13 13
  14 + {{#if takeGoods}}
  15 + <p class="state"><span class="iconfont">&#xe60f;</span>您寄回的商品已收到</p>
  16 + {{/if}}
  17 +
14 {{#if send}} 18 {{#if send}}
15 <p class="state"><span class="iconfont">&#xe61a;</span>换货商品已发出</p> 19 <p class="state"><span class="iconfont">&#xe61a;</span>换货商品已发出</p>
16 {{/if}} 20 {{/if}}
@@ -19,27 +23,37 @@ @@ -19,27 +23,37 @@
19 <p class="state"><span class="iconfont">&#xe60f;</span>换货完成</p> 23 <p class="state"><span class="iconfont">&#xe60f;</span>换货完成</p>
20 {{/if}} 24 {{/if}}
21 25
22 - {{#if cancel}}  
23 - <p class="state">您已取消申请</p> 26 + {{#if abolish}}
  27 + <p class="abolish">您已取消申请</p>
24 {{/if}} 28 {{/if}}
25 29
26 <div class="way"> 30 <div class="way">
27 31
28 - {{#if finish}}  
29 - <p class="contact">如有疑问,请联系<span class="iconfont">&#xe61c;</span>在线客服</p>  
30 - {{else}} 32 + {{#if takeGoods}}
  33 + <p class="contact">我们会尽快将您的商品发出,请耐心等待,如有疑问,请联系<span class="iconfont">&#xe61c;</span>在线客服</p>
  34 + {{/if}}
  35 +
  36 + {{#if reminder}}
  37 + {{#if inDoor}}
31 <p class="way-title">您已选择{{deliveryTpyeName}}</p> 38 <p class="way-title">您已选择{{deliveryTpyeName}}</p>
  39 + {{/if}}
32 <p>请将商品连同吊牌、包装、发货单(如无发货单,您可找张白纸上注明订单编号,收货人姓名及手机号码)、发票(如有)、赠品(如有)一并保存, 40 <p>请将商品连同吊牌、包装、发货单(如无发货单,您可找张白纸上注明订单编号,收货人姓名及手机号码)、发票(如有)、赠品(如有)一并保存,
33 如有遗漏将影响您的退换货进度,敬请谅解 41 如有遗漏将影响您的退换货进度,敬请谅解
34 </p> 42 </p>
  43 + {{#if sendBack}}
  44 + <p>非我司原因的退换货,寄回运费由您承担。商品客观问题的退换货,请您先行垫付运费,邮费会在退款中补贴给您<b>我们不接受平邮和到付,感谢您的理解与支持。</b></p>
  45 + {{/if}}
35 {{/if}} 46 {{/if}}
36 47
37 {{#if audit}} 48 {{#if audit}}
38 <p class="cancel">如果您不想换货了,您可以<span class="cancel-btn">取消申请</span></p> 49 <p class="cancel">如果您不想换货了,您可以<span class="cancel-btn">取消申请</span></p>
39 {{/if}} 50 {{/if}}
40 51
41 -  
42 - {{#if through}} 52 + {{#if finish}}
  53 + <p class="contact">如有疑问,请联系<span class="iconfont">&#xe61c;</span>在线客服</p>
  54 + {{/if}}
  55 +
  56 + {{#if logistics}}
43 <div class="return-express"> 57 <div class="return-express">
44 {{#if number}} 58 {{#if number}}
45 <div class="show-content" data-id="{{id}}"> 59 <div class="show-content" data-id="{{id}}">
@@ -73,7 +87,17 @@ @@ -73,7 +87,17 @@
73 </dl> 87 </dl>
74 </div> 88 </div>
75 </div> 89 </div>
76 - {{/if}} 90 + {{/if}}
  91 +
  92 + {{# exchangeAddress}}
  93 + <div class="return-address">
  94 + <h4 class="third-title">寄回地址</h4>
  95 + <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;址:{{address}}</p>
  96 + <p>&nbsp;&nbsp;&nbsp;&nbsp;人:{{name}}</p>
  97 + <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;编:{{code}}</p>
  98 + <p>联系电话:{{phone}}</p>
  99 + </div>
  100 + {{/ exchangeAddress}}
77 101
78 {{#if auditSuccess}} 102 {{#if auditSuccess}}
79 <div class="order"> 103 <div class="order">
@@ -83,6 +107,7 @@ @@ -83,6 +107,7 @@
83 {{/if}} 107 {{/if}}
84 </div> 108 </div>
85 109
  110 + {{#if location}}
86 <div class="address"> 111 <div class="address">
87 <p class="address-title">收货地址<span class="modify-btn">修改</span></p> 112 <p class="address-title">收货地址<span class="modify-btn">修改</span></p>
88 <div class="address-detail"> 113 <div class="address-detail">
@@ -96,6 +121,7 @@ @@ -96,6 +121,7 @@
96 121
97 </div> 122 </div>
98 </div> 123 </div>
  124 + {{/if}}
99 </div> 125 </div>
100 126
101 <span class="exchange-goods">换货商品</span> 127 <span class="exchange-goods">换货商品</span>
@@ -62,20 +62,20 @@ @@ -62,20 +62,20 @@
62 <div class="application-form"> 62 <div class="application-form">
63 <div class="input-group"> 63 <div class="input-group">
64 <span class="asterisk">*</span> 64 <span class="asterisk">*</span>
65 - <label for="city">所在区域:</label> 65 + <label for="city" class="change-area">所在区域:</label>
66 <span id="city" class="cascading-address"></span> 66 <span id="city" class="cascading-address"></span>
67 </div> 67 </div>
68 - <div class="input-group"> 68 + <div class="input-group require">
69 <span class="asterisk">*</span> 69 <span class="asterisk">*</span>
70 <label for="person">收货人:</label> 70 <label for="person">收货人:</label>
71 <input id="user" class="input" type="text" name="person"> 71 <input id="user" class="input" type="text" name="person">
72 </div> 72 </div>
73 - <div class="input-group"> 73 + <div class="input-group require">
74 <span class="asterisk">*</span> 74 <span class="asterisk">*</span>
75 <label for="address">详细地址:</label> 75 <label for="address">详细地址:</label>
76 <input id="addr" class="input" type="text" name="address"> 76 <input id="addr" class="input" type="text" name="address">
77 </div> 77 </div>
78 - <div class="input-group"> 78 + <div class="input-group require">
79 <span class="asterisk">*</span> 79 <span class="asterisk">*</span>
80 <label for="mobile">手机号码:</label> 80 <label for="mobile">手机号码:</label>
81 <input id="mob" class="input" type="text" name="mobile"> 81 <input id="mob" class="input" type="text" name="mobile">
@@ -282,8 +282,12 @@ const setProductData = base => { @@ -282,8 +282,12 @@ const setProductData = base => {
282 total: 0 282 total: 0
283 }; 283 };
284 284
285 - // 目前没有RGB值先以背景图方式实现  
286 - group.rgb = `url('${helpers.image(value.colorImage, 30, 30)}')`; 285 + // 有RGB值限时rgb值没有则显示背景图
  286 + if (value.colorCode) {
  287 + group.rgb = `#${value.colorCode}`;
  288 + } else {
  289 + group.rgb = `url('${helpers.image(value.colorImage, 30, 30)}')`;
  290 + }
287 291
288 // 商品颜色列表 292 // 商品颜色列表
289 _.forEach(value.goodsImagesList, function(subValue) { 293 _.forEach(value.goodsImagesList, function(subValue) {
@@ -417,12 +421,18 @@ const setBrandIntro = brand => { @@ -417,12 +421,18 @@ const setBrandIntro = brand => {
417 let barndIntro = {}; 421 let barndIntro = {};
418 422
419 if (brand) { 423 if (brand) {
  424 + let text = _.replace(brand.brandIntro, /<\/?[^>]*>|\s*|(\n)|(\t)|(\r)/g, ''),
  425 + more = `... <a href="/product/shop/${brand.brandDomain}?brandIntro=true" class="blue">了解更多>></a>`;
  426 +
420 barndIntro = { 427 barndIntro = {
421 brand: { 428 brand: {
422 titleEn: 'BRAND', 429 titleEn: 'BRAND',
423 titleCn: '品牌介绍', 430 titleCn: '品牌介绍',
424 logo: brand.brandIco, 431 logo: brand.brandIco,
425 - intro: brand.brandIntro 432 + intro: _.truncate(text, {
  433 + length: 300,
  434 + omission: more
  435 + })
426 } 436 }
427 }; 437 };
428 } 438 }
1 var colorTpl = require('../../tpl/me/color-list.hbs'); 1 var colorTpl = require('../../tpl/me/color-list.hbs');
2 var sizeTpl = require('../../tpl/me/size-list.hbs'); 2 var sizeTpl = require('../../tpl/me/size-list.hbs');
3 3
  4 +var dialog = require('../plugins/dialog');
  5 +var _alert = dialog.Alert;
  6 +
4 var addrSelector = require('../plugins/cascading-address'); 7 var addrSelector = require('../plugins/cascading-address');
5 var addr; 8 var addr;
6 9
  10 +var nameReg = /^[\u4e00-\u9fa5]{2,5}$/;
  11 +var addressReg = /^[\s\S]{2,100}$/;
  12 +var phoneReg = /^(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$/;
  13 +
  14 +var validate = require('./order/validation');
  15 +
  16 +var validateMap = {
  17 + user: {
  18 + sl: '#user',
  19 + v: {
  20 + reg: nameReg,
  21 + errMsg: '真实姓名至少2个中文,最多5个中文'
  22 + }
  23 + },
  24 + addr: {
  25 + sl: '#addr',
  26 + v: {
  27 + reg: addressReg,
  28 + errMsg: '详细地址不能为空'
  29 + }
  30 + },
  31 + mob: {
  32 + sl: '#mob',
  33 + v: {
  34 + reg: phoneReg,
  35 + errMsg: '您输入的联系电话格式不正确'
  36 + }
  37 + }
  38 +};
  39 +
7 // 添加.check方法 40 // 添加.check方法
8 require('../plugins/check'); 41 require('../plugins/check');
9 42
@@ -247,18 +280,52 @@ function submitChange(d) { @@ -247,18 +280,52 @@ function submitChange(d) {
247 url: '/me/return/submitExchange', 280 url: '/me/return/submitExchange',
248 data: d 281 data: d
249 }).done(function(result) { 282 }).done(function(result) {
250 - console.log(result); 283 + if (result.code === 200) {
  284 + location.href = '/me/return';
  285 + } else {
  286 + new _alert('<h1>' + result.message + '</h1>').show();
  287 + }
251 }).fail(function(err) { 288 }).fail(function(err) {
252 console.log(err); 289 console.log(err);
253 }); 290 });
254 } 291 }
255 292
  293 +function validateData() {
  294 + var $inputs = $('.express-info-box .require input');
  295 + var pass = true;
  296 +
  297 + $inputs.each(function(idx, input) {
  298 + var k = input.id;
  299 +
  300 + if (k && validateMap[k]) {
  301 + if (!validate.do(validateMap[k].sl, validateMap[k].v)) {
  302 + pass = false;
  303 + }
  304 + }
  305 + });
  306 +
  307 + // 检查地址
  308 + if (!validate.addr(addr.getAreaIds(), {
  309 + el: '#city',
  310 + errMsg: '请填写完整的省市区信息'
  311 + })) {
  312 + pass = false;
  313 + }
  314 +
  315 + return pass;
  316 +}
  317 +
256 function bindConfirmEvent() { 318 function bindConfirmEvent() {
257 $('.confirm').on('click', function() { 319 $('.confirm').on('click', function() {
258 var $changeGood = $('.change-info-box.will-change'); 320 var $changeGood = $('.change-info-box.will-change');
259 var changeGoodsList = []; 321 var changeGoodsList = [];
260 var changeData = {}; 322 var changeData = {};
261 323
  324 + if (!validateData()) {
  325 + return false;
  326 + }
  327 +
  328 +
262 $changeGood.each(function(index, good) { 329 $changeGood.each(function(index, good) {
263 var goodObj = {}; 330 var goodObj = {};
264 var $good = $(good); 331 var $good = $(good);
@@ -290,6 +357,17 @@ function bindConfirmEvent() { @@ -290,6 +357,17 @@ function bindConfirmEvent() {
290 }); 357 });
291 } 358 }
292 359
  360 +function bindBlurEvent() {
  361 + $('.express-info-box .require input').on('blur', function() {
  362 + var $this = $(this);
  363 + var v = validateMap[this.id];
  364 +
  365 + if ($this.val().length > 0) {
  366 + validate.do(v.sl, v.v);
  367 + }
  368 + });
  369 +}
  370 +
293 371
294 function initAddr() { 372 function initAddr() {
295 addr = addrSelector({ 373 addr = addrSelector({
@@ -304,4 +382,5 @@ $(document).on('ready', function() { @@ -304,4 +382,5 @@ $(document).on('ready', function() {
304 bindCheckboxEvent(); 382 bindCheckboxEvent();
305 bindConfirmEvent(); 383 bindConfirmEvent();
306 initAddr(); 384 initAddr();
  385 + bindBlurEvent();
307 }); 386 });
@@ -9,6 +9,18 @@ @@ -9,6 +9,18 @@
9 } 9 }
10 } 10 }
11 11
  12 + .abolish {
  13 + font-size: 16px;
  14 + color: #5cb0de;
  15 + padding-bottom: 15px;
  16 + border-bottom: 1px solid #eee;
  17 +
  18 + span {
  19 + font-size: 20px;
  20 + margin-right: 5px;
  21 + }
  22 + }
  23 +
12 .way { 24 .way {
13 font-size: 14px; 25 font-size: 14px;
14 border-bottom: 1px solid #eee; 26 border-bottom: 1px solid #eee;
@@ -22,7 +34,6 @@ @@ -22,7 +34,6 @@
22 34
23 p { 35 p {
24 line-height: 22px; 36 line-height: 22px;
25 - height: 22px;  
26 } 37 }
27 38
28 .cancel { 39 .cancel {
@@ -48,6 +59,7 @@ @@ -48,6 +59,7 @@
48 59
49 .contact { 60 .contact {
50 line-height: 50px; 61 line-height: 50px;
  62 + height: 50px;
51 63
52 span { 64 span {
53 margin-left: 20px; 65 margin-left: 20px;
@@ -61,7 +73,7 @@ @@ -61,7 +73,7 @@
61 } 73 }
62 74
63 .order { 75 .order {
64 - margin: 23px 0 10px; 76 + margin-bottom: 10px;
65 height: 50px; 77 height: 50px;
66 line-height: 50px; 78 line-height: 50px;
67 overflow: hidden; 79 overflow: hidden;
@@ -288,4 +300,17 @@ @@ -288,4 +300,17 @@
288 margin-bottom: 10px; 300 margin-bottom: 10px;
289 } 301 }
290 302
  303 + .return-address {
  304 + padding: 40px 0 20px;
  305 + border-bottom: 1px solid #eee;
  306 +
  307 + > p {
  308 + padding-top: 10px;
  309 + }
  310 +
  311 + > p:first-child {
  312 + padding-top: 0;
  313 + }
  314 + }
  315 +
291 } 316 }
@@ -109,6 +109,25 @@ @@ -109,6 +109,25 @@
109 color: #c71814 !important; 109 color: #c71814 !important;
110 } 110 }
111 111
  112 +.error-msg {
  113 + color: #c71814;
  114 +}
  115 +
  116 +.correct-msg {
  117 + @extend .blue;
  118 +}
  119 +
  120 +.error-msg,
  121 +.correct-msg {
  122 + font-size: 14px;
  123 + padding-left: 5px;
  124 +
  125 + .iconfont {
  126 + font-size: 14px;
  127 + margin-right: 5px;
  128 + }
  129 +}
  130 +
112 @import "address"; 131 @import "address";
113 @import "order/index"; 132 @import "order/index";
114 @import "return/index"; 133 @import "return/index";
@@ -180,24 +180,5 @@ @@ -180,24 +180,5 @@
180 } 180 }
181 } 181 }
182 } 182 }
183 -  
184 - .error-msg {  
185 - color: #c71814;  
186 - }  
187 -  
188 - .correct-msg {  
189 - color: $skyBlue;  
190 - }  
191 -  
192 - .error-msg,  
193 - .correct-msg {  
194 - font-size: $normalSize;  
195 - padding-left: 5px;  
196 -  
197 - .iconfont {  
198 - font-size: $normalSize;  
199 - margin-right: 5px;  
200 - }  
201 - }  
202 } 183 }
203 } 184 }
@@ -46,6 +46,10 @@ @@ -46,6 +46,10 @@
46 left: 90px; 46 left: 90px;
47 } 47 }
48 48
  49 + .change-area {
  50 + width: 375px !important;
  51 + }
  52 +
49 .change-type { 53 .change-type {
50 padding-bottom: 20px; 54 padding-bottom: 20px;
51 border-bottom: 1px solid #f1f1f1; 55 border-bottom: 1px solid #f1f1f1;
@@ -265,8 +265,7 @@ @@ -265,8 +265,7 @@
265 } 265 }
266 266
267 .intro-text { 267 .intro-text {
268 - max-height: 100px;  
269 - overflow: hidden; 268 + line-height: 2;
270 } 269 }
271 } 270 }
272 271