diff --git a/apps/me/controllers/order.js b/apps/me/controllers/order.js
index a938787..51790f8 100644
--- a/apps/me/controllers/order.js
+++ b/apps/me/controllers/order.js
@@ -35,7 +35,7 @@ const order = {
             orderCode: orderCode
         });
     },
-    getOrderData: (req, res) => {
+    getOrderData: (req, res, next) => {
         const uid = req.user.uid;
 
         if (!uid && req.xhr) {
@@ -53,9 +53,9 @@ const order = {
 
         orderModel.getOrders(param).then(result => {
             return res.json(result);
-        });
+        }).catch(next);
     },
-    getOrderDetailData: (req, res) => {
+    getOrderDetailData: (req, res, next) => {
         const orderCode = req.query.orderCode;
         const uid = req.user.uid;
 
@@ -68,25 +68,25 @@ const order = {
 
         orderModel.getOrderDetail(uid, orderCode).then(result => {
             return res.json(result);
-        });
+        }).catch(next);
     },
-    cancelOrder: (req, res) => {
+    cancelOrder: (req, res, next) => {
         const orderCode = req.body.orderCode;
         const reasonId = req.body.reasonId;
         const reason = req.body.reason;
 
         orderModel.cancelOrder(orderCode, reasonId, reason).then(result => {
             return res.json(result);
-        });
+        }).catch(next);
     },
-    confirmOrder: (req, res) => {
+    confirmOrder: (req, res, next) => {
         const orderode = req.body.orderCode;
 
         orderModel.confirmOrder(orderode).then(result => {
             return res.json(result);
-        });
+        }).catch(next);
     },
