优化历史包袱,修复发布页面默认0 恢哈伏笔

This commit is contained in:
yml2213
2026-05-23 09:41:45 +08:00
parent d1f46fd02e
commit 40f5252b2e
12 changed files with 101 additions and 335 deletions
+14 -49
View File
@@ -13,8 +13,6 @@ export interface ListingDisplayResource {
}
export function getCoinWan(item: Listing) {
const assetCoin = readAssetNumber(item, "haf_coin_wan");
if (assetCoin > 0) return assetCoin;
return Math.round(Number(item.haf_coin_amount || 0) / 10000);
}
@@ -29,8 +27,6 @@ export function formatHafCoinM(amountWan: number) {
}
export function getListingDisplayPrice(item: Listing) {
const assetPrice = readAssetNumber(item, "price");
if (assetPrice > 0) return assetPrice;
const rentDays = getRentDays(item);
if (rentDays > 0 && item.price_daily > 0) {
return roundMoney(item.price_daily * rentDays);
@@ -39,15 +35,11 @@ export function getListingDisplayPrice(item: Listing) {
}
export function getRentDays(item: Listing) {
const assetDays = readAssetNumber(item, "rent_days");
if (assetDays > 0) return assetDays;
if (item.max_rent_hours >= 24) return Math.max(Math.round(item.max_rent_hours / 24), 1);
return 1;
}
export function getRatioValue(item: Listing) {
const ratio = readAssetNumber(item, "ratio");
if (ratio > 0) return ratio;
const price = getListingDisplayPrice(item);
if (price <= 0) return 0;
return getCoinWan(item) / price;
@@ -65,11 +57,11 @@ export function getValuePerYuanText(item: Listing) {
}
export function getLoginMethod(item: Listing) {
return normalizeLoginMethod(readAssetString(item, "login_method") || item.login_platform);
return item.login_platform.trim();
}
export function getServerRegion(item: Listing) {
return normalizeServerRegion(item.server_region);
return item.server_region.trim();
}
export function getListingTitle(item: Listing) {
@@ -134,8 +126,7 @@ export function getListingResources(item: Listing): ListingDisplayResource[] {
}
export function getResourceQuantity(item: Listing, resourceKey: string) {
const keys = getResourceKeyAliases(resourceKey);
return getListingResources(item).find((resource) => keys.includes(resource.key))?.quantity || 0;
return getListingResources(item).find((resource) => resource.key === resourceKey)?.quantity || 0;
}
export function hasGiftResources(item: Listing) {
@@ -158,13 +149,10 @@ export function getSkinGroup(item: Listing, groupKey: string) {
export function getSkinNames(item: Listing) {
const skinGroups = item.asset_summary?.skin_groups;
if (typeof skinGroups === "object" && skinGroups !== null) {
return Object.values(skinGroups as Record<string, unknown>)
.flatMap((group) => (Array.isArray(group) ? group : []))
.filter((skin): skin is string => typeof skin === "string");
}
const skins = item.asset_summary?.skins;
return Array.isArray(skins) ? skins.filter((skin): skin is string => typeof skin === "string") : [];
if (typeof skinGroups !== "object" || skinGroups === null) return [];
return Object.values(skinGroups as Record<string, unknown>)
.flatMap((group) => (Array.isArray(group) ? group : []))
.filter((skin): skin is string => typeof skin === "string");
}
export function assetRegions(item: Listing) {
@@ -174,13 +162,6 @@ export function assetRegions(item: Listing) {
: [];
}
export function getScreenshotMap(item: Listing) {
const screenshots = item.asset_summary?.screenshots;
return typeof screenshots === "object" && screenshots !== null
? (screenshots as Record<string, unknown>)
: {};
}
export function getOnlineTimeText(item: Listing) {
const onlineTime = item.asset_summary?.online_time;
if (typeof onlineTime !== "object" || onlineTime === null) return "";
@@ -190,6 +171,13 @@ export function getOnlineTimeText(item: Listing) {
return `${start.replace(":00", "")}-${end.replace(":00", "")}点`;
}
export function getDailyLoss(item: Listing) {
const coinWan = getCoinWan(item);
if (coinWan >= 30000) return "30M";
if (coinWan >= 10000) return "20M";
return "10M";
}
export function readAssetString(item: Listing, key: string) {
const value = item.asset_summary?.[key];
return typeof value === "string" ? value : "";
@@ -208,23 +196,6 @@ function readUnknownNumber(value: unknown) {
return 0;
}
export function normalizeServerRegion(value: string) {
const text = value.trim();
const upper = text.toUpperCase();
if (upper.includes("STEAM")) return "Steam";
if (upper.includes("QQ")) return "QQ";
if (text.includes("微信")) return "微信";
return text;
}
export function normalizeLoginMethod(value: string) {
const text = value.trim();
if (!text) return "";
if (text.includes("扫码")) return "扫码";
if (text.includes("账密") || text.includes("账号密码")) return "账号密码";
return text;
}
function formatInsuranceSlotText(value: string) {
const parts = value.split("*").map((item) => Number(item));
const rows = parts[0] || 0;
@@ -245,12 +216,6 @@ function formatResourceShort(item: Listing, key: string, label: string) {
return quantity > 0 ? `${quantity}${label}` : "";
}
function getResourceKeyAliases(key: string) {
if (key === "level6Ammo") return ["level6Ammo", "armor6Ammo"];
if (key === "armor6Ammo") return ["armor6Ammo", "level6Ammo"];
return [key];
}
function roundMoney(value: number) {
return Math.round(value * 100) / 100;
}