213 lines
9.8 KiB
JavaScript
213 lines
9.8 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: 300, span: 1 }, // 300 以下 → span 1
|
||
{ max: 600, span: 2 }, // 300-600 → span 2
|
||
{ max: 1000, span: 3 }, // 600-1000 → span 3
|
||
{ max: Infinity, span: 4 }, // 1000+ → span 4
|
||
]
|
||
},
|
||
// 新鲜上架:低点赞,小卡片为主
|
||
new: {
|
||
thresholds: [
|
||
{ max: 2, span: 1 }, // 2 以下 → span 1
|
||
{ max: 5, span: 2 }, // 2-5 → span 2
|
||
{ max: Infinity, span: 3 },// 5+ → span 3
|
||
]
|
||
},
|
||
// 潜力之星:中等点赞,中小卡片
|
||
potential: {
|
||
thresholds: [
|
||
{ max: 50, span: 1 }, // 50 以下 → span 1
|
||
{ max: 100, span: 2 }, // 50-100 → span 2
|
||
{ max: 150, span: 3 }, // 100-150 → span 3
|
||
{ max: Infinity, span: 4 },// 150+ → span 4
|
||
]
|
||
},
|
||
// 随机寻宝:混合
|
||
random: {
|
||
thresholds: [
|
||
{ max: 100, span: 1 }, // 100 以下 → span 1
|
||
{ max: 300, span: 2 }, // 100-300 → span 2
|
||
{ max: 600, span: 3 }, // 300-600 → span 3
|
||
{ max: Infinity, span: 4 },// 600+ → 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: 1258, owner_nickname: '小甜心' },
|
||
{ asset_id: 10002, name: '爱的绽放', cover_url: MOCK_IMAGES[1], like_count: 986, owner_nickname: '爱豆粉' },
|
||
{ asset_id: 10003, name: '温暖守护', cover_url: MOCK_IMAGES[2], like_count: 872, owner_nickname: '星星控' },
|
||
{ asset_id: 10004, name: '甜蜜暴击', cover_url: MOCK_IMAGES[3], like_count: 768, owner_nickname: '追星族' },
|
||
{ asset_id: 10005, name: '闪耀舞台', cover_url: MOCK_IMAGES[4], like_count: 654, owner_nickname: '小太阳' },
|
||
{ asset_id: 10006, name: '为你疯狂', cover_url: MOCK_IMAGES[5], like_count: 589, owner_nickname: '小可爱' },
|
||
{ asset_id: 10007, name: '心动时刻', cover_url: MOCK_IMAGES[6], like_count: 521, owner_nickname: '小天使' },
|
||
{ asset_id: 10008, name: '永相随', cover_url: MOCK_IMAGES[7], like_count: 487, owner_nickname: '小甜豆' },
|
||
{ asset_id: 10009, name: '粉红泡泡', cover_url: MOCK_IMAGES[8], like_count: 456, owner_nickname: '小迷糊' },
|
||
{ asset_id: 10010, name: '爱的力量', cover_url: MOCK_IMAGES[9], like_count: 423, owner_nickname: '小幸运' },
|
||
{ asset_id: 10011, name: '璀璨星河', cover_url: MOCK_IMAGES[10], like_count: 398, 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[0], like_count: 1, owner_nickname: '新手小白' },
|
||
{ asset_id: 30002, name: '今日新鲜', cover_url: MOCK_IMAGES[1], like_count: 2, owner_nickname: '小萌新' },
|
||
{ asset_id: 30003, name: '刚出锅', cover_url: MOCK_IMAGES[2], like_count: 0, owner_nickname: '新来的' },
|
||
{ asset_id: 30004, name: '热乎的', cover_url: MOCK_IMAGES[3], like_count: 1, owner_nickname: '小试牛刀' },
|
||
{ asset_id: 30005, name: '新品上市', cover_url: MOCK_IMAGES[4], like_count: 2, owner_nickname: '初来乍到' },
|
||
{ asset_id: 30006, name: '今日首发', cover_url: MOCK_IMAGES[5], like_count: 1, owner_nickname: '小透明' },
|
||
{ asset_id: 30007, name: '刚出炉', cover_url: MOCK_IMAGES[6], like_count: 1, owner_nickname: '新手村' },
|
||
{ asset_id: 30008, name: '最新创作', cover_url: MOCK_IMAGES[7], like_count: 3, owner_nickname: '小画师' },
|
||
{ asset_id: 30009, name: '新鲜出炉', cover_url: MOCK_IMAGES[8], like_count: 0, owner_nickname: '小创作者' },
|
||
{ asset_id: 30010, name: '首发作品', cover_url: MOCK_IMAGES[9], like_count: 2, owner_nickname: '小练手' },
|
||
{ asset_id: 30011, name: '全新上线', cover_url: MOCK_IMAGES[10], like_count: 1, 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: 128, owner_nickname: '小新芽' },
|
||
{ asset_id: 20002, name: '蓄势待发', cover_url: MOCK_IMAGES[1], like_count: 115, owner_nickname: '小嫩草' },
|
||
{ asset_id: 20003, name: '冉冉升起', cover_url: MOCK_IMAGES[2], like_count: 102, owner_nickname: '小泡泡' },
|
||
{ asset_id: 20004, name: '明日之星', cover_url: MOCK_IMAGES[3], like_count: 98, owner_nickname: '小火苗' },
|
||
{ asset_id: 20005, name: '潜力无限', cover_url: MOCK_IMAGES[4], like_count: 89, owner_nickname: '小萌芽' },
|
||
{ asset_id: 20006, name: '闪耀新星', cover_url: MOCK_IMAGES[5], like_count: 82, owner_nickname: '小水滴' },
|
||
{ asset_id: 20007, name: '小荷才露', cover_url: MOCK_IMAGES[6], like_count: 76, owner_nickname: '小竹笋' },
|
||
{ asset_id: 20008, name: '锋芒初现', cover_url: MOCK_IMAGES[7], like_count: 71, owner_nickname: '小鸽子' },
|
||
{ asset_id: 20009, name: '闪闪发光', cover_url: MOCK_IMAGES[8], like_count: 65, owner_nickname: '小萤火' },
|
||
{ asset_id: 20010, name: '未来可期', cover_url: MOCK_IMAGES[9], like_count: 59, owner_nickname: '小芽芽' },
|
||
{ asset_id: 20011, name: '新秀登场', cover_url: MOCK_IMAGES[10], like_count: 54, owner_nickname: '小藤蔓' },
|
||
],
|
||
cursor: 'qianlixing_cursor_001',
|
||
has_more: true,
|
||
session_id: 'qianlixing_session',
|
||
}
|
||
|
||
// ========== 随机寻宝 - 随机混合数据 ==========
|
||
export const MOCK_SUIJIXUNBAO = {
|
||
items: [
|
||
{ asset_id: 40001, name: '神秘宝藏1', cover_url: MOCK_IMAGES[0], like_count: 450, owner_nickname: '寻宝达人' },
|
||
{ asset_id: 40002, name: '神秘宝藏2', cover_url: MOCK_IMAGES[1], like_count: 320, owner_nickname: '探险家' },
|
||
{ asset_id: 40003, name: '神秘宝藏3', cover_url: MOCK_IMAGES[2], like_count: 780, owner_nickname: '淘宝高手' },
|
||
{ asset_id: 40004, name: '神秘宝藏4', cover_url: MOCK_IMAGES[3], like_count: 15, owner_nickname: '捡漏王' },
|
||
{ asset_id: 40005, name: '神秘宝藏5', cover_url: MOCK_IMAGES[4], like_count: 85, owner_nickname: '挖宝专家' },
|
||
{ asset_id: 40006, name: '神秘宝藏6', cover_url: MOCK_IMAGES[5], like_count: 550, owner_nickname: '收藏家' },
|
||
{ asset_id: 40007, name: '神秘宝藏7', cover_url: MOCK_IMAGES[6], like_count: 2, owner_nickname: '淘宝达人' },
|
||
{ asset_id: 40008, name: '神秘宝藏8', cover_url: MOCK_IMAGES[7], like_count: 120, owner_nickname: '猎奇者' },
|
||
{ asset_id: 40009, name: '神秘宝藏9', cover_url: MOCK_IMAGES[8], like_count: 620, owner_nickname: '寻宝奇兵' },
|
||
{ asset_id: 40010, name: '神秘宝藏10', cover_url: MOCK_IMAGES[9], like_count: 8, owner_nickname: '淘宝猎人' },
|
||
{ asset_id: 40011, name: '神秘宝藏11', cover_url: MOCK_IMAGES[10], like_count: 95, 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
|
||
}
|