feat: 新增提现文案翻译工具类,统一处理失败与驳回原因

这个提交包含在:
2026-10-28 18:21:12 +08:00
父节点 589d6aa216
当前提交 f332dfd2b0
共有 6 个文件被更改,包括 184 次插入 和 12 次删除

查看文件

@@ -33,6 +33,70 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'backend/format'], fu
'</div>';
}
/**
* 微信转账失败/撤销错误码 → 中文说明
* 与 application/common/library/WithdrawText.php 保持同一份字典
*/
var FAIL_TEXT = {
NOT_ENOUGH: '商户转账账户余额不足',
ACCOUNT_ERROR: '收款账户状态异常',
V2_ACCOUNT_SIMPLE_BAN: '收款账户被限制收款',
V3_ACCOUNT_NOT_EXIST: '收款微信账户不存在',
NAME_NOT_MATCH: '收款人姓名与微信实名不一致',
USER_NAME_NOT_MATCH: '收款人姓名与微信实名不一致',
REAL_NAME_CHECK_FAIL: '收款人微信实名核验未通过',
INVALID_OPENID: '收款人微信标识无效',
OPENID_ERROR: '收款人微信标识异常',
AMOUNT_EXCEED: '超出单笔转账限额',
DAILY_LIMIT_EXCEED: '超出当日转账限额',
MCH_CANCEL: '商户主动撤销转账',
MCH_REVOKE: '商户主动撤销转账',
TRANSFER_FAILED: '微信转账未成功',
FAIL: '微信转账未成功',
CANCEL: '转账已撤销',
CANCELLED: '转账已撤销',
PARAM_ERROR: '转账参数有误,请联系客服',
SYSTEM_ERROR: '微信系统繁忙,请稍后重试',
FREQUENCY_LIMITED: '操作过于频繁,请稍后重试',
RULE_LIMIT: '触发微信风控限制',
ACCOUNT_FROZEN: '收款账户已被冻结',
NO_AUTH: '商户无转账接口权限',
APPID_MCHID_NOT_MATCH: '小程序与商户号不匹配',
SIGN_ERROR: '商户签名错误',
IP_NOT_ALLOWED: '服务器IP未加入微信白名单',
IP_FORBIDDEN: '服务器IP未加入微信白名单'
};
var FAIL_FALLBACK = '微信转账未成功,请稍后重试或联系客服';
var REASON_FALLBACK = '审核未通过,请联系客服了解详情';
/**
* 失败原因码值转中文
*
* @param {string} raw 数据库原始 fail_reason
* @return {string} 可读中文
*/
function failText(raw) {
var text = $.trim(raw || '');
if (!text) return '';
text = $.trim(text.replace(/^微信转账(失败|撤销)[::]\s*/, ''));
if (FAIL_TEXT[text.toUpperCase()]) return FAIL_TEXT[text.toUpperCase()];
if (/^[A-Z0-9_\-.\/]{2,60}$/i.test(text)) return FAIL_FALLBACK;
return text;
}
/**
* 驳回原因码值转中文
*
* @param {string} raw 数据库原始 reason
* @return {string} 可读中文
*/
function reasonText(raw) {
var text = $.trim(raw || '');
if (!text) return '';
if (/^[0-9]+$/.test(text) || /^[A-Z0-9_\-.\/]{2,60}$/i.test(text)) return REASON_FALLBACK;
return text;
}
var Controller = {
/**
* 提现列表页初始化
@@ -115,10 +179,13 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'backend/format'], fu
return value && m[value] ? m[value] : (value || '-');
}
},
{field: 'reason', title: '拒绝原因', operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
{field: 'reason', title: '拒绝原因', operate: 'LIKE', table: table, class: 'autocontent', formatter: function (value) {
return reasonText(value) || '-';
}},
{field: 'fail_reason', title: '转账失败原因', operate: 'LIKE', table: table, class: 'autocontent', formatter: function (value) {
if (!value) return '-';
return '<span class="text-danger" title="' + value + '">' + value + '</span>';
var text = failText(value);
if (!text) return '-';
return '<span class="text-danger">' + text + '</span>';
}},
{field: 'paytime', title: __('Paytime'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
{field: 'createtime', title: __('Createtime'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},