OrderDetail.vue 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <template>
  2. <Dialog title="详情" v-model="dialogVisible" width="50%">
  3. <el-descriptions :column="2">
  4. <el-descriptions-item label="商户名称">{{ detailData.merchantName }}</el-descriptions-item>
  5. <el-descriptions-item label="应用名称">{{ detailData.appName }}</el-descriptions-item>
  6. <el-descriptions-item label="商品名称">{{ detailData.subject }}</el-descriptions-item>
  7. </el-descriptions>
  8. <el-divider />
  9. <el-descriptions :column="2">
  10. <el-descriptions-item label="商户订单号">
  11. <el-tag>{{ detailData.merchantOrderId }}</el-tag>
  12. </el-descriptions-item>
  13. <el-descriptions-item label="渠道订单号">
  14. <el-tag class="tag-purple">{{ detailData.channelOrderNo }}</el-tag>
  15. </el-descriptions-item>
  16. <el-descriptions-item label="支付订单号">
  17. <el-tag v-if="detailData.payOrderExtension" class="tag-pink">
  18. {{ detailData.payOrderExtension.no }}
  19. </el-tag>
  20. </el-descriptions-item>
  21. <el-descriptions-item label="金额">
  22. <el-tag type="success">¥{{ parseFloat(detailData.amount / 100, 2).toFixed(2) }}</el-tag>
  23. </el-descriptions-item>
  24. <el-descriptions-item label="手续费">
  25. <el-tag type="warning">
  26. ¥{{ parseFloat(detailData.channelFeeAmount / 100, 2).toFixed(2) }}
  27. </el-tag>
  28. </el-descriptions-item>
  29. <el-descriptions-item label="手续费比例">
  30. {{ parseFloat(detailData.channelFeeRate / 100, 2) }}%
  31. </el-descriptions-item>
  32. <el-descriptions-item label="支付状态">
  33. <dict-tag :type="DICT_TYPE.PAY_ORDER_STATUS" :value="detailData.status" />
  34. </el-descriptions-item>
  35. <el-descriptions-item label="回调状态">
  36. <dict-tag :type="DICT_TYPE.PAY_ORDER_NOTIFY_STATUS" :value="detailData.notifyStatus" />
  37. </el-descriptions-item>
  38. <el-descriptions-item label="回调地址">{{ detailData.notifyUrl }}</el-descriptions-item>
  39. <el-descriptions-item label="创建时间">
  40. {{ formatDate(detailData.createTime) }}
  41. </el-descriptions-item>
  42. <el-descriptions-item label="支付时间">
  43. {{ formatDate(detailData.successTime) }}
  44. </el-descriptions-item>
  45. <el-descriptions-item label="失效时间">
  46. {{ formatDate(detailData.expireTime) }}
  47. </el-descriptions-item>
  48. <el-descriptions-item label="通知时间">
  49. {{ formatDate(detailData.notifyTime) }}
  50. </el-descriptions-item>
  51. </el-descriptions>
  52. <el-divider />
  53. <el-descriptions :column="2">
  54. <el-descriptions-item label="支付渠道"
  55. >{{ detailData.channelCodeName }}
  56. </el-descriptions-item>
  57. <el-descriptions-item label="支付IP">{{ detailData.userIp }}</el-descriptions-item>
  58. <el-descriptions-item label="退款状态">
  59. <dict-tag :type="DICT_TYPE.PAY_ORDER_REFUND_STATUS" :value="detailData.refundStatus" />
  60. </el-descriptions-item>
  61. <el-descriptions-item label="退款次数">{{ detailData.refundTimes }}</el-descriptions-item>
  62. <el-descriptions-item label="退款金额">
  63. <el-tag type="warning">
  64. {{ parseFloat(detailData.refundAmount / 100, 2) }}
  65. </el-tag>
  66. </el-descriptions-item>
  67. </el-descriptions>
  68. <el-divider />
  69. <el-descriptions :column="1" direction="vertical" border>
  70. <el-descriptions-item label="商品描述">
  71. {{ detailData.body }}
  72. </el-descriptions-item>
  73. <el-descriptions-item label="支付通道异步回调内容">
  74. <div style="width: 700px; overflow: auto">
  75. {{ detailData.payOrderExtension?.channelNotifyData }}
  76. </div>
  77. </el-descriptions-item>
  78. </el-descriptions>
  79. </Dialog>
  80. </template>
  81. <script setup lang="ts" name="orderForm">
  82. import { DICT_TYPE } from '@/utils/dict'
  83. import * as OrderApi from '@/api/pay/order'
  84. import { formatDate } from '@/utils/formatTime'
  85. const dialogVisible = ref(false) // 弹窗的是否展示
  86. const detailLoading = ref(false) // 表单的加载中
  87. const detailData = ref({})
  88. /** 打开弹窗 */
  89. const open = async (id: number) => {
  90. dialogVisible.value = true
  91. // 设置数据
  92. detailLoading.value = true
  93. try {
  94. detailData.value = await OrderApi.getOrderDetail(id)
  95. } finally {
  96. detailLoading.value = false
  97. }
  98. }
  99. defineExpose({ open }) // 提供 open 方法,用于打开弹窗
  100. </script>
  101. <style>
  102. .tag-purple {
  103. color: #722ed1;
  104. background: #f9f0ff;
  105. border-color: #d3adf7;
  106. }
  107. .tag-pink {
  108. color: #eb2f96;
  109. background: #fff0f6;
  110. border-color: #ffadd2;
  111. }
  112. </style>