list.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375
  1. <div id="app" v-cloak>
  2. <el-card shadow="never" style="border:0;" body-style="background-color: #f3f3f3;padding: 10px 0 0;">
  3. <div slot="header">
  4. <div>
  5. <span>退款管理</span>
  6. </div>
  7. </div>
  8. <div class="table-body">
  9. <el-form :inline="true" :model="searchData" class="demo-form-inline">
  10. <el-form-item label="退款订单">
  11. <el-input v-model="searchData.no" placeholder="退款订单"></el-input>
  12. </el-form-item>
  13. <el-form-item label="状态">
  14. <el-select v-model="searchData.status" placeholder="状态">
  15. <el-option :label="value" :value="index" v-for="(value, index) in status"></el-option>
  16. </el-select>
  17. </el-form-item>
  18. <el-form-item>
  19. <el-button type="primary" @click="onSubmit">查询</el-button>
  20. <el-button @click="resetForm">重置</el-button>
  21. </el-form-item>
  22. </el-form>
  23. <!-- 订单信息 -->
  24. <template>
  25. <el-table ref="multipleTable" :data="order_list" @selection-change="handleSelectionChange">
  26. <!-- 空数据 -->
  27. <template slot="empty">
  28. <el-empty description="暂无订单"></el-empty>
  29. </template>
  30. <el-table-column type="selection">
  31. </el-table-column>
  32. <el-table-column prop="sys_order_no" align="center" label="系统支付订单号">
  33. </el-table-column>
  34. <el-table-column prop="trx_no" align="center" label="汇聚分账支付订单号">
  35. </el-table-column>
  36. <el-table-column prop="mallOrderRefund.order_no" align="center" label="退款订单">
  37. </el-table-column>
  38. <el-table-column prop="mallOrderRefund.reality_refund_price" align="center" label="退款金额">
  39. </el-table-column>
  40. <el-table-column prop="status_text" align="center" label="状态">
  41. </el-table-column>
  42. <el-table-column prop="created_at" label="创建时间" align="center">
  43. <template slot-scope="scope">
  44. {{ scope.row.created_at|dateTimeFormat('Y-m-d H:i:s') }}
  45. </template>
  46. </el-table-column>
  47. <el-table-column prop="right_btn" align="center" label="操作">
  48. <template slot-scope="scope">
  49. <el-button
  50. v-loading="btnLoading"
  51. @click="refundOrder(scope.row.id)"
  52. type="text"
  53. size="small"
  54. v-if="scope.row.status != 100"
  55. >补单</el-button>
  56. <el-button
  57. v-loading="btnLoading"
  58. @click="refundOrder(scope.row.id)"
  59. type="text"
  60. size="small"
  61. disabled
  62. v-else
  63. >补单</el-button>
  64. </template>
  65. </el-table-column>
  66. </el-table>
  67. </template>
  68. <!-- 分页 -->
  69. <el-row type="flex" class="page" justify="end">
  70. <el-pagination @current-change="pagination" background layout="prev, pager, next" :page-count="pageCount" v-if="order_list"></el-pagination>
  71. </el-row>
  72. </div>
  73. </el-card>
  74. </div>
  75. <script>
  76. const app = new Vue({
  77. el: '#app',
  78. data() {
  79. return {
  80. searchData: {
  81. no: '',
  82. status: '',
  83. type: '',
  84. },
  85. order_list: [],
  86. status: {},
  87. tradeType: {},
  88. pageCount: 0,
  89. page: 1,
  90. currentPage: null,
  91. listLoading: false,
  92. btnLoading: false,
  93. checked: false,
  94. type: '',
  95. sort: '',
  96. };
  97. },
  98. methods: {
  99. handleSelectionChange(val) {
  100. this.select_order = val
  101. },
  102. // 全选
  103. allSelect() {
  104. if (this.checked) {
  105. this.goods_list.forEach(function(item, index) {
  106. if (!item.storage) {
  107. item.is_select = true
  108. }
  109. })
  110. } else {
  111. this.goods_list.forEach(function(item, index) {
  112. item.is_select = false
  113. })
  114. }
  115. },
  116. //搜索
  117. onSubmit() {
  118. this.page = 1
  119. this.getOrderList()
  120. },
  121. pagination(currentPage) {
  122. this.page = currentPage
  123. this.getOrderList()
  124. },
  125. getOrderList() {
  126. this.listLoading = true;
  127. var param = {
  128. r: 'huiju-bill/refund/list',
  129. page: this.page,
  130. limit: 20
  131. }
  132. Object.assign(param, param, this.searchData)
  133. request({
  134. params: param,
  135. }).then(e => {
  136. if (e.data.code === 0) {
  137. this.status = e.data.data.status
  138. this.tradeType = e.data.data.trade_type
  139. this.order_list = e.data.data.list
  140. this.pageCount = e.data.data.page_count
  141. this.currentPage = e.data.data.pagination.current_page
  142. } else {
  143. this.$message.error(e.data.msg)
  144. }
  145. this.listLoading = false
  146. }).catch(e => {
  147. this.listLoading = false
  148. })
  149. },
  150. //重置
  151. resetForm() {
  152. this.searchData = {
  153. no: '',
  154. status: '',
  155. type: '',
  156. }
  157. },
  158. // 补单
  159. refundOrder (id) {
  160. this.refundOrderPost([id])
  161. },
  162. // 推送补单
  163. refundOrderPost (ids) {
  164. this.btnLoading = true
  165. var param = {
  166. r: 'huiju-bill/refund/reissue',
  167. }
  168. request({
  169. params: param,
  170. method: 'post',
  171. data: {
  172. ids: ids,
  173. },
  174. }).then(e => {
  175. if (e.data.code === 0) {
  176. } else {
  177. this.$message.error(e.data.msg)
  178. }
  179. this.btnLoading = false
  180. }).catch(e => {
  181. this.btnLoading = false
  182. })
  183. },
  184. },
  185. mounted: function() {
  186. this.page = getQuery('page') ? getQuery('page') : 1
  187. this.getOrderList()
  188. }
  189. });
  190. </script>
  191. <style>
  192. .table-body {
  193. padding: 20px;
  194. background-color: #fff;
  195. }
  196. .input-item {
  197. display: inline-block;
  198. width: 150px;
  199. margin: 0 0 20px;
  200. margin-right: 10px;
  201. }
  202. .input-item .el-input__inner {
  203. border-right: 1px solid #dcdfe6;
  204. }
  205. .input-item .el-input__inner:hover {
  206. border: 1px solid #dcdfe6;
  207. border-right: 0;
  208. outline: 0;
  209. }
  210. .input-item .el-input__inner:focus {
  211. border: 1px solid #dcdfe6;
  212. border-right: 0;
  213. outline: 0;
  214. }
  215. .input-item .el-input-group__append {
  216. background-color: #fff;
  217. border-left: 0;
  218. width: 10%;
  219. padding: 0;
  220. }
  221. .input-item .el-input-group__append .el-button {
  222. padding: 0;
  223. }
  224. .input-item .el-input-group__append .el-button {
  225. margin: 0;
  226. }
  227. .select {
  228. float: left;
  229. width: 100px;
  230. margin-right: 10px;
  231. }
  232. .el-table th>.cell {
  233. color: #333;
  234. font-weight: bold;
  235. font-size: 14px;
  236. }
  237. .el-table__footer-wrapper,
  238. .el-table__header-wrapper {
  239. border-bottom: 1.4px solid #D6D6D6;
  240. }
  241. .search-sort {
  242. display: inline-block;
  243. margin: 0px 10px;
  244. cursor: pointer;
  245. color: rgb(51, 51, 51);
  246. }
  247. .caret-wrapper {
  248. display: inline-flex;
  249. flex-direction: column;
  250. align-items: center;
  251. height: 25px;
  252. width: 11px;
  253. vertical-align: middle;
  254. cursor: pointer;
  255. overflow: initial;
  256. position: relative;
  257. }
  258. .caret-top {
  259. border: 5px solid transparent;
  260. margin: 1px 0;
  261. border-bottom-color: rgb(51, 51, 51);
  262. }
  263. .caret-bottom {
  264. border: 5px solid transparent;
  265. margin: 1px 0;
  266. border-top-color: rgb(51, 51, 51);
  267. }
  268. .active {
  269. border-top-color: rgb(41, 186, 156);
  270. }
  271. .ellipsis {
  272. font-size: .14rem;
  273. color: #333;
  274. overflow: hidden;
  275. text-overflow: ellipsis;
  276. }
  277. .goods-wrapper {
  278. border: 2px solid #CCCCCC;
  279. display: inline-block
  280. }
  281. .goods-select {
  282. border: 2px solid #bb730c;
  283. }
  284. .goods-price {
  285. text-align: center;
  286. }
  287. .goods-price .number {
  288. color: red;
  289. font-weight: 600;
  290. font-size: .18rem;
  291. }
  292. .goods-price .title {
  293. padding: 5px 0;
  294. color: #999;
  295. ;
  296. font-size: .1rem;
  297. font-weight: 600;
  298. }
  299. .bottom-price .title {
  300. padding: 5px 0;
  301. color: #8b8888;
  302. ;
  303. font-size: .1rem;
  304. }
  305. .bottom-price .number {
  306. color: #ff5100;
  307. font-size: .1rem;
  308. }
  309. .goods-action {
  310. margin-top: 0.8rem;
  311. }
  312. .goods-action .title {
  313. color: #0634aa;
  314. }
  315. .bottom-active {
  316. border-bottom-color: rgb(186, 41, 92);
  317. }
  318. .top-active {
  319. border-top-color: rgb(186, 41, 92);
  320. }
  321. .price {
  322. white-space: nowrap;
  323. }
  324. .goods-image {
  325. display: flex;
  326. justify-content: center;
  327. }
  328. .page {
  329. padding: 10px 0;
  330. }
  331. </style>