topfans/frontend/pages/square/config/mockData.js

213 lines
9.8 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 = false
// 模拟图片列表
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
}