diff --git a/frontend/admin-web/src/app/(dashboard)/pending-actions/page.tsx b/frontend/admin-web/src/app/(dashboard)/pending-actions/page.tsx index b4e43655..fc726807 100644 --- a/frontend/admin-web/src/app/(dashboard)/pending-actions/page.tsx +++ b/frontend/admin-web/src/app/(dashboard)/pending-actions/page.tsx @@ -376,7 +376,45 @@ export default function PendingActionsPage() { } let actionParams: Record | undefined; - if (batchFormData.actionParams.trim()) { + + // 特殊扣减的特殊处理 + if (batchFormData.actionCode === ACTION_CODES.SPECIAL_DEDUCTION) { + // 尝试解析已有参数 + let parsedParams: Record = {}; + if (batchFormData.actionParams.trim()) { + try { + parsedParams = JSON.parse(batchFormData.actionParams); + } catch { + toast.error('操作参数格式错误,请输入有效的 JSON'); + return; + } + } + + const amount = typeof parsedParams.amount === 'number' ? parsedParams.amount : parseFloat(String(parsedParams.amount || '0')); + const reason = String(parsedParams.reason || '').trim(); + + // 金额为空、NaN 或 <= 0 时,自动切换为全额线下结算模式 + if (isNaN(amount) || amount <= 0) { + actionParams = { + amount: 0, + reason: reason || '该收益已由用户与上级间线下完成现金收付', + createdBy: 'admin', + isOfflineSettlement: true, + }; + } else { + // 普通模式需要填写原因 + if (!reason) { + toast.error('特殊扣减必须填写原因/备注'); + return; + } + actionParams = { + amount, + reason, + createdBy: 'admin', + isOfflineSettlement: false, + }; + } + } else if (batchFormData.actionParams.trim()) { try { actionParams = JSON.parse(batchFormData.actionParams); } catch { @@ -904,12 +942,28 @@ export default function PendingActionsPage() { + {/* 特殊扣减提示 */} + {batchFormData.actionCode === ACTION_CODES.SPECIAL_DEDUCTION && ( +
+
+
+ 特殊扣减参数说明 +

金额为空或0:全额线下结算模式,自动扣减用户所有已结算收益

+

金额大于0:普通扣减模式,扣减指定金额(需填写原因)

+
+
+ )} +
- +