diff --git a/admin/src/views/Withdrawals.vue b/admin/src/views/Withdrawals.vue index 8e8ac7c..7d87bb6 100644 --- a/admin/src/views/Withdrawals.vue +++ b/admin/src/views/Withdrawals.vue @@ -97,7 +97,11 @@ async function handleAction(row, action) { ElMessage.success('操作成功') loadData() } catch (e) { - if (e !== 'cancel' && e?.toString() !== 'cancel') ElMessage.error(e?.response?.data?.message || '操作失败') + if (e !== 'cancel' && e?.toString() !== 'cancel') { + const data = e?.response?.data + const msg = data?.detail ? `${data.message}:${data.detail}` : (data?.message || '操作失败') + ElMessage.error({ message: msg, duration: 5000 }) + } } } @@ -111,7 +115,8 @@ function statusTagType(s) { function formatTime(str) { if (!str) return '-' - const d = new Date(str) + // 后端存的是UTC时间,确保正确解析为UTC再转本地时间 + const d = new Date(typeof str === 'string' && !str.endsWith('Z') ? str + 'Z' : str) const pad = n => String(n).padStart(2, '0') return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}` } diff --git a/miniapp/pages/help/help.vue b/miniapp/pages/help/help.vue index 3360eb3..da99388 100644 --- a/miniapp/pages/help/help.vue +++ b/miniapp/pages/help/help.vue @@ -41,7 +41,7 @@ 3.商品总金额 - diff --git a/server/Endpoints/EarningEndpoints.cs b/server/Endpoints/EarningEndpoints.cs index 5ca1479..1dd6c71 100644 --- a/server/Endpoints/EarningEndpoints.cs +++ b/server/Endpoints/EarningEndpoints.cs @@ -4,6 +4,7 @@ using CampusErrand.Models.Dtos; using CampusErrand.Helpers; using CampusErrand.Services; using Microsoft.EntityFrameworkCore; +using System.Text.Json; namespace CampusErrand.Endpoints; @@ -245,7 +246,25 @@ public static class EarningEndpoints if (!transferResult.Success) { Console.WriteLine($"[提现] 转账失败: {transferResult.ErrorMessage}"); - return Results.BadRequest(new { code = 400, message = "转账失败,请稍后重试", detail = transferResult.ErrorMessage }); + // 解析微信错误信息,返回友好提示 + var friendlyMsg = "转账失败,请稍后重试"; + try + { + var errJson = JsonSerializer.Deserialize(transferResult.ErrorMessage ?? "{}"); + var errCode = errJson.TryGetProperty("code", out var c) ? c.GetString() : ""; + var errMessage = errJson.TryGetProperty("message", out var m) ? m.GetString() : ""; + friendlyMsg = errCode switch + { + "NOT_ENOUGH" => "商户账户余额不足,请充值后重试", + "NO_AUTH" => "没有转账权限,请检查商户平台配置", + "PARAM_ERROR" => $"参数错误:{errMessage}", + "INVALID_REQUEST" => $"请求无效:{errMessage}", + "FREQUENCY_LIMIT_EXCEED" => "请求频率超限,请稍后重试", + _ => $"转账失败:{errMessage}" + }; + } + catch { } + return Results.BadRequest(new { code = 400, message = friendlyMsg }); } // 保存转账信息,等待用户确认收款