diff --git a/backend/internal/modules/systemconfig/publish_options.go b/backend/internal/modules/systemconfig/publish_options.go index 0ac6e29..19d3fc5 100644 --- a/backend/internal/modules/systemconfig/publish_options.go +++ b/backend/internal/modules/systemconfig/publish_options.go @@ -84,7 +84,7 @@ func DefaultPublishOptions() PublishOptionsDTO { FireLevelMin: 38, PriceConfig: PublishPriceConfig{ DepositPlaceholder: "温馨提示:本押金用于保障账号安全。若买家在租用期间,使用非纯币类道具/资源(如消耗品、材料等)或导致账号被封禁,相关损失将直接从押金中扣除进行赔付。押金过高会延长出租等待时间(请自行衡量)感谢理解。", - PricePlaceholder: "填写币数、保险、体力和负重后自动计算", + PricePlaceholder: "填写币数、保险、体力和负重后自动计算;发布总价=纯币基础价+额外消耗品", RatioDescription: "1:xx 表示 1 元人民币(RMB)等价兑换 xx 万哈夫币", }, RatioConfig: PublishRatioConfig{ diff --git a/frontend/src/views/mobile/MobileSellerListingCreateView.css b/frontend/src/views/mobile/MobileSellerListingCreateView.css index 0515dde..4ec19dd 100644 --- a/frontend/src/views/mobile/MobileSellerListingCreateView.css +++ b/frontend/src/views/mobile/MobileSellerListingCreateView.css @@ -498,6 +498,17 @@ font-weight: 800; } +.total-price-field :deep(.van-field__control) { + font-size: 16px; +} + +.price-breakdown-hint { + margin: -2px 0 10px; + color: #858c96; + font-size: 11px; + line-height: 1.5; +} + .publish-actions { display: grid; grid-template-columns: 92px minmax(0, 1fr); diff --git a/frontend/src/views/mobile/MobileSellerListingCreateView.vue b/frontend/src/views/mobile/MobileSellerListingCreateView.vue index b00bfe9..02db889 100644 --- a/frontend/src/views/mobile/MobileSellerListingCreateView.vue +++ b/frontend/src/views/mobile/MobileSellerListingCreateView.vue @@ -128,10 +128,13 @@ const screenshotUrls = computed(() => const coinMAmount = computed(() => Number(form.haf_coin_amount || 0)); const coinWanAmount = computed(() => coinMAmount.value * 100); const calculatedRatio = computed(() => calculatePublishRatio()); +const calculatedCoinBasePrice = computed(() => + calculatedRatio.value > 0 ? roundMoney(coinWanAmount.value / calculatedRatio.value) : 0 +); const calculatedConsumablePrice = computed(() => calculateConsumablePrice()); const calculatedFinalPrice = computed(() => calculatedRatio.value > 0 - ? roundMoney(coinWanAmount.value / calculatedRatio.value + calculatedConsumablePrice.value) + ? roundMoney(calculatedCoinBasePrice.value + calculatedConsumablePrice.value) : 0 ); const calculatedRatioText = computed(() => @@ -439,12 +442,19 @@ function buildAssetSummary() { secret_kd: form.secret_kd, fire_level: Number(form.fire_level), publish_ratio: calculatedRatio.value, + price_breakdown: { + coin_base_price: calculatedCoinBasePrice.value, + consumable_price: calculatedConsumablePrice.value, + final_price: calculatedFinalPrice.value, + ratio: calculatedRatio.value, + }, season_insurance: form.season_insurance, stamina_level: form.stamina_level, load_level: form.load_level, resources: quantityItems.value.map((item) => ({ key: item.key, label: item.label, + price: item.price, quantity: Number(quantityValues[item.key] || 0), mode: quantityModes[item.key] || "收费", })), @@ -921,18 +931,35 @@ function readError(error: unknown, fallback: string) { + + +

+ 发布总价 = 纯币基础价 + 额外消耗品;只有标记为“收费”的消耗品会计入价格。 +