Authored by zhangxiaoru

exchange

@@ -15,7 +15,7 @@ const orderModel = require('../models/order'); @@ -15,7 +15,7 @@ const orderModel = require('../models/order');
15 const index = (req, res) => { 15 const index = (req, res) => {
16 const type = req.query.type; 16 const type = req.query.type;
17 const page = req.query.page; 17 const page = req.query.page;
18 - const uid = global.yoho.uid || '13549567'; 18 + const uid = req.user.uid || '10931021';
19 19
20 orderModel.getOrderData(uid, type, page).then(result => { 20 orderModel.getOrderData(uid, type, page).then(result => {
21 res.display('index', { 21 res.display('index', {
@@ -32,7 +32,7 @@ const index = (req, res) => { @@ -32,7 +32,7 @@ const index = (req, res) => {
32 32
33 const detail = (req, res) => { 33 const detail = (req, res) => {
34 const code = req.query.code; 34 const code = req.query.code;
35 - const uid = global.yoho.uid || '7394907'; 35 + const uid = req.user.uid || '10931021';
36 36
37 orderModel.getOrderDetail(uid, code).then(result => { 37 orderModel.getOrderDetail(uid, code).then(result => {
38 res.display('index', { 38 res.display('index', {
@@ -50,7 +50,7 @@ const detail = (req, res) => { @@ -50,7 +50,7 @@ const detail = (req, res) => {
50 const getOrderList = (req, res) => { 50 const getOrderList = (req, res) => {
51 const type = req.query.type; 51 const type = req.query.type;
52 const page = req.query.page; 52 const page = req.query.page;
53 - const uid = global.yoho.uid || '7394907'; 53 + const uid = req.user.uid || '10931021';
54 54
55 orderModel.getOrderData(uid, type, page).then(result => { 55 orderModel.getOrderData(uid, type, page).then(result => {
56 res.display('order-table', { 56 res.display('order-table', {
@@ -65,7 +65,7 @@ const getOrderList = (req, res) => { @@ -65,7 +65,7 @@ const getOrderList = (req, res) => {
65 65
66 const getOrderTotal = (req, res) => { 66 const getOrderTotal = (req, res) => {
67 const type = req.query.type; 67 const type = req.query.type;
68 - const uid = global.yoho.uid || '7394907'; 68 + const uid = req.user.uid || '10931021';
69 69
70 70
71 orderModel.getOrderData(uid, type).then(result => { 71 orderModel.getOrderData(uid, type).then(result => {
@@ -78,7 +78,7 @@ const getOrderTotal = (req, res) => { @@ -78,7 +78,7 @@ const getOrderTotal = (req, res) => {
78 }; 78 };
79 79
80 const cancelOrder = (req, res) => { 80 const cancelOrder = (req, res) => {
81 - const uid = global.yoho.uid || '7394907'; 81 + const uid = req.user.uid || '10931021';
82 const code = req.query.orderCode; 82 const code = req.query.orderCode;
83 83
84 orderModel.cancelOrder(uid, code).then(result => { 84 orderModel.cancelOrder(uid, code).then(result => {
@@ -87,7 +87,7 @@ const cancelOrder = (req, res) => { @@ -87,7 +87,7 @@ const cancelOrder = (req, res) => {
87 }; 87 };
88 88
89 const deleteOrder = (req, res) => { 89 const deleteOrder = (req, res) => {
90 - const uid = global.yoho.uid || '7394907'; 90 + const uid = req.user.uid || '10931021';
91 const code = req.query.orderCode; 91 const code = req.query.orderCode;
92 92
93 orderModel.deleteOrder(uid, code).then(result => { 93 orderModel.deleteOrder(uid, code).then(result => {
@@ -96,7 +96,7 @@ const deleteOrder = (req, res) => { @@ -96,7 +96,7 @@ const deleteOrder = (req, res) => {
96 }; 96 };
97 97
98 const getExpressInfo = (req, res) => { 98 const getExpressInfo = (req, res) => {
99 - const uid = global.yoho.uid || '7394907'; 99 + const uid = req.user.uid || '10931021';
100 const code = req.query.orderCode; 100 const code = req.query.orderCode;
101 101
102 orderModel.getExpressInfo(uid, code).then(result => { 102 orderModel.getExpressInfo(uid, code).then(result => {
@@ -111,7 +111,7 @@ const getCancelOrderReason = (req, res) => { @@ -111,7 +111,7 @@ const getCancelOrderReason = (req, res) => {
111 }; 111 };
112 112
113 const editOrder = (req, res) => { 113 const editOrder = (req, res) => {
114 - const uid = global.yoho.uid || '7394907'; 114 + const uid = req.user.uid || '10931021';
115 const query = req.query; 115 const query = req.query;
116 116
117 query.uid = uid; 117 query.uid = uid;
@@ -11,7 +11,7 @@ const _ = require('lodash'); @@ -11,7 +11,7 @@ const _ = require('lodash');
11 11
12 12
13 const index = (req, res, next) => { 13 const index = (req, res, next) => {
14 - const uid = global.yoho.uid || '8050560'; 14 + const uid = global.yoho.uid || '8050882';
15 const page = req.query.page; 15 const page = req.query.page;
16 16
17 returns.getUserReturn(uid, page).then(result => { 17 returns.getUserReturn(uid, page).then(result => {
@@ -32,7 +32,7 @@ const detail = (req, res, next) => { @@ -32,7 +32,7 @@ const detail = (req, res, next) => {
32 }; 32 };
33 33
34 const refund = (req, res, next) => { 34 const refund = (req, res, next) => {
35 - let uid = req.user.uid || '8050560'; 35 + let uid = req.user.uid || '8050882';
36 let code = parseInt(req.params.orderCode, 10) || '160192757'; 36 let code = parseInt(req.params.orderCode, 10) || '160192757';
37 37
38 if (!uid || !code) { 38 if (!uid || !code) {
@@ -68,7 +68,7 @@ const refundApply = (req, res, next) => { @@ -68,7 +68,7 @@ const refundApply = (req, res, next) => {
68 68
69 const refundDetail = (req, res, next) => { 69 const refundDetail = (req, res, next) => {
70 let applyId = parseInt(req.params.applyId, 10) || '429528', 70 let applyId = parseInt(req.params.applyId, 10) || '429528',
71 - uid = req.user.uid || '8050560'; 71 + uid = req.user.uid || '8050882';
72 72
73 if (!uid || !applyId) { 73 if (!uid || !applyId) {
74 return next(); 74 return next();
@@ -76,7 +76,7 @@ const refundDetail = (req, res, next) => { @@ -76,7 +76,7 @@ const refundDetail = (req, res, next) => {
76 76
77 returns.getRefundDetailData(applyId, uid).then(result => { 77 returns.getRefundDetailData(applyId, uid).then(result => {
78 res.display('index', { 78 res.display('index', {
79 - page: 'returns-refund', 79 + page: 'refund',
80 content: result 80 content: result
81 }); 81 });
82 }).catch(next); 82 }).catch(next);
@@ -84,11 +84,11 @@ const refundDetail = (req, res, next) => { @@ -84,11 +84,11 @@ const refundDetail = (req, res, next) => {
84 84
85 const exchange = (req, res, next) => { 85 const exchange = (req, res, next) => {
86 const code = req.params.orderCode; 86 const code = req.params.orderCode;
87 - const uid = req.user.uid || '8050560'; 87 + const uid = req.user.uid || '8050882';
88 88
89 returns.getChangeGoodsList(code, uid).then(result => { 89 returns.getChangeGoodsList(code, uid).then(result => {
90 res.display('index', { 90 res.display('index', {
91 - page: 'returns-change', 91 + page: 'exchange',
92 isMe: true, 92 isMe: true,
93 content: Object.assign({ 93 content: Object.assign({
94 nav: mcHandler.getMeCrumb('我的退/换货'), 94 nav: mcHandler.getMeCrumb('我的退/换货'),
@@ -18,19 +18,19 @@ const helpers = global.yoho.helpers; @@ -18,19 +18,19 @@ const helpers = global.yoho.helpers;
18 18
19 const pageSize = 10; 19 const pageSize = 10;
20 20
21 -const _reduceArrByProductSku = data => {  
22 - const d = [];  
23 -  
24 - d.push(data[0]);  
25 -  
26 - data.reduce((p, c) => { //eslint-disable-line  
27 - if (p && c && p.productSku !== c.productSku) {  
28 - d.push[c];  
29 - }  
30 - });  
31 -  
32 - return d;  
33 -}; 21 +// const _reduceArrByProductSku = data => {
  22 +// const d = [];
  23 +//
  24 +// d.push(data[0]);
  25 +//
  26 +// data.reduce((p, c) => { //eslint-disable-line
  27 +// if (p && c && p.productSku !== c.productSku) {
  28 +// d.push[c];
  29 +// }
  30 +// });
  31 +//
  32 +// return d;
  33 +// };
34 34
35 const getUserReturn = (uid, page) => { 35 const getUserReturn = (uid, page) => {
36 36
@@ -190,7 +190,9 @@ const _setRefundGoodList = (data) => { @@ -190,7 +190,9 @@ const _setRefundGoodList = (data) => {
190 }; 190 };
191 191
192 const _setRefundDetailData = (data) => { 192 const _setRefundDetailData = (data) => {
193 - let resData = {}; 193 + let resData = {
  194 + id: data.id || 0
  195 + };
194 196
195 switch (data.status) { 197 switch (data.status) {
196 case 10: 198 case 10:
@@ -212,6 +214,27 @@ const _setRefundDetailData = (data) => { @@ -212,6 +214,27 @@ const _setRefundDetailData = (data) => {
212 break; 214 break;
213 } 215 }
214 216
  217 + let goods = [];
  218 +
  219 + _.forEach(data.goods_list, value => {
  220 + let cnAlphabet = value.cn_alphabet ? value.cn_alphabet : '';
  221 +
  222 + goods.push({
  223 + href: helpers.urlFormat(`/product/pro_${value.product_id}_${value.goods_id}/${cnAlphabet}.html`),
  224 + img: value.goods_image,
  225 + name: value.product_name,
  226 + size: value.size_name,
  227 + color: value.color_name,
  228 + num: 1, // 接口目前不支持
  229 + reason: value.reason_name || '--',
  230 + price: value.sales_price,
  231 + remark: value.remark,
  232 + evidence: value.evidence_images
  233 + });
  234 + });
  235 +
  236 + resData.goods = goods;
  237 +
215 return resData; 238 return resData;
216 }; 239 };
217 240
@@ -266,18 +289,19 @@ const getRefundDetailData = (applyId, uid) => { @@ -266,18 +289,19 @@ const getRefundDetailData = (applyId, uid) => {
266 return returnsAPI.getRefundDetailAsync(applyId, uid).then(result => { 289 return returnsAPI.getRefundDetailAsync(applyId, uid).then(result => {
267 let resData = {}; 290 let resData = {};
268 291
269 - Object.assign(resData, _setSideMenu('我的退/换货'));  
270 resData = { 292 resData = {
271 title: '退货申请', 293 title: '退货申请',
272 refundDetail: {} 294 refundDetail: {}
273 }; 295 };
  296 + Object.assign(resData, _setSideMenu('我的退/换货'));
274 297
275 if (result.data) { 298 if (result.data) {
276 - // console.log(_setRefundDetailData(result.data)); 299 + let data = result.data;
277 300
278 - Object.assign(resData.refundDetail, _setReturnStatus(result.data.statusList));// 头部 301 + // console.log(_setRefundDetailData(result.data));
  302 + Object.assign(resData.refundDetail, _setReturnStatus(data.statusList, !data.status));
279 303
280 - Object.assign(resData.refundDetail, _setRefundDetailData(result.data)); 304 + Object.assign(resData.refundDetail, _setRefundDetailData(data));
281 } 305 }
282 306
283 return {returns: resData}; 307 return {returns: resData};
@@ -319,23 +343,24 @@ const getProductInfo = (productId, productSkn) => { @@ -319,23 +343,24 @@ const getProductInfo = (productId, productSkn) => {
319 const getChangeGoodsList = (orderCode, uid) => { 343 const getChangeGoodsList = (orderCode, uid) => {
320 return returnsAPI.getChangeGoodsListAsync(orderCode, uid).then(result => { 344 return returnsAPI.getChangeGoodsListAsync(orderCode, uid).then(result => {
321 const basicData = { 345 const basicData = {
322 - title: '申请退货' 346 + title: '申请货'
323 }; 347 };
324 let data; 348 let data;
325 349
326 - console.log(result);  
327 350
328 if (result && result.data) { 351 if (result && result.data) {
329 data = camelCase(result.data); 352 data = camelCase(result.data);
330 353
331 354
332 - data.goodsList = _reduceArrByProductSku(data.goodsList); 355 + // data.goodsList = _reduceArrByProductSku(data.goodsList);
333 data.hidePrice = true; 356 data.hidePrice = true;
334 357
335 data.goodsList.forEach(good => { 358 data.goodsList.forEach(good => {
336 good.showCheckbox = true; 359 good.showCheckbox = true;
337 good.hidePrice = true; 360 good.hidePrice = true;
338 - good.buyNumber = good.num; 361 +
  362 + // good.buyNumber = good.num;
  363 + good.buyNumber = 1;
339 }); 364 });
340 } 365 }
341 366
@@ -27,8 +27,10 @@ @@ -27,8 +27,10 @@
27 {{/if}} 27 {{/if}}
28 {{#if showEditOption}} 28 {{#if showEditOption}}
29 <p class="subtext">评价晒单</p> 29 <p class="subtext">评价晒单</p>
30 - <p class="subtext">申请退货</p>  
31 - <a href="/return/exchange?code={{orderCode}}&id={{productId}}&skn={{productSkn}}"> 30 + <a href="/me/return/refund/{{orderCode}}">
  31 + <p class="subtext">申请退货</p>
  32 + </a>
  33 + <a href="/me/return/exchange/{{orderCode}}">
32 <p class="subtext">申请换货</p> 34 <p class="subtext">申请换货</p>
33 </a> 35 </a>
34 <p class="subtext delete">删除订单</p> 36 <p class="subtext delete">删除订单</p>
1 {{# refundDetail}} 1 {{# refundDetail}}
2 - <div class="refund-datail-wrap"> 2 + <div class="refund-datail-wrap" data-id="{{id}}">
3 {{> returns/returns-status}} 3 {{> returns/returns-status}}
4 4
5 {{# orderReview}} 5 {{# orderReview}}
6 <div class="top-tip"> 6 <div class="top-tip">
7 - {{#if pass}}  
8 - <p class="tip-status">  
9 - <span class="iconfont blue">&#xe618;</span>  
10 - <span class="blue">退货申请已通过</span>  
11 - </p>  
12 - {{^}}  
13 - <p class="tip-status">  
14 - <span class="iconfont blue">&#xe618;</span>  
15 - <span class="blue">退货申请审核中</span>  
16 - </p>  
17 - {{/if}} 7 + {{#if pass}}
  8 + <p class="tip-status">
  9 + <span class="iconfont blue">&#xe60f;</span>
  10 + <span class="blue">退货申请已通过</span>
  11 + </p>
  12 + {{^}}
  13 + <p class="tip-status">
  14 + <span class="iconfont blue">&#xe618;</span>
  15 + <span class="blue">退货申请审核中</span>
  16 + </p>
  17 + {{/if}}
18 <p class="tip-text"> 18 <p class="tip-text">
19 请将商品连同吊牌、包装、发货单(如无发货单,您可找张白纸上注明订单编号,收货人姓名及手机号码)、发票(如有)、 赠品(如有)一并寄回,如有 遗漏将影响您的退换货进度,敬请谅解<br> 19 请将商品连同吊牌、包装、发货单(如无发货单,您可找张白纸上注明订单编号,收货人姓名及手机号码)、发票(如有)、 赠品(如有)一并寄回,如有 遗漏将影响您的退换货进度,敬请谅解<br>
20 非我司原因的退换货,寄回运费由您承担。商品客观问题的退换货,请您先行垫付运费,邮费会在退款中补贴给您, 20 非我司原因的退换货,寄回运费由您承担。商品客观问题的退换货,请您先行垫付运费,邮费会在退款中补贴给您,
@@ -31,7 +31,7 @@ @@ -31,7 +31,7 @@
31 {{# backStorage}} 31 {{# backStorage}}
32 <div class="storage-tip top-tip"> 32 <div class="storage-tip top-tip">
33 <p class="tip-status"> 33 <p class="tip-status">
34 - <span class="iconfont blue">&#xe618;</span> 34 + <span class="iconfont blue">&#xe60f;</span>
35 <span class="blue">您寄回的商品已收到</span> 35 <span class="blue">您寄回的商品已收到</span>
36 </p> 36 </p>
37 <p> 37 <p>
@@ -44,7 +44,7 @@ @@ -44,7 +44,7 @@
44 {{# refundSure}} 44 {{# refundSure}}
45 <div class="success-tip top-tip"> 45 <div class="success-tip top-tip">
46 <p class="tip-status"> 46 <p class="tip-status">
47 - <span class="iconfont blue">&#xe618;</span> 47 + <span class="iconfont blue">&#xe60f;</span>
48 <span class="blue">退款完成</span> 48 <span class="blue">退款完成</span>
49 </p> 49 </p>
50 <p>退款方式:<em>由于银行内部处理流程的差异,储蓄卡需要3-7个工作日到账,信用卡需要7-15个工作日到账</em></p> 50 <p>退款方式:<em>由于银行内部处理流程的差异,储蓄卡需要3-7个工作日到账,信用卡需要7-15个工作日到账</em></p>
@@ -103,12 +103,27 @@ @@ -103,12 +103,27 @@
103 <p>颜色:{{color}}&nbsp;尺码:{{size}}</p> 103 <p>颜色:{{color}}&nbsp;尺码:{{size}}</p>
104 <p>×{{num}}</p> 104 <p>×{{num}}</p>
105 </div> 105 </div>
106 - <div class="reason">dsa{{reason}}</div>  
107 - <div class="num">dasd{{num}}</div>  
108 - <dl class="special-info hide">  
109 - <dd>问题描述:</dd>  
110 - <dd>照片凭证:</dd>  
111 - </dl> 106 + <div class="reason">{{reason}}</div>
  107 + <div class="num">{{num}}</div>
  108 + {{#if remark}}
  109 + <dl class="special-info">
  110 + <dd class="remark">
  111 + <label>问题描述:</label>
  112 + {{remark}}
  113 + </dd>
  114 +
  115 + {{#if evidence}}
  116 + <dd>
  117 + <label>照片凭证:</label>
  118 + {{# evidence}}
  119 + <div class="evidence-img">
  120 + <img class="lazy" data-original="{{image . 70 90}}">
  121 + </div>
  122 + {{/ evidence}}
  123 + </dd>
  124 + {{/if}}
  125 + </dl>
  126 + {{/if}}
112 </div> 127 </div>
113 {{/ goods}} 128 {{/ goods}}
114 </div> 129 </div>
1 {{# refund}} 1 {{# refund}}
2 - {{> returns/returns-status}} 2 + <div class="refund-wrap">
  3 + {{> returns/returns-status}}
3 4
4 - <h4 class="third-title">选择退货商品</h4>  
5 - <div class="refund-goods clearfix" {{# speclialReason}} data-{{id}}="{{@index}}"{{/ speclialReason}}>  
6 - <input id="order-code" type="hidden" value="{{orderCode}}">  
7 - <ul class="goods-header">  
8 - <li class="info">商品信息</li>  
9 - <li class="reason">退货原因</li>  
10 - <li class="num">退货数量</li>  
11 - <li class="price">单价</li>  
12 - </ul> 5 + <h4 class="third-title">选择退货商品</h4>
  6 + <div class="refund-goods clearfix" {{# speclialReason}} data-{{id}}="{{@index}}"{{/ speclialReason}}>
  7 + <input id="order-code" type="hidden" value="{{orderCode}}">
  8 + <ul class="goods-header">
  9 + <li class="info">商品信息</li>
  10 + <li class="reason">退货原因</li>
  11 + <li class="num">退货数量</li>
  12 + <li class="price">单价</li>
  13 + </ul>
13 14
14 - {{# goods}}  
15 - <div class="goods-item clearfix">  
16 - <div class="check" data-skn="{{skn}}" data-skc="{{skc}}" data-sku="{{sku}}" data-price="{{price}}" data-type="{{typeId}}">{{> icon/checkbox}}</div>  
17 - <div class="img">  
18 - <img class="lazy" data-original="{{image img 70 90}}"> 15 + {{# goods}}
  16 + <div class="goods-item clearfix">
  17 + <div class="check" data-skn="{{skn}}" data-skc="{{skc}}" data-sku="{{sku}}" data-price="{{price}}" data-type="{{typeId}}">{{> icon/checkbox}}</div>
  18 + <div class="img">
  19 + <img class="lazy" data-original="{{image img 70 90}}">
  20 + </div>
  21 + <div class="info">
  22 + <p>{{name}}</p>
  23 + <p>颜色:{{color}}&nbsp;尺码:{{size}}</p>
  24 + <p>×{{num}}</p>
  25 + </div>
  26 + <div class="reason">
  27 + <select class="refund-reason">
  28 + <option>选择退款原因</option>
  29 + {{# reasonList}}
  30 + <option value="{{id}}">{{name}}</option>
  31 + {{/ reasonList}}
  32 + </select>
  33 + </div>
  34 + <div class="num">
  35 + <span class="iconfont">&#xe621;</span>
  36 + <input type="text" value="{{num}}" readonly="readonly">
  37 + <span class="iconfont">&#xe61f;</span>
  38 + </div>
  39 + <div class="price">¥{{round price 2}}</div>
  40 + {{> returns/special-reason}}
19 </div> 41 </div>
20 - <div class="info">  
21 - <p>{{name}}</p>  
22 - <p>颜色:{{color}}&nbsp;尺码:{{size}}</p>  
23 - <p>×{{num}}</p>  
24 - </div>  
25 - <div class="reason">  
26 - <select class="refund-reason">  
27 - <option>选择退款原因</option>  
28 - {{# reasonList}}  
29 - <option value="{{id}}">{{name}}</option>  
30 - {{/ reasonList}}  
31 - </select>  
32 - </div>  
33 - <div class="num">  
34 - <span class="iconfont">&#xe621;</span>  
35 - <input type="text" value="{{num}}" readonly="readonly">  
36 - <span class="iconfont">&#xe61f;</span>  
37 - </div>  
38 - <div class="price">¥{{round price 2}}</div>  
39 - {{> returns/special-reason}}  
40 - </div>  
41 - {{/ goods}}  
42 - </div> 42 + {{/ goods}}
  43 + </div>
43 44
44 - <h4 class="third-title">退款方式</h4> 45 + <h4 class="third-title">退款方式</h4>
45 46
46 - <div class="refund-type">  
47 - <div>  
48 - <label class="type-item ali-item cur" title="支付宝"></label>  
49 - <label class="type-item union-item" title="银行卡"></label> 47 + <div class="refund-type">
  48 + <div>
  49 + <label class="type-item ali-item cur" title="支付宝"></label>
  50 + <label class="type-item union-item" title="银行卡"></label>
  51 + </div>
  52 + <dl class="alipay">
  53 + <dd>账号:<input type="text" class="name" placeholder="收款人支付宝账号"></dd>
  54 + <dd>姓名:<input type="text" class="account" placeholder="姓名"></dd>
  55 + </dl>
  56 + <dl class="unionpay hide">
  57 + <dd>
  58 + 银行:
  59 + <select class="bank">
  60 + <option>中国银行</option>
  61 + <option>中国农业银行</option>
  62 + <option>中国工商银行</option>
  63 + <option>中国建设银行</option>
  64 + </select>
  65 + <input type="text" placeholder="开户支行">
  66 + <span class="blue" class="area">例:江苏省南京市奥体支行</span>
  67 + </dd>
  68 + <dd>账号:<input type="text" class="account" placeholder="收款人银行卡号"></dd>
  69 + <dd>姓名:<input type="text" class="name" placeholder="姓名"></dd>
  70 + </dl>
  71 + </div>
  72 + <div class="opt-btn">
  73 + <span class="apply-tip blue hide">请填写完整</span>
  74 + <div id="apply-btn" class="btn disable">提交申请</div>
50 </div> 75 </div>
51 - <dl class="alipay">  
52 - <dd>账号:<input type="text" class="name" placeholder="收款人支付宝账号"></dd>  
53 - <dd>姓名:<input type="text" class="account" placeholder="姓名"></dd>  
54 - </dl>  
55 - <dl class="unionpay hide">  
56 - <dd>  
57 - 银行:  
58 - <select class="bank">  
59 - <option>中国银行</option>  
60 - <option>中国农业银行</option>  
61 - <option>中国工商银行</option>  
62 - <option>中国建设银行</option>  
63 - </select>  
64 - <input type="text" placeholder="开户支行">  
65 - <span class="blue" class="area">例:江苏省南京市奥体支行</span>  
66 - </dd>  
67 - <dd>账号:<input type="text" class="account" placeholder="收款人银行卡号"></dd>  
68 - <dd>姓名:<input type="text" class="name" placeholder="姓名"></dd>  
69 - </dl>  
70 - </div>  
71 - <div class="opt-btn">  
72 - <span class="apply-tip blue hide">请填写完整</span>  
73 - <div id="apply-btn" class="btn disable">提交申请</div>  
74 </div> 76 </div>
75 {{/ refund}} 77 {{/ refund}}
@@ -9,35 +9,41 @@ @@ -9,35 +9,41 @@
9 <li class="change-num">换货数量</li> 9 <li class="change-num">换货数量</li>
10 </ul> 10 </ul>
11 {{#goodsList}} 11 {{#goodsList}}
12 - <div class="table-body">  
13 - <div class="goods-container no-price" data-id="{{productId}}" data-skn="{{productSkn}}">  
14 - {{# showCheckbox}}  
15 - {{> icon/checkbox}}  
16 - <!--  
17 - <span class="iconfont checkbox {{#if checked}}checked{{/if}}">{{#if checked}}&#xe602;{{^}}&#xe601;{{/if}}</span>  
18 - -->  
19 - {{/ showCheckbox}}  
20 - {{> order/good-info}}  
21 - <div class="sub-column">  
22 - 退货原因 12 + <div class="change-info-box">
  13 + <div class="table-body">
  14 + <div class="goods-container no-price" data-id="{{productId}}" data-skn="{{productSkn}}">
  15 + {{# showCheckbox}}
  16 + {{> icon/checkbox}}
  17 + <!--
  18 + <span class="iconfont checkbox {{#if checked}}checked{{/if}}">{{#if checked}}&#xe602;{{^}}&#xe601;{{/if}}</span>
  19 + -->
  20 + {{/ showCheckbox}}
  21 + {{> order/good-info}}
  22 + <div class="sub-column">
  23 + {{# ../this}}
  24 + {{> returns/change-reason}}
  25 + {{/ ../this}}
  26 + </div>
  27 + <div class="sub-column number">
  28 + <span class="minus">-</span>
  29 + <span class="value">{{changeNum}}</span>
  30 + <span class="plus">+</span>
  31 + </div>
23 </div> 32 </div>
24 - <div class="sub-column">  
25 - 数量  
26 - </div>  
27 - </div>  
28 - </div>  
29 - <div class="form">  
30 - <div class="group color">  
31 - <span class="title">  
32 - <span class="artirisk">*</span>  
33 - 换货Color: <span class="color-text" data-color={{colorId}}>{{colorName}}</span>  
34 - </span>  
35 </div> 33 </div>
36 - <div class="group size">  
37 - <span class="title">  
38 - <span class="artirisk">*</span>  
39 - 换货Size: <span class="size-text" data-size="{{sizeId}}">{{sizeName}}</span>  
40 - </span> 34 + <div class="form">
  35 + <div class="group color">
  36 + <span class="title">
  37 + <span class="asterisk">*</span>
  38 + 换货Color: <span class="color-text" data-color={{colorId}}>{{colorName}}</span>
  39 + </span>
  40 + </div>
  41 + <div class="group size">
  42 + <span class="title">
  43 + <span class="asterisk">*</span>
  44 + 换货Size: <span class="size-text" data-size="{{sizeId}}">{{sizeName}}</span>
  45 + </span>
  46 + </div>
41 </div> 47 </div>
42 </div> 48 </div>
43 {{/goodsList}} 49 {{/goodsList}}
  1 +<select id="exchange-reasons" name="exchange-reasons">
  2 + <option value="0">请选择换货原因</option>
  3 + {{# exchangeReason}}
  4 + <option value="{{id}}">{{name}}</option>
  5 + {{/ exchangeReason}}
  6 +</select>
  1 +var colorTpl = require('../../tpl/me/color-list.hbs');
  2 +var sizeTpl = require('../../tpl/me/size-list.hbs');
  3 +
  4 +// var numCtrl = {
  5 +// valueEl: $('.number .value'),
  6 +// btn: {
  7 +// minus: $('.number .minus'),
  8 +// plus: $('.number .plus')
  9 +// },
  10 +// scope: {
  11 +// 1: {
  12 +// min: true,
  13 +// do: function(t) {
  14 +// t.btn.minus.addClass('disable');
  15 +// }
  16 +// }
  17 +// },
  18 +// initNumberScope: function() {
  19 +// var maxValue = this.valueEl.text();
  20 +//
  21 +// this.btn.plus.addClass('disable');
  22 +//
  23 +// this.scope[maxValue] = {
  24 +// max: true,
  25 +// do: function(t) {
  26 +// t.btn.plus.addClass('disable');
  27 +// }
  28 +// };
  29 +// },
  30 +// bindNumberEvent: function() {
  31 +// var $val = this.valueEl;
  32 +// var val = parseInt($val.text(), 10);
  33 +// var scope = this.scope;
  34 +// var that = this;
  35 +//
  36 +//
  37 +// this.btn.minus.on('click', function() {
  38 +// if ($(this).hasClass('disable')) {
  39 +// return;
  40 +// }
  41 +//
  42 +// if (that.btn.plus.hasClass('disable')) {
  43 +// that.btn.plus.removeClass('disable');
  44 +// }
  45 +//
  46 +// val -= 1;
  47 +// $val.text(val);
  48 +//
  49 +// if (scope[val] && scope[val].min) {
  50 +// scope[val].do(that);
  51 +// }
  52 +// });
  53 +//
  54 +// this.btn.plus.on('click', function() {
  55 +// if ($(this).hasClass('disable')) {
  56 +// return;
  57 +// }
  58 +//
  59 +// if (that.btn.minus.hasClass('disable')) {
  60 +// that.btn.minus.removeClass('disable');
  61 +// }
  62 +//
  63 +// val += 1;
  64 +// $val.text(val);
  65 +//
  66 +// if (scope[val] && scope[val].max) {
  67 +// scope[val].do(that);
  68 +// }
  69 +// });
  70 +// },
  71 +// init: function() {
  72 +// this.initNumberScope();
  73 +// this.bindNumberEvent();
  74 +// }
  75 +// };
  76 +
  77 +function setActive($item) {
  78 + var color = $item.find('.color-text').data('color');
  79 + var size = $item.find('.size-text').data('size');
  80 +
  81 + var $colorList = $item.find('.color-list');
  82 + var $sizeList = $item.find('.size-list');
  83 +
  84 + $colorList.find('.img-box').each(function(i, box) {
  85 + var $box = $(box);
  86 +
  87 + if ($box.find('img').data('color') === color) {
  88 + $colorList.find('.img-box').eq(i).addClass('active');
  89 +
  90 + return false;
  91 + }
  92 + });
  93 +
  94 + $sizeList.find('span').each(function(i, s) {
  95 + var $size = $(s);
  96 +
  97 + if ($size.data('size') === size) {
  98 + $sizeList.find('span').eq(i).addClass('active');
  99 + }
  100 + });
  101 +}
  102 +
  103 +function renderList(data) {
  104 + var cTpl;
  105 + var sTpl;
  106 + var $el = $('.goods-container');
  107 + var resultId;
  108 + var resultSkn;
  109 +
  110 + if (data) {
  111 + resultId = data.productId;
  112 + resultSkn = data.productSkn;
  113 +
  114 + $el.each(function(index, item) {
  115 + var $item = $(item);
  116 + var id = $item.data('id');
  117 + var skn = $item.data('skn');
  118 + var $form;
  119 +
  120 + if (id === resultId && skn === resultSkn) {
  121 + $form = $item.closest('.table-body').next('.form');
  122 +
  123 + if (!$form.find('.color-list').length) {
  124 + cTpl = colorTpl(data);
  125 + sTpl = sizeTpl(data);
  126 + $form.find('.group.color').append(cTpl);
  127 + $form.find('.group.size').append(sTpl);
  128 + setActive($form);
  129 + }
  130 + }
  131 + });
  132 + }
  133 +}
  134 +
  135 +function bindColorEvent() {
  136 + $('.color-list img').off('clice').on('click', function() {
  137 + var $this = $(this);
  138 + var $sizeList = $this.closest('.group').next('.group').find('.size-list');
  139 + var index = $this.data('index');
  140 + var colorId = $this.data('color');
  141 + var colorText = $this.attr('alt');
  142 + var $c = $this.closest('.group.color').find('.color-text');
  143 +
  144 + $c.text(colorText);
  145 + $c.attr('data-color', colorId);
  146 +
  147 + $this.closest('.color-list').find('.active').removeClass('active');
  148 + $this.parent().addClass('active');
  149 +
  150 + $sizeList.removeClass('hide');
  151 + $sizeList.addClass('hide');
  152 +
  153 + $sizeList.eq(index).removeClass('hide');
  154 + });
  155 +}
  156 +
  157 +function initSizeId() {
  158 + var s = $('.size-list:not("hide")').find('span').eq(0).data('size');
  159 +
  160 + $('.group.size .size-text').eq(0).attr('data-size', s);
  161 +}
  162 +
  163 +function bindSizeEvent() {
  164 + $('.size-list span').off('click').on('click', function() {
  165 + var $this = $(this);
  166 + var s = $this.text();
  167 + var id = $this.data('size');
  168 + var $s = $this.closest('.group.size').find('.size-text');
  169 +
  170 + $this.parent().find('.active').removeClass('active');
  171 + $this.addClass('active');
  172 +
  173 + $s.text(s);
  174 + $s.attr('data-size', id);
  175 + });
  176 +}
  177 +
  178 +function getProductInfo() {
  179 + var $el = $('.goods-container');
  180 +
  181 + $el.each(function(index, item) {
  182 + var id = $(item).data('id');
  183 + var skn = $(item).data('skn');
  184 +
  185 + if (id && skn) {
  186 + $.ajax({
  187 + url: '/me/return/getProductInfo',
  188 + data: {
  189 + productId: id,
  190 + productSkn: skn
  191 + }
  192 + }).done(function(result) {
  193 + if (result.code === 200) {
  194 + renderList(result.data);
  195 + initSizeId();
  196 + bindColorEvent();
  197 + bindSizeEvent();
  198 + }
  199 + });
  200 + }
  201 + });
  202 +}
  203 +
  204 +getProductInfo();
  205 +
  206 +// numCtrl.init();
1 -var colorTpl = require('../../tpl/me/color-list.hbs');  
2 -var sizeTpl = require('../../tpl/me/size-list.hbs');  
3 -  
4 -// var scope = {  
5 -// 1: {  
6 -// min: true,  
7 -// do: function() {  
8 -// console.log('min');  
9 -// }  
10 -// }  
11 -// }  
12 -  
13 -function renderList(data) {  
14 - var cTpl;  
15 - var sTpl;  
16 - var $c = $('.group.color');  
17 - var $s = $('.group.size');  
18 -  
19 - if (data) {  
20 - cTpl = colorTpl(data);  
21 - sTpl = sizeTpl(data);  
22 - $c.append(cTpl);  
23 - $s.append(sTpl);  
24 - }  
25 -}  
26 -  
27 -function bindColorEvent() {  
28 - $('.color-list img').on('click', function() {  
29 - var $this = $(this);  
30 - var $sizeList = $('.size-list');  
31 - var index = $this.data('index');  
32 - var colorId = $this.data('color');  
33 - var colorText = $this.attr('alt');  
34 - var $c = $('.group.color .color-text');  
35 -  
36 - $c.text(colorText);  
37 - $c.attr('data-color', colorId);  
38 -  
39 -  
40 - $sizeList.removeClass('hide');  
41 - $sizeList.addClass('hide');  
42 -  
43 - $sizeList.eq(index).removeClass('hide');  
44 - });  
45 -}  
46 -  
47 -function initSizeId() {  
48 - var s = $('.size-list:not("hide")').find('span').eq(0).data('size');  
49 -  
50 - $('.group.size .size-text').eq(0).attr('data-size', s);  
51 -}  
52 -  
53 -function bindSizeEvent() {  
54 - $('.size-list span').on('click', function() {  
55 - var $this = $(this);  
56 - var s = $this.text();  
57 - var id = $this.data('size');  
58 - var $s = $('.group.size .size-text');  
59 -  
60 - $s.text(s);  
61 - $s.attr('data-size', id);  
62 - });  
63 -}  
64 -  
65 -// function bindNumberEvent() {  
66 -// $('.number .minus').on('click', function() {  
67 -// var val = $('.number .value').text();  
68 -//  
69 -// if (scope[val].min) {  
70 -// scope[val].do();  
71 -// }  
72 -// });  
73 -// }  
74 -  
75 -function getProductInfo() {  
76 - var $el = $('.goods-container');  
77 - var id = $el.data('id');  
78 - var skn = $el.data('skn');  
79 -  
80 - if (id && skn) {  
81 - $.ajax({  
82 - url: '/me/return/getProductInfo',  
83 - data: {  
84 - productId: id,  
85 - productSkn: skn  
86 - }  
87 - }).done(function(result) {  
88 - console.log(result);  
89 - if (result.code === 200) {  
90 - renderList(result.data);  
91 - initSizeId();  
92 - bindColorEvent();  
93 - bindSizeEvent();  
94 - }  
95 - });  
96 - }  
97 -}  
98 -  
99 -getProductInfo();  
@@ -99,11 +99,18 @@ @@ -99,11 +99,18 @@
99 font-size: 12px; 99 font-size: 12px;
100 } 100 }
101 } 101 }
  102 +
  103 + /* 表单必填项提示符 */
  104 + .asterisk {
  105 + position: relative;
  106 + top: 2px;
  107 + margin-right: 5px;
  108 + color: #c71814 !important;
  109 + }
102 } 110 }
103 111
104 @import "address"; 112 @import "address";
105 @import "order/index"; 113 @import "order/index";
106 @import "return/index"; 114 @import "return/index";
107 @import "currency"; 115 @import "currency";
108 -@import "returns";  
109 @import "exchange"; 116 @import "exchange";
@@ -18,13 +18,6 @@ @@ -18,13 +18,6 @@
18 text-align: center !important; 18 text-align: center !important;
19 } 19 }
20 20
21 - .asterisk {  
22 - position: relative;  
23 - top: 2px;  
24 - margin-right: 5px;  
25 - color: #c71814 !important;  
26 - }  
27 -  
28 .dialog-title { 21 .dialog-title {
29 padding-bottom: $space; 22 padding-bottom: $space;
30 border-bottom: 1px solid #f1f1f1; 23 border-bottom: 1px solid #f1f1f1;
  1 +.return-wrap {
  2 + &.change {
  3 + .sub-column {
  4 + margin-top: 30px;
  5 + }
  6 +
  7 + .color-list {
  8 + height: 70px;
  9 + line-height: 70px;
  10 + box-sizing: border-box;
  11 +
  12 + .img-box {
  13 + display: inline-block;
  14 + width: 24px;
  15 + height: 24px;
  16 + line-height: 24px;
  17 + box-sizing: border-box;
  18 + margin-right: 10px;
  19 + text-align: center;
  20 + cursor: pointer;
  21 +
  22 + img {
  23 + width: 20px;
  24 + height: 20px;
  25 + }
  26 +
  27 + &.active {
  28 + border: 2px solid #ccc;
  29 + position: relative;
  30 + top: -2px;
  31 + }
  32 + }
  33 + }
  34 +
  35 + .asterisk {
  36 + margin-right: 0;
  37 + }
  38 +
  39 + .group {
  40 + &.color {
  41 + min-height: 70px;
  42 + }
  43 +
  44 + &.size {
  45 + min-height: 65px;
  46 + }
  47 +
  48 + .title {
  49 + font-size: 14px;
  50 + color: #1b1b1b;
  51 + }
  52 + }
  53 +
  54 + .size-list {
  55 + height: 65px;
  56 + line-height: 65px;
  57 +
  58 + span {
  59 + min-width: 25px;
  60 + height: 20px;
  61 + line-height: 20px;
  62 + padding: 0 5px;
  63 + box-sizing: border-box;
  64 + margin-right: 10px;
  65 + border: 1px solid #ccc;
  66 + display: inline-block;
  67 + text-align: center;
  68 + font-size: 12px;
  69 + cursor: pointer;
  70 +
  71 + &.active {
  72 + background-color: #1b1b1b;
  73 + color: #fff;
  74 + border-color: #1b1b1b;
  75 + }
  76 + }
  77 + }
  78 + }
  79 +
  80 + .iconfont {
  81 + &.checkbox {
  82 + position: relative;
  83 + top: -70px;
  84 + margin-right: 10px;
  85 + font-size: 14px;
  86 + cursor: pointer;
  87 + }
  88 + }
  89 +}
1 .returns-wrap { 1 .returns-wrap {
  2 + font-size: 14px;
  3 +
2 .returns-status { 4 .returns-status {
3 padding: 30px 0 80px; 5 padding: 30px 0 80px;
4 6
@@ -49,7 +51,106 @@ @@ -49,7 +51,106 @@
49 } 51 }
50 } 52 }
51 } 53 }
  54 +
  55 + .third-title {
  56 + font-size: 16px;
  57 + font-weight: bold;
  58 + padding-bottom: 20px;
  59 + }
  60 +
  61 + .special-reason {
  62 + padding-top: 20px;
  63 + display: none;
  64 +
  65 + .left-title {
  66 + width: 150px;
  67 + padding-left: 54px;
  68 +
  69 + .red {
  70 + color: #d93549;
  71 + margin-right: 3px;
  72 + }
  73 + }
  74 +
  75 + .right-content {
  76 + width: 570px;
  77 + }
  78 +
  79 + .mark-text {
  80 + width: 570px;
  81 + height: 120px;
  82 + resize: none;
  83 + border-color: #eee;
  84 + }
  85 +
  86 + .img-wrap,
  87 + .img-upload {
  88 + width: 60px;
  89 + height: 60px;
  90 + border: 1px dashed #eee;
  91 + float: left;
  92 + margin-right: 10px;
  93 + }
  94 +
  95 + .img-upload {
  96 + line-height: 60px;
  97 + text-align: center;
  98 + color: #dfdfdf;
  99 + cursor: pointer;
  100 +
  101 + .iconfont {
  102 + font-size: 34px;
  103 + }
  104 + }
  105 +
  106 + .img-wrap {
  107 + position: relative;
  108 + }
  109 +
  110 + .img-wrap:hover .img-opt {
  111 + display: block;
  112 + }
  113 +
  114 + .img-opt {
  115 + width: 100%;
  116 + height: 20px;
  117 + line-height: 20px;
  118 + background: #555;
  119 + font-size: 12px;
  120 + color: #fff;
  121 + opacity: 0.7;
  122 + position: absolute;
  123 + text-align: center;
  124 + display: none;
  125 +
  126 + > * {
  127 + display: inline-block;
  128 + cursor: pointer;
  129 + }
  130 + }
  131 + }
  132 +
  133 + .opt-btn {
  134 + padding-top: 40px;
  135 + line-height: 40px;
  136 + text-align: right;
  137 +
  138 + .blue {
  139 + margin-right: 10px;
  140 + font-size: 12px;
  141 + }
  142 +
  143 + .btn {
  144 + width: 130px;
  145 + height: 40px;
  146 + line-height: 40px;
  147 + font-size: 16px;
  148 + display: inline-block;
  149 + }
  150 + }
52 } 151 }
53 152
54 @import "list"; 153 @import "list";
  154 +@import "change";
  155 +@import "refund";
55 @import "refund-detail"; 156 @import "refund-detail";
@@ -110,14 +110,32 @@ @@ -110,14 +110,32 @@
110 .info { 110 .info {
111 width: 284px; 111 width: 284px;
112 text-align: left; 112 text-align: left;
  113 + line-height: 2;
  114 + }
  115 +
  116 + .reason,
  117 + .num {
  118 + line-height: 90px;
113 } 119 }
114 120
115 .special-info { 121 .special-info {
116 width: 100%; 122 width: 100%;
117 height: auto; 123 height: auto;
  124 + padding-left: 15px;
118 padding-top: 30px; 125 padding-top: 30px;
119 text-align: left; 126 text-align: left;
120 } 127 }
  128 +
  129 + .remark {
  130 + padding-bottom: 15px;
  131 + }
  132 +
  133 + .evidence-img {
  134 + width: 70px;
  135 + height: 90px;
  136 + display: inline-block;
  137 + vertical-align: top;
  138 + }
121 } 139 }
122 } 140 }
123 } 141 }
1 -.returns-wrap {  
2 - font-size: 14px;  
3 -  
4 - .third-title {  
5 - font-size: 16px;  
6 - font-weight: bold;  
7 - padding-bottom: 20px;  
8 - }  
9 -  
10 - .special-reason {  
11 - padding-top: 20px;  
12 - display: none;  
13 -  
14 - .left-title {  
15 - width: 150px;  
16 - padding-left: 54px;  
17 -  
18 - .red {  
19 - color: #d93549;  
20 - margin-right: 3px;  
21 - }  
22 - }  
23 -  
24 - .right-content {  
25 - width: 570px;  
26 - }  
27 -  
28 - .mark-text {  
29 - width: 570px;  
30 - height: 120px;  
31 - resize: none;  
32 - border-color: #eee;  
33 - }  
34 -  
35 - .img-wrap,  
36 - .img-upload {  
37 - width: 60px;  
38 - height: 60px;  
39 - border: 1px dashed #eee;  
40 - float: left;  
41 - margin-right: 10px;  
42 - }  
43 -  
44 - .img-upload {  
45 - line-height: 60px;  
46 - text-align: center;  
47 - color: #dfdfdf;  
48 - cursor: pointer;  
49 -  
50 - .iconfont {  
51 - font-size: 34px;  
52 - }  
53 - }  
54 -  
55 - .img-wrap {  
56 - position: relative;  
57 - }  
58 -  
59 - .img-wrap:hover .img-opt {  
60 - display: block;  
61 - }  
62 -  
63 - .img-opt {  
64 - width: 100%;  
65 - height: 20px;  
66 - line-height: 20px;  
67 - background: #555;  
68 - font-size: 12px;  
69 - color: #fff;  
70 - opacity: 0.7;  
71 - position: absolute;  
72 - text-align: center;  
73 - display: none;  
74 -  
75 - > * {  
76 - display: inline-block;  
77 - cursor: pointer;  
78 - }  
79 - }  
80 - }  
81 -  
82 - .opt-btn {  
83 - padding-top: 40px;  
84 - line-height: 40px;  
85 - text-align: right;  
86 -  
87 - .blue {  
88 - margin-right: 10px;  
89 - font-size: 12px;  
90 - }  
91 -  
92 - .btn {  
93 - width: 130px;  
94 - height: 40px;  
95 - line-height: 40px;  
96 - font-size: 16px;  
97 - display: inline-block;  
98 - }  
99 - }  
100 - 1 +.refund-wrap {
101 .refund-goods { 2 .refund-goods {
102 margin-bottom: 40px; 3 margin-bottom: 40px;
103 4
1 <div class="color-list"> 1 <div class="color-list">
2 {{#goodsList}} 2 {{#goodsList}}
  3 + <div class="img-box {{#if isActive}}active{{/if}}" >
3 <img src="{{colorImage}}" alt="{{colorName}}" data-index="{{@index}}" data-color={{colorId}}> 4 <img src="{{colorImage}}" alt="{{colorName}}" data-index="{{@index}}" data-color={{colorId}}>
  5 + </div>
4 {{/goodsList}} 6 {{/goodsList}}
5 </div> 7 </div>
6 8