Authored by 郭成尧

change-order-address

... ... @@ -12,6 +12,8 @@ const headerModel = require('../../../doraemon/models/header'); // 头部model
const orderDetailModel = require('../models/orderDetail');
const orderModel = require('../models/order');
const payModel = require('../../cart/models/pay');
const addressModel = require('../models/address');
const addressProcess = require(global.utils + '/address-process');
const orderDetailData = (req, res, next) => {
let uid = req.user.uid;
... ... @@ -139,9 +141,23 @@ const logistic = (req, res, next) => {
const addressModify = (req, res, next) => {
let uid = req.user.uid;
let orderCode = req.query.orderCode;
let areaCode = req.query.areaCode;
let provinceCode = req.query.provinceCode;
orderDetailModel.orderDetailData(uid, orderCode).then(result => {
res.render('order-address-modify', Object.assign(result, {
addressModel.getAddressData({uid: uid}).then(result => {
let userAddressList = result;
let addressData = addressProcess.getAddressByAreaCode(areaCode,
_.get(userAddressList, 'data', [])) || {};
Object.assign(addressData, {
orderCode: orderCode,
// provinceCode: provinceCode ? provinceCode : false, // TODO
provinceCode: '11',
province: '北京市' // TODO
});
res.render('order-address-modify', Object.assign(addressData, {
pageHeader: headerModel.setNav({
navTitle: '修改地址',
navBtn: false
... ... @@ -153,6 +169,34 @@ const addressModify = (req, res, next) => {
}).catch(next);
};
/**
* 修改订单地址
* @param {*} req
* @param {*} res
* @param {*} next
*/
const changeAddress = (req, res, next) => {
let uid = req.user.uid;
if (!uid) {
return res.json({
code: 502,
msg: '用户数据不存在!'
});
}
orderDetailModel.changeAddress({
uid: req.user.uid,
orderCode: req.body.orderCode,
username: req.body.username,
areaCode: req.body.area_code,
address: req.body.address,
mobile: req.body.mobile
}).then(result => {
res.json(result);
}).catch(next);
};
module.exports = {
orderDetailData,
delOrder,
... ... @@ -160,5 +204,6 @@ module.exports = {
cancelOrder,
refundApply,
logistic,
addressModify
addressModify,
changeAddress
};
... ...
... ... @@ -100,7 +100,8 @@ const address = (params) => {
/* 加密地址 ID */
_.forEach(selfAddress.data, (value, key) => {
selfAddress.data[key].address_id = encodeURIComponent(crypto.encryption(null, selfAddress.data[key].address_id));
selfAddress.data[key].address_id =
encodeURIComponent(crypto.encryption(null, selfAddress.data[key].address_id));
});
/* 如果有 ID 是地址编辑页面 */
... ... @@ -218,5 +219,6 @@ module.exports = {
setDefaultAddress,
locationList,
newGetAddress,
chooseAddress
chooseAddress,
getAddressData: _getAddressData
};
... ...
... ... @@ -286,7 +286,10 @@ const orderDetailData = (uid, orderCode) => {
orderDetail = _.assign(orderDetail, {
goodsAmount: orderDetail.paymentAmount,
url: '/home/orders/addressModify?orderCode=' + orderCode + '&relation=' + orderDetail.relation
url: '/home/orders/addressModify?orderCode=' + orderCode +
'&areaCode=' + orderDetail.areaCode +
'&provinceCode=' + ((orderDetail.isSupportChangeProvince && orderDetail.provinceAreaCode) ?
orderDetail.provinceAreaCode : '')
});
// 为支付的拆单配送信息
... ... @@ -458,6 +461,36 @@ const logistics = (orderCode, uid) => {
});
};
/**
* 修改订单地址
* @param {参数} params
*/
const changeAddress = (params) => {
let apiParams = {
method: 'app.SpaceOrders.updateDeliveryAddress',
order_code: params.orderCode,
uid: params.uid,
user_name: params.username,
area_code: params.areaCode,
address: params.address,
mobile: params.mobile
};
if (params.addressId) {
Object.assign(apiParams, {
address_id: params.addressId
});
}
if (params.phone) {
Object.assign(apiParams, {
phone: params.phone
});
}
return api.post('', apiParams);
};
module.exports = {
orderDetailData,
closeReasons,
... ... @@ -465,5 +498,6 @@ module.exports = {
readdData,
cancelOrder,
refundApply,
logistics
logistics,
changeAddress
};
... ...
... ... @@ -56,7 +56,8 @@ router.get('/delOrder', auth, orderDetailController.delOrder); // 删除订单
router.get('/readd', auth, orderDetailController.readdData); // 再次购买
router.get('/cancelOrder', auth, orderDetailController.cancelOrder); // 取消订单
router.get('/refundApply', auth, orderDetailController.refundApply); // 申请退款
router.get('/orders/addressModify', auth, orderDetailController.addressModify); // 订单详情地址修改
router.get('/orders/addressModify', auth, orderDetailController.addressModify); // 订单详情地址修改页面
router.post('/orders/changeAddress', orderDetailController.changeAddress); // 提交新的地址数据
router.get('/', homeController.index); // 个人中心首页
... ...
<div class="address-modify">
<div class="tip">由于需要仓库调拨,目前暂不支持省地址修改,请您谅解!</div>
<div class="form">
<form class="form edit-address" id="areaForm">
<div class="form-group">
<label for="username">收货人:</label>
<input name="username" type="text" value="小小明">
<input name="username" type="text" value="{{consignee}}">
</div>
<div class="form-group">
<label for="phone">联系电话:</label>
<input name="phone" type="text" value="182****333">
<input name="phone" type="text" value="{{mobile}}">
</div>
{{#unless changeProvince}}
<div class="form-group disable">
<label for="province">所在省:</label>
<input name="province" type="text" value="江苏省" class="disable" readonly>
<input name="province" type="text" value="{{province}}" class="disable" readonly>
<input name="provinceCode" type="hidden" value="{{provinceCode}}">
</div>
<div class="form-group">
{{/unless}}
<div class="form-group" id="area">
<label for="area">所在地区:</label>
<input name="area" type="text" value="南京市建邺区城区" readonly>
<input name="area" type="text" value="{{area}}" readonly>
<input name="area_code" type="hidden" value={{area_code}}>
</div>
<div class="form-group">
<label for="address" class="label-address">详细地址:</label>
<textarea name="address" type="text" value="" maxlength="255">嘉陵江东街18号南京国家广告产业园12栋17层
<textarea name="address" type="text" value="" maxlength="255">{{address}}
</textarea>
</div>
</div>
<input type="hidden" name="orderCode" value="{{orderCode}}">
</form>
<div class="tip"><span class="iconfont icon-info"></span>修改地址仅可修改一次,且会影响送货时间,请您谅解!</div>
<div class="btn-sure-line">
<button id="btnSure" class="btn-sure">确认修改</button>
</div>
</div>
<div id="vAddressAct">
<vue-address-act></vue-address-act>
</div>
\ No newline at end of file
... ...
const $ = require('yoho-jquery');
const Vue = require('vue');
const tip = require('../plugin/tip');
require('home/order-address-modify.css');
require('common.css');
require('../common');
let btnSure = $('#btnSure');
let $areaForm = $('#areaForm');
let $btnSure = $('#btnSure');
let $province = $('input[name=province]');
let $provinceCode = $('input[name=provinceCode]');
let $area = $('#area');
let vueAddressAct = require('home/address/address-act.vue');
let addressVact = new Vue({
el: '#vAddressAct',
components: {
vueAddressAct: vueAddressAct
}
});
/**
* 弹出地址选择框
*/
$area.on('click', function() {
if ($provinceCode.val() && $province.val()) {
addressVact.$children[0].supportChangeProvince = false;
addressVact.$children[0].switchAddress($provinceCode.val(), $province.val());
}
addressVact.$children[0].show = true;
});
btnSure.on('click', function() {
console.log('ok');
/**
* 提交表单
*/
$btnSure.on('click', function() {
$.post('/home/orders/changeAddress', $areaForm.serialize(), function(result) {
if (result && result.code === 200) {
tip.show(result.msg);
history.go(-1);
} else {
tip.show('系统错误,请重试!');
}
});
});
... ...
... ... @@ -3,7 +3,7 @@
<div class="address-select-box">
<div class="component-title"><span class="title">所在地区</span><span class="iconfont close" @click="closeAddBox">&#xe623;</span></div>
<ul class="head-address-ul">
<li v-if="province.title" :class="{ 'head-address-li': common.titleActive }" @click="clickTitle('province')">{{province.title}}</li>
<li v-if="province.title" :class="{ 'head-address-li': common.titleActive, 'disable': !supportChangeProvince}" @click="clickTitle('province')">{{province.title}}</li>
<li v-if="city.title" :class="{ 'head-address-li': province.titleActive }" @click="clickTitle('city')">{{city.title}}</li>
<li v-if="area.title" :class="{ 'head-address-li': city.titleActive }" @click="clickTitle('area')">{{area.title}}</li>
<li v-if="street.title" :class="{ 'head-address-li': area.titleActive }">{{street.title}}</li>
... ... @@ -36,6 +36,10 @@
</div>
</template>
<style>
.disable {
color: #a6a6a6;
}
.icon-v:before {
content: "\e6ea";
}
... ... @@ -173,6 +177,7 @@
module.exports = {
data() {
return {
supportChangeProvince: true, // 是否支持修改省
provinces: [],
citys: [],
areas: [],
... ... @@ -214,12 +219,20 @@
methods: {
/* 返回标题处理 */
returnTitle() {
let getTitle = this.province.allTitle +
this.city.allTitle +
this.area.allTitle +
this.street.allTitle;
let getTitle = '';
let returnTitle = '';
if (this.supportChangeProvince) {
getTitle = this.province.allTitle +
this.city.allTitle +
this.area.allTitle +
this.street.allTitle;
} else {
getTitle = this.city.allTitle +
this.area.allTitle +
this.street.allTitle;
}
if (getTitle.length > 11) {
returnTitle = getTitle.substr(0, 5) + '...' + getTitle.substr(-5);
} else {
... ... @@ -359,6 +372,10 @@
clickTitle(type) {
switch (type) {
case 'province':
if (!this.supportChangeProvince) {
alert('不允许修改省地址!'); // TODO
return false;
}
if (this.provinces.length < 1) {
this.switchAddress();
}
... ...
/**
* 地址处理
*/
const _ = require('lodash');
const getAddressByAreaCode = (areaCode, addressList) => {
return _.find(addressList, function(address) {
return parseInt(address.area_code, 10) === parseInt(areaCode, 10);
});
};
module.exports = {
getAddressByAreaCode
};
... ...