diff --git a/backend/internal/modules/chat/listing_group.go b/backend/internal/modules/chat/listing_group.go index 6ae9683..3b11798 100644 --- a/backend/internal/modules/chat/listing_group.go +++ b/backend/internal/modules/chat/listing_group.go @@ -316,7 +316,7 @@ func checkQrCodeStockAndAlert(tx *gorm.DB, conversation *model.ChatConversation) alertContent := fmt.Sprintf("企业微信群二维码库存不足(剩余 %d 张),请及时补充", count) // 发送站内信给所有客服 - var entries []interface{} + entries := make([]map[string]interface{}, 0, len(csAdmins)) now := time.Now() for _, admin := range csAdmins { entries = append(entries, map[string]interface{}{ diff --git a/frontend/src/features/seller/composables/usePublishDraft.ts b/frontend/src/features/seller/composables/usePublishDraft.ts index 303ce33..e085099 100644 --- a/frontend/src/features/seller/composables/usePublishDraft.ts +++ b/frontend/src/features/seller/composables/usePublishDraft.ts @@ -89,8 +89,9 @@ function normalizeDraftForm(value: unknown): PublishForm { next.common_regions = Array.isArray(value.common_regions) ? value.common_regions.filter((region): region is string => typeof region === 'string') : [] - // 默认使用参考比例:如果草稿中的 accelerated_sale_ratio 是 0 或未设置,重置为空字符串 - if (!next.accelerated_sale_ratio || next.accelerated_sale_ratio === 0) { + // 默认使用参考比例:如果草稿中的 accelerated_sale_ratio 是 0、未设置或非法值,重置为空字符串 + const acceleratedRatio = Number(next.accelerated_sale_ratio) + if (!Number.isFinite(acceleratedRatio) || acceleratedRatio <= 0) { next.accelerated_sale_ratio = '' } if (next.haf_coin_amount === 0) next.haf_coin_amount = '' diff --git a/frontend/src/features/seller/views/SellerListingCreateView.vue b/frontend/src/features/seller/views/SellerListingCreateView.vue index d9dc872..fbc1c49 100644 --- a/frontend/src/features/seller/views/SellerListingCreateView.vue +++ b/frontend/src/features/seller/views/SellerListingCreateView.vue @@ -566,7 +566,7 @@ function selectDailyLoss(value: string | number) { class="ratio-mode-btn" :class="{ active: - form.accelerated_sale_ratio === maxAcceleratedSaleRatio && + Number(form.accelerated_sale_ratio) === maxAcceleratedSaleRatio && maxAcceleratedSaleRatio > 0, }" :disabled="maxAcceleratedSaleRatio <= 0" @@ -584,7 +584,7 @@ function selectDailyLoss(value: string | number) { :class="{ active: hasAcceleratedSaleRatioInput() && - form.accelerated_sale_ratio !== maxAcceleratedSaleRatio, + Number(form.accelerated_sale_ratio) !== maxAcceleratedSaleRatio, }" > 自定比例 diff --git a/frontend/src/shared/utils/pricing.ts b/frontend/src/shared/utils/pricing.ts index 6035365..03440d2 100644 --- a/frontend/src/shared/utils/pricing.ts +++ b/frontend/src/shared/utils/pricing.ts @@ -170,8 +170,9 @@ export function readFinalSaleRatio( return roundRatio(Math.min(Math.max(ratio, defaultRatio), maxAcceleratedSaleRatio)) } -export function hasAcceleratedSaleRatioInput(value: number | '') { - return value !== '' && value !== null +export function hasAcceleratedSaleRatioInput(value: number | '' | null | undefined) { + const ratio = Number(value) + return value !== '' && value !== null && value !== undefined && Number.isFinite(ratio) && ratio > 0 } export function calculatePlatformPricing(options: {