-    deleteOrder: (req, res) => {
+    deleteOrder: (req, res, next) => {
         const orderCode = req.body.orderCode;
         const uid = req.user.uid;
 
@@ -99,12 +99,10 @@ const order = {
 
         orderModel.deleteOrder(orderCode, uid).then(result => {
             return res.json(result);
-        });
+        }).catch(next);
     },
     coin: (req, res, next) => {
-        const uid = req.user.uid;
-
-        orderModel.getCoins(uid).then(result => {
+        orderModel.getCoins(req.user.uid).then(result => {
             res.render('coin', {
                 module: 'me',
                 page: 'coin',
@@ -119,7 +117,7 @@ const order = {
      * @param res
      * @returns {*|{read, write}}
      */
-    getCoinDetail: (req, res) => {
+    getCoinDetail: (req, res, next) => {
         const uid = req.user.uid;
         const page = req.query.page;
         const limit = req.query.limit;
@@ -133,7 +131,7 @@ const order = {
 
         orderModel.getCoinDetail(uid, page, limit).then(result => {
             return res.json(result);
-        });
+        }).catch(next);
     },
 
     // 订单-物流
@@ -145,7 +143,7 @@ const order = {
     },
 
     // API- 订单-物流
-    getOrderLogisticdate: (req, res) => {
+    getOrderLogisticdate: (req, res, next) => {
         (req.query.type === 'exchange') && (req.query.type = 'change');
 
         orderModel.getOrderLogisticdate({
@@ -154,19 +152,21 @@ const order = {
             order_code: req.query.orderCode,
             id: req.query.id
         }).then(result => {
-            res.json(result);
+            return res.json(result);
+        }).catch(next);
+    },
+    cancelReason: (req, res) => {
+        res.render('cancelreason', {
+            module: 'me',
+            page: 'cancelreason'
         });
     },
 
-    /**
-     * 获取退换货原因
-     * @param req
-     * @param res
-     */
-    getCancelReason: (req, res) => {
+    // 获取取消订单原因
+    getCancelReason: (req, res, next) => {
         orderModel.getCancelReason().then(result => {
             return res.json(result);
-        });
+        }).catch(next);
     }
 };
 
diff --git a/apps/me/router.js b/apps/me/router.js
index dc2f86f..4733f59 100644
--- a/apps/me/router.js
+++ b/apps/me/router.js
@@ -22,10 +22,12 @@ router.get('/me/', home.index); // 个人中心主页
 router.get('/me/userdata', home.userdata); // 个人中心数据
 
 router.get('/me/order', order.orders); // 订单
-router.get('/me/order/detail', order.orderDetail);
+router.get('/me/order/detail', order.orderDetail); // 订单详情
+router.get('/me/order/cancelreason', order.cancelReason); // 取消订单原因选择
+
 router.get('/me/getOrderList', order.getOrderData); // 获取订单数据
 router.get('/me/get-order', order.getOrderDetailData); // AJAX 获取订单详情数据
-router.get('/me/getCancelOrderReason', order.getCancelReason); // 获取订单原因
+router.get('/me/getCancelOrderReason', order.getCancelReason); // 获取取消订单原因
 router.post('/me/cancelOrder', order.cancelOrder); // 取消订单
 router.post('/me/deleteOrder', order.deleteOrder); // AJAX 删除订单
 router.post('/me/confirmReceive', order.confirmOrder); // 确认订单
diff --git a/apps/me/views/action/cancelreason.hbs b/apps/me/views/action/cancelreason.hbs
new file mode 100644
index 0000000..0bfde2b
--- /dev/null
+++ b/apps/me/views/action/cancelreason.hbs
@@ -0,0 +1,3 @@
+<div class="cancel-reason" id="reason">
+    <cancel-reason></cancel-reason>
+</div>
\ No newline at end of file
diff --git a/apps/me/views/action/order.hbs b/apps/me/views/action/order.hbs
index 35a32bf..de5f179 100644
--- a/apps/me/views/action/order.hbs
+++ b/apps/me/views/action/order.hbs
@@ -1,4 +1,3 @@
 <div id="home-order-list">
-    <Order></Order>
-    <input type="hidden" value="{{type}}" id="order-type">
+    <Order type="{{type}}"></Order>
 </div>
diff --git a/public/js/common/intercept-click.js b/public/js/common/intercept-click.js
index 2e219a3..a449345 100644
--- a/public/js/common/intercept-click.js
+++ b/public/js/common/intercept-click.js
@@ -129,6 +129,12 @@ const matchHeader = (path, qs, titleMap) => {
         return header;
     }
 
+    if (/\/me\/order\/cancelreason$/.test(path)) {
+        header = titleMap[1];
+        header.title.des = '取消订单理由';
+        return header;
+    }
+
     if (/\/me\/return\/refund$/.test(path)) {
         header = titleMap[3];
         header.title.des = '退货申请';
diff --git a/public/js/me/cancelreason.page.js b/public/js/me/cancelreason.page.js
new file mode 100644
index 0000000..b866a6a
--- /dev/null
+++ b/public/js/me/cancelreason.page.js
@@ -0,0 +1,12 @@
+const Vue = require('vue');
+const cancelReason = require('me/cancel-reason.vue');
+const yoho = require('yoho');
+
+yoho.ready(() => {
+    new Vue({
+        el: '#reason',
+        components: {
+            cancelReason
+        }
+    });
+});
diff --git a/public/js/me/order.page.js b/public/js/me/order.page.js
index 50151c6..fa8993f 100644
--- a/public/js/me/order.page.js
+++ b/public/js/me/order.page.js
@@ -16,10 +16,7 @@ require('common/count-down');
 
 new Vue({
     el: '#home-order-list',
-    data: {
-        type: document.getElementById('order-type').value
-    },
     components: {
         Order
     }
-});
+});
\ No newline at end of file
diff --git a/public/scss/me/_logistics.css b/public/scss/me/_logistics.css
index fbff859..98d073b 100644
--- a/public/scss/me/_logistics.css
+++ b/public/scss/me/_logistics.css
@@ -18,7 +18,7 @@
                 position: relative;
                 color: #000;
                 font-size: 34px;
-                border-bottom: 1px solid #e0e0e0;
+                border-bottom: 1px solid #eee;
 
                 &:last-of-type:after {
                     content: none;
diff --git a/public/vue/me/cancel-reason.vue b/public/vue/me/cancel-reason.vue
new file mode 100644
index 0000000..b159911
--- /dev/null
+++ b/public/vue/me/cancel-reason.vue
@@ -0,0 +1,64 @@
+<template>
+    <div class="reason-list">
+        <span v-for="val in options" track-by="id" @click="select(val.id, val.reason)">{{val.reason}}</span>
+    </div>
+</template>
+
+<script>
+    'use strict';
+
+    const $ = require('jquery');
+    const yoho = require('yoho');
+    
+    module.exports = {
+        data() {
+            return {
+                options: [],
+            };
+        },
+        created() {
+            yoho.store.set('cancelReason', {
+                iscancel: true
+            });
+
+            $.ajax({
+                url: '/me/getCancelOrderReason',
+            }).then(result => {
+                if (result && result.data) {
+                    this.options = result.data;
+                }
+            }).fail(() => {
+                tip('操作失败');
+            });
+        },
+        methods: {
+            select(id, reason) {
+                yoho.store.set('cancelReason', Object.assign(yoho.store.get('cancelReason'), {
+                    id: id,
+                    reason: reason
+                }));
+
+                yoho.goBack();
+            }
+        }
+    };
+</script>
+
+<style>
+    .cancel-reason {
+        width: 100%;
+
+        .reason-list {
+            width: 100%;
+            margin-left: 30px;
+
+            span {
+                display: block;
+                height: 90px;
+                line-height: 90px;
+                font-size: 34px;
+                border-bottom: 1px solid #eee;
+            }
+        }
+    }
+</style>
diff --git a/public/vue/me/order-detail.vue b/public/vue/me/order-detail.vue
index 338a613..622167f 100644
--- a/public/vue/me/order-detail.vue
+++ b/public/vue/me/order-detail.vue
@@ -49,16 +49,13 @@
         <div class="order-button" v-show="order.status != 1 && order.status != 2 && order.status != 3">
             <button v-if="order.isCancel === 'Y'" @click="deleteOrder(order.orderCode)" class="normal">删除订单</button>
             <template v-else>
-                <button v-if="order.status == 0" @click="cancelOrder(order.orderCode)">取消订单</button>
+                <button v-if="order.status == 0" @click="cancelOrder()">取消订单</button>
                 <button v-if="order.status == 0 " class="countdown" @click="goBuy(order)">去支付 <span class="count-down" v-count-down :left-time="order.payLefttime" :callback="autoCancel()"></span></button>
                 <a v-if="order.status == 4 || order.status == 5 || order.status == 6" href="/me/logistic?order_code={{order.orderCode}}">查看物流</a>
                 <button v-if="order.status == 4 || order.status == 5 " class="black" @click="confirmGoods(order.orderCode)">确认收货</button>
                 <button v-if="order.isSupportRefund == 'Y' || order.isSupportExchange == 'Y'" class="normal" @click="applyRefund()">申请售后</button>
             </template>
         </div>
-        <select id="cancel-reason" class="cancel-reason" @change="reasonChange" v-model="selected">
-            <option v-for="option in options" :value="{id:option.id,reason:option.reason}">{{option.reason}}</option>
-        </select>
     </template>
 </template>
 <script>
@@ -78,7 +75,6 @@
                 show: false,
                 order: {},
                 options: [],
-                selected: {},
                 genderSel: {}
             };
         },
@@ -92,8 +88,15 @@
             });
 
             document.addEventListener('visibilitychange', () => {
-                if (!document.hidden && yoho.store.get('orderDetail')) {
-                    this.reload();
+                if (!document.hidden) {
+                    const cr = yoho.store.get('cancelReason');
+
+                    if (cr && cr.iscancel) {
+                        this.reasonChange(cr);
+                        yoho.store.remove('cancelReason');
+                    } else if (yoho.store.get('orderDetail')) {
+                        this.reload();
+                    }
                 }
             });
         },
@@ -111,7 +114,6 @@
             reload() {
                 this.show = false;
                 this.order = {};
-                this.selected = {};
 
                 this.getOrderData();
             },
@@ -143,9 +145,6 @@
                             url: '/me/service'
                         }
                         ]);
-                        if (Number(this.order.status) === 0) {
-                            this.getCancelReason();
-                        }
                     } else if (result.code !== 500) {
                         tip(result.message);
                     } else {
@@ -155,50 +154,20 @@
                     tip('网络错误');
                 });
             },
