OrderManage.vue 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678
  1. <template>
  2. <div class="table" style="color: #666">
  3. <div class="crumbs">
  4. <el-breadcrumb separator="/">
  5. <el-breadcrumb-item><i class="el-icon-lx-cascades"></i> 订单处理</el-breadcrumb-item>
  6. </el-breadcrumb>
  7. </div>
  8. <div class="container" style="margin-top:10px">
  9. <div class="handle-box-top">
  10. <div class="condition-box">
  11. <span>订单状态</span>
  12. <el-radio-group v-model="tabIndex" @change="getDataList">
  13. <el-radio-button label="all">全部</el-radio-button>
  14. <el-radio-button label="0">待支付</el-radio-button>
  15. <el-radio-button label="10">待接单</el-radio-button>
  16. <el-radio-button label="20">
  17. 已接单
  18. <div class="high-light-number" v-if="receivedNum != 0 && receivedNum != null">{{receivedNum}}</div>
  19. </el-radio-button>
  20. <el-radio-button label="30">待配送</el-radio-button>
  21. <el-radio-button label="40">配送中</el-radio-button>
  22. <el-radio-button label="60">已完成</el-radio-button>
  23. <el-radio-button label="-20">
  24. 已完成 (退款)
  25. <div class="high-light-number" v-if="refundNum != 0 && refundNum != null">{{refundNum}}</div>
  26. </el-radio-button>
  27. <el-radio-button label="50">待自取</el-radio-button>
  28. <!-- <el-radio-button label="9">退款申请</el-radio-button> -->
  29. </el-radio-group>
  30. </div>
  31. <div class="handle-box-top">
  32. <div class="condition-box">
  33. <span >所属门店</span>
  34. <el-select v-model="storeId" style="widht:200px;" clearable filterable >
  35. <el-option v-for="item in storeList" :key="item.storeId" :label="item.storeName" :value="item.storeId"></el-option>
  36. </el-select>
  37. </div>
  38. <div class="condition-box">
  39. <span>下单时间</span>
  40. <el-date-picker style="max-width: 200px;" v-model="createDateS"></el-date-picker>
  41. </div>
  42. <div class="condition-box">
  43. <span>-</span>
  44. <el-date-picker style="max-width: 200px;" v-model="createDateE"></el-date-picker>
  45. </div>
  46. <div class="condition-box">
  47. <span>顾客姓名</span>
  48. <el-input v-model="orderName" class="handle-input mr10" style="width: 200px;" placeholder="根据顾客姓名查询"/>
  49. </div>
  50. <div class="condition-box">
  51. <span>手机号</span>
  52. <el-input v-model="orderTel" class="handle-input mr10" style="width: 200px;" placeholder="根据顾客手机号查询"/>
  53. </div>
  54. </div>
  55. <div class="handle-box-top">
  56. <div class="handle-box">
  57. <el-button type="primary" @click="getDataList">
  58. 查询
  59. </el-button>
  60. </div>
  61. </div>
  62. </div>
  63. <div class="order-table" style="margin-top: 20px;">
  64. <table style="margin-top: 15px;width:100%;border-collapse: collapse;">
  65. <tbody v-for="(order, index) in tableData" :key="order.orderId">
  66. <tr class="sep"></tr>
  67. <tr class="trhead">
  68. <td colspan="4" class="td1">
  69. <span style="font-size: 24px; font-weight: bolder; color: rgb(25, 137, 250);margin-left: 13px;">{{ order.takeupCode }}</span>
  70. <span style="padding-left: 20px; font-size: 14px; font-weight: bold;">{{typeFormatter(order.orderType)}}</span>
  71. <span style="float:right;margin-top: 5px;margin-right: 12px;">{{order.statusName}}({{order.sourceTypeStr}})</span>
  72. </td>
  73. </tr>
  74. <tr class="tr-border">
  75. <td class="first-td">
  76. <img style="margin-left: 6px;" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNSIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDE1IDE2Ij4KICAgIDxwYXRoIGZpbGw9IiM4NzhEOTkiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTcuNSA4YTMuNSAzLjUgMCAxIDAgMC03IDMuNSAzLjUgMCAwIDAgMCA3em0wIDFhNC41IDQuNSAwIDEgMSAwLTkgNC41IDQuNSAwIDAgMSAwIDl6bTYuMzYgNmMuNjg1LTMuMTIyLTEuMjEtNC41NDUtNi4zNTMtNC41NDVTLjQ2MiAxMS44NzkgMS4xMzYgMTVIMTMuODZ6TTcuNTA3IDkuNDU1YzYuMTEgMCA4LjQ4NCAyLjE4MSA3LjEyIDYuNTQ1SC4zNjdjLTEuMzUtNC4zNjQgMS4wMy02LjU0NSA3LjE0LTYuNTQ1eiIvPgo8L3N2Zz4K">
  77. </td>
  78. <td colspan="3" style="min-height: 60px; height: 60px;">
  79. <span style="display: block; text-align: left;">
  80. {{ order.orderName }}&nbsp;&nbsp;{{ order.orderTel }}
  81. <b style="float:right">{{order.storeName}}</b>
  82. </span>
  83. <p style="text-align: left;">{{ order.orderAddress }}</p>
  84. </td>
  85. </tr>
  86. <tr class="tr-border">
  87. <td style="text-align:right;">
  88. 备注:
  89. </td>
  90. <td colspan="3" style="min-height: 60px; height: 60px;">
  91. <span style="display: block; text-align: left;">
  92. {{ order.customerMes }}
  93. </span>
  94. </td>
  95. </tr>
  96. <tr class="tr-border" >
  97. <td class="first-td">
  98. <img style="margin-left: 6px;" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDIwIDE2Ij4KICAgIDxwYXRoIGZpbGw9IiM4NzhEOTkiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTE0LjgyNiA5LjY5NGwtMi4zNTYgMS4yNDhhLjUuNSAwIDAgMS0uMjM0LjA1OEg3LjVhLjUuNSAwIDAgMS0uNS0uNXYtM2EuNS41IDAgMCAwLS41LS41aC01YS41LjUgMCAwIDAtLjUuNVYxMmEzIDMgMCAwIDAgNS42IDEuNWwuMjg4LS41aDYuMjI0bC4yODkuNWEzIDMgMCAxIDAgMy45OC00LjE2M2wtLjM4Mi0uMi0xLjY1LTUuNzc0QS41LjUgMCAwIDAgMTQuODcgM2gtLjg4NGEuNS41IDAgMCAwLS40OC42MzhsMS41NjggNS40NzZhLjUuNSAwIDAgMS0uMjQ3LjU4ek0yMCAxMmE0IDQgMCAwIDEtNy40NjUgMmgtNS4wN0E0IDQgMCAwIDEgMCAxMlY3YTEgMSAwIDAgMSAxLTFoNmExIDEgMCAwIDEgMSAxdjNoNC4xMTFMMTQgOWwtMS43MTgtNmgtMS42OTZhLjUuNSAwIDAgMS0uMDAyLTFIMTZsMS44NDIgNi40NDlBNCA0IDAgMCAxIDIwIDEyek0xIDBoNWExIDEgMCAwIDEgMSAxdjNhMSAxIDAgMCAxLTEgMUgxYTEgMSAwIDAgMS0xLTFWMWExIDEgMCAwIDEgMS0xem0uNSA0aDRhLjUuNSAwIDAgMCAuNS0uNXYtMmEuNS41IDAgMCAwLS41LS41aC00YS41LjUgMCAwIDAtLjUuNXYyYS41LjUgMCAwIDAgLjUuNXoiLz4KPC9zdmc+Cg==">
  99. </td>
  100. <td colspan="3" style="text-align: left;">
  101. <p><span>{{deliveryTypeFormatter( order.orderType )}}</span></p>
  102. </td>
  103. </tr>
  104. <tr class="tr-border">
  105. <td class="first-td">
  106. <img style="margin-left: 6px;" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDE2IDE2Ij4KICAgIDxwYXRoIGZpbGw9IiM4NzhEOTkiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTEuNSA2aDRhLjUuNSAwIDAgMCAuNS0uNXYtNGEuNS41IDAgMCAwLS41LS41aC00YS41LjUgMCAwIDAtLjUuNXY0YS41LjUgMCAwIDAgLjUuNXpNMSAwaDVhMSAxIDAgMCAxIDEgMXY1YTEgMSAwIDAgMS0xIDFIMWExIDEgMCAwIDEtMS0xVjFhMSAxIDAgMCAxIDEtMXptOS41IDZoNGEuNS41IDAgMCAwIC41LS41di00YS41LjUgMCAwIDAtLjUtLjVoLTRhLjUuNSAwIDAgMC0uNS41djRhLjUuNSAwIDAgMCAuNS41ek0xMCAwaDVhMSAxIDAgMCAxIDEgMXY1YTEgMSAwIDAgMS0xIDFoLTVhMSAxIDAgMCAxLTEtMVYxYTEgMSAwIDAgMSAxLTF6TTEuNSAxNWg0YS41LjUgMCAwIDAgLjUtLjV2LTRhLjUuNSAwIDAgMC0uNS0uNWgtNGEuNS41IDAgMCAwLS41LjV2NGEuNS41IDAgMCAwIC41LjV6TTEgOWg1YTEgMSAwIDAgMSAxIDF2NWExIDEgMCAwIDEtMSAxSDFhMSAxIDAgMCAxLTEtMXYtNWExIDEgMCAwIDEgMS0xem0xMCA2aDNhMSAxIDAgMCAwIDEtMXYtM2ExIDEgMCAwIDAtMS0xaC0zYTEgMSAwIDAgMC0xIDF2M2ExIDEgMCAwIDAgMSAxem0tMS02aDVhMSAxIDAgMCAxIDEgMXY1YTEgMSAwIDAgMS0xIDFoLTVhMSAxIDAgMCAxLTEtMXYtNWExIDEgMCAwIDEgMS0xeiIvPgo8L3N2Zz4K">
  107. </td>
  108. <td colspan="3" style="text-align: left;">
  109. <span style="display: block; font: 15px bolder; color: rgb(45, 47, 51);">
  110. {{order.buyCount}}&nbsp;件商品 <b class="state_b_3168206771703696" style="color: rgb(25, 137, 250);float:right;margin-right: 12px;" @click="expand(index)">{{ !order.buttonText ? '展开' : order.buttonText }}</b>
  111. </span>
  112. </td>
  113. </tr>
  114. <tr v-show="order.isExpand" v-for="item in order.detailList" :key="item.orderDetailId" class="product_table_3168206771703696 tr-border" style="display: table-row;">
  115. <td></td>
  116. <td style="text-align: left;padding: 10px 0;">
  117. {{item.goodsName}}<span>{{item.propertys == '' ? '' : '(' + item.propertys + ')'}}</span>
  118. </td>
  119. <td style="text-align: right;">× {{item.buyCount}}</td>
  120. <td style="text-align: right;padding-right: 12px;padding-left: 5px;">{{moneyConverter(item.salesPrice)}}</td>
  121. </tr>
  122. <tr v-if="order.isExpand" class="product_table_3168206771703696 tr-border" style="display: table-row;">
  123. <td></td>
  124. <td class="first-td" colspan="3" style="text-align: left;">
  125. <span style="font-size: 12px; color: rgb(135, 141, 153);">其他</span>
  126. <p>餐盒费
  127. <span style="float: right; margin-right: 15px;">{{moneyConverter(order.packingFee )}}</span>
  128. </p>
  129. <p>配送费
  130. <span style="float: right; margin-right: 15px;">{{moneyConverter(order.deliveryFee + order.climbingFee + order.sortingFee) }}</span>
  131. </p>
  132. <p v-if="order.deliveryDiscountsFlag == 1" >免配送费
  133. <span style="float: right; margin-right: 15px;">{{-moneyConverter(order.deliveryFee + order.climbingFee + order.sortingFee) }}</span>
  134. </p>
  135. <p>新客立减
  136. <span style="float: right; margin-right: 15px;">{{moneyConverter(order.newcusDiscounts) }}</span>
  137. </p>
  138. <p>满减
  139. <span style="float: right; margin-right: 15px;">{{moneyConverter(order.fullDiscounts) }}</span>
  140. </p>
  141. <p>优惠券
  142. <span style="float: right; margin-right: 15px;">{{order.couponName == '' || order.couponName == null ? '' : '(' + order.couponName + ')'}}{{moneyConverter(order.couponCost) }}</span>
  143. </p>
  144. </td>
  145. </tr>
  146. <tr class="tr-border">
  147. <td class="first-td">
  148. <img style="margin-left: 6px;" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNSIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDE1IDE2Ij4KICAgIDxnIGZpbGw9IiM4NzhEOTkiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPHBhdGggZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNMSAwaDEzYTEgMSAwIDAgMSAxIDF2MTRhMSAxIDAgMCAxLTEgMUgxYTEgMSAwIDAgMS0xLTFWMWExIDEgMCAwIDEgMS0xem0wIDEuNXYxM2EuNS41IDAgMCAwIC41LjVoMTJhLjUuNSAwIDAgMCAuNS0uNXYtMTNhLjUuNSAwIDAgMC0uNS0uNWgtMTJhLjUuNSAwIDAgMC0uNS41eiIvPgogICAgICAgIDxwYXRoIGQ9Ik02Ljg0NCA3SDVhLjUuNSAwIDAgMCAwIDFoMnYxSDVhLjUuNSAwIDAgMCAwIDFoMnYyLjVhLjUuNSAwIDEgMCAxIDBWMTBoMmEuNS41IDAgMSAwIDAtMUg4VjhoMmEuNS41IDAgMSAwIDAtMUg4LjE1MmwyLjQzLTIuODc3YS41LjUgMCAxIDAtLjc2NC0uNjQ2bC0yLjMyIDIuNzQ4LTIuMzItMi43NDhhLjUuNSAwIDEgMC0uNzY0LjY0Nkw2Ljg0NCA3eiIvPgogICAgPC9nPgo8L3N2Zz4K">
  149. </td>
  150. <td style="text-align: left; font: 15px bolder; color: rgb(45, 47, 51);">顾客实付</td>
  151. <td colspan="2" style="text-align: right;"><b style="color: rgb(90, 94, 102);padding-right: 12px;">¥{{moneyConverter(order.orderFee)}}</b></td>
  152. </tr>
  153. <tr class="tr-border">
  154. <td></td>
  155. <td style="text-align: left; font: 15px bolder; color: rgb(45, 47, 51);padding: 10px 0;">
  156. 商家预计收入
  157. <el-tooltip class="item" effect="dark" placement="top-end">
  158. <div slot="content" class="shouru_div sr_tc_3168206771703696">
  159. <p>订单总额<span>¥{{moneyConverter(order.orderFee)}}</span></p>
  160. <p>配送费<span>¥-{{moneyConverter(order.deliveryFee + order.climbingFee + order.sortingFee) }}</span></p>
  161. <p v-if="order.deliveryDiscountsFlag == 1" >免配送费
  162. <span>¥-{{moneyConverter(order.deliveryFee + order.climbingFee + order.sortingFee) }}</span>
  163. </p>
  164. <p>微信扣点<span>¥-{{moneyConverter(calcPoints((order.wxPoint / 1000), order.orderFee ))}}</span></p>
  165. <p>平台扣点<span>¥-{{moneyConverter(calcPoints((Number(order.commissionRate) / Number(1000)), order.orderFee - (order.deliveryFee + order.climbingFee + order.sortingFee)))}}</span></p>
  166. <p style="border-bottom: none;">商家预计收入<span>¥{{toFixed2(moneyConverter( order.orderFee) - moneyConverter(order.deliveryFee + order.climbingFee + order.sortingFee) - moneyConverter(calcPoints((order.wxPoint / 1000), order.orderFee)) - moneyConverter(calcPoints((Number(order.commissionRate) / Number(1000)), order.orderFee - (order.deliveryFee + order.climbingFee + order.sortingFee))))}}</span></p> <i class="layui-edge"></i>
  167. </div>
  168. <i class="el-icon-question"></i>
  169. </el-tooltip>
  170. </td>
  171. <td colspan="2" style="text-align: right;">
  172. <b style="color: rgb(250, 85, 85);padding-right: 12px;">¥{{toFixed2(moneyConverter( order.orderFee) - moneyConverter(order.deliveryFee + order.climbingFee + order.sortingFee) - moneyConverter(calcPoints((order.wxPoint / 1000), order.orderFee)) - moneyConverter(calcPoints((Number(order.commissionRate) / Number(1000)), order.orderFee - (order.deliveryFee + order.climbingFee + order.sortingFee))))}}</b>
  173. </td>
  174. </tr>
  175. <tr class="tr-border">
  176. <td></td>
  177. <td colspan="2" style="text-align: left;padding: 10px 0;">
  178. <p>下单时间:{{order.createDateStr}}</p>
  179. <p>订单号:{{order.orderCode}}</p>
  180. </td>
  181. </tr>
  182. <tr class="tr-border" v-if="order.reason != null && order.reason.length > 0">
  183. <td style="text-align:right;">
  184. 退款原因:
  185. </td>
  186. <td colspan="3" style="min-height: 60px; height: 60px;">
  187. <span style="display: block; text-align: left;">
  188. {{ order.reason }}
  189. </span>
  190. </td>
  191. </tr>
  192. <tr class="tr-border">
  193. <td></td>
  194. <td colspan="2" style="text-align: right;padding: 10px 0;width: 100%;">
  195. <el-button v-if="order.status == 10" @click="printOrder(order.orderId)">
  196. 打印订单
  197. </el-button>
  198. <el-button style="margin-right: 20px;" @click="orderPayedInfo(order.orderCode)">
  199. 查询支付状态
  200. </el-button>
  201. <el-button v-if="order.status == 10" style="margin-right: 20px;" v-action="'edit'" @click="refuseOrder(order.orderId)">
  202. 拒绝
  203. </el-button>
  204. <el-button v-action="'edit'" v-if="order.status != 50 && order.status > 0 && order.status != 0 && order.status != 10" style="margin-right: 20px;" @click="allRefund(order.orderId)">
  205. 全部退单
  206. </el-button>
  207. <el-button v-action="'edit'" v-if="order.status == 50" style="margin-right: 20px;" @click="completeOrder(order.orderId)">
  208. 客户已取货
  209. </el-button>
  210. </td>
  211. </tr>
  212. </tbody>
  213. </table>
  214. </div>
  215. <el-pagination
  216. style="margin-top: 10px;"
  217. background
  218. @size-change="handleSizeChange"
  219. @current-change="handleCurrentChange"
  220. :current-page="currentPage"
  221. :page-sizes="[10, 20, 30, 40]"
  222. :page-size="pageSize"
  223. layout="total, sizes, prev, pager, next, jumper"
  224. :total="total">
  225. </el-pagination>
  226. </div>
  227. <el-dialog title="全部退款" :visible.sync="dialogVisible" :before-close="closeDialog" width="500px">
  228. <div style="line-height: 72px;">
  229. <span>退款原因</span>
  230. <el-input type="textarea" rows="3" placeholder="请输入退款原因" v-model="refundReason" style="margin-left: 15px;width: 350px;"></el-input>
  231. </div>
  232. <span slot="footer" class="dialog-footer">
  233. <el-button type="primary" @click="doRefund">保存</el-button>
  234. <el-button @click="closeDialog">关闭</el-button>
  235. </span>
  236. </el-dialog>
  237. <el-dialog title="支付明细" :visible.sync="payedDialogVisible" :before-close="closePayedDialog" width="80%">
  238. <div style="padding-bottom: 30px">
  239. <div>
  240. <div>
  241. <div>
  242. <div class="crumbs">
  243. <el-breadcrumb separator="/">
  244. <el-breadcrumb-item style="font-size: 16px;"><i class="el-icon-lx-calendar"></i>支付信息</el-breadcrumb-item>
  245. </el-breadcrumb>
  246. </div>
  247. <el-form ref="form" :model="payedInfo" label-width="120px">
  248. <el-row>
  249. <el-col :span="8">
  250. <el-form-item label="通信标识:">
  251. <span>{{payedInfo.return_code}}</span>
  252. </el-form-item>
  253. </el-col>
  254. <el-col :span="8">
  255. <el-form-item label="业务结果: ">
  256. <span>{{payedInfo.result_code}}</span>
  257. </el-form-item>
  258. </el-col>
  259. <el-col :span="8">
  260. <el-form-item label="错误描述: ">
  261. <span>{{payedInfo.err_code_des}}</span>
  262. </el-form-item>
  263. </el-col>
  264. </el-row>
  265. <el-row>
  266. <el-col :span="8">
  267. <el-form-item label="交易状态:">
  268. <span>{{payedInfo.trade_state}}</span>
  269. </el-form-item>
  270. </el-col>
  271. <el-col :span="8">
  272. <el-form-item label="状态描述: ">
  273. <span>{{payedInfo.trade_state_desc}}</span>
  274. </el-form-item>
  275. </el-col>
  276. <el-col :span="8">
  277. <el-form-item label="付款银行:">
  278. <span>{{payedInfo.bank_type}}</span>
  279. </el-form-item>
  280. </el-col>
  281. </el-row>
  282. <el-row>
  283. <el-col :span="8">
  284. <el-form-item label="付款金额(分): ">
  285. <span>{{payedInfo.total_fee}}</span>
  286. </el-form-item>
  287. </el-col>
  288. <el-col :span="8">
  289. <el-form-item label="交易时间:">
  290. <span>{{payedInfo.time_end}}</span>
  291. </el-form-item>
  292. </el-col>
  293. </el-row>
  294. </el-form>
  295. </div>
  296. </div>
  297. </div>
  298. <el-button style="margin-top: 20px;" v-if="payedInfo.trade_state == 'REFUND' && refundFlg" type="primary" @click="orderRefundInfo(cOrderCode)">查询退款信息</el-button>
  299. <div v-if="refundShow" style="margin-top:20px">
  300. <div>
  301. <div>
  302. <div class="crumbs">
  303. <el-breadcrumb separator="/">
  304. <el-breadcrumb-item style="font-size: 16px;"><i class="el-icon-lx-calendar"></i>退款信息</el-breadcrumb-item>
  305. </el-breadcrumb>
  306. </div>
  307. <el-form ref="form" :model="refundInfo" label-width="120px">
  308. <el-row>
  309. <el-col :span="8">
  310. <el-form-item label="订单金额(分):">
  311. <span>{{refundInfo.total_fee}}</span>
  312. </el-form-item>
  313. </el-col>
  314. <el-col :span="8">
  315. <el-form-item label="总退货额(分): ">
  316. <span>{{refundInfo.refund_fee}}</span>
  317. </el-form-item>
  318. </el-col>
  319. </el-row>
  320. </el-form>
  321. <dptable :columns="columns3" :dataSource="refundList" :options="options3"/>
  322. </div>
  323. </div>
  324. </div>
  325. </div>
  326. </el-dialog>
  327. </div>
  328. </template>
  329. <script>
  330. import dptable from '@/components/common/Dptable.vue'
  331. export default {
  332. components: {
  333. dptable
  334. },
  335. data(){
  336. return {
  337. tabIndex: "all",
  338. storeList: [],
  339. url: '/orderManage/orderPage',
  340. numUrl: '/orderManage/getReceivedAndRefundOrderNum',
  341. detailUrl: '/orderManage/getOrderDetails',
  342. refundUrl: '/refund/orderRefund',
  343. printUrl: '/orderManage/printOrder',
  344. refuseUrl: '/orderManage/refuseOrder',
  345. completeUrl: '/orderManage/completeOrder',
  346. storeUrl: '/storeManage/getStoreList',
  347. payedInfoUrl: '/orderManage/getOrderPayedInfo',
  348. refundInfoUrl: '/orderManage/getOrderRefundInfo',
  349. storeId: '',
  350. dateArray: [],
  351. orderName: '',
  352. orderTel: '',
  353. dialogVisible: false,
  354. receivedNum: 0,
  355. refundNum: 0,
  356. currentPage: 1,
  357. pageSize: 10,
  358. total: 0,
  359. tableData: [],
  360. createDateS: null,
  361. createDateE: null,
  362. refundOrderId: null,
  363. refundReason: null,
  364. payedDialogVisible: false,
  365. payedInfo: {
  366. return_code: '',
  367. result_code: '',
  368. err_code_des: '',
  369. trade_state: '',
  370. trade_state_desc: '',
  371. bank_type: '',
  372. total_fee: '',
  373. time_end: ''
  374. },
  375. cOrderCode: '',
  376. refundFlg: true,
  377. refundShow: false,
  378. refundInfo: {
  379. total_fee: '',
  380. refund_fee: ''
  381. },
  382. refundList: [],
  383. columns3: [
  384. {
  385. prop: 'refund_fee', label: '申请退款金额(分)', width: 200
  386. },
  387. {
  388. prop: 'refund_status', label: '退款状态', width: 200
  389. },
  390. {
  391. prop: 'refund_channel', label: '退款渠道', width: 250
  392. },
  393. {
  394. prop: 'refund_recv_accout', label: '退款入账账户', width: 250
  395. },
  396. {
  397. prop: 'refund_success_time', label: '退款成功时间',
  398. }
  399. ],
  400. options3: {
  401. index: false, // 显示序号, 多选则 mutiSelect
  402. initTable: false, // 是否一挂载就加载数据
  403. border:true
  404. },
  405. };
  406. },
  407. created() {
  408. const date = new Date();
  409. this.createDateS = this.$moment(date).format("YYYY-MM-DD");
  410. this.createDateE = this.$moment(date).format("YYYY-MM-DD");
  411. this.getStoreList();
  412. this.getDataList();
  413. },
  414. methods: {
  415. closeDialog() {
  416. this.dialogVisible = false
  417. this.refundReason = null;
  418. },
  419. expand(index) {
  420. let order = this.tableData[index]
  421. if (!order.isExpand) {
  422. if (!!order.detailList && order.detailList.length > 0) {
  423. this.$set(order, 'buttonText', '收起')
  424. this.$set(order, 'isExpand', true)
  425. } else {
  426. // 获取详情数据
  427. const querystring = require('querystring');
  428. this.$axios.post(this.detailUrl, querystring.stringify({orderId: order.orderId})).then(res => {
  429. if (res.data.rtnBean.rtnCode == 0) {
  430. this.$set(order, 'detailList', res.data.list);
  431. this.$set(order, 'buttonText', '收起')
  432. this.$set(order, 'isExpand', true)
  433. }
  434. }).catch((error) => {
  435. console.log(error);
  436. })
  437. }
  438. } else if (order.isExpand) {
  439. this.$set(order, 'buttonText', '展开')
  440. this.$set(order, 'isExpand', false)
  441. }
  442. },
  443. allRefund(id) {
  444. this.refundOrderId = id;
  445. this.dialogVisible = true;
  446. },
  447. doRefund() {
  448. const querystring = require("querystring");
  449. this.$confirm('确认退单并退款给用户?', '询问', {
  450. confirmButtonText: '确定',
  451. cancelButtonText: '取消',
  452. type: 'warning'
  453. }).then(() => {
  454. this.$axios.post(this.refundUrl, querystring.stringify({
  455. orderId: this.refundOrderId, reason: this.refundReason
  456. })).then(res => {
  457. this.$message({
  458. type: 'success',
  459. message: '退款成功!'
  460. });
  461. this.dialogVisible = false;
  462. this.getDataList();
  463. }).catch(error => {
  464. });
  465. });
  466. },
  467. toFixed2(money) {
  468. return Math.round(money * 100) / 100
  469. },
  470. getDataList() {
  471. var dateS;
  472. var dateE;
  473. if (this.createDateS != "" && this.createDateS != null) {
  474. dateS = this.$moment(this.createDateS).format("YYYY/MM/DD");
  475. }
  476. if (this.createDateE != "" && this.createDateE != null) {
  477. dateE = this.$moment(this.createDateE).format("YYYY/MM/DD");
  478. }
  479. // 开始时间不能大于结束时间
  480. if(dateS !='' && dateS != null && dateE != '' && dateE != null){
  481. if(dateS > dateE){
  482. this.$message.error("开始时间不能大于结束时间,请更换查询条件重新再试");
  483. return;
  484. }
  485. }
  486. const querystring = require("querystring");
  487. let obj = {
  488. storeId: this.storeId,
  489. beginDate: dateS,
  490. endDate: dateE,
  491. orderName: this.orderName,
  492. orderTel: this.orderTel,
  493. pageSize: this.pageSize,
  494. currentPage: this.currentPage
  495. }
  496. if (this.tabIndex != "all") {
  497. obj.status = this.tabIndex
  498. }
  499. this.$axios.post(this.url, querystring.stringify(obj)).then(res => {
  500. if (res.data.list.length == 0) {
  501. this.$message("数据不存在,请更换查询条件重新再试");
  502. }
  503. this.tableData = res.data.list;
  504. this.receivedNum = res.data.obj.receivedNum;
  505. this.refundNum = res.data.obj.refundNum;
  506. this.total = res.data.page.resultCount;
  507. this.currentPage = res.data.page.currentPage;
  508. }).catch(error => {
  509. });
  510. },
  511. getStoreList() {
  512. this.$axios.post(this.storeUrl, {}).then(res => {
  513. this.storeList = res.data.list;
  514. }).catch(error => {
  515. });
  516. },
  517. typeFormatter(type) {
  518. let str = (type == 1 || type == 2) ? '配送订单' : '自提订单'
  519. return str;
  520. },
  521. statusFormatter(status) {
  522. if (status == 0 || status == -1 || status == 5 || status == 10 || status == -10 || status == -30 || status == -40) {
  523. return "未生效订单"
  524. } else if (status == 20 || status == 30 || status == 40 || status == 50 || status == 60) {
  525. return "已生效订单"
  526. } else if (status == -20 || status == -50) {
  527. return "退款订单"
  528. }
  529. },
  530. deliveryTypeFormatter(type) {
  531. if (type == 1) {
  532. return '楼下自提'
  533. } else if (type == 2) {
  534. return '直达宿舍'
  535. } else if (type == 3) {
  536. return '自提外带'
  537. } else if (type == 4) {
  538. return '自提堂食'
  539. }
  540. },
  541. dateChange() {
  542. if (null != this.dateArray && this.dateArray.length > 0) {
  543. this.createDateS = this.dateArray[0];
  544. this.createDateE = this.dateArray[1];
  545. } else {
  546. this.createDateS = null;
  547. this.createDateE = null;
  548. }
  549. },
  550. printOrder(orderId) {
  551. const querystring = require("querystring");
  552. this.$axios.post(this.printUrl, querystring.stringify({
  553. orderId: orderId
  554. })).then(res => {
  555. this.$message({
  556. type: 'success',
  557. message: '已成功发起打印!'
  558. });
  559. this.getDataList();
  560. }).catch(error => {
  561. });
  562. },
  563. refuseOrder(orderId) {
  564. const querystring = require("querystring");
  565. this.$confirm('确认拒绝接单并退款给用户?', '询问', {
  566. confirmButtonText: '确定',
  567. cancelButtonText: '取消',
  568. type: 'warning'
  569. }).then(() => {
  570. this.$axios.post(this.refuseUrl, querystring.stringify({
  571. orderId: orderId
  572. })).then(res => {
  573. this.$message({
  574. type: 'success',
  575. message: '拒绝成功!'
  576. });
  577. this.getDataList();
  578. }).catch(error => {
  579. });
  580. });
  581. },
  582. completeOrder(orderId) {
  583. const querystring = require("querystring");
  584. this.$confirm('确认客户已取货?', '询问', {
  585. confirmButtonText: '确定',
  586. cancelButtonText: '取消',
  587. type: 'warning'
  588. }).then(() => {
  589. this.$axios.post(this.completeUrl, querystring.stringify({
  590. orderId: orderId
  591. })).then(res => {
  592. this.$message({
  593. type: 'success',
  594. message: '操作成功!'
  595. });
  596. this.getDataList();
  597. }).catch(error => {
  598. });
  599. });
  600. },
  601. handleSizeChange(size) { // 切换每页显示的数量
  602. this.pageSize = size;
  603. this.getDataList();
  604. },
  605. handleCurrentChange(current) { // 切换页码
  606. this.currentPage = current;
  607. this.getDataList();
  608. },
  609. calcPoints(rate, orderFee) {
  610. return (Number(orderFee) * Number(rate));
  611. },
  612. orderPayedInfo(orderCode) {
  613. const querystring = require("querystring");
  614. this.$axios.post(this.payedInfoUrl, querystring.stringify({
  615. orderCode: orderCode
  616. })).then(res => {
  617. this.cOrderCode = orderCode;
  618. this.payedDialogVisible = true;
  619. if (res.data.rtnBean.rtnCode == 0) {
  620. this.payedInfo = res.data.obj
  621. }
  622. }).catch(error => {
  623. });
  624. },
  625. closePayedDialog() {
  626. this.payedDialogVisible = false;
  627. this.refundFlg = true;
  628. this.refundShow = false;
  629. },
  630. orderRefundInfo(orderCode) {
  631. this.refundFlg = false;
  632. this.refundShow = true;
  633. const querystring = require("querystring");
  634. this.$axios.post(this.refundInfoUrl, querystring.stringify({
  635. orderCode: orderCode
  636. })).then(res => {
  637. if (res.data.rtnBean.rtnCode == 0) {
  638. this.refundInfo = res.data.obj;
  639. this.refundList = res.data.obj.refundList;
  640. }
  641. }).catch(error => {
  642. });
  643. }
  644. }
  645. };
  646. </script>
  647. <style scoped>
  648. .order-table {
  649. min-height: 400px;
  650. border: 1px solid #e6e6e6;
  651. border-radius: 2px;
  652. box-sizing: border-box;
  653. font-size: 13px;
  654. }
  655. .order-info {
  656. margin-top: 15px;
  657. }
  658. .trhead {
  659. background: #f2f2f2;
  660. width: 100%;
  661. height: 36px;
  662. }
  663. .tr-border {
  664. border-bottom: 1px solid #E6E6E6;
  665. }
  666. .first-td {
  667. width: 50px;
  668. padding: 10px 17px;
  669. }
  670. table {
  671. font-size: 13px;
  672. }
  673. </style>