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) {
+ 发布总价 = 纯币基础价 + 额外消耗品;只有标记为“收费”的消耗品会计入价格。 +