-            reasonChange() {
-                setTimeout(() => {
-                    if (!this.selected.id || document.hidden) {
-                        return false;
-                    }
-
-                    this.orderDetail().cancel({
-                        orderCode: this.order.orderCode,
-                        reasonId: this.selected.id,
-                        reason: this.selected.reason
-                    }, (result) => {
-                        if (result.code === 200) {
-                            tip({
-                                delay: 500,
-                                txt: '取消成功'
-                            });
-
-                            setTimeout(() => {
-                                this.reload();
-                            }, 300);
-
-                            yoho.store.set('orderReload', true);
-                        } else if (result.code !== 500) {
-                            tip(result.message);
-                        }
-                    }, () => {
-                        tip('操作失败');
-                    });
-                }, 700);
-            },
-            getCancelReason() {
-                $.ajax({
-                    url: '/me/getCancelOrderReason',
-                }).then(result => {
-                    if (result.data.length > 0) {
-                        this.options = result.data;
-                        if (yoho.isiOS) {
-                            this.options.unshift({
-                                id: 0,
-                                reason: '请选择'
-                            });
-                        }
+            reasonChange(cr) {
+                this.orderDetail().cancel({
+                    orderCode: this.order.orderCode,
+                    reasonId: cr.id,
+                    reason: cr.reason
+                }, (result) => {
+                    if (result.code === 200) {
+                        tip('取消成功');
+                        this.order.isCancel = 'Y';
+                        yoho.store.set('orderReload', true);
+                    } else if (result.code !== 500) {
+                        tip(result.message);
                     }
-                }).fail(() => {
+                }, () => {
                     tip('操作失败');
                 });
             },
@@ -220,11 +189,9 @@
                 };
             },
             cancelOrder() {
-                let _that = this;
-
                 Modal.confirm('', '取消后不能恢复,确认取消吗?', function() {
                     this.hide();
-                    _that.dropDown('cancel-reason');
+                    interceptClick.intercept('/me/order/cancelreason');
                 });
             },
             deleteOrder(code) {
@@ -297,18 +264,6 @@
                     }
                     return false;
                 });
-            },
-            dropDown(elementId) {
-                let dropdown = document.getElementById(elementId);
-
-                this.showDropdown(dropdown);
-                return false;
-            },
-            showDropdown(element) {
-                let event = document.createEvent('MouseEvents');
-
-                event.initMouseEvent('mousedown', true, true, window);
-                element.dispatchEvent(event);
             }
         }
     };
diff --git a/public/vue/me/order.vue b/public/vue/me/order.vue
index a4cc131..9bc5413 100644
--- a/public/vue/me/order.vue
+++ b/public/vue/me/order.vue
@@ -34,7 +34,7 @@
                         <div class="options">
                            <button v-if="order.isCancel === 'Y'" @click="deleteOrder(order, index)" class="normal">删除订单</button>
                            <template v-else>
-                                <button v-if="order.status == 0" @click="cancelOrder(order.orderCode)" class="leftpad">取消订单</button>
+                                <button v-if="order.status == 0" @click="cancelOrder(order)" class="leftpad">取消订单</button>
                                 <button v-if="order.status == 0 " class="countdown" @click="goBuy(order)">去支付
                                     <span class="count-down" v-count-down :left-time="order.payLefttime" :callback="autoCancel(order)"></span>
                                 </button>
@@ -54,9 +54,6 @@
         <p>Your do not have an order <br>for the time being</p>
         <a href="/product/new">随便逛逛</a>
     </div>
-    <select id="cancel-reason" class="cancel-reason" @change="reasonChange" v-model="selected">
-        <option v-for="option in options" :value="{id:option.id,reason:option.reason}">{{option.reason}}</option>
-    </select>
 </template>
 
 <script>
@@ -65,30 +62,36 @@
     const $ = require('jquery');
     const tip = require('common/tip');
     const Modal = require('common/modal');
+    const interceptClick = require('common/intercept-click');
     const yoho = require('yoho');
 
     module.exports = {
+        props: ['type'],
         data() {
             return {
                 page: 0,
                 limit: 10,
                 pageTotal: 1,
-                type: this.$parent.$data.type,
                 busy: false,
                 emptybox: 'hide',
-                currentCode: '',
-                selected: {},
+                currentOrder: {},
                 options: [],
                 orderList: []
             };
         },
         created() {
             this.getOrderData();
-            this.getCancelReason();
 
             document.addEventListener('visibilitychange', () => {
-                if (!document.hidden && yoho.store.get('orderReload')) {
-                    this.reload();
+                if (!document.hidden) {
+                    const cr = yoho.store.get('cancelReason');
+
+                    if (cr && cr.iscancel) {
+                        this.reasonChange(cr);
+                        yoho.store.remove('cancelReason');
+                    } else if (yoho.store.get('orderReload')) {
+                        this.reload();    
+                    }
                 }
             });
         },
@@ -98,8 +101,7 @@
                 this.pageTotal = 1;
                 this.busy = false;
                 this.emptybox = 'hide';
-                this.currentCode = '';
-                this.selected = {};
+                this.currentOrder = {};
                 this.orderList = [];
 
                 this.getOrderData();
@@ -132,48 +134,19 @@
                     tip('网络错误');
                 });
             },
-            reasonChange() {
-                setTimeout(() => {
-                    if (!this.selected.id || document.hidden) {
-                        return false;
+            reasonChange(cr) {
+                this.order().cancel({
+                    orderCode: this.currentOrder.orderCode,
+                    reasonId: cr.id,
+                    reason: cr.reason
+                }, (result) => {
+                    if (result.code === 200) {
+                        this.currentOrder.isCancel = 'Y';
+                        tip('取消成功');
+                    } else if (result.code !== 500) {
+                        tip(result.message);
                     }
-
-                    this.order().cancel({
-                        orderCode: this.currentCode,
-                        reasonId: this.selected.id,
-                        reason: this.selected.reason
-                    }, (result) => {
-                        if (result.code === 200) {
-                            tip({
-                                delay: 500,
-                                txt: '取消成功'
-                            });
-                            setTimeout(() => {
-                                this.reload();
-                            }, 300);
-                        } else if (result.code !== 500) {
-                            tip(result.message);
-                        }
-                    }, () => {
-                        tip('操作失败');
-                    });
-                }, 700);
-            },
-            getCancelReason() {
-                $.ajax({
-                    url: '/me/getCancelOrderReason',
-                }).then(result => {
-                    if (result && result.data) {
-                        this.options = result.data;
-
-                        if (yoho.isiOS) {
-                            this.options.unshift({
-                                id: 0,
-                                reason: '请选择'
-                            });
-                        }
-                    }
-                }).fail(() => {
+                }, () => {
                     tip('操作失败');
                 });
             },
@@ -193,13 +166,13 @@
                     }
                 };
             },
-            cancelOrder(code) {
+            cancelOrder(order) {
                 let _that = this;
 
                 Modal.confirm('', '取消后不能恢复,确认取消吗?', function() {
                     this.hide();
-                    _that.currentCode = code;
-                    _that.dropDown('cancel-reason');
+                    _that.currentOrder = order;
+                    interceptClick.intercept('/me/order/cancelreason');
                 });
             },
             deleteOrder(order, index) {
@@ -265,18 +238,6 @@
                 }, () => {
                     this.reload();
                 });
-            },
-            dropDown(elementId) {
-                let dropdown = document.getElementById(elementId);
-
-                this.showDropdown(dropdown);
-                return false;
-            },
-            showDropdown(element) {
-                let event = document.createEvent('MouseEvents');
-
-                event.initMouseEvent('mousedown', true, true, window);
-                element.dispatchEvent(event);
             }
         }
     };