Merge branch 'yongxu' into devlop
# Conflicts: # .cursor/meeting/README.md resolved by yongxu version # .gitignore resolved by yongxu version # miniprogram/pages/index/index.js resolved by yongxu version # miniprogram/pages/read/read.js resolved by yongxu version # miniprogram/pages/read/read.wxml resolved by yongxu version # soul-admin/dist/index.html resolved by yongxu version # soul-admin/src/App.tsx resolved by yongxu version # soul-admin/src/components/RichEditor.css resolved by yongxu version # soul-admin/src/components/RichEditor.tsx resolved by yongxu version # soul-admin/src/components/modules/user/UserDetailModal.tsx resolved by yongxu version # soul-admin/src/layouts/AdminLayout.tsx resolved by yongxu version # soul-admin/src/pages/chapters/ChaptersPage.tsx resolved by yongxu version # soul-admin/src/pages/content/ContentPage.tsx resolved by yongxu version # soul-admin/src/pages/dashboard/DashboardPage.tsx resolved by yongxu version # soul-admin/src/pages/find-partner/FindPartnerPage.tsx resolved by yongxu version # soul-admin/src/pages/find-partner/tabs/CKBConfigPanel.tsx resolved by yongxu version # soul-admin/src/pages/find-partner/tabs/CKBStatsTab.tsx resolved by yongxu version # soul-admin/src/pages/find-partner/tabs/FindPartnerTab.tsx resolved by yongxu version # soul-admin/src/pages/find-partner/tabs/MatchPoolTab.tsx resolved by yongxu version # soul-admin/src/pages/find-partner/tabs/MatchRecordsTab.tsx resolved by yongxu version # soul-admin/src/pages/find-partner/tabs/MentorBookingTab.tsx resolved by yongxu version # soul-admin/src/pages/find-partner/tabs/MentorTab.tsx resolved by yongxu version # soul-admin/src/pages/find-partner/tabs/ResourceDockingTab.tsx resolved by yongxu version # soul-admin/src/pages/find-partner/tabs/TeamRecruitTab.tsx resolved by yongxu version # soul-admin/src/pages/mentors/MentorsPage.tsx resolved by yongxu version # soul-admin/src/pages/referral-settings/ReferralSettingsPage.tsx resolved by yongxu version # soul-admin/src/pages/settings/SettingsPage.tsx resolved by yongxu version # soul-admin/src/pages/users/UsersPage.tsx resolved by yongxu version # soul-admin/tsconfig.tsbuildinfo resolved by yongxu version # soul-api/internal/database/database.go resolved by yongxu version # soul-api/internal/handler/admin_dashboard.go resolved by yongxu version # soul-api/internal/handler/book.go resolved by yongxu version # soul-api/internal/handler/ckb.go resolved by yongxu version # soul-api/internal/handler/db_book.go resolved by yongxu version # soul-api/internal/handler/db_person.go resolved by yongxu version # soul-api/internal/handler/match_records.go resolved by yongxu version # soul-api/internal/handler/user.go resolved by yongxu version # soul-api/internal/model/chapter.go resolved by yongxu version # soul-api/internal/model/person.go resolved by yongxu version # soul-api/internal/router/router.go resolved by yongxu version # 开发文档/10、项目管理/运营与变更.md resolved by yongxu version # 开发文档/1、需求/需求汇总.md resolved by yongxu version # 开发文档/README.md resolved by yongxu version
This commit is contained in:
13
.cursor/agent/产品经理/evolution/2026-03-10.md
Normal file
13
.cursor/agent/产品经理/evolution/2026-03-10.md
Normal file
@@ -0,0 +1,13 @@
|
||||
# 产品经理 经验记录 - 2026-03-10
|
||||
|
||||
## 管理端迁移 Mycontent-temp:信息架构与验收口径
|
||||
|
||||
- **主导航收敛**:侧栏只保留运营主链路 5 项(概览/内容/用户/找伙伴/推广),系统设置固定在底部;其余能力不删除但不占主导航入口。
|
||||
- **入口承载策略**:非主菜单页面(订单/提现/推广设置/VIP角色/导师等)通过“概览卡片/页面内按钮/系统设置 Tab”进入,确保可达且路径更短。
|
||||
- **验收标准**:
|
||||
- 菜单与布局一致(新规范)
|
||||
- 隐藏页面路由仍可访问(功能不丢)
|
||||
- author/admin 设置统一在 `/settings?tab=...` 承载,旧路径可兼容跳转
|
||||
|
||||
> 详见会议纪要:`.cursor/meeting/2026-03-10_管理端迁移Mycontent-temp菜单布局讨论.md`
|
||||
|
||||
@@ -4,3 +4,4 @@
|
||||
|------|------|------|
|
||||
| 2026-03-05 | 分支冲突后需求文档与实现一致性核对 | [2026-03-05.md](./2026-03-05.md) |
|
||||
| 2026-03-05 | 文章详情@某人高亮与一键加好友验收标准与待确认 | [2026-03-05.md](./2026-03-05.md) |
|
||||
| 2026-03-10 | 管理端迁移 Mycontent-temp:主导航收敛与隐藏页面入口承载策略 | [2026-03-10.md](./2026-03-10.md) |
|
||||
|
||||
67
.cursor/agent/后端工程师/evolution/2026-03-10.md
Normal file
67
.cursor/agent/后端工程师/evolution/2026-03-10.md
Normal file
@@ -0,0 +1,67 @@
|
||||
# 后端工程师 经验记录 - 2026-03-10
|
||||
|
||||
## 管理端迁移 Mycontent-temp:后端视角注意点
|
||||
|
||||
- **接口边界不变**:管理端迁移/重构只允许调用 `/api/admin/*`、`/api/db/*`、`/api/orders`,严禁引入 `/api/miniprogram/*`。
|
||||
- **概览聚合接口可选**:`/api/admin/dashboard/overview` 可作为“优化项”提供更轻量的统计聚合,但必须保留**降级策略**(用 `/api/db/users` + `/api/orders` 拼)以免阻塞前端迁移与部署节奏。
|
||||
- **鉴权一致性**:页面入口/菜单变化不影响鉴权口径,仍以 `GET /api/admin` 作为 session/token 校验;401 统一跳登录并清 token。
|
||||
|
||||
> 详见会议纪要:`.cursor/meeting/2026-03-10_管理端迁移Mycontent-temp菜单布局讨论.md`
|
||||
|
||||
---
|
||||
|
||||
## 新增聚合接口 UserDashboardStats
|
||||
|
||||
**场景**:小程序「我的」页需要一个聚合接口返回阅读统计,避免多次请求。
|
||||
|
||||
**接口**:`GET /api/miniprogram/user/dashboard-stats?userId=xxx`
|
||||
|
||||
**数据来源**:
|
||||
- `readSectionIds` / `readCount` → `reading_progress` WHERE `user_id = userId`
|
||||
- `totalReadMinutes` → `SUM(duration) / 60`(秒转分,最小值 1 分钟)
|
||||
- `recentChapters` → `reading_progress` ORDER BY `last_open_at DESC` JOIN `chapters`(最近 5 条**去重**)
|
||||
- `matchHistory` → `match_records` COUNT WHERE `user_id = userId`
|
||||
|
||||
**三处 bug 修复点**(对比 Mycontent-temp 参考版发现):
|
||||
|
||||
| Bug | 错误做法 | 正确做法 |
|
||||
|-----|---------|---------|
|
||||
| 最近阅读重复 | 直接取前 5 条(同章节可重复) | `seenRecent` map 去重,保证 5 条不重复 |
|
||||
| 阅读时长最小值 | 不足 60 秒返回 0 | `if totalReadSeconds > 0 && totalReadMinutes == 0 { totalReadMinutes = 1 }` |
|
||||
| DB 错误状态码 | 返回 200 + `success:false` | 返回 HTTP 500 `InternalServerError` |
|
||||
|
||||
**规则沉淀**:新增聚合接口时,先参考已有版本实现,对比 diff 后修复潜在 bug,再提交。
|
||||
|
||||
> 详见会议纪要:`.cursor/meeting/2026-03-10_小程序新旧版对比与dashboard接口新增.md`
|
||||
|
||||
---
|
||||
|
||||
## chapters 表新增 hot_score 字段
|
||||
|
||||
### 问题
|
||||
|
||||
前端 `ContentPage.tsx` 保存章节时传递 `hotScore` 字段,但后端 model 和数据库均缺少该列,导致:
|
||||
```
|
||||
Error 1054 (42S22): Unknown column 'hot_score' in 'field list'
|
||||
```
|
||||
|
||||
### 修复步骤
|
||||
|
||||
1. 执行迁移 SQL(`soul-api/scripts/add-hot-score.sql`):
|
||||
```sql
|
||||
ALTER TABLE chapters ADD COLUMN hot_score INT NOT NULL DEFAULT 0;
|
||||
```
|
||||
2. 同步 model(`internal/model/chapter.go`):
|
||||
```go
|
||||
HotScore int `gorm:"column:hot_score;default:0" json:"hotScore"`
|
||||
```
|
||||
3. 重启后端服务生效
|
||||
|
||||
### 规则沉淀
|
||||
|
||||
- **model 与 DB 必须同步**:前端传入新字段时,必须先确认 DB 列存在,再确认 model struct 中有对应字段,缺一不可
|
||||
- **变更流程**:前端加字段 → ALTER TABLE → 更新 model struct → 重启服务
|
||||
- 迁移 SQL 统一放 `soul-api/scripts/` 目录,文件名格式 `add-{描述}.sql`
|
||||
|
||||
> 详见会议纪要:`.cursor/meeting/2026-03-10_Toast通知系统全局落地.md`
|
||||
|
||||
@@ -4,3 +4,4 @@
|
||||
|------|------|------|
|
||||
| 2026-03-05 | soul-api 合并状态确认;orders、distribution 接口核对 | [2026-03-05.md](./2026-03-05.md) |
|
||||
| 2026-03-05 | 文章详情@某人:content 内嵌 @ 标记、miniprogram 添加好友接口 | [2026-03-05.md](./2026-03-05.md) |
|
||||
| 2026-03-10 | 管理端迁移 Mycontent-temp:接口边界不变;overview 聚合接口可选但需降级 | [2026-03-10.md](./2026-03-10.md) |
|
||||
|
||||
20
.cursor/agent/团队/evolution/2026-03-08.md
Normal file
20
.cursor/agent/团队/evolution/2026-03-08.md
Normal file
@@ -0,0 +1,20 @@
|
||||
# 团队共享 经验记录 - 2026-03-08
|
||||
|
||||
## 文章阅读付费规则澄清与后端修复
|
||||
|
||||
### 业务规则(全团队共识)
|
||||
|
||||
1. **非会员专属文章**:免费,无需登录/付费;以管理端「系统设置 → 免费章节」配置为准
|
||||
2. **VIP 会员**:开通 VIP 后,所有文章免费阅读;`check-purchased` 按 `is_vip=1` 且 `vip_expire_date>NOW` 返回 `isPurchased: true`
|
||||
|
||||
### 技术实现
|
||||
|
||||
- **免费章节**:soul-api `book.go` 从 `system_config.free_chapters` 或 `chapter_config.freeChapters` 读取,优先于 chapters 表
|
||||
- **VIP 全章免费**:`user.go` 的 `UserCheckPurchased` 已实现,无需改动
|
||||
|
||||
### 影响角色
|
||||
|
||||
- 后端:book.go 变更,部署后需重启
|
||||
- 管理端:确保免费章节配置正确
|
||||
- 产品:作为验收规则
|
||||
- 小程序:无变更
|
||||
144
.cursor/agent/团队/evolution/2026-03-10.md
Normal file
144
.cursor/agent/团队/evolution/2026-03-10.md
Normal file
@@ -0,0 +1,144 @@
|
||||
# 团队共享 经验记录 - 2026-03-10
|
||||
|
||||
## 在 Windows 上一键启动 macOS 虚拟机(“龙虾”智能体经验)
|
||||
|
||||
### 场景 / 问题
|
||||
|
||||
- 成员希望在 **Windows 10/11** 上通过 **Docker** 一键安装 macOS,用于演示 / 测试。
|
||||
- 实际上:
|
||||
- **macOS 不能在 Docker 中运行**(Docker 只跑 Linux 容器,没有合法的 macOS 镜像)。
|
||||
- 唯一可行路径是:**WSL2 + Ubuntu + QEMU/KVM + OneClick-macOS-Simple-KVM**。
|
||||
|
||||
### 关键决策
|
||||
|
||||
1. **明确技术与法律边界**
|
||||
- 不支持也不承诺在 Docker 中直接跑 macOS。
|
||||
- 统一采用「**WSL2 + QEMU/KVM + OneClick**」这个方案,仅用于演示 / 测试。
|
||||
|
||||
2. **固定目录与流程约定**
|
||||
- Windows 侧统一放在:`C:\Users\{USERNAME}\Mycontent\macos-vm`
|
||||
- WSL 侧路径:`/mnt/c/Users/{USERNAME}/Mycontent/macos-vm`
|
||||
- 内部结构:
|
||||
- `OneClick-macOS-Simple-KVM/`
|
||||
- `BaseSystem.dmg` / `BaseSystem.img`
|
||||
- `macOS.qcow2`
|
||||
|
||||
3. **获取 OneClick 源码时优先走 zip,而不是 git clone**
|
||||
- 直接 `git clone` 很容易在国内网络环境下触发 `GnuTLS recv error (-110)` 等 TLS 超时。
|
||||
- 统一约定使用:
|
||||
- `https://codeload.github.com/notAperson535/OneClick-macOS-Simple-KVM/zip/refs/heads/master`
|
||||
- 然后在 WSL 中:
|
||||
- `curl + unzip` → 解压 → 重命名为 `OneClick-macOS-Simple-KVM`。
|
||||
|
||||
4. **依赖安装与 KVM 检查**
|
||||
- 在 Ubuntu-24.04 内安装:
|
||||
- `qemu-system qemu-utils python3 python3-pip cpu-checker`
|
||||
- 使用 `kvm-ok` 检查:
|
||||
- 期望输出:`/dev/kvm exists` + `KVM acceleration can be used`。
|
||||
- 若 `nested` 为 `N` 且需要嵌套虚拟化,使用 `.wslconfig` 打开 nested。
|
||||
|
||||
5. **下载 macOS Ventura 恢复镜像并生成 BaseSystem.img**
|
||||
- 通过 `python3 fetch-macOS-v2.py -s ventura` 下载官方 Recovery 镜像。
|
||||
- 将 `RecoveryImage.dmg` 重命名为 `BaseSystem.dmg`,再用 `qemu-img convert` 生成 `BaseSystem.img`。
|
||||
- 验收标准:
|
||||
- `BaseSystem.dmg` ≈ 678 MB
|
||||
- `BaseSystem.img` ≈ 3.0 GB
|
||||
|
||||
6. **以 HEADLESS + VNC 方式启动 VM**
|
||||
- 使用 `sudo HEADLESS=1 ./basic.sh` 启动 QEMU。
|
||||
- 在 Windows 中确认 `127.0.0.1:5900` 端口监听。
|
||||
- 统一告知使用 VNC 客户端连接 `localhost:5900`,再在图形界面内完成 macOS 安装向导。**用户环境已采用 TightVNC**,与 RealVNC Viewer 等方式等效。
|
||||
|
||||
7. **WSL 卡死与多 wsl 进程清理策略**
|
||||
- 当 `wsl --shutdown` 卡住、或者有大量 `wsl` 进程残留时:
|
||||
- 使用 PowerShell `Get-Process wsl | Stop-Process -Force` 清理。
|
||||
- 再执行 `wsl --shutdown` + `wsl -l -v` 验证状态恢复。
|
||||
|
||||
### 对应 Skill / 智能体
|
||||
|
||||
- 新建 Skill:`.cursor/skills/lobster-macos-vm/SKILL.md`
|
||||
- 技能名:`lobster-macos-vm`
|
||||
- 智能体名(对外):**“龙虾”**
|
||||
- 职责:当用户在 Windows 上提出安装 / 维护 macOS 虚拟机的需求时,统一按该 Skill 流程执行:
|
||||
- 解释 Docker 不可用 → 切换到 WSL2 + QEMU 方案。
|
||||
- 固定目录 → 下载 OneClick → 安装依赖 → 下载 Ventura → 生成 `BaseSystem.img` → HEADLESS 启动 → 引导 VNC 安装。
|
||||
|
||||
- 计划脚本化:
|
||||
- 在 `开发文档/服务器管理/scripts/lobster_macos_vm.py` 中实现一键部署脚本,封装上述流程,供“龙虾”及人类成员复用。
|
||||
|
||||
### 用户环境补充
|
||||
|
||||
- **VNC 客户端**:当前环境使用 **TightVNC** 连接 `localhost:5900`,已写入龙虾 Skill,后续回复可一并推荐 TightVNC / RealVNC / TigerVNC 等。
|
||||
|
||||
### 适用角色
|
||||
|
||||
- 后端 / 运维:需要在本地或服务器上快速拉起 macOS VM 做兼容性验证或演示。
|
||||
- 团队:对外说明 **“我们不支持 Docker macOS,统一用龙虾方案”**。
|
||||
|
||||
---
|
||||
|
||||
## 管理端迁移 Mycontent-temp:菜单/布局新规范基线
|
||||
|
||||
### 决议(团队共享)
|
||||
|
||||
- **目标态基线**:以 `Mycontent-temp/soul-admin` 的 `AdminLayout` + `SettingsPage` 作为“新规范基线”,后续管理端所有菜单/布局调整按该基线执行,避免两套后台并行发散。
|
||||
- **主导航收敛**:侧栏只保留 5 个主入口(概览/内容/用户/找伙伴/推广),系统设置固定底部,取消“更多”折叠入口。
|
||||
- **功能不丢但入口收敛**:订单/提现/推广设置/VIP角色/导师等页面保留路由可达,入口通过概览卡片或页面内跳转承载;作者/管理员设置并入 `/settings?tab=author|admin`。
|
||||
|
||||
### 实施建议
|
||||
|
||||
- 迁移时优先保证:**鉴权一致(GET /api/admin)**、**路由可达性**、**菜单一致性**,再逐步优化概览聚合接口与快捷入口。
|
||||
|
||||
---
|
||||
|
||||
## 新旧版代码对比方法论(Mycontent-temp vs miniprogram)
|
||||
|
||||
### 场景
|
||||
|
||||
存在两个并行代码库(主线 + 预览版),需要判断哪个版本更可靠,以及如何安全地吸收另一版的优点。
|
||||
|
||||
### 最佳实践
|
||||
|
||||
1. **批量 diff 优先于逐文件比较**:用 PowerShell 批量对比 WXSS/JS/WXML 文件,精确列出「相同/有差异」的文件清单,再聚焦差异文件逐一分析。
|
||||
2. **以功能完整性为基准**:不以「新/旧」日期判断优劣,而以**功能是否完整**为主要依据;本次判断旧版(miniprogram)才是功能更完整的版本。
|
||||
3. **差异归类**:
|
||||
- **旧版有、新版没有** → 旧版是主线,保留旧版
|
||||
- **新版有、旧版没有** → 评估是否需要移植(如 dashboard-stats 调用)
|
||||
- **样式差异** → 对比具体行数,判断是改进还是遗漏
|
||||
4. **接口对比时对照新版参考修复 bug**:新版的接口实现即使存在,也可能有遗漏;参考后自行修复(去重、最小值、错误码等)再提交。
|
||||
|
||||
### 适用场景
|
||||
|
||||
- 分支合并前的功能完整性分析
|
||||
- 迁移预览版到主线时的取舍决策
|
||||
- 跨版本 bug 溯源
|
||||
|
||||
> 同时影响:小程序开发工程师、后端工程师
|
||||
> 详见会议纪要:`.cursor/meeting/2026-03-10_小程序新旧版对比与dashboard接口新增.md`
|
||||
|
||||
---
|
||||
|
||||
## Toast 通知系统 & DB 变更 SOP(团队共享)
|
||||
|
||||
### Toast 批量替换方法论
|
||||
|
||||
使用 PowerShell 正则脚本批量替换 alert → toast,**替换后必须人工复查 `toast.info()`**:
|
||||
- 验证提示类("请输入/请填写/密码至少/ID已存在")被脚本误判为 info,应改为 error
|
||||
- 核查方式:`grep -r "toast.info(" src/` 逐条确认语义
|
||||
|
||||
### DB 变更 SOP(前后端联动)
|
||||
|
||||
当前端新增字段时,完整变更流程:
|
||||
|
||||
| 步骤 | 执行方 | 操作 |
|
||||
|------|--------|------|
|
||||
| 1 | 后端 | 执行 `ALTER TABLE` 或用 `db-exec` 脚本 |
|
||||
| 2 | 后端 | 更新 `internal/model/*.go` struct |
|
||||
| 3 | 后端 | 重启服务验证 |
|
||||
| 4 | 管理端 | 确认保存请求不再报 1054 |
|
||||
|
||||
若跳过任一步骤,GORM 写入时必报 `Unknown column`。
|
||||
|
||||
> 同时影响:管理端开发工程师、后端工程师
|
||||
> 详见会议纪要:`.cursor/meeting/2026-03-10_Toast通知系统全局落地.md`
|
||||
|
||||
@@ -5,3 +5,4 @@
|
||||
| 日期 | 摘要 | 文件 |
|
||||
|------|------|------|
|
||||
| 2026-03-05 | 分支冲突后各端完整性自查流程 | [2026-03-05.md](./2026-03-05.md) |
|
||||
| 2026-03-10 | 管理端迁移 Mycontent-temp:菜单/布局新规范基线与入口收敛规则 | [2026-03-10.md](./2026-03-10.md) |
|
||||
|
||||
46
.cursor/agent/小程序开发工程师/evolution/2026-03-10.md
Normal file
46
.cursor/agent/小程序开发工程师/evolution/2026-03-10.md
Normal file
@@ -0,0 +1,46 @@
|
||||
# 小程序开发工程师 经验记录 - 2026-03-10
|
||||
|
||||
## 管理端迁移 Mycontent-temp:小程序侧关注点
|
||||
|
||||
- **菜单/布局迁移不应影响小程序接口**:管理端仅重排入口与页面承载,禁止因此改动小程序端接口路径或混用 `/api/miniprogram/*`。
|
||||
- **内容编辑产物稳定性**:如果管理端迁移导致内容从 Markdown → HTML(TipTap)或 mention/tag 的序列化结构变化,小程序阅读页解析必须同步升级并回归兼容。
|
||||
- **验收建议**:迁移期间抽样验证“新编辑器保存的内容”在小程序阅读页可正常渲染与交互(@ 点击加好友、# 标签等)。
|
||||
|
||||
> 详见会议纪要:`.cursor/meeting/2026-03-10_管理端迁移Mycontent-temp菜单布局讨论.md`
|
||||
|
||||
---
|
||||
|
||||
## my.js 阅读统计改为后端接口(loadDashboardStats 移植)
|
||||
|
||||
**场景**:旧版 `my.js` 的 `initUserStatus()` 用本地缓存随机数时间(`Math.floor(Math.random() * 200) + 50`)和标题占位(`章节 ${id}`)展示统计,不准确且不一致。
|
||||
|
||||
**解决方案**:
|
||||
1. 移植 Mycontent-temp 中的 `loadDashboardStats()` 方法
|
||||
2. 调用 `/api/miniprogram/user/dashboard-stats?userId=xxx`
|
||||
3. 同步 `readSectionIds` 到 `app.globalData` 和 Storage
|
||||
4. 返回真实 `recentChapters`(含标题/mid)、`readCount`、`totalReadMinutes`、`matchHistory`
|
||||
|
||||
**initUserStatus 改造要点**:
|
||||
- `readCount` 初始化为 `0`(不再读本地缓存)
|
||||
- `recentChapters` 初始化为 `[]`
|
||||
- `totalReadTime` 初始化为 `0`(不再用随机数)
|
||||
- 新增 `matchHistory: 0` 字段
|
||||
- 登录状态下额外调用 `this.loadDashboardStats()`
|
||||
|
||||
**规则沉淀**:`my.js` 阅读统计必须走后端接口,禁止用本地缓存 + 随机数占位展示统计数据。
|
||||
|
||||
---
|
||||
|
||||
## 富文本渲染现状(技术债,待实施)
|
||||
|
||||
**现状**:`contentParser.js` 将 TipTap HTML 剥成纯文本,`<strong>`/`<h2>`/`<ul>` 等格式全部丢失,只保留 `@mention` 高亮。
|
||||
|
||||
**建议方案**(待实施):
|
||||
- 有权限的完整内容改用 `<rich-text nodes="{{richNodes}}">` 渲染
|
||||
- 预处理时将 TipTap mention span 替换为 `<span style="color:#00CED1">@昵称</span>`
|
||||
- 付费墙预览段落保留纯文本
|
||||
|
||||
**验收前置问题**:确认 DB 中文章内容格式(纯文本 vs TipTap HTML)是否真的用了格式化标记。
|
||||
|
||||
> 详见会议纪要:`.cursor/meeting/2026-03-10_小程序新旧版对比与dashboard接口新增.md`
|
||||
|
||||
@@ -6,3 +6,4 @@
|
||||
| 2026-03-03 | 我的页面卡片区边距优化,16rpx 推荐值 | [2026-03-03.md](./2026-03-03.md) |
|
||||
| 2026-03-05 | 分支合并后核心流程自测;app.json 拆行;orders 接口确认 | [2026-03-05.md](./2026-03-05.md) |
|
||||
| 2026-03-05 | 文章详情@某人高亮与一键加好友(解析@、调添加好友接口) | [2026-03-05.md](./2026-03-05.md) |
|
||||
| 2026-03-10 | 管理端迁移 Mycontent-temp:关注内容产物格式与阅读页解析兼容回归 | [2026-03-10.md](./2026-03-10.md) |
|
||||
|
||||
@@ -25,6 +25,13 @@
|
||||
| 2026-02-27 | 小程序、团队 | 最佳实践 | SKILL-小程序开发 §6、SKILL-管理端开发 §4.1 | 输入框 padding 用 view/div 包裹 |
|
||||
| 2026-02-28 | 小程序、管理端 | 最佳实践 | miniprogram §6、admin §4.1 | input 边距口诀「外边包 view、内部 width 100%」;match 弹窗已修正 |
|
||||
| 2026-03-03 | 小程序 | 最佳实践 | miniprogram §8 | 我的页面卡片区边距 16rpx,个人中心类页面布局规范 |
|
||||
| 2026-03-10 | 团队 | 架构/运维约定 | lobster-macos-vm Skill | Windows 上统一使用 WSL2+QEMU+OneClick 的"龙虾"方案安装 macOS 虚拟机,禁止 Docker 直跑 macOS |
|
||||
| 2026-03-10 | 小程序 | 最佳实践 | miniprogram-dev SKILL §my | my.js 阅读统计改为后端接口(loadDashboardStats),禁止用随机数时间/标题占位 |
|
||||
| 2026-03-10 | 后端 | bug 修复 | api-dev SKILL | 聚合接口三处修复:recentChapters 去重、totalReadMinutes 最小1分钟、DB 错误返回 500 |
|
||||
| 2026-03-10 | 团队 | 方法论 | - | 新旧版代码对比:以功能完整性为基准,批量 diff + 分类取舍,不以日期判优劣 |
|
||||
| 2026-03-10 | 管理端 | 最佳实践 | admin-dev SKILL §toast | Toast 通知系统落地:utils/toast.ts 纯原生实现,全系统 18 文件 alert → toast 批量替换 |
|
||||
| 2026-03-10 | 后端 | bug 修复 | api-dev SKILL | chapters 表新增 hot_score 列,修复 1054 Unknown column 错误;DB 变更 SOP:ALTER→model→重启 |
|
||||
| 2026-03-10 | 团队 | 方法论 | - | DB 变更 SOP + Toast 批量替换方法论(脚本替换后必须人工复查 toast.info 语义) |
|
||||
|
||||
---
|
||||
|
||||
@@ -35,4 +42,4 @@
|
||||
|
||||
---
|
||||
|
||||
**最后更新**:2026-03-03
|
||||
**最后更新**:2026-03-10(Toast + hot_score 经验入库)
|
||||
|
||||
@@ -19,9 +19,10 @@ Soul 创业派对产品定位:面向创业者的社区/工具型小程序。
|
||||
| 2026-02-28 | stitch_soul 需求评审:内容→会员→导师变现路径,待产品补充正式需求文档 | 待续 |
|
||||
| 2026-03-05 | 分支冲突后功能完整性分析会议:核对需求文档与实现一致性 | 待续 |
|
||||
| 2026-03-05 | 文章详情@某人加好友方案讨论:验收标准、添加好友接口 path 待确认 | 待续 |
|
||||
| 2026-03-10 | 会议:管理端迁移 Mycontent-temp,新菜单/布局与入口收敛验收口径确定 | 待续 |
|
||||
|
||||
> **格式说明**:每次开发后在此追加一行,日期格式 YYYY-MM-DD,状态用:已完成 / 进行中 / 待续 / 搁置
|
||||
|
||||
---
|
||||
|
||||
**最后更新**:2026-03-05
|
||||
**最后更新**:2026-03-10
|
||||
|
||||
@@ -20,9 +20,12 @@ soul-api(Go + Gin + GORM + MySQL)提供三组路由:`/api/miniprogram/*`
|
||||
| 2026-02-28 | stitch_soul 需求评审:需梳理 chapter/book/vip,设计导师/预约/会员权益模型与接口 | 待续 |
|
||||
| 2026-03-05 | 分支冲突后功能完整性分析会议:在 soul-api 确认合并状态,核对 orders、distribution 接口 | 待续 |
|
||||
| 2026-03-05 | 文章详情@某人加好友方案讨论:content 内嵌 @ 标记、miniprogram 添加好友接口 | 待续 |
|
||||
| 2026-03-10 | 会议:管理端迁移 Mycontent-temp;后端接口边界不变,overview 聚合接口可选但需降级 | 待续 |
|
||||
| 2026-03-10 | 新增 GET /api/miniprogram/user/dashboard-stats:聚合阅读统计接口,含去重、min1分钟、500错误码修复 | 已完成 |
|
||||
| 2026-03-10 | chapters 表新增 hot_score 列(ALTER TABLE + model 同步),修复前端保存章节报 1054 错误 | 已完成 |
|
||||
|
||||
> **格式说明**:每次开发后在此追加一行,日期格式 YYYY-MM-DD,状态用:已完成 / 进行中 / 待续 / 搁置
|
||||
|
||||
---
|
||||
|
||||
**最后更新**:2026-03-05
|
||||
**最后更新**:2026-03-10(hot_score 迁移完成)
|
||||
|
||||
@@ -16,9 +16,12 @@ Soul 创业派对全项目架构与约定:路由隔离(miniprogram/admin/db
|
||||
|------|------|------|
|
||||
| 2026-02-27 | 项目索引初始化;团队经验库目录建立 | 已完成 |
|
||||
| 2026-02-28 | stitch_soul 需求评审:内容→会员→导师变现路径,需与现有三端架构协同 | 已完成 |
|
||||
| 2026-03-08 | 文章阅读付费规则澄清:免费章节以 free_chapters 为准;VIP 全章免费;后端 book.go 合并配置修复 | 已完成 |
|
||||
| 2026-03-10 | 会议:管理端迁移 Mycontent-temp,新菜单/布局作为团队规范基线,避免两套后台并行发散 | 待续 |
|
||||
| 2026-03-10 | 新旧版代码对比方法论:以功能完整性而非日期判断优劣,批量 diff + 分类取舍 + 移植修复 | 已完成 |
|
||||
|
||||
> **格式说明**:每次架构级讨论后在此追加一行,日期格式 YYYY-MM-DD
|
||||
|
||||
---
|
||||
|
||||
**最后更新**:2026-02-28
|
||||
**最后更新**:2026-03-10(新旧版对比方法论沉淀)
|
||||
|
||||
@@ -23,9 +23,12 @@
|
||||
| 2026-03-03 | 吸收经验:我的页面卡片区边距优化,16rpx 为个人中心类页面推荐值,已升级 SKILL §8 | 已完成 |
|
||||
| 2026-03-05 | 分支冲突后功能完整性分析会议:修正 app.json 拆行、核心流程自测、确认 orders 接口 | 待续 |
|
||||
| 2026-03-05 | 文章详情@某人加好友方案讨论:阅读页解析 @、高亮可点击、调添加好友接口 | 待续 |
|
||||
| 2026-03-10 | 会议:管理端迁移 Mycontent-temp;小程序侧关注内容产物格式变化与阅读页兼容回归 | 待续 |
|
||||
| 2026-03-10 | 移植 loadDashboardStats():my.js 阅读统计改为后端接口,去除随机数时间/标题占位 | 已完成 |
|
||||
| 2026-03-10 | 富文本渲染技术债分析:contentParser.js 剥除 HTML 格式,建议改 rich-text 组件(待实施) | 待续 |
|
||||
|
||||
> **格式说明**:每次开发后在此追加一行,日期格式 YYYY-MM-DD,状态用:已完成 / 进行中 / 待续 / 搁置
|
||||
|
||||
---
|
||||
|
||||
**最后更新**:2026-03-05
|
||||
**最后更新**:2026-03-10(loadDashboardStats 移植完成)
|
||||
|
||||
@@ -19,7 +19,8 @@
|
||||
| 2026-02-28 | stitch_soul 需求评审:关键场景为阅读/付费/会员/导师预约/资料;待需求确定后补充联调用例 | 待续 |
|
||||
| 2026-03-05 | 分支冲突后功能完整性分析会议:制定「分支合并后回归清单」 | 待续 |
|
||||
| 2026-03-05 | 文章详情@某人加好友方案讨论:@ 展示与添加好友用例、联调与回归 | 待续 |
|
||||
| 2026-03-10 | 会议:管理端迁移 Mycontent-temp;回归重点为菜单一致性、隐藏路由可达性、鉴权跳转 | 待续 |
|
||||
|
||||
---
|
||||
|
||||
**最后更新**:2026-03-05
|
||||
**最后更新**:2026-03-10
|
||||
|
||||
@@ -20,9 +20,11 @@
|
||||
| 2026-02-28 | stitch_soul 需求评审:待后端方案确定后规划章节/导师/会员/预约管理页面 | 待续 |
|
||||
| 2026-03-05 | 分支冲突后功能完整性分析会议:全功能自测,记录 404/异常接口 | 待续 |
|
||||
| 2026-03-05 | 文章详情@某人加好友方案讨论:编辑页插入 @用户、保存约定 content 格式 | 待续 |
|
||||
| 2026-03-10 | 会议:管理端迁移 Mycontent-temp 新菜单/布局;主导航收敛、author/admin 并入 Settings Tab | 待续 |
|
||||
| 2026-03-10 | Toast 通知系统落地:创建 utils/toast.ts(纯原生),全系统 18 文件约 90 处 alert 全部替换为 toast.success/error/info | 已完成 |
|
||||
|
||||
> **格式说明**:每次开发后在此追加一行,日期格式 YYYY-MM-DD,状态用:已完成 / 进行中 / 待续 / 搁置
|
||||
|
||||
---
|
||||
|
||||
**最后更新**:2026-03-05
|
||||
**最后更新**:2026-03-10(Toast 系统全局落地)
|
||||
|
||||
56
.cursor/agent/管理端开发工程师/evolution/2026-03-10.md
Normal file
56
.cursor/agent/管理端开发工程师/evolution/2026-03-10.md
Normal file
@@ -0,0 +1,56 @@
|
||||
# 管理端开发工程师 经验记录 - 2026-03-10
|
||||
|
||||
## 会议结论:管理端迁移 Mycontent-temp 菜单/布局
|
||||
|
||||
- **目标态基线**:以 `Mycontent-temp/soul-admin` 为“新规范基线”,旧 `soul-admin` 若继续演进则对齐其实现,避免两套后台信息架构发散。
|
||||
- **菜单信息架构**:
|
||||
- 侧栏主菜单固定 5 项:数据概览 / 内容管理 / 用户管理 / 找伙伴 / 推广中心
|
||||
- 系统设置固定在侧栏底部
|
||||
- 取消「更多」折叠入口
|
||||
- **路由与入口策略**:
|
||||
- `author-settings`、`admin-users` 不再作为独立菜单/页面入口,统一并入 `/settings?tab=author|admin`
|
||||
- 订单/提现/推广设置/VIP角色/导师等页面**保留路由可达**,但不进入侧栏主菜单;入口通过概览卡片/页面内跳转承载
|
||||
- **实现抓手**:
|
||||
- `AdminLayout.tsx`:用 `primaryMenuItems` 平铺主菜单;Settings 单独固定
|
||||
- `App.tsx`:对旧路径用 `Navigate` 做兼容跳转(减少断链风险)
|
||||
|
||||
> 详见会议纪要:`.cursor/meeting/2026-03-10_管理端迁移Mycontent-temp菜单布局讨论.md`
|
||||
|
||||
---
|
||||
|
||||
## Toast 通知系统全局落地
|
||||
|
||||
### 背景
|
||||
|
||||
管理端全部操作反馈使用原生 `alert()`,体验差、阻断操作流程、需点 OK 才能继续。
|
||||
|
||||
### 解决方案
|
||||
|
||||
创建 `soul-admin/src/utils/toast.ts`(**纯原生 DOM 实现**,无第三方依赖):
|
||||
|
||||
```typescript
|
||||
// 用法
|
||||
import toast from '@/utils/toast'
|
||||
toast.success('已保存:标题') // 绿色,3s 消失
|
||||
toast.error('保存失败: ...') // 红色,3s 消失
|
||||
toast.info('暂无数据') // 蓝色,3s 消失
|
||||
```
|
||||
|
||||
### 全系统替换
|
||||
|
||||
使用 PowerShell 批量脚本处理 **18 个文件、约 90 处 alert**,替换规则:
|
||||
- 含"失败/错误/请填/不一致/必填" → `toast.error()`
|
||||
- 含"成功/已保存/已删除/已创建" → `toast.success()`
|
||||
- 其余 → `toast.info()`
|
||||
|
||||
替换后人工复查 `toast.info()` 调用,修正 5 处语义误判(验证提示类应为 error)。
|
||||
|
||||
### 规则沉淀
|
||||
|
||||
1. **管理端禁用 `alert()`**,统一使用 `@/utils/toast`
|
||||
2. 新增页面/组件时,操作反馈一律用 toast
|
||||
3. 批量脚本替换后,**必须**人工复查 `toast.info()` 是否有应为 `toast.error()` 的验证提示
|
||||
4. toast 自动消失(3s),不阻断流程;若需用户确认,仍使用 `confirm()`
|
||||
|
||||
> 详见会议纪要:`.cursor/meeting/2026-03-10_Toast通知系统全局落地.md`
|
||||
|
||||
@@ -4,3 +4,4 @@
|
||||
|------|------|------|
|
||||
| 2026-03-05 | 分支合并后全功能自测,404/异常接口记录 | [2026-03-05.md](./2026-03-05.md) |
|
||||
| 2026-03-05 | 文章详情@某人:编辑页插入 @用户、保存约定 content 格式 | [2026-03-05.md](./2026-03-05.md) |
|
||||
| 2026-03-10 | 管理端迁移 Mycontent-temp 菜单/布局:主导航收敛、Settings Tab 承载 author/admin | [2026-03-10.md](./2026-03-10.md) |
|
||||
|
||||
12
.cursor/agent/软件测试/evolution/2026-03-10.md
Normal file
12
.cursor/agent/软件测试/evolution/2026-03-10.md
Normal file
@@ -0,0 +1,12 @@
|
||||
# 软件测试 经验记录 - 2026-03-10
|
||||
|
||||
## 管理端迁移 Mycontent-temp:测试与回归关注点
|
||||
|
||||
- **菜单一致性**:侧栏必须是 5 个主入口 + 底部系统设置;不再出现“更多”折叠。
|
||||
- **路由可达性回归**:菜单入口减少不等于功能减少,需要覆盖“隐藏路由仍可访问”的用例:
|
||||
- 订单、提现、推广设置、VIP角色、导师、导师预约、二维码、站点、支付、API 文档、匹配记录等。
|
||||
- **鉴权回归**:任意页面刷新都必须先 `GET /api/admin` 校验;失效则跳登录并清 token。
|
||||
- **导航兼容**:旧路径(如 `/author-settings`、`/admin-users`)应跳转到 `/settings?tab=author|admin`。
|
||||
|
||||
> 详见会议纪要:`.cursor/meeting/2026-03-10_管理端迁移Mycontent-temp菜单布局讨论.md`
|
||||
|
||||
@@ -4,3 +4,4 @@
|
||||
|------|------|------|
|
||||
| 2026-03-05 | 分支合并后回归清单制定;三端联调验证 | [2026-03-05.md](./2026-03-05.md) |
|
||||
| 2026-03-05 | 文章详情@某人:@ 展示与添加好友用例、联调与回归点 | [2026-03-05.md](./2026-03-05.md) |
|
||||
| 2026-03-10 | 管理端迁移 Mycontent-temp:菜单一致性、隐藏路由可达性、鉴权与跳转回归 | [2026-03-10.md](./2026-03-10.md) |
|
||||
|
||||
157
.cursor/meeting/2026-03-09_devlop与yongxu分支差异分析会议.md
Normal file
157
.cursor/meeting/2026-03-09_devlop与yongxu分支差异分析会议.md
Normal file
@@ -0,0 +1,157 @@
|
||||
# 会议纪要 - 2026-03-09 | devlop 与 yongxu 分支差异分析
|
||||
|
||||
> 本文件由**助理橙子**在会议结束后自动生成。
|
||||
|
||||
---
|
||||
|
||||
## 基本信息
|
||||
|
||||
- **时间**:2026-03-09
|
||||
- **议题**:分析 devlop(dev 分支 / Mycontent-temp)与 yongxu(当前分支)两个项目的区别
|
||||
- **触发方式**:开个会议
|
||||
- **参与角色**:产品经理、后端开发、管理端开发工程师、小程序开发工程师、测试人员
|
||||
|
||||
---
|
||||
|
||||
## 各角色发言
|
||||
|
||||
### 【产品经理】
|
||||
|
||||
**分支定位**:
|
||||
- **devlop**:老板的老板主改,侧重内容管理、用户管理、找伙伴等管理端能力,开发文档已删除(迁移至他处)
|
||||
- **yongxu**:你主改,侧重 C 端体验:@提及、一键收款、个人资料页、找伙伴、推荐码绑定、分享带 ref、退款等
|
||||
|
||||
**差异要点**:
|
||||
- devlop 删除了整个 `开发文档/` 目录(约 100+ 文件),yongxu 保留
|
||||
- 需求文档(20260308 内容管理、用户管理、找伙伴)在 devlop 侧有更新,yongxu 侧沿用旧版
|
||||
- 合并后需确保:C 端功能(@提及、推荐码、一键收款)不丢,管理端能力(ContentPage、FindPartnerPage、UsersPage)不丢
|
||||
|
||||
### 【后端开发】
|
||||
|
||||
**devlop 独有**(yongxu 没有):
|
||||
- `admin_dashboard.go`、`admin_rfm.go`、`admin_shensheshou.go`、`admin_user_rules.go`
|
||||
- `db_book.go`、`db_person.go`(db 路由组扩展)
|
||||
- `ckb.go` 大改(存客宝扩展)
|
||||
- `match.go`、`match_records.go` 扩展
|
||||
- `book.go`、`user.go`、`cron.go` 等逻辑更新
|
||||
- `person.go`、`user_rule.go` 等 model 新增
|
||||
- 路由、数据库、配置等变更
|
||||
|
||||
**yongxu 独有**(devlop 没有):
|
||||
- @提及相关接口、免费章节判断、存客宝限频、退款逻辑等(在共同祖先 90d32a51 之后)
|
||||
|
||||
**共同修改文件(易冲突)**:
|
||||
- `soul-api/internal/handler/miniprogram.go`
|
||||
- `soul-api/internal/config/config.go`
|
||||
- `soul-api/internal/database/database.go`
|
||||
- `soul-api/internal/router/router.go`
|
||||
|
||||
### 【管理端开发工程师】
|
||||
|
||||
**devlop 独有**(yongxu 没有):
|
||||
- `ContentPage.tsx` 大改(约 1395 行变更)
|
||||
- `ChapterTree.tsx`、`ChaptersPage.tsx` 新增/重构
|
||||
- `FindPartnerPage.tsx` 及多 Tab:CKBConfigPanel、CKBStatsTab、FindPartnerTab、MatchPoolTab、MatchRecordsTab、MentorBookingTab、MentorTab、ResourceDockingTab、TeamRecruitTab
|
||||
- `RichEditor.tsx`、`UserDetailModal.tsx` 扩展
|
||||
- `UsersPage.tsx` 大改(约 1267 行)
|
||||
- `DashboardPage.tsx`、`DistributionPage.tsx`、`SettingsPage.tsx` 等更新
|
||||
- `client.ts`、`AdminLayout.tsx`、`App.tsx` 配置调整
|
||||
|
||||
**yongxu**:管理端改动较少,主要在小程序侧
|
||||
|
||||
**合并策略**:以 devlop 管理端为主,yongxu 若有管理端改动需手工合入
|
||||
|
||||
### 【小程序开发工程师】
|
||||
|
||||
**yongxu 独有**(相对共同祖先 90d32a51):
|
||||
- `app.js`:baseUrl 真实后端、goBackOrToHome、推荐码/访问记录、checkUpdate
|
||||
- `read/*`:@提及解析与高亮、mid 优先跳转
|
||||
- `chapters/*`:章节列表、分享
|
||||
- `index/*`:首页、已读/待读
|
||||
- `my/*`:个人中心、导航栏
|
||||
|
||||
**devlop 也改了同一批文件**:
|
||||
- `miniprogram/app.js`、`app.json`
|
||||
- `miniprogram/pages/chapters/chapters.js`、`chapters.json`
|
||||
- `miniprogram/pages/index/index.js`、`index.wxml`
|
||||
- `miniprogram/pages/my/my.js`
|
||||
- `miniprogram/pages/read/read.js`、`read.wxml`、`read.wxss`
|
||||
- `miniprogram/project.private.config.json`
|
||||
- `miniprogram/utils/readingTracker.js`
|
||||
|
||||
**合并重点**:上述文件两分支均有修改,合并时需保留 yongxu 的 @提及、推荐码、baseUrl、goBackOrToHome 等业务逻辑,同时接纳 devlop 的其它改动(若有)
|
||||
|
||||
### 【测试人员】
|
||||
|
||||
合并后需做:
|
||||
- 三端联调:小程序↔API、管理端↔API
|
||||
- 回归测试:@提及、推荐码、找伙伴、内容管理、用户管理、存客宝、一键收款、退款
|
||||
- 建议合并完成后拉一份回归清单,逐项验证
|
||||
|
||||
---
|
||||
|
||||
## 讨论过程
|
||||
|
||||
- 用户明确:Mycontent-temp 对应 dev 分支(devlop),当前打开的是 yongxu 分支
|
||||
- 基于 `git diff`、`git log` 分析两分支自共同祖先 90d32a51 以来的差异
|
||||
- 共识:devlop 改动量大(248 文件、约 6 万行变更),yongxu 改动小(7 文件、约 366 行),合并时需分模块处理
|
||||
|
||||
---
|
||||
|
||||
## 会议决议
|
||||
|
||||
1. **差异总结**:devlop 侧重管理端与脚本(内容管理、找伙伴、飞书导出、开发文档删除);yongxu 侧重 C 端(@提及、一键收款、推荐码、baseUrl 真实后端)
|
||||
2. **合并策略**:
|
||||
- 管理端、soul-api 新增能力:以 devlop 为主
|
||||
- 小程序:保留 yongxu 的 @提及、推荐码、goBackOrToHome、baseUrl 等,与 devlop 改动手工合并
|
||||
- 开发文档:若需保留,从 yongxu 恢复;若已迁移他处,可沿用 devlop 的删除
|
||||
3. **待确认项**:开发文档最终保留在仓库内还是迁移到外部?合并冲突时以哪边为准(按模块已约定)
|
||||
|
||||
---
|
||||
|
||||
## 待办事项
|
||||
|
||||
| 责任角色 | 任务 | 优先级 | 截止建议 |
|
||||
|---------|------|--------|---------|
|
||||
| 用户 | 确认开发文档保留策略 | 中 | 合并前 |
|
||||
| 用户 | 执行分支合并(如 git merge devlop 或 git merge yongxu) | 高 | 待用户操作 |
|
||||
| 助理橙子 | 合并时协助逐文件解决冲突 | 高 | 用户合并时 |
|
||||
| 测试人员 | 合并后回归测试 | 中 | 合并完成 |
|
||||
|
||||
---
|
||||
|
||||
## 问题与作答区
|
||||
|
||||
| # | 问题 | 责任角色 | 作答 |
|
||||
|---|------|---------|------|
|
||||
| 1 | 开发文档最终保留在仓库内还是迁移到外部? | 用户 | (待补充) |
|
||||
| 2 | 合并时以 devlop 为基准合并 yongxu,还是以 yongxu 为基准合并 devlop? | 用户 | (待补充) |
|
||||
|
||||
---
|
||||
|
||||
## 两分支差异速查表
|
||||
|
||||
| 维度 | devlop(dev 分支) | yongxu(当前分支) |
|
||||
|------|-------------------|---------------------|
|
||||
| 共同祖先 | 90d32a51 | 90d32a51 |
|
||||
| 独有提交数 | 约 200+ | 2 |
|
||||
| 变更文件数 | 248 | 7 |
|
||||
| 开发文档 | 已删除 | 保留 |
|
||||
| 小程序 | 有改动(与 yongxu 重叠) | @提及、推荐码、baseUrl、goBackOrToHome 等 |
|
||||
| 管理端 | ContentPage、FindPartnerPage、UsersPage 等大改 | 改动少 |
|
||||
| soul-api | admin_*、db_*、ckb、match 等扩展 | 免费章节、存客宝限频、退款等 |
|
||||
| 脚本 | 飞书导出、content_upload、Gitea 推送等 | 无 |
|
||||
| 会议纪要 | 合并策略、管理端与 API 分析等 | 代码完整性分析、各成员功能检测 |
|
||||
|
||||
---
|
||||
|
||||
## 各角色经验与业务理解更新
|
||||
|
||||
### 团队共享
|
||||
|
||||
- 分支差异分析会议:先确定共同祖先,再用 `git diff --stat`、`git log` 分模块梳理,便于制定合并策略
|
||||
- 多分支合并时按模块约定「以谁为主」:管理端/soul-api 以 devlop 为主,小程序保留 yongxu 业务逻辑
|
||||
|
||||
---
|
||||
|
||||
*会议纪要由助理橙子生成 | 各角色经验已同步至 `agent/{角色}/evolution/2026-03-09.md`*
|
||||
165
.cursor/meeting/2026-03-09_dev分支需求分析与yongxu迁移方案.md
Normal file
165
.cursor/meeting/2026-03-09_dev分支需求分析与yongxu迁移方案.md
Normal file
@@ -0,0 +1,165 @@
|
||||
# dev 分支需求分析与 yongxu 迁移方案
|
||||
|
||||
> 基于用户反馈:dev 分支只改了样式,未考虑后端/API/小程序三端协调,导致 bug 或功能不全;yongxu 分支功能完善。本文档分析 dev 需求、识别三端缺口,并给出「新功能迁入 yongxu + 补全功能」的执行方案。
|
||||
|
||||
---
|
||||
|
||||
## 一、dev 分支变更概览
|
||||
|
||||
### 1.1 变更性质(用户结论)
|
||||
|
||||
- **dev 侧重**:管理端 UI/样式、新页面布局
|
||||
- **问题**:未同步考虑 soul-api、miniprogram 的接口与逻辑,导致:
|
||||
- 管理端新页面调用的接口在 yongxu 的 soul-api 中不存在或不全
|
||||
- 小程序端与 dev 管理端配置/数据模型不一致
|
||||
- 三端联调时出现 bug 或功能不全
|
||||
|
||||
### 1.2 dev 相对 yongxu 的增量(按模块)
|
||||
|
||||
| 模块 | dev 新增/改动 | 依赖的 API/能力 |
|
||||
|------|---------------|-----------------|
|
||||
| **soul-admin** | ContentPage 大改、ChapterTree、RichEditor、@提及、persons、link-tags 配置 | `/api/db/book`(含 section-orders)、`/api/db/persons`、`/api/db/link-tags`、`/api/db/config/full?key=xxx` |
|
||||
| **soul-admin** | FindPartnerPage + 多 Tab(CKBConfigPanel、CKBStatsTab、MatchPoolTab 等) | `/api/db/config/full?key=ckb_config`、`/api/db/ckb-leads` |
|
||||
| **soul-admin** | UsersPage 大改、UserDetailModal 扩展 | `/api/db/users` 已有,可能需扩展字段 |
|
||||
| **soul-admin** | ChaptersPage 新增、DashboardPage 调整 | 依赖 db/book、db/users 等 |
|
||||
| **soul-admin** | DistributionPage、SettingsPage 等样式调整 | 现有 admin 接口 |
|
||||
| **soul-api** | admin_dashboard、admin_rfm、admin_shensheshou、admin_user_rules | 新增 handler |
|
||||
| **soul-api** | db_person、db_book 扩展(section-orders、move-sections) | 扩展 db_book action |
|
||||
| **soul-api** | ckb 扩展、match/match_records 扩展 | 扩展 ckb、match handler |
|
||||
| **miniprogram** | 部分页面简化/样式调整 | 与 yongxu 的 @提及、推荐码等可能冲突 |
|
||||
|
||||
---
|
||||
|
||||
## 二、三端缺口分析(yongxu 当前缺失)
|
||||
|
||||
### 2.1 soul-api 缺口(管理端新页面依赖)
|
||||
|
||||
| 接口/能力 | dev 管理端调用 | yongxu 是否已有 | 缺口说明 |
|
||||
|-----------|---------------|-----------------|----------|
|
||||
| `GET/POST/DELETE /api/db/persons` | ContentPage @提及人物配置 | ❌ 无 | 需新增 persons 表、model、handler |
|
||||
| `GET/POST/DELETE /api/db/link-tags` | ContentPage 链接标签配置 | ❌ 无 | 需新增 link_tags 表、model、handler |
|
||||
| `GET /api/db/book?action=section-orders&id=xxx` | ContentPage 章节内排序 | ❌ 无 | 需在 db_book 中扩展 action |
|
||||
| `PUT /api/db/book` action=move-sections | ContentPage 跨章移动 | ❌ 无 | 需在 db_book 中扩展 |
|
||||
| `GET /api/db/config/full?key=article_ranking_weights` | ContentPage | ✅ 有 | DBConfigGet 已支持 |
|
||||
| `GET /api/db/config/full?key=pinned_section_ids` | ContentPage | ✅ 有 | 同上 |
|
||||
| `GET /api/db/config/full?key=unpaid_preview_percent` | ContentPage | ✅ 有 | 同上 |
|
||||
| `GET /api/db/config/full?key=ckb_config` | FindPartnerPage CKBConfigPanel | ✅ 有 | 同上 |
|
||||
| `GET /api/db/ckb-leads?mode=submitted&page=1&pageSize=50` | FindPartnerPage 存客宝线索 | ❌ 无 | 需新增 ckb_leads 相关接口 |
|
||||
| admin_dashboard、admin_rfm、admin_shensheshou、admin_user_rules | Dashboard、神奢手等 | ❌ 无 | 可选,按业务需要 |
|
||||
|
||||
### 2.2 小程序端
|
||||
|
||||
- **yongxu 已完善**:@提及、推荐码、baseUrl、goBackOrToHome、一键收款、免费章节、存客宝限频、退款等
|
||||
- **策略**:**保留 yongxu 小程序全部逻辑**,不引入 dev 对 miniprogram 的简化(dev 可能删减了功能)
|
||||
|
||||
### 2.3 管理端(soul-admin)
|
||||
|
||||
- **yongxu 已有**:ContentPage、ChapterTree、UsersPage、DashboardPage 等基础版本
|
||||
- **dev 增量**:更丰富的 ContentPage(persons、link-tags、RichEditor @提及)、FindPartnerPage 整页、UsersPage 扩展
|
||||
- **策略**:在 soul-api 补全接口后,再选择性迁入 dev 的页面组件
|
||||
|
||||
---
|
||||
|
||||
## 三、迁移原则
|
||||
|
||||
1. **基准分支**:yongxu(功能完善、三端协调良好)
|
||||
2. **不引入**:dev 对 miniprogram 的改动(避免覆盖 yongxu 的 @提及、推荐码等)
|
||||
3. **分阶段**:先补 soul-api 缺口 → 再迁入 soul-admin 新页面/组件
|
||||
4. **三端协调**:每迁入一个管理端功能,必须确保 soul-api 已有对应接口,且小程序若依赖该配置则已对齐
|
||||
|
||||
---
|
||||
|
||||
## 四、执行方案(按优先级)
|
||||
|
||||
### 阶段 1:soul-api 补全(必须)
|
||||
|
||||
| 序号 | 任务 | 说明 |
|
||||
|------|------|------|
|
||||
| 1.1 | 新增 `db/persons` | model.Person、表 persons,GET/POST/DELETE,供 ContentPage @提及人物配置 |
|
||||
| 1.2 | 新增 `db/link-tags` | model.LinkTag、表 link_tags,GET/POST/DELETE,供 ContentPage 链接标签 |
|
||||
| 1.3 | 扩展 `db/book` | 增加 action=section-orders、action=move-sections(若 ContentPage 需要) |
|
||||
| 1.4 | 新增 `db/ckb-leads` | 若存在 ckb_leads 表,GET 支持 mode=submitted/contact 分页;否则先建表再实现 |
|
||||
|
||||
### 阶段 2:soul-admin 迁入(在阶段 1 完成后)
|
||||
|
||||
| 序号 | 任务 | 说明 |
|
||||
|------|------|------|
|
||||
| 2.1 | ContentPage 增强 | 从 dev 迁入 persons、link-tags 配置区,RichEditor @提及(需 persons 接口) |
|
||||
| 2.2 | FindPartnerPage | 从 dev 迁入整页 + Tab(CKBConfigPanel、CKBStatsTab 等),需 ckb_config、ckb-leads 接口 |
|
||||
| 2.3 | UsersPage 扩展 | 从 dev 迁入 UserDetailModal 等扩展(若字段与 yongxu 的 db/users 一致) |
|
||||
| 2.4 | 菜单与路由 | 在 AdminLayout、App.tsx 中增加 FindPartner 入口(若尚未有) |
|
||||
|
||||
### 阶段 3:可选(按业务需要)
|
||||
|
||||
| 序号 | 任务 | 说明 |
|
||||
|------|------|------|
|
||||
| 3.1 | admin_dashboard、admin_rfm 等 | 若 Dashboard 需要新统计维度,再补充 |
|
||||
| 3.2 | dev 的 scripts、飞书导出等 | 与三端功能无直接关系,可单独评估 |
|
||||
|
||||
---
|
||||
|
||||
## 五、补全功能清单(可直接用于开发)
|
||||
|
||||
### 5.1 soul-api 必须补全
|
||||
|
||||
```
|
||||
[ ] 1. persons 表 + model + GET/POST/DELETE /api/db/persons
|
||||
[ ] 2. link_tags 表 + model + GET/POST/DELETE /api/db/link-tags
|
||||
[ ] 3. db_book 扩展:GET ?action=section-orders&id=xxx
|
||||
[ ] 4. db_book 扩展:PUT action=move-sections(若 ContentPage 需要)
|
||||
[ ] 5. ckb_leads 表(若无)+ GET /api/db/ckb-leads?mode=xxx&page=1&pageSize=50
|
||||
```
|
||||
|
||||
### 5.2 soul-admin 迁入(依赖 5.1)
|
||||
|
||||
```
|
||||
[ ] 6. ContentPage:persons 配置区、link-tags 配置区
|
||||
[ ] 7. ContentPage:RichEditor @提及(调用 persons)
|
||||
[ ] 8. FindPartnerPage + Tabs(CKBConfigPanel、CKBStatsTab、FindPartnerTab 等)
|
||||
[ ] 9. AdminLayout:增加「找伙伴」菜单项(若尚无)
|
||||
[ ] 10. UsersPage:UserDetailModal 扩展(按需)
|
||||
```
|
||||
|
||||
### 5.3 小程序
|
||||
|
||||
```
|
||||
[ ] 无需变更,保留 yongxu 全部逻辑
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 六、迁移操作建议
|
||||
|
||||
### 6.1 不推荐直接 merge devlop
|
||||
|
||||
- dev 与 yongxu 在 miniprogram、部分 soul-api 上存在冲突
|
||||
- 直接 merge 会覆盖 yongxu 的完善功能
|
||||
|
||||
### 6.2 推荐方式
|
||||
|
||||
1. **保持当前在 yongxu 分支**
|
||||
2. **按阶段 1**:在 yongxu 上直接开发 soul-api 补全(persons、link-tags、db_book 扩展、ckb-leads)
|
||||
3. **按阶段 2**:用 `git show devlop:path/to/file` 取出 dev 的 soul-admin 文件,手工合并到 yongxu,并确认调用的接口已在 soul-api 中存在
|
||||
4. **每完成一个功能**:过 soul-change-checklist,做三端联调验证
|
||||
|
||||
### 6.3 冲突文件处理(若必须 diff 参考)
|
||||
|
||||
- `miniprogram/*`:**以 yongxu 为准**,不采纳 dev 的改动
|
||||
- `soul-admin/*`:选择性采纳 dev 的 UI/组件,确保调用的 API 已在 yongxu 的 soul-api 中实现
|
||||
- `soul-api/*`:以 yongxu 为基础,缺什么补什么(persons、link-tags、ckb-leads 等)
|
||||
|
||||
---
|
||||
|
||||
## 七、总结
|
||||
|
||||
| 项目 | 结论 |
|
||||
|------|------|
|
||||
| 基准 | yongxu |
|
||||
| dev 价值 | 管理端 UI 增强(ContentPage、FindPartnerPage、UsersPage) |
|
||||
| dev 问题 | 未配套 soul-api 的 persons、link-tags、ckb-leads 等,导致功能不全 |
|
||||
| 迁移路径 | 先补 soul-api → 再迁入 soul-admin 新页面 |
|
||||
| 小程序 | 不改动,保留 yongxu |
|
||||
|
||||
---
|
||||
|
||||
*文档生成:2026-03-09 | 供开发执行参考*
|
||||
137
.cursor/meeting/2026-03-09_代码完整性分析与分支合并准备.md
Normal file
137
.cursor/meeting/2026-03-09_代码完整性分析与分支合并准备.md
Normal file
@@ -0,0 +1,137 @@
|
||||
# 会议纪要 - 2026-03-09 | 代码完整性分析与分支合并准备
|
||||
|
||||
> 本文件由**助理橙子**在会议结束后自动生成。
|
||||
|
||||
---
|
||||
|
||||
## 基本信息
|
||||
|
||||
- **时间**:2026-03-09
|
||||
- **议题**:分析当前代码完整性;记录你(yongxu 分支)的改动进度;待切换分支后做比较与合并
|
||||
- **触发方式**:开会
|
||||
- **参与角色**:产品经理、后端开发、管理端开发工程师、小程序开发工程师、测试人员
|
||||
|
||||
---
|
||||
|
||||
## 各角色发言
|
||||
|
||||
### 【产品经理】
|
||||
|
||||
当前 yongxu 分支已实现的功能(从提交记录推断):@提及、一键收款、个人资料页、找伙伴、推荐码绑定、分享带 ref、退款等。需要与 devlop 分支的需求文档(20260308 内容管理、用户管理、找伙伴等)做对照,确保合并后需求不遗漏。
|
||||
|
||||
### 【后端开发】
|
||||
|
||||
- **yongxu 独有**:@提及相关接口、免费章节判断、存客宝限频、退款逻辑等
|
||||
- **devlop 独有**:内容管理深度优化、admin_dashboard、admin_rfm、admin_shensheshou、admin_user_rules、ckb 扩展、match/match_records、db_book、db_person 等
|
||||
- **合并风险**:soul-api 多处 handler 可能冲突,需逐文件比对
|
||||
|
||||
### 【管理端开发工程师】
|
||||
|
||||
- **devlop 新增**:ContentPage 大改、ChapterTree、ChaptersPage、FindPartnerPage 及多 Tab、RichEditor、UserDetailModal 扩展、UsersPage 扩展等
|
||||
- **yongxu**:管理端改动较少
|
||||
- **合并策略**:devlop 管理端改动量大,建议以 devlop 为主,yongxu 若有管理端改动需手工合入
|
||||
|
||||
### 【小程序开发工程师】
|
||||
|
||||
- **yongxu 独有**:app.js(baseUrl 真实后端、goBackOrToHome、推荐码/访问记录)、chapters、index、my、read 等页面的 @提及、mid 优先跳转、一键收款等
|
||||
- **devlop 独有**:部分配置、脚本、文档
|
||||
- **合并重点**:miniprogram/app.js、read.js、chapters.js 等可能冲突,需保留 yongxu 的业务逻辑
|
||||
|
||||
### 【测试人员】
|
||||
|
||||
合并后需做:三端联调(小程序↔API、管理端↔API)、@提及、推荐码、找伙伴、内容管理、用户管理、存客宝等回归测试。建议合并完成后拉一份回归清单。
|
||||
|
||||
---
|
||||
|
||||
## 讨论过程
|
||||
|
||||
- 用户明确:老板的老板在 devlop 上改了代码,用户当前在 yongxu,尚未切换分支
|
||||
- 决议:先记录 yongxu 当前状态,待用户切换分支后再执行比较与合并动作
|
||||
|
||||
---
|
||||
|
||||
## 会议决议
|
||||
|
||||
1. **记录 yongxu 当前状态**:已写入本纪要下方的「yongxu 分支快照」
|
||||
2. **合并策略**:用户切换分支后,由助理执行 `git diff` 比较,并协助合并
|
||||
3. **待确认项**:用户切换到哪个分支(devlop / main)需用户明确
|
||||
|
||||
---
|
||||
|
||||
## 待办事项
|
||||
|
||||
| 责任角色 | 任务 | 优先级 | 截止建议 |
|
||||
|---------|------|--------|---------|
|
||||
| 用户 | 切换分支(如 git checkout devlop) | 高 | 待用户操作 |
|
||||
| 助理橙子 | 切换后执行 diff 比较、协助合并 | 高 | 用户切换后 |
|
||||
| 测试人员 | 合并后回归测试 | 中 | 合并完成 |
|
||||
|
||||
---
|
||||
|
||||
## 问题与作答区
|
||||
|
||||
| # | 问题 | 责任角色 | 作答 |
|
||||
|---|------|---------|------|
|
||||
| 1 | 用户将切换到 devlop 还是 main? | 用户 | (待补充) |
|
||||
| 2 | 合并冲突时以哪边为准? | 用户 | (待补充) |
|
||||
|
||||
---
|
||||
|
||||
## yongxu 分支快照(供后续比较与合并)
|
||||
|
||||
> **重要**:以下为 2026-03-09 会议时记录,供切换分支后对比使用。
|
||||
|
||||
### 分支与提交
|
||||
|
||||
| 项目 | 值 |
|
||||
|------|-----|
|
||||
| 当前分支 | `yongxu` |
|
||||
| 当前 commit | `c3de123ef8b5e971888739999816d13d4f78bd4d` |
|
||||
| 工作区状态 | clean(无未提交变更) |
|
||||
| 对比目标 | `origin/devlop` (`868b0a10`) |
|
||||
|
||||
### yongxu 独有提交(相对 origin/main,前 10 条)
|
||||
|
||||
```
|
||||
c3de123e 1
|
||||
90d32a51 更新小程序配置,切换API基础地址至真实后端。实现@用户提及功能...
|
||||
73ecead3 更新小程序配置,切换API基础地址至本地开发环境。优化用户提交联系方式...
|
||||
68520043 实现@提及功能,允许用户在阅读页中高亮并点击提及的用户...
|
||||
9aaffd80 更新.gitignore文件...
|
||||
2af49611 新增一键收款功能...
|
||||
04b6924a 重构跨多个页面的导航逻辑,goBackOrToHome...
|
||||
3b193fb5 优化个人中心页面,调整导航栏布局...
|
||||
...
|
||||
```
|
||||
|
||||
### 关键文件(yongxu 侧你已改动的)
|
||||
|
||||
| 文件 | 说明 |
|
||||
|------|------|
|
||||
| miniprogram/app.js | baseUrl 真实后端、goBackOrToHome、推荐码/访问记录、checkUpdate |
|
||||
| miniprogram/pages/read/* | @提及解析与高亮、mid 优先跳转 |
|
||||
| miniprogram/pages/chapters/* | 章节列表、分享 |
|
||||
| miniprogram/pages/index/* | 首页、已读/待读 |
|
||||
| miniprogram/pages/my/* | 个人中心、导航栏 |
|
||||
| soul-api/* | 免费章节、存客宝、退款等 |
|
||||
| soul-admin/* | 若有改动需核对 |
|
||||
|
||||
### devlop 独有(老板的老板的改动,摘要)
|
||||
|
||||
- **soul-admin**:ContentPage、ChapterTree、FindPartnerPage、RichEditor、UsersPage、UserDetailModal 等大量改动
|
||||
- **soul-api**:admin_dashboard、admin_rfm、admin_shensheshou、ckb、match、db_book、db_person 等
|
||||
- **scripts**:飞书同步、Gitea 推送、content_upload 等
|
||||
- **开发文档**:20260308 内容管理、用户管理、找伙伴需求等
|
||||
|
||||
---
|
||||
|
||||
## 各角色经验与业务理解更新
|
||||
|
||||
### 团队共享
|
||||
|
||||
- 分支合并前先记录当前分支状态(commit、关键文件列表),便于后续 diff 与合并决策
|
||||
- 多人在不同分支开发时,合并策略需提前约定(以谁为主、冲突解决规则)
|
||||
|
||||
---
|
||||
|
||||
*会议纪要由助理橙子生成 | 快照供切换分支后比较与合并使用*
|
||||
178
.cursor/meeting/2026-03-09_各成员功能检测报告.md
Normal file
178
.cursor/meeting/2026-03-09_各成员功能检测报告.md
Normal file
@@ -0,0 +1,178 @@
|
||||
# 各成员功能检测报告 - 2026-03-09
|
||||
|
||||
> 按角色检测小程序、管理端、后端的 API 调用与路由匹配、边界合规性。
|
||||
|
||||
---
|
||||
|
||||
## 一、小程序开发工程师(miniprogram/)
|
||||
|
||||
### 1.1 API 路径合规性 ✅
|
||||
|
||||
| 检查项 | 结果 |
|
||||
|--------|------|
|
||||
| 是否仅调用 `/api/miniprogram/*` | ✅ 是(除 read.js.backup 外) |
|
||||
| 是否调用 `/api/admin/*` 或 `/api/db/*` | ❌ **read.js.backup** 调用了 `/api/db/config`(边界违规) |
|
||||
|
||||
**说明**:`read.js.backup` 为备份文件,当前运行的 `read.js` 已使用 `/api/miniprogram/*`,无违规。建议删除或重命名 `.backup` 文件,避免误用。
|
||||
|
||||
### 1.2 小程序调用的接口 vs 后端路由
|
||||
|
||||
| 接口路径 | 后端是否注册 | 说明 |
|
||||
|----------|-------------|------|
|
||||
| /api/miniprogram/config | ✅ | GetPublicDBConfig |
|
||||
| /api/miniprogram/login | ✅ | MiniprogramLogin |
|
||||
| /api/miniprogram/phone-login | ✅ | WechatPhoneLogin |
|
||||
| /api/miniprogram/book/all-chapters | ✅ | |
|
||||
| /api/miniprogram/book/chapter/:id | ✅ | |
|
||||
| /api/miniprogram/book/chapter/by-mid/:mid | ✅ | |
|
||||
| /api/miniprogram/book/hot | ✅ | |
|
||||
| /api/miniprogram/book/recommended | ✅ | |
|
||||
| /api/miniprogram/book/latest-chapters | ✅ | |
|
||||
| /api/miniprogram/book/search | ✅ | |
|
||||
| /api/miniprogram/book/stats | ✅ | |
|
||||
| /api/miniprogram/referral/visit | ✅ | |
|
||||
| /api/miniprogram/referral/bind | ✅ | |
|
||||
| /api/miniprogram/referral/data | ✅ | |
|
||||
| /api/miniprogram/earnings | ✅ | MyEarnings |
|
||||
| /api/miniprogram/match/config | ✅ | |
|
||||
| /api/miniprogram/match/users | ✅ | |
|
||||
| /api/miniprogram/ckb/join | ✅ | |
|
||||
| /api/miniprogram/ckb/match | ✅ | |
|
||||
| /api/miniprogram/ckb/lead | ✅ | |
|
||||
| /api/miniprogram/upload | ✅ | |
|
||||
| /api/miniprogram/user/* | ✅ | profile、addresses、check-purchased、purchase-status、reading-progress、update |
|
||||
| /api/miniprogram/withdraw/* | ✅ | withdraw、records、pending-confirm、confirm-received、confirm-info |
|
||||
| /api/miniprogram/vip/* | ✅ | status、profile、members |
|
||||
| /api/miniprogram/users | ✅ | MiniprogramUsers |
|
||||
| /api/miniprogram/orders | ✅ | MiniprogramOrders |
|
||||
| /api/miniprogram/mentors | ✅ | |
|
||||
| /api/miniprogram/mentors/:id | ✅ | |
|
||||
| /api/miniprogram/mentors/:id/book | ✅ | |
|
||||
| /api/miniprogram/about/author | ✅ | |
|
||||
| /api/miniprogram/pay | ✅ | |
|
||||
| /api/miniprogram/qrcode | ✅ | |
|
||||
| /api/miniprogram/phone | ✅ | |
|
||||
|
||||
**结论**:小程序调用的接口均在后端路由中注册,无 404 风险。
|
||||
|
||||
### 1.3 其他问题
|
||||
|
||||
| 问题 | 建议 |
|
||||
|------|------|
|
||||
| app.json 第 19 行多页面写同一行 | 建议拆行便于维护(2026-03-05 会议已建议) |
|
||||
| read.js.backup 调用 /api/db/config | 删除或归档该备份文件 |
|
||||
|
||||
---
|
||||
|
||||
## 二、管理端开发工程师(soul-admin/)
|
||||
|
||||
### 2.1 API 路径合规性 ✅
|
||||
|
||||
| 检查项 | 结果 |
|
||||
|--------|------|
|
||||
| 是否仅调用 `/api/admin/*`、`/api/db/*`、`/api/orders` 等管理端接口 | ✅ 是 |
|
||||
| 是否调用 `/api/miniprogram/*` | ✅ 否 |
|
||||
|
||||
### 2.2 管理端调用的接口 vs 后端路由
|
||||
|
||||
| 接口路径 | 后端是否注册 | 页面 |
|
||||
|----------|-------------|------|
|
||||
| /api/admin/logout | ✅ | AdminLayout |
|
||||
| /api/admin/referral-settings | ✅ | ReferralSettingsPage |
|
||||
| /api/admin/withdrawals | ✅ | WithdrawalsPage、DistributionPage |
|
||||
| /api/admin/orders/refund | ✅ | OrdersPage、DistributionPage |
|
||||
| /api/admin/distribution/overview | ✅ | DistributionPage |
|
||||
| /api/admin/author-settings | ✅ | AuthorSettingsPage |
|
||||
| /api/admin/settings | ✅ | SettingsPage |
|
||||
| /api/admin/users | ✅ | AdminUsersPage |
|
||||
| /api/db/users | ✅ | UsersPage、DistributionPage、OrdersPage、UserDetailModal、SetVipModal |
|
||||
| /api/db/users/referrals | ✅ | UsersPage、UserDetailModal |
|
||||
| /api/db/book | ✅ | ContentPage |
|
||||
| /api/db/config | ✅ | PaymentPage、SitePage、QRCodesPage、MatchPage |
|
||||
| /api/db/config/full | ✅ | MatchPage |
|
||||
| /api/db/vip-roles | ✅ | VipRolesPage、SetVipModal |
|
||||
| /api/db/mentors | ✅ | MentorsPage |
|
||||
| /api/db/match-records | ✅ | MatchRecordsPage |
|
||||
| /api/db/mentor-consultations | ✅ | MentorConsultationsPage |
|
||||
| /api/orders | ✅ | OrdersPage |
|
||||
|
||||
**结论**:管理端调用的接口均在后端路由中注册,无 404 风险。
|
||||
|
||||
### 2.3 路由与页面对应
|
||||
|
||||
| 路由 | 页面 | 状态 |
|
||||
|------|------|------|
|
||||
| /dashboard | DashboardPage | ✅ |
|
||||
| /orders | OrdersPage | ✅ |
|
||||
| /users | UsersPage | ✅ |
|
||||
| /distribution | DistributionPage | ✅ |
|
||||
| /withdrawals | WithdrawalsPage | ✅ |
|
||||
| /content | ContentPage | ✅ |
|
||||
| /referral-settings | ReferralSettingsPage | ✅ |
|
||||
| /author-settings | AuthorSettingsPage | ✅ |
|
||||
| /vip-roles | VipRolesPage | ✅ |
|
||||
| /mentors | MentorsPage | ✅ |
|
||||
| /mentor-consultations | MentorConsultationsPage | ✅ |
|
||||
| /admin-users | AdminUsersPage | ✅ |
|
||||
| /settings | SettingsPage | ✅ |
|
||||
| /payment | PaymentPage | ✅ |
|
||||
| /site | SitePage | ✅ |
|
||||
| /qrcodes | QRCodesPage | ✅ |
|
||||
| /match | MatchPage | ✅ |
|
||||
| /match-records | MatchRecordsPage | ✅ |
|
||||
| /api-doc | ApiDocPage | ✅ |
|
||||
|
||||
**结论**:21 个路由与页面一一对应,无缺失。
|
||||
|
||||
---
|
||||
|
||||
## 三、后端开发(soul-api/)
|
||||
|
||||
### 3.1 路由分组
|
||||
|
||||
| 路由组 | 前缀 | 使用方 | 状态 |
|
||||
|--------|------|--------|------|
|
||||
| miniprogram | /api/miniprogram/* | 小程序 | ✅ |
|
||||
| admin | /api/admin/* | 管理端 | ✅ |
|
||||
| db | /api/db/* | 管理端 | ✅ |
|
||||
| 支付回调 | /api/payment/*、/api/miniprogram/pay/notify | 微信/支付宝 | ✅ |
|
||||
|
||||
### 3.2 待确认项
|
||||
|
||||
| 项目 | 说明 |
|
||||
|------|------|
|
||||
| /api/orders 鉴权 | 该接口在 api 根下直接挂载,**未经过 AdminAuth**。OrdersList handler 未做鉴权校验,存在未授权访问风险。建议将 /api/orders 移入 admin 组或单独加 AdminAuth |
|
||||
| soul-api 版本管理 | 若 soul-api 在独立仓库或 .gitignore 排除,合并后需在 soul-api 所在位置单独确认 |
|
||||
|
||||
---
|
||||
|
||||
## 四、测试人员
|
||||
|
||||
### 4.1 建议回归清单
|
||||
|
||||
| 场景 | 验证点 |
|
||||
|------|--------|
|
||||
| 小程序登录 | 微信登录、手机号、token 持久化 |
|
||||
| 购买与支付 | 下单、微信支付、回调更新、购买状态 |
|
||||
| 推荐与分润 | 扫码/分享带 ref、绑定、分润计算 |
|
||||
| VIP 功能 | 开通、资料填写、头像上传、保存、排行展示 |
|
||||
| 管理端 CRUD | 列表、搜索、分页、新增、编辑、删除 |
|
||||
| 提现 | 申请、审核、状态流转、到账确认 |
|
||||
| 找伙伴 | match/config、ckb/join、ckb/lead |
|
||||
| @提及 | 阅读页高亮、点击添加好友 |
|
||||
|
||||
---
|
||||
|
||||
## 五、总结
|
||||
|
||||
| 角色 | 功能完整性 | 发现问题 |
|
||||
|------|-----------|----------|
|
||||
| 小程序开发工程师 | ✅ 正常 | 1. read.js.backup 边界违规(可忽略) 2. app.json 格式建议 |
|
||||
| 管理端开发工程师 | ✅ 正常 | 无 |
|
||||
| 后端开发 | ✅ 正常 | /api/orders 鉴权待确认 |
|
||||
| 产品经理 | - | 需核对需求文档与实现一致性 |
|
||||
| 测试人员 | - | 建议制定合并后回归清单 |
|
||||
|
||||
---
|
||||
|
||||
*报告生成时间:2026-03-09 | 基于 yongxu 分支*
|
||||
103
.cursor/meeting/2026-03-10_Toast通知系统全局落地.md
Normal file
103
.cursor/meeting/2026-03-10_Toast通知系统全局落地.md
Normal file
@@ -0,0 +1,103 @@
|
||||
# 会议纪要 - 2026-03-10 | Toast 通知系统全局落地 & hot_score 数据库迁移
|
||||
|
||||
> 本文件由**助理橙子**在会议结束后自动生成。
|
||||
|
||||
---
|
||||
|
||||
## 基本信息
|
||||
|
||||
- **时间**:2026-03-10
|
||||
- **议题**:1) 文章保存后添加成功提示;2) 数据库缺失 hot_score 字段报错修复;3) 全系统 alert 替换为 toast 组件
|
||||
- **触发方式**:用户反馈 → 逐步扩展到全系统改造
|
||||
- **参与角色**:管理端开发工程师、后端开发、助理橙子
|
||||
|
||||
---
|
||||
|
||||
## 各角色发言
|
||||
|
||||
### 【管理端开发工程师】
|
||||
|
||||
当前管理端所有操作反馈都使用原生 `alert()`,体验差,阻断操作流程,用户必须手动点 OK 才能继续。需要一个统一的 toast 通知系统:非阻塞、自动消失、视觉语义化(绿色=成功、红色=错误、蓝色=信息)。
|
||||
|
||||
考虑到项目没有现成 toast 依赖(sonner 安装失败),选择纯原生 DOM 实现 `src/utils/toast.ts`,无需第三方库,全量兼容现有项目。
|
||||
|
||||
### 【后端开发】
|
||||
|
||||
保存文章时报 `Error 1054 (42S22): Unknown column 'hot_score' in 'field list'`,原因是前端 `ContentPage.tsx` 已在 `handleSaveSection` 中传递 `hotScore` 字段,但后端 `Chapter` model 缺少该字段,且数据库 `chapters` 表也未建列。
|
||||
|
||||
需要两步修复:① ALTER TABLE 新增列;② 同步 model struct。
|
||||
|
||||
### 【助理橙子】
|
||||
|
||||
全系统 18 个文件约 90 处 alert 经 PowerShell 脚本批量替换。替换规则:
|
||||
- 含"失败/错误/请填/不一致/必填"→ `toast.error()`
|
||||
- 含"成功/已保存/已删除/已创建"→ `toast.success()`
|
||||
- 其余→ `toast.info()`
|
||||
|
||||
事后人工复查,修正 5 处语义误判(info 改 error)。
|
||||
|
||||
---
|
||||
|
||||
## 讨论过程
|
||||
|
||||
1. 用户提出"文章保存了要提示保存成功"
|
||||
2. 管理端工程师创建 `src/utils/toast.ts`(纯原生,无依赖),替换 `ContentPage.tsx` 的 alert
|
||||
3. 用户截图报错 `Unknown column 'hot_score'`
|
||||
4. 后端工程师执行 `ALTER TABLE chapters ADD COLUMN hot_score INT NOT NULL DEFAULT 0`,更新 `chapter.go` model
|
||||
5. 用户提出"整个系统的 alert 都可以改为 toast"
|
||||
6. 助理橙子编写 PowerShell 批量替换脚本,处理 18 个文件
|
||||
7. 人工复查 `toast.info()` 调用,将 5 处验证提示修正为 `toast.error()`
|
||||
|
||||
---
|
||||
|
||||
## 会议决议
|
||||
|
||||
1. **Toast 系统统一规范**:管理端所有用户反馈统一使用 `@/utils/toast`,禁止使用 `alert()`
|
||||
2. **toast 类型语义**:
|
||||
- `toast.success()` → 操作成功、保存成功、删除成功
|
||||
- `toast.error()` → 操作失败、表单验证不通过、接口报错
|
||||
- `toast.info()` → 中性提示(无数据、当前状态说明)
|
||||
3. **hot_score 字段**:`chapters` 表已新增,`Chapter` model 已同步,热度分功能可正常保存
|
||||
4. **数据库变更流程**:model 字段与 DB 列必须同步维护,ALTER TABLE 后立即更新 model struct
|
||||
|
||||
---
|
||||
|
||||
## 待办事项
|
||||
|
||||
| 责任角色 | 任务 | 优先级 | 截止建议 |
|
||||
|---------|------|--------|---------|
|
||||
| 管理端开发工程师 | 新增页面/组件时使用 toast 而非 alert(已有规范) | 高 | 持续 |
|
||||
| 后端开发 | hot_score 排名算法接口(若有)按此字段排序 | 低 | 待需求 |
|
||||
|
||||
---
|
||||
|
||||
## 问题与作答区
|
||||
|
||||
| # | 问题 | 责任角色 | 作答 |
|
||||
|---|------|---------|------|
|
||||
| 1 | hot_score 热度分的计算逻辑和更新时机是什么? | 产品经理/后端开发 | (待补充) |
|
||||
| 2 | toast 是否需要支持持久化(不自动消失)的场景? | 管理端开发工程师 | (待补充) |
|
||||
|
||||
---
|
||||
|
||||
## 各角色经验与业务理解更新
|
||||
|
||||
### 后端开发
|
||||
|
||||
- `chapters` 表新增 `hot_score INT NOT NULL DEFAULT 0`,用于热度排名算法
|
||||
- model struct 字段须与 DB 列同步,否则 GORM 写入报 1054 错误
|
||||
|
||||
### 管理端开发工程师
|
||||
|
||||
- 创建 `src/utils/toast.ts`:纯原生 DOM toast,无第三方依赖,支持 success/error/info
|
||||
- 全系统 18 个文件约 90 处 `alert()` 已替换;替换按语义分类,info 类需人工复查
|
||||
- 新规范:管理端禁用 `alert()`,统一使用 `toast.*`
|
||||
|
||||
### 团队共享
|
||||
|
||||
- **Toast 替换脚本方法论**:用 PowerShell 正则 + 语义关键词批量替换,替换后人工复查 `toast.info()` 是否应为 `toast.error()`(验证提示类常被误判)
|
||||
- **DB 变更 SOP**:前端传新字段 → 后端先执行 ALTER TABLE → 再更新 model → 重启服务
|
||||
|
||||
---
|
||||
|
||||
*会议纪要由助理橙子生成 | 各角色经验已同步至 `agent/{角色}/evolution/2026-03-10.md`*
|
||||
108
.cursor/meeting/2026-03-10_小程序新旧版对比与dashboard接口新增.md
Normal file
108
.cursor/meeting/2026-03-10_小程序新旧版对比与dashboard接口新增.md
Normal file
@@ -0,0 +1,108 @@
|
||||
# 会议纪要 - 2026-03-10 | 小程序新旧版对比分析 & dashboard-stats 接口新增
|
||||
|
||||
## 基本信息
|
||||
|
||||
- **时间**:2026-03-10
|
||||
- **议题**:Mycontent-temp vs miniprogram 小程序新旧版功能/样式对比;loadDashboardStats 移植;后端新增聚合接口
|
||||
- **参与角色**:小程序开发工程师、后端工程师、团队(乘风)
|
||||
|
||||
---
|
||||
|
||||
## 讨论过程
|
||||
|
||||
### 一、新旧版小程序对比分析
|
||||
|
||||
用户指出 `Mycontent-temp/miniprogram` 为新版(仅供预览),`miniprogram` 为旧版(线上正确版本)。
|
||||
|
||||
**功能差异**(旧版反而功能更完整):
|
||||
|
||||
| 功能 | 新版 (Mycontent-temp) | 旧版 (miniprogram) |
|
||||
|-----|------|------|
|
||||
| 首页「我的阅读」进度卡 | ❌ 缺失 | ✅ 有(已读/待读/篇章/章节四统计) |
|
||||
| 首页章数徽章/Banner篇章名 | ❌ 缺失 | ✅ 有 |
|
||||
| 最新新增日期/描述 | ❌ 缺失 | ✅ 有 |
|
||||
| 目录页 VIP 权限 | ❌ 无 isVip | ✅ 支持 isVip + isPremium 增值章节 |
|
||||
| VIP 全局状态管理 | ❌ 不写 globalData | ✅ isVip/vipExpireDate 同步到 globalData + Storage |
|
||||
| 阅读页 contentParagraphs fallback | ❌ 无 | ✅ 有降级渲染 |
|
||||
| my.js 阅读统计 | ✅ loadDashboardStats(后端接口)| ❌ 本地缓存占位(随机时间/标题占位) |
|
||||
|
||||
**样式差异**(仅 2 处,全局 app.wxss 完全相同):
|
||||
1. `chapters.wxss`:旧版多 `.tag-vip`(金色增值标签样式)
|
||||
2. `read.wxss`:旧版 `.paragraph .mention` 多 `padding: 0 4rpx`
|
||||
|
||||
**结论**:新版的亮点仅为 `loadDashboardStats` 后端接口调用,其余功能旧版更完整。
|
||||
|
||||
### 二、my.js loadDashboardStats 移植
|
||||
|
||||
将 Mycontent-temp 中的 `loadDashboardStats()` 移植到旧版 `miniprogram/pages/my/my.js`:
|
||||
|
||||
**改动:**
|
||||
1. `initUserStatus()` 改造:去掉本地缓存占位(随机时间、标题 `章节 ${id}`),初始化清零后调 `loadDashboardStats()`
|
||||
2. 新增 `loadDashboardStats()` 方法:调用 `/api/miniprogram/user/dashboard-stats?userId=xxx`,同步 `readSectionIds` 到 globalData 和 Storage,获取真实 `recentChapters`、`readCount`、`totalReadMinutes`、`matchHistory`
|
||||
|
||||
### 三、后端 dashboard-stats 接口新增
|
||||
|
||||
在 `soul-api/internal/handler/user.go` 新增 `UserDashboardStats`,路由注册:`GET /api/miniprogram/user/dashboard-stats`。
|
||||
|
||||
参考 Mycontent-temp 实现并优化了 3 处 bug:
|
||||
1. **去重**:`seenRecent` map 防止同一章节重复出现在「最近阅读」
|
||||
2. **最小 1 分钟**:阅读不足 60 秒时显示 1 分钟而非 0
|
||||
3. **错误状态码**:DB 失败返回 500 而非 200+`success:false`
|
||||
|
||||
编译通过,数据来源:
|
||||
- `readSectionIds`/`readCount` → `reading_progress` 表
|
||||
- `totalReadMinutes` → `duration` ÷ 60(秒转分)
|
||||
- `recentChapters` → `reading_progress` JOIN `chapters`(最近 5 条去重)
|
||||
- `matchHistory` → `match_records` 计数
|
||||
|
||||
### 四、富文本渲染现状分析(未实施,待办)
|
||||
|
||||
两版均为纯文本渲染,TipTap HTML 格式(粗体、标题、列表、引用等)被 `contentParser.js` 全部剥除。
|
||||
|
||||
建议方案:用 `<rich-text>` 组件渲染 HTML,@mention 替换为带颜色 span,通过外层 bindtap + dataset 实现点击。**本次未实施。**
|
||||
|
||||
---
|
||||
|
||||
## 会议决议
|
||||
|
||||
1. ✅ **旧版(miniprogram)为线上正确版本**,新版仅供样式预览,不反向同步功能
|
||||
2. ✅ **loadDashboardStats 已移植**到旧版 my.js,阅读统计改为后端真实数据
|
||||
3. ✅ **后端 dashboard-stats 接口已实现并编译通过**,可直接上线使用
|
||||
4. ⬜ **富文本渲染**待后续迭代:用 `<rich-text>` 替换当前纯文本渲染
|
||||
|
||||
---
|
||||
|
||||
## 待办事项
|
||||
|
||||
| 责任角色 | 任务 | 状态 |
|
||||
|---------|------|------|
|
||||
| 小程序开发工程师 | 富文本渲染升级(rich-text 组件 + mention 处理) | 待实施 |
|
||||
| 后端工程师 | dashboard-stats 接口上线验证 | 待验证 |
|
||||
| 小程序开发工程师 | 首页阅读进度卡确认是否需要(新版没有,旧版有) | 待确认 |
|
||||
|
||||
---
|
||||
|
||||
## 问题与作答区
|
||||
|
||||
| 编号 | 问题 | 作答 |
|
||||
|------|------|------|
|
||||
| Q1 | 内容在 DB 中是纯文本还是 TipTap HTML?富文本渲染是否紧迫? | (待确认) |
|
||||
| Q2 | 首页「我的阅读」进度卡是否保留?(新版已去掉) | (待确认) |
|
||||
| Q3 | dashboard-stats 接口是否需要加缓存(高频调用场景)? | (待确认) |
|
||||
|
||||
---
|
||||
|
||||
## 各角色经验与业务理解更新
|
||||
|
||||
### 小程序开发工程师
|
||||
- `my.js` 阅读统计来源改为后端接口,不再用本地缓存随机占位
|
||||
- 富文本渲染为当前技术债,`contentParser.js` 仅剥 HTML 无格式保留
|
||||
- 新旧版对比方法论:批量 WXSS/JS 文件 diff 精确定位差异
|
||||
|
||||
### 后端工程师
|
||||
- 新增聚合接口时,优先参考已有实现版本,对比后修复 bug(去重、min值、状态码)
|
||||
- `dashboard-stats` 数据模型:reading_progress JOIN chapters + match_records count
|
||||
|
||||
### 团队
|
||||
- Mycontent-temp 是预览分支,功能不及主线,不作为迁移基准
|
||||
- 新旧版并存时,以功能更完整的主线版本为准,按需吸收新版的接口优化
|
||||
82
.cursor/meeting/2026-03-10_文章详情三端功能对齐与开发.md
Normal file
82
.cursor/meeting/2026-03-10_文章详情三端功能对齐与开发.md
Normal file
@@ -0,0 +1,82 @@
|
||||
# 会议纪要 - 2026-03-10 | 文章详情三端功能对齐与开发
|
||||
|
||||
## 基本信息
|
||||
- **时间**:2026-03-10
|
||||
- **议题**:文章详情 @某人/@linkTag/图片 三端功能对齐,发现 Bug,完成开发
|
||||
- **参与角色**:产品经理、后端开发、管理端开发工程师、小程序开发工程师
|
||||
|
||||
---
|
||||
|
||||
## 现状摸底(开发前)
|
||||
|
||||
| 功能 | 后端 | 管理端 | 小程序 | 状态 |
|
||||
|---|---|---|---|---|
|
||||
| @mention 存储格式 | content 字段存 TipTap HTML | RichEditor 插入 `<span data-type="mention">` | contentParser 解析 ✅ | ✅ 正常 |
|
||||
| @mention 点击加好友 | CKBLead 接口 **只用全局 Key** | — | 已传 targetUserId,后端接不住 | ❌ 缺密钥路由 |
|
||||
| #linkTag 存储格式 | content 字段存 `<a href>` | insertLinkTag 插入标准 `<a>` | **未解析,直接被剥离** | ❌ 不可点 |
|
||||
| 图片展示 | 存 `<img src>` | 编辑器支持上传插图 | **未解析,被剥离** | ❌ 不显示 |
|
||||
| loadContent 重复定义 | — | — | 两个同名函数,旧版覆盖新版 | ❌ Bug |
|
||||
|
||||
---
|
||||
|
||||
## 本次完成的开发
|
||||
|
||||
### 后端(soul-api)
|
||||
1. **`model/person.go`** 加 `CkbApiKey` 字段(VARCHAR 100)
|
||||
2. **`handler/db_person.go`** `DBPersonSave` 接收并存储 `ckbApiKey`
|
||||
3. **`model/ckb_lead.go`** 加 `TargetPersonID`、`Source` 字段落库
|
||||
4. **`handler/ckb.go` `CKBLead`** 接收 `targetUserId`/`targetNickname`/`source`,查 `persons.ckb_api_key`,有则用,无则 fallback 全局 Key;成功文案动态化("提交成功,XXX 会尽快联系您")
|
||||
5. **`scripts/add-persons-ckb-api-key.sql`** 手动迁移备用脚本
|
||||
|
||||
### 管理端(soul-admin)
|
||||
1. **`components/RichEditor.tsx`** `PersonItem` 接口加 `ckbApiKey?: string`
|
||||
2. **`pages/content/ContentPage.tsx`**
|
||||
- `loadPersons` 映射 `ckbApiKey`
|
||||
- `newPerson` state 加 `ckbApiKey`
|
||||
- Person 配置卡片加「存客宝密钥」输入框(新建时可填)
|
||||
- Person 列表每行加铅笔编辑按钮,展开内联输入框可直接修改密钥
|
||||
- 密钥状态 badge:有密钥显示绿色 `密钥 ✓`,无则灰色 `用默认密钥`
|
||||
|
||||
### 小程序(miniprogram)
|
||||
1. **`utils/contentParser.js`** 全面重写:
|
||||
- 新增 `parseBlockToSegments`:统一处理 mention / linkTag(span) / linkTag(a) / image 四种内联元素
|
||||
- 新增解码工具函数 `decodeEntities`
|
||||
- 纯图片行独立成段,不与文字混排
|
||||
2. **`pages/read/read.js`**
|
||||
- 删除重复的旧版 `loadContent`(Bug:覆盖新版)
|
||||
- 新版 `loadContent` 补全:成功后写本地缓存,缓存降级时恢复 partTitle/chapterTitle
|
||||
- 新增 `onLinkTagTap`:内页路径直接 `navigateTo`,外链复制到剪贴板并提示
|
||||
- 新增 `onImageTap`:点击图片全屏预览(`wx.previewImage`)
|
||||
3. **`pages/read/read.wxml`** 段落块新增渲染分支:
|
||||
- `linkTag` → `<text class="link-tag" bindtap="onLinkTagTap">#{{label}}</text>`
|
||||
- `image` → `<image class="content-image" bindtap="onImageTap">`
|
||||
4. **`pages/read/read.wxss`** 新增 `.link-tag`(金色 #FFD700)、`.content-image`(宽度铺满)样式
|
||||
|
||||
---
|
||||
|
||||
## 完整加好友链路
|
||||
|
||||
```
|
||||
管理端:Person 配置填写存客宝密钥(ckbApiKey)
|
||||
↓
|
||||
文章写入 content → "@[卡若](karuo)" / "#[标签名](url)" / <img src>
|
||||
↓
|
||||
小程序 contentParser 解析 → segments
|
||||
↓ 点击 @卡若
|
||||
POST /api/miniprogram/ckb/lead
|
||||
{ targetUserId: "karuo", targetNickname: "卡若", source: "article_mention" }
|
||||
↓
|
||||
后端查 persons WHERE person_id='karuo' → 取 ckb_api_key
|
||||
→ 有:用该人专属密钥推存客宝
|
||||
→ 无:fallback 全局 CKB_LEAD_API_KEY
|
||||
↓
|
||||
落库 ckb_lead_records(target_person_id, source)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 待办
|
||||
| 角色 | 任务 |
|
||||
|---|---|
|
||||
| 产品经理 | 确认 #linkTag 外链的交互体验(复制 vs 打开 webview)是否符合预期 |
|
||||
| 测试人员 | 联调:@某人点击 → 存客宝各渠道收线索;#标签点击 → 复制/跳转;图片点击 → 全屏预览 |
|
||||
131
.cursor/meeting/2026-03-10_管理端迁移Mycontent-temp菜单布局讨论.md
Normal file
131
.cursor/meeting/2026-03-10_管理端迁移Mycontent-temp菜单布局讨论.md
Normal file
@@ -0,0 +1,131 @@
|
||||
# 会议纪要 - 2026-03-10 | 管理端迁移 Mycontent-temp 菜单/布局讨论
|
||||
|
||||
> 本文件由**助理橙子**在会议结束后自动生成。
|
||||
|
||||
---
|
||||
|
||||
## 基本信息
|
||||
|
||||
- **时间**:2026-03-10 15:10
|
||||
- **议题**:管理端改为使用 `Mycontent-temp/soul-admin` 这套“新菜单 + 新布局”规范;基于现有 `soul-admin` 功能,明确菜单/布局改造方式与功能适配点
|
||||
- **触发方式**:开个会议研究下
|
||||
- **参与角色**:产品经理、后端开发、管理端开发工程师、小程序开发工程师、测试人员
|
||||
|
||||
---
|
||||
|
||||
## 各角色发言
|
||||
|
||||
### 【产品经理】
|
||||
|
||||
- **目标**:后台的导航与信息架构要“更运营化”:核心入口更少、更聚焦;次要功能不消失但不占主导航。
|
||||
- **新规范**(以 `Mycontent-temp/soul-admin/src/layouts/AdminLayout.tsx` 为准):
|
||||
- 侧栏主菜单平铺 5 个:**数据概览 / 内容管理 / 用户管理 / 找伙伴 / 推广中心**
|
||||
- **系统设置**固定在侧栏下方
|
||||
- 原「更多」折叠的部分要么隐藏入口(从概览/页面内跳转进入),要么并入系统设置 Tab
|
||||
- **验收**:菜单一致;旧功能可达;用户操作路径更短(尤其内容/找伙伴/推广)。
|
||||
|
||||
### 【后端开发】
|
||||
|
||||
- 管理端迁移/重构不改变接口边界:只允许 `/api/admin/*`、`/api/db/*`、`/api/orders`。
|
||||
- 路由与菜单调整不需要新增后端接口;若概览页需要聚合接口(如 `/api/admin/dashboard/overview`)可作为“优化项”,同时保留降级方案(用现有 users/orders 拼)。
|
||||
- 需要注意“路由别名/跳转”不应影响鉴权:`GET /api/admin` 校验逻辑保持不变。
|
||||
|
||||
### 【管理端开发工程师】
|
||||
|
||||
- 新工程的关键差异点:
|
||||
- `AdminLayout`:取消「更多」折叠,主菜单平铺;`/settings` 永远在底部。
|
||||
- 路由:保留历史页面路由,但**不一定在菜单出现**;`/author-settings`、`/admin-users` 变为 `Navigate` 到 `/settings?tab=author|admin`(页面承载搬到 Settings Tab)。
|
||||
- 迁移策略建议:
|
||||
- **以 `Mycontent-temp/soul-admin` 为“样板/目标态”**,把现有 `soul-admin` 中已实现的页面与功能对齐过去(或反向:把目标态布局/菜单 port 回现有项目)。
|
||||
- 保持路由路径尽量不变(避免大量链接/收藏失效),通过菜单“入口收敛”达成产品目标。
|
||||
|
||||
### 【小程序开发工程师】
|
||||
|
||||
- 小程序侧只关心“内容编辑产物能否稳定下发/解析”,管理端菜单迁移不应改变内容接口或字段。
|
||||
- 若管理端页面拆分导致内容结构改动(例如富文本 HTML、mention/tag 的数据结构),必须提前同步小程序解析策略并回归阅读页兼容。
|
||||
|
||||
### 【测试人员】
|
||||
|
||||
- 重点回归点:
|
||||
- **路由可达性**:菜单入口虽减少,但旧页面必须仍能通过路由访问(尤其订单/提现/推广设置/导师等)。
|
||||
- **鉴权**:任意页面刷新后均能正确校验 token 并跳转登录(`GET /api/admin`)。
|
||||
- **信息架构一致**:侧栏 5 项 + 系统设置固定位置;`author/admin` 设置从 `/settings` 的 tab 进入。
|
||||
|
||||
---
|
||||
|
||||
## 讨论过程
|
||||
|
||||
- 对照了两套工程:
|
||||
- 旧 `soul-admin`:主菜单 3 项 + 「更多」折叠(VIP角色/作者详情/管理员/导师/导师预约/推广中心/找伙伴/匹配记录/推广设置)
|
||||
- 新 `Mycontent-temp/soul-admin`:主菜单 5 项平铺(概览/内容/用户/找伙伴/推广),系统设置固定;作者/管理员并入 Settings Tabs;其余页面保持路由但不占侧栏入口
|
||||
- 达成一致:**以新工程布局/菜单为准**,旧功能以“路由可达 + 概览/页面内跳转”方式保留。
|
||||
|
||||
---
|
||||
|
||||
## 会议决议
|
||||
|
||||
1. **目标态以 `Mycontent-temp/soul-admin` 为准**:菜单与布局“照新不照旧”,旧工程如需改造则对齐该实现。
|
||||
2. **侧栏信息架构**:
|
||||
- 主菜单固定 5 项:数据概览、内容管理、用户管理、找伙伴、推广中心
|
||||
- 系统设置固定在侧栏底部
|
||||
- 取消「更多」折叠入口
|
||||
3. **功能入口收敛规则**:
|
||||
- `author-settings`、`admin-users` 不再作为独立菜单项,统一并入 `/settings?tab=author|admin`
|
||||
- 订单/提现/推广设置/VIP角色/导师等页面:**保留路由**,但入口不进入侧栏主菜单(可由概览卡片、页面内按钮或系统设置进入)
|
||||
4. **接口与边界不变**:管理端继续只调用 `/api/admin/*`、`/api/db/*`、`/api/orders`,不得引入 `/api/miniprogram/*`。
|
||||
5. **待确认项**:
|
||||
- 哪些“非主菜单页面”需要在概览页提供快捷入口(订单、提现、推广设置等)的优先级排序。
|
||||
|
||||
---
|
||||
|
||||
## 待办事项
|
||||
|
||||
| 责任角色 | 任务 | 优先级 | 截止建议 |
|
||||
|---------|------|--------|---------|
|
||||
| 管理端开发工程师 | 基于 `Mycontent-temp/soul-admin` 梳理:侧栏主菜单 5 项、Settings Tab 承载 author/admin、其余页面入口方案(概览卡片/页面内跳转) | 高 | 2026-03-11 |
|
||||
| 产品经理 | 给出“非主菜单页面”的入口优先级(概览要露出哪些快捷卡片/按钮) | 中 | 2026-03-11 |
|
||||
| 后端开发 | 确认概览聚合接口 `/api/admin/dashboard/overview` 是否作为正式接口上线;若不上线,确认降级方案字段口径 | 中 | 2026-03-12 |
|
||||
| 测试人员 | 输出菜单/路由/鉴权回归清单(含隐藏路由可达性) | 中 | 2026-03-12 |
|
||||
| 小程序开发工程师 | 关注内容编辑产物格式是否变化;若变更,补充阅读页兼容用例 | 低 | 持续 |
|
||||
|
||||
---
|
||||
|
||||
## 问题与作答区
|
||||
|
||||
| # | 问题 | 责任角色 | 作答 |
|
||||
|---|------|---------|------|
|
||||
| 1 | 非主菜单页面(订单/提现/推广设置/VIP角色/导师等)哪些必须在概览页提供快捷入口? | 产品经理 | (待补充) |
|
||||
| 2 | `Mycontent-temp/soul-admin` 是否作为线上唯一管理端工程(替换旧 `soul-admin`),还是旧工程按新规范改造? | 团队 | (待补充) |
|
||||
|
||||
---
|
||||
|
||||
## 各角色经验与业务理解更新
|
||||
|
||||
### 产品经理
|
||||
|
||||
- 菜单信息架构收敛:主导航只保留运营主链路入口,次要功能“可达但不抢入口”。
|
||||
|
||||
### 后端开发
|
||||
|
||||
- 概览聚合接口可以作为优化项,但必须保留降级(users+orders)确保不阻塞前端迁移。
|
||||
|
||||
### 管理端开发工程师
|
||||
|
||||
- 迁移以 `Mycontent-temp/soul-admin` 为目标态;作者/管理员并入 Settings Tab;取消“更多”折叠。
|
||||
|
||||
### 小程序开发工程师
|
||||
|
||||
- 管理端迁移不应影响小程序接口边界;若内容格式变更需及时同步解析策略并回归。
|
||||
|
||||
### 测试人员
|
||||
|
||||
- 菜单减少不等于功能减少:必须覆盖“隐藏路由可达性 + 鉴权跳转 + 新侧栏一致性”。
|
||||
|
||||
### 团队共享
|
||||
|
||||
- 统一以 `Mycontent-temp/soul-admin` 的 `AdminLayout`/`SettingsPage` 为“新规范基线”,后续所有菜单/布局调整按该基线执行,避免两套后台并行发散。
|
||||
|
||||
---
|
||||
|
||||
*会议纪要由助理橙子生成 | 各角色经验已同步至 `agent/{角色}/evolution/2026-03-10.md`*
|
||||
|
||||
@@ -65,6 +65,10 @@ YYYY-MM-DD_会议主题.md
|
||||
| 2026-03-05 | 分支冲突后功能完整性分析 | 产品、后端、管理端、小程序、测试 | [2026-03-05_分支冲突后功能完整性分析.md](2026-03-05_分支冲突后功能完整性分析.md) |
|
||||
| 2026-03-05 | 超级个体解锁眼睛需求分析 | 产品、小程序 | [2026-03-05_超级个体解锁眼睛需求分析.md](2026-03-05_超级个体解锁眼睛需求分析.md) |
|
||||
| 2026-03-05 | 文章详情 @某人 高亮与一键加好友方案讨论 | 产品、后端、管理端、小程序、测试 | [2026-03-05_文章详情@某人加好友方案讨论.md](2026-03-05_文章详情@某人加好友方案讨论.md) |
|
||||
| 2026-03-09 | devlop 与 yongxu 比较及各角色边界分析 | 产品、后端、管理端、小程序、测试 | [2026-03-09_devlop与yongxu比较及各角色边界分析.md](2026-03-09_devlop与yongxu比较及各角色边界分析.md) |
|
||||
| 2026-03-09 | 合并策略与执行清单 | 产品、后端、管理端、小程序、测试 | [2026-03-09_合并策略与执行清单.md](2026-03-09_合并策略与执行清单.md) |
|
||||
| 2026-03-09 | 管理端与 API 合并分析 | 产品、后端、管理端、小程序、测试 | [2026-03-09_管理端与API合并分析.md](2026-03-09_管理端与API合并分析.md) |
|
||||
| 2026-03-09 | 代码完整性分析与分支合并准备 | 产品、后端、管理端、小程序、测试 | [2026-03-09_代码完整性分析与分支合并准备.md](2026-03-09_代码完整性分析与分支合并准备.md) |
|
||||
| 2026-03-09 | devlop 与 yongxu 分支差异分析 | 产品、后端、管理端、小程序、测试 | [2026-03-09_devlop与yongxu分支差异分析会议.md](2026-03-09_devlop与yongxu分支差异分析会议.md) |
|
||||
| 2026-03-09 | dev 分支需求分析与 yongxu 迁移方案 | 产品、后端、管理端、小程序 | [2026-03-09_dev分支需求分析与yongxu迁移方案.md](2026-03-09_dev分支需求分析与yongxu迁移方案.md) |
|
||||
| 2026-03-10 | 管理端迁移 Mycontent-temp 菜单/布局讨论 | 产品、后端、管理端、小程序、测试 | [2026-03-10_管理端迁移Mycontent-temp菜单布局讨论.md](2026-03-10_管理端迁移Mycontent-temp菜单布局讨论.md) |
|
||||
| 2026-03-10 | 小程序新旧版对比分析与 dashboard-stats 接口新增 | 小程序、后端、团队 | [2026-03-10_小程序新旧版对比与dashboard接口新增.md](2026-03-10_小程序新旧版对比与dashboard接口新增.md) |
|
||||
| 2026-03-10 | 文章详情三端功能对齐与开发(@mention/#linkTag/图片) | 产品、后端、管理端、小程序 | [2026-03-10_文章详情三端功能对齐与开发.md](2026-03-10_文章详情三端功能对齐与开发.md) |
|
||||
| 2026-03-10 | Toast 通知系统全局落地 & hot_score 数据库迁移 | 管理端、后端、团队 | [2026-03-10_Toast通知系统全局落地.md](2026-03-10_Toast通知系统全局落地.md) |
|
||||
|
||||
@@ -57,7 +57,7 @@ description: Soul 创业派对管理端开发规范。在 soul-admin/ 下编辑
|
||||
|
||||
**可选**:导出 CSV、列头排序、批量操作。
|
||||
|
||||
**禁止**:不得用原生 `alert` 做加载失败提示;不得调用 `/api/miniprogram/*`。
|
||||
**禁止**:不得用原生 `alert` 做任何提示(包括成功、失败、验证);不得调用 `/api/miniprogram/*`。
|
||||
|
||||
**检查清单**:分页、搜索防抖、刷新、loading、空状态、错误条、仅 admin/db 路径。详见 `开发文档/列表标准与角色分工.md`。
|
||||
|
||||
@@ -65,7 +65,41 @@ description: Soul 创业派对管理端开发规范。在 soul-admin/ 下编辑
|
||||
|
||||
**口诀**:外边包 div/view,内部 input width 100%。设置 input 的 padding、背景、边框时,用 div 包裹 input;padding 写在容器上,input 仅做文字样式(`width: 100%`)。禁止在 input 自身上设 padding,可避免光标截断、布局异常。React:`<div className="form-input"><input className="form-input-inner" ... /></div>`。
|
||||
|
||||
### 4.2 表单弹窗与「可选择+可手动填写」(吸收 SetVipModal 经验)
|
||||
### 4.2 用户操作反馈:统一使用 Toast(禁止 alert)
|
||||
|
||||
**规则**:管理端所有操作反馈(保存成功、操作失败、表单验证提示等)**必须使用 `@/utils/toast`**,严禁使用原生 `window.alert()`。
|
||||
|
||||
```typescript
|
||||
import toast from '@/utils/toast'
|
||||
|
||||
// ✅ 正确
|
||||
toast.success('已保存')
|
||||
toast.success(`章节「${title}」创建成功`)
|
||||
toast.error('保存失败: ' + (res?.error || '未知错误'))
|
||||
toast.error('请填写章节ID和标题') // 表单验证也用 error
|
||||
toast.info('暂无数据可导出') // 中性说明用 info
|
||||
|
||||
// ❌ 错误
|
||||
alert('已保存')
|
||||
alert('保存失败')
|
||||
```
|
||||
|
||||
**类型语义**:
|
||||
|
||||
| 方法 | 使用场景 | 颜色 |
|
||||
|------|---------|------|
|
||||
| `toast.success()` | 操作成功、保存成功、创建/删除成功 | 绿色 |
|
||||
| `toast.error()` | 接口报错、表单验证不通过、操作失败 | 红色 |
|
||||
| `toast.info()` | 中性提示(无数据、当前状态说明) | 蓝色 |
|
||||
|
||||
**注意**:
|
||||
- `confirm()` 仍可用于删除等破坏性操作的二次确认
|
||||
- toast 自动 3 秒消失,不阻断流程;若需用户强制确认才能继续,使用 `confirm()`
|
||||
- 新增页面/组件时,**不得引入新的 `alert()`**
|
||||
|
||||
> 来源:2026-03-10 全系统 alert → toast 改造(18 文件约 90 处)
|
||||
|
||||
### 4.4 表单弹窗与「可选择+可手动填写」(吸收 SetVipModal 经验)
|
||||
|
||||
当表单需支持「从预设选项选择」或「手动填写自定义值」时:
|
||||
|
||||
|
||||
184
.cursor/skills/lobster-macos-vm/SKILL.md
Normal file
184
.cursor/skills/lobster-macos-vm/SKILL.md
Normal file
@@ -0,0 +1,184 @@
|
||||
---
|
||||
name: lobster-macos-vm
|
||||
description: Automates provisioning and troubleshooting of macOS virtual machines on Windows using WSL2, QEMU/KVM, and the OneClick-macOS-Simple-KVM project. Use when the user mentions 龙虾, macOS 虚拟机, 一键安装苹果系统 on Windows, or needs to re-deploy the Ventura/Sonoma VM.
|
||||
---
|
||||
|
||||
# 龙虾(lobster-macos-vm)
|
||||
|
||||
> 专门负责:在 **Windows 10/11** 上,通过 **WSL2 + Ubuntu + QEMU/KVM + OneClick-macOS-Simple-KVM** 自动拉起一台 macOS 虚拟机(Ventura 为默认),并处理常见网络 / WSL / KVM 问题。
|
||||
|
||||
## 触发场景
|
||||
|
||||
- 用户提到:**“龙虾”**、**“苹果系统虚拟机”**、**“Windows 上跑 macOS”**、**“一键安装 macOS 虚拟机”**
|
||||
- 用户需要:在 Windows 上**演示 / 测试** macOS,而不是 Docker 容器
|
||||
- 用户遇到:WSL 安装失败、`0x80072ee2` 网络错误、`kvm-ok`、`nested` 配置问题、`git clone` TLS 超时、OneClick 项目下载问题
|
||||
|
||||
## 核心能力
|
||||
|
||||
1. **环境检测与前置说明**
|
||||
- 明确告诉用户:**macOS 不能在 Docker 里运行,必须用 WSL2 + 虚拟机**。
|
||||
- 检查:
|
||||
- `wsl -l -v` → 是否有 `Ubuntu-24.04`,是否为 Version 2
|
||||
- `docker --version` 仅作背景信息,不作为必需条件
|
||||
- 若缺失 WSL2:
|
||||
- 指导用户在**管理员 PowerShell**中执行:
|
||||
- `wsl --install`
|
||||
- 重启后执行 `wsl --install -d Ubuntu-24.04 --web-download`(必要时)
|
||||
|
||||
2. **固定部署目录约定**
|
||||
- 所有与 macOS VM 相关的文件,统一放到:
|
||||
- Windows 路径:`C:\Users\{USERNAME}\Mycontent\macos-vm`
|
||||
- WSL 路径:`/mnt/c/Users/{USERNAME}/Mycontent/macos-vm`
|
||||
- 该目录下结构:
|
||||
- `OneClick-macOS-Simple-KVM/`(从 GitHub 下载的项目)
|
||||
- `BaseSystem.dmg` / `BaseSystem.img`
|
||||
- `macOS.qcow2`
|
||||
- 可能还有 `OneClick.zip` 等临时文件
|
||||
|
||||
3. **获取 OneClick 源码(优先 zip,退而求其次 git)**
|
||||
|
||||
优先使用 **codeload.zip**,避免长时间 `git clone` TLS 超时:
|
||||
|
||||
- 在 `macos-vm/` 目录内执行:
|
||||
|
||||
```bash
|
||||
sudo apt-get update -qq
|
||||
sudo apt-get install -y curl unzip
|
||||
rm -rf OneClick-macOS-Simple-KVM OneClick.zip
|
||||
curl -L --retry 8 --retry-delay 2 --connect-timeout 20 --max-time 600 \
|
||||
-o OneClick.zip \
|
||||
https://codeload.github.com/notAperson535/OneClick-macOS-Simple-KVM/zip/refs/heads/master
|
||||
unzip -q OneClick.zip
|
||||
mv OneClick-macOS-Simple-KVM-master OneClick-macOS-Simple-KVM
|
||||
```
|
||||
|
||||
仅当用户网络环境允许且确有需要时,才尝试:
|
||||
|
||||
```bash
|
||||
git clone --depth 1 https://github.com/notAperson535/OneClick-macOS-Simple-KVM.git
|
||||
```
|
||||
|
||||
出现 `GnuTLS recv error (-110)` 或 TLS 断开时,**不要重复 git clone**,改走 zip 方案。
|
||||
|
||||
4. **依赖安装与 KVM 检查**
|
||||
|
||||
在 `Ubuntu-24.04` 内执行:
|
||||
|
||||
```bash
|
||||
sudo apt-get update -qq
|
||||
sudo apt-get install -y qemu-system qemu-utils python3 python3-pip cpu-checker
|
||||
kvm-ok
|
||||
```
|
||||
|
||||
预期输出:
|
||||
|
||||
- `INFO: /dev/kvm exists`
|
||||
- `KVM acceleration can be used`
|
||||
|
||||
若 `nested` 为 `N` 但 `kvm-ok` 正常:
|
||||
|
||||
- 提示用户在 `C:\Users\{USERNAME}\.wslconfig` 中写入:
|
||||
|
||||
```ini
|
||||
[wsl2]
|
||||
nestedVirtualization=true
|
||||
kernel=C:\\Users\\{USERNAME}\\bzImage
|
||||
debugConsole=true
|
||||
pageReporting=true
|
||||
kernelCommandLine=intel_iommu=on iommu=pt kvm.ignore_msrs=1 kvm-intel.nested=1 kvm-intel.ept=1 kvm-intel.emulate_invalid_guest_state=0 kvm-intel.enable_shadow_vmcs=1 kvm-intel.enable_apicv=1
|
||||
```
|
||||
|
||||
并执行 `wsl --shutdown` 之后重试。
|
||||
|
||||
5. **下载 macOS Ventura 恢复镜像并生成 BaseSystem.img**
|
||||
|
||||
在 `OneClick-macOS-Simple-KVM` 目录内:
|
||||
|
||||
```bash
|
||||
cd /mnt/c/Users/{USERNAME}/Mycontent/macos-vm/OneClick-macOS-Simple-KVM
|
||||
chmod +x *.sh *.py
|
||||
[ -f macOS.qcow2 ] || qemu-img create -f qcow2 macOS.qcow2 64G
|
||||
python3 fetch-macOS-v2.py -s ventura
|
||||
[ -f RecoveryImage.dmg ] && mv RecoveryImage.dmg BaseSystem.dmg
|
||||
qemu-img convert BaseSystem.dmg -O raw BaseSystem.img
|
||||
ls -lah BaseSystem.* macOS.qcow2
|
||||
```
|
||||
|
||||
成功标志:
|
||||
|
||||
- `BaseSystem.dmg` ≈ 678 MB
|
||||
- `BaseSystem.img` ≈ 3.0 GB
|
||||
- `macOS.qcow2` 已存在(几十 KB 起步)
|
||||
|
||||
6. **启动虚拟机(headless + VNC: localhost:5900)**
|
||||
|
||||
在 `OneClick-macOS-Simple-KVM` 目录内执行:
|
||||
|
||||
```bash
|
||||
sudo HEADLESS=1 ./basic.sh
|
||||
```
|
||||
|
||||
常见日志:
|
||||
|
||||
- ALSA / audio 报错(没有声卡驱动)→ **可以忽略**
|
||||
- `BdsDxe: loading Boot0001 "UEFI QEMU HARDDISK QM00017"...` → 已经开始从虚拟硬盘启动
|
||||
|
||||
在 Windows 侧确认端口:
|
||||
|
||||
```powershell
|
||||
Get-NetTCPConnection -LocalPort 5900 -State Listen
|
||||
```
|
||||
|
||||
若监听正常,提示用户:
|
||||
|
||||
- 安装 VNC 客户端并连接 `localhost:5900`,进入 macOS 安装向导(磁盘工具抹盘 + 安装系统)。
|
||||
- **常用 VNC 客户端**:RealVNC Viewer、**TightVNC**(用户环境已采用)、TigerVNC 等均可,连接地址均为 `localhost:5900`。
|
||||
|
||||
7. **WSL / 网络故障排查**
|
||||
|
||||
- 若 `wsl` 进程过多、`wsl --shutdown` 卡死:
|
||||
- 在 PowerShell 中执行:
|
||||
|
||||
```powershell
|
||||
Get-Process -Name wsl -ErrorAction SilentlyContinue | Stop-Process -Force
|
||||
wsl --shutdown
|
||||
wsl -l -v
|
||||
```
|
||||
|
||||
- 若 `wsl --install` 报 `0x80072ee2` 或无法访问 `raw.githubusercontent.com`:
|
||||
- 提醒用户这是 **网络 / DNS 问题**,可尝试:
|
||||
- 切换 DNS 到 `8.8.8.8`
|
||||
- 使用合规代理 / VPN
|
||||
- 使用 `--web-download` 方式安装发行版:
|
||||
|
||||
```powershell
|
||||
wsl --install -d Ubuntu-24.04 --web-download
|
||||
```
|
||||
|
||||
8. **Python 一键脚本(lobster_macos_vm.py)协同**
|
||||
|
||||
当仓库中存在 `开发文档/服务器管理/scripts/lobster_macos_vm.py` 时:
|
||||
|
||||
- 优先引导用户在 **PowerShell** 中执行:
|
||||
|
||||
```powershell
|
||||
python C:\Users\{USERNAME}\Mycontent\macos-vm\lobster_macos_vm.py
|
||||
```
|
||||
|
||||
- 该脚本应负责:
|
||||
- 检查 / 安装 WSL2 + Ubuntu-24.04(必要时提示用户重启)
|
||||
- 确保 `C:\Users\{USERNAME}\Mycontent\macos-vm` 目录存在
|
||||
- 在 WSL 内下载 OneClick 源码 zip、解压到固定目录
|
||||
- 安装 QEMU / Python 依赖并检查 `kvm-ok`
|
||||
- 下载 Ventura 恢复镜像并生成 `BaseSystem.img`
|
||||
- 启动 `sudo HEADLESS=1 ./basic.sh`
|
||||
- 输出清晰的步骤说明(包括如何用 VNC 连接)
|
||||
|
||||
## 使用示例
|
||||
|
||||
- 用户说:「**龙虾,帮我在这台 Windows 上一键装一个 macOS 虚拟机,用来演示**」
|
||||
- 按上述步骤依次执行:环境检测 → 创建 `macos-vm` 目录 → 下载 OneClick → 安装依赖 → 下载 Ventura → 生成 `BaseSystem.img` → 启动虚拟机,并提醒用户用 VNC 连 `localhost:5900` 完成图形安装。
|
||||
|
||||
- 用户说:「**龙虾,之前的 macOS 虚拟机挂了,重装一遍**」
|
||||
- 复用相同目录和镜像文件,必要时重新下载 `BaseSystem.dmg`,再启动 `HEADLESS=1 ./basic.sh`。
|
||||
|
||||
Reference in New Issue
Block a user