# `pages/profile/index` 未登录态静态页面设计 ## 文档元信息 - 日期:`2026-04-22` - 目标页面:`pages/profile/index` - 设计范围:`结构复刻 + 纯静态展示 + 未登录态` - 关联文档:`AGENTS.md`、`README.md` ## 目标 在不引入接口、store、页面跳转和新增组件的前提下,将 `pages/profile/index` 从占位页升级为一个可直接展示的个人中心静态页面。页面目标是复刻参考图的区块结构和信息层级,同时沿用仓库现有暖色、卡片化视觉语言,避免做截图级像素还原。 ## 范围与非目标 ### 本次范围 - 仅修改 `pages/profile/index.js`、`pages/profile/index.wxml`、`pages/profile/index.wxss` - 页面首屏固定为未登录态 - 页面包含 5 个区块:用户卡片、会员引导卡片、学习资产四宫格、最近记录空状态、其它功能列表 - 页面内容使用静态 `data` 驱动 - 按微信原生小程序常规写法实现,不新增通用组件 ### 非目标 - 不接入 `stores/modules/session.js` - 不调用 `services/api/*` 或 `services/request/index.js` - 不新增图标图片资源、不新增字体资源 - 不接按钮点击、页面跳转、分享能力、登录能力 - 不处理已登录态、真实记录列表、真实资产计数 ## 方案选择 ### 备选方案 1. 页面内一次性落地 2. 先抽资产区和列表行为局部组件 3. 强行复用现有 `components/base/app-button` 与 `components/biz/entry-card` ### 最终选择 采用“页面内一次性落地”方案。 选择原因: - 当前目标是静态结构复刻,范围小,直接写在页面内更短更稳 - 现有组件与目标结构不贴合,强复用会增加样式扭曲和模板复杂度 - 通过结构化 `data` 和分区 class 命名,后续仍可平滑抽组件,不会锁死实现 ## 页面结构 页面按纵向信息流组织,顺序固定如下: 1. 用户卡片 2. 会员引导卡片 3. 学习资产四宫格 4. 最近记录 5. 其它功能 各区块关系如下: ```mermaid flowchart TD PAGE["profile-page 页面根容器"] --> USER["用户卡片
头像占位 / 登录文案 / 设置入口占位"] PAGE --> VIP["会员引导卡片
图标占位 / 说明文案 / CTA 按钮占位"] PAGE --> ASSET["学习资产四宫格
我的笔记 / 我的书架 / 我的收藏 / 浏览历史"] PAGE --> RECENT["最近记录卡片
标题 + 空状态文案"] PAGE --> MORE["其它功能列表
意见反馈 / 分享 APP / 关于我们 / 设置"] ``` ## 数据模型 页面 `data` 只承载静态展示信息,建议按 5 组对象/数组组织: ```js { userCard: { avatarText: '?', title: '点击登录', subtitle: '登录后查看你的学习资产', settingsText: '设' }, vipCard: { icon: '会员', title: '开通会员', subtitle: '解锁更多学习资料、AI 仪表与阅读辅助能力', actionText: '成为会员' }, assetItems: [ { key: 'notes', icon: '记', title: '我的笔记', count: 0 }, { key: 'bookshelf', icon: '架', title: '我的书架', count: 0 }, { key: 'favorites', icon: '藏', title: '我的收藏', count: 0 }, { key: 'history', icon: '史', title: '浏览历史', count: 0 } ], recentRecord: { title: '最近记录', emptyTitle: '还没有回访记录', emptyDescription: '去典籍阅读或 AI 页完成一次学习,记录会出现在这里。' }, moreItems: [ { key: 'feedback', title: '意见反馈' }, { key: 'share', title: '分享 APP' }, { key: 'about', title: '关于我们' }, { key: 'settings', title: '设置' } ] } ``` 约束: - `assetItems` 和 `moreItems` 必须使用 `wx:for` - `key` 只用于渲染稳定性和后续扩展,不在本次承担业务逻辑 - 所有文本先静态写入 `data`,避免模板中散落魔法字符串 ## WXML 结构边界 WXML 只保留三级边界: - 页面根:`profile-page` - 区块卡片:`section-card` - 区块内部局部结构:`profile-header`、`vip-banner`、`asset-grid`、`recent-panel`、`menu-list` 结构要求: - 顶部用户卡片和会员卡片为独立卡片,不合并 - 资产区一行固定 4 列,每项包含图标容器、标题、数字 - 最近记录固定为空状态,不渲染列表分支 - 其它功能为纵向列表,每一行使用“左文案 + 右箭头占位”的标准结构 ## 样式策略 页面视觉遵循“结构复刻,风格贴合仓库”的原则。 ### 页面级 - 延续当前项目已有的米白到浅金渐变背景 - 保持主内容纵向滚动,顶部和底部有稳定安全边距 ### 卡片级 - 统一使用浅底、圆角、大留白、轻阴影 - 卡片间距与首页的 `section-card` 节奏接近 - 避免复杂装饰、绝对定位角标和图片背景 ### 文本级 - 区块标题延续首页的 `Songti` / serif 风格 - 正文、副文案、数字采用更轻的系统字体层级 - 用户卡片标题突出,辅助说明弱化 ### 图标级 - 本次不新增图片资源 - 头像、会员、四宫格图标、右箭头均用字符或简单容器占位 - 图标容器风格统一,避免每块都出现不同视觉语言 ## 行为与数据流 本页当前没有真实行为流,只保留静态展示结构。 ```mermaid flowchart LR DATA["Page data 静态对象"] --> WXML["WXML 区块渲染"] WXML --> WXSS["WXSS 卡片与布局样式"] WXSS --> UI["未登录态个人中心静态页面"] ``` 约束: - 不出现 `onLoad` 拉取数据逻辑 - 不出现 `wx.navigateTo`、`wx.switchTab`、`wx.login`、`wx.getUserProfile` - 不出现依赖外部状态的分支渲染 ## 错误处理与边界 由于本次没有网络请求和真实交互,错误处理重点放在布局稳定性: - `assetItems` 固定为 4 项;若后续数量变化,需要单独评估布局是否仍保持 4 列 - 文案长度以当前中文文案为基准,样式需避免一行被异常挤压 - 图标占位必须在没有外部资源时也能稳定渲染 - 页面在微信常规设备宽度下不能出现卡片溢出、四宫格换行错位、列表箭头挤压 ## 测试与验收 本次设计对应的最小验证范围: 1. 页面整体包含 5 个区块,顺序与设计一致 2. 学习资产区稳定为一行 4 列 3. 最近记录展示为空状态,不出现列表分支 4. 其它功能区展示 4 行静态入口 5. 改动范围仅限 `pages/profile/index.*`,不新增业务组件、不接 API / store 若补测试,优先补: - 页面 `data` 结构渲染测试 - 四宫格与功能列表项数量断言 - 关键标题文案存在性断言 ## 实施边界 实施顺序固定为: 1. 重写 `pages/profile/index.js` 中的静态数据 2. 重写 `pages/profile/index.wxml` 的区块结构 3. 重写 `pages/profile/index.wxss` 的整体布局与卡片样式 4. 回查 `app.json` 中 `pages/profile/index` 路由已存在,无需新增注册 禁止事项: - 不提前抽新组件 - 不顺手接登录态 - 不顺手接页面跳转 - 不为“以后可能要用”增加额外抽象