order.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. <template>
  2. <el-drawer v-model="visible" title="在线客服" size="500px" destroy-on-close :with-header="false">
  3. <el-container class="flex-column">
  4. <div class="drawer-detail-main">
  5. <div class="drawer-detail-header">
  6. <div class="drawer-detail-header-body">
  7. <div class="drawer-detail-header-left">{{titleMap[mode]}}</div>
  8. <div class="drawer-detail-header-left">
  9. <el-button type="default" icon="el-icon-close" @click="visible=false"></el-button>
  10. </div>
  11. </div>
  12. </div>
  13. </div>
  14. <el-main class="nopadding" v-loading="loading">
  15. <div class="order-detail" v-if="orderData">
  16. <div class="order-status">
  17. <div class="status-name" v-if="orderData.status == 0 && orderTime">
  18. 待支付
  19. <template v-if="orderTime.min>0&&orderTime.sec>=0">
  20. ,剩余时间
  21. </template>
  22. <template v-else>,已超时</template>
  23. </div>
  24. <div class="status-name" v-if="orderData.status == 1">待使用</div>
  25. <div class="status-name success" v-if="orderData.status == 2">已完成</div>
  26. <div class="status-name" v-if="orderData.status == 3">已退款</div>
  27. <div class="status-name" v-if="orderData.status == 4">退款中</div>
  28. <div class="status-name" v-if="orderData.status == 5">已关闭</div>
  29. <div class="status-name" v-if="orderData.status == 6">部分退款</div>
  30. <div class="status-name" v-if="orderData.status == 7">履约中</div>
  31. <div class="status-desc" v-if="orderData.status == 0">超过30分钟未支付,订单将自动取消</div>
  32. <div class="status-desc" v-if="orderData.status == 1">待使用</div>
  33. <div class="status-desc success" v-if="orderData.status == 2">服务已完成,欢迎您再次使用</div>
  34. <div class="status-desc" v-if="orderData.status == 3">{{ $TOOL.money(orderData.pay_money) }} 已原路退回</div>
  35. <div class="status-desc" v-if="orderData.status == 4">已申请退款,钱款预计1-3个自然日到账</div>
  36. <div class="status-desc" v-if="orderData.status == 5">订单已取消或已关闭</div>
  37. <div class="status-desc" v-if="orderData.status == 6">部分退款中</div>
  38. <div class="status-desc" v-if="orderData.status == 7">货物运输中</div>
  39. </div>
  40. <div class="order-goods">
  41. <div class="goods-img"><img :src="orderData.img" /></div>
  42. <div class="goods-info">
  43. <div class="name">{{ orderData.product.product_name }}</div>
  44. <div class="desc">
  45. <div class="time" v-if="orderData.end_at">有效期至:{{ orderData.end_at }} </div>
  46. <div class="num">x {{ orderData.number }}</div>
  47. </div>
  48. <div class="total">合计:{{ $TOOL.money(orderData.pay_money) }}</div>
  49. </div>
  50. </div>
  51. <div class="order-info">
  52. <div class="title">下单用户</div>
  53. <div class="info-item">
  54. <div class="name">昵称</div>
  55. <div class="right">{{ orderData.user.nickname }} </div>
  56. </div>
  57. <div class="info-item">
  58. <div class="name">OpenId</div>
  59. <div class="right">{{ orderData.user.openid }} </div>
  60. </div>
  61. <div class="info-item">
  62. <div class="name">手机号码</div>
  63. <div class="right">{{ orderData.user.mobile }} </div>
  64. </div>
  65. <div class="info-item">
  66. <div class="name">注册时间</div>
  67. <div class="right">{{ orderData.user.create_at }} </div>
  68. </div>
  69. </div>
  70. <div class="order-info">
  71. <div class="title">订单信息</div>
  72. <div class="info-item">
  73. <div class="name">来客订单号</div>
  74. <div class="right">{{ orderData.order_sn }} </div>
  75. </div>
  76. <div class="info-item">
  77. <div class="name">留资号码</div>
  78. <div class="right">{{ orderData.mobile?orderData.mobile:'-' }}</div>
  79. </div>
  80. <div class="info-item">
  81. <div class="name">系统单号</div>
  82. <div class="right">{{ orderData.out_order_no }}</div>
  83. </div>
  84. <div class="info-item">
  85. <div class="name">下单时间</div>
  86. <div class="right">{{ orderData.create_at }}</div>
  87. </div>
  88. <div class="info-item" v-if="orderData.status == 4">
  89. <div class="name">退款时间</div>
  90. <div class="right">{{ orderData.refund_at }}</div>
  91. </div>
  92. </div>
  93. <div class="order-info" v-if="orderData.address">
  94. <div class="title">收货地址<span v-copy="orderData.address.nickname+','+orderData.address.mobile+','+orderData.address.city_text+orderData.address.address">一键复制</span></div>
  95. <div class="info-item">
  96. <div class="name">收件人</div>
  97. <div class="right">{{ orderData.address.nickname }} </div>
  98. </div>
  99. <div class="info-item">
  100. <div class="name">联系电话</div>
  101. <div class="right">{{ orderData.address.mobile }}</div>
  102. </div>
  103. <div class="info-item">
  104. <div class="name">收货地区</div>
  105. <div class="right">{{ orderData.address.city_text }}</div>
  106. </div>
  107. <div class="info-item">
  108. <div class="name">详细地址</div>
  109. <div class="right">{{ orderData.address.address }}</div>
  110. </div>
  111. </div>
  112. <div class="order-info" v-else>
  113. <div class="title">收货地址</div>
  114. <div class="empty-data-item" v-if="mode == 'add'">
  115. <div class="el-form-item-msg">请发起预约或代客预约后地址方可显示</div>
  116. </div>
  117. </div>
  118. <div class="order-info" v-if="orderData.express">
  119. <div class="title">物流信息</div>
  120. <div class="empty-data-item">
  121. <el-button @click="showExpress">查看完整物流信息</el-button>
  122. </div>
  123. </div>
  124. </div>
  125. </el-main>
  126. </el-container>
  127. </el-drawer>
  128. <expressData ref="expressData"></expressData>
  129. </template>
  130. <script>
  131. import expressData from "./express";
  132. export default {
  133. components:{
  134. expressData
  135. },
  136. data(){
  137. return {
  138. loading: false,
  139. isSaveing: false,
  140. isDoneing:false,
  141. mode:"add",
  142. titleMap:{
  143. add:"订单详情",
  144. edit:"订单详情"
  145. },
  146. visible:false,
  147. orderData:null,
  148. orderTime:null
  149. }
  150. },
  151. methods: {
  152. open(mode = 'add'){
  153. this.mode = mode;
  154. this.visible = true;
  155. return this
  156. },
  157. showExpress(){
  158. this.$nextTick(() => {
  159. this.$refs.expressData.open("edit").setData(this.orderData.express)
  160. })
  161. },
  162. //表单注入数据
  163. setData(data){
  164. this.formData = JSON.parse(JSON.stringify(data));
  165. this.getOrderDetail()
  166. },
  167. doneOrder(){
  168. this.$confirm(`手动核销订单后,该订单不支持线上退款,如需退款请线下沟通后进行`, '提示', {
  169. type: 'warning'
  170. }).then(async ()=>{
  171. this.isDoneing = true;
  172. var resp = await this.$API.merOrder.done.post({"id":this.orderData.order_sn});
  173. this.isDoneing = false;
  174. if (resp.code == 0) {
  175. return this.$message.error(resp.msg);
  176. }
  177. this.$message.success(resp.msg);
  178. this.visible = false;
  179. this.$emit("success");
  180. }).catch(()=>{})
  181. },
  182. async getOrderDetail(){
  183. this.loading = true;
  184. var resp = await this.$API.merOrder.detail.get({"order":this.formData.order});
  185. this.loading = false;
  186. if (resp.code == 0) {
  187. this.$message.error(resp.msg);
  188. this.visible = false;
  189. return ;
  190. }
  191. this.orderData = resp.data;
  192. this.orderTime = resp.data.end_time
  193. },
  194. sendAddress(){
  195. this.$emit("success",'address',this.orderData);
  196. }
  197. }
  198. }
  199. </script>
  200. <style>
  201. .border-none{border: 0;}
  202. .order-detail{padding: 10px;}
  203. .order-detail .order-goods{display: flex;align-items: flex-start;background-color: #fff;border-bottom: 1px solid #f8f8f8;}
  204. .order-detail .order-goods .goods-img{width: 80px;overflow: hidden;}
  205. .order-detail .order-goods img{width: 80px;border-radius: 5px;}
  206. .order-detail .goods-info{margin-left: 10px;font-size: 12px;flex: 1;padding: 10px 0;}
  207. .order-detail .goods-info .name{font-size: 16px;color: #333;}
  208. .order-detail .goods-info .desc{font-size: 12px;color: #999;display: flex;align-items: center;justify-content: space-between;margin: 10px 0;}
  209. .order-detail .goods-info .total{font-size: 16px;color: #333;text-align: right;font-weight: bold;}
  210. .order-detail .order-info{background-color: #fff;padding: 10px;margin-top: 10px;}
  211. .order-detail .order-info .title{font-size: 16px;color: #333;font-weight: bold;padding-bottom: 10px;border-bottom: 1px solid #f8f8f8;display: flex;align-items: center;justify-content: space-between;}
  212. .order-detail .order-info .title span{font-size: 12px;color: #333;font-weight: normal;border: 1px solid #ededed;padding: 5px 10px;cursor: pointer;}
  213. .order-detail .order-info .info-item{height: 40px;line-height: 40px;font-size: 12px;display: flex;align-items: center;border-bottom: 1px solid #f8f8f8;}
  214. .order-detail .order-info .info-item .right{color: #666;margin-left: auto;margin-right: 0;}
  215. .order-detail .order-info .info-item .right text{border: 1px solid #ccc;color: #333;font-size: 12px;padding: 0 15upx;margin-left: 10px;border-radius: 5px;}
  216. .empty-data-item{margin-top: 10px;}
  217. .order-detail .order-status{padding: 20px 10px;text-align: center;background-color: #f8f8f8;margin-bottom: 10px;}
  218. .order-detail .order-status .status-name{text-align: center;font-size: 16px;color: #333;font-weight: bold;display: flex;align-items: center;justify-content: center;}
  219. .order-detail .order-status .status-desc{font-size: 12px;color: #666;margin-top: 10px;}
  220. </style>