// ========== 模拟数据配置 ========== // 是否使用模拟数据(开发调试时设为 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-18.png', ] // 模拟昵称列表 const NICKNAMES = [ '小明', '小红', '小刚', '小芳', '小强', '小美', '小华', '小丽', '小杰', '小婷', '小宇', '小雪', '小晨', '小曦', '小雷', '小雯', '小风', '小月', '小星', '小云', '小河', '小涛', '小琳', '小瑶', ] // ========== 分类 span 阈值配置 ========== // 每个分类有不同的 span 计算规则 export const SPAN_CONFIG = { // 人气王者:高点赞为主,大卡片多 hot: { thresholds: [ { max: 30000, span: 1 }, // 3w 以下 → span 1 { max: 60000, span: 2 }, // 3w-6w → span 2 { max: 100000, span: 3 }, // 6w-10w → span 3 { max: Infinity, span: 4 }, // 10w+ → span 4 ] }, // 潜力之星:中等点赞,中小卡片 xingka: { thresholds: [ { max: 5000, span: 1 }, // 5k 以下 → span 1 { max: 10000, span: 2 }, // 5k-1w → span 2 { max: 15000, span: 3 }, // 1w-1.5w → span 3 { max: Infinity, span: 4 },// 1.5w+ → span 4 ] }, // 新鲜上架:低点赞,小卡片为主 baji: { thresholds: [ { max: 200, span: 1 }, // 200 以下 → span 1 { max: 500, span: 2 }, // 200-500 → span 2 { max: Infinity, span: 3 },// 500+ → span 3 ] }, // 随机寻宝:混合 haibao: { thresholds: [ { max: 10000, span: 1 }, // 1w 以下 → span 1 { max: 30000, span: 2 }, // 1w-3w → span 2 { max: 60000, span: 3 }, // 3w-6w → span 3 { max: Infinity, span: 4 },// 6w+ → 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: 125800, owner_nickname: '小甜心' }, { asset_id: 10002, name: '爱的绽放', cover_url: MOCK_IMAGES[1], like_count: 98600, owner_nickname: '爱豆粉' }, { asset_id: 10003, name: '温暖守护', cover_url: MOCK_IMAGES[2], like_count: 87200, owner_nickname: '星星控' }, { asset_id: 10004, name: '甜蜜暴击', cover_url: MOCK_IMAGES[3], like_count: 76800, owner_nickname: '追星族' }, { asset_id: 10005, name: '闪耀舞台', cover_url: MOCK_IMAGES[4], like_count: 65400, owner_nickname: '小太阳' }, { asset_id: 10006, name: '为你疯狂', cover_url: MOCK_IMAGES[5], like_count: 58900, owner_nickname: '小可爱' }, { asset_id: 10007, name: '心动时刻', cover_url: MOCK_IMAGES[6], like_count: 52100, owner_nickname: '小天使' }, { asset_id: 10008, name: '永相随', cover_url: MOCK_IMAGES[7], like_count: 48700, owner_nickname: '小甜豆' }, { asset_id: 10009, name: '粉红泡泡', cover_url: MOCK_IMAGES[8], like_count: 45600, owner_nickname: '小迷糊' }, { asset_id: 10010, name: '爱的力量', cover_url: MOCK_IMAGES[9], like_count: 42300, owner_nickname: '小幸运' }, { asset_id: 10011, name: '璀璨星河', cover_url: MOCK_IMAGES[10], like_count: 39800, owner_nickname: '小浪漫' }, // { asset_id: 10012, name: '甜蜜日常', cover_url: MOCK_IMAGES[11], like_count: 37500, owner_nickname: '小清新' }, // { asset_id: 10013, name: '爱心发射', cover_url: MOCK_IMAGES[12], like_count: 35200, owner_nickname: '小活力' }, // { asset_id: 10014, name: '超级喜欢', cover_url: MOCK_IMAGES[13], like_count: 32900, owner_nickname: '小呆萌' }, // { asset_id: 10015, name: '温暖拥抱', cover_url: MOCK_IMAGES[14], like_count: 30600, owner_nickname: '小棉花' }, // { asset_id: 10016, name: '今日份心动', cover_url: MOCK_IMAGES[15], like_count: 28500, owner_nickname: '小牛奶' }, ], cursor: 'renqiwang_cursor_001', has_more: true, session_id: 'renqiwang_session', } // ========== 潜力之星 - 中等点赞有潜力的作品 ========== export const MOCK_QIANLIXING = { items: [ { asset_id: 20001, name: '初露锋芒', cover_url: MOCK_IMAGES[0], like_count: 12800, owner_nickname: '小新芽' }, { asset_id: 20002, name: '蓄势待发', cover_url: MOCK_IMAGES[1], like_count: 11500, owner_nickname: '小嫩草' }, { asset_id: 20003, name: '冉冉升起', cover_url: MOCK_IMAGES[2], like_count: 10200, owner_nickname: '小泡泡' }, { asset_id: 20004, name: '明日之星', cover_url: MOCK_IMAGES[3], like_count: 9800, owner_nickname: '小火苗' }, { asset_id: 20005, name: '潜力无限', cover_url: MOCK_IMAGES[4], like_count: 8900, owner_nickname: '小萌芽' }, { asset_id: 20006, name: '闪耀新星', cover_url: MOCK_IMAGES[5], like_count: 8200, owner_nickname: '小水滴' }, { asset_id: 20007, name: '小荷才露', cover_url: MOCK_IMAGES[6], like_count: 7600, owner_nickname: '小竹笋' }, { asset_id: 20008, name: '锋芒初现', cover_url: MOCK_IMAGES[7], like_count: 7100, owner_nickname: '小鸽子' }, { asset_id: 20009, name: '闪闪发光', cover_url: MOCK_IMAGES[8], like_count: 6500, owner_nickname: '小萤火' }, { asset_id: 20010, name: '未来可期', cover_url: MOCK_IMAGES[9], like_count: 5900, owner_nickname: '小芽芽' }, { asset_id: 20011, name: '新秀登场', cover_url: MOCK_IMAGES[10], like_count: 5400, owner_nickname: '小藤蔓' }, // { asset_id: 20012, name: '蒸蒸日上', cover_url: MOCK_IMAGES[11], like_count: 4900, owner_nickname: '小葵花' }, // { asset_id: 20013, name: '茁壮成长', cover_url: MOCK_IMAGES[12], like_count: 4500, owner_nickname: '小苗苗' }, // { asset_id: 20014, name: '初绽光芒', cover_url: MOCK_IMAGES[13], like_count: 4100, owner_nickname: '小花花' }, // { asset_id: 20015, name: '星火燎原', cover_url: MOCK_IMAGES[14], like_count: 3800, owner_nickname: '小豆芽' }, // { asset_id: 20016, name: '蓄力中...', cover_url: MOCK_IMAGES[15], like_count: 3500, owner_nickname: '小冰晶' }, ], cursor: 'qianlixing_cursor_001', has_more: true, session_id: 'qianlixing_session', } // ========== 新鲜上架 - 新发布作品,点赞较低 ========== export const MOCK_XINXIANSHANG = { items: [ { asset_id: 30001, name: '刚刚发布', cover_url: MOCK_IMAGES[0], like_count: 128, owner_nickname: '新手小白' }, { asset_id: 30002, name: '今日新鲜', cover_url: MOCK_IMAGES[1], like_count: 256, owner_nickname: '小萌新' }, { asset_id: 30003, name: '刚出锅', cover_url: MOCK_IMAGES[2], like_count: 89, owner_nickname: '新来的' }, { asset_id: 30004, name: '热乎的', cover_url: MOCK_IMAGES[3], like_count: 167, owner_nickname: '小试牛刀' }, { asset_id: 30005, name: '新品上市', cover_url: MOCK_IMAGES[4], like_count: 234, owner_nickname: '初来乍到' }, { asset_id: 30006, name: '今日首发', cover_url: MOCK_IMAGES[5], like_count: 178, owner_nickname: '小透明' }, { asset_id: 30007, name: '刚出炉', cover_url: MOCK_IMAGES[6], like_count: 145, owner_nickname: '新手村' }, { asset_id: 30008, name: '最新创作', cover_url: MOCK_IMAGES[7], like_count: 312, owner_nickname: '小画师' }, { asset_id: 30009, name: '新鲜出炉', cover_url: MOCK_IMAGES[8], like_count: 98, owner_nickname: '小创作者' }, { asset_id: 30010, name: '首发作品', cover_url: MOCK_IMAGES[9], like_count: 267, owner_nickname: '小练手' }, { asset_id: 30011, name: '全新上线', cover_url: MOCK_IMAGES[10], like_count: 189, owner_nickname: '新起步' }, // { asset_id: 30012, name: '今日份新', cover_url: MOCK_IMAGES[11], like_count: 156, owner_nickname: '小萌娃' }, // { asset_id: 30013, name: '新新人类', cover_url: MOCK_IMAGES[12], like_count: 223, owner_nickname: '小新潮' }, // { asset_id: 30014, name: '新鲜血液', cover_url: MOCK_IMAGES[13], like_count: 134, owner_nickname: '小白白' }, // { asset_id: 30015, name: '新晋选手', cover_url: MOCK_IMAGES[14], like_count: 278, owner_nickname: '小小新' }, // { asset_id: 30016, name: '首发新动态', cover_url: MOCK_IMAGES[15], like_count: 201, owner_nickname: '小清新' }, ], cursor: 'xinxianshang_cursor_001', has_more: true, session_id: 'xinxianshang_session', } // ========== 随机寻宝 - 随机混合数据 ========== export const MOCK_SUIJIXUNBAO = { items: [ { asset_id: 40001, name: '神秘宝藏1', cover_url: MOCK_IMAGES[0], like_count: 45000, owner_nickname: '寻宝达人' }, { asset_id: 40002, name: '神秘宝藏2', cover_url: MOCK_IMAGES[1], like_count: 32000, owner_nickname: '探险家' }, { asset_id: 40003, name: '神秘宝藏3', cover_url: MOCK_IMAGES[2], like_count: 78000, owner_nickname: '淘宝高手' }, { asset_id: 40004, name: '神秘宝藏4', cover_url: MOCK_IMAGES[3], like_count: 1500, owner_nickname: '捡漏王' }, { asset_id: 40005, name: '神秘宝藏5', cover_url: MOCK_IMAGES[4], like_count: 8500, owner_nickname: '挖宝专家' }, { asset_id: 40006, name: '神秘宝藏6', cover_url: MOCK_IMAGES[5], like_count: 55000, owner_nickname: '收藏家' }, { asset_id: 40007, name: '神秘宝藏7', cover_url: MOCK_IMAGES[6], like_count: 200, owner_nickname: '淘宝达人' }, { asset_id: 40008, name: '神秘宝藏8', cover_url: MOCK_IMAGES[7], like_count: 12000, owner_nickname: '猎奇者' }, { asset_id: 40009, name: '神秘宝藏9', cover_url: MOCK_IMAGES[8], like_count: 62000, owner_nickname: '寻宝奇兵' }, { asset_id: 40010, name: '神秘宝藏10', cover_url: MOCK_IMAGES[9], like_count: 800, owner_nickname: '淘宝猎人' }, { asset_id: 40011, name: '神秘宝藏11', cover_url: MOCK_IMAGES[10], like_count: 9500, owner_nickname: '挖宝小分队' }, // { asset_id: 40012, name: '神秘宝藏12', cover_url: MOCK_IMAGES[11], like_count: 72000, owner_nickname: '淘宝小能手' }, // { asset_id: 40013, name: '神秘宝藏13', cover_url: MOCK_IMAGES[12], like_count: 350, owner_nickname: '宝藏猎人' }, // { asset_id: 40014, name: '神秘宝藏14', cover_url: MOCK_IMAGES[13], like_count: 48000, owner_nickname: '寻宝小天才' }, // { asset_id: 40015, name: '神秘宝藏15', cover_url: MOCK_IMAGES[14], like_count: 11000, owner_nickname: '淘宝小精灵' }, // { asset_id: 40016, name: '神秘宝藏16', cover_url: MOCK_IMAGES[15], like_count: 600, owner_nickname: '挖宝小专家' }, ], cursor: 'suijixunbao_cursor_001', has_more: true, session_id: 'suijixunbao_session', } // ========== 分类映射 ========== export const MOCK_DATA_MAP = { hot: MOCK_RENQIWANG, xingka: MOCK_QIANLIXING, baji: MOCK_XINXIANSHANG, haibao: 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 = 20000 + Math.floor(Math.random() * 100000) // 2w-12w break case 'xingka': like_count = 3000 + Math.floor(Math.random() * 15000) // 3k-18k break case 'baji': like_count = 50 + Math.floor(Math.random() * 500) // 50-550 break case 'haibao': like_count = Math.floor(Math.random() * 80000) // 0-8w break default: like_count = Math.floor(Math.random() * 50000) } 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 }