feat: migrate static pages to native tabbar
This commit is contained in:
153
packages/tcm/pages/assets/index.js
Normal file
153
packages/tcm/pages/assets/index.js
Normal file
@@ -0,0 +1,153 @@
|
||||
const { createTcmAssetPageData } = require('../../../../utils/static-ux/tcm')
|
||||
const { resolveKind } = require('../../../../utils/static-ux/shared')
|
||||
const { ROUTES, openStaticRoute } = require('../../../../utils/static-ux/route-map')
|
||||
|
||||
const ASSET_KIND_LABELS = Object.freeze({
|
||||
notes: '笔记',
|
||||
bookshelf: '书架',
|
||||
favorites: '收藏',
|
||||
history: '历史'
|
||||
})
|
||||
|
||||
const ASSET_ITEMS = Object.freeze({
|
||||
notes: [
|
||||
{
|
||||
key: 'note-1',
|
||||
title: '阴阳学习摘记',
|
||||
subtitle: '来自《黄帝内经素问》静态演示卡片',
|
||||
description: '把阴阳作为纲领来理解脏腑、经络与病机的对应关系。',
|
||||
route: `${ROUTES.tcm.bookDetail}?scene=classic-a`
|
||||
},
|
||||
{
|
||||
key: 'note-2',
|
||||
title: '脾虚湿困辨证提要',
|
||||
subtitle: '辨证分析里的高频主题',
|
||||
description: '先看脾运失健,再看湿困中焦的症状组合。',
|
||||
route: `${ROUTES.tcm.bianzheng}?scene=result`
|
||||
}
|
||||
],
|
||||
bookshelf: [
|
||||
{
|
||||
key: 'book-1',
|
||||
title: '黄帝内经素问',
|
||||
subtitle: '已加入静态书架',
|
||||
description: '继续阅读:上古天真论',
|
||||
route: `${ROUTES.tcm.bookDetail}?scene=classic-a`
|
||||
},
|
||||
{
|
||||
key: 'book-2',
|
||||
title: '伤寒论',
|
||||
subtitle: '已加入静态书架',
|
||||
description: '继续阅读:太阳病篇',
|
||||
route: `${ROUTES.tcm.bookDetail}?scene=classic-b`
|
||||
}
|
||||
],
|
||||
favorites: [
|
||||
{
|
||||
key: 'favorite-1',
|
||||
title: '经络总览卡片',
|
||||
subtitle: '已收藏条目',
|
||||
description: '保留为静态收藏示例,后续再接新的收藏体系。',
|
||||
route: `${ROUTES.tcm.placeholder}?kind=about`
|
||||
},
|
||||
{
|
||||
key: 'favorite-2',
|
||||
title: '命理解读入口',
|
||||
subtitle: '跨域收藏示例',
|
||||
description: '当前用于展示从中医域跳到命理域的 UI 连接。',
|
||||
route: ROUTES.mingli.interpret
|
||||
}
|
||||
],
|
||||
history: [
|
||||
{
|
||||
key: 'history-1',
|
||||
title: 'AI答疑: 什么是气虚?',
|
||||
subtitle: '最近浏览',
|
||||
description: '返回 AI 页查看静态问答入口。',
|
||||
route: ROUTES.tabs.ai
|
||||
},
|
||||
{
|
||||
key: 'history-2',
|
||||
title: '典籍阅读: 上古天真论',
|
||||
subtitle: '最近阅读',
|
||||
description: '回到典籍阅读页继续浏览。',
|
||||
route: `${ROUTES.tcm.section}?scene=reader-a`
|
||||
}
|
||||
]
|
||||
})
|
||||
|
||||
const ASSET_EMPTY_COPY = Object.freeze({
|
||||
notes: {
|
||||
title: '还没有学习笔记',
|
||||
description: '后续接入新后端后,这里会汇总你的静态摘录与标注。'
|
||||
},
|
||||
bookshelf: {
|
||||
title: '书架还是空的',
|
||||
description: '可以先从典籍页进入静态详情,再决定如何组织新的书架逻辑。'
|
||||
},
|
||||
favorites: {
|
||||
title: '还没有收藏内容',
|
||||
description: '本轮只保留收藏区块的 UI 结构,不迁移旧收藏模型。'
|
||||
},
|
||||
history: {
|
||||
title: '还没有浏览记录',
|
||||
description: '继续浏览典籍、AI 或易学页后,后续可在这里接入新的记录源。'
|
||||
}
|
||||
})
|
||||
|
||||
function cloneItems(items) {
|
||||
return items.map(item => ({ ...item }))
|
||||
}
|
||||
|
||||
function createFilterItems(kinds) {
|
||||
return kinds.map(kind => ({
|
||||
key: kind,
|
||||
label: ASSET_KIND_LABELS[kind],
|
||||
route: `${ROUTES.tcm.assets}?kind=${kind}`
|
||||
}))
|
||||
}
|
||||
|
||||
function createTcmAssetsPageData(rawKind) {
|
||||
const baseData = createTcmAssetPageData(rawKind)
|
||||
const items = cloneItems(ASSET_ITEMS[baseData.activeKind] || [])
|
||||
const emptyCopy = ASSET_EMPTY_COPY[baseData.activeKind]
|
||||
|
||||
return {
|
||||
title: baseData.title,
|
||||
activeKind: baseData.activeKind,
|
||||
filterItems: createFilterItems(baseData.kinds),
|
||||
items,
|
||||
emptyTitle: emptyCopy.title,
|
||||
emptyDescription: emptyCopy.description
|
||||
}
|
||||
}
|
||||
|
||||
function showNavigate(route) {
|
||||
openStaticRoute(route, wx)
|
||||
}
|
||||
|
||||
Page({
|
||||
data: createTcmAssetsPageData('notes'),
|
||||
|
||||
onLoad(options) {
|
||||
this.setData(
|
||||
createTcmAssetsPageData(
|
||||
resolveKind(options.kind, ['notes', 'bookshelf', 'favorites', 'history'], 'notes')
|
||||
)
|
||||
)
|
||||
},
|
||||
|
||||
handleFilterTap(event) {
|
||||
const { kind } = event.currentTarget.dataset
|
||||
|
||||
this.setData(createTcmAssetsPageData(kind))
|
||||
},
|
||||
|
||||
handleEntryTap(event) {
|
||||
showNavigate(event.currentTarget.dataset.route)
|
||||
}
|
||||
})
|
||||
|
||||
module.exports = {
|
||||
createTcmAssetsPageData
|
||||
}
|
||||
Reference in New Issue
Block a user