Showing
8 changed files
with
185 additions
and
22 deletions
@@ -12,6 +12,8 @@ const headerModel = require('../../../doraemon/models/header'); // 头部model | @@ -12,6 +12,8 @@ const headerModel = require('../../../doraemon/models/header'); // 头部model | ||
12 | const orderDetailModel = require('../models/orderDetail'); | 12 | const orderDetailModel = require('../models/orderDetail'); |
13 | const orderModel = require('../models/order'); | 13 | const orderModel = require('../models/order'); |
14 | const payModel = require('../../cart/models/pay'); | 14 | const payModel = require('../../cart/models/pay'); |
15 | +const addressModel = require('../models/address'); | ||
16 | +const addressProcess = require(global.utils + '/address-process'); | ||
15 | 17 | ||
16 | const orderDetailData = (req, res, next) => { | 18 | const orderDetailData = (req, res, next) => { |
17 | let uid = req.user.uid; | 19 | let uid = req.user.uid; |
@@ -139,9 +141,23 @@ const logistic = (req, res, next) => { | @@ -139,9 +141,23 @@ const logistic = (req, res, next) => { | ||
139 | const addressModify = (req, res, next) => { | 141 | const addressModify = (req, res, next) => { |
140 | let uid = req.user.uid; | 142 | let uid = req.user.uid; |
141 | let orderCode = req.query.orderCode; | 143 | let orderCode = req.query.orderCode; |
144 | + let areaCode = req.query.areaCode; | ||
145 | + let provinceCode = req.query.provinceCode; | ||
142 | 146 | ||
143 | - orderDetailModel.orderDetailData(uid, orderCode).then(result => { | ||
144 | - res.render('order-address-modify', Object.assign(result, { | 147 | + addressModel.getAddressData({uid: uid}).then(result => { |
148 | + let userAddressList = result; | ||
149 | + let addressData = addressProcess.getAddressByAreaCode(areaCode, | ||
150 | + _.get(userAddressList, 'data', [])) || {}; | ||
151 | + | ||
152 | + Object.assign(addressData, { | ||
153 | + orderCode: orderCode, | ||
154 | + | ||
155 | + // provinceCode: provinceCode ? provinceCode : false, // TODO | ||
156 | + provinceCode: '11', | ||
157 | + province: '北京市' // TODO | ||
158 | + }); | ||
159 | + | ||
160 | + res.render('order-address-modify', Object.assign(addressData, { | ||
145 | pageHeader: headerModel.setNav({ | 161 | pageHeader: headerModel.setNav({ |
146 | navTitle: '修改地址', | 162 | navTitle: '修改地址', |
147 | navBtn: false | 163 | navBtn: false |
@@ -153,6 +169,34 @@ const addressModify = (req, res, next) => { | @@ -153,6 +169,34 @@ const addressModify = (req, res, next) => { | ||
153 | }).catch(next); | 169 | }).catch(next); |
154 | }; | 170 | }; |
155 | 171 | ||
172 | +/** | ||
173 | + * 修改订单地址 | ||
174 | + * @param {*} req | ||
175 | + * @param {*} res | ||
176 | + * @param {*} next | ||
177 | + */ | ||
178 | +const changeAddress = (req, res, next) => { | ||
179 | + let uid = req.user.uid; | ||
180 | + | ||
181 | + if (!uid) { | ||
182 | + return res.json({ | ||
183 | + code: 502, | ||
184 | + msg: '用户数据不存在!' | ||
185 | + }); | ||
186 | + } | ||
187 | + | ||
188 | + orderDetailModel.changeAddress({ | ||
189 | + uid: req.user.uid, | ||
190 | + orderCode: req.body.orderCode, | ||
191 | + username: req.body.username, | ||
192 | + areaCode: req.body.area_code, | ||
193 | + address: req.body.address, | ||
194 | + mobile: req.body.mobile | ||
195 | + }).then(result => { | ||
196 | + res.json(result); | ||
197 | + }).catch(next); | ||
198 | +}; | ||
199 | + | ||
156 | module.exports = { | 200 | module.exports = { |
157 | orderDetailData, | 201 | orderDetailData, |
158 | delOrder, | 202 | delOrder, |
@@ -160,5 +204,6 @@ module.exports = { | @@ -160,5 +204,6 @@ module.exports = { | ||
160 | cancelOrder, | 204 | cancelOrder, |
161 | refundApply, | 205 | refundApply, |
162 | logistic, | 206 | logistic, |
163 | - addressModify | 207 | + addressModify, |
208 | + changeAddress | ||
164 | }; | 209 | }; |
@@ -100,7 +100,8 @@ const address = (params) => { | @@ -100,7 +100,8 @@ const address = (params) => { | ||
100 | 100 | ||
101 | /* 加密地址 ID */ | 101 | /* 加密地址 ID */ |
102 | _.forEach(selfAddress.data, (value, key) => { | 102 | _.forEach(selfAddress.data, (value, key) => { |
103 | - selfAddress.data[key].address_id = encodeURIComponent(crypto.encryption(null, selfAddress.data[key].address_id)); | 103 | + selfAddress.data[key].address_id = |
104 | + encodeURIComponent(crypto.encryption(null, selfAddress.data[key].address_id)); | ||
104 | }); | 105 | }); |
105 | 106 | ||
106 | /* 如果有 ID 是地址编辑页面 */ | 107 | /* 如果有 ID 是地址编辑页面 */ |
@@ -218,5 +219,6 @@ module.exports = { | @@ -218,5 +219,6 @@ module.exports = { | ||
218 | setDefaultAddress, | 219 | setDefaultAddress, |
219 | locationList, | 220 | locationList, |
220 | newGetAddress, | 221 | newGetAddress, |
221 | - chooseAddress | 222 | + chooseAddress, |
223 | + getAddressData: _getAddressData | ||
222 | }; | 224 | }; |
@@ -286,7 +286,10 @@ const orderDetailData = (uid, orderCode) => { | @@ -286,7 +286,10 @@ const orderDetailData = (uid, orderCode) => { | ||
286 | 286 | ||
287 | orderDetail = _.assign(orderDetail, { | 287 | orderDetail = _.assign(orderDetail, { |
288 | goodsAmount: orderDetail.paymentAmount, | 288 | goodsAmount: orderDetail.paymentAmount, |
289 | - url: '/home/orders/addressModify?orderCode=' + orderCode + '&relation=' + orderDetail.relation | 289 | + url: '/home/orders/addressModify?orderCode=' + orderCode + |
290 | + '&areaCode=' + orderDetail.areaCode + | ||
291 | + '&provinceCode=' + ((orderDetail.isSupportChangeProvince && orderDetail.provinceAreaCode) ? | ||
292 | + orderDetail.provinceAreaCode : '') | ||
290 | }); | 293 | }); |
291 | 294 | ||
292 | // 为支付的拆单配送信息 | 295 | // 为支付的拆单配送信息 |
@@ -458,6 +461,36 @@ const logistics = (orderCode, uid) => { | @@ -458,6 +461,36 @@ const logistics = (orderCode, uid) => { | ||
458 | }); | 461 | }); |
459 | }; | 462 | }; |
460 | 463 | ||
464 | +/** | ||
465 | + * 修改订单地址 | ||
466 | + * @param {参数} params | ||
467 | + */ | ||
468 | +const changeAddress = (params) => { | ||
469 | + let apiParams = { | ||
470 | + method: 'app.SpaceOrders.updateDeliveryAddress', | ||
471 | + order_code: params.orderCode, | ||
472 | + uid: params.uid, | ||
473 | + user_name: params.username, | ||
474 | + area_code: params.areaCode, | ||
475 | + address: params.address, | ||
476 | + mobile: params.mobile | ||
477 | + }; | ||
478 | + | ||
479 | + if (params.addressId) { | ||
480 | + Object.assign(apiParams, { | ||
481 | + address_id: params.addressId | ||
482 | + }); | ||
483 | + } | ||
484 | + | ||
485 | + if (params.phone) { | ||
486 | + Object.assign(apiParams, { | ||
487 | + phone: params.phone | ||
488 | + }); | ||
489 | + } | ||
490 | + | ||
491 | + return api.post('', apiParams); | ||
492 | +}; | ||
493 | + | ||
461 | module.exports = { | 494 | module.exports = { |
462 | orderDetailData, | 495 | orderDetailData, |
463 | closeReasons, | 496 | closeReasons, |
@@ -465,5 +498,6 @@ module.exports = { | @@ -465,5 +498,6 @@ module.exports = { | ||
465 | readdData, | 498 | readdData, |
466 | cancelOrder, | 499 | cancelOrder, |
467 | refundApply, | 500 | refundApply, |
468 | - logistics | 501 | + logistics, |
502 | + changeAddress | ||
469 | }; | 503 | }; |
@@ -56,7 +56,8 @@ router.get('/delOrder', auth, orderDetailController.delOrder); // 删除订单 | @@ -56,7 +56,8 @@ router.get('/delOrder', auth, orderDetailController.delOrder); // 删除订单 | ||
56 | router.get('/readd', auth, orderDetailController.readdData); // 再次购买 | 56 | router.get('/readd', auth, orderDetailController.readdData); // 再次购买 |
57 | router.get('/cancelOrder', auth, orderDetailController.cancelOrder); // 取消订单 | 57 | router.get('/cancelOrder', auth, orderDetailController.cancelOrder); // 取消订单 |
58 | router.get('/refundApply', auth, orderDetailController.refundApply); // 申请退款 | 58 | router.get('/refundApply', auth, orderDetailController.refundApply); // 申请退款 |
59 | -router.get('/orders/addressModify', auth, orderDetailController.addressModify); // 订单详情地址修改 | 59 | +router.get('/orders/addressModify', auth, orderDetailController.addressModify); // 订单详情地址修改页面 |
60 | +router.post('/orders/changeAddress', orderDetailController.changeAddress); // 提交新的地址数据 | ||
60 | 61 | ||
61 | 62 | ||
62 | router.get('/', homeController.index); // 个人中心首页 | 63 | router.get('/', homeController.index); // 个人中心首页 |
1 | <div class="address-modify"> | 1 | <div class="address-modify"> |
2 | <div class="tip">由于需要仓库调拨,目前暂不支持省地址修改,请您谅解!</div> | 2 | <div class="tip">由于需要仓库调拨,目前暂不支持省地址修改,请您谅解!</div> |
3 | - <div class="form"> | 3 | + <form class="form edit-address" id="areaForm"> |
4 | <div class="form-group"> | 4 | <div class="form-group"> |
5 | <label for="username">收货人:</label> | 5 | <label for="username">收货人:</label> |
6 | - <input name="username" type="text" value="小小明"> | 6 | + <input name="username" type="text" value="{{consignee}}"> |
7 | </div> | 7 | </div> |
8 | <div class="form-group"> | 8 | <div class="form-group"> |
9 | <label for="phone">联系电话:</label> | 9 | <label for="phone">联系电话:</label> |
10 | - <input name="phone" type="text" value="182****333"> | 10 | + <input name="phone" type="text" value="{{mobile}}"> |
11 | </div> | 11 | </div> |
12 | + {{#unless changeProvince}} | ||
12 | <div class="form-group disable"> | 13 | <div class="form-group disable"> |
13 | <label for="province">所在省:</label> | 14 | <label for="province">所在省:</label> |
14 | - <input name="province" type="text" value="江苏省" class="disable" readonly> | 15 | + <input name="province" type="text" value="{{province}}" class="disable" readonly> |
16 | + <input name="provinceCode" type="hidden" value="{{provinceCode}}"> | ||
15 | </div> | 17 | </div> |
16 | - <div class="form-group"> | 18 | + {{/unless}} |
19 | + <div class="form-group" id="area"> | ||
17 | <label for="area">所在地区:</label> | 20 | <label for="area">所在地区:</label> |
18 | - <input name="area" type="text" value="南京市建邺区城区" readonly> | 21 | + <input name="area" type="text" value="{{area}}" readonly> |
22 | + <input name="area_code" type="hidden" value={{area_code}}> | ||
19 | </div> | 23 | </div> |
20 | <div class="form-group"> | 24 | <div class="form-group"> |
21 | <label for="address" class="label-address">详细地址:</label> | 25 | <label for="address" class="label-address">详细地址:</label> |
22 | - <textarea name="address" type="text" value="" maxlength="255">嘉陵江东街18号南京国家广告产业园12栋17层 | 26 | + <textarea name="address" type="text" value="" maxlength="255">{{address}} |
23 | </textarea> | 27 | </textarea> |
24 | </div> | 28 | </div> |
25 | - </div> | 29 | + <input type="hidden" name="orderCode" value="{{orderCode}}"> |
30 | + </form> | ||
26 | <div class="tip"><span class="iconfont icon-info"></span>修改地址仅可修改一次,且会影响送货时间,请您谅解!</div> | 31 | <div class="tip"><span class="iconfont icon-info"></span>修改地址仅可修改一次,且会影响送货时间,请您谅解!</div> |
27 | <div class="btn-sure-line"> | 32 | <div class="btn-sure-line"> |
28 | <button id="btnSure" class="btn-sure">确认修改</button> | 33 | <button id="btnSure" class="btn-sure">确认修改</button> |
29 | </div> | 34 | </div> |
30 | </div> | 35 | </div> |
36 | + | ||
37 | +<div id="vAddressAct"> | ||
38 | + <vue-address-act></vue-address-act> | ||
39 | +</div> |
1 | +const $ = require('yoho-jquery'); | ||
2 | +const Vue = require('vue'); | ||
3 | +const tip = require('../plugin/tip'); | ||
4 | + | ||
1 | require('home/order-address-modify.css'); | 5 | require('home/order-address-modify.css'); |
2 | require('common.css'); | 6 | require('common.css'); |
3 | require('../common'); | 7 | require('../common'); |
4 | 8 | ||
5 | -let btnSure = $('#btnSure'); | 9 | +let $areaForm = $('#areaForm'); |
10 | +let $btnSure = $('#btnSure'); | ||
11 | +let $province = $('input[name=province]'); | ||
12 | +let $provinceCode = $('input[name=provinceCode]'); | ||
13 | +let $area = $('#area'); | ||
14 | + | ||
15 | + | ||
16 | +let vueAddressAct = require('home/address/address-act.vue'); | ||
17 | + | ||
18 | +let addressVact = new Vue({ | ||
19 | + el: '#vAddressAct', | ||
20 | + components: { | ||
21 | + vueAddressAct: vueAddressAct | ||
22 | + } | ||
23 | +}); | ||
24 | + | ||
25 | +/** | ||
26 | + * 弹出地址选择框 | ||
27 | + */ | ||
28 | +$area.on('click', function() { | ||
29 | + if ($provinceCode.val() && $province.val()) { | ||
30 | + addressVact.$children[0].supportChangeProvince = false; | ||
31 | + addressVact.$children[0].switchAddress($provinceCode.val(), $province.val()); | ||
32 | + } | ||
33 | + | ||
34 | + addressVact.$children[0].show = true; | ||
35 | +}); | ||
6 | 36 | ||
7 | -btnSure.on('click', function() { | ||
8 | - console.log('ok'); | 37 | +/** |
38 | + * 提交表单 | ||
39 | + */ | ||
40 | +$btnSure.on('click', function() { | ||
41 | + $.post('/home/orders/changeAddress', $areaForm.serialize(), function(result) { | ||
42 | + if (result && result.code === 200) { | ||
43 | + tip.show(result.msg); | ||
44 | + history.go(-1); | ||
45 | + } else { | ||
46 | + tip.show('系统错误,请重试!'); | ||
47 | + } | ||
48 | + }); | ||
9 | }); | 49 | }); |
@@ -3,7 +3,7 @@ | @@ -3,7 +3,7 @@ | ||
3 | <div class="address-select-box"> | 3 | <div class="address-select-box"> |
4 | <div class="component-title"><span class="title">所在地区</span><span class="iconfont close" @click="closeAddBox"></span></div> | 4 | <div class="component-title"><span class="title">所在地区</span><span class="iconfont close" @click="closeAddBox"></span></div> |
5 | <ul class="head-address-ul"> | 5 | <ul class="head-address-ul"> |
6 | - <li v-if="province.title" :class="{ 'head-address-li': common.titleActive }" @click="clickTitle('province')">{{province.title}}</li> | 6 | + <li v-if="province.title" :class="{ 'head-address-li': common.titleActive, 'disable': !supportChangeProvince}" @click="clickTitle('province')">{{province.title}}</li> |
7 | <li v-if="city.title" :class="{ 'head-address-li': province.titleActive }" @click="clickTitle('city')">{{city.title}}</li> | 7 | <li v-if="city.title" :class="{ 'head-address-li': province.titleActive }" @click="clickTitle('city')">{{city.title}}</li> |
8 | <li v-if="area.title" :class="{ 'head-address-li': city.titleActive }" @click="clickTitle('area')">{{area.title}}</li> | 8 | <li v-if="area.title" :class="{ 'head-address-li': city.titleActive }" @click="clickTitle('area')">{{area.title}}</li> |
9 | <li v-if="street.title" :class="{ 'head-address-li': area.titleActive }">{{street.title}}</li> | 9 | <li v-if="street.title" :class="{ 'head-address-li': area.titleActive }">{{street.title}}</li> |
@@ -36,6 +36,10 @@ | @@ -36,6 +36,10 @@ | ||
36 | </div> | 36 | </div> |
37 | </template> | 37 | </template> |
38 | <style> | 38 | <style> |
39 | +.disable { | ||
40 | + color: #a6a6a6; | ||
41 | +} | ||
42 | + | ||
39 | .icon-v:before { | 43 | .icon-v:before { |
40 | content: "\e6ea"; | 44 | content: "\e6ea"; |
41 | } | 45 | } |
@@ -173,6 +177,7 @@ | @@ -173,6 +177,7 @@ | ||
173 | module.exports = { | 177 | module.exports = { |
174 | data() { | 178 | data() { |
175 | return { | 179 | return { |
180 | + supportChangeProvince: true, // 是否支持修改省 | ||
176 | provinces: [], | 181 | provinces: [], |
177 | citys: [], | 182 | citys: [], |
178 | areas: [], | 183 | areas: [], |
@@ -214,11 +219,19 @@ | @@ -214,11 +219,19 @@ | ||
214 | methods: { | 219 | methods: { |
215 | /* 返回标题处理 */ | 220 | /* 返回标题处理 */ |
216 | returnTitle() { | 221 | returnTitle() { |
217 | - let getTitle = this.province.allTitle + | 222 | + let getTitle = ''; |
223 | + let returnTitle = ''; | ||
224 | + | ||
225 | + if (this.supportChangeProvince) { | ||
226 | + getTitle = this.province.allTitle + | ||
218 | this.city.allTitle + | 227 | this.city.allTitle + |
219 | this.area.allTitle + | 228 | this.area.allTitle + |
220 | this.street.allTitle; | 229 | this.street.allTitle; |
221 | - let returnTitle = ''; | 230 | + } else { |
231 | + getTitle = this.city.allTitle + | ||
232 | + this.area.allTitle + | ||
233 | + this.street.allTitle; | ||
234 | + } | ||
222 | 235 | ||
223 | if (getTitle.length > 11) { | 236 | if (getTitle.length > 11) { |
224 | returnTitle = getTitle.substr(0, 5) + '...' + getTitle.substr(-5); | 237 | returnTitle = getTitle.substr(0, 5) + '...' + getTitle.substr(-5); |
@@ -359,6 +372,10 @@ | @@ -359,6 +372,10 @@ | ||
359 | clickTitle(type) { | 372 | clickTitle(type) { |
360 | switch (type) { | 373 | switch (type) { |
361 | case 'province': | 374 | case 'province': |
375 | + if (!this.supportChangeProvince) { | ||
376 | + alert('不允许修改省地址!'); // TODO | ||
377 | + return false; | ||
378 | + } | ||
362 | if (this.provinces.length < 1) { | 379 | if (this.provinces.length < 1) { |
363 | this.switchAddress(); | 380 | this.switchAddress(); |
364 | } | 381 | } |
utils/address-process.js
0 → 100644
1 | +/** | ||
2 | + * 地址处理 | ||
3 | + */ | ||
4 | + | ||
5 | +const _ = require('lodash'); | ||
6 | + | ||
7 | +const getAddressByAreaCode = (areaCode, addressList) => { | ||
8 | + return _.find(addressList, function(address) { | ||
9 | + return parseInt(address.area_code, 10) === parseInt(areaCode, 10); | ||
10 | + }); | ||
11 | +}; | ||
12 | + | ||
13 | +module.exports = { | ||
14 | + getAddressByAreaCode | ||
15 | +}; |
-
Please register or login to post a comment