From 7bc5831edd7d760bd40d354275f2db014843bb17 Mon Sep 17 00:00:00 2001 From: ivan Date: Thu, 2 Apr 2026 00:09:35 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=9A=E6=8F=90=E7=8E=B0?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E6=98=BE=E7=A4=BA=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/pmset.ts | 1 + src/locales/en.json | 3 + src/locales/ja.json | 3 + src/locales/ko.json | 3 + src/locales/zh-CN.json | 3 + src/locales/zh-TW.json | 3 + src/views/Wallet.vue | 147 ++++++++++++++++++++++++++++++++++++++++- 7 files changed, 160 insertions(+), 3 deletions(-) diff --git a/src/api/pmset.ts b/src/api/pmset.ts index 99299f1..e959353 100644 --- a/src/api/pmset.ts +++ b/src/api/pmset.ts @@ -139,6 +139,7 @@ export interface SettlementRequestClientItem { fee?: string status?: string reason?: string + payoutError?: string requestNo?: string tokenAddress?: string | null /** 兼容旧接口字段 */ diff --git a/src/locales/en.json b/src/locales/en.json index 4f8693d..b834d89 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -269,6 +269,9 @@ "withdrawAmountLabel": "Withdraw Amount", "feeLabel": "Fee", "withdrawAddressLabel": "Withdraw Address", + "withdrawRejectReasonTitle": "Why it was rejected", + "withdrawRejectNoReason": "No reason was provided. Please contact support if you need help.", + "withdrawViewRejectReason": "View reason", "priceLabel": "Price", "sellDialogTitle": "Sell {outcome}", "position": "Position", diff --git a/src/locales/ja.json b/src/locales/ja.json index 88e5750..c2666ae 100644 --- a/src/locales/ja.json +++ b/src/locales/ja.json @@ -269,6 +269,9 @@ "withdrawAmountLabel": "出金額", "feeLabel": "手数料", "withdrawAddressLabel": "出金先アドレス", + "withdrawRejectReasonTitle": "審査が通らなかった理由", + "withdrawRejectNoReason": "理由は返されていません。お問い合わせはサポートへご連絡ください。", + "withdrawViewRejectReason": "タップして理由を見る", "priceLabel": "価格", "sellDialogTitle": "売却 {outcome}", "position": "ポジション", diff --git a/src/locales/ko.json b/src/locales/ko.json index 07265c4..9566188 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -269,6 +269,9 @@ "withdrawAmountLabel": "출금 금액", "feeLabel": "수수료", "withdrawAddressLabel": "출금 주소", + "withdrawRejectReasonTitle": "심사 거부 사유", + "withdrawRejectNoReason": "사유가 제공되지 않았습니다. 문의는 고객 지원으로 연락해 주세요.", + "withdrawViewRejectReason": "탭하여 사유 보기", "priceLabel": "가격", "sellDialogTitle": "매도 {outcome}", "position": "포지션", diff --git a/src/locales/zh-CN.json b/src/locales/zh-CN.json index 99df1ae..f406459 100644 --- a/src/locales/zh-CN.json +++ b/src/locales/zh-CN.json @@ -269,6 +269,9 @@ "withdrawAmountLabel": "提现金额", "feeLabel": "手续费", "withdrawAddressLabel": "提现地址", + "withdrawRejectReasonTitle": "审核未通过原因", + "withdrawRejectNoReason": "未返回具体原因,如有疑问请联系客服。", + "withdrawViewRejectReason": "点击查看原因", "priceLabel": "价格", "sellDialogTitle": "卖出 {outcome}", "position": "仓位", diff --git a/src/locales/zh-TW.json b/src/locales/zh-TW.json index 3164159..72be553 100644 --- a/src/locales/zh-TW.json +++ b/src/locales/zh-TW.json @@ -269,6 +269,9 @@ "withdrawAmountLabel": "提現金額", "feeLabel": "手續費", "withdrawAddressLabel": "提現地址", + "withdrawRejectReasonTitle": "審核未通過原因", + "withdrawRejectNoReason": "未返回具體原因,如有疑問請聯絡客服。", + "withdrawViewRejectReason": "點擊查看原因", "priceLabel": "價格", "sellDialogTitle": "賣出 {outcome}", "position": "倉位", diff --git a/src/views/Wallet.vue b/src/views/Wallet.vue index 36cc335..db38685 100644 --- a/src/views/Wallet.vue +++ b/src/views/Wallet.vue @@ -356,8 +356,18 @@
{{ t('wallet.withdrawAddressLabel') }}
-
- {{ shortAddress(w.tokenAddress ?? w.walletAddress) }} +
+
+ {{ shortAddress(w.tokenAddress ?? w.walletAddress) }} +
+
@@ -401,6 +411,25 @@ @success="onWithdrawSuccess" /> + + +
+

{{ t('wallet.withdrawRejectReasonTitle') }}

+
+ +

{{ withdrawRejectReasonText }}

+
+
+
+ (USE_MOCK_WALLET ? [...MOCK_WALLET_POSITIONS] : const withdrawalsList = ref([]) const withdrawalsTotal = ref(0) const withdrawalsLoading = ref(false) +const withdrawRejectReasonDialogOpen = ref(false) +const withdrawRejectReasonText = ref('') + +function isWithdrawStatusRejected(status: string | undefined): boolean { + const s = (status ?? '').toLowerCase() + return s === WITHDRAW_STATUS.REJECTED || s === '2' || s === 'rejected' +} + +function getWithdrawRejectionReason(w: SettlementRequestClientItem): string { + const fromReason = w.reason + if (typeof fromReason === 'string' && fromReason.trim()) return fromReason.trim() + const rec = w as Record + for (const key of ['rejectReason', 'auditRemark', 'rejectMsg']) { + const v = rec[key] + if (typeof v === 'string' && v.trim()) return v.trim() + } + const payoutErr = w.payoutError ?? rec.payout_error + if (typeof payoutErr === 'string' && payoutErr.trim()) return payoutErr.trim() + return t('wallet.withdrawRejectNoReason') +} + +function openWithdrawRejectReasonDialog(w: SettlementRequestClientItem) { + withdrawRejectReasonText.value = getWithdrawRejectionReason(w) + withdrawRejectReasonDialogOpen.value = true +} + +function closeWithdrawRejectReasonDialog() { + withdrawRejectReasonDialogOpen.value = false +} /** 持仓列表(API 数据,非 mock 时使用) */ const positionList = ref([]) const positionTotal = ref(0) @@ -2674,11 +2732,60 @@ async function submitAuthorize() { } .withdrawal-status-pill.status-pending, .withdrawal-status-pill.status-success, -.withdrawal-status-pill.status-rejected, .withdrawal-status-pill.status-failed { background: #f3f4f6; color: #374151; } + +.withdrawal-status-pill.status-rejected { + background: #fef2f2; + color: #b91c1c; + border: 1px solid #fecaca; +} + +.withdraw-reject-dialog-card { + container-type: inline-size; + display: flex; + flex-direction: column; + justify-content: center; + min-height: calc(100cqw * 2 / 3); + border: 1px solid #f3f4f6; + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.06); + cursor: pointer; +} + +.withdraw-reject-dialog-card:focus-visible { + outline: 2px solid #94a3b8; + outline-offset: 2px; +} + +.withdraw-reject-dialog-header { + padding: 20px 20px 8px; + text-align: center; +} + +.withdraw-reject-dialog-title { + margin: 0; + font-size: 1rem; + font-weight: 600; + color: #111827; + line-height: 1.2; +} + +.withdraw-reject-dialog-body { + padding: 8px 24px 28px; + color: #374151; + font-size: 0.9375rem; + line-height: 1.5; + text-align: center; +} + +.withdraw-reject-dialog-text { + margin: 0; + white-space: pre-wrap; + overflow-wrap: anywhere; + text-align: center; +} .withdrawal-reason { font-size: 12px; color: #6b7280; @@ -2739,11 +2846,21 @@ async function submitAuthorize() { color: #9ca3af; } +.withdrawal-mobile-card.design-withdraw-card .withdrawal-address-row { + display: flex; + align-items: center; + justify-content: space-between; + gap: 10px; + margin-top: 0; +} + .withdrawal-mobile-card.design-withdraw-card .withdrawal-mobile-address { margin-top: 0; font-family: Inter, sans-serif; font-size: 13px; color: #111827; + min-width: 0; + flex: 1; } .withdrawal-mobile-card.design-withdraw-card .withdrawal-status-pill { @@ -2756,6 +2873,30 @@ async function submitAuthorize() { font-weight: 700; } +.withdrawal-view-reason-link { + flex-shrink: 0; + margin: 0; + padding: 0; + border: 0; + background: transparent; + color: #b91c1c; + font-size: 12px; + font-weight: 600; + font-family: inherit; + line-height: 1.3; + text-decoration: underline; + text-underline-offset: 3px; + cursor: pointer; + appearance: none; + -webkit-tap-highlight-color: transparent; +} + +.withdrawal-view-reason-link:focus-visible { + outline: 2px solid #b91c1c; + outline-offset: 2px; + border-radius: 2px; +} + .wallet-design-card .withdrawals-mobile-list { padding: 0; gap: 10px;