From 31e504a997399c0d85b69566eaf3d43f82d7e48b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E4=BD=A0=C3=A7=C2=9Anepiedg?= <你的yunchuansong@163.com>
Date: Wed, 18 Mar 2026 00:06:01 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E6=A8=A1=E5=BC=8F?=
=?UTF-8?q?=E9=80=89=E6=8B=A9=E5=8A=9F=E8=83=BD=E4=B8=8E=E9=A1=B5=E9=9D=A2?=
=?UTF-8?q?=E6=9B=B4=E6=96=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 在 onboarding 页面中新增使用模式选择功能,用户可选择“戒烟打卡”或“记录抽烟”模式
- 更新个人资料页面以显示当前模式并允许用户切换模式
- 在 pages.json 中注册新的模式选择页面
- 优化首页和其他相关页面以适应新模式功能
---
docs/smt双模式改造方案.md | 532 +++++++++++++
docs/戒烟产品分析-smt-vs-quit-checkin.md | 303 ++++++++
pages.json | 6 +
pages/index/index.vue | 934 ++++++++++++-----------
pages/mode-select/index.vue | 219 ++++++
pages/onboarding/index.vue | 126 ++-
pages/profile/index.vue | 139 +++-
stores/profile.js | 9 +
stores/user.js | 13 +-
utils/storage.js | 2 +
10 files changed, 1818 insertions(+), 465 deletions(-)
create mode 100644 docs/smt双模式改造方案.md
create mode 100644 docs/戒烟产品分析-smt-vs-quit-checkin.md
create mode 100644 pages/mode-select/index.vue
diff --git a/docs/smt双模式改造方案.md b/docs/smt双模式改造方案.md
new file mode 100644
index 0000000..7900a34
--- /dev/null
+++ b/docs/smt双模式改造方案.md
@@ -0,0 +1,532 @@
+# smt 双模式改造方案
+
+> 创建时间:2026-03-17
+> 状态:待开发
+> 相关文档:[[戒烟产品分析-smt-vs-quit-checkin]]
+
+---
+
+## 📁 现有项目结构
+
+```
+smt/
+├── api/ # 接口封装
+│ ├── auth.js # 登录认证
+│ ├── smoke.js # 抽烟记录 API
+│ ├── profile.js # 用户资料 API
+│ ├── request.js # 请求封装
+│ └── index.js # 统一导出
+├── components/ # 业务组件
+│ └── smoke-record-dialog/ # 记录弹框组件
+├── config/ # 环境配置
+│ └── index.js # BASE_URL 配置
+├── hooks/ # 组合式逻辑
+│ └── useLogin.js # 登录相关 hook
+├── pages/ # 页面
+│ ├── index/ # 首页 ⭐ 需要改造
+│ ├── stats/ # 统计页
+│ ├── logs/ # 历史记录页
+│ ├── ai/ # AI 建议
+│ ├── ai_summary/ # AI 总结
+│ ├── share/ # 分享页
+│ ├── profile/ # 个人中心
+│ ├── quit-plan/ # 戒烟计划
+│ └── onboarding/ # 新用户引导 ⭐ 需要改造
+├── stores/ # Pinia 状态管理
+│ ├── user.js # 用户状态 ⭐ 需要扩展
+│ ├── profile.js # 用户资料 ⭐ 需要扩展
+│ ├── logs.js # 记录状态
+│ ├── dashboard.js # 首页数据
+│ └── index.js # 统一导出
+├── utils/ # 工具函数
+│ ├── storage.js # 本地存储 ⭐ 需要扩展
+│ ├── time.js # 时间处理
+│ └── format.js # 格式化
+├── static/ # 静态资源
+├── App.vue # 应用入口
+├── main.js # 主入口
+├── pages.json # 页面配置 ⭐ 需要修改
+└── manifest.json # 小程序配置
+```
+
+---
+
+## 🔧 需要修改/新增的文件
+
+### 新增文件
+
+| 文件路径 | 说明 |
+|----------|------|
+| `pages/mode-select/index.vue` | **新增** - 模式选择引导页 |
+| `pages/quit-home/index.vue` | **新增** - 戒烟打卡模式首页 |
+| `pages/record-home/index.vue` | **新增** - 记录抽烟模式首页 |
+| `components/quit-checkin-btn/index.vue` | **新增** - 打卡按钮组件 |
+| `components/simple-counter/index.vue` | **新增** - 简易计数器组件 |
+
+### 需要修改的文件
+
+| 文件路径 | 修改内容 |
+|----------|----------|
+| `stores/user.js` | 添加 `mode` 字段存储用户模式 |
+| `stores/profile.js` | 添加 `quitDays` 戒烟天数计算 |
+| `utils/storage.js` | 添加 `USER_MODE_KEY` 常量 |
+| `pages.json` | 添加新页面路由,修改首页逻辑 |
+| `pages/onboarding/index.vue` | 完成引导后跳转到模式选择页 |
+| `pages/profile/index.vue` | 添加模式切换入口 |
+| `pages/index/index.vue` | 根据模式渲染不同首页(可选方案) |
+
+---
+
+## 📝 详细代码修改
+
+### 1. `utils/storage.js` - 新增常量
+
+```javascript
+export const USER_MODE_KEY = 'user_mode' // 新增
+```
+
+---
+
+### 2. `stores/user.js` - 扩展用户模式
+
+```javascript
+import { defineStore } from 'pinia'
+import { storage, USER_KEY, SESSION_KEY, USER_MODE_KEY } from '@/utils/storage'
+
+export const useUserStore = defineStore('user', {
+ state: () => ({
+ user: storage.get(USER_KEY),
+ sessionKey: storage.get(SESSION_KEY),
+ isLoggedIn: !!storage.get(SESSION_KEY),
+ mode: storage.get(USER_MODE_KEY) || null // 'quit' | 'record' | null
+ }),
+
+ actions: {
+ setUser(user, sessionKey) {
+ this.user = user
+ this.sessionKey = sessionKey
+ this.isLoggedIn = true
+ storage.set(USER_KEY, user)
+ storage.set(SESSION_KEY, sessionKey)
+ },
+
+ setMode(mode) {
+ this.mode = mode
+ storage.set(USER_MODE_KEY, mode)
+ },
+
+ logout() {
+ this.user = null
+ this.sessionKey = null
+ this.isLoggedIn = false
+ storage.remove(USER_KEY)
+ storage.remove(SESSION_KEY)
+ }
+ }
+})
+```
+
+---
+
+### 3. `pages.json` - 添加新页面
+
+```json
+{
+ "pages": [
+ {
+ "path": "pages/mode-select/index",
+ "style": {
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "pages/quit-home/index",
+ "style": {
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "pages/record-home/index",
+ "style": {
+ "navigationBarTitleText": "记录抽烟"
+ }
+ },
+ {
+ "path": "pages/index/index",
+ "style": {
+ "navigationStyle": "custom"
+ }
+ }
+ ]
+}
+```
+
+---
+
+### 4. `pages/mode-select/index.vue` - 模式选择页
+
+```vue
+
+
+
+ 你想怎么戒烟?
+ 选择适合你的方式
+
+
+
+ 🌟
+
+ 我要戒烟打卡
+ 记录坚持的天数,获得成就感
+
+
+
+
+ 📊
+
+ 我要记录抽烟
+ 跟踪抽烟频率,分析戒烟进度
+
+
+
+
+
+
+
+
+```
+
+---
+
+### 5. `pages/quit-home/index.vue` - 戒烟打卡首页
+
+**界面设计:**
+
+```
+┌─────────────────────────┐
+│ 🔥 已坚持 23 天 │
+│ │
+│ ┌─────────┐ │
+│ │ 打卡 │ │
+│ │ 今天没抽│ │
+│ └─────────┘ │
+│ │
+│ 💰 已省下 184 元 │
+│ 🫁 肺部正在恢复中... │
+│ │
+│ ───────────────────── │
+│ 今日打卡 ✓ 08:30 │
+└─────────────────────────┘
+```
+
+**核心代码:**
+
+```vue
+
+
+
+
+
+
+ {{ todayChecked ? '✓' : '🔥' }}
+ {{ todayChecked ? '今日已打卡' : '打卡' }}
+
+
+
+
+
+ ¥{{ savedMoney }}
+ 已省下
+
+
+ {{ healthProgress }}%
+ 健康恢复
+
+
+
+
+ 🫁
+ {{ healthTip }}
+
+
+
+
+
+```
+
+---
+
+### 6. `pages/record-home/index.vue` - 记录抽烟首页
+
+**界面设计:**
+
+```
+┌─────────────────────────┐
+│ 今天抽了 3 根 │
+│ │
+│ ┌─────────┐ │
+│ │ +1 根 │ │
+│ │ 点击记录│ │
+│ └─────────┘ │
+│ │
+│ 昨日:4 根 │
+│ 本周:18 根 │
+│ │
+│ ───────────────────── │
+│ 历史记录 > │
+└─────────────────────────┘
+```
+
+**核心代码:**
+
+```vue
+
+
+
+ 今天抽了
+ {{ todayCount }}
+ 根
+
+
+
+ +
+ 记录一根
+
+
+
+
+ 昨日
+ {{ yesterdayCount }} 根
+
+
+ 本周
+ {{ weekCount }} 根
+
+
+
+
+
+
+
+
+```
+
+---
+
+### 7. `pages/profile/index.vue` - 添加模式切换
+
+在个人中心添加:
+
+```vue
+
+
+
+```
+
+---
+
+## 📋 开发顺序
+
+| 阶段 | 任务 | 预估时间 | 状态 |
+|------|------|----------|------|
+| **第一阶段** | 1. 修改 `utils/storage.js`
2. 修改 `stores/user.js`
3. 创建 `pages/mode-select/index.vue`
4. 修改 `pages.json` | 1-2h | ⬜ 待开始 |
+| **第二阶段** | 1. 创建 `pages/quit-home/index.vue`
2. 打卡 API 对接
3. 省钱金额计算 | 2-3h | ⬜ 待开始 |
+| **第三阶段** | 1. 创建 `pages/record-home/index.vue`
2. 一键记录 API 对接 | 1-2h | ⬜ 待开始 |
+| **第四阶段** | 1. 修改 `pages/profile/index.vue` 模式切换
2. 修改引导流程跳转逻辑 | 1h | ⬜ 待开始 |
+
+**总预估:5-8 小时**
+
+---
+
+## ⚠️ 注意事项
+
+### 1. TabBar 问题
+
+如果要让两种模式共用 TabBar,首页需要根据 mode 动态渲染:
+
+```vue
+
+
+
+
+
+```
+
+### 2. 数据兼容
+
+老用户没有 mode 字段,需要引导选择模式:
+
+```javascript
+// App.vue 或首页
+if (!userStore.mode) {
+ uni.redirectTo({ url: '/pages/mode-select/index' })
+}
+```
+
+### 3. API 对接
+
+打卡功能需要后端新增接口:
+
+```
+POST /api/checkin
+{
+ "date": "2026-03-17",
+ "quit_days": 23
+}
+```
+
+或复用现有 resisted 接口。
+
+---
+
+## 🔗 相关文档
+
+- [[戒烟产品分析-smt-vs-quit-checkin]]
+- [[smt - 技术文档]]
+- [[quit-checkin - 技术文档]]
+
+---
+
+#技术开发 #smt #戒烟 #小程序 #双模式
diff --git a/docs/戒烟产品分析-smt-vs-quit-checkin.md b/docs/戒烟产品分析-smt-vs-quit-checkin.md
new file mode 100644
index 0000000..8466c37
--- /dev/null
+++ b/docs/戒烟产品分析-smt-vs-quit-checkin.md
@@ -0,0 +1,303 @@
+# 戒烟产品分析 - smt vs quit-checkin
+
+> 创建时间:2026-03-17
+> 状态:进行中
+> 相关项目:[[smt]]、[[quit-checkin]]
+
+---
+
+## 📊 产品对比
+
+### 基本信息
+
+| 维度 | smt(戒烟助手) | quit-checkin(无烟打卡) |
+|------|----------------|------------------------|
+| **定位** | 戒烟助手(完整版) | 无烟打卡(轻量版) |
+| **技术栈** | uni-app + Vue 3 + Pinia | uni-app + Vue 3 + Vite |
+| **功能丰富度** | 高 | 低 |
+| **当前问题** | 日活少、推广难、记录违背人性 | 功能单一 |
+
+### 核心功能对比
+
+| 功能 | smt | quit-checkin |
+|------|-----|--------------|
+| 记录抽烟 | ✅ 详细记录(数量、等级、备注) | ❌ |
+| 记录忍住 | ✅ | ❌ |
+| 打卡 | ❌ | ✅ 核心功能 |
+| 统计分析 | ✅ 周/月/年趋势 | ✅ 基础统计 |
+| AI 建议 | ✅ | ❌ |
+| 健康恢复指标 | ✅ | ❌ |
+| 省钱计算 | ✅ | ❌ |
+| 戒烟计划 | ✅ | ❌ |
+| 梦想激励 | ❌ | ✅ |
+| 分享海报 | ❌ | ✅ |
+
+---
+
+## 🎯 产品定位差异
+
+### smt(戒烟助手)
+- **核心理念**:数据驱动戒烟
+- **用户行为**:主动记录抽烟/忍住
+- **心理感受**:审计失败(每次记录都是承认失败)
+- **价值点**:数据分析、AI建议、健康指标
+
+### quit-checkin(无烟打卡)
+- **核心理念**:正向激励戒烟
+- **用户行为**:每日打卡
+- **心理感受**:奖励成功(每次打卡都是成就积累)
+- **价值点**:天数累计、省钱金额、分享炫耀
+
+---
+
+## 👥 目标用户分析
+
+### smt 用户画像
+- 25-45岁,有一定烟龄
+- 想系统化戒烟,需要数据和指导
+- 愿意投入时间精力管理戒烟过程
+- 对数据分析有需求
+
+### quit-checkin 用户画像
+- 年轻用户,轻度戒烟需求
+- 想简单打卡记录
+- 注重社交分享和成就感
+- 使用场景:每日打卡、简单记录
+
+---
+
+## 📈 获取用户难度对比
+
+| 维度 | smt | quit-checkin | 评分 |
+|------|-----|--------------|------|
+| **获客门槛** | 中等(需引导流程) | 低(即开即用) | QC胜 ⭐⭐⭐⭐ |
+| **分享裂变** | 弱(展示失败) | 强(海报分享) | QC胜 ⭐⭐⭐⭐ |
+| **首次体验** | 需完成引导问卷 | 直接打卡 | QC胜 ⭐⭐⭐⭐ |
+| **推广成本** | 高 | 低(自带裂变) | QC胜 ⭐⭐⭐⭐⭐ |
+
+**结论:quit-checkin 更容易获取用户**
+
+---
+
+## 💪 用户活跃度/留存潜力对比
+
+| 维度 | smt | quit-checkin | 评分 |
+|------|-----|--------------|------|
+| **核心钩子** | AI建议、健康指标 | 打卡成就感 | smt胜 ⭐⭐⭐⭐ |
+| **回访理由** | 统计、省钱金额 | 天数累计 | smt胜 ⭐⭐⭐⭐ |
+| **社交属性** | 弱 | 海报分享,较强 | QC胜 ⭐⭐⭐ |
+| **激励体系** | 数据驱动 | 正向激励 | 平手 ⭐⭐⭐ |
+| **长期留存** | 高(功能丰富) | 中(功能单一) | smt胜 ⭐⭐⭐⭐⭐ |
+
+**结论:smt 活跃度潜力更高**
+
+---
+
+## 💰 商业化潜力对比
+
+| 维度 | smt | quit-checkin | 评分 |
+|------|-----|--------------|------|
+| **付费场景** | 高级AI、戒烟计划、专家咨询 | 会员特权、定制海报 | smt胜 ⭐⭐⭐⭐⭐ |
+| **广告场景** | 戒烟产品、健康产品 | 戒烟产品 | 平手 ⭐⭐⭐ |
+| **增值服务** | 数据报告、专家咨询 | 较少 | smt胜 ⭐⭐⭐⭐ |
+
+**结论:smt 商业化潜力更高**
+
+---
+
+## 🔍 核心问题诊断
+
+### 为什么 smt 日活少?
+
+#### 人性因素分析
+
+| 人性因素 | 具体表现 |
+|----------|----------|
+| **懒惰** | 每次抽烟都要打开小程序记录,太麻烦 |
+| **遗忘** | 抽烟是无意识行为,抽完就忘了记录 |
+| **逃避心理** | 记录=承认自己又抽了,心理负担重 |
+| **即时反馈弱** | 记录后没有即时奖励,动力不足 |
+| **挫败感** | 越记录越发现自己抽得多,想放弃 |
+
+**本质问题:产品要求用户"主动做额外的事",而人是厌恶"额外负担"的。**
+
+---
+
+## 💡 PM 建议(2026-03-17)
+
+### 🎯 决策:全力转向 quit-checkin
+
+**核心理由:戒烟产品本质是"情绪按摩",不是"数据监控"**
+
+| 维度 | smt | quit-checkin |
+|------|-----|--------------|
+| **心理契合** | 记录=审计失败 ❌ | 打卡=奖励成功 ✅ |
+| **传播力** | 没人分享抽烟记录 ❌ | 愿意分享"戒烟100天" ✅ |
+| **维护成本** | AI+统计,成本高 ❌ | 逻辑简单,好维护 ✅ |
+| **获客成本** | 高 ❌ | 自带裂变,0成本 ✅ |
+
+### 具体操作建议
+
+#### 1. 不要废弃 smt,而是"取其精华"
+
+把 smt 的高价值功能**降维**嵌入 quit-checkin:
+
+| smt 功能 | 如何嵌入 quit-checkin |
+|----------|----------------------|
+| 健康恢复指标 | 打卡满X天解锁视图 |
+| AI 建议 | 只在"快忍不住了"时弹出应急 |
+| 省钱账单 | 打卡页实时显示"已省XX元" |
+
+#### 2. 运营迁移
+
+- smt 首页加提示:**"轻量版上线,试试更简单的无烟打卡"**
+- 老用户可将 smt 数据同步到 quit-checkin(保留成就感)
+
+#### 3. quit-checkin 迭代重点
+
+- **视觉溢价**:把分享海报做得高级,让用户有面子
+- **梦想激励**:打卡省下的钱填补梦想进度条(如:给女儿买钢琴)
+- **仪式感**:打卡动效、勋章音效,让用户对"点一下"上瘾
+
+---
+
+## 🚀 改造方案:smt 双模式
+
+### 核心思路
+
+在现有 smt 基础上快速迭代,而不是推倒重来:
+
+1. **首次启动引导**:让用户选择"戒烟打卡"或"记录抽烟"
+2. **根据选择切换首页**:不同模式展示不同界面
+3. **保留历史数据**:用户历史数据兼容
+
+### 优势
+
+| 维度 | 说明 |
+|------|------|
+| **用户不流失** | 现有用户平滑过渡,无需迁移 |
+| **开发成本低** | 复用现有代码,增量修改 |
+| **数据保留** | 用户历史数据不丢失 |
+| **快速验证** | 改动小,可以快速上线测试 |
+
+---
+
+### 首次启动引导设计
+
+```
+┌─────────────────────────┐
+│ 你想怎么戒烟? │
+│ │
+│ ┌───────────────────┐ │
+│ │ 🌟 我要戒烟打卡 │ │
+│ │ 记录坚持的天数 │ │
+│ └───────────────────┘ │
+│ │
+│ ┌───────────────────┐ │
+│ │ 📊 我要记录抽烟 │ │
+│ │ 跟踪抽烟频率 │ │
+│ └───────────────────┘ │
+│ │
+└─────────────────────────┘
+```
+
+---
+
+### 模式一:戒烟打卡(quit-checkin 风格)
+
+**首页改造:**
+
+```
+┌─────────────────────────┐
+│ 🔥 已坚持 23 天 │
+│ │
+│ ┌─────────┐ │
+│ │ 打卡 │ │
+│ │ 今天没抽│ │
+│ └─────────┘ │
+│ │
+│ 💰 已省下 184 元 │
+│ 🫁 肺部正在恢复中... │
+│ │
+│ ───────────────────── │
+│ 今日打卡 ✓ 08:30 │
+└─────────────────────────┘
+```
+
+---
+
+### 模式二:记录抽烟(精简版)
+
+**首页改造:**
+
+```
+┌─────────────────────────┐
+│ 今天抽了 3 根 │
+│ │
+│ ┌─────────┐ │
+│ │ +1 根 │ │
+│ │ 点击记录│ │
+│ └─────────┘ │
+│ │
+│ 昨日:4 根 │
+│ 本周:18 根 │
+│ │
+│ ───────────────────── │
+│ 历史记录 > │
+└─────────────────────────┘
+```
+
+**点击按钮 → 直接 +1,无需弹框**
+
+---
+
+## 📋 开发清单
+
+### 第一阶段:引导 + 模式切换
+
+| 任务 | 预估时间 | 状态 |
+|------|----------|------|
+| 新增引导页 | 2h | ⬜ 待开始 |
+| 用户模式存储 | 0.5h | ⬜ 待开始 |
+| 首页条件渲染 | 1h | ⬜ 待开始 |
+| 模式切换入口(个人中心) | 1h | ⬜ 待开始 |
+
+### 第二阶段:戒烟打卡模式
+
+| 任务 | 预估时间 | 状态 |
+|------|----------|------|
+| 打卡按钮 + 动效 | 2h | ⬜ 待开始 |
+| 天数累计展示 | 1h | ⬜ 待开始 |
+| 省钱金额计算 | 0.5h | ⬜ 待开始 |
+| 健康恢复指标(从 smt 搬运) | 2h | ⬜ 待开始 |
+
+### 第三阶段:记录抽烟模式精简
+
+| 任务 | 预估时间 | 状态 |
+|------|----------|------|
+| 首页大按钮 +1 | 1h | ⬜ 待开始 |
+| 精简历史记录页 | 1h | ⬜ 待开始 |
+| 统计页精简 | 1h | ⬜ 待开始 |
+
+---
+
+## 🗓️ 下一步行动
+
+| 时间 | 行动 | 状态 |
+|------|------|------|
+| **本周** | 停止 smt 新功能开发,仅维持运行 | ⬜ 待开始 |
+| **下周** | 优化 quit-checkin 分享海报,搬运 smt 健康指标 | ⬜ 待开始 |
+| **下个月** | 小红书/即刻以"自律打卡"推广 quit-checkin | ⬜ 待开始 |
+
+---
+
+## 📎 相关文档
+
+- [[smt - 技术文档]]
+- [[quit-checkin - 技术文档]]
+- [[戒烟产品市场调研]]
+- [[微信小程序运营策略]]
+
+---
+
+#产品分析 #戒烟 #小程序 #smt #quit-checkin
diff --git a/pages.json b/pages.json
index 52ac202..99b3aa7 100644
--- a/pages.json
+++ b/pages.json
@@ -6,6 +6,12 @@
}
},
"pages": [
+ {
+ "path": "pages/mode-select/index",
+ "style": {
+ "navigationStyle": "custom"
+ }
+ },
{
"path": "pages/index/index",
"style": {
diff --git a/pages/index/index.vue b/pages/index/index.vue
index 353d70f..5d80644 100644
--- a/pages/index/index.vue
+++ b/pages/index/index.vue
@@ -1,18 +1,19 @@
-
-
+
-
-
-
-
-
+
+
+
+
+
+
+
-