com-order-detail.php 51 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027
  1. <?php
  2. /**
  3. * @link:http://www.goodmall.com/
  4. * @copyright: Copyright (c) 2020
  5. * Created by PhpStorm
  6. * Author: ganxiaohao
  7. * Date: 2020-04-23
  8. * Time: 22:03
  9. */
  10. Yii::$app->loadComponentView('order/com-edit-address');
  11. Yii::$app->loadComponentView('order/com-edit-seller-remark');
  12. Yii::$app->loadComponentView('order/com-clerk');
  13. Yii::$app->loadComponentView('order/com-send');
  14. Yii::$app->loadComponentView('order/com-edit-price');
  15. Yii::$app->loadComponentView('order/com-city');
  16. ?>
  17. <style>
  18. .com-order-detail .com-order-count-price {
  19. float: right;
  20. margin-right: 55px;
  21. font-size: 12px;
  22. text-align: right;
  23. }
  24. .com-order-detail .el-step__icon-inner {
  25. font-size: 30px;
  26. }
  27. .com-order-detail .com-order-status {
  28. padding: 50px 120px;
  29. margin-bottom: 30px;
  30. }
  31. .com-order-detail .com-order-status .el-step__icon.is-text {
  32. border: 0px;
  33. width: 40px;
  34. }
  35. .com-order-detail .com-order-count-price .el-form-item {
  36. margin-bottom: 5px;
  37. }
  38. .com-order-detail .el-collapse-item__header {
  39. overflow: hidden;
  40. white-space: nowrap;
  41. text-overflow: ellipsis;
  42. border-bottom: none;
  43. border-top-right-radius: 5px;
  44. border-bottom-right-radius: 5px;
  45. }
  46. .com-order-detail .el-collapse-item:last-child {
  47. margin-bottom: 0;
  48. }
  49. .com-order-detail .el-collapse {
  50. border: none;
  51. }
  52. .com-order-detail .order-status {
  53. display: flex;
  54. flex-wrap: wrap;
  55. }
  56. .com-order-detail .table-body {
  57. padding: 20px;
  58. background-color: #fff;
  59. }
  60. .com-order-detail .order-status .el-form-item {
  61. width: 50%;
  62. min-width: 250px;
  63. }
  64. .com-order-detail .el-step.is-center .el-step__description {
  65. padding: 0 10%;
  66. }
  67. /*新的*/
  68. .com-order-detail .card-box {
  69. border: 1px solid #EBEEF5;
  70. border-radius: 3px;
  71. padding: 10px;
  72. height: 300px;
  73. overflow-y: scroll;
  74. }
  75. .com-order-detail .card-box .label {
  76. color: #999999;
  77. margin-right: 10px;
  78. }
  79. .com-order-detail .share-price {
  80. color: #EF8933;
  81. }
  82. .com-order-detail .share-price .orange-label {
  83. color: #EF8933;
  84. }
  85. .com-order-detail .share-title {
  86. font-size: 15px;
  87. margin: 10px 0 5px;
  88. }
  89. .com-order-detail .action-box {
  90. padding: 10px 20px;
  91. }
  92. .com-order-detail .item-box {
  93. margin-bottom: 10px;
  94. }
  95. .com-order-detail .store-address {
  96. margin-left: 65px;
  97. margin-top: 5px;
  98. }
  99. .com-order-detail .express-address {
  100. width: 80%;
  101. }
  102. .com-order-detail .goods-pic {
  103. width: 35px;
  104. height: 35px;
  105. margin: 0 4px;
  106. }
  107. .order-detail-form-list {
  108. margin: 0 -10px;
  109. }
  110. .order-detail-form-item {
  111. border-top: 1px solid #EBEEF5;
  112. padding: 10px;
  113. }
  114. </style>
  115. <template id="com-order-detail">
  116. <div class="com-order-detail">
  117. <com-edit-address
  118. @close="dialogClose"
  119. @submit="dialogSubmit"
  120. :is-show="addressVisible"
  121. :order="newOrder">
  122. </com-edit-address>
  123. <com-edit-seller-remark
  124. @close="dialogClose"
  125. @submit="dialogSubmit"
  126. :is-show="sellerRemarkVisible"
  127. :order="newOrder">
  128. </com-edit-seller-remark>
  129. <com-clerk
  130. @close="dialogClose"
  131. @submit="dialogSubmit"
  132. :is-show="clerkVisible"
  133. :order="newOrder">
  134. </com-clerk>
  135. <com-send
  136. @close="dialogClose"
  137. @submit="dialogSubmit"
  138. :is-show="sendVisible"
  139. :send-type="sendType"
  140. :express-id="expressId"
  141. :order="newOrder">
  142. </com-send>
  143. <com-edit-price
  144. @close="dialogClose"
  145. @submit="dialogSubmit"
  146. :is-show="changePriceVisible"
  147. :order="newOrder">
  148. </com-edit-price>
  149. <com-city
  150. @close="dialogClose"
  151. @submit="dialogSubmit"
  152. :is-show="citySendVisible"
  153. :send-type="sendType"
  154. :order="newOrder">
  155. </com-city>
  156. <el-card shadow="never" style="border:0" body-style="background-color: #f3f3f3;padding: 10px 0 0;">
  157. <!-- 标题栏 -->
  158. <div slot="header">
  159. <el-breadcrumb separator="/">
  160. <el-breadcrumb-item>
  161. <span style="color: #409EFF;cursor: pointer" @click="toList">订单列表</span>
  162. </el-breadcrumb-item>
  163. <el-breadcrumb-item>订单详情</el-breadcrumb-item>
  164. </el-breadcrumb>
  165. </div>
  166. <!-- 订单进度 -->
  167. <div class="table-body" v-loading="loading">
  168. <el-card class="com-order-status" shadow="never">
  169. <el-steps v-if="isShowSteps" :active="active" align-center>
  170. <el-step title="已下单" :description="order.created_at|dateTimeFormat('Y-m-d H:i:s')">
  171. <template slot="icon">
  172. <img src="statics/img/mall/order/status/status_1_active.png">
  173. </template>
  174. </el-step>
  175. <el-step :title="active > 1 && order.is_pay == 1 ? '已付款':'未付款'"
  176. v-show="order.cancel_status != 1 || order.is_pay == 1">
  177. <template slot="icon">
  178. <img v-if="active > 1 && order.is_pay == 1"
  179. src="statics/img/mall/order/status/status_2_active.png">
  180. <img v-else src="statics/img/mall/order/status/status_2.png">
  181. </template>
  182. <template slot="description">
  183. <div v-if="order.pay_at != '0'">{{order.pay_at|dateTimeFormat('Y-m-d H:i:s')}}</div>
  184. <div v-if="order.is_pay == 0 && order.pay_type != 2 && order.auto_cancel_at"
  185. style="color: #ff4544">预计 {{order.auto_cancel_at|dateTimeFormat('Y-m-d H:i:s')}}
  186. 自动取消订单
  187. </div>
  188. </template>
  189. </el-step>
  190. <el-step :title="active > 2 ? '已发货':'未发货'" v-show="order.cancel_status != 1">
  191. <template slot="description">
  192. <div v-if="order.send_at != '0'">{{order.send_at|dateTimeFormat('Y-m-d H:i:s')}}</div>
  193. </template>
  194. <template slot="icon">
  195. <img v-if="active > 2" src="statics/img/mall/order/status/status_3_active.png">
  196. <img v-else src="statics/img/mall/order/status/status_3.png">
  197. </template>
  198. </el-step>
  199. <el-step :title="active > 3 ? '已收货':'未收货'"
  200. v-show="order.cancel_status != 1 && order.is_send == 1">
  201. <template slot="icon">
  202. <img v-if="active > 3" src="statics/img/mall/order/status/status_4_active.png">
  203. <img v-else src="statics/img/mall/order/status/status_4.png">
  204. </template>
  205. <template slot="description">
  206. <div v-if="order.auto_confirm_at !='0'"
  207. style="color: #ff4544">预计 {{order.auto_confirm|dateTimeFormat('Y-m-d H:i:s')}}
  208. 自动确认收货
  209. </div>
  210. </template>
  211. </el-step>
  212. <el-step :title="active > 4 ? '已结束':'未结束'"
  213. v-show="order.cancel_status != 1 || order.is_confirm == 1">
  214. <template slot="icon">
  215. <img v-if="active > 4" src="statics/img/mall/order/status/status_5_active.png">
  216. <img v-else src="statics/img/mall/order/status/status_5.png">
  217. </template>
  218. <template slot="description">
  219. <div v-if="order.confirm_at != '0' && order.is_sale == 1">
  220. {{order.confirm_at|dateTimeFormat('Y-m-d H:i:s')}}
  221. </div>
  222. <div v-if="order.is_confirm == 1 && order.is_sale == 0 && order.auto_sales_at"
  223. style="color: #ff4544">预计 {{order.auto_sales_at|dateTimeFormat('Y-m-d H:i:s')}}
  224. 自动结束订单
  225. </div>
  226. </template>
  227. </el-step>
  228. <el-step title="已取消"
  229. :description="order.cancel_at != '0' ? order.cancel_at : ''"
  230. v-if="order.cancel_status == 1">
  231. <template slot="icon">
  232. <img src="statics/img/mall/order/status/status_6_active.png">
  233. </template>
  234. </el-step>
  235. </el-steps>
  236. <slot name="steps"></slot>
  237. </el-card>
  238. <el-row :gutter="12">
  239. <el-col :span="8">
  240. <div class="card-box">
  241. <h3>订单信息</h3>
  242. <div class="item-box" flex="dir:left cross:center">
  243. <span class="label">订单号:</span>
  244. <div>{{ order.order_no}}</div>
  245. </div>
  246. <div v-if="order.paymentOrder" class="item-box" flex="dir:left cross:center">
  247. <span class="label">商户单号:</span>
  248. <div>{{ order.paymentOrder.paymentOrderUnion.order_no }}</div>
  249. </div>
  250. <div class="item-box" flex="dir:left cross:center">
  251. <span class="label">支付方式:</span>
  252. <el-tag size="small" hit type="success" v-if="order.pay_type == 1">线上支付</el-tag>
  253. <el-tag size="small" hit type="success" v-if="order.pay_type == 3">余额支付</el-tag>
  254. <el-tag size="small" hit type="success" v-if="order.pay_type == 2">货到付款</el-tag>
  255. </div>
  256. <div class="item-box" flex="dir:left cross:center">
  257. <span class="label">配送方式:</span>
  258. <el-tag size="small" hit type="primary" v-if="order.send_type == 0">快递发送</el-tag>
  259. <el-tag size="small" hit type="primary" v-if="order.send_type == 1">到店自提</el-tag>
  260. <el-tag size="small" hit type="primary" v-if="order.send_type == 2">同城配送</el-tag>
  261. </div>
  262. <div class="item-box" flex="dir:left cross:center">
  263. <span class="label">用户:</span>
  264. <div v-if="!order.user || !order.user.nickname">匿名昵称</div>
  265. <div v-else>{{order.user.nickname}}</div>
  266. </div>
  267. <div class="item-box" flex="dir:left cross:center">
  268. <span class="label">{{order.send_type == 0 ? '收货人' : '联系人'}}:</span>
  269. <div>{{ order.name }}</div>
  270. </div>
  271. <div class="item-box" flex="dir:left cross:center">
  272. <span class="label">电话:</span>
  273. <div>{{ order.mobile }}</div>
  274. </div>
  275. <div class="item-box" flex="dir:left cross:center">
  276. <template v-if="order.send_type == 1">
  277. <span class="label">收货地址:</span>
  278. <el-tag size="small" hit type="warning">到店自提</el-tag>
  279. </template>
  280. <template v-else-if="order.address">
  281. <span class="label">收货地址:</span>
  282. <div class="express-address">
  283. {{ order.address }}
  284. <el-button
  285. v-if="isShowEditAddress && order.send_type != 2 && order.is_send==0 && order.cancel_status==0"
  286. type="text"
  287. icon="el-icon-edit"
  288. circle
  289. size="small"
  290. @click="openDialog(order, addressVisible = true)">
  291. </el-button>
  292. </div>
  293. </template>
  294. </div>
  295. <!-- 物流信息 -->
  296. <template>
  297. <!-- TODO 兼容 -->
  298. <div v-if="order.is_send == 1 && order.detailExpress.length == 0 && order.express && order.express_no"
  299. class="item-box"
  300. flex="dir:left cross:center">
  301. <span class="label">物流信息:</span>
  302. <el-tag style="margin-right: 5px;" type="info" hit size="small">{{ order.express}}
  303. </el-tag>
  304. <a :href="'https://www.baidu.com/s?wd='+ order.express + order.express_no"
  305. target="_blank" title='点击搜索运单号'>{{ order.express_no }}</a>
  306. <el-button v-if="isShowSend && order.is_confirm == 0"
  307. type="text"
  308. icon="el-icon-edit"
  309. circle
  310. @click="openExpress(order,'send')">
  311. </el-button>
  312. <el-button v-if="order.expressSingle" size="mini"
  313. @click="printTeplate(order.expressSingle.print_teplate)">打印此面单
  314. </el-button>
  315. </div>
  316. <div v-else-if="order.is_send == 1 && order.detailExpress.length == 1" class="item-box"
  317. flex="dir:left cross:center">
  318. <span class="label">物流信息:</span>
  319. <template v-if="order.detailExpress[0].send_type == 1">
  320. <el-tag style="margin-right: 5px;" type="info" hit size="small">{{
  321. order.detailExpress[0].express }}
  322. </el-tag>
  323. <a :href="'https://www.baidu.com/s?wd='+ order.detailExpress[0].express + order.detailExpress[0].express_no"
  324. target="_blank" title='点击搜索运单号'>{{ order.detailExpress[0].express_no }}</a>
  325. </template>
  326. <template v-else>
  327. <span>{{order.detailExpress[0].express_content}}</span>
  328. </template>
  329. <el-button v-if="isShowSend && order.is_confirm == 0"
  330. type="text"
  331. icon="el-icon-edit"
  332. circle
  333. @click="openExpress(order,'change', order.detailExpress[0].id)">
  334. </el-button>
  335. <el-button v-if="order.detailExpress[0].expressSingle" size="mini"
  336. @click="printTeplate(order.detailExpress[0].expressSingle.print_teplate)">
  337. 打印此面单
  338. </el-button>
  339. </div>
  340. <div v-else-if="order.detailExpress.length >= 1"
  341. v-for="(expressItem, expressIndex) in order.detailExpress" :key="expressItem.id"
  342. class="item-box" flex="dir:left">
  343. <div>
  344. <div class="label" style="background: #fffaef;color: #e6a23c;padding: 3px 0;">
  345. 收货信息:{{expressIndex + 1}}
  346. </div>
  347. </div>
  348. <div flex="dir:top">
  349. <div flex="cross:center">
  350. <template v-if="expressItem.send_type == 1">
  351. <el-tag style="margin-right: 5px;" type="info" hit size="small">
  352. {{expressItem.express}}
  353. </el-tag>
  354. <a :href="'https://www.baidu.com/s?wd='+ expressItem.express + expressItem.express_no"
  355. target="_blank" title='点击搜索运单号'>{{ expressItem.express_no }}</a>
  356. </template>
  357. <template v-else>
  358. <span>{{expressItem.express_content}}</span>
  359. </template>
  360. <el-button v-if="isShowSend && order.is_confirm == 0"
  361. type="text"
  362. style="padding: 2px 12px"
  363. icon="el-icon-edit"
  364. circle
  365. @click="openExpress(order,'change', expressItem.id)">
  366. </el-button>
  367. <el-button v-if="expressItem.expressSingle" size="mini"
  368. @click="printTeplate(expressItem.expressSingle.print_teplate)">
  369. 打印此面单
  370. </el-button>
  371. </div>
  372. <div flex="dir:left" style="margin-top: 10px;">
  373. <span class="label">配送商品:</span>
  374. <img v-for="erItem in expressItem.expressRelation"
  375. :key="erItem.id"
  376. class="goods-pic"
  377. :src="erItem.orderDetail.goods_info.goods_attr.pic_url ? erItem.orderDetail.goods_info.goods_attr.pic_url : erItem.orderDetail.goods_info.goods_attr.cover_pic">
  378. </div>
  379. </div>
  380. </div>
  381. </template>
  382. <div v-if="order.send_type == 1" class="item-box" flex="dir:top">
  383. <div flex="dir:left cross:center">
  384. <span class="label">自提门店:</span>
  385. <el-tag type="info" hit size="small">{{ order.store.name }}</el-tag>
  386. </div>
  387. <div class="store-address">{{ order.store.address }}</div>
  388. </div>
  389. <div v-if="order.send_type == 0" class="item-box" flex="dir:top">
  390. <div flex="dir:left cross:center">
  391. <span class="label">所属门店:</span>
  392. <el-tag type="info" hit size="small">{{ order.store.name }}</el-tag>
  393. </div>
  394. <div class="store-address">{{ order.store.address }}</div>
  395. </div>
  396. <div v-if="order.clerk != null" class="item-box" flex="dir:left cross:center">
  397. <span class="label">核销人:</span>
  398. <el-tag type="info" hit size="small">{{ order.clerk.nickname }}</el-tag>
  399. </div>
  400. <div v-if="order.orderClerk != null && order.orderClerk.clerk_remark" class="item-box"
  401. flex="dir:left cross:center">
  402. <span class="label">核销备注:</span>
  403. <div>{{order.orderClerk.clerk_remark}}</div>
  404. </div>
  405. <div v-if="order.send_type == 2 && order.is_send == 1" class="item-box" flex="dir:top">
  406. <div flex="dir:left cross:center">
  407. <span class="label">配送员:</span>
  408. <span>{{order.city_name}}</span>
  409. <span style="margin: 0 10px;">{{order.city_mobile}}</span>
  410. <el-button v-if="isShowSend && order.is_confirm == 0"
  411. type="text"
  412. icon="el-icon-edit"
  413. circle
  414. @click="openCity(order,'change')">
  415. </el-button>
  416. </div>
  417. </div>
  418. </div>
  419. </el-col>
  420. <el-col :span="8">
  421. <div flex="dir:top" class="card-box">
  422. <h3>表单信息</h3>
  423. <div v-if="item.value" v-for="(item, index) in order.order_form" :key="index"
  424. class="item-box" flex="dir:left cross:center">
  425. <span class="label">{{item.label}}:</span>
  426. <a v-if="item.key == 'img_upload'" :href="item.value" target="_blank">
  427. <img style="height: 80px;width: 80px" :src="item.value" alt=""></a>
  428. <span v-else>{{item.value}}</span>
  429. </div>
  430. <div v-if="order.remark" class="item-box" flex="dir:left cross:center">
  431. <span class="label">用户订单留言:</span>
  432. <div>{{order.remark}}</div>
  433. </div>
  434. <div v-if="order.words" class="item-box" flex="dir:left cross:center">
  435. <span class="label">商家订单留言:</span>
  436. <div>{{order.words}}</div>
  437. </div>
  438. <div class="item-box" flex="dir:left cross:center">
  439. <span class="label">商家订单备注:</span>
  440. {{ order.seller_remark }}
  441. <i v-if="isShowRemark"
  442. class="el-icon-edit"
  443. style="color: #409EFF;cursor: pointer;margin-left: 10px;"
  444. @click="openDialog(order, sellerRemarkVisible = true)">
  445. </i>
  446. </div>
  447. <div class="order-detail-form-list">
  448. <div class="order-detail-form-item"
  449. v-for="(orderDetail, orderDetailIndex) in order.detail"
  450. :key="orderDetailIndex"
  451. v-if="orderDetail.form_data && orderDetail.same_form !== true">
  452. <h3>商品标题</h3>
  453. <div v-for="(subOrderDetail, subOrderDetailIndex) in order.detail"
  454. :key="orderDetail.form_id + '_' + subOrderDetailIndex"
  455. v-if="orderDetail.form_id == subOrderDetail.form_id"
  456. flex="cross:center box:first" style="margin-bottom: 10px">
  457. <el-image :src="
  458. subOrderDetail.goods_info && subOrderDetail.goods_info.goods_attr && subOrderDetail.goods_info.goods_attr.pic_url ?
  459. subOrderDetail.goods_info.goods_attr.pic_url : subOrderDetail.goods.cover_pic"
  460. style="width: 50px;height: 50px; margin-right: 10px;"></el-image>
  461. <div style="color: #999999;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;">
  462. {{subOrderDetail.goods.goodsWarehouse.name}}
  463. </div>
  464. </div>
  465. <h3>表单信息</h3>
  466. <div v-if="item.value" v-for="(item, index) in orderDetail.form_data" :key="index"
  467. class="item-box" flex="dir:left cross:center">
  468. <span class="label">{{item.label}}:</span>
  469. <a v-if="item.key == 'img_upload'" :href="item.value" target="_blank">
  470. <img style="height: 80px;width: 80px" :src="item.value" alt=""></a>
  471. <span v-else>{{item.value}}</span>
  472. </div>
  473. </div>
  474. </div>
  475. </div>
  476. </el-col>
  477. <el-col :span="8">
  478. <div v-if="isShowShare" flex="dir:top" class="card-box">
  479. <h3>分润信息</h3>
  480. <div v-if="common_order_detail_list.length"
  481. v-for="(common_order_detail, index) in common_order_detail_list" :key="index">
  482. <div v-if="common_order_detail.price_list"
  483. v-for="(log,i) in common_order_detail.price_list">
  484. <template v-if="log.is_price==1">
  485. <div v-if="log.price_list.length">
  486. <el-table
  487. :data="log.price_list"
  488. border
  489. style="width: 100%">
  490. <el-table-column label="用户" min-width="100">
  491. <template slot-scope="scope">
  492. <!-- <com-image style="float: left;margin-right: 5px;"
  493. mode="aspectFill"
  494. :src="scope.row.avatar_url"></com-image>
  495. <div>{{scope.row.nickname}}</div> -->
  496. <div style="display: flex;align-items: center;">
  497. <img :src="scope.row.avatar_url" style="display: block;width: 40px;height: 40px;margin-right: 5px;" />
  498. <div style="line-height: 20px;">{{scope.row.nickname}}</div>
  499. </div>
  500. </template>
  501. </el-table-column>
  502. <el-table-column
  503. prop="price"
  504. label="佣金"
  505. min-width="80">
  506. </el-table-column>
  507. <el-table-column
  508. prop="type_name"
  509. label="佣金类型">
  510. </el-table-column>
  511. <el-table-column
  512. label="所属插件">
  513. <div class="share-title">
  514. {{log.display_name}}
  515. </div>
  516. </el-table-column>
  517. </el-table>
  518. </div>
  519. </template>
  520. </div>
  521. </div>
  522. </div>
  523. <slot name="shareInfo"></slot>
  524. </el-col>
  525. </el-row>
  526. <slot :order="order"></slot>
  527. <el-card shadow="never" style="margin-top: 15px;">
  528. <el-table stripe border :data="order.detail" style="width: 100%;margin-bottom: 15px;">
  529. <el-table-column prop="goods" label="商品标题">
  530. <template slot-scope="scope">
  531. <div flex="dir:left cross:center">
  532. <img :src="scope.row.goods_info && scope.row.goods_info.goods_attr && scope.row.goods_info.goods_attr.pic_url ?
  533. scope.row.goods_info.goods_attr.pic_url : scope.row.goods.cover_pic" alt=""
  534. style="height: 60px;width: 60px;margin-right: 5px">
  535. <com-ellipsis :line="1">{{scope.row.goods_info && scope.row.goods_info.goods_attr &&
  536. scope.row.goods_info.goods_attr.name ?
  537. scope.row.goods_info.goods_attr.name : scope.row.goods.goodsWarehouse.name}}
  538. </com-ellipsis>
  539. </div>
  540. </template>
  541. </el-table-column>
  542. <el-table-column align="center" prop="attr" label="规格" width="220">
  543. <template slot-scope="scope">
  544. <el-tag size="mini" style="margin-right: 5px;" v-for="attr in scope.row.attr_list"
  545. :key="attr.id">{{attr.attr_group_name}}:{{attr.attr_name}}
  546. </el-tag>
  547. </template>
  548. </el-table-column>
  549. <el-table-column align="center" prop="unit_price" label="单价" width="120">
  550. <template slot-scope="scope">
  551. ¥{{scope.row.unit_price}}
  552. </template>
  553. </el-table-column>
  554. <el-table-column align="center" prop="num" label="数量" width="80"></el-table-column>
  555. <el-table-column align="center" prop="total_original_price" label="原价" width="120">
  556. <template slot-scope="scope">
  557. ¥{{scope.row.goods_info.goods_attr.original_price}}
  558. </template>
  559. </el-table-column>
  560. <el-table-column align="center" prop="total_price" label="折扣后" width="120">
  561. <template slot-scope="scope">
  562. ¥{{scope.row.total_price}}
  563. </template>
  564. </el-table-column>
  565. </el-table>
  566. <el-form label-width="200px" :model="order" class="com-order-count-price">
  567. <el-form-item label="商品小计">
  568. <span>¥{{ order.total_goods_original_price }}</span>
  569. </el-form-item>
  570. <el-form-item label="运费">
  571. <span>¥{{ order.express_original_price }}</span>
  572. </el-form-item>
  573. <el-form-item label="会员折扣" v-if="order.member_discount_price != 0.00">
  574. <span style="color:#ff4544;">-¥{{ order.member_discount_price }}</span>
  575. </el-form-item>
  576. <el-form-item label="积分抵扣" v-if="order.score_deduction_price != 0.00">
  577. <span style="color:#ff4544;">-¥{{ order.score_deduction_price }}</span>
  578. </el-form-item>
  579. <el-form-item label="优惠券抵扣" v-if="order.coupon_discount_price != 0.00">
  580. <span style="color:#ff4544;">-¥{{ order.coupon_discount_price }}</span>
  581. </el-form-item>
  582. <!--插件特殊优惠-->
  583. <template v-if="order.plugin_data" v-for="pluginData in order.plugin_data">
  584. <el-form-item :label="pluginData.label">
  585. <span style="color:#ff4544;">-¥{{pluginData.value}}</span>
  586. </el-form-item>
  587. </template>
  588. <el-form-item label="商品加价"
  589. v-if="(order.total_goods_original_price - order.total_goods_price) < 0">
  590. <span style="color:#ff4544;">¥{{ (order.total_goods_price - order.total_goods_original_price).toFixed(2) }}</span>
  591. </el-form-item>
  592. <el-form-item label="运费减免" v-if="(order.express_original_price - order.express_price) > 0">
  593. <span style="color:#ff4544;">¥{{ (order.express_original_price - order.express_price).toFixed(2) }}</span>
  594. </el-form-item>
  595. <el-form-item label="运费增加" v-if="(order.express_original_price - order.express_price) < 0">
  596. <span style="color:#ff4544;">¥{{ (order.express_price - order.express_original_price).toFixed(2) }}</span>
  597. </el-form-item>
  598. <el-form-item label="订单改价" v-if="order.back_price != 0.00">
  599. <span v-if="order.back_price > 0.00" style="color:#ff4544;">-¥{{ order.back_price }}</span>
  600. <span v-if="order.back_price < 0.00" style="color:#ff4544;">¥{{ -order.back_price }}</span>
  601. </el-form-item>
  602. <el-form-item label="实付款">
  603. <span style="color:#ff4544;">¥<b>{{ order.total_pay_price }}</b></span>
  604. </el-form-item>
  605. </el-form>
  606. </el-card>
  607. <div class="action-box" flex="dir:right">
  608. <div>
  609. <!-- 结束 -->
  610. <template v-if="order.sale_status == 0">
  611. <el-button
  612. :loading="btnLoading"
  613. v-if="order.is_recycle == 0 && order.is_confirm == 1 && order.is_sale == 0 && isShowFinish && order.status != 0"
  614. size="small" type="primary" @click="saleOrder(order.id)">结束订单
  615. </el-button>
  616. <!-- 确认收货 -->
  617. <el-button
  618. :loading="btnLoading"
  619. v-if="order.is_recycle == 0 && order.is_send == 1 && order.is_confirm == 0 && isShowConfirm && order.status != 0 && order.is_confirm_show == 1"
  620. size="small" type="primary" @click="confirm(order.id)">确认收货
  621. </el-button>
  622. <el-button v-if="order.expressSingle" size="small" type="primary"
  623. @click="expressSingle(order.expressSingle.print_teplate)">电子面单
  624. </el-button>
  625. <!-- 核销 -->
  626. <el-button
  627. v-if="order.send_type == 1 && (order.is_pay == 1 || order.pay_type == 2) && order.clerk == null && order.is_send == 0 && order.is_clerk_show && order.is_recycle == 0 && isShowClerk && order.is_recycle == 0 && order.status != 0 && order.cancel_status != 1"
  628. size="small" type="primary" @click="openDialog(order, clerkVisible = true)">核销订单
  629. </el-button>
  630. </template>
  631. <!-- 发货 -->
  632. <template v-if="order.status == 1 && order.sale_status == 0">
  633. <!-- 正常发货 -->
  634. <el-button
  635. v-if="order.send_type == 0 && order.is_send == 0 && order.cancel_status != 1 && (order.is_pay == 1 || order.pay_type == 2) && order.is_send_show == 1 && isShowSend && order.is_recycle == 0 && order.status != 0"
  636. size="small" type="primary" @click="openExpress(order,'send')">发货
  637. </el-button>
  638. <!-- 同城配送 -->
  639. <el-button
  640. v-if="order.send_type == 2 && order.is_send == 0 && order.cancel_status != 1 && (order.is_pay == 1 || order.pay_type == 2) && order.is_send_show == 1 && isShowSend && order.is_recycle == 0 && order.status != 0"
  641. size="small" type="primary" @click="openCity(order,'send')">发货
  642. </el-button>
  643. <!-- 到店自提发货 -->
  644. <el-button
  645. v-if="order.send_type == 1 && order.is_send == 0 && order.cancel_status != 1 && (order.is_pay == 1 || order.pay_type == 2) && order.is_send_show == 1 && isShowSend && order.is_recycle == 0 && order.status != 0"
  646. size="small" @click="storeOrderSend(order)" type="primary">发货
  647. </el-button>
  648. </template>
  649. <!-- 打印小票 -->
  650. <el-button :loading="btnLoading"
  651. v-if="order.is_recycle == 0 && order.status != 0 && isShowPrint" size="small"
  652. type="primary" @click="print(order.id)">打印小票
  653. </el-button>
  654. </div>
  655. </div>
  656. </div>
  657. </el-card>
  658. </div>
  659. </template>
  660. <script>
  661. Vue.component('com-order-detail', {
  662. template: '#com-order-detail',
  663. props: {
  664. getDetailUrl: {
  665. type: String,
  666. default: 'plugin/o2o_store/mall/order/detail'
  667. },
  668. getOrderListUrl: {
  669. type: String,
  670. default: 'plugin/o2o_store/mall/order/index'
  671. },
  672. // 控制按钮是否显示
  673. // 编辑收货地址
  674. isShowEditAddress: {
  675. type: Boolean,
  676. default: true
  677. },
  678. // 编辑订单备注
  679. isShowRemark: {
  680. type: Boolean,
  681. default: true
  682. },
  683. // 结束订单
  684. isShowFinish: {
  685. type: Boolean,
  686. default: true
  687. },
  688. // 确认收货
  689. isShowConfirm: {
  690. type: Boolean,
  691. default: true
  692. },
  693. // 小票打印
  694. isShowPrint: {
  695. type: Boolean,
  696. default: true
  697. },
  698. // 订单核销
  699. isShowClerk: {
  700. type: Boolean,
  701. default: true
  702. },
  703. // 订单发货
  704. isShowSend: {
  705. type: Boolean,
  706. default: true
  707. },
  708. // 订单状态进度
  709. isShowSteps: {
  710. type: Boolean,
  711. default: true
  712. },
  713. // 订单状态进度
  714. isShowShare: {
  715. type: Boolean,
  716. default: true
  717. },
  718. // 订单数据可从父组件传入 start
  719. // 组件内部不请求数据
  720. isNewRequest: {
  721. type: Boolean,
  722. default: false
  723. },
  724. // 父组件订单数据
  725. orderData: {
  726. type: Object,
  727. default: function () {
  728. return {}
  729. }
  730. },
  731. // 订单数据可从父组件传入 end
  732. // 订单状态
  733. newActive: {
  734. type: Number,
  735. default: 2,
  736. },
  737. },
  738. data() {
  739. return {
  740. loading: false,
  741. newOrder: {},// 传给各子组件的订单信息
  742. addressVisible: false,// 修改收货地址
  743. sellerRemarkVisible: false,// 添加商户备注
  744. clerkVisible: false,// 订单核销
  745. sendVisible: false,// 发货
  746. sendType: '',// 发货类型
  747. expressId: 0,// 编辑发货,物流ID
  748. cancelVisible: false,// 订单取消
  749. cancelType: -1,// 订单取消状态 同意|拒绝
  750. changePriceVisible: false,// 修改订单价格
  751. active: 1,
  752. order: {
  753. user: {},
  754. detailExpress: [],
  755. },
  756. common_order_detail_list: [],
  757. btnLoading: false,
  758. citySendVisible: false,//选择配送员
  759. };
  760. },
  761. watch: {
  762. orderData: function (newVal) {
  763. this.order = newVal;
  764. },
  765. newActive: function (newVal) {
  766. this.active = newVal;
  767. }
  768. },
  769. created() {
  770. // 数据从父组件传入
  771. if (!this.isNewRequest) {
  772. this.getDetail();
  773. }
  774. },
  775. methods: {
  776. //获取列表
  777. getDetail() {
  778. this.loading = true;
  779. request({
  780. params: {
  781. r: this.getDetailUrl,
  782. order_id: getQuery('order_id'),
  783. },
  784. }).then(e => {
  785. this.loading = false;
  786. if (e.data.code == 0) {
  787. this.common_order_detail_list = e.data.data.common_order_detail_list
  788. this.order = e.data.data.order;
  789. this.$emit('get-detail', this.order)
  790. if (this.order.cancel_status == 1) {
  791. this.active = 5;
  792. }
  793. if (this.order.is_pay == 1) {
  794. this.active = 2;
  795. }
  796. if (this.order.is_send == 1) {
  797. this.active = 3;
  798. }
  799. if (this.order.is_confirm == 1) {
  800. this.active = 4;
  801. }
  802. if (this.order.is_sale == 1) {
  803. this.active = 5;
  804. }
  805. }
  806. }).catch(e => {
  807. });
  808. },
  809. // 新的
  810. openDialog(order) {
  811. this.newOrder = order;
  812. },
  813. dialogClose() {
  814. this.addressVisible = false;
  815. this.sellerRemarkVisible = false;
  816. this.clerkVisible = false;
  817. this.sendVisible = false;
  818. this.changePriceVisible = false;
  819. this.citySendVisible = false;
  820. },
  821. dialogSubmit() {
  822. this.expressId = 0;
  823. this.getDetail()
  824. },
  825. // 发货
  826. openExpress(order, type, expressId = 0) {
  827. this.newOrder = order;
  828. this.sendType = type;
  829. this.sendVisible = true;
  830. this.expressId = parseInt(expressId);
  831. },
  832. // 确认收货
  833. confirm(id) {
  834. this.$confirm('是否确认收货?', '提示', {
  835. confirmButtonText: '确定',
  836. cancelButtonText: '取消',
  837. }).then(() => {
  838. this.btnLoading = true;
  839. request({
  840. params: {
  841. r: 'mall/order/confirm',
  842. },
  843. data: {
  844. order_id: id
  845. },
  846. method: 'post',
  847. }).then(e => {
  848. this.btnLoading = false;
  849. if (e.data.code == 0) {
  850. this.$message({
  851. message: e.data.msg,
  852. type: 'success'
  853. });
  854. this.getDetail();
  855. } else {
  856. this.$message({
  857. message: e.data.msg,
  858. type: 'error'
  859. });
  860. }
  861. }).catch(e => {
  862. this.$message({
  863. message: e.data.msg,
  864. type: 'error'
  865. });
  866. });
  867. }).catch(() => {
  868. this.$message({
  869. message: e.data.msg,
  870. type: 'error'
  871. });
  872. });
  873. },
  874. // 结束订单
  875. saleOrder(id) {
  876. this.$confirm('是否结束该订单?', '提示', {
  877. confirmButtonText: '确定',
  878. cancelButtonText: '取消',
  879. }).then(() => {
  880. this.btnLoading = true;
  881. request({
  882. params: {
  883. r: 'mall/order/order-sales',
  884. },
  885. data: {
  886. order_id: id
  887. },
  888. method: 'post',
  889. }).then(e => {
  890. this.btnLoading = false;
  891. if (e.data.code == 0) {
  892. this.$message({
  893. message: e.data.msg,
  894. type: 'success'
  895. });
  896. this.getDetail();
  897. } else {
  898. this.$message({
  899. message: e.data.msg,
  900. type: 'error'
  901. });
  902. }
  903. }).catch(e => {
  904. this.$message({
  905. message: e.data.msg,
  906. type: 'error'
  907. });
  908. });
  909. }).catch(() => {
  910. this.$message({
  911. message: e.data.msg,
  912. type: 'error'
  913. });
  914. });
  915. },
  916. // 打印小票
  917. print(id) {
  918. this.$confirm('是否打印小票?', '提示', {
  919. confirmButtonText: '确定',
  920. cancelButtonText: '取消',
  921. }).then(() => {
  922. this.btnLoading = true;
  923. request({
  924. params: {
  925. r: 'mall/order/order-print',
  926. order_id: id
  927. },
  928. method: 'get',
  929. }).then(e => {
  930. this.btnLoading = false;
  931. if (e.data.code == 0) {
  932. this.$message({
  933. message: e.data.msg,
  934. type: 'success'
  935. });
  936. this.getDetail();
  937. }
  938. this.$message({
  939. message: e.data.msg,
  940. type: 'warning'
  941. });
  942. }).catch(e => {
  943. });
  944. }).catch(() => {
  945. });
  946. },
  947. expressSingle(htmlData) {
  948. myWindow = window.open('', '_blank');
  949. myWindow.document.write(htmlData);
  950. myWindow.focus();
  951. },
  952. openCity(order, sendType) {
  953. this.newOrder = order;
  954. this.sendType = sendType
  955. this.citySendVisible = true;
  956. },
  957. toList() {
  958. this.$navigate({
  959. r: this.getOrderListUrl,
  960. })
  961. },
  962. storeOrderSend(order) {
  963. this.$alert('是否将配送方式改为快递配送?', '提示', {
  964. confirmButtonText: '确定',
  965. showCancelButton: true,
  966. type: 'warning',
  967. callback: action => {
  968. if (action == 'confirm') {
  969. this.openDialog(order)
  970. this.addressVisible = true;
  971. }
  972. }
  973. });
  974. },
  975. printTeplate(htmlData) {
  976. myWindow = window.open('', '_blank');
  977. myWindow.document.write(htmlData);
  978. myWindow.focus();
  979. },
  980. }
  981. })
  982. </script>