topfans/frontend/pages/square/config/mockData.js
2026-05-08 14:15:18 +08:00

307 lines
18 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// ========== 模拟数据配置 ==========
// 是否使用模拟数据(开发调试时设为 true上线后改为 false
export const USE_MOCK_DATA = true
// 模拟图片列表
const MOCK_IMAGES = [
'/static/sucai/image-01.png',
'/static/sucai/image-02.png',
'/static/sucai/image-03.png',
'/static/sucai/image-04.png',
'/static/sucai/image-05.png',
'/static/sucai/image-06.png',
'/static/sucai/image-07.png',
'/static/sucai/image-08.png',
'/static/sucai/image-09.png',
'/static/sucai/image-10.png',
'/static/sucai/image-11.png',
'/static/sucai/image-12.png',
'/static/sucai/image-13.png',
'/static/sucai/image-14.png',
'/static/sucai/image-15.png',
'/static/sucai/image-16.png',
'/static/sucai/image-17.png',
'/static/sucai/image-18.png',
'/static/sucai/image-19.png',
'/static/sucai/image-20.png',
'/static/sucai/image-21.png',
'/static/sucai/image-22.png',
'/static/sucai/image-23.png',
'/static/sucai/image-24.png',
'/static/sucai/image-25.png',
'/static/sucai/image-26.png',
'/static/sucai/image-27.png',
'/static/sucai/image-28.png',
'/static/sucai/image-29.png',
'/static/sucai/image-30.png',
'/static/sucai/image-31.png',
'/static/sucai/image-32.png',
'/static/sucai/image-33.png',
'/static/sucai/image-34.png',
'/static/sucai/image-35.png',
'/static/sucai/image-36.png',
'/static/sucai/image-37.png',
'/static/sucai/image-38.png',
'/static/sucai/image-39.png',
'/static/sucai/image-40.png',
'/static/sucai/image-41.png',
'/static/sucai/image-42.png',
'/static/sucai/image-43.png',
'/static/sucai/image-44.png',
'/static/sucai/image-45.png',
'/static/sucai/image-46.png',
'/static/sucai/image-47.png',
'/static/sucai/image-48.png',
'/static/sucai/image-49.png',
'/static/sucai/image-50.png',
'/static/sucai/image-51.png',
'/static/sucai/image-52.png',
'/static/sucai/image-53.png',
]
// 模拟昵称列表
const NICKNAMES = [
'小明', '小红', '小刚', '小芳', '小强', '小美', '小华', '小丽',
'小杰', '小婷', '小宇', '小雪', '小晨', '小曦', '小雷', '小明',
'小风', '小月', '小星', '小云', '小河', '小涛', '小琳', '小瑶',
]
// ========== 分类 span 阈值配置 ==========
// 每个分类有不同的 span 计算规则
export const SPAN_CONFIG = {
// 统一 span 阈值
hot: {
thresholds: [
{ max: 30, span: 1 }, // 0-30 → span 1
{ max: 100, span: 2 }, // 31-100 → span 2
{ max: 200, span: 3 }, // 101-200 → span 3
{ max: Infinity, span: 4 }, // 200+ → span 4
]
},
new: {
thresholds: [
{ max: 30, span: 1 }, // 0-30 → span 1
{ max: 100, span: 2 }, // 31-100 → span 2
{ max: 200, span: 3 }, // 101-200 → span 3
{ max: Infinity, span: 4 }, // 200+ → span 4
]
},
potential: {
thresholds: [
{ max: 30, span: 1 }, // 0-30 → span 1
{ max: 100, span: 2 }, // 31-100 → span 2
{ max: 200, span: 3 }, // 101-200 → span 3
{ max: Infinity, span: 4 }, // 200+ → span 4
]
},
random: {
thresholds: [
{ max: 30, span: 1 }, // 0-30 → span 1
{ max: 100, span: 2 }, // 31-100 → span 2
{ max: 200, span: 3 }, // 101-200 → span 3
{ max: Infinity, span: 4 }, // 200+ → span 4
]
},
}
// 根据分类和点赞数计算 span
export function calcSpan(category, likes) {
const config = SPAN_CONFIG[category] || SPAN_CONFIG.hot
for (const t of config.thresholds) {
if (likes < t.max) return t.span
}
return 1
}
// ========== 人气王者 - 高点赞热门作品 ==========
// span 由 WaterfallGrid._span() 根据 like_count 计算
export const MOCK_RENQIWANG = {
items: [
{ asset_id: 10001, name: '星光璀璨', cover_url: MOCK_IMAGES[0], like_count: 250, owner_nickname: '小甜心' },
{ asset_id: 10002, name: '爱的绽放', cover_url: MOCK_IMAGES[1], like_count: 220, owner_nickname: '爱豆粉' },
{ asset_id: 10003, name: '温暖守护', cover_url: MOCK_IMAGES[2], like_count: 200, owner_nickname: '星星控' },
{ asset_id: 10004, name: '甜蜜暴击', cover_url: MOCK_IMAGES[3], like_count: 180, owner_nickname: '追星族' },
{ asset_id: 10005, name: '闪耀舞台', cover_url: MOCK_IMAGES[4], like_count: 150, owner_nickname: '小太阳' },
{ asset_id: 10006, name: '为你疯狂', cover_url: MOCK_IMAGES[5], like_count: 120, owner_nickname: '小可爱' },
{ asset_id: 10007, name: '心动时刻', cover_url: MOCK_IMAGES[6], like_count: 100, owner_nickname: '小天使' },
{ asset_id: 10008, name: '永相随', cover_url: MOCK_IMAGES[7], like_count: 80, owner_nickname: '小甜豆' },
{ asset_id: 10009, name: '粉红泡泡', cover_url: MOCK_IMAGES[8], like_count: 70, owner_nickname: '小迷糊' },
{ asset_id: 10010, name: '爱的力量', cover_url: MOCK_IMAGES[9], like_count: 60, owner_nickname: '小幸运' },
{ asset_id: 10011, name: '璀璨星河', cover_url: MOCK_IMAGES[10], like_count: 55, owner_nickname: '小浪漫' },
{ asset_id: 10012, name: '梦幻泡影', cover_url: MOCK_IMAGES[11], like_count: 50, owner_nickname: '小确幸' },
{ asset_id: 10013, name: '温柔以待', cover_url: MOCK_IMAGES[12], like_count: 45, owner_nickname: '小清新' },
{ asset_id: 10014, name: '心动信号', cover_url: MOCK_IMAGES[13], like_count: 40, owner_nickname: '小俏皮' },
{ asset_id: 10015, name: '甜蜜时光', cover_url: MOCK_IMAGES[14], like_count: 38, owner_nickname: '小温柔' },
{ asset_id: 10016, name: '爱在当下', cover_url: MOCK_IMAGES[15], like_count: 35, owner_nickname: '小热情' },
{ asset_id: 10017, name: '幸福味道', cover_url: MOCK_IMAGES[16], like_count: 32, owner_nickname: '小甜蜜' },
{ asset_id: 10018, name: '心动不已', cover_url: MOCK_IMAGES[17], like_count: 30, owner_nickname: '小心动' },
{ asset_id: 10019, name: '爱的告白', cover_url: MOCK_IMAGES[18], like_count: 28, owner_nickname: '小勇敢' },
{ asset_id: 10020, name: '粉色回忆', cover_url: MOCK_IMAGES[19], like_count: 25, owner_nickname: '小怀念' },
{ asset_id: 10021, name: '暖暖情谊', cover_url: MOCK_IMAGES[20], like_count: 23, owner_nickname: '小温情' },
{ asset_id: 10022, name: '心动瞬间', cover_url: MOCK_IMAGES[21], like_count: 22, owner_nickname: '小美好' },
],
cursor: 'renqiwang_cursor_001',
has_more: true,
session_id: 'renqiwang_session',
}
// ========== 新鲜上架 - 新发布作品,点赞较低 ==========
export const MOCK_XINXIANSHANG = {
items: [
{ asset_id: 30001, name: '刚刚发布', cover_url: MOCK_IMAGES[27], like_count: 28, owner_nickname: '新手小白' },
{ asset_id: 30002, name: '今日新鲜', cover_url: MOCK_IMAGES[28], like_count: 25, owner_nickname: '小萌新' },
{ asset_id: 30003, name: '刚出锅', cover_url: MOCK_IMAGES[29], like_count: 22, owner_nickname: '新来的' },
{ asset_id: 30004, name: '热乎的', cover_url: MOCK_IMAGES[30], like_count: 20, owner_nickname: '小试牛刀' },
{ asset_id: 30005, name: '新品上市', cover_url: MOCK_IMAGES[31], like_count: 18, owner_nickname: '初来乍到' },
{ asset_id: 30006, name: '今日首发', cover_url: MOCK_IMAGES[32], like_count: 15, owner_nickname: '小透明' },
{ asset_id: 30007, name: '刚出炉', cover_url: MOCK_IMAGES[33], like_count: 12, owner_nickname: '新手村' },
{ asset_id: 30008, name: '最新创作', cover_url: MOCK_IMAGES[34], like_count: 10, owner_nickname: '小画师' },
{ asset_id: 30009, name: '新鲜出炉', cover_url: MOCK_IMAGES[35], like_count: 8, owner_nickname: '小创作者' },
{ asset_id: 30010, name: '首发作品', cover_url: MOCK_IMAGES[36], like_count: 5, owner_nickname: '小练手' },
{ asset_id: 30011, name: '全新上线', cover_url: MOCK_IMAGES[37], like_count: 3, owner_nickname: '新起步' },
{ asset_id: 30012, name: '新星登场', cover_url: MOCK_IMAGES[38], like_count: 2, owner_nickname: '小新人' },
{ asset_id: 30013, name: '首发惊喜', cover_url: MOCK_IMAGES[39], like_count: 1, owner_nickname: '小惊喜' },
{ asset_id: 30014, name: '今日上新', cover_url: MOCK_IMAGES[40], like_count: 0, owner_nickname: '小上新' },
{ asset_id: 30015, name: '新作出炉', cover_url: MOCK_IMAGES[41], like_count: 0, owner_nickname: '小出炉' },
{ asset_id: 30016, name: '新鲜血液', cover_url: MOCK_IMAGES[42], like_count: 0, owner_nickname: '小新鲜' },
{ asset_id: 30017, name: '最新面世', cover_url: MOCK_IMAGES[43], like_count: 0, owner_nickname: '小面世' },
{ asset_id: 30018, name: '全新创作', cover_url: MOCK_IMAGES[44], like_count: 0, owner_nickname: '小全新' },
{ asset_id: 30019, name: '新晋发布', cover_url: MOCK_IMAGES[45], like_count: 0, owner_nickname: '小晋发布' },
{ asset_id: 30020, name: '新潮上线', cover_url: MOCK_IMAGES[46], like_count: 0, owner_nickname: '小潮人' },
{ asset_id: 30021, name: '新锐登场', cover_url: MOCK_IMAGES[47], like_count: 0, owner_nickname: '小锐气' },
{ asset_id: 30022, name: '新意满满', cover_url: MOCK_IMAGES[48], like_count: 0, owner_nickname: '小意新' },
{ asset_id: 30023, name: '新潮涌动', cover_url: MOCK_IMAGES[49], like_count: 0, owner_nickname: '小涌动' },
{ asset_id: 30024, name: '新鲜感', cover_url: MOCK_IMAGES[50], like_count: 0, owner_nickname: '小感新' },
{ asset_id: 30025, name: '新视角', cover_url: MOCK_IMAGES[51], like_count: 0, owner_nickname: '小视角' },
{ asset_id: 30026, name: '新派作品', cover_url: MOCK_IMAGES[52], like_count: 0, owner_nickname: '小派新' },
{ asset_id: 30027, name: '新星璀璨', cover_url: MOCK_IMAGES[0], like_count: 0, owner_nickname: '小璀璨' },
],
cursor: 'xinxianshang_cursor_001',
has_more: true,
session_id: 'xinxianshang_session',
}
// ========== 潜力之星 - 中等点赞有潜力的作品 ==========
export const MOCK_QIANLIXING = {
items: [
{ asset_id: 20001, name: '初露锋芒', cover_url: MOCK_IMAGES[0], like_count: 200, owner_nickname: '小新芽' },
{ asset_id: 20002, name: '蓄势待发', cover_url: MOCK_IMAGES[3], like_count: 180, owner_nickname: '小嫩草' },
{ asset_id: 20003, name: '冉冉升起', cover_url: MOCK_IMAGES[6], like_count: 150, owner_nickname: '小泡泡' },
{ asset_id: 20004, name: '明日之星', cover_url: MOCK_IMAGES[9], like_count: 120, owner_nickname: '小火苗' },
{ asset_id: 20005, name: '潜力无限', cover_url: MOCK_IMAGES[12], like_count: 100, owner_nickname: '小萌芽' },
{ asset_id: 20006, name: '闪耀新星', cover_url: MOCK_IMAGES[15], like_count: 80, owner_nickname: '小水滴' },
{ asset_id: 20007, name: '小荷才露', cover_url: MOCK_IMAGES[18], like_count: 65, owner_nickname: '小竹笋' },
{ asset_id: 20008, name: '锋芒初现', cover_url: MOCK_IMAGES[21], like_count: 55, owner_nickname: '小鸽子' },
{ asset_id: 20009, name: '闪闪发光', cover_url: MOCK_IMAGES[24], like_count: 45, owner_nickname: '小萤火' },
{ asset_id: 20010, name: '未来可期', cover_url: MOCK_IMAGES[27], like_count: 38, owner_nickname: '小芽芽' },
{ asset_id: 20011, name: '新秀登场', cover_url: MOCK_IMAGES[30], like_count: 32, owner_nickname: '小藤蔓' },
{ asset_id: 20012, name: '星火燎原', cover_url: MOCK_IMAGES[33], like_count: 28, owner_nickname: '小火种' },
{ asset_id: 20013, name: '曙光初现', cover_url: MOCK_IMAGES[36], like_count: 24, owner_nickname: '小曙光' },
{ asset_id: 20014, name: '新光乍现', cover_url: MOCK_IMAGES[39], like_count: 20, owner_nickname: '小新光' },
{ asset_id: 20015, name: '萌芽破土', cover_url: MOCK_IMAGES[42], like_count: 18, owner_nickname: '小破土' },
{ asset_id: 20016, name: '蓄力绽放', cover_url: MOCK_IMAGES[45], like_count: 16, owner_nickname: '小蓄力' },
{ asset_id: 20017, name: '初绽光芒', cover_url: MOCK_IMAGES[48], like_count: 14, owner_nickname: '小初绽' },
{ asset_id: 20018, name: '潜力萌发', cover_url: MOCK_IMAGES[51], like_count: 12, owner_nickname: '小萌发' },
{ asset_id: 20019, name: '新生力量', cover_url: MOCK_IMAGES[1], like_count: 11, owner_nickname: '小新力' },
],
cursor: 'qianlixing_cursor_001',
has_more: true,
session_id: 'qianlixing_session',
}
// ========== 随机寻宝 - 随机混合数据(全局打乱) ==========
export const MOCK_SUIJIXUNBAO = {
items: [
{ asset_id: 40018, name: '神秘宝藏18', cover_url: MOCK_IMAGES[17], like_count: 35, owner_nickname: '淘宝新手' },
{ asset_id: 40005, name: '神秘宝藏5', cover_url: MOCK_IMAGES[4], like_count: 140, owner_nickname: '挖宝专家' },
{ asset_id: 40031, name: '神秘宝藏31', cover_url: MOCK_IMAGES[30], like_count: 0, owner_nickname: '寻宝小兵' },
{ asset_id: 40012, name: '神秘宝藏12', cover_url: MOCK_IMAGES[11], like_count: 68, owner_nickname: '寻宝新手' },
{ asset_id: 40002, name: '神秘宝藏2', cover_url: MOCK_IMAGES[1], like_count: 210, owner_nickname: '探险家' },
{ asset_id: 40025, name: '神秘宝藏25', cover_url: MOCK_IMAGES[24], like_count: 12, owner_nickname: '捡漏小兵' },
{ asset_id: 40009, name: '神秘宝藏9', cover_url: MOCK_IMAGES[8], like_count: 95, owner_nickname: '寻宝奇兵' },
{ asset_id: 40036, name: '神秘宝藏36', cover_url: MOCK_IMAGES[35], like_count: 0, owner_nickname: '挖宝学徒' },
{ asset_id: 40020, name: '神秘宝藏20', cover_url: MOCK_IMAGES[19], like_count: 28, owner_nickname: '寻宝小白' },
{ asset_id: 40007, name: '神秘宝藏7', cover_url: MOCK_IMAGES[6], like_count: 110, owner_nickname: '淘宝达人' },
{ asset_id: 40033, name: '神秘宝藏33', cover_url: MOCK_IMAGES[32], like_count: 0, owner_nickname: '捡漏小兵' },
{ asset_id: 40014, name: '神秘宝藏14', cover_url: MOCK_IMAGES[13], like_count: 55, owner_nickname: '捡漏高手' },
{ asset_id: 40001, name: '神秘宝藏1', cover_url: MOCK_IMAGES[0], like_count: 230, owner_nickname: '寻宝达人' },
{ asset_id: 40028, name: '神秘宝藏28', cover_url: MOCK_IMAGES[27], like_count: 5, owner_nickname: '寻宝新手' },
{ asset_id: 40022, name: '神秘宝藏22', cover_url: MOCK_IMAGES[21], like_count: 22, owner_nickname: '挖宝新手' },
{ asset_id: 40010, name: '神秘宝藏10', cover_url: MOCK_IMAGES[9], like_count: 88, owner_nickname: '淘宝猎人' },
{ asset_id: 40035, name: '神秘宝藏35', cover_url: MOCK_IMAGES[34], like_count: 0, owner_nickname: '淘宝学徒' },
{ asset_id: 40016, name: '神秘宝藏16', cover_url: MOCK_IMAGES[15], like_count: 42, owner_nickname: '淘宝猎手' },
{ asset_id: 40003, name: '神秘宝藏3', cover_url: MOCK_IMAGES[2], like_count: 185, owner_nickname: '淘宝高手' },
{ asset_id: 40029, name: '神秘宝藏29', cover_url: MOCK_IMAGES[28], like_count: 3, owner_nickname: '淘宝新手' },
{ asset_id: 40008, name: '神秘宝藏8', cover_url: MOCK_IMAGES[7], like_count: 105, owner_nickname: '猎奇者' },
{ asset_id: 40024, name: '神秘宝藏24', cover_url: MOCK_IMAGES[23], like_count: 15, owner_nickname: '淘宝小兵' },
{ asset_id: 40011, name: '神秘宝藏11', cover_url: MOCK_IMAGES[10], like_count: 75, owner_nickname: '挖宝小分队' },
{ asset_id: 40034, name: '神秘宝藏34', cover_url: MOCK_IMAGES[33], like_count: 0, owner_nickname: '寻宝学徒' },
{ asset_id: 40019, name: '神秘宝藏19', cover_url: MOCK_IMAGES[18], like_count: 32, owner_nickname: '捡漏新手' },
{ asset_id: 40030, name: '神秘宝藏30', cover_url: MOCK_IMAGES[29], like_count: 2, owner_nickname: '挖宝新手' },
{ asset_id: 40006, name: '神秘宝藏6', cover_url: MOCK_IMAGES[5], like_count: 120, owner_nickname: '收藏家' },
{ asset_id: 40027, name: '神秘宝藏27', cover_url: MOCK_IMAGES[26], like_count: 8, owner_nickname: '淘宝学徒' },
{ asset_id: 40013, name: '神秘宝藏13', cover_url: MOCK_IMAGES[12], like_count: 62, owner_nickname: '淘宝收藏家' },
{ asset_id: 40032, name: '神秘宝藏32', cover_url: MOCK_IMAGES[31], like_count: 0, owner_nickname: '淘宝小兵' },
{ asset_id: 40004, name: '神秘宝藏4', cover_url: MOCK_IMAGES[3], like_count: 160, owner_nickname: '捡漏王' },
{ asset_id: 40021, name: '神秘宝藏21', cover_url: MOCK_IMAGES[20], like_count: 25, owner_nickname: '淘宝小白' },
{ asset_id: 40023, name: '神秘宝藏23', cover_url: MOCK_IMAGES[22], like_count: 18, owner_nickname: '寻宝小兵' },
{ asset_id: 40017, name: '神秘宝藏17', cover_url: MOCK_IMAGES[16], like_count: 38, owner_nickname: '寻宝菜鸟' },
{ asset_id: 40026, name: '神秘宝藏26', cover_url: MOCK_IMAGES[25], like_count: 10, owner_nickname: '寻宝学徒' },
{ asset_id: 40015, name: '神秘宝藏15', cover_url: MOCK_IMAGES[14], like_count: 48, owner_nickname: '寻宝老手' },
],
cursor: 'suijixunbao_cursor_001',
has_more: true,
session_id: 'suijixunbao_session',
}
// ========== 分类映射 ==========
export const MOCK_DATA_MAP = {
hot: MOCK_RENQIWANG,
new: MOCK_XINXIANSHANG,
potential: MOCK_QIANLIXING,
random: MOCK_SUIJIXUNBAO,
}
// 根据分类获取模拟数据
export function getMockDataByCategory(category) {
return MOCK_DATA_MAP[category] || MOCK_RENQIWANG
}
// 随机生成更多模拟数据(用于追加)
export function generateMockItems(category = 'hot', count = 20, startId = 50000) {
const items = []
for (let i = 0; i < count; i++) {
const id = startId + i
let like_count
// 根据分类生成不同的点赞数范围
switch (category) {
case 'hot':
like_count = 200 + Math.floor(Math.random() * 1000) // 200-1200
break
case 'new':
like_count = Math.floor(Math.random() * 5) // 0-5
break
case 'potential':
like_count = 30 + Math.floor(Math.random() * 150) // 30-180
break
case 'random':
like_count = Math.floor(Math.random() * 800) // 0-800
break
default:
like_count = Math.floor(Math.random() * 500)
}
items.push({
asset_id: id,
name: `${category}_作品${id}`,
cover_url: MOCK_IMAGES[i % MOCK_IMAGES.length],
like_count,
owner_nickname: NICKNAMES[i % NICKNAMES.length],
})
}
return items
}