Prechádzať zdrojové kódy

feat: update workspace and add new canvas files for AskYi project

- Changed active file in workspace.json to reflect new canvas file for pages.
- Updated view state coordinates and zoom level in workspace.json.
- Added new canvas file for pages with detailed UI and API specifications.
- Introduced multiple new PNG files for Playwright testing related to AskYi project.
yb 3 týždňov pred
rodič
commit
f793c1913b

+ 12 - 12
.obsidian/workspace.json

@@ -13,11 +13,11 @@
             "state": {
               "type": "canvas",
               "state": {
-                "file": "askyi/askyi-h5/architecture.canvas",
+                "file": "askyi/askyi-uniapp/architecture.canvas",
                 "viewState": {
-                  "x": -171.57996778793813,
-                  "y": 270.0189400812796,
-                  "zoom": -0.6738566080729167
+                  "x": -287.7825081269054,
+                  "y": -1570.0727786453326,
+                  "zoom": -1.2032226562499997
                 }
               },
               "icon": "lucide-layout-dashboard",
@@ -56,7 +56,7 @@
             "state": {
               "type": "search",
               "state": {
-                "query": "",
+                "query": "hot/",
                 "matchingCase": false,
                 "explainSearch": false,
                 "collapseAll": false,
@@ -64,7 +64,7 @@
                 "sortOrder": "alphabetical"
               },
               "icon": "lucide-search",
-              "title": "搜索"
+              "title": "Search"
             }
           },
           {
@@ -186,20 +186,21 @@
       "command-palette:Open command palette": false
     }
   },
-  "active": "cf8a89fa88ac988b",
+  "active": "d1c67f0d3fca314e",
   "lastOpenFiles": [
+    "askyi/askyi-h5/pages.canvas",
+    "askyi/askyi-h5/_project.md",
+    "askyi/askyi-h5/architecture.canvas",
+    "askyi/askyi-uniapp/_project.md",
+    "askyi/askyi-uniapp/architecture.canvas",
     "askyi/_project.md.tmp.58558.1767539247507",
     "askyi/_project.md.tmp.58558.1767539238307",
     "askyi/_project.md.tmp.58558.1767539226075",
     "askyi/_project.md.tmp.58558.1767539216460",
     "askyi/_project.md.tmp.58558.1767539207199",
-    "askyi/askyi-uniapp/architecture.canvas",
-    "askyi/askyi-uniapp/_project.md",
     "askyi/askyi-uniapp",
     "tg-live-game/tg-live-game-hono/auth-system.canvas",
-    "askyi/askyi-h5/architecture.canvas",
     "pwtk-admin-web/architecture-v1.canvas",
-    "askyi/askyi-h5/_project.md",
     "tg-live-game/tg-live-game-hono/_project.md",
     "workflow.md",
     "askyi/prototype-h5/_project.md",
@@ -219,7 +220,6 @@
     "i18n/ur",
     "i18n/uk",
     "i18n/tr",
-    "i18n/th",
     "i18n/zh/documents/02-方法论/图形化AI协作-Canvas白板驱动开发.md",
     "GEMINI.md",
     "CONTRIBUTING.md",

BIN
.playwright-mcp/askyi-divination-page.png


BIN
.playwright-mcp/askyi-home-page.png


BIN
.playwright-mcp/askyi-hot-page.png


BIN
.playwright-mcp/askyi-login-page.png


BIN
.playwright-mcp/askyi-publish-page.png


+ 29 - 0
askyi/askyi-h5/pages.canvas

@@ -0,0 +1,29 @@
+{
+	"nodes":[
+		{"id":"home","type":"text","text":"## Home 首页\n\n**路径**: `/home/`\n**优先级**: P0\n\n### UI 模式\n- 瀑布流双列布局\n- 下拉刷新 + 上拉加载\n\n### Tab 导航\n- Follow 关注\n- Discover 发现\n- User Cases 案例\n\n### 分类筛选\n- Recommended 推荐\n- Yijing Bagua 易经八卦\n- Feng Shui Guide 风水指南\n- TCM Wellness 中医养生\n- Mystical Tales 奇闻异事\n\n### 卡片组件\n- 封面图片\n- 文章标题\n- 作者头像 + 昵称\n- 点赞数\n\n### API 依赖\n- GET /api/articles (分页)\n- GET /api/categories\n\n### 跳转目标\n- 点击卡片 → ArticleDetail\n- 点击作者 → ExpertProfile","x":-1120,"y":-2120,"width":320,"height":1120,"color":"3"},
+		{"id":"divination","type":"text","text":"## Divination 占卜\n\n**路径**: `/divination/`\n**优先级**: P0\n\n### UI 模式\n- 功能入口列表\n- 卡片式布局\n\n### 当前功能\n**今日运势**\n- 基于八字五行分析\n- 分析维度:\n  - 财运\n  - 事业\n  - 健康\n  - 桃花\n\n### 计划功能\n- 金钱卦 coins\n- 摇卦 shake\n- 求签 stick\n- 姓名测算 name\n- 占卜历史 history\n\n### API 依赖\n- GET /api/divination/today\n- POST /api/divination/coins\n- POST /api/divination/shake\n\n### 跳转目标\n- 点击功能卡 → 具体占卜页\n- 查看历史 → DivinationHistory","x":-200,"y":-2000,"width":320,"height":1080,"color":"1"},
+		{"id":"login","type":"text","text":"## Login 登录\n\n**路径**: `/login/`\n**优先级**: P0\n\n### UI 模式\n- 表单页面\n- Tab 切换登录方式\n\n### 登录方式\n**邮箱登录**\n- 邮箱/用户名 输入\n- 密码 输入\n\n**手机号登录**\n- 手机号 输入\n- 验证码 输入\n\n### 社交登录\n- 微信登录 (WeChat)\n- Facebook 登录\n- Google 登录\n\n### 其他入口\n- 忘记密码 → ForgotPassword\n- 创建账号 → Register\n\n### API 依赖\n- POST /api/auth/local (邮箱)\n- POST /api/auth/sms (手机)\n- GET /api/auth/wechat (微信)\n\n### 跳转目标\n- 登录成功 → 返回来源页\n- 忘记密码 → ForgotPassword\n- 注册 → Register","x":360,"y":-2090,"width":320,"height":1170,"color":"4"},
+		{"id":"publish","type":"text","text":"## Publish 发布\n\n**路径**: `/publish/`\n**优先级**: P0\n**需要登录**: 是\n\n### UI 模式\n- 表单页面\n- 多媒体上传\n\n### 表单字段\n1. **标题** - 文本输入\n2. **封面图片** - 拖拽上传\n   - 格式: JPG/PNG/WebP\n   - 大小: 最大 5MB\n3. **视频** - 可选上传\n   - 格式: MP4/MOV\n   - 大小: 最大 100MB\n4. **内容** - Markdown 编辑器\n\n### 按钮\n- 取消 - 返回上一页\n- 发布 - 提交内容\n\n### API 依赖\n- POST /api/upload (图片/视频)\n- POST /api/articles (创建文章)\n\n### 跳转目标\n- 发布成功 → ArticleDetail\n- 取消 → 返回","x":360,"y":-3480,"width":320,"height":1080,"color":"5"},
+		{"id":"profile","type":"text","text":"## Profile 个人中心\n\n**路径**: `/profile/`\n**优先级**: P0\n**需要登录**: 是\n\n### UI 模式\n- 个人信息卡片\n- 功能列表\n\n### 用户信息区\n- 头像\n- 昵称\n- 简介\n- 关注数 / 粉丝数\n\n### 功能列表\n- 我的文章\n- 我的收藏\n- 我的关注\n- 浏览历史\n- 设置\n\n### API 依赖\n- GET /api/users/me\n- GET /api/articles?author=me\n- GET /api/reactions?type=favorite\n\n### 跳转目标\n- 编辑资料 → ProfileEdit\n- 设置 → Settings\n- 我的文章 → MyArticles\n- 未登录 → Login","x":1160,"y":-1360,"width":320,"height":1240,"color":"4"},
+		{"id":"settings","type":"text","text":"## Settings 设置\n\n**路径**: `/settings/`\n**优先级**: P2\n**需要登录**: 是\n\n### 功能列表\n- 账号安全\n- 隐私设置\n- 通知设置\n- 清除缓存\n- 关于我们\n- 退出登录","x":1180,"y":80,"width":280,"height":400,"color":"5"},
+		{"id":"search","type":"text","text":"## Search 搜索\n\n**路径**: `/search/`\n**优先级**: P1\n\n### UI 模式\n- 搜索输入框\n- 历史记录\n- 结果列表\n\n### 搜索范围\n- 文章\n- 视频\n- 专家\n- 课程\n\n### API 依赖\n- GET /api/search?q=keyword","x":760,"y":80,"width":280,"height":640,"color":"5"},
+		{"id":"article_detail","type":"text","text":"## ArticleDetail 文章详情\n\n**路径**: `/article/:id`\n**优先级**: P1\n\n### UI 模式\n- 文章阅读页\n- 底部交互栏\n\n### 内容区\n- 标题\n- 作者信息\n- 发布时间\n- 正文内容 (Markdown)\n- 封面图/视频\n\n### 交互栏\n- 点赞按钮\n- 收藏按钮\n- 分享按钮\n- 评论入口\n\n### API 依赖\n- GET /api/articles/:id\n- POST /api/reactions\n- GET /api/comments?article=:id","x":-1120,"y":-440,"width":320,"height":840,"color":"3"},
+		{"id":"expert_profile","type":"text","text":"## ExpertProfile 专家主页\n\n**路径**: `/expert/:id`\n**优先级**: P1\n\n### UI 模式\n- 个人主页\n- 内容列表\n\n### 用户信息区\n- 头像 + 认证标识\n- 昵称 + 简介\n- 关注数 / 粉丝数\n- 关注按钮\n\n### Tab 内容\n- 文章列表\n- 视频列表\n- 课程列表\n\n### API 依赖\n- GET /api/experts/:id\n- GET /api/articles?author=:id\n- GET /api/videos?author=:id\n- POST /api/followings","x":-600,"y":-440,"width":320,"height":840,"color":"3"},
+		{"id":"hot","type":"text","text":"## Hot 热门视频\n\n**路径**: `/hot/`\n**优先级**: P0\n\n### UI 模式\n- 全屏视频流(抖音风格)\n- 上滑切换视频\n- 自动播放\n\n### 右侧交互按钮\n- 头像 + 关注按钮(+)\n- 点赞 (heart + count)\n- 收藏 (star + count)\n- 分享 (share + count)\n\n### 底部信息\n- @用户名\n- 视频标题\n- #标签列表\n- 分类标签\n\n### 进度条\n- 底部视频播放进度\n\n### API 依赖\n- GET /api/videos (分页)\n- POST /api/reactions (点赞/收藏)\n- POST /api/followings (关注)\n\n### 跳转目标\n- 点击头像 → ExpertProfile\n- 点击分享 → 分享弹窗","x":-600,"y":-2080,"width":320,"height":1080,"color":"1"},
+		{"id":"tabbar","type":"text","text":"## TabBar 底部导航\n\n**固定显示**: 5个入口\n\n| 图标 | 标签 | 路径 |\n|------|------|------|\n| home | 首页 | /home/ |\n| fire | 热门 | /hot/ |\n| plus | 发布 | /publish/ |\n| compass | 占卜 | /divination/ |\n| user | 我的 | /profile/ |\n\n### 登录拦截\n- 发布 → 需要登录\n- 我的 → 需要登录","x":-1640,"y":-440,"width":320,"height":500,"color":"2"},
+		{"id":"flow_title","type":"text","text":"## 核心用户流程\n\n### 浏览流程\nHome → ArticleDetail → ExpertProfile\n\n### 视频流程\nHot → 上滑浏览 → 关注/点赞\n\n### 发布流程\nPublish → (需登录) → Login → Publish → 发布成功\n\n### 占卜流程\nDivination → 选择功能 → 获取结果","x":-1720,"y":140,"width":400,"height":520,"color":"6"},
+		{"id":"title","type":"text","text":"# askyi-h5 页面功能\n\n**描述**: 页面功能、跳转流程、数据依赖\n**更新**: 2026-01-05\n\n用于指导 askyi-uniapp 迁移开发","x":-1680,"y":-2120,"width":320,"height":200,"color":"6"}
+	],
+	"edges":[
+		{"id":"e1","fromNode":"home","fromSide":"bottom","toNode":"article_detail","toSide":"top","label":"点击卡片"},
+		{"id":"e2","fromNode":"home","fromSide":"bottom","toNode":"expert_profile","toSide":"top","label":"点击作者"},
+		{"id":"e3","fromNode":"hot","fromSide":"bottom","toNode":"expert_profile","toSide":"top","label":"点击头像"},
+		{"id":"e4","fromNode":"profile","fromSide":"top","toNode":"login","toSide":"right","label":"未登录"},
+		{"id":"e5","fromNode":"publish","fromSide":"bottom","toNode":"login","toSide":"top","label":"需要登录"},
+		{"id":"e6","fromNode":"login","fromSide":"bottom","toNode":"profile","toSide":"left","label":"登录成功"},
+		{"id":"e7","fromNode":"article_detail","fromSide":"right","toNode":"expert_profile","toSide":"left","label":"点击作者"},
+		{"id":"e8","fromNode":"profile","fromSide":"bottom","toNode":"settings","toSide":"top","label":"设置"},
+		{"id":"e9","fromNode":"tabbar","fromSide":"top","toNode":"home","toSide":"bottom","label":"首页"},
+		{"id":"e10","fromNode":"tabbar","fromSide":"top","toNode":"hot","toSide":"bottom","label":"热门"}
+	]
+}

+ 39 - 39
askyi/askyi-uniapp/architecture.canvas

@@ -1,40 +1,40 @@
 {
-  "nodes": [
-    {"id":"title","type":"text","text":"# askyi-uniapp 架构\n\n**版本**: 0.1.0\n**描述**: 问易社区微信小程序\n**状态**: 规划中\n\n技术栈:UniApp + Vue 3 + TypeScript\n状态管理:Pinia\nUI组件:uView Plus\n\n**迁移来源**: askyi-h5\n**目标平台**: 微信小程序","x":-2400,"y":-1600,"width":400,"height":340,"color":"6"},
-    {"id":"pages_core","type":"text","text":"## Phase 1: 核心页面\n\n**pages/home/**\n- index.vue 首页\n- components/ 首页组件\n\n**pages/explore/**\n- index.vue 发现页\n- components/ 发现组件\n\n**pages/auth/**\n- login.vue 登录\n- register.vue 注册\n- forgot-password.vue 忘记密码\n\n**pages/profile/**\n- index.vue 个人中心\n- edit.vue 编辑资料\n- settings.vue 设置","x":-1600,"y":-1920,"width":300,"height":600,"color":"3"},
-    {"id":"pages_content","type":"text","text":"## Phase 2: 内容页面\n\n**pages/article/**\n- list.vue 文章列表\n- detail.vue 文章详情\n\n**pages/expert/**\n- list.vue 专家列表\n- detail.vue 专家详情\n\n**pages/video/**\n- feed.vue 视频流\n- player.vue 视频播放\n\n**pages/search/**\n- index.vue 搜索\n- result.vue 搜索结果","x":-1200,"y":-1920,"width":300,"height":560,"color":"3"},
-    {"id":"pages_divination","type":"text","text":"## Phase 3: 占卜功能\n\n**pages/divination/**\n- index.vue 占卜首页\n- coins.vue 金钱卦\n- shake.vue 摇卦\n- stick.vue 求签\n- today.vue 今日运势\n- history.vue 占卜历史\n- name.vue 姓名测算","x":-800,"y":-1920,"width":300,"height":440,"color":"1"},
-    {"id":"pages_advanced","type":"text","text":"## Phase 4: 高级功能\n\n**pages/course/**\n- list.vue 课程列表\n- detail.vue 课程详情\n- player.vue 课程播放\n\n**pages/consult/**\n- index.vue 咨询页\n\n**pages/message/**\n- index.vue 消息列表\n- chat.vue 聊天详情\n\n**pages/payment/**\n- index.vue 支付页","x":-400,"y":-1920,"width":300,"height":480,"color":"5"},
-    {"id":"comp_layout","type":"text","text":"## 布局组件\n\n**components/layout/**\n- TabBar.vue 底部导航\n- NavBar.vue 顶部导航\n- BackHeader.vue 返回头部\n- AppLayout.vue 应用布局\n\n**样式**\n- layout.scss 布局样式","x":-1600,"y":-1200,"width":280,"height":360,"color":"4"},
-    {"id":"comp_content","type":"text","text":"## 内容组件\n\n**components/content/**\n- ArticleCard.vue 文章卡片\n- ArticleItem.vue 文章项\n- VideoCard.vue 视频卡片\n- ExpertCard.vue 专家卡片\n- CourseCard.vue 课程卡片\n\n**列表组件**\n- InfiniteScroll.vue 无限滚动\n- Waterfall.vue 瀑布流","x":-1200,"y":-1200,"width":280,"height":400,"color":"4"},
-    {"id":"comp_interactive","type":"text","text":"## 交互组件\n\n**components/interactive/**\n- FollowButton.vue 关注按钮\n- ReactionButton.vue 点赞收藏\n- ConsultButton.vue 咨询按钮\n- ShareButton.vue 分享按钮\n\n**表单组件**\n- SearchInput.vue 搜索输入\n- CategoryNav.vue 分类导航\n- TagsList.vue 标签列表","x":-800,"y":-1200,"width":280,"height":400,"color":"4"},
-    {"id":"comp_media","type":"text","text":"## 媒体组件\n\n**components/media/**\n- VideoPlayer.vue 视频播放器\n- ImageUploader.vue 图片上传\n- ImageCropper.vue 图片裁剪\n- AudioPlayer.vue 音频播放\n\n**UniApp特有**\n- 使用 video 组件\n- 使用 uni.chooseImage","x":-400,"y":-1200,"width":280,"height":360,"color":"1"},
-    {"id":"comp_common","type":"text","text":"## 通用组件\n\n**components/common/**\n- Loading.vue 加载状态\n- Empty.vue 空状态\n- ErrorPage.vue 错误页\n- Toast.vue 提示\n- Modal.vue 弹窗\n- Icon.vue 图标","x":0,"y":-1200,"width":260,"height":320,"color":"4"},
-    {"id":"api_layer","type":"text","text":"## API 接口层\n\n| 模块 | 文件 | 功能 |\n|------|------|------|\n| article | api/article.ts | 文章 |\n| auth | api/auth.ts | 认证 |\n| user | api/user.ts | 用户 |\n| expert | api/expert.ts | 专家 |\n| video | api/video.ts | 视频 |\n| reaction | api/reaction.ts | 反应 |\n| following | api/following.ts | 关注 |\n| category | api/category.ts | 分类 |\n| course | api/course.ts | 课程 |\n| divination | api/divination.ts | 占卜 |","x":400,"y":-1800,"width":320,"height":480,"color":"1"},
-    {"id":"composables","type":"text","text":"## Composables 组合式函数\n\n**composables/**\n- useAuth.ts 认证状态\n- useUser.ts 用户信息\n- useFollow.ts 关注操作\n- useReaction.ts 点赞收藏\n- useInfiniteScroll.ts 无限滚动\n- useRequest.ts 请求封装\n- useToast.ts 提示消息","x":400,"y":-1200,"width":280,"height":360,"color":"5"},
-    {"id":"stores","type":"text","text":"## Pinia 状态管理\n\n**stores/**\n- user.ts 用户状态\n- auth.ts 认证状态\n- app.ts 应用状态\n- video.ts 视频状态\n\n**持久化**\n- 使用 uni.setStorageSync\n- 自动同步本地存储","x":800,"y":-1200,"width":280,"height":360,"color":"5"},
-    {"id":"utils","type":"text","text":"## 工具函数\n\n**utils/**\n- request.ts HTTP封装\n- storage.ts 存储工具\n- format.ts 格式化\n- validate.ts 验证\n- platform.ts 平台检测\n- share.ts 分享工具","x":800,"y":-720,"width":260,"height":320,"color":"2"},
-    {"id":"types","type":"text","text":"## TypeScript 类型\n\n**types/**\n- article.ts 文章类型\n- user.ts 用户类型\n- expert.ts 专家类型\n- video.ts 视频类型\n- api.ts API响应类型\n- common.ts 通用类型","x":1200,"y":-1200,"width":260,"height":320,"color":"4"},
-    {"id":"config","type":"text","text":"## 配置文件\n\n**pages.json**\n- 页面路由配置\n- TabBar 配置\n- 导航栏样式\n\n**manifest.json**\n- 应用信息\n- 微信小程序配置\n- AppId 配置\n\n**uni.scss**\n- 全局样式变量\n- 主题色定义","x":1200,"y":-720,"width":280,"height":380,"color":"2"},
-    {"id":"backend","type":"text","text":"## 后端 API\n\n**askyi-cms-railway**\nStrapi 5 + PostgreSQL\n\n**API 地址**\n- 开发: localhost:1337\n- 生产: Railway\n\n**共享端点**\n- /api/articles\n- /api/videos\n- /api/experts\n- /api/users\n- /api/auth","x":1600,"y":-1200,"width":280,"height":400,"color":"4"},
-    {"id":"project_structure","type":"text","text":"## 项目结构\n\n```\nsrc/\n├── api/          # API 接口\n├── components/   # 组件\n├── composables/  # 组合函数\n├── pages/        # 页面\n├── stores/       # 状态管理\n├── static/       # 静态资源\n├── styles/       # 样式\n├── types/        # 类型\n└── utils/        # 工具\n```","x":-1600,"y":-680,"width":320,"height":360,"color":"6"},
-    {"id":"data_flow","type":"text","text":"## 数据流\n\n```\n用户操作\n   ↓\nPages (pages/)\n   ↓\nComponents\n   ↓\nComposables\n   ↓\nAPI Layer\n   ↓\nUtils (request)\n   ↓\nStrapi CMS\n   ↓\n响应数据\n   ↓\nStores (Pinia)\n   ↓\n组件更新\n```","x":-1200,"y":-680,"width":280,"height":500,"color":"6"},
-    {"id":"migration_map","type":"text","text":"## 迁移映射\n\n**askyi-h5 → askyi-uniapp**\n\n| React | Vue 3 |\n|-------|-------|\n| useState | ref |\n| useEffect | onMounted |\n| Hooks | composables |\n| axios | uni.request |\n| className | class |\n| Capacitor | UniApp |\n\n**共享资源**\n- 类型定义 (types/)\n- API 结构 (api/)","x":-800,"y":-680,"width":300,"height":420,"color":"3"},
-    {"id":"env_config","type":"text","text":"## 环境配置\n\n**开发环境**\n- API: localhost:1337\n- 调试: HBuilderX\n\n**生产环境**\n- API: Railway\n- 构建: mp-weixin\n\n**环境变量**\n- VUE_APP_API_BASE\n- VUE_APP_SITE_URL","x":-400,"y":-680,"width":280,"height":360,"color":"2"}
-  ],
-  "edges": [
-    {"id":"e1","fromNode":"pages_core","fromSide":"bottom","toNode":"comp_layout","toSide":"top","label":"使用"},
-    {"id":"e2","fromNode":"pages_content","fromSide":"bottom","toNode":"comp_content","toSide":"top","label":"使用"},
-    {"id":"e3","fromNode":"pages_divination","fromSide":"bottom","toNode":"comp_interactive","toSide":"top","label":"使用"},
-    {"id":"e4","fromNode":"pages_advanced","fromSide":"bottom","toNode":"comp_media","toSide":"top","label":"使用"},
-    {"id":"e5","fromNode":"comp_content","fromSide":"right","toNode":"api_layer","toSide":"left","label":"调用"},
-    {"id":"e6","fromNode":"comp_interactive","fromSide":"right","toNode":"composables","toSide":"left","label":"使用"},
-    {"id":"e7","fromNode":"composables","fromSide":"right","toNode":"stores","toSide":"left","label":"状态"},
-    {"id":"e8","fromNode":"composables","fromSide":"top","toNode":"api_layer","toSide":"bottom","label":"请求"},
-    {"id":"e9","fromNode":"stores","fromSide":"bottom","toNode":"utils","toSide":"top","label":"工具"},
-    {"id":"e10","fromNode":"api_layer","fromSide":"right","toNode":"types","toSide":"left","label":"类型"},
-    {"id":"e11","fromNode":"utils","fromSide":"right","toNode":"backend","toSide":"left","label":"HTTP"},
-    {"id":"e12","fromNode":"types","fromSide":"bottom","toNode":"config","toSide":"top"},
-    {"id":"e13","fromNode":"project_structure","fromSide":"right","toNode":"data_flow","toSide":"left"}
-  ]
-}
+	"nodes":[
+		{"id":"title","type":"text","text":"# askyi-uniapp 架构\n\n**版本**: 0.1.0\n**描述**: 问易社区微信小程序\n**状态**: 规划中\n\n技术栈:UniApp + Vue 3 + TypeScript\n状态管理:Pinia\nUI组件:uView Plus\n\n**迁移来源**: askyi-h5\n**目标平台**: 微信小程序","x":-2400,"y":-1600,"width":400,"height":340,"color":"6"},
+		{"id":"pages_core","type":"text","text":"## Phase 1: 核心页面\n\n**pages/home/**\n- index.vue 首页\n- components/ 首页组件\n\n**pages/explore/**\n- index.vue 发现页\n- components/ 发现组件\n\n**pages/auth/**\n- login.vue 登录\n- register.vue 注册\n- forgot-password.vue 忘记密码\n\n**pages/profile/**\n- index.vue 个人中心\n- edit.vue 编辑资料\n- settings.vue 设置","x":-1600,"y":-1920,"width":300,"height":600,"color":"3"},
+		{"id":"pages_content","type":"text","text":"## Phase 2: 内容页面\n\n**pages/article/**\n- list.vue 文章列表\n- detail.vue 文章详情\n\n**pages/expert/**\n- list.vue 专家列表\n- detail.vue 专家详情\n\n**pages/video/**\n- feed.vue 视频流\n- player.vue 视频播放\n\n**pages/search/**\n- index.vue 搜索\n- result.vue 搜索结果","x":-1200,"y":-1920,"width":300,"height":560,"color":"3"},
+		{"id":"pages_divination","type":"text","text":"## Phase 3: 占卜功能\n\n**pages/divination/**\n- index.vue 占卜首页\n- coins.vue 金钱卦\n- shake.vue 摇卦\n- stick.vue 求签\n- today.vue 今日运势\n- history.vue 占卜历史\n- name.vue 姓名测算","x":-800,"y":-1920,"width":300,"height":440,"color":"1"},
+		{"id":"pages_advanced","type":"text","text":"## Phase 4: 高级功能\n\n**pages/course/**\n- list.vue 课程列表\n- detail.vue 课程详情\n- player.vue 课程播放\n\n**pages/consult/**\n- index.vue 咨询页\n\n**pages/message/**\n- index.vue 消息列表\n- chat.vue 聊天详情\n\n**pages/payment/**\n- index.vue 支付页","x":-400,"y":-1920,"width":300,"height":480,"color":"5"},
+		{"id":"comp_layout","type":"text","text":"## 布局组件\n\n**components/layout/**\n- TabBar.vue 底部导航\n- NavBar.vue 顶部导航\n- BackHeader.vue 返回头部\n- AppLayout.vue 应用布局\n\n**样式**\n- layout.scss 布局样式","x":-1600,"y":-1200,"width":280,"height":360,"color":"4"},
+		{"id":"comp_content","type":"text","text":"## 内容组件\n\n**components/content/**\n- ArticleCard.vue 文章卡片\n- ArticleItem.vue 文章项\n- VideoCard.vue 视频卡片\n- ExpertCard.vue 专家卡片\n- CourseCard.vue 课程卡片\n\n**列表组件**\n- InfiniteScroll.vue 无限滚动\n- Waterfall.vue 瀑布流","x":-1200,"y":-1200,"width":280,"height":400,"color":"4"},
+		{"id":"comp_interactive","type":"text","text":"## 交互组件\n\n**components/interactive/**\n- FollowButton.vue 关注按钮\n- ReactionButton.vue 点赞收藏\n- ConsultButton.vue 咨询按钮\n- ShareButton.vue 分享按钮\n\n**表单组件**\n- SearchInput.vue 搜索输入\n- CategoryNav.vue 分类导航\n- TagsList.vue 标签列表","x":-800,"y":-1200,"width":280,"height":400,"color":"4"},
+		{"id":"comp_media","type":"text","text":"## 媒体组件\n\n**components/media/**\n- VideoPlayer.vue 视频播放器\n- ImageUploader.vue 图片上传\n- ImageCropper.vue 图片裁剪\n- AudioPlayer.vue 音频播放\n\n**UniApp特有**\n- 使用 video 组件\n- 使用 uni.chooseImage","x":-400,"y":-1200,"width":280,"height":360,"color":"1"},
+		{"id":"comp_common","type":"text","text":"## 通用组件\n\n**components/common/**\n- Loading.vue 加载状态\n- Empty.vue 空状态\n- ErrorPage.vue 错误页\n- Toast.vue 提示\n- Modal.vue 弹窗\n- Icon.vue 图标","x":0,"y":-1200,"width":260,"height":320,"color":"4"},
+		{"id":"composables","type":"text","text":"## Composables 组合式函数\n\n**composables/**\n- useAuth.ts 认证状态\n- useUser.ts 用户信息\n- useFollow.ts 关注操作\n- useReaction.ts 点赞收藏\n- useInfiniteScroll.ts 无限滚动\n- useRequest.ts 请求封装\n- useToast.ts 提示消息","x":400,"y":-1200,"width":280,"height":360,"color":"5"},
+		{"id":"stores","type":"text","text":"## Pinia 状态管理\n\n**stores/**\n- user.ts 用户状态\n- auth.ts 认证状态\n- app.ts 应用状态\n- video.ts 视频状态\n\n**持久化**\n- 使用 uni.setStorageSync\n- 自动同步本地存储","x":800,"y":-1200,"width":280,"height":360,"color":"5"},
+		{"id":"project_structure","type":"text","text":"## 项目结构\n\n```\nsrc/\n├── api/          # API 接口\n├── components/   # 组件\n├── composables/  # 组合函数\n├── pages/        # 页面\n├── stores/       # 状态管理\n├── static/       # 静态资源\n├── styles/       # 样式\n├── types/        # 类型\n└── utils/        # 工具\n```","x":-1600,"y":-680,"width":320,"height":360,"color":"6"},
+		{"id":"data_flow","type":"text","text":"## 数据流\n\n```\n用户操作\n   ↓\nPages (pages/)\n   ↓\nComponents\n   ↓\nComposables\n   ↓\nAPI Layer\n   ↓\nUtils (request)\n   ↓\nStrapi CMS\n   ↓\n响应数据\n   ↓\nStores (Pinia)\n   ↓\n组件更新\n```","x":-1200,"y":-680,"width":280,"height":560,"color":"6"},
+		{"id":"migration_map","type":"text","text":"## 迁移映射\n\n**askyi-h5 → askyi-uniapp**\n\n| React | Vue 3 |\n|-------|-------|\n| useState | ref |\n| useEffect | onMounted |\n| Hooks | composables |\n| axios | uni.request |\n| className | class |\n| Capacitor | UniApp |\n\n**共享资源**\n- 类型定义 (types/)\n- API 结构 (api/)","x":-800,"y":-680,"width":300,"height":480,"color":"3"},
+		{"id":"env_config","type":"text","text":"## 环境配置\n\n**开发环境**\n- API: localhost:1337\n- 调试: HBuilderX\n\n**生产环境**\n- API: Railway\n- 构建: mp-weixin\n\n**环境变量**\n- VUE_APP_API_BASE\n- VUE_APP_SITE_URL","x":-400,"y":-680,"width":280,"height":420,"color":"2"},
+		{"id":"api_layer","type":"text","text":"## API 接口层\n\n| 模块 | 文件 | 功能 |\n|------|------|------|\n| article | api/article.ts | 文章 |\n| auth | api/auth.ts | 认证 |\n| user | api/user.ts | 用户 |\n| expert | api/expert.ts | 专家 |\n| video | api/video.ts | 视频 |\n| reaction | api/reaction.ts | 反应 |\n| following | api/following.ts | 关注 |\n| category | api/category.ts | 分类 |\n| course | api/course.ts | 课程 |\n| divination | api/divination.ts | 占卜 |","x":340,"y":-1840,"width":400,"height":480,"color":"1"},
+		{"id":"utils","type":"text","text":"## 工具函数\n\n**utils/**\n- request.ts HTTP封装\n- storage.ts 存储工具\n- format.ts 格式化\n- validate.ts 验证\n- platform.ts 平台检测\n- share.ts 分享工具","x":810,"y":-720,"width":260,"height":320,"color":"2"},
+		{"id":"backend","type":"text","text":"## 后端 API\n\n**askyi-cms-railway**\nStrapi 5 + PostgreSQL\n\n**API 地址**\n- 开发: localhost:1337\n- 生产: Railway\n\n**共享端点**\n- /api/articles\n- /api/videos\n- /api/experts\n- /api/users\n- /api/auth","x":1240,"y":-780,"width":280,"height":440,"color":"4"},
+		{"id":"types","type":"text","text":"## TypeScript 类型\n\n**types/**\n- article.ts 文章类型\n- user.ts 用户类型\n- expert.ts 专家类型\n- video.ts 视频类型\n- api.ts API响应类型\n- common.ts 通用类型","x":1250,"y":-1760,"width":260,"height":320,"color":"4"},
+		{"id":"config","type":"text","text":"## 配置文件\n\n**pages.json**\n- 页面路由配置\n- TabBar 配置\n- 导航栏样式\n\n**manifest.json**\n- 应用信息\n- 微信小程序配置\n- AppId 配置\n\n**uni.scss**\n- 全局样式变量\n- 主题色定义","x":1240,"y":-1320,"width":280,"height":480,"color":"2"}
+	],
+	"edges":[
+		{"id":"e1","fromNode":"pages_core","fromSide":"bottom","toNode":"comp_layout","toSide":"top","label":"使用"},
+		{"id":"e2","fromNode":"pages_content","fromSide":"bottom","toNode":"comp_content","toSide":"top","label":"使用"},
+		{"id":"e3","fromNode":"pages_divination","fromSide":"bottom","toNode":"comp_interactive","toSide":"top","label":"使用"},
+		{"id":"e4","fromNode":"pages_advanced","fromSide":"bottom","toNode":"comp_media","toSide":"top","label":"使用"},
+		{"id":"e5","fromNode":"comp_content","fromSide":"right","toNode":"api_layer","toSide":"left","label":"调用"},
+		{"id":"e6","fromNode":"comp_interactive","fromSide":"right","toNode":"composables","toSide":"left","label":"使用"},
+		{"id":"e7","fromNode":"composables","fromSide":"right","toNode":"stores","toSide":"left","label":"状态"},
+		{"id":"e8","fromNode":"composables","fromSide":"top","toNode":"api_layer","toSide":"bottom","label":"请求"},
+		{"id":"e9","fromNode":"stores","fromSide":"bottom","toNode":"utils","toSide":"top","label":"工具"},
+		{"id":"e10","fromNode":"api_layer","fromSide":"right","toNode":"types","toSide":"left","label":"类型"},
+		{"id":"e11","fromNode":"utils","fromSide":"right","toNode":"backend","toSide":"left","label":"HTTP"},
+		{"id":"e12","fromNode":"types","fromSide":"bottom","toNode":"config","toSide":"top"},
+		{"id":"e13","fromNode":"project_structure","fromSide":"right","toNode":"data_flow","toSide":"left"}
+	]
+}