refundForm.vue 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. <template>
  2. <Dialog :title="dialogTitle" v-model="dialogVisible" width="50%">
  3. <el-descriptions :column="2" label-class-name="desc-label">
  4. <el-descriptions-item label="商户名称">{{ refundDetail.merchantName }}</el-descriptions-item>
  5. <el-descriptions-item label="应用名称">{{ refundDetail.appName }}</el-descriptions-item>
  6. <el-descriptions-item label="商品名称">{{ refundDetail.subject }}</el-descriptions-item>
  7. </el-descriptions>
  8. <el-divider />
  9. <el-descriptions :column="2" label-class-name="desc-label">
  10. <el-descriptions-item label="商户退款单号">
  11. <el-tag size="small">{{ refundDetail.merchantRefundNo }}</el-tag>
  12. </el-descriptions-item>
  13. <el-descriptions-item label="商户订单号"
  14. >{{ refundDetail.merchantOrderId }}
  15. </el-descriptions-item>
  16. <el-descriptions-item label="交易订单号">{{ refundDetail.tradeNo }}</el-descriptions-item>
  17. </el-descriptions>
  18. <el-divider />
  19. <el-descriptions :column="2" label-class-name="desc-label">
  20. <el-descriptions-item label="支付金额">
  21. {{ parseFloat(refundDetail.payAmount / 100).toFixed(2) }}
  22. </el-descriptions-item>
  23. <el-descriptions-item label="退款金额" size="small">
  24. <el-tag class="tag-purple" size="small">
  25. {{ parseFloat(refundDetail.refundAmount / 100).toFixed(2) }}
  26. </el-tag>
  27. </el-descriptions-item>
  28. <el-descriptions-item label="退款类型">
  29. <dict-tag :type="DICT_TYPE.PAY_REFUND_ORDER_TYPE" :value="refundDetail.type" />
  30. </el-descriptions-item>
  31. <el-descriptions-item label="退款状态">
  32. <dict-tag :type="DICT_TYPE.PAY_REFUND_ORDER_STATUS" :value="refundDetail.status" />
  33. </el-descriptions-item>
  34. <el-descriptions-item label="创建时间"
  35. >{{ formatDate(refundDetail.createTime) }}
  36. </el-descriptions-item>
  37. <el-descriptions-item label="退款成功时间"
  38. >{{ formatDate(refundDetail.successTime) }}
  39. </el-descriptions-item>
  40. <el-descriptions-item label="退款失效时间"
  41. >{{ formatDate(refundDetail.expireTime) }}
  42. </el-descriptions-item>
  43. <el-descriptions-item label="更新时间"
  44. >{{ formatDate(refundDetail.updateTime) }}
  45. </el-descriptions-item>
  46. </el-descriptions>
  47. <el-divider />
  48. <el-descriptions :column="2" label-class-name="desc-label">
  49. <el-descriptions-item label="支付渠道">
  50. {{ refundDetail.channelCodeName }}
  51. </el-descriptions-item>
  52. <el-descriptions-item label="支付IP" size="small">
  53. {{ refundDetail.userIp }}
  54. </el-descriptions-item>
  55. <el-descriptions-item label="回调地址">{{ refundDetail.notifyUrl }}</el-descriptions-item>
  56. <el-descriptions-item label="回调状态">
  57. <dict-tag :type="DICT_TYPE.PAY_ORDER_NOTIFY_STATUS" :value="refundDetail.notifyStatus" />
  58. </el-descriptions-item>
  59. <el-descriptions-item label="回调时间"
  60. >{{ formatDate(refundDetail.notifyTime) }}
  61. </el-descriptions-item>
  62. </el-descriptions>
  63. <el-divider />
  64. <el-descriptions :column="2" label-class-name="desc-label">
  65. <el-descriptions-item label="渠道订单号"
  66. >{{ refundDetail.channelOrderNo }}
  67. </el-descriptions-item>
  68. <el-descriptions-item label="渠道退款单号"
  69. >{{ refundDetail.channelRefundNo }}
  70. </el-descriptions-item>
  71. <el-descriptions-item label="渠道错误码"
  72. >{{ refundDetail.channelErrorCode }}
  73. </el-descriptions-item>
  74. <el-descriptions-item label="渠道错误码描述"
  75. >{{ refundDetail.channelErrorMsg }}
  76. </el-descriptions-item>
  77. </el-descriptions>
  78. <br />
  79. <el-descriptions :column="1" label-class-name="desc-label" direction="vertical" border>
  80. <el-descriptions-item label="渠道额外参数"
  81. >{{ refundDetail.channelExtras }}
  82. </el-descriptions-item>
  83. <el-descriptions-item label="退款原因">{{ refundDetail.reason }}</el-descriptions-item>
  84. </el-descriptions>
  85. </Dialog>
  86. </template>
  87. <script setup lang="ts" name="refundForm">
  88. import { DICT_TYPE } from '@/utils/dict'
  89. import * as RefundApi from '@/api/pay/refund'
  90. import { formatDate } from '@/utils/formatTime'
  91. const { t } = useI18n() // 国际化
  92. // const message = useMessage() // 消息弹窗
  93. const dialogVisible = ref(false) // 弹窗的是否展示
  94. const dialogTitle = ref('退款订单详情') // 弹窗的标题
  95. const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
  96. const defaultrefundDetail = {
  97. id: null,
  98. appId: null,
  99. appName: '',
  100. channelCode: '',
  101. channelCodeName: '',
  102. channelErrorCode: '',
  103. channelErrorMsg: '',
  104. channelExtras: '',
  105. channelId: null,
  106. channelOrderNo: '',
  107. channelRefundNo: '',
  108. createTime: null,
  109. expireTime: null,
  110. merchantId: null,
  111. merchantName: '',
  112. merchantOrderId: '',
  113. merchantRefundNo: '',
  114. notifyStatus: null,
  115. notifyTime: null,
  116. notifyUrl: '',
  117. orderId: null,
  118. payAmount: null,
  119. reason: '',
  120. refundAmount: null,
  121. status: null,
  122. subject: '',
  123. successTime: null,
  124. tradeNo: '',
  125. type: null,
  126. userIp: ''
  127. }
  128. const refundDetail = ref(JSON.parse(JSON.stringify(defaultrefundDetail)))
  129. /** 打开弹窗 */
  130. const open = async (id?: number) => {
  131. dialogVisible.value = true
  132. dialogTitle.value = t('action.preview')
  133. // 修改时,设置数据
  134. if (id) {
  135. formLoading.value = true
  136. try {
  137. refundDetail.value = await RefundApi.getRefundApi(id)
  138. } finally {
  139. formLoading.value = false
  140. }
  141. }
  142. }
  143. defineExpose({ open }) // 提供 open 方法,用于打开弹窗
  144. </script>
  145. <style>
  146. .tag-purple {
  147. color: #722ed1;
  148. background: #f9f0ff;
  149. border-color: #d3adf7;
  150. }
  151. </style>