PaymentInfo.vue 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359
  1. <template>
  2. <div class="payment-info">
  3. <InfoCard title="回款概览">
  4. <div class="payment-info-content">
  5. <div class="payment-info-item">
  6. 回款状态:{{ returnStatus }}
  7. </div>
  8. <div class="payment-info-item">
  9. 已回款金额:¥{{ returnAmount(returnRes?.returnMoney) }}
  10. </div>
  11. <div class="payment-info-item">
  12. 未回款金额:¥{{ returnAmount(returnRes?.remainingMoney) }}
  13. </div>
  14. </div>
  15. </InfoCard>
  16. <InfoCard title="回款交易详情" :length="paymentDetailList.length || 0" :is-show-length="true">
  17. <div class="payment-info-content">
  18. <TableCard
  19. class="payment-info-content-table"
  20. :table-data="paymentDetailList"
  21. :columns="paymentDetailColumns"
  22. width="1108px"
  23. >
  24. <template v-slot:return_voucher_url="{ row }">
  25. <span v-if="row.row.return_voucher_url" @click="vouched(row.row.return_voucher_url)" class="column-cell">点击查看</span>
  26. <span v-else>-</span>
  27. </template>
  28. </TableCard>
  29. </div>
  30. </InfoCard>
  31. <InfoCard v-if="orderTransfer.length" title="用户自助下单对公转账">
  32. <div class="payment-info-content">
  33. <TableCard
  34. class="payment-info-content-table"
  35. :table-data="orderTransfer"
  36. :columns="transerColumns"
  37. width="1108px"
  38. >
  39. <template v-slot:voucher="{ row }">
  40. <span @click="vouched(row.row.voucher)" class="column-cell">点击查看</span>
  41. </template>
  42. <template v-slot:action="{ row }">
  43. <span @click="payShenHe" class="column-cell">{{ row.row.action }}</span>
  44. </template>
  45. </TableCard>
  46. </div>
  47. </InfoCard>
  48. <newDetailModel
  49. ref="paymentDetailModel"
  50. :order-detail="orderData"
  51. ></newDetailModel>
  52. </div>
  53. </template>
  54. <script>
  55. import InfoCard from '../../ui/InfoCard.vue';
  56. import TableCard from '../../ui/TableCard.vue';
  57. import newDetailModel from '../newDetailModel.vue';
  58. import { mapState } from 'vuex';
  59. export default {
  60. name: 'PaymentInfo',
  61. components: {
  62. InfoCard,
  63. TableCard,
  64. newDetailModel
  65. },
  66. data() {
  67. const defaultRender = (val) => val || '-';
  68. return {
  69. paymentDetailColumns: [
  70. {
  71. label: '回款时间',
  72. prop: 'return_time',
  73. width: '112',
  74. render: (row) => this.formatDate(row.return_time)
  75. },
  76. {
  77. label: '回款金额',
  78. prop: 'return_money',
  79. width: '90',
  80. render: (row) => {
  81. return row.return_money ? '¥' + this.returnAmount(row.return_money) : this.returnAmount(0)
  82. }
  83. },
  84. {
  85. label: '支付方式',
  86. prop: 'return_type',
  87. width: '90',
  88. render (row) {
  89. const payCashStatus = [
  90. { v: '1', n: '微信支付' },
  91. { v: '2', n: '支付宝支付' },
  92. { v: '3', n: '对公转账' }
  93. ]
  94. return payCashStatus.find(v => v.v == row.return_type).n || '-'
  95. }
  96. },
  97. {
  98. label: '手续费',
  99. prop: 'procedures_money',
  100. width: '90',
  101. render: (row) => {
  102. return row.procedures_money ? '¥' + this.returnAmount(row.procedures_money) : this.returnAmount(0)
  103. }
  104. },
  105. {
  106. label: '回款银行',
  107. prop: 'bank_name',
  108. width: '120',
  109. render (row) {
  110. return defaultRender(row.bank_name)
  111. }
  112. },
  113. {
  114. label: '支付单号/银行流水号',
  115. prop: 'return_code',
  116. width: '112',
  117. render (row) {
  118. return row.bank_flow || row.return_code
  119. }
  120. },
  121. {
  122. label: '支付户名',
  123. prop: 'pay_account_name',
  124. width: '90',
  125. render (row) {
  126. return defaultRender(row.pay_account_name)
  127. }
  128. },
  129. {
  130. label: '流水金额',
  131. prop: 'flow_money',
  132. width: '90',
  133. render: (row) => {
  134. return row.flow_money ? '¥' + this.returnAmount(row.flow_money) : this.returnAmount(0)
  135. }
  136. },
  137. {
  138. label: '支付凭证',
  139. prop: 'return_voucher_url',
  140. width: '90'
  141. },
  142. {
  143. label: '操作时间',
  144. prop: 'operate_time',
  145. width: '112',
  146. render: (row) => {
  147. return defaultRender(row.operate_time)
  148. }
  149. },
  150. {
  151. label: '操作人',
  152. prop: 'operate_person',
  153. width: '90',
  154. render: (row) => {
  155. return defaultRender(row.operate_person)
  156. }
  157. },
  158. {
  159. label: '回款说明',
  160. prop: 'return_remark',
  161. width: '202',
  162. render (row) {
  163. return defaultRender(row.return_remark)
  164. }
  165. }
  166. ],
  167. paymentDetailList_: [
  168. {
  169. return_time: '2023-12-31 13:21:32',
  170. paymoney: '点击查看',
  171. return_type: '微信支付',
  172. // commission: '¥100.00',
  173. bank_name: '广发银行北京顺义支行',
  174. bank_flow: '094640260820',
  175. pay_account_name: '张三',
  176. flow_money: '¥2,000.00',
  177. operate_time: '2023-12-31 13:21:32',
  178. operate_person: '张三',
  179. return_remark: '备注'
  180. }
  181. ],
  182. transerColumns: [
  183. {
  184. label: '提交时间',
  185. prop: 'create_time',
  186. render (row) {
  187. return defaultRender(row.create_time)
  188. }
  189. },
  190. {
  191. label: '支付凭证',
  192. prop: 'voucher',
  193. },
  194. {
  195. label: '审核状态',
  196. prop: 'state',
  197. render (row) {
  198. return defaultRender(row.state)
  199. }
  200. },
  201. {
  202. label: '审核时间',
  203. prop: 'update_time',
  204. render (row) {
  205. return defaultRender(row.update_time)
  206. }
  207. },
  208. {
  209. label: '操作人',
  210. prop: 'audit_person',
  211. render (row) {
  212. return defaultRender(row.audit_person)
  213. }
  214. },
  215. {
  216. label: '操作',
  217. prop: 'action'
  218. }
  219. ],
  220. orderTransfer_: [
  221. {
  222. create_time: '2023-12-31 13:21:32',
  223. voucher: '点击查看',
  224. state: '审核通过',
  225. update_time: '2023-12-31 13:21:32',
  226. audit_person: '张三',
  227. action: '审核',
  228. }
  229. ],
  230. }
  231. },
  232. computed: {
  233. ...mapState({
  234. orderDetail: state => state.order.orderDetail
  235. }),
  236. returnStatus() {
  237. const val = this.orderDetail?.orderData?.return_status || 0;
  238. if (val == 0) {
  239. return '未回款'
  240. } else if (val == 1) {
  241. return '全额回款'
  242. } else if (val == 2) {
  243. return '部分回款'
  244. } else {
  245. return '未回款'
  246. }
  247. },
  248. returnRes () {
  249. return this.orderDetail?.returnRes || {};
  250. },
  251. orderData() {
  252. return this.orderDetail?.orderData || {};
  253. },
  254. paymentDetailList () {
  255. return this.returnRes?.returnInfo || [];
  256. },
  257. orderTransfer () {
  258. return this.returnRes?.orderTransfer || [];
  259. }
  260. },
  261. methods: {
  262. returnAmount(val) {
  263. if (!val) return 0;
  264. val = Number(val)
  265. const amount = (val / 100).toFixed(2) || 0;
  266. return amount;
  267. },
  268. formatDate(timeString) {
  269. if (!timeString) return '-';
  270. // 只取空格前的日期部分
  271. return timeString.split(' ')[0];
  272. },
  273. setReturnType(val) {
  274. if (val === 1) {
  275. return '微信支付'
  276. } else if(val === 2) {
  277. return '支付宝支付'
  278. } else if(val === 3) {
  279. return '对公转账'
  280. } else {
  281. return '未回款'
  282. }
  283. },
  284. payShenHe() {
  285. this.$refs.paymentDetailModel.sShow = true;
  286. },
  287. vouched(val) {
  288. if (val) {
  289. const urls = this.$router.resolve(val)
  290. window.open(urls.href, '_blank')
  291. }
  292. },
  293. }
  294. }
  295. </script>
  296. <style lang="scss" scoped>
  297. .payment-info {
  298. background: #F2F2F4;
  299. ::v-deep {
  300. .info-card {
  301. margin-bottom: 16px;
  302. }
  303. }
  304. .payment-info-content {
  305. width: 1108px;
  306. display: flex;
  307. align-items: center;
  308. flex-wrap: wrap;
  309. }
  310. .payment-info-item{
  311. margin-right: 32px;
  312. min-width: 255px;
  313. font-size: 14px;
  314. line-height: 22px;
  315. color: $gray_10;
  316. }
  317. .payment-info-content-table {
  318. border-radius: 4px;
  319. ::v-deep {
  320. .el-table__body-wrapper {
  321. &::-webkit-scrollbar {
  322. display: block; /* 强制显示滚动条 */
  323. height: 8px;
  324. }
  325. &::-webkit-scrollbar-thumb {
  326. background-color: rgba(0, 0, 0, 0.2);
  327. border-radius: 4px;
  328. }
  329. }
  330. .cell {
  331. text-align: center;
  332. font-size: 14px;
  333. color: $gray_10;
  334. font-weight: 400;
  335. }
  336. .has-gutter {
  337. th {
  338. background: #F9FAFB;
  339. .cell {
  340. padding: 0;
  341. color: #686868;
  342. }
  343. }
  344. }
  345. .column-cell {
  346. color: $color_main;
  347. cursor: pointer;
  348. }
  349. }
  350. }
  351. .num-active {
  352. color: $color_main;
  353. }
  354. }
  355. </style>