diff --git a/.DS_Store b/.DS_Store index 4d49c113..9ae2a6c8 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/miniprogram/pages/index/index.wxss b/miniprogram/pages/index/index.wxss index 31025055..f8c22e4c 100644 --- a/miniprogram/pages/index/index.wxss +++ b/miniprogram/pages/index/index.wxss @@ -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; diff --git a/project.config.json b/project.config.json new file mode 100644 index 00000000..fcf0d817 --- /dev/null +++ b/project.config.json @@ -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": [] + } +} + diff --git a/soul-admin/src/components/RichEditor.tsx b/soul-admin/src/components/RichEditor.tsx index 10024ac8..5e8ccea1 100644 --- a/soul-admin/src/components/RichEditor.tsx +++ b/soul-admin/src/components/RichEditor.tsx @@ -29,6 +29,7 @@ export interface PersonItem { startTime?: string endTime?: string deviceGroups?: string + isPinned?: boolean } export interface LinkTagItem { diff --git a/soul-admin/src/pages/content/ChapterTree.tsx b/soul-admin/src/pages/content/ChapterTree.tsx index 34921142..2af37f64 100644 --- a/soul-admin/src/pages/content/ChapterTree.tsx +++ b/soul-admin/src/pages/content/ChapterTree.tsx @@ -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 ( diff --git a/soul-api/internal/model/person.go b/soul-api/internal/model/person.go index 9017de88..dcd00200 100644 --- a/soul-api/internal/model/person.go +++ b/soul-api/internal/model/person.go @@ -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"` } diff --git a/soul-api/internal/router/router.go b/soul-api/internal/router/router.go index 1e66df49..5848fa60 100644 --- a/soul-api/internal/router/router.go +++ b/soul-api/internal/router/router.go @@ -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) // 规则引擎(用户旅程引导) diff --git a/soul-api/server b/soul-api/server index d0cfa9b4..8356b3e5 100755 Binary files a/soul-api/server and b/soul-api/server differ diff --git a/开发文档/全站测试报告_20260315.md b/开发文档/全站测试报告_20260315.md deleted file mode 100644 index ff6ccc5e..00000000 --- a/开发文档/全站测试报告_20260315.md +++ /dev/null @@ -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` | 改用 `