From be6f4f2507d7a366f371736d17b66e566a357be6 Mon Sep 17 00:00:00 2001 From: yml2213 Date: Tue, 18 Aug 2026 15:24:30 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=8B=BC=E5=8D=95=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E8=87=AA=E5=8A=A8=E5=8C=B9=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../services/worker-platform/admin-service.ts | 2 +- .../pages/admin/panels/ProductRulesPanel.tsx | 52 ++++++++++++------- 2 files changed, 33 insertions(+), 21 deletions(-) diff --git a/apps/backend/src/services/worker-platform/admin-service.ts b/apps/backend/src/services/worker-platform/admin-service.ts index b6a5c2fc..0845f18c 100644 --- a/apps/backend/src/services/worker-platform/admin-service.ts +++ b/apps/backend/src/services/worker-platform/admin-service.ts @@ -628,7 +628,7 @@ export async function saveAdminWorkProductRule(payload: JsonObject = {}) { sharingEnabled && unitPriceFen > 0 && (normalizeBoolean(payload.sharingAutoFromOrder ?? payload.sharing_auto_from_order, false) || - (!hasManualSharingConfig && existingRule?.sharing_auto_from_order !== false)) + !hasManualSharingConfig) const hasManualSharingQuantity = hasConfiguredSharingValue( payload.sharingTotalQuantity ?? payload.sharing_total_quantity, ) diff --git a/apps/frontend/src/pages/admin/panels/ProductRulesPanel.tsx b/apps/frontend/src/pages/admin/panels/ProductRulesPanel.tsx index a2ac8eaa..32477ee6 100644 --- a/apps/frontend/src/pages/admin/panels/ProductRulesPanel.tsx +++ b/apps/frontend/src/pages/admin/panels/ProductRulesPanel.tsx @@ -97,6 +97,10 @@ export default function ProductRulesPanel() { function editRule(rule: WorkProductRule) { setEditingRule(rule) + const hasManualSharingOverride = hasManualSharingInput( + rule.sharing?.totalQuantity, + rule.sharing?.unitReward, + ) form.setFieldsValue({ provider: rule.provider, platform: rule.platform, @@ -119,15 +123,13 @@ export default function ProductRulesPanel() { unitPrice: rule.unitPriceFen / 100, sharingEnabled: rule.sharing?.enabled || false, sharingAutoFromOrder: rule.sharing?.autoFromOrder || false, - sharingTotalQuantity: rule.sharing?.autoFromOrder - ? undefined - : rule.sharing?.totalQuantity || 1, - sharingUnitReward: rule.sharing?.autoFromOrder - ? undefined - : (rule.sharing?.unitReward || 0) / 100, - sharingTotalAmount: rule.sharing?.autoFromOrder - ? undefined - : ((rule.sharing?.totalQuantity || 1) * (rule.sharing?.unitReward || 0)) / 100, + sharingTotalQuantity: hasManualSharingOverride ? rule.sharing?.totalQuantity : undefined, + sharingUnitReward: hasManualSharingOverride + ? (rule.sharing?.unitReward || 0) / 100 + : undefined, + sharingTotalAmount: hasManualSharingOverride + ? ((rule.sharing?.totalQuantity || 1) * (rule.sharing?.unitReward || 0)) / 100 + : undefined, timeoutMinutes: rule.timeoutMinutes || 0, timeoutPolicy: rule.timeoutPolicy || 'reopen', fieldsText: formatRuleFields(rule.requirement?.fields || []), @@ -174,7 +176,10 @@ export default function ProductRulesPanel() { try { const unitMode = values.pricingMode === 'unit' const hasManualSharingOverride = - Number(values.sharingTotalQuantity || 0) > 0 || Number(values.sharingUnitReward || 0) > 0 + form.isFieldTouched('sharingTotalQuantity') || form.isFieldTouched('sharingUnitReward') + ? Number(values.sharingTotalQuantity || 0) > 0 || + Number(values.sharingUnitReward || 0) > 0 + : hasManualSharingInput(values.sharingTotalQuantity, values.sharingUnitReward) const { pricingMode: _pricingMode, ...payload } = values await saveAdminWorkProductRule({ ...payload, @@ -202,6 +207,10 @@ export default function ProductRulesPanel() { async function toggleRuleEnabled(rule: WorkProductRule, enabled: boolean) { try { + const hasManualSharingOverride = hasManualSharingInput( + rule.sharing?.totalQuantity, + rule.sharing?.unitReward, + ) await saveAdminWorkProductRule({ ruleId: rule.ruleId, ruleKey: rule.ruleKey, @@ -216,16 +225,15 @@ export default function ProductRulesPanel() { rewardAmount: rule.rewardAmount / 100, unitPrice: rule.unitPriceFen / 100, sharingEnabled: rule.sharing?.enabled || false, - sharingAutoFromOrder: rule.sharing?.autoFromOrder || false, - sharingTotalQuantity: rule.sharing?.autoFromOrder - ? undefined - : rule.sharing?.totalQuantity || 1, - sharingUnitReward: rule.sharing?.autoFromOrder - ? undefined - : (rule.sharing?.unitReward || 0) / 100, - sharingTotalAmount: rule.sharing?.autoFromOrder - ? undefined - : ((rule.sharing?.totalQuantity || 1) * (rule.sharing?.unitReward || 0)) / 100, + sharingAutoFromOrder: + rule.unitPriceFen > 0 && rule.sharing?.enabled === true && !hasManualSharingOverride, + sharingTotalQuantity: hasManualSharingOverride ? rule.sharing?.totalQuantity : undefined, + sharingUnitReward: hasManualSharingOverride + ? (rule.sharing?.unitReward || 0) / 100 + : undefined, + sharingTotalAmount: hasManualSharingOverride + ? ((rule.sharing?.totalQuantity || 1) * (rule.sharing?.unitReward || 0)) / 100 + : undefined, timeoutMinutes: rule.timeoutMinutes || 0, timeoutPolicy: rule.timeoutPolicy || 'reopen', fieldsText: formatRuleFields(rule.requirement?.fields || []), @@ -785,3 +793,7 @@ function formatRuleFields(fields: CollectField[]) { }) .join('\n') } + +function hasManualSharingInput(quantity: unknown, unitRewardFen: unknown) { + return Number(quantity || 0) > 1 || Number(unitRewardFen || 0) > 0 +}