feat: 完成分龄页开发

This commit is contained in:
R524809
2026-05-06 17:28:51 +08:00
parent 50394154f7
commit 9bdf850f20
54 changed files with 3499 additions and 1021 deletions
+67 -3
View File
@@ -214,17 +214,58 @@ async function buildHomeData(db, event) {
return { homeData };
}
function normalizeIdArray(value) {
if (!Array.isArray(value)) return [];
return value.map((x) => String(x || '').trim()).filter(Boolean);
}
function extractHomeSeedFromCurrentConfig(home) {
const featuredIds = normalizeIdArray(home?.featured?.map((x) => x?.id));
const hotIds = normalizeIdArray(home?.hot?.map((x) => x?.id));
const sections = Array.isArray(home?.sections)
? home.sections
.map((s) => ({
id: String(s?.id || '').trim(),
subtitle: String(s?.subtitle || '').trim(),
morePath: String(s?.morePath || '').trim(),
worksheetIds: normalizeIdArray(s?.items?.map((it) => it?.id)),
}))
.filter((s) => s.id && Array.isArray(s.worksheetIds))
: [];
return { featuredIds, hotIds, sections };
}
exports.main = async (event) => {
try {
const db = cloud.database();
const page = String(event.page || '').trim();
if (page !== 'category' && page !== 'home') {
throw new Error('page 参数不合法,支持 category / home');
if (page !== 'category' && page !== 'home' && page !== 'all') {
throw new Error('page 参数不合法,支持 category / home / all');
}
const config = await readCurrentConfig();
// 当未提供 featuredIds/hotIds/sections 时,默认从现有 home 配置反推出 worksheetIds
// 用于“只想重建展示数据(比如 ageBand/previewImg/difficultyLabel),但不想手工维护 id 列表”的场景。
const homeSeed = extractHomeSeedFromCurrentConfig(config.home || {});
const homeEvent = {
...event,
featuredIds:
Array.isArray(event.featuredIds) && event.featuredIds.length > 0
? event.featuredIds
: homeSeed.featuredIds,
hotIds:
Array.isArray(event.hotIds) && event.hotIds.length > 0
? event.hotIds
: homeSeed.hotIds,
sections:
Array.isArray(event.sections) && event.sections.length > 0
? event.sections
: homeSeed.sections,
};
if (page === 'category') {
const { categoryData, stats } = await buildCategoryData(db);
config.category = categoryData;
@@ -244,7 +285,7 @@ exports.main = async (event) => {
}
if (page === 'home') {
const { homeData } = await buildHomeData(db, event);
const { homeData } = await buildHomeData(db, homeEvent);
config.home = homeData;
config.version = (config.version || 0) + 1;
config.updatedAt = new Date().toISOString();
@@ -262,6 +303,29 @@ exports.main = async (event) => {
},
};
}
if (page === 'all') {
const { categoryData, stats } = await buildCategoryData(db);
const { homeData } = await buildHomeData(db, homeEvent);
config.category = categoryData;
config.home = homeData;
config.version = (config.version || 0) + 1;
config.updatedAt = new Date().toISOString();
await saveConfig(config);
return {
success: true,
data: {
version: config.version,
updatedAt: config.updatedAt,
stats,
featured: homeData.featured.length,
hot: homeData.hot.length,
sections: homeData.sections.length,
},
};
}
} catch (error) {
return {
success: false,