docs: freeze YuXinGu lexicon, journey, and P1 engineering sources

Establish product language contract, user journey with dual growth engines,
ERD/OpenAPI/Go boundaries, and H5 routes (/profile, /portrait, /relation,
/membership) before P1 implementation.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
jackyu66git
2026-08-02 16:12:10 +08:00
co-authored by Cursor
parent 2fb1dfee14
commit dd94e57277
40 changed files with 1283 additions and 800 deletions
+5 -7
View File
@@ -8,14 +8,12 @@
## 阅读顺序(产品重设计)
1. [analysis/cece-teardown.md](analysis/cece-teardown.md) — 测测拆解 → 愈心谷映射
2. [`.ai/product/cece-feature-map.md`](../../.ai/product/cece-feature-map.md) — 测测 Feature MapIA × 能力域)
3. [`.ai/product/feature-map.md`](../../.ai/product/feature-map.md) — 愈心谷 Feature Map + MVP
4. [prd-mvp.md](prd-mvp.md) — MVP 目标、IA、用户故事、API 切片、验收
5. [business-model.md](business-model.md) — 三层收入与飞轮
6. [product-roadmap.md](product-roadmap.md) — Phase A→D 竖切计划
1. [`.ai/product/ENGINEERING-FREEZE.md`](../../.ai/product/ENGINEERING-FREEZE.md) — P1 真源索引
2. [lexicon](../../.ai/product/lexicon.md) · [user-journey](../../.ai/product/user-journey.md) · [feature-map](../../.ai/product/feature-map.md) · [page-tree](../../.ai/product/page-tree.md)
3. [prd-mvp.md](prd-mvp.md) · [business-model.md](business-model.md) · [product-roadmap.md](product-roadmap.md)
4. 工程:[erd](../../.ai/domain/erd.md) · [openapi](../../proto/openapi.yaml) · [go-services](../../.ai/architecture/go-services.md)
域词汇:[`.ai/domain.md`](../../.ai/domain.md) · 领域图:[`.ai/domain/domain-map.md`](../../.ai/domain/domain-map.md)
竞品对照勿抄 UI`analysis/cece-teardown.md`
---
+3 -4
View File
@@ -1,11 +1,10 @@
# 竞品拆解:测测 → 愈心谷映射
来源:[测测 App 深度体验报告(人人都是产品经理)](https://www.woshipm.com/evaluating/6391148.html)
下游:[PRD MVP](../prd-mvp.md) · [商业模式](../business-model.md) · [产品路线图](../product-roadmap.md) · [文档索引](../README.md)
下游:[语言契约](../../../.ai/product/lexicon.md) · [Feature Map](../../../.ai/product/feature-map.md) · [PRD](../prd-mvp.md)
原则:学结构,不抄神秘学主叙事愈心谷差异 = **数字性格 + 中医体质 + 关系档案 + 节气陪伴**(合规:无疗效、无吉凶)。
域词汇以 [`.ai/domain.md`](../../../.ai/domain.md) 为准。
原则:学**功能模型 / 路径 / 商业**,不抄品牌词与运势叙事愈心谷 UI 禁用「解码/运势/合盘/吉凶」等,见 lexicon。
本文可保留竞品原名;落地命名以愈心谷 lexicon 为准。
---
+15 -66
View File
@@ -1,90 +1,39 @@
# 愈心谷商业模式
关联:[PRD MVP](prd-mvp.md) · [测测拆解](analysis/cece-teardown.md) · [产品路线图](product-roadmap.md)
关联:[PRD](prd-mvp.md) · [Feature Map](../../.ai/product/feature-map.md) · [语言契约](../../.ai/product/lexicon.md)
---
## 1. 一句话
## 一句话
用「数字性格 + 中医体质」做**可复算、可对照**的自我认知入口,以**订阅为主、报告/契合为辅、咨询为远期高客单**,承接测测式漏斗,但避开算命与医疗承诺
用「性格探索 + 个人画像 + 关系理解 + AI 问答」做低摩擦自我认知入口**订阅为主、深度版成长报告为辅、真人顾问远期**。叙事是个人成长,不是占卜
---
## 2. 价值主张
| 对用户 | 对产品 |
|---|---|
| 知道「我是谁 / 我缺什么 / 怎么相处」 | 低摩擦获客(生日 / 量表) |
| 比泛星座更「有结构」、比纯心理量表更「东方语境」 | 差异化:体质 × 性格 × 关系档案 |
| 节气与日更内容形成回访理由 | 订阅续费钩子 |
---
## 3. 收入三层(对齐测测,本地化)
## 收入三层(模型成熟、话术自有)
```
L1 免费获客 Decode 简版 / Scale / 分享卡
L1 免费获客 基础画像 / 人格测评 / 分享卡
L2 订阅留存 MembershipAsk 次数、完整报告、SolarTerm 深度、Mood 复盘
L2 订阅留存 会员:问答次数、完整分析、专属内容、陪伴深化
L3 高 ARPU Unlock 单次报告/Match ·(远期)Consult
L3 高 ARPU 深度版单次成长报告 ·(P3)顾问
```
| 层级 | 产品 | 定价方向(可调) | 备注 |
|---|---|---|---|
| L1 | 简版 Decode、热门 Scale | 0 | 结论可见 |
| L2 | 月/季/年 VIP | 参考测测档位,偏下探试价 | 主收入 |
| L2.5 | Unlock 完整报告 / Match 解读 | 单次低客单 | 不愿订也可转化 |
| L3 | Consult | 远期 | 需履约与合规,非 MVP |
**不做:** 侵入式广告、诱导抽奖、伪医疗售卖。
不做:干扰广告、恐吓倒计时、伪医疗售卖。
---
## 4. 飞轮
## 飞轮
```mermaid
flowchart LR
Share[分享卡/社交] --> Free[免费测评]
Free --> Profile[档案沉淀]
Profile --> Paywall[原因与方案付费墙]
Paywall --> VIP[订阅]
VIP --> Ask[问 / 陪伴回访]
Ask --> Share
Profile --> Match[关系档案]
Match --> Unlock[单次解锁]
Unlock --> VIP
```
关键:Profile 越多 → Match/Ask 越有用 → 续费与解锁越高。
探索自己 → 档案沉淀 → 个性化分析 → 问答陪伴 → 会员 → 成长记录 → 分享再获客
---
## 5. 单位经济(假设,待校验
## 与「成熟同业」的差异(商业叙事
| 指标 | MVP 观测 |
| 同业常见 | 愈心谷 |
|---|---|
| 免费完成率 | Decode 简版 / Scale 完成率 |
| 付费转化 | 简版→Unlock 或 VIP |
| ARPU | 订阅为主,Unlock 为辅 |
| 留存 | D1/D7;节气打开率 |
| 合规成本 | 客服投诉 / 违规文案拦截率 |
付费与权益**只信服务端**(见 `.ai/security.md`)。
---
## 6. B2B / 扩展(非 MVP
企业 EAP、线下门店引流、内容授权——在 C 端漏斗跑通后再开。平台扩展路径:H5 → 小程序(同一 `packages/sdk`)。
---
## 7. 与测测的差异化(商业)
| 测测 | 愈心谷 |
|---|---|
| 星盘+心理+社交玩法宽 | 数字性格+体质窄而深 |
| 强娱乐/玄学氛围 | 可复算、生活建议、免责声明 |
| 咨询达人网络 | 先模板 Ask,后 Consult |
| UGC 广场 | 暂不做,避免内容治理成本 |
| 运势/合盘主叙事 | 个人画像 · 关系理解 · 生活建议 |
| 咨询达人网络先做 | 先会员与深度版,顾问 P3 |
| UGC 玩法广场 | 首版不做 |
+82 -92
View File
@@ -1,128 +1,118 @@
# 愈心谷 MVP PRD
# 愈心谷 P1 PRD(首版)
关联:[测测拆解映射](analysis/cece-teardown.md) · [商业模式](business-model.md) · [产品路线图](product-roadmap.md)
Feature Map[`.ai/product/feature-map.md`](../../.ai/product/feature-map.md) · 竞品树:[`.ai/product/cece-feature-map.md`](../../.ai/product/cece-feature-map.md)
域词汇:[`.ai/domain.md`](../../.ai/domain.md) · 领域图:[`.ai/domain/domain-map.md`](../../.ai/domain/domain-map.md)
实现约束:[`.ai/architecture.md`](../../.ai/architecture.md) · playbooks: `add-api` / `new-page` / `payment`
关联:[Feature Map](../../.ai/product/feature-map.md) · [语言契约](../../.ai/product/lexicon.md) · [商业模式](business-model.md) · [路线图](product-roadmap.md)
域:[`.ai/domain.md`](../../.ai/domain.md) · [domain-map](../../.ai/domain/domain-map.md)
---
## 1. 目标 / 非目标
## 1. 定位
### 目标(MVP Done
通过数字性格、身心特征、关系理解与 AI 陪伴,帮助用户认识自己、理解他人的个人成长平台。
**user-h5 + api** 上跑通:
1. Visitor 输入生日 → 创建 **Self Profile** → 生成 **Decode** 简版(结论可见)
2. 付费墙:Unlock 完整 Decode **或** 开通 **Subscription**(可模拟支付)
3. 至少一个热门 **Scale**(如 MBTI)作答 → **ScaleResult** → 分享卡
4. 可创建 **Other Profile**,生成 **Match** 预览(分数可见,解读锁定)
5. 底栏 5 Tab 可用;Ask / Companion 允许规则模板占位,但入口与文案就位
6. 服务端可复算报告;客户端不信任本地解锁
### 非目标
- Consult 履约 / 达人双边
- mini-program 业务页
- UGC「玩法广场」
- 真实微信支付(用 `PAYMENT_MODE=mock`
- 长记忆多智能体 / 心情小镇级沉浸
飞轮:探索自己 → 个人档案 → 个性化分析 → AI 陪伴 → 会员深入 → 成长记录。
---
## 2. 用户与场景
## 2. P1 目标 / 非目标
| 画像 | 场景 | 成功指标 |
### 目标
**user-h5 + api** 跑通:
1. 创建 **Self Profile**(生日等)→ 生成 **Portrait** 基础画像(可见)
2. 付费墙:购买 **DeepAccess** 完整分析 **或** 开通 **Subscription**(可 mock
3. ≥1 个热门 **Scale****ScaleResult(探索结果)** → 分享卡
4. 创建 **Other Profile****RelationInsight**(差异可见,深度建议需 DeepAccess/VIP
5. 五 Tab:首页 / 探索 / **问答** / 陪伴 / 我的;问答挂档案;陪伴可占位
6. 成长报告字段由服务端按权益裁剪
### 非目标(P1
- 真人顾问履约、达人双边
- 小程序业务页
- UGC 玩法广场
- 真微信支付(`PAYMENT_MODE=mock`
- 长期记忆、运势/塔罗入口、疗效承诺文案
---
## 3. 信息架构
| Tab | 路由 | 内容 |
|---|---|---|
| P2 泛测评年轻女性 | 社交看到分享 → 测自己 | 完成 Decode 简版或 Scale |
| P1 养生决策者 | 要「适合自己的调理参考」 | 查看完整 Decode 体质方案段 |
| 关系困扰 | 帮 TA 测 / 看契合 | 创建 Other Profile + Match 预览 |
| 首页 | `/` | 档案入口 + 九宫格 + 推荐 |
| 探索 | `/explore` | 人格测评、性格探索、关系理解入口 |
| 问答 | `/ask` | AI 成长助手;顾问预约占位 |
| 陪伴 | `/companion` | 节气/心情占位或静态 |
| 我的 | `/mine` | 档案、成长报告、会员 |
二级:`/portrait` `/scales/:slug` `/relation` `/reports/:id`
文案禁止词见 lexicon(无「解码/运势/解锁」等主文案)。
---
## 3. 信息架构(5 Tab
## 4. 用户故事
| Tab | 路由建议 | 内容 |
|---|---|---|
| 首页 | `/` | 品牌 + Decode 输入 + 热门 Feed + 宫格 |
| 探索 | `/explore` | Scale 列表、Decode 入口;星镜/数字心理轻入口 |
| 问 | `/ask` | Ask:基于当前 Profile;Tab 旁路「顾问预约」占位 |
| 陪伴 | `/companion` | 今日 SolarTerm + Mood 打卡(可静态内容) |
| 我的 | `/mine` | Profiles、Membership、Orders、设置 |
### US1 性格探索 / 个人画像
二级:`/decode` `/scales/:slug` `/match` `/report/:id`
- 输入生日 → Profile + GrowthReport(Portrait)
- 免费:基础画像 + 1 条生活建议
- 深度版:完整分析 + 行为模式 + 成长方向
- 页脚免责声明(非医疗、非占卜)
### US2 人格测评
- 列表 API → 作答 → 服务端计分 → 探索结果 + 分享 + 引导问答/画像
### US3 关系理解
- 添加 TA → 双人差异概览 → 相处建议深度版锁定
### US4 会员
- 套餐 → mock 支付 → Membership;问答次数与深度版权益服务端扣减
---
## 4. 关键用户故事
## 5. 付费原则
### US1 Decode
- 输入 year/month/day → API 校验 → 落 Profile + Report(Decode)
- 简版:性格一句话 + 体质倾向一句话 + 1 条生活建议
- 完整:原因拆解 + 方案列表;需 Unlock 或 VIP
- 文案禁疗效 / 吉凶;页脚免责声明
### US2 Scale
- 列表来自 API;作答进度可本地缓存;提交服务端计分
- 结果页:类型/分数 + 分享 + 引导 Decode/Ask
### US3 Other + Match
- 「帮 TA 测」创建 Other Profile
- Match:展示契合分;解读段落锁定至 Unlock
### US4 Membershipmock
- 套餐展示;下单 → mock 支付成功 → Membership active
- Ask/完整报告次数按权益扣减(服务端)
免费给基础结论;付费给完整分析与方案(称「深度版」)。VIP 与单次 DeepAccess 二选一可达。
---
## 5. 付费墙原则
**免费给结论,付费给原因 + 方案。**
VIP 与单次 Unlock 二选一可达完整内容。
---
## 6. API 切片(MVP
统一信封见 `.ai/api.md`。最小集合:
## 6. API 切片(P1
| Method | Path | 说明 |
|---|---|---|
| POST | `/api/v1/profiles` | 创建 Self/Other Profile |
| GET | `/api/v1/profiles` | 列表 |
| POST | `/api/v1/reports/decode` | 生成 Decode(简/全由权益决定) |
| GET | `/api/v1/reports/:id` | 报告详情 |
| GET | `/api/v1/scales` | 量表列表 |
| GET | `/api/v1/scales/:slug` | 题目 |
| POST | `/api/v1/scales/:slug/result` | 提交作答 |
| POST | `/api/v1/match` | 契合度预览/完整 |
| POST | `/api/v1/orders` | 创建订单 |
| POST/GET | `/api/v1/profiles` | 档案 |
| POST | `/api/v1/reports/portrait` | 生成个人画像(简/全按权益) |
| GET | `/api/v1/reports/:id` | 成长报告详情 |
| GET | `/api/v1/scales` | 测评列表 |
| GET/POST | `/api/v1/scales/:slug``/result` | 题目与提交 |
| POST | `/api/v1/relation/insight` | 关系理解 |
| POST | `/api/v1/orders` | 下单 |
| POST | `/api/v1/orders/:id/pay-mock` | 模拟支付 |
| GET | `/api/v1/membership/me` | 当前权益 |
| GET | `/api/v1/solar-terms/today` | 今日节气 |
| POST | `/api/v1/moods` | 心情打卡(可后置 |
| GET | `/api/v1/membership/me` | 权益 |
| GET | `/api/v1/solar-terms/today` | 今日节气(可静态) |
| POST | `/api/v1/moods` | 心情(可 P2 |
AuthVisitor 可用 device token;注册后升级 User(见 ADR-0004
兼容:旧路径 `/reports/decode` 若存在应重定向/别名到 `portrait`,勿在新客户端写 decode
---
## 7. 验收QA
## 7. 验收
- [ ] 未付费看不到完整 Decode 原因段(抓包改本地也不生效)
- [ ] 模拟支付后同一 Report 可完整查看
- [ ] Other Profile + Match 预览分数、解读锁定
- [ ] Scale 提交返回稳定计分
- [ ] 文案无疗效/吉凶;有免责声明
- [ ] `go test ./...` `npm run build:h5` 通过
- [ ] `/api/v1/healthz` OK
- [ ] 未付费看不到完整分析段(改本地无效)
- [ ] mock 支付后同一报告可看深度版
- [ ] 关系理解:概览可见、深度建议锁定
- [ ] Scale 计分稳定
- [ ] UI 无禁用词;有免责声明
- [ ] `go test` / `npm run build:h5` 通过
---
## 8. 实现顺序(竖切)
## 8. 实现顺序
按 [product-roadmap.md](product-roadmap.md) Phase A→B→C;每刀走 `.ai/playbooks/add-api.md` + `new-page.md`
P1 竖切:Profile → Portrait → Commerce mock → Scale → RelationInsight → Ask 壳 → Companion 壳。
Playbook`add-api` / `new-page` / `payment`。语言先读 `lexicon.md`
+6 -73
View File
@@ -1,78 +1,11 @@
# 产品分期路线图
关联:[PRD MVP](prd-mvp.md) · [商业模式](business-model.md) · [`.ai/ROADMAP.md`](../../.ai/ROADMAP.md)(工程体系分期)
关联:[Feature Map](../../.ai/product/feature-map.md) · [PRD](prd-mvp.md) · [lexicon](../../.ai/product/lexicon.md)
实现一律竖切:API → types → H5playbook`add-api` / `new-page` / `payment`
---
## Phase A — 解码闭环(当前下一刀)
**目标:** Visitor 生日 → Profile → Decode 简/全权益 → mock Unlock/VIP
| 交付 | Playbook | Done |
|---|---|---|
| Profile CRUD API | add-api | |
| Decode 生成 + Report 读取(服务端裁剪字段) | add-api | |
| H5 首页表单接真 API + 报告页 | new-page | |
| Order + pay-mock + Membership | payment | |
| 免责声明与文案禁区 | review checklist | |
**退出标准:** PRD §7 中 Decode + Membership 相关项打勾。
---
## Phase B — 量表与关系
| 交付 | Playbook |
| Phase | 交付 |
|---|---|
| Scales 列表/题目/计分 API + 1 个热门量表 | add-api + new-page |
| Other Profile + Match 预览/锁定 | add-api + new-page |
| 分享卡(静态图或 canvas | new-page |
| 探索 Tab 接真数据 | new-page |
| **P1** | 档案 · Portrait · Scale · RelationInsight · Ask 壳 · DeepAccess/会员 mock |
| **P2** | 身心探索 · 节气 · 心情 · 成长计划 |
| **P3** | 长期记忆 · 成长库 · Consult |
**退出标准:** PRD US2/US3 验收通过
---
## Phase C — 问与陪伴骨架
| 交付 | 说明 |
|---|---|
| Ask:规则模板 + 权益次数 | 非 LLM 亦可;接口形状稳定 |
| SolarTerm 今日内容 API + 陪伴页 | 可先静态 CMS JSON |
| Mood 打卡最小写 | 可选 |
| 「顾问预约」占位页 | 不履约 |
**退出标准:** 5 Tab 均有真实或稳定占位数据;无死链。
---
## Phase D — 增长与平台(post-MVP
- 真实支付通道(微信支付等)
- Auth 升级、多端登录
- mini-program 适配(`packages/sdk`
- Consult 试点(合规评审后)
- 内容运营后台(admin-h5)最小可用
---
## 不做清单(直到明确开闸)
- UGC 玩法广场 / 达人市场
- GraphQL / 微服务拆分
- 长记忆多智能体陪伴
- 根目录遗留 HTML 继续加功能(见 `LEGACY.md`
---
## 与工程路线对齐
| 产品 Phase | 工程侧重 |
|---|---|
| AB | `apps/api` + `apps/user-h5` + Postgres |
| C | Redis 仍可延迟;Ask 限流按需 |
| D | 支付真通道、小程序、admin |
工程体系 Phase 2/3anti-patterns、metrics、mcp…)见 `.ai/ROADMAP.md`,不阻塞产品 AC。
竖切 playbook`add-api` / `new-page` / `payment`。UI 文案先过 lexicon
+1 -1
View File
@@ -20,7 +20,7 @@ const route = useRoute()
const items = [
{ to: '/', icon: '⌂', label: '首页' },
{ to: '/explore', icon: '◎', label: '探索' },
{ to: '/ask', icon: '问', label: '问', ask: true },
{ to: '/ask', icon: '问', label: '问', ask: true },
{ to: '/companion', icon: '♡', label: '陪伴' },
{ to: '/mine', icon: '◍', label: '我的' },
]
+6 -3
View File
@@ -1,8 +1,11 @@
<template>
<main class="page">
<h1></h1>
<p class="sub">愈心 AI · 基于档案的解读占位</p>
<div class="card">后续接入档案上下文问答真人顾问双轨同屏</div>
<h1></h1>
<p class="sub">AI 成长助手 · 结合你的档案回答占位</p>
<div class="card">
预置场景认识自己 · 理解关系 · 职业探索 · 情绪整理 · 生活建议
可切换我的档案 / TA 的档案深度分析为会员权益
</div>
</main>
</template>
+2 -2
View File
@@ -1,8 +1,8 @@
<template>
<main class="page">
<h1>陪伴</h1>
<p class="sub">节气 · 每日心情占位</p>
<div class="card">今日节气内容将由 API `/api/v1/solar-terms/today` 下发</div>
<p class="sub">节气生活 · 心情记录占位</p>
<div class="card">今日节气与生活建议将由 API 下发第二阶段完善心情与成长记录</div>
</main>
</template>
+6 -4
View File
@@ -1,11 +1,12 @@
<template>
<main class="page">
<h1>探索</h1>
<p class="sub">量表 · 数字心理 · 星镜逐步迁入</p>
<p class="sub">性格探索 · 人格测评 · 关系理解 · 个人画像</p>
<ul class="list">
<li>性格测评库对接 /api/v1/scales</li>
<li>数字心理学</li>
<li>星镜</li>
<li><router-link to="/portrait">性格探索 / 个人画像</router-link></li>
<li>人格测评库对接 /api/v1/scales</li>
<li><router-link to="/relation">关系理解</router-link></li>
<li>身心探索第二阶段</li>
</ul>
</main>
</template>
@@ -15,4 +16,5 @@
h1{font-size:22px}
.sub{color:var(--yxg-sub);font-size:13px;margin:6px 0 16px}
.list{background:#fff;border-radius:16px;padding:8px 16px;line-height:2.2;font-size:14px;color:#555}
.list a{color:inherit;text-decoration:none}
</style>
+19 -16
View File
@@ -2,12 +2,12 @@
<main class="home">
<header class="brand">
<div class="word"><span></span></div>
<p class="tag">愈见自己 · 遇见更好</p>
<p class="tag">认识自己 · 理解他人</p>
</header>
<section class="decode-card">
<h2>愈心解码</h2>
<p class="sub">一个生日读懂你的身与心</p>
<section class="portrait-card">
<h2>性格探索</h2>
<p class="sub">填写生日生成你的成长画像</p>
<div class="row">
<input v-model="year" type="number" placeholder="1990" />
<span></span>
@@ -15,15 +15,15 @@
<span></span>
<input v-model="day" type="number" placeholder="1" />
<span></span>
<button type="button" @click="goDecode">生成</button>
<button type="button" @click="goPortrait">开始</button>
</div>
<p v-if="err" class="err">{{ err }}</p>
</section>
<section class="block">
<div class="head"><h3>认识自己</h3><router-link to="/explore">全部</router-link></div>
<div class="head"><h3>快捷入口</h3><router-link to="/explore">全部</router-link></div>
<div class="grid">
<router-link v-for="t in tests" :key="t.to" :to="t.to" class="cell">
<router-link v-for="t in entries" :key="t.to" :to="t.to" class="cell">
<div class="icon" :style="{ background: t.bg, color: t.fg }">{{ t.icon }}</div>
<span>{{ t.label }}</span>
</router-link>
@@ -50,14 +50,17 @@ const day = ref('')
const err = ref('')
const apiStatus = ref('检测中…')
const tests = [
{ to: '/decode', icon: '△', label: '愈心解码', bg: '#FFF3D6', fg: '#C8923A' },
{ to: '/explore', icon: '◆', label: '格测评', bg: '#E3EEFF', fg: '#4A90E2' },
{ to: '/ask', icon: '', label: '愈心问答', bg: '#FFE4E4', fg: '#E54D42' },
const entries = [
{ to: '/portrait', icon: '△', label: '性格探索', bg: '#FFF3D6', fg: '#C8923A' },
{ to: '/explore', icon: '◆', label: '格测评', bg: '#E3EEFF', fg: '#4A90E2' },
{ to: '/relation', icon: '', label: '关系理解', bg: '#FFE8D6', fg: '#E8985A' },
{ to: '/ask', icon: '问', label: 'AI问答', bg: '#FFE4E4', fg: '#E54D42' },
{ to: '/companion', icon: '☯', label: '节气陪伴', bg: '#E0F6E4', fg: '#5CB85C' },
{ to: '/profile', icon: '◍', label: '个人档案', bg: '#F0F4F8', fg: '#5A6A7A' },
{ to: '/membership', icon: '◇', label: '成长会员', bg: '#F5F0FF', fg: '#8B5CF6' },
]
function goDecode() {
function goPortrait() {
const y = Number(year.value)
const m = Number(month.value)
const d = Number(day.value)
@@ -67,7 +70,7 @@ function goDecode() {
return
}
err.value = ''
router.push({ path: '/decode', query: { y: String(y), m: String(m), d: String(d) } })
router.push({ path: '/portrait', query: { y: String(y), m: String(m), d: String(d) } })
}
onMounted(async () => {
@@ -86,11 +89,11 @@ onMounted(async () => {
.word{font-size:28px;font-weight:700;letter-spacing:.18em}
.word span{color:var(--yxg-pri)}
.tag{font-size:12px;color:rgba(0,0,0,.38);margin-top:6px;letter-spacing:.12em}
.decode-card{
.portrait-card{
background:#fff;border-radius:20px;padding:18px 14px;text-align:center;
box-shadow:0 8px 28px rgba(229,77,66,.12);
}
.decode-card h2{font-size:17px;color:var(--yxg-gold);letter-spacing:.1em}
.portrait-card h2{font-size:17px;color:var(--yxg-gold);letter-spacing:.1em}
.sub{font-size:12px;color:#aaa;margin:4px 0 14px}
.row{display:flex;gap:6px;align-items:center;justify-content:center;flex-wrap:wrap}
.row input{
@@ -106,7 +109,7 @@ onMounted(async () => {
.head{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}
.head h3{font-size:16px}
.head a{font-size:12px;color:#bbb}
.grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px 8px}
.grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px 8px}
.cell{display:flex;flex-direction:column;align-items:center;gap:8px;font-size:11px;color:#555}
.icon{
width:52px;height:52px;border-radius:18px;display:flex;align-items:center;justify-content:center;font-size:20px;
+18
View File
@@ -0,0 +1,18 @@
<template>
<main class="page">
<button class="back" type="button" @click="$router.back()"> 返回</button>
<h1>成长会员</h1>
<p class="sub">完整分析 · AI成长助手更多次数 · 专属内容</p>
<div class="card">
/ / 年套餐与模拟支付将接入 /api/v1/orders亦可在成长报告内选择深度版单次完整分析
</div>
</main>
</template>
<style scoped>
.page{padding:16px}
.back{border:none;background:#fff;border-radius:10px;padding:8px 12px;margin-bottom:12px}
h1{font-size:22px}
.sub{color:var(--yxg-sub);margin:8px 0 14px;font-size:13px}
.card{background:#fff;border-radius:16px;padding:18px;font-size:14px;line-height:1.7;color:#555}
</style>
+9 -3
View File
@@ -1,8 +1,13 @@
<template>
<main class="page">
<h1>我的</h1>
<p class="sub">档案 · 会员 · 订单</p>
<div class="card">登录与会员状态将在商业化阶段接入</div>
<p class="sub">个人档案 · 成长报告 · 成长会员</p>
<ul class="list">
<li><router-link to="/profile">个人档案</router-link></li>
<li><router-link to="/portrait">个人画像</router-link></li>
<li><router-link to="/relation">关系理解</router-link></li>
<li><router-link to="/membership">成长会员</router-link></li>
</ul>
</main>
</template>
@@ -10,5 +15,6 @@
.page{padding:24px 16px}
h1{font-size:22px}
.sub{color:var(--yxg-sub);font-size:13px;margin:6px 0 16px}
.card{background:#fff;border-radius:16px;padding:18px;font-size:14px;color:#666;line-height:1.6}
.list{background:#fff;border-radius:16px;padding:8px 16px;line-height:2.2;font-size:14px;color:#555}
.list a{color:inherit;text-decoration:none}
</style>
@@ -1,13 +1,13 @@
<template>
<main class="page">
<button class="back" type="button" @click="$router.back()"> 返回</button>
<h1>愈心解码</h1>
<h1>个人画像</h1>
<p class="sub" v-if="y">生日{{ y }}-{{ m }}-{{ d }}</p>
<div class="card">
简版报告将由 Go API 生成当前为页面骨架完整结论免费 / 原因付费逻辑 PRD
基础画像将由 API 生成免费可见基础结论完整分析为深度版或会员权益 PRD
</div>
<p class="disc">
本内容为文化测评与健康生活方式参考不构成医疗建议
本内容为自我探索与生活方式参考不构成医疗建议亦非占卜预测
</p>
</main>
</template>
+20
View File
@@ -0,0 +1,20 @@
<template>
<main class="page">
<button class="back" type="button" @click="$router.back()"> 返回</button>
<h1>个人档案</h1>
<p class="sub">管理我的信息与重要的人</p>
<div class="card">
支持创建我的档案添加伴侣/家人/朋友并在问答中切换解读对象数据接口/api/v1/profiles
</div>
<router-link class="link" to="/relation">去完善关系理解 </router-link>
</main>
</template>
<style scoped>
.page{padding:16px}
.back{border:none;background:#fff;border-radius:10px;padding:8px 12px;margin-bottom:12px}
h1{font-size:22px}
.sub{color:var(--yxg-sub);margin:8px 0 14px;font-size:13px}
.card{background:#fff;border-radius:16px;padding:18px;font-size:14px;line-height:1.7;color:#555}
.link{display:inline-block;margin-top:16px;font-size:14px;color:var(--yxg-pri)}
</style>
+18
View File
@@ -0,0 +1,18 @@
<template>
<main class="page">
<button class="back" type="button" @click="$router.back()"> 返回</button>
<h1>关系理解</h1>
<p class="sub">添加重要的人了解双方差异与相处建议</p>
<div class="card">
双人分析与深度相处建议将在 P1 接入 API概览免费可见完整建议为深度版或会员权益
</div>
</main>
</template>
<style scoped>
.page{padding:16px}
.back{border:none;background:#fff;border-radius:10px;padding:8px 12px;margin-bottom:12px}
h1{font-size:22px}
.sub{color:var(--yxg-sub);margin:8px 0 14px;font-size:13px}
.card{background:#fff;border-radius:16px;padding:18px;font-size:14px;line-height:1.7;color:#555}
</style>
+5 -1
View File
@@ -8,7 +8,11 @@ const router = createRouter({
{ path: '/ask', name: 'ask', component: () => import('../pages/AskPage.vue'), meta: { tab: true } },
{ path: '/companion', name: 'companion', component: () => import('../pages/CompanionPage.vue'), meta: { tab: true } },
{ path: '/mine', name: 'mine', component: () => import('../pages/MinePage.vue'), meta: { tab: true } },
{ path: '/decode', name: 'decode', component: () => import('../pages/DecodePage.vue'), meta: { tab: false } },
{ path: '/profile', name: 'profile', component: () => import('../pages/ProfilePage.vue'), meta: { tab: false } },
{ path: '/portrait', name: 'portrait', component: () => import('../pages/PortraitPage.vue'), meta: { tab: false } },
{ path: '/relation', name: 'relation', component: () => import('../pages/RelationPage.vue'), meta: { tab: false } },
{ path: '/membership', name: 'membership', component: () => import('../pages/MembershipPage.vue'), meta: { tab: false } },
{ path: '/decode', redirect: (to) => ({ path: '/portrait', query: to.query }) },
],
})