From cfc03fe5234be9cfc310e2bd84f61175b5d5db81 Mon Sep 17 00:00:00 2001 From: hailin Date: Thu, 26 Feb 2026 11:58:11 -0800 Subject: [PATCH] =?UTF-8?q?fix(pricing):=20=E6=89=8B=E5=8A=A8=E8=B0=83?= =?UTF-8?q?=E4=BB=B7=E6=94=AF=E6=8C=81=E8=B4=9F=E6=95=B0=E9=99=8D=E4=BB=B7?= =?UTF-8?q?=E5=AF=B9=E5=86=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 之前手动调价只允许非负整数,无法用负数对冲降价。 前端 (admin-web settings/page.tsx): - 移除 input min="0" 限制,允许输入负数 - 验证改为:只校验 isNaN 和总价不低于 0(15831 + amount >= 0) - 文案:"加价金额" → "调价金额",placeholder 改为"正数涨价,负数降价" - 实时预览条件从 amount >= 0 改为总价 >= 0 - 提示文案更新为"正数涨价,负数降价对冲" 后端 (admin-service tree-pricing.service.ts): - 移除 newSupplement < 0 的硬性拒绝 - 改为校验 BASE_PRICE(15831) + newSupplement >= 0,防止总价为负 Co-Authored-By: Claude Opus 4.6 --- .../src/pricing/tree-pricing.service.ts | 6 +++-- .../src/app/(dashboard)/settings/page.tsx | 24 +++++++++++-------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/backend/services/admin-service/src/pricing/tree-pricing.service.ts b/backend/services/admin-service/src/pricing/tree-pricing.service.ts index 5a4b22bb..db9ae627 100644 --- a/backend/services/admin-service/src/pricing/tree-pricing.service.ts +++ b/backend/services/admin-service/src/pricing/tree-pricing.service.ts @@ -79,8 +79,10 @@ export class TreePricingService { reason: string, operatorId: string, ): Promise { - if (newSupplement < 0) { - throw new Error('加价金额不能为负数'); + // 允许负数(降价对冲),但总价不能低于 0 + const BASE_PRICE = 15831; + if (BASE_PRICE + newSupplement < 0) { + throw new Error(`调价金额不能低于 -${BASE_PRICE},否则总价为负`); } const config = await this.getOrCreateConfig(); diff --git a/frontend/admin-web/src/app/(dashboard)/settings/page.tsx b/frontend/admin-web/src/app/(dashboard)/settings/page.tsx index e2652fe2..0ae4fcec 100644 --- a/frontend/admin-web/src/app/(dashboard)/settings/page.tsx +++ b/frontend/admin-web/src/app/(dashboard)/settings/page.tsx @@ -321,21 +321,26 @@ export default function SettingsPage() { // 手动修改加价金额 const handleSupplementUpdate = useCallback(async () => { const amount = parseInt(newSupplement, 10); - if (isNaN(amount) || amount < 0) { - alert('请输入有效的加价金额(非负整数)'); + if (isNaN(amount)) { + alert('请输入有效的调价金额(整数)'); + return; + } + if (15831 + amount < 0) { + alert(`调价金额不能低于 -15831,否则总价为负`); return; } if (!supplementReason.trim()) { alert('请填写变更原因'); return; } - if (!confirm(`确认将加价金额修改为 ${amount} USDT?\n正式认种总价将变为 ${15831 + amount} USDT/棵\n预种总价将变为 ${Math.floor((15831 + amount) / 5)} USDT/份`)) return; + const totalPrice = 15831 + amount; + if (!confirm(`确认将调价金额修改为 ${amount} USDT?\n正式认种总价将变为 ${totalPrice.toLocaleString()} USDT/棵\n预种总价将变为 ${Math.floor(totalPrice / 5).toLocaleString()} USDT/份`)) return; setPricingSaving(true); try { await treePricingService.updateSupplement(amount, supplementReason.trim()); setSupplementReason(''); await loadPricingConfig(); - alert('加价金额修改成功'); + alert('调价金额修改成功'); } catch (error) { console.error('Failed to update supplement:', error); alert('修改失败,请重试'); @@ -1180,15 +1185,14 @@ export default function SettingsPage() { {/* 手动调价 */}
- 手动调价(总部运营成本压力涨价) + 手动调价(总部运营成本压力调价)
- 加价金额 + 调价金额 setNewSupplement(e.target.value)} /> @@ -1214,8 +1218,8 @@ export default function SettingsPage() {
- 加价部分全额归总部 (S0000000001),不影响现有 10 类分配金额。 - {newSupplement && !isNaN(parseInt(newSupplement, 10)) && parseInt(newSupplement, 10) >= 0 && ( + 调价部分全额归总部 (S0000000001),不影响现有 10 类分配金额。正数涨价,负数降价对冲。 + {newSupplement && !isNaN(parseInt(newSupplement, 10)) && (15831 + parseInt(newSupplement, 10)) >= 0 && ( <> 修改后: 正式认种 {(15831 + parseInt(newSupplement, 10)).toLocaleString()} USDT/棵,预种 {Math.floor((15831 + parseInt(newSupplement, 10)) / 5).toLocaleString()} USDT/份 )}