From aebb53350748e11598dfb2adb31846def5d61cbd Mon Sep 17 00:00:00 2001 From: Alex-larget <33240357+Alex-larget@users.noreply.github.com> Date: Tue, 10 Mar 2026 18:06:10 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=AE=A1=E7=90=86=E7=AB=AF?= =?UTF-8?q?=E8=BF=81=E7=A7=BBMycontent-temp=E7=9A=84=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E4=B8=8E=E5=B8=83=E5=B1=80=E8=A7=84=E8=8C=83=EF=BC=8C=E7=A1=AE?= =?UTF-8?q?=E4=BF=9D=E4=B8=BB=E5=AF=BC=E8=88=AA=E6=94=B6=E6=95=9B=E5=B9=B6?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=9A=90=E8=97=8F=E9=A1=B5=E9=9D=A2=E5=85=A5?= =?UTF-8?q?=E5=8F=A3=E3=80=82=E6=96=B0=E5=A2=9E=E7=9B=B8=E5=85=B3=E4=BC=9A?= =?UTF-8?q?=E8=AE=AE=E8=AE=B0=E5=BD=95=E4=B8=8E=E6=96=87=E6=A1=A3=EF=BC=8C?= =?UTF-8?q?=E5=8F=8D=E6=98=A0=E5=9B=A2=E9=98=9F=E8=AE=A8=E8=AE=BA=E7=9A=84?= =?UTF-8?q?=E6=9C=80=E6=96=B0=E5=86=B3=E7=AD=96=E4=B8=8E=E5=AE=9E=E6=96=BD?= =?UTF-8?q?=E5=BB=BA=E8=AE=AE=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../agent/产品经理/evolution/2026-03-10.md | 13 + .cursor/agent/产品经理/evolution/索引.md | 1 + .../agent/后端工程师/evolution/2026-03-10.md | 36 ++ .cursor/agent/后端工程师/evolution/索引.md | 1 + .cursor/agent/团队/evolution/2026-03-10.md | 41 ++ .cursor/agent/团队/evolution/索引.md | 1 + .../小程序开发工程师/evolution/2026-03-10.md | 46 ++ .../agent/小程序开发工程师/evolution/索引.md | 1 + .cursor/agent/开发助理/经验清单.md | 5 +- .cursor/agent/开发助理/项目索引/产品.md | 3 +- .cursor/agent/开发助理/项目索引/后端.md | 4 +- .cursor/agent/开发助理/项目索引/团队.md | 4 +- .cursor/agent/开发助理/项目索引/小程序.md | 5 +- .cursor/agent/开发助理/项目索引/测试.md | 3 +- .cursor/agent/开发助理/项目索引/管理端.md | 3 +- .../管理端开发工程师/evolution/2026-03-10.md | 18 + .../agent/管理端开发工程师/evolution/索引.md | 1 + .../agent/软件测试/evolution/2026-03-10.md | 12 + .cursor/agent/软件测试/evolution/索引.md | 1 + ...-10_小程序新旧版对比与dashboard接口新增.md | 108 +++++ .../2026-03-10_文章详情三端功能对齐与开发.md | 82 ++++ ...10_管理端迁移Mycontent-temp菜单布局讨论.md | 131 ++++++ .cursor/meeting/README.md | 3 + miniprogram/pages/my/my.js | 56 ++- miniprogram/pages/read/read.js | 135 +++--- miniprogram/pages/read/read.wxml | 4 +- miniprogram/pages/read/read.wxss | 15 + miniprogram/pages/vip/vip.js | 18 +- miniprogram/utils/chapterAccessManager.js | 9 + miniprogram/utils/contentParser.js | 141 ++++-- soul-admin/src/App.tsx | 6 +- soul-admin/src/components/RichEditor.css | 13 +- soul-admin/src/components/RichEditor.tsx | 60 ++- .../components/modules/user/SetVipModal.tsx | 11 +- .../modules/user/UserDetailModal.tsx | 41 +- soul-admin/src/components/ui/dialog.tsx | 2 +- soul-admin/src/layouts/AdminLayout.tsx | 59 +-- .../author-settings/AuthorSettingsPage.tsx | 9 +- .../src/pages/chapters/ChaptersPage.tsx | 7 +- soul-admin/src/pages/content/ContentPage.tsx | 334 ++++++++++---- .../src/pages/dashboard/DashboardPage.tsx | 222 ++++++---- .../pages/distribution/DistributionPage.tsx | 11 +- .../find-partner/tabs/CKBConfigPanel.tsx | 11 +- .../pages/find-partner/tabs/MatchPoolTab.tsx | 11 +- .../find-partner/tabs/ResourceDockingTab.tsx | 9 +- soul-admin/src/pages/match/MatchPage.tsx | 11 +- soul-admin/src/pages/mentors/MentorsPage.tsx | 17 +- soul-admin/src/pages/orders/OrdersPage.tsx | 3 +- soul-admin/src/pages/payment/PaymentPage.tsx | 5 +- soul-admin/src/pages/qrcodes/QRCodesPage.tsx | 11 +- .../ReferralSettingsPage.tsx | 7 +- soul-admin/src/pages/site/SitePage.tsx | 5 +- soul-admin/src/pages/users/UsersPage.tsx | 42 +- .../src/pages/vip-roles/VipRolesPage.tsx | 13 +- .../src/pages/withdrawals/WithdrawalsPage.tsx | 9 +- soul-admin/src/utils/toast.ts | 93 ++++ soul-api/.env | 3 + soul-api/.env.development | 7 + soul-api/internal/database/database.go | 31 +- soul-api/internal/handler/admin_dashboard.go | 194 ++++++++ soul-api/internal/handler/book.go | 94 +++- soul-api/internal/handler/ckb.go | 80 ++-- soul-api/internal/handler/db.go | 16 + soul-api/internal/handler/db_book.go | 123 +++++- soul-api/internal/handler/db_person.go | 10 +- soul-api/internal/handler/miniprogram.go | 140 +++++- soul-api/internal/handler/referral.go | 11 + .../internal/handler/referral_commission.go | 1 + soul-api/internal/handler/user.go | 88 ++++ soul-api/internal/middleware/cron_auth.go | 30 ++ soul-api/internal/model/chapter.go | 1 + soul-api/internal/model/ckb_lead.go | 18 +- soul-api/internal/model/person.go | 13 +- soul-api/internal/router/router.go | 29 +- soul-api/scripts/add-hot-score.sql | 2 + soul-api/scripts/add-persons-ckb-api-key.sql | 6 + 开发文档/10、项目管理/运营与变更.md | 41 ++ 开发文档/1、需求/需求汇总.md | 2 + .../soul-admin与Mycontent-temp内容页对比.md | 53 +++ 开发文档/README.md | 5 + 开发文档/api_v1.md | 413 ------------------ 开发文档/小程序功能与管理端配置补齐分析.md | 168 ------- 82 files changed, 2376 insertions(+), 1126 deletions(-) create mode 100644 .cursor/agent/产品经理/evolution/2026-03-10.md create mode 100644 .cursor/agent/后端工程师/evolution/2026-03-10.md create mode 100644 .cursor/agent/小程序开发工程师/evolution/2026-03-10.md create mode 100644 .cursor/agent/管理端开发工程师/evolution/2026-03-10.md create mode 100644 .cursor/agent/软件测试/evolution/2026-03-10.md create mode 100644 .cursor/meeting/2026-03-10_小程序新旧版对比与dashboard接口新增.md create mode 100644 .cursor/meeting/2026-03-10_文章详情三端功能对齐与开发.md create mode 100644 .cursor/meeting/2026-03-10_管理端迁移Mycontent-temp菜单布局讨论.md create mode 100644 soul-admin/src/utils/toast.ts create mode 100644 soul-api/internal/handler/admin_dashboard.go create mode 100644 soul-api/internal/middleware/cron_auth.go create mode 100644 soul-api/scripts/add-hot-score.sql create mode 100644 soul-api/scripts/add-persons-ckb-api-key.sql create mode 100644 开发文档/6、后端/soul-admin与Mycontent-temp内容页对比.md delete mode 100644 开发文档/api_v1.md delete mode 100644 开发文档/小程序功能与管理端配置补齐分析.md diff --git a/.cursor/agent/产品经理/evolution/2026-03-10.md b/.cursor/agent/产品经理/evolution/2026-03-10.md new file mode 100644 index 00000000..e5f77d22 --- /dev/null +++ b/.cursor/agent/产品经理/evolution/2026-03-10.md @@ -0,0 +1,13 @@ +# 产品经理 经验记录 - 2026-03-10 + +## 管理端迁移 Mycontent-temp:信息架构与验收口径 + +- **主导航收敛**:侧栏只保留运营主链路 5 项(概览/内容/用户/找伙伴/推广),系统设置固定在底部;其余能力不删除但不占主导航入口。 +- **入口承载策略**:非主菜单页面(订单/提现/推广设置/VIP角色/导师等)通过“概览卡片/页面内按钮/系统设置 Tab”进入,确保可达且路径更短。 +- **验收标准**: + - 菜单与布局一致(新规范) + - 隐藏页面路由仍可访问(功能不丢) + - author/admin 设置统一在 `/settings?tab=...` 承载,旧路径可兼容跳转 + +> 详见会议纪要:`.cursor/meeting/2026-03-10_管理端迁移Mycontent-temp菜单布局讨论.md` + diff --git a/.cursor/agent/产品经理/evolution/索引.md b/.cursor/agent/产品经理/evolution/索引.md index fbdc760a..5e876b42 100644 --- a/.cursor/agent/产品经理/evolution/索引.md +++ b/.cursor/agent/产品经理/evolution/索引.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) | diff --git a/.cursor/agent/后端工程师/evolution/2026-03-10.md b/.cursor/agent/后端工程师/evolution/2026-03-10.md new file mode 100644 index 00000000..3e1bff57 --- /dev/null +++ b/.cursor/agent/后端工程师/evolution/2026-03-10.md @@ -0,0 +1,36 @@ +# 后端工程师 经验记录 - 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` + diff --git a/.cursor/agent/后端工程师/evolution/索引.md b/.cursor/agent/后端工程师/evolution/索引.md index a3f19dbe..4d319129 100644 --- a/.cursor/agent/后端工程师/evolution/索引.md +++ b/.cursor/agent/后端工程师/evolution/索引.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) | diff --git a/.cursor/agent/团队/evolution/2026-03-10.md b/.cursor/agent/团队/evolution/2026-03-10.md index 37e82f27..d8f773c2 100644 --- a/.cursor/agent/团队/evolution/2026-03-10.md +++ b/.cursor/agent/团队/evolution/2026-03-10.md @@ -75,3 +75,44 @@ - 后端 / 运维:需要在本地或服务器上快速拉起 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` + diff --git a/.cursor/agent/团队/evolution/索引.md b/.cursor/agent/团队/evolution/索引.md index 72a8adf9..47f4dc7a 100644 --- a/.cursor/agent/团队/evolution/索引.md +++ b/.cursor/agent/团队/evolution/索引.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) | diff --git a/.cursor/agent/小程序开发工程师/evolution/2026-03-10.md b/.cursor/agent/小程序开发工程师/evolution/2026-03-10.md new file mode 100644 index 00000000..10066f86 --- /dev/null +++ b/.cursor/agent/小程序开发工程师/evolution/2026-03-10.md @@ -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 剥成纯文本,``/`

`/`