233 lines
12 KiB
JavaScript
233 lines
12 KiB
JavaScript
// ========== 模拟数据配置 ==========
|
||
|
||
// 是否使用模拟数据(开发调试时设为 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
|
||
}
|