diff --git a/apps/daxpay-admin/src/api/payment/order/gateway-order.api.ts b/apps/daxpay-admin/src/api/payment/order/gateway-order.api.ts new file mode 100644 index 000000000..b656c1139 --- /dev/null +++ b/apps/daxpay-admin/src/api/payment/order/gateway-order.api.ts @@ -0,0 +1,111 @@ +import type { MchEntity, PageResult, Result } from '#/types/web'; + +import { defHttp } from '#/api/request'; + +/** + * 网关支付业务订单管理 API + */ +export const GatewayOrderApi = { + /** + * 分页查询网关业务订单 + */ + page(params: GatewayOrderQuery & { current?: number; size?: number }): Promise>> { + return defHttp.get({ url: '/admin/order/gateway-pay/page', params }); + }, + + /** + * 根据ID查询详情 + */ + getById(id: string): Promise> { + return defHttp.get({ url: '/admin/order/gateway-pay/get-by-id', params: { id } }); + }, + + /** + * 同步支付状态 + */ + sync(id: string): Promise> { + return defHttp.post({ url: '/admin/order/gateway-pay/sync', params: { id } }); + }, + + /** + * 关闭/撤销订单 + */ + close(id: string, useCancel = false): Promise> { + return defHttp.post({ + url: '/admin/order/gateway-pay/close', + params: { id, useCancel }, + }); + }, +}; + +/** 网关订单查询参数 */ +export interface GatewayOrderQuery { + mchNo?: string; + appId?: string; + /** 平台网关单号 */ + orderNo?: string; + bizOrderNo?: string; + title?: string; + status?: string; + gatewayType?: string; + product?: string; + capability?: string; + storeNo?: string; + createTimeStart?: string; + createTimeEnd?: string; + amountMin?: number; + amountMax?: number; +} + +/** 网关订单结果 */ +export interface GatewayOrderResult extends MchEntity { + orderNo?: string; + bizOrderNo?: string; + gatewayType?: string; + source?: string; + title?: string; + description?: string; + status?: string; + notifyUrl?: string; + returnUrl?: string; + attach?: string; + expiredTime?: string; + amount?: number; + currency?: string; + channel?: string; + method?: string; + product?: string; + limitPay?: string; + clientEnv?: string; + device?: string; + payTime?: string; + closeTime?: string; + channelMchNo?: string; + capability?: string; + channelAppId?: string; + clientIp?: string; + storeNo?: string; + extraParam?: string; + // 资金凭证(详情) + tradeNo?: string; + outOrderNo?: string; + fundStatus?: string; + refundableBalance?: number; + payBody?: string; + payBodyType?: string; + buyerId?: string; + openid?: string; + provider?: string; + tradeProduct?: string; + tradeWay?: string; + bankType?: string; + promotionType?: string; + transOrderNo?: string; + relationOrderNo?: string; + errorMsg?: string; +} + +export interface GatewayPaySyncResult { + orderStatus?: string; + adjust?: boolean; +} diff --git a/apps/daxpay-admin/src/api/payment/order/normal-order.api.ts b/apps/daxpay-admin/src/api/payment/order/normal-order.api.ts index 2d169b60b..ae05b4485 100644 --- a/apps/daxpay-admin/src/api/payment/order/normal-order.api.ts +++ b/apps/daxpay-admin/src/api/payment/order/normal-order.api.ts @@ -45,18 +45,18 @@ export interface NormalOrderQuery { mchNo?: string; /** 应用号 */ appId?: string; + /** 平台业务单号 */ + orderNo?: string; /** 商户业务单号 */ bizOrderNo?: string; /** 订单标题 */ title?: string; /** 业务状态 */ status?: string; - /** 支付通道 */ - channel?: string; - /** 支付方式 */ - method?: string; /** 支付产品 */ product?: string; + /** 支付能力 */ + capability?: string; /** 门店号 */ storeNo?: string; /** 创建时间-开始 */ @@ -71,8 +71,12 @@ export interface NormalOrderQuery { /** 业务订单结果(含详情联表字段) */ export interface NormalOrderResult extends MchEntity { + /** 平台业务单号 */ + orderNo?: string; /** 商户业务单号 */ bizOrderNo?: string; + /** 订单来源 */ + source?: string; /** 标题 */ title?: string; /** 描述 */ @@ -97,14 +101,14 @@ export interface NormalOrderResult extends MchEntity { method?: string; /** 支付产品 */ product?: string; + /** 支付能力 */ + capability?: string; /** 支付成功时间 */ payTime?: string; /** 关闭时间 */ closeTime?: string; /** 通道商户号 */ channelMchNo?: string; - /** 支付能力编码 */ - capability?: string; /** 通道应用 AppId */ channelAppId?: string; /** 客户端IP */ diff --git a/apps/daxpay-admin/src/api/payment/order/pay-trade.api.ts b/apps/daxpay-admin/src/api/payment/order/pay-trade.api.ts index 756a8b098..eb631aee9 100644 --- a/apps/daxpay-admin/src/api/payment/order/pay-trade.api.ts +++ b/apps/daxpay-admin/src/api/payment/order/pay-trade.api.ts @@ -53,12 +53,7 @@ export interface PayTradeQuery { status?: string; /** 交易形态 */ tradeType?: string; - /** 支付通道 */ - channel?: string; - /** 支付方式 */ - method?: string; - /** 支付产品 */ - product?: string; + // pay_trade 无 channel/method/product 列,不可筛选 /** 通道商户号 */ channelMchNo?: string; /** 门店号 */ @@ -142,6 +137,8 @@ export interface PayTradeResult extends MchEntity { /** 错误信息 */ errorMsg?: string; // ===== 容器联表字段(详情) ===== + /** 容器平台业务单号 */ + containerOrderNo?: string; /** 商户业务单号 */ bizOrderNo?: string; /** 订单标题 */ diff --git a/apps/daxpay-admin/src/api/payment/order/refund-order.api.ts b/apps/daxpay-admin/src/api/payment/order/refund-order.api.ts index 13425d56c..6defde836 100644 --- a/apps/daxpay-admin/src/api/payment/order/refund-order.api.ts +++ b/apps/daxpay-admin/src/api/payment/order/refund-order.api.ts @@ -23,7 +23,7 @@ export const RefundOrderApi = { /** * 发起退款 */ - refund(data: PayRefundParam): Promise> { + refund(data: RefundParam): Promise> { return defHttp.post({ url: '/admin/order/refund/refund', data }); }, @@ -37,78 +37,57 @@ export const RefundOrderApi = { /** 退款订单查询参数 */ export interface RefundOrderQuery { - /** 商户号 */ mchNo?: string; - /** 应用号 */ appId?: string; - /** 退款号 */ refundNo?: string; - /** 商户退款号 */ bizRefundNo?: string; - /** 原支付订单号 */ - orderNo?: string; - /** 商户业务订单号 */ + /** 原支付资金交易号 */ + tradeNo?: string; + /** 交易类型 normal/gateway */ + tradeType?: string; bizOrderNo?: string; - /** 退款状态 */ status?: string; - /** 支付通道 */ - channel?: string; - /** 门店号 */ + /** 支付产品 */ + product?: string; storeNo?: string; - /** 创建时间-开始 */ createTimeStart?: string; - /** 创建时间-结束 */ createTimeEnd?: string; } /** 退款发起参数 */ -export interface PayRefundParam { - /** 原支付订单号 */ - orderNo?: string; - /** 商户业务订单号 */ +export interface RefundParam { + /** 原支付资金交易号 */ + tradeNo?: string; bizOrderNo?: string; - /** 退款金额(分) */ amount: number; - /** 退款原因 */ reason?: string; - /** 商户退款号(可选) */ bizRefundNo?: string; } -/** 退款订单结果 */ +/** 退款订单结果(管理端不暴露 capability) */ export interface RefundOrderResult extends MchEntity { - /** 退款号 */ refundNo?: string; - /** 商户退款号 */ bizRefundNo?: string; - /** 标题 */ title?: string; - /** 原支付订单号 */ - orderNo?: string; - /** 商户业务订单号 */ + tradeNo?: string; + tradeType?: string; bizOrderNo?: string; - /** 通道支付订单号 */ outOrderNo?: string; - /** 通道退款流水号 */ outRefundNo?: string; - /** 退款金额(分) */ + relationOrderNo?: string; amount?: number; - /** 订单总金额(分) */ orderAmount?: number; - /** 退款原因 */ + currency?: string; reason?: string; - /** 退款状态 */ status?: string; - /** 退款完成时间 */ finishTime?: string; - /** 支付通道 */ channel?: string; - /** 支付产品 */ product?: string; - /** 支付方式 */ - method?: string; - /** 门店号 */ + channelMchNo?: string; + channelAppId?: string; + notifyUrl?: string; + attach?: string; + clientIp?: string; storeNo?: string; - /** 错误信息 */ errorMsg?: string; } diff --git a/apps/daxpay-admin/src/locales/langs/id-ID/payment/order.json b/apps/daxpay-admin/src/locales/langs/id-ID/payment/order.json index c1bcb091b..598e9d024 100644 --- a/apps/daxpay-admin/src/locales/langs/id-ID/payment/order.json +++ b/apps/daxpay-admin/src/locales/langs/id-ID/payment/order.json @@ -1,7 +1,11 @@ { "normal": { - "title": "Perintah Pembayaran", - "detail": "Detail Pesanan Pembayaran" + "title": "Pembayaran Normal", + "detail": "Detail Pembayaran Normal" + }, + "gateway": { + "title": "Pembayaran Gateway", + "detail": "Detail Pembayaran Gateway" }, "trade": { "title": "Perdagangan Dana", @@ -10,24 +14,30 @@ "refund": { "title": "Pengembalian Dana Pesanan", "detail": "Detail Pengembalian Dana Pesanan", + "statusLabel": "Refund Status", + "section": { + "identity": "Identity", + "fund": "Fund", + "amount": "Amount", + "channel": "Channel", + "notify": "Notify" + }, "status": { - "init": "Awal", - "progress": "Pengembalian dana", - "success": "Kesuksesan", - "fail": "Gagal", - "close": "Tertutup" + "progress": "Refunding", + "success": "Success", + "fail": "Failed", + "close": "Closed" }, "statusColor": { - "init": "bawaan", - "progress": "pengolahan", - "success": "hijau", - "fail": "merah", - "close": "bawaan" + "progress": "processing", + "success": "green", + "fail": "red", + "close": "default" } }, "field": { "bizOrderNo": "Nomor Pesanan Pedagang.", - "tradeNo": "Nomor Perdagangan.", + "tradeNo": "Fund Trade No.", "title": "Judul", "description": "Keterangan", "amount": "Jumlah (Yuan)", @@ -41,7 +51,7 @@ "provider": "Penyedia", "outOrderNo": "Nomor Pesanan Saluran.", "transOrderNo": "Nomor Pesanan Trans.", - "relationOrderNo": "Nomor Pesanan Relasi.", + "relationOrderNo": "Channel Relation No.", "postedAmount": "Jumlah dibukukan (Yuan)", "refundableBalance": "Dapat dikembalikan (Yuan)", "payBody": "Badan Bayar", @@ -77,7 +87,7 @@ "reason": "Alasan Pengembalian Dana", "finishTime": "Waktu Selesai", "orderAmount": "Jumlah Pesanan", - "orderNo": "Nomor Pesanan Asli.", + "orderNo": "Platform Order No.", "authCode": "Kode pembayaran", "merchant": "Merchant" }, @@ -85,27 +95,33 @@ "wait_pay": "Menunggu", "paid": "Dibayar", "closed": "Tertutup", - "expired": "Kedaluwarsa" + "expired": "Kedaluwarsa", + "paying": "Paying", + "failed": "Failed" }, "fundStatus": { "init": "Awal", "processing": "Pengolahan", "success": "Kesuksesan", "fail": "Gagal", - "close": "Tertutup" + "close": "Tertutup", + "cancel": "Cancelled" }, "bizStatusColor": { "wait_pay": "oranye", "paid": "hijau", "closed": "bawaan", - "expired": "merah" + "expired": "merah", + "paying": "processing", + "failed": "red" }, "fundStatusColor": { "init": "bawaan", "processing": "pengolahan", "success": "hijau", "fail": "merah", - "close": "bawaan" + "close": "bawaan", + "cancel": "default" }, "placeholder": { "bizOrderNo": "Masukkan nomor pesanan pedagang.", @@ -143,9 +159,6 @@ "refundReasonPlaceholder": "Masukkan alasan pengembalian dana (opsional)", "refundAmountExceed": "Jumlah pengembalian dana tidak dapat melebihi jumlah yang dapat dikembalikan" }, - "tradeType": { - "normal": "Pembayaran Biasa" - }, "method": { "jsapi": "JSAPI", "qrcode": "Kode QR", @@ -153,5 +166,13 @@ "app": "APP", "barcode": "Kode Batang", "wap": "WAP" + }, + "tradeType": { + "normal": "Normal Pay", + "gateway": "Gateway Pay" + }, + "gatewayType": { + "cashier": "Cashier", + "aggregate": "Aggregate" } -} +} \ No newline at end of file diff --git a/apps/daxpay-admin/src/locales/langs/ms-MY/payment/order.json b/apps/daxpay-admin/src/locales/langs/ms-MY/payment/order.json index 8f5d639a6..94727ef4c 100644 --- a/apps/daxpay-admin/src/locales/langs/ms-MY/payment/order.json +++ b/apps/daxpay-admin/src/locales/langs/ms-MY/payment/order.json @@ -1,7 +1,11 @@ { "normal": { - "title": "Pesanan Pembayaran", - "detail": "Butiran Pesanan Pembayaran" + "title": "Bayaran Biasa", + "detail": "Butiran Bayaran Biasa" + }, + "gateway": { + "title": "Bayaran Gerbang", + "detail": "Butiran Bayaran Gerbang" }, "trade": { "title": "Dagangan Dana", @@ -10,24 +14,30 @@ "refund": { "title": "Bayaran Balik Pesanan", "detail": "Butiran Pesanan Bayaran Balik", + "statusLabel": "Refund Status", + "section": { + "identity": "Identity", + "fund": "Fund", + "amount": "Amount", + "channel": "Channel", + "notify": "Notify" + }, "status": { - "init": "Permulaan", - "progress": "Membayar balik", - "success": "Kejayaan", - "fail": "gagal", - "close": "tertutup" + "progress": "Refunding", + "success": "Success", + "fail": "Failed", + "close": "Closed" }, "statusColor": { - "init": "lalai", - "progress": "pemprosesan", - "success": "hijau", - "fail": "merah", - "close": "lalai" + "progress": "processing", + "success": "green", + "fail": "red", + "close": "default" } }, "field": { "bizOrderNo": "Pesanan Saudagar No.", - "tradeNo": "Perdagangan No.", + "tradeNo": "Fund Trade No.", "title": "Tajuk", "description": "Penerangan", "amount": "Amaun(Yuan)", @@ -41,7 +51,7 @@ "provider": "Pembekal", "outOrderNo": "Pesanan Saluran No.", "transOrderNo": "Pesanan Trans", - "relationOrderNo": "Perintah Perhubungan No.", + "relationOrderNo": "Channel Relation No.", "postedAmount": "Amaun diakaun(Yuan)", "refundableBalance": "Boleh dipulangkan(Yuan)", "payBody": "Badan Bayar", @@ -77,7 +87,7 @@ "reason": "Sebab Bayaran Balik", "finishTime": "Tamat Masa", "orderAmount": "Jumlah Pesanan", - "orderNo": "Pesanan Asal No.", + "orderNo": "Platform Order No.", "authCode": "Kod pembayaran", "merchant": "Peniaga" }, @@ -85,27 +95,33 @@ "wait_pay": "Menunggu", "paid": "Dibayar", "closed": "tertutup", - "expired": "Tamat tempoh" + "expired": "Tamat tempoh", + "paying": "Paying", + "failed": "Failed" }, "fundStatus": { "init": "Permulaan", "processing": "Memproses", "success": "Kejayaan", "fail": "gagal", - "close": "tertutup" + "close": "tertutup", + "cancel": "Cancelled" }, "bizStatusColor": { "wait_pay": "oren", "paid": "hijau", "closed": "lalai", - "expired": "merah" + "expired": "merah", + "paying": "processing", + "failed": "red" }, "fundStatusColor": { "init": "lalai", "processing": "pemprosesan", "success": "hijau", "fail": "merah", - "close": "lalai" + "close": "lalai", + "cancel": "default" }, "placeholder": { "bizOrderNo": "Masukkan no pesanan peniaga.", @@ -143,9 +159,6 @@ "refundReasonPlaceholder": "Masukkan sebab bayaran balik (pilihan)", "refundAmountExceed": "Jumlah bayaran balik tidak boleh melebihi jumlah yang boleh dikembalikan" }, - "tradeType": { - "normal": "Bayaran Biasa" - }, "method": { "jsapi": "JSAPI", "qrcode": "Kod QR", @@ -153,5 +166,13 @@ "app": "APP", "barcode": "Kod Bar", "wap": "WAP" + }, + "tradeType": { + "normal": "Normal Pay", + "gateway": "Gateway Pay" + }, + "gatewayType": { + "cashier": "Cashier", + "aggregate": "Aggregate" } -} +} \ No newline at end of file diff --git a/apps/daxpay-admin/src/locales/langs/th-TH/payment/order.json b/apps/daxpay-admin/src/locales/langs/th-TH/payment/order.json index 984e04a74..e8035d270 100644 --- a/apps/daxpay-admin/src/locales/langs/th-TH/payment/order.json +++ b/apps/daxpay-admin/src/locales/langs/th-TH/payment/order.json @@ -1,7 +1,11 @@ { "normal": { - "title": "คำสั่งการชำระเงิน", - "detail": "รายละเอียดการสั่งซื้อการชำระเงิน" + "title": "ชำระเงินปกติ", + "detail": "รายละเอียดชำระเงินปกติ" + }, + "gateway": { + "title": "ชำระเงินเกตเวย์", + "detail": "รายละเอียดชำระเงินเกตเวย์" }, "trade": { "title": "การซื้อขายกองทุน", @@ -10,24 +14,30 @@ "refund": { "title": "การคืนเงินคำสั่งซื้อ", "detail": "รายละเอียดการขอคืนเงิน", + "statusLabel": "Refund Status", + "section": { + "identity": "Identity", + "fund": "Fund", + "amount": "Amount", + "channel": "Channel", + "notify": "Notify" + }, "status": { - "init": "อักษรย่อ", - "progress": "การคืนเงิน", - "success": "ความสำเร็จ", - "fail": "ล้มเหลว", - "close": "ปิด" + "progress": "Refunding", + "success": "Success", + "fail": "Failed", + "close": "Closed" }, "statusColor": { - "init": "ค่าเริ่มต้น", - "progress": "กำลังประมวลผล", - "success": "สีเขียว", - "fail": "สีแดง", - "close": "ค่าเริ่มต้น" + "progress": "processing", + "success": "green", + "fail": "red", + "close": "default" } }, "field": { "bizOrderNo": "เลขที่ใบสั่งซื้อของผู้ขาย", - "tradeNo": "หมายเลขการค้า", + "tradeNo": "Fund Trade No.", "title": "ชื่อ", "description": "คำอธิบาย", "amount": "จำนวนเงิน(หยวน)", @@ -41,7 +51,7 @@ "provider": "ผู้ให้บริการ", "outOrderNo": "ช่องทางการสั่งซื้อเลขที่", "transOrderNo": "หมายเลขคำสั่งทรานส์", - "relationOrderNo": "ความสัมพันธ์เลขที่คำสั่ง", + "relationOrderNo": "Channel Relation No.", "postedAmount": "ยอดเข้าบัญชี (หยวน)", "refundableBalance": "สามารถขอคืนเงินได้ (หยวน)", "payBody": "จ่ายร่างกาย", @@ -77,7 +87,7 @@ "reason": "เหตุผลในการคืนเงิน", "finishTime": "เสร็จสิ้นเวลา", "orderAmount": "จำนวนการสั่งซื้อ", - "orderNo": "หมายเลขคำสั่งซื้อเดิม", + "orderNo": "Platform Order No.", "authCode": "รหัสชำระเงิน", "merchant": "ร้านค้า" }, @@ -85,27 +95,33 @@ "wait_pay": "ซึ่งรอคอย", "paid": "จ่าย", "closed": "ปิด", - "expired": "หมดอายุแล้ว" + "expired": "หมดอายุแล้ว", + "paying": "Paying", + "failed": "Failed" }, "fundStatus": { "init": "อักษรย่อ", "processing": "กำลังประมวลผล", "success": "ความสำเร็จ", "fail": "ล้มเหลว", - "close": "ปิด" + "close": "ปิด", + "cancel": "Cancelled" }, "bizStatusColor": { "wait_pay": "ส้ม", "paid": "สีเขียว", "closed": "ค่าเริ่มต้น", - "expired": "สีแดง" + "expired": "สีแดง", + "paying": "processing", + "failed": "red" }, "fundStatusColor": { "init": "ค่าเริ่มต้น", "processing": "กำลังประมวลผล", "success": "สีเขียว", "fail": "สีแดง", - "close": "ค่าเริ่มต้น" + "close": "ค่าเริ่มต้น", + "cancel": "default" }, "placeholder": { "bizOrderNo": "ป้อนหมายเลขคำสั่งซื้อของร้านค้า", @@ -143,9 +159,6 @@ "refundReasonPlaceholder": "ป้อนเหตุผลการคืนเงิน (ไม่บังคับ)", "refundAmountExceed": "จำนวนเงินคืนต้องไม่เกินจำนวนเงินที่สามารถขอคืนได้" }, - "tradeType": { - "normal": "ชำระเงินปกติ" - }, "method": { "jsapi": "JSAPI", "qrcode": "สแกนโค้ด", @@ -153,5 +166,13 @@ "app": "APP", "barcode": "บาร์โค้ด", "wap": "WAP" + }, + "tradeType": { + "normal": "Normal Pay", + "gateway": "Gateway Pay" + }, + "gatewayType": { + "cashier": "Cashier", + "aggregate": "Aggregate" } -} +} \ No newline at end of file diff --git a/apps/daxpay-admin/src/locales/langs/vi-VN/payment/order.json b/apps/daxpay-admin/src/locales/langs/vi-VN/payment/order.json index 60debb5bd..8650bc39a 100644 --- a/apps/daxpay-admin/src/locales/langs/vi-VN/payment/order.json +++ b/apps/daxpay-admin/src/locales/langs/vi-VN/payment/order.json @@ -1,7 +1,11 @@ { "normal": { - "title": "Lệnh thanh toán", - "detail": "Chi tiết đơn hàng thanh toán" + "title": "Thanh toán thường", + "detail": "Chi tiết thanh toán thường" + }, + "gateway": { + "title": "Thanh toán cổng", + "detail": "Chi tiết thanh toán cổng" }, "trade": { "title": "Giao dịch quỹ", @@ -10,24 +14,30 @@ "refund": { "title": "Lệnh hoàn tiền", "detail": "Chi tiết đơn hàng hoàn tiền", + "statusLabel": "Refund Status", + "section": { + "identity": "Identity", + "fund": "Fund", + "amount": "Amount", + "channel": "Channel", + "notify": "Notify" + }, "status": { - "init": "Ban đầu", - "progress": "Hoàn tiền", - "success": "Thành công", - "fail": "Thất bại", - "close": "Đã đóng" + "progress": "Refunding", + "success": "Success", + "fail": "Failed", + "close": "Closed" }, "statusColor": { - "init": "mặc định", - "progress": "xử lý", - "success": "màu xanh lá", - "fail": "màu đỏ", - "close": "mặc định" + "progress": "processing", + "success": "green", + "fail": "red", + "close": "default" } }, "field": { "bizOrderNo": "Số đơn đặt hàng của người bán", - "tradeNo": "Số giao dịch", + "tradeNo": "Fund Trade No.", "title": "Tiêu đề", "description": "Sự miêu tả", "amount": "Số tiền(Nhân dân tệ)", @@ -41,7 +51,7 @@ "provider": "nhà cung cấp", "outOrderNo": "Số thứ tự kênh", "transOrderNo": "Số đơn hàng chuyển khoản", - "relationOrderNo": "Số thứ tự quan hệ", + "relationOrderNo": "Channel Relation No.", "postedAmount": "Số đã ghi sổ(Nhân dân tệ)", "refundableBalance": "Có thể hoàn lại(Nhân dân tệ)", "payBody": "Cơ quan thanh toán", @@ -77,7 +87,7 @@ "reason": "Lý do hoàn tiền", "finishTime": "Thời gian kết thúc", "orderAmount": "Số tiền đặt hàng", - "orderNo": "Số đơn đặt hàng ban đầu", + "orderNo": "Platform Order No.", "authCode": "Mã thanh toán", "merchant": "Thương nhân" }, @@ -85,27 +95,33 @@ "wait_pay": "Chờ", "paid": "Trả", "closed": "Đã đóng", - "expired": "Hết hạn" + "expired": "Hết hạn", + "paying": "Paying", + "failed": "Failed" }, "fundStatus": { "init": "Ban đầu", "processing": "Xử lý", "success": "Thành công", "fail": "Thất bại", - "close": "Đã đóng" + "close": "Đã đóng", + "cancel": "Cancelled" }, "bizStatusColor": { "wait_pay": "quả cam", "paid": "màu xanh lá", "closed": "mặc định", - "expired": "màu đỏ" + "expired": "màu đỏ", + "paying": "processing", + "failed": "red" }, "fundStatusColor": { "init": "mặc định", "processing": "xử lý", "success": "màu xanh lá", "fail": "màu đỏ", - "close": "mặc định" + "close": "mặc định", + "cancel": "default" }, "placeholder": { "bizOrderNo": "Nhập số đơn đặt hàng của người bán.", @@ -143,9 +159,6 @@ "refundReasonPlaceholder": "Nhập lý do hoàn tiền (tùy chọn)", "refundAmountExceed": "Số tiền hoàn lại không được vượt quá số tiền được hoàn lại" }, - "tradeType": { - "normal": "Thanh toán thường" - }, "method": { "jsapi": "JSAPI", "qrcode": "Quét mã", @@ -153,5 +166,13 @@ "app": "APP", "barcode": "Mã vạch", "wap": "WAP" + }, + "tradeType": { + "normal": "Normal Pay", + "gateway": "Gateway Pay" + }, + "gatewayType": { + "cashier": "Cashier", + "aggregate": "Aggregate" } -} +} \ No newline at end of file diff --git a/apps/daxpay-admin/src/views/dashboard/workspace/widgets/pay-order-list.widget.vue b/apps/daxpay-admin/src/views/dashboard/workspace/widgets/pay-order-list.widget.vue index 7cec2fe2d..7ac85e6b4 100644 --- a/apps/daxpay-admin/src/views/dashboard/workspace/widgets/pay-order-list.widget.vue +++ b/apps/daxpay-admin/src/views/dashboard/workspace/widgets/pay-order-list.widget.vue @@ -1,93 +1,83 @@ @@ -100,27 +90,31 @@ + + -
    -
  • +
      +
    • {{ statusLabel(order.status) }} - {{ order.title }} - ¥{{ order.amount }} + {{ order.title || '-' }} + ¥{{ formatAmount(order.amount) }}

      - {{ order.orderNo }} + {{ order.orderNo || '-' }} · - {{ $t(`payment.channel.common.${order.channel}`) }} + {{ channelLabel(order.channel) }} · - {{ order.time }} + {{ fmtTime(order) }}

    diff --git a/apps/daxpay-admin/src/views/dashboard/workspace/widgets/quick-entry/catalog.ts b/apps/daxpay-admin/src/views/dashboard/workspace/widgets/quick-entry/catalog.ts index fa17c1118..bde606532 100644 --- a/apps/daxpay-admin/src/views/dashboard/workspace/widgets/quick-entry/catalog.ts +++ b/apps/daxpay-admin/src/views/dashboard/workspace/widgets/quick-entry/catalog.ts @@ -113,7 +113,7 @@ export const ENTRY_CATALOG: QuickEntryMeta[] = [ // 以下为可选扩展入口(默认不显示,用户在编辑抽屉按需添加) { key: 'payOrder', - routeName: '/trade/normal-pay', + routeName: '/trade/pay-order/normal', icon: 'lucide:receipt', titleKey: 'dashboard.workspace.quickEntry.payOrder', color: 'bg-blue-600', diff --git a/apps/daxpay-admin/src/views/payment/order/GatewayOrderList.vue b/apps/daxpay-admin/src/views/payment/order/GatewayOrderList.vue new file mode 100644 index 000000000..d33adbd44 --- /dev/null +++ b/apps/daxpay-admin/src/views/payment/order/GatewayOrderList.vue @@ -0,0 +1,529 @@ + + + diff --git a/apps/daxpay-admin/src/views/payment/order/RefundOrderList.vue b/apps/daxpay-admin/src/views/payment/order/RefundOrderList.vue index db565e02b..fadc5cdf1 100644 --- a/apps/daxpay-admin/src/views/payment/order/RefundOrderList.vue +++ b/apps/daxpay-admin/src/views/payment/order/RefundOrderList.vue @@ -8,6 +8,7 @@ import { RefundOrderApi, type RefundOrderQuery, type RefundOrderResult } from '#/api/payment/order/refund-order.api'; import { BQuery, type QueryField } from '#/components/query'; import { PermCodes } from '#/constants/perm-codes'; + import { productI18nMap, productNameMap } from '#/enums/payment'; import { useMessage } from '#/hooks/useMessage'; import { usePermission } from '#/hooks/usePermission'; @@ -20,7 +21,6 @@ const xTable = ref(); const xToolbar = ref(); - // 查询条件 const queryForm = ref({}); const pageConfig = ref({ @@ -31,29 +31,35 @@ const tableData = ref([]); - // 详情抽屉 const drawerVisible = ref(false); const drawerLoading = ref(false); const detail = ref({}); const actionLoading = ref(false); - // 退款状态下拉 + // 退款状态(无 init) const statusOptions = computed(() => - ['init', 'progress', 'success', 'fail', 'close'].map((v) => ({ + ['progress', 'success', 'fail', 'close'].map((v) => ({ label: $t(`payment.order.refund.status.${v}`), value: v, })), ); - // 支付通道下拉(常用通道) - const channelOptions = computed(() => - ['alipay', 'wechat', 'douyin'].map((v) => ({ - label: $t(`payment.channel.common.${v}`), + // 交易类型(原支付形态) + const tradeTypeOptions = computed(() => + ['normal', 'gateway'].map((v) => ({ + label: $t(`payment.order.tradeType.${v}`), value: v, })), ); - // 查询字段 + // 支付产品 + const productOptions = computed(() => + Object.keys(productNameMap).map((code) => ({ + label: productLabel(code), + value: code, + })), + ); + const queryFields = computed(() => [ { type: 'string', @@ -63,9 +69,10 @@ }, { type: 'string', - field: 'orderNo', - name: $t('payment.order.field.orderNo'), - placeholder: $t('payment.order.placeholder.orderNo'), + field: 'tradeNo', + // 资金交易号 + name: $t('payment.order.field.tradeNo'), + placeholder: $t('payment.order.placeholder.tradeNo'), }, { type: 'string', @@ -76,14 +83,23 @@ { type: 'list', field: 'status', - name: $t('payment.order.field.bizStatus'), + // 退款状态 + name: $t('payment.order.refund.statusLabel'), selectList: statusOptions.value, }, { type: 'list', - field: 'channel', - name: $t('payment.order.field.channel'), - selectList: channelOptions.value, + field: 'tradeType', + // 交易类型 + name: $t('payment.order.field.tradeType'), + selectList: tradeTypeOptions.value, + }, + { + type: 'list', + field: 'product', + // 支付产品 + name: $t('payment.order.field.product'), + selectList: productOptions.value, }, { type: 'date_time_range', @@ -94,9 +110,6 @@ }, ]); - /** - * 分页查询 - */ function queryPage() { loading.value = true; return RefundOrderApi.page({ @@ -126,29 +139,33 @@ queryPage(); } - /** - * 金额分转元 - */ function formatAmount(amount?: number): string { if (amount === null || amount === undefined) return '-'; return (amount / 100).toFixed(2); } - /** - * 退款状态颜色 - */ function statusColor(status?: string): string { return status ? $t(`payment.order.refund.statusColor.${status}`) : 'default'; } - function channelLabel(code?: string): string { + function productLabel(code?: string): string { if (!code) return '-'; - return channelOptions.value.find((o) => o.value === code)?.label || code; + const i18nKey = productI18nMap[code]; + if (i18nKey) { + const text = $t(i18nKey); + if (text && text !== i18nKey) { + return text; + } + } + return productNameMap[code] || code; + } + + function tradeTypeLabel(code?: string): string { + if (!code) return '-'; + const text = $t(`payment.order.tradeType.${code}`); + return text && text !== `payment.order.tradeType.${code}` ? text : code; } - /** - * 查看详情 - */ async function handleView(row: RefundOrderResult) { drawerVisible.value = true; drawerLoading.value = true; @@ -160,9 +177,6 @@ } } - /** - * 同步退款状态 - */ function handleSync(row: RefundOrderResult) { confirm({ title: $t('payment.order.action.syncConfirmTitle'), @@ -203,39 +217,35 @@ - - + - + - - + + + + + - - - + +
    {{ $t('payment.order.refund.section.identity') }}
    + - {{ detail.mchName || '-' }} - ({{ detail.mchNo }}) + {{ detail.mchName || detail.mchNo || '-' }} + ({{ detail.mchNo }}) + + + {{ detail.appId || '-' }} {{ detail.refundNo || '-' }} @@ -294,32 +308,51 @@ {{ detail.bizRefundNo || '-' }} - - {{ detail.orderNo || '-' }} + + {{ detail.title || '-' }} + + + + +
    {{ $t('payment.order.refund.section.fund') }}
    + + + {{ detail.tradeNo || '-' }} + + + {{ tradeTypeLabel(detail.tradeType) }} {{ detail.bizOrderNo || '-' }} + + {{ detail.outOrderNo || '-' }} + + + {{ detail.relationOrderNo || '-' }} + {{ detail.outRefundNo || '-' }} - + + + +
    {{ $t('payment.order.refund.section.amount') }}
    + + {{ detail.status ? $t(`payment.order.refund.status.${detail.status}`) : '-' }} + + {{ detail.currency || '-' }} + {{ formatAmount(detail.amount) }} {{ formatAmount(detail.orderAmount) }} - - {{ channelLabel(detail.channel) }} - - - {{ detail.method || '-' }} - {{ detail.reason || '-' }} @@ -333,6 +366,40 @@ {{ detail.errorMsg || '-' }} + + +
    {{ $t('payment.order.refund.section.channel') }}
    + + + {{ productLabel(detail.product) }} + + + {{ detail.channel || '-' }} + + + {{ detail.channelMchNo || '-' }} + + + {{ detail.channelAppId || '-' }} + + + + +
    {{ $t('payment.order.refund.section.notify') }}
    + + + {{ detail.notifyUrl || '-' }} + + + {{ detail.attach || '-' }} + + + {{ detail.clientIp || '-' }} + + + {{ detail.storeNo || '-' }} + +