TransferDetail.vue 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. <template>
  2. <el-drawer
  3. :model-value="modelValue"
  4. title="转账记录详情"
  5. direction="rtl"
  6. size="500px"
  7. @close="handleClose"
  8. >
  9. <div v-loading="loading" class="transfer-detail">
  10. <el-descriptions :column="1" border>
  11. <el-descriptions-item label="订单号">
  12. {{ detailData.out_biz_no || "-" }}
  13. </el-descriptions-item>
  14. <el-descriptions-item label="支付宝转账单号">
  15. {{ detailData.order_no || "-" }}
  16. </el-descriptions-item>
  17. <el-descriptions-item label="三方订单号">
  18. {{ detailData.third_biz_no || "-" }}
  19. </el-descriptions-item>
  20. <el-descriptions-item label="企业ID">
  21. {{ detailData.enterprise_id || "-" }}
  22. </el-descriptions-item>
  23. <el-descriptions-item label="资金账户">
  24. {{ detailData.account_book_id || "-" }}
  25. </el-descriptions-item>
  26. <el-descriptions-item label="转账金额">
  27. <span class="amount">¥{{ detailData.amount || "0.00" }}</span>
  28. </el-descriptions-item>
  29. <el-descriptions-item label="转账标题">
  30. {{ detailData.order_title || "-" }}
  31. </el-descriptions-item>
  32. <el-descriptions-item label="状态">
  33. <el-tag :type="getStatusType(detailData.status)">
  34. {{ getStatusLabel(detailData.status) }}
  35. </el-tag>
  36. </el-descriptions-item>
  37. <el-descriptions-item label="备注">
  38. {{ detailData.remark || "" }}
  39. </el-descriptions-item>
  40. <el-descriptions-item label="创建时间">
  41. {{ detailData.created_time || "-" }}
  42. </el-descriptions-item>
  43. <el-descriptions-item label="更新时间">
  44. {{ detailData.updated_time || "-" }}
  45. </el-descriptions-item>
  46. </el-descriptions>
  47. <el-divider content-position="left">收款方信息</el-divider>
  48. <el-descriptions :column="1" border>
  49. <el-descriptions-item label="收款方类型">
  50. {{ getPayeeTypeLabel(detailData.payee_info?.identity_type) }}
  51. </el-descriptions-item>
  52. <el-descriptions-item label="收款方姓名">
  53. {{ detailData.payee_info?.name || "-" }}
  54. </el-descriptions-item>
  55. <el-descriptions-item label="收款方账号">
  56. {{ detailData.payee_info?.identity || "-" }}
  57. </el-descriptions-item>
  58. <template v-if="detailData.payee_info?.bankcard_ext_info">
  59. <el-descriptions-item label="账户类型">
  60. {{ detailData.payee_info.bankcard_ext_info.account_type === "1" ? "对公" : "对私" }}
  61. </el-descriptions-item>
  62. <el-descriptions-item label="银行名称">
  63. {{ detailData.payee_info.bankcard_ext_info.inst_name || "-" }}
  64. </el-descriptions-item>
  65. <el-descriptions-item label="开户省份">
  66. {{ detailData.payee_info.bankcard_ext_info.inst_province || "-" }}
  67. </el-descriptions-item>
  68. <el-descriptions-item label="开户城市">
  69. {{ detailData.payee_info.bankcard_ext_info.inst_city || "-" }}
  70. </el-descriptions-item>
  71. <el-descriptions-item label="支行名称">
  72. {{ detailData.payee_info.bankcard_ext_info.inst_branch_name || "-" }}
  73. </el-descriptions-item>
  74. <el-descriptions-item label="联行号">
  75. {{ detailData.payee_info.bankcard_ext_info.bank_code || "-" }}
  76. </el-descriptions-item>
  77. </template>
  78. </el-descriptions>
  79. </div>
  80. <template #footer>
  81. <div class="drawer-footer">
  82. <el-button @click="handleClose">关闭</el-button>
  83. <el-button type="primary" @click="handleRefresh">刷新</el-button>
  84. </div>
  85. </template>
  86. </el-drawer>
  87. </template>
  88. <script setup lang="ts">
  89. import AccountAPI from "@/api/module_payment/account";
  90. import { ref, watch } from "vue";
  91. const props = defineProps<{
  92. modelValue: boolean;
  93. outBizNo: string;
  94. }>();
  95. const emit = defineEmits<{
  96. (e: "update:modelValue", value: boolean): void;
  97. (e: "refresh"): void;
  98. }>();
  99. const loading = ref(false);
  100. const detailData = ref<any>({});
  101. watch(
  102. () => [props.modelValue, props.outBizNo],
  103. async ([val, outBizNo]) => {
  104. if (val && outBizNo) {
  105. await fetchDetail();
  106. }
  107. },
  108. { immediate: true }
  109. );
  110. async function fetchDetail() {
  111. if (!props.outBizNo) return;
  112. loading.value = true;
  113. try {
  114. const res = await AccountAPI.transferDetail(props.outBizNo);
  115. console.log(res);
  116. detailData.value = res.data.data || {};
  117. } catch (error) {
  118. console.error("获取转账详情失败:", error);
  119. } finally {
  120. loading.value = false;
  121. }
  122. }
  123. function getStatusType(status: string) {
  124. const map: Record<string, any> = {
  125. DEALING: "warning",
  126. SUCCESS: "success",
  127. FAIL: "danger",
  128. REFUND: "warning",
  129. };
  130. return map[status] || "info";
  131. }
  132. function getStatusLabel(status: string) {
  133. const map: Record<string, string> = {
  134. DEALING: "处理中",
  135. SUCCESS: "成功",
  136. FAIL: "失败",
  137. REFUND: "退票",
  138. };
  139. return map[status] || status;
  140. }
  141. function getPayeeTypeLabel(type: string) {
  142. const map: Record<string, string> = {
  143. ALIPAY_ACCOUNT: "支付宝账户",
  144. BANK_CARD: "银行卡",
  145. BOOK: "资金专户",
  146. };
  147. return map[type] || type;
  148. }
  149. function handleClose() {
  150. emit("update:modelValue", false);
  151. }
  152. function handleRefresh() {
  153. fetchDetail();
  154. emit("refresh");
  155. }
  156. </script>
  157. <style lang="scss" scoped>
  158. .transfer-detail {
  159. padding: 16px;
  160. .amount {
  161. font-size: 18px;
  162. font-weight: 600;
  163. color: #67c23a;
  164. }
  165. }
  166. .drawer-footer {
  167. display: flex;
  168. justify-content: flex-end;
  169. gap: 12px;
  170. }
  171. </style>