merge(gitea/devlop): 同步远端;冲突保留 GitHub 侧小程序与核心 API/后台页
Made-with: Cursor
This commit is contained in:
@@ -651,10 +651,11 @@
|
||||
gap: 10rpx;
|
||||
}
|
||||
.super-avatar {
|
||||
position: relative;
|
||||
width: 108rpx;
|
||||
height: 108rpx;
|
||||
border-radius: 50%;
|
||||
overflow: hidden;
|
||||
overflow: visible;
|
||||
background: rgba(0,206,209,0.1);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
@@ -665,10 +666,33 @@
|
||||
border: 3rpx solid #FFD700;
|
||||
box-shadow: 0 0 12rpx rgba(255,215,0,0.3);
|
||||
}
|
||||
.super-avatar-pinned {
|
||||
border: 3rpx solid #38bdac;
|
||||
box-shadow: 0 0 16rpx rgba(56, 189, 172, 0.4);
|
||||
}
|
||||
.super-item-pinned .super-name {
|
||||
color: #38bdac;
|
||||
}
|
||||
.pinned-badge {
|
||||
position: absolute;
|
||||
bottom: -4rpx;
|
||||
right: -4rpx;
|
||||
width: 28rpx;
|
||||
height: 28rpx;
|
||||
background: #38bdac;
|
||||
border-radius: 50%;
|
||||
font-size: 18rpx;
|
||||
color: #fff;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
line-height: 1;
|
||||
}
|
||||
.super-avatar-img {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
border-radius: 50%;
|
||||
}
|
||||
.super-avatar-text {
|
||||
font-size: 40rpx;
|
||||
|
||||
59
project.config.json
Normal file
59
project.config.json
Normal file
@@ -0,0 +1,59 @@
|
||||
{
|
||||
"compileType": "miniprogram",
|
||||
"miniprogramRoot": "miniprogram/",
|
||||
"description": "Soul创业派对 - 来自派对房的真实商业故事",
|
||||
"appid": "wxb8bbb2b10dec74aa",
|
||||
"setting": {
|
||||
"urlCheck": false,
|
||||
"es6": true,
|
||||
"enhance": true,
|
||||
"postcss": true,
|
||||
"preloadBackgroundData": false,
|
||||
"minified": true,
|
||||
"newFeature": true,
|
||||
"coverView": true,
|
||||
"nodeModules": false,
|
||||
"autoAudits": false,
|
||||
"showShadowRootInWxmlPanel": true,
|
||||
"scopeDataCheck": false,
|
||||
"uglifyFileName": false,
|
||||
"checkInvalidKey": true,
|
||||
"checkSiteMap": true,
|
||||
"uploadWithSourceMap": true,
|
||||
"compileHotReLoad": true,
|
||||
"lazyloadPlaceholderEnable": false,
|
||||
"useMultiFrameRuntime": true,
|
||||
"babelSetting": {
|
||||
"ignore": [],
|
||||
"disablePlugins": [],
|
||||
"outputPath": ""
|
||||
},
|
||||
"enableEngineNative": false,
|
||||
"useIsolateContext": true,
|
||||
"userConfirmedBundleSwitch": false,
|
||||
"packNpmManually": false,
|
||||
"packNpmRelationList": [],
|
||||
"minifyWXSS": true,
|
||||
"disableUseStrict": false,
|
||||
"minifyWXML": true,
|
||||
"showES6CompileOption": false,
|
||||
"useCompilerPlugins": false,
|
||||
"ignoreUploadUnusedFiles": true,
|
||||
"compileWorklet": false,
|
||||
"localPlugins": false,
|
||||
"condition": false,
|
||||
"swc": false,
|
||||
"disableSWC": true
|
||||
},
|
||||
"condition": {},
|
||||
"editorSetting": {
|
||||
"tabIndent": "insertSpaces",
|
||||
"tabSize": 2
|
||||
},
|
||||
"simulatorPluginLibVersion": {},
|
||||
"packOptions": {
|
||||
"ignore": [],
|
||||
"include": []
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@ export interface PersonItem {
|
||||
startTime?: string
|
||||
endTime?: string
|
||||
deviceGroups?: string
|
||||
isPinned?: boolean
|
||||
}
|
||||
|
||||
export interface LinkTagItem {
|
||||
|
||||
@@ -388,8 +388,8 @@ export function ChapterTree({
|
||||
)
|
||||
}
|
||||
|
||||
// 2026每日派对干货:独立篇章,带六点拖拽、可拖可放(以 part_id 识别,标题来自 DB)
|
||||
const is2026Daily = part.id === 'part-2026-daily'
|
||||
// 2026每日派对干货:独立篇章,带六点拖拽、可拖可放
|
||||
const is2026Daily = part.title === '2026每日派对干货' || part.title.includes('2026每日派对干货')
|
||||
if (is2026Daily) {
|
||||
const partDragOver = isDragOver('part', part.id)
|
||||
return (
|
||||
|
||||
@@ -40,6 +40,8 @@ type Person struct {
|
||||
// PersonSource 来源:空=后台手工添加;vip_sync=超级个体自动同步(共用统一计划)
|
||||
PersonSource string `gorm:"column:person_source;size:32;default:''" json:"personSource"`
|
||||
|
||||
IsPinned bool `gorm:"column:is_pinned;default:false" json:"isPinned"` // 置顶到小程序首页
|
||||
|
||||
CreatedAt time.Time `gorm:"column:created_at" json:"createdAt"`
|
||||
UpdatedAt time.Time `gorm:"column:updated_at" json:"updatedAt"`
|
||||
}
|
||||
|
||||
@@ -117,6 +117,8 @@ func Setup(cfg *config.Config) *gin.Engine {
|
||||
admin.GET("/super-individual/stats", handler.AdminSuperIndividualStats)
|
||||
admin.GET("/user/track", handler.UserTrackGet)
|
||||
admin.GET("/track/stats", handler.AdminTrackStats)
|
||||
admin.GET("/dashboard/leads", handler.AdminDashboardLeads)
|
||||
admin.GET("/ckb/plan-check", handler.AdminCKBPlanCheck)
|
||||
}
|
||||
|
||||
// ----- 鉴权 -----
|
||||
@@ -210,6 +212,8 @@ func Setup(cfg *config.Config) *gin.Engine {
|
||||
db.GET("/link-tags", handler.DBLinkTagList)
|
||||
db.POST("/link-tags", handler.DBLinkTagSave)
|
||||
db.DELETE("/link-tags", handler.DBLinkTagDelete)
|
||||
db.PUT("/persons/pin", handler.DBPersonPin)
|
||||
db.GET("/persons/pinned", handler.DBPersonPinnedList)
|
||||
db.GET("/ckb-leads", handler.DBCKBLeadList)
|
||||
db.GET("/ckb-person-leads", handler.DBCKBPersonLeads)
|
||||
db.GET("/ckb-plan-stats", handler.CKBPlanStats)
|
||||
@@ -364,6 +368,7 @@ func Setup(cfg *config.Config) *gin.Engine {
|
||||
miniprogram.GET("/mentors/:id", handler.MiniprogramMentorsDetail)
|
||||
miniprogram.POST("/mentors/:id/book", handler.MiniprogramMentorsBook)
|
||||
miniprogram.GET("/about/author", handler.MiniprogramAboutAuthor)
|
||||
miniprogram.GET("/persons/pinned", handler.DBPersonPinnedList)
|
||||
// 埋点
|
||||
miniprogram.POST("/track", handler.MiniprogramTrackPost)
|
||||
// 规则引擎(用户旅程引导)
|
||||
|
||||
BIN
soul-api/server
BIN
soul-api/server
Binary file not shown.
@@ -1,236 +0,0 @@
|
||||
# Soul 创业派对 · 全站测试报告
|
||||
|
||||
**测试日期**:2026-03-15
|
||||
**测试范围**:管理端前端(20+ 页面) + 后端 API(35 端点) + 小程序代码审查(25 页面) + 数据库(25 张表)
|
||||
**测试原则**:只检测不修改,不做任何部署
|
||||
|
||||
---
|
||||
|
||||
## 一、测试覆盖总览
|
||||
|
||||
| 测试维度 | 覆盖量 | 通过 | 问题 |
|
||||
|---------|-------|------|------|
|
||||
| 管理端页面(浏览器截图) | 20+ 页面/子Tab | 18 | 2 |
|
||||
| API 端点测试 | 35 端点 | 29 | 6 |
|
||||
| 小程序代码审查 | 25 页面 + 8 工具文件 | 核心流程完整 | 32 |
|
||||
| 数据库检查 | 25 张表 | 数据一致 | 2 |
|
||||
| **合计** | **全站** | — | **42 个问题** |
|
||||
|
||||
---
|
||||
|
||||
## 二、问题清单(按严重程度排序)
|
||||
|
||||
### 🔴 严重(Critical)— 必须修复 · 共 11 个
|
||||
|
||||
| # | 模块 | 问题 | 文件/位置 | 解决方案 |
|
||||
|---|------|------|----------|---------|
|
||||
| C1 | API/安全 | **OSS accessKeySecret 明文返回前端** | `db.go` AdminSettingsGet | 后端返回 ossConfig 时脱敏处理,accessKeySecret 返回 `****` |
|
||||
| C2 | 小程序 | **payment.js API 路径全部错误**:使用不存在的 `app.globalData.apiBase` 和 `/payment/create` 等非标准路径 | `utils/payment.js` 全文件 | 若已不使用应删除;若要用需改为 `baseUrl` + `/api/miniprogram/*` |
|
||||
| C3 | 小程序 | **payment.js 调用不存在的 `app.getUserInfo()`** | `utils/payment.js:188,201` | 改为 `app.globalData.userInfo` |
|
||||
| C4 | 小程序 | **找伙伴跳转路径错误**:`pages/catalog/catalog` 不存在 | `pages/match/match.js:311` | 改为 `pages/chapters/chapters` |
|
||||
| C5 | 小程序 | **`wx.getUserProfile()` 已废弃**(2022年后不可用) | `pages/settings/settings.js:251` | 改用 `<button open-type="chooseAvatar">` |
|
||||
| C6 | 小程序 | **ES Module 语法与 CommonJS 混用**:`export default` 在小程序默认环境不支持 | `utils/chapterAccessManager.js:209` | 统一为 `module.exports` 或确认构建工具可转译 |
|
||||
| C7 | 小程序 | **同上 ES Module 问题** | `utils/readingTracker.js:249` | 同 C6 |
|
||||
| C8 | 小程序 | **import/require 混用** | `pages/read/read.js:16-17` | 统一模块导入方式 |
|
||||
| C9 | 小程序 | **import 语法问题** | `pages/vip/vip.js:1` | 同 C8 |
|
||||
| C10 | 管理端 | **首次访问无登录验证**:直接打开 / 跳转到仪表盘无需登录 | 前端路由守卫 | 添加路由守卫:未登录强制跳转 `/login` |
|
||||
| C11 | 数据库 | **stats API 免费章节数不一致**:stats 返回 2,all-chapters 实际 3 个 `isFree=true` | `book.go` BookStats | 核查 `is_free` 字段查询条件 |
|
||||
|
||||
### 🟠 高(High)— 优先修复 · 共 13 个
|
||||
|
||||
| # | 模块 | 问题 | 文件/位置 | 解决方案 |
|
||||
|---|------|------|----------|---------|
|
||||
| H1 | 小程序 | **废弃 Canvas API**:`wx.createCanvasContext()` 将被移除 | `read.js:1377` | 迁移到 Canvas 2D 接口 |
|
||||
| H2 | 小程序 | **baseUrl 硬编码生产环境 URL** | `app.js:11` | 通过环境变量或配置文件管理 |
|
||||
| H3 | 小程序 | **appId/mchId 硬编码** | `app.js:17,22` | 移至配置文件或从 API 获取 |
|
||||
| H4 | 小程序 | **匹配 API 失败时伪装成功**:显示 `joinSuccess: true` | `match.js:656-662` | 移除伪装逻辑,正确显示错误 |
|
||||
| H5 | 小程序 | **生产环境残留测试模式购买逻辑** | `match.js:741-753` | 删除测试模式代码 |
|
||||
| H6 | 小程序 | **客服微信号硬编码** | `read.js:1158,1207` | 从系统配置 API 获取 |
|
||||
| H7 | 小程序 | **goToMatch() 方法重复定义**,后者覆盖前者 | `my.js:784,801` | 删除重复定义 |
|
||||
| H8 | 小程序 | **payment.js 未被任何页面引用**,支付逻辑在 read.js 直接实现 | `utils/payment.js` | 删除无用文件或统一支付入口 |
|
||||
| H9 | 管理端 | **仪表盘新注册用户列表用户名显示为"-"** | 仪表盘页面 | 改为显示昵称或手机号(脱敏) |
|
||||
| H10 | 管理端 | **分类标签点击统计无数据**,提示"暂无点击数据" | 仪表盘页面 | 确认埋点数据源或改进空状态提示 |
|
||||
| H11 | API | **admin/chapters 分页参数被忽略**:无论 pageSize 多大,返回结构不含分页数据 | `db_book.go` | 添加 page/pageSize 参数支持 |
|
||||
| H12 | API | **admin/users 实际返回管理员列表**而非普通用户 | `db.go` | 确认是否需要独立的普通用户管理 API |
|
||||
| H13 | 数据库 | **persons 表数据为空**(0条记录),但管理端"链接人与事"有展示 | 数据同步 | 检查 persons 数据来源和同步逻辑 |
|
||||
|
||||
### 🟡 中(Medium)— 建议修复 · 共 12 个
|
||||
|
||||
| # | 模块 | 问题 | 文件/位置 | 解决方案 |
|
||||
|---|------|------|----------|---------|
|
||||
| M1 | 小程序 | `totalSections: 62` 硬编码 | `app.js:32` | 从 API 获取 |
|
||||
| M2 | 小程序 | `appendixList` 硬编码 3 个附录条目 | `chapters.js:31-35` | 从 API 获取 |
|
||||
| M3 | 小程序 | `getSectionTitle()` 硬编码部分章节 ID→标题映射 | `read.js:351-366` | 从 API 获取 |
|
||||
| M4 | 小程序 | 热门搜索关键词硬编码 | `search.js:17` | 从配置 API 获取 |
|
||||
| M5 | 小程序 | `startDate = new Date('2025-01-01')` 动态价格逻辑硬编码 | `payment.js:163` | 若文件保留,改为配置驱动 |
|
||||
| M6 | 小程序 | 大量 `console.log` 调试日志未清理 | `referral.js` 约50+行 | 生产环境前清理 |
|
||||
| M7 | 小程序 | `generateMockMatch()` 模拟数据残留 | `match.js:470-496` | 删除模拟数据 |
|
||||
| M8 | 小程序 | `data` 对象末尾悬空逗号 | `referral.js:68` | 修复语法 |
|
||||
| M9 | 小程序 | Token 明文存储 `wx.setStorageSync` | `app.js:515` | 小程序环境可接受,建议加密存储 |
|
||||
| M10 | 管理端 | 订单内容文字过长被截断,无 hover 提示 | 仪表盘最近订单 | 添加 tooltip 或点击查看详情 |
|
||||
| M11 | 管理端 | 数据刷新按钮文字过长 | 仪表盘 | 简化为图标+tooltip |
|
||||
| M12 | API | 热度 Top20 中有 8/20 条零点击数 | `/api/book/hot` | 检查 reading_progress 数据是否完整 |
|
||||
|
||||
### 🟢 低(Low)— 可优化 · 共 6 个
|
||||
|
||||
| # | 模块 | 问题 | 文件/位置 |
|
||||
|---|------|------|----------|
|
||||
| L1 | 小程序 | 文件顶部 console.log 调试输出 | `index.js:7` |
|
||||
| L2 | 小程序 | `mockLogin()` 已废弃但未删除 | `app.js:600-603` |
|
||||
| L3 | 小程序 | `loadLatestChapters()` 重复请求 `all-chapters` | `index.js:494` |
|
||||
| L4 | 小程序 | `catch {}` 空 catch 块无日志 | `ruleEngine.js:45,53` |
|
||||
| L5 | 管理端 | 错误提示在输入正确凭据后仍短暂可见 | 登录页 |
|
||||
| L6 | API | `version` 返回 `0.0.0`,建议使用实际版本号 | `/health` |
|
||||
|
||||
---
|
||||
|
||||
## 三、核心功能流程评估
|
||||
|
||||
| 流程 | 状态 | 评估 |
|
||||
|------|------|------|
|
||||
| 登录/注册 | ✅ 完整 | wx.login + 手机号双通道,协议勾选,单页模式兜底 |
|
||||
| 付费购买章节 | ✅ 完整 | 权限状态机→预支付→wx.requestPayment→同步→解锁 |
|
||||
| VIP 购买 | ✅ 完整 | VIP 状态查询→支付→同步权益→刷新全局 |
|
||||
| 钱包充值 | ✅ 完整 | 选金额→创建订单→支付→确认→刷新余额 |
|
||||
| 分销/推广 | ✅ 完整 | 邀请码→分享带ref→绑定→收益→提现→微信零钱 |
|
||||
| 找伙伴/匹配 | ⚠️ 有缺陷 | 路径错误(C4)、失败伪装成功(H4)、测试模式残留(H5) |
|
||||
| 搜索 | ✅ 完整 | 关键词搜索→API 查询→结果展示→跳转阅读 |
|
||||
| 阅读章节 | ✅ 完整 | 多入口(scene/mid/id)→权限判断→内容解析→进度追踪 |
|
||||
|
||||
---
|
||||
|
||||
## 四、管理端页面测试详情
|
||||
|
||||
### 已测试页面清单(全部截图)
|
||||
|
||||
| 模块 | 子页面/Tab | 状态 | 关键数据 |
|
||||
|------|-----------|------|---------|
|
||||
| 登录 | 登录页 | ✅ | 错误凭据有提示,正确登录跳转仪表盘 |
|
||||
| 仪表盘 | 数据概览 | ✅ | 149用户, ¥2007.75收入, 29订单, 10.7%转化率 |
|
||||
| 内容管理 | 章节管理 | ✅ | 8篇 · 90节内容 |
|
||||
| 内容管理 | 内容排行榜 | ✅ | 90节排行,预览比例20% |
|
||||
| 内容管理 | 内容搜索 | ✅ | 搜索框正常 |
|
||||
| 内容管理 | 链接人与事 | ✅ | AI列表,token/位置/类型展示 |
|
||||
| 内容管理 | 链接标签 | ✅ | 3个标签(卡若创业派对/碎片时间/神仙团队) |
|
||||
| 用户管理 | 用户列表 | ✅ | 149位用户,筛选/搜索/分页正常 |
|
||||
| 用户管理 | 用户旅程 | ✅ | 8阶段漏斗(149→4→12→10→14→0→0→0) |
|
||||
| 找伙伴 | 数据统计 | ✅ | 总匹配63, 17用户, AI线索51 |
|
||||
| 找伙伴 | 匹配记录 | ✅ | 63条记录 |
|
||||
| 找伙伴 | 匹配池设置 | ✅ | VIP 6人, 完善资料 7人, 全部 13人 |
|
||||
| 找伙伴 | 资源对接 | ✅ | 0条记录 |
|
||||
| 找伙伴 | 导师管理 | ✅ | 1位导师(卡若),3种价格方案 |
|
||||
| 找伙伴 | 团队招募 | ✅ | 4条记录 |
|
||||
| 推广中心 | 数据概览 | ✅ | 累计: 1025点击, 41绑定, 2转化, ¥2007.75 |
|
||||
| 推广中心 | 订单管理 | ✅ | 444条订单记录 |
|
||||
| 推广中心 | 绑定管理 | ✅ | 41条绑定关系 |
|
||||
| 推广中心 | 提现审核 | ✅ | 3条记录(含已拒绝/已完成) |
|
||||
| 推广中心 | 推广设置 | ✅ | 好友收益/推广者收益/提现规则 |
|
||||
| 系统设置 | 系统设置 | ✅ | 功能开关/价格/小程序/OSS均有配置 |
|
||||
| 系统设置 | 作者详情 | ✅ | 基本信息/统计数据/亮点标签 |
|
||||
| 系统设置 | 管理员 | ✅ | 1个管理员(admin/卡若/超级管理员) |
|
||||
| 系统设置 | API文档 | ✅ | 完整的接口文档 |
|
||||
|
||||
---
|
||||
|
||||
## 五、API 端点测试详情
|
||||
|
||||
### 全部 35 端点测试结果
|
||||
|
||||
| 端点 | 状态码 | 数据 | 问题 |
|
||||
|------|-------|------|------|
|
||||
| GET /health | 200 | ok, version 0.0.0 | L6: version 未设置 |
|
||||
| GET /api/config | 200 | 配置完整 | ✅ |
|
||||
| GET /api/book/all-chapters | 200 | 90 条 | ✅ |
|
||||
| GET /api/book/hot | 200 | 20 条 | M12: 8条零点击 |
|
||||
| GET /api/book/recommended | 200 | 数据完整 | ✅ |
|
||||
| GET /api/book/search?q=创业 | 200 | 20 条 | ✅ |
|
||||
| GET /api/book/search?q= | 200 | 0 条 | ✅ 空搜索正确处理 |
|
||||
| GET /api/book/search?q=xxx | 200 | 0 条 | ✅ 无结果正确处理 |
|
||||
| GET /api/book/stats | 200 | 90章/2免费/209624字/149用户 | C11: 免费数量可能不准 |
|
||||
| GET /api/miniprogram/config | 200 | 配置完整 | ✅ |
|
||||
| GET /api/miniprogram/book/hot | 200 | 数据完整 | ✅ |
|
||||
| GET /api/miniprogram/book/stats | 200 | 同 stats | ✅ |
|
||||
| GET /api/miniprogram/mentors | 200 | 1 条 | ✅ |
|
||||
| GET /api/miniprogram/vip/members | 200 | 数据完整 | ✅ |
|
||||
| GET /api/admin/dashboard/stats | 200 | 149用户/30付费/¥2008.75 | ✅ |
|
||||
| GET /api/admin/chapters | 200 | 章节数据 | H11: 无分页支持 |
|
||||
| GET /api/admin/users | 200 | 1条(管理员) | H12: 返回管理员非用户 |
|
||||
| GET /api/admin/orders | 200 | 448笔/¥2008.75 | ✅ |
|
||||
| GET /api/admin/track/stats | 200 | 追踪数据 | ✅ |
|
||||
| GET /api/admin/settings | 200 | 完整设置 | C1: OSS密钥明文 |
|
||||
| GET /api/admin/referral-settings | 200 | 推广配置 | ✅ |
|
||||
| GET /api/admin/author-settings | 200 | 作者配置 | ✅ |
|
||||
| GET /api/db/book?action=list | 200 | 数据 | ✅ |
|
||||
| GET /api/db/ckb-leads | 200 | 0 条 | ✅ |
|
||||
| GET /api/db/ckb-plan-stats | 200 | 数据 | ✅ |
|
||||
| GET /api/db/vip-roles | 200 | 10 条 | ✅ |
|
||||
| GET /api/db/mentors | 200 | 1 条 | ✅ |
|
||||
| GET /api/db/persons | 200 | 0 条 | H13: 空数据 |
|
||||
| 无Token→admin/settings | 401 | 拒绝 | ✅ 鉴权正常 |
|
||||
| 错误Token→admin/settings | 401 | 拒绝 | ✅ 鉴权正常 |
|
||||
| POST /api/admin 空body | 错误 | 有提示 | ✅ |
|
||||
| search 无 q 参数 | 200 | 空结果 | ✅ |
|
||||
| upload 非图片 | 400 | 拒绝 | ✅ |
|
||||
| upload 图片(OSS) | 200 | OSS签名URL | ✅ |
|
||||
|
||||
---
|
||||
|
||||
## 六、数据库检查结果
|
||||
|
||||
### 6.1 表结构(25 张表)
|
||||
|
||||
users, chapters, orders, persons, mentors, mentor_consultations, vip_roles, link_tags, user_balances, balance_transactions, gift_unlocks, system_config, admin_users, match_records, referral_bindings, referral_visits, user_tracks, user_rules, reading_progress, withdrawals, wechat_callback_logs, ckb_submit_records, ckb_lead_records, user_addresses, author_config
|
||||
|
||||
### 6.2 数据量
|
||||
|
||||
| 表 | 数据量 | 说明 |
|
||||
|---|-------|------|
|
||||
| chapters | 90 | 8篇, 0无标题, 0零字数 |
|
||||
| users | 149 | dashboard 显示 |
|
||||
| orders | 448 | 含已支付/待支付/其他 |
|
||||
| match_records | 63 | 匹配记录 |
|
||||
| referral_bindings | 41 | 推广绑定 |
|
||||
| vip_roles | 10 | VIP 角色定义 |
|
||||
| mentors | 1 | 导师(卡若) |
|
||||
| persons | 0 | ⚠️ 空 |
|
||||
| ckb_lead_records | 0 | ⚠️ 空 |
|
||||
|
||||
### 6.3 数据一致性
|
||||
|
||||
| 检查项 | 结果 |
|
||||
|--------|------|
|
||||
| 章节数 stats vs all-chapters | ✅ 一致(90) |
|
||||
| 收入 orders vs dashboard | ✅ 一致(¥2008.75) |
|
||||
| 用户数 stats vs dashboard | ✅ 一致(149) |
|
||||
| 订单无重复 | ✅ 无重复订单号 |
|
||||
| 免费章节数 | ⚠️ stats=2, 实际可能=3 |
|
||||
|
||||
---
|
||||
|
||||
## 七、优先修复路线图
|
||||
|
||||
### 第一批:安全问题(紧急)
|
||||
1. **C1** OSS 密钥脱敏 — 后端 AdminSettingsGet 返回 ossConfig 时隐藏 accessKeySecret
|
||||
2. **C10** 管理端登录守卫 — 前端路由添加 token 检查
|
||||
|
||||
### 第二批:功能修复(高优先)
|
||||
3. **C4** match.js 跳转路径修正
|
||||
4. **H4+H5** 移除匹配失败伪装成功 + 测试模式购买逻辑
|
||||
5. **C5** 移除废弃 wx.getUserProfile()
|
||||
6. **C2+C3+H8** 清理或修复 payment.js
|
||||
7. **C6-C9** 统一模块导入方式
|
||||
|
||||
### 第三批:数据优化
|
||||
8. **C11** 修正免费章节计数
|
||||
9. **H9** 仪表盘用户名显示
|
||||
10. **H11+H12** API 分页和用户列表修正
|
||||
11. **M12** 热度数据零点击检查
|
||||
|
||||
### 第四批:代码清理
|
||||
12. **M6+M7** 清理调试日志和模拟数据
|
||||
13. **H6+M1-M5** 消除硬编码
|
||||
14. **L1-L6** 低优先优化
|
||||
|
||||
---
|
||||
|
||||
**测试结论**:项目核心功能链路(登录→阅读→购买→分销)基本完整可用,管理端 UI 质量良好。主要风险集中在安全层面(OSS 密钥泄露、登录守卫缺失)和小程序代码质量(废弃 API、模块语法混用、调试残留)。建议按优先级路线图逐批修复。
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 96 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 96 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 96 KiB |
Reference in New Issue
Block a user