From 1d56d0336c49f2823a6dd9a8c8d7fbcd1b29b223 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=A1=E8=8B=A5?= Date: Tue, 24 Mar 2026 01:22:50 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20MBTI=E5=A4=B4=E5=83=8F=E4=B8=8E?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E8=A7=84=E5=88=99=E9=93=BE=E8=B7=AF=E5=8D=87?= =?UTF-8?q?=E7=BA=A7=EF=BC=8C=E4=B8=89=E7=AB=AF=E9=A1=B5=E9=9D=A2=E4=B8=8E?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Made-with: Cursor --- .../evolution/2026-03-21-MBTI头像C端全链路兜底.md | 13 + .cursor/agent/开发助理/evolution/索引.md | 1 + .cursor/skills/karuo-party/SKILL.md | 13 +- .../karuo-party/skills/多平台分发_SKILL.md | 19 +- miniprogram/app.js | 70 +- .../assets/images/karuo-link-avatar.png | Bin 0 -> 4387 bytes miniprogram/assets/images/part-books/0.png | Bin 0 -> 65788 bytes miniprogram/assets/images/part-books/1.png | Bin 0 -> 68303 bytes miniprogram/assets/images/part-books/2.png | Bin 0 -> 50260 bytes miniprogram/assets/images/part-books/3.png | Bin 0 -> 65788 bytes miniprogram/assets/images/part-books/4.png | Bin 0 -> 68303 bytes miniprogram/pages/chapters/chapters.js | 26 +- miniprogram/pages/chapters/chapters.wxml | 3 +- miniprogram/pages/chapters/chapters.wxss | 9 + miniprogram/pages/index/index.js | 82 +- miniprogram/pages/index/index.wxml | 34 +- miniprogram/pages/index/index.wxss | 61 +- miniprogram/pages/match/match.wxml | 3 +- miniprogram/pages/match/match.wxss | 14 + .../pages/member-detail/member-detail.js | 17 +- miniprogram/pages/my/my.js | 36 +- miniprogram/pages/my/my.wxml | 8 +- miniprogram/pages/my/my.wxss | 2 + .../pages/profile-edit/profile-edit.js | 25 +- .../pages/profile-edit/profile-edit.wxml | 4 +- .../pages/profile-show/profile-show.js | 13 +- miniprogram/pages/referral/referral.js | 43 +- miniprogram/pages/referral/referral.wxml | 31 +- miniprogram/pages/referral/referral.wxss | 265 +---- miniprogram/pages/settings/settings.js | 4 +- miniprogram/upload-result.json | 11 + miniprogram/utils/mbtiAvatar.js | 39 + miniprogram/utils/partIcons.js | 13 + scripts/miniprogram_upload.sh | 4 +- scripts/test/web/admin_routes_smoke.py | 6 +- .../test/web/admin_routes_smoke_authless.py | 6 +- scripts/wechat_miniprogram_release.py | 8 +- soul-admin/dist/assets/index-CDCvtX8z.css | 1 - soul-admin/dist/assets/index-CW7Mmh6Q.js | 965 ---------------- soul-admin/dist/assets/index-DXojA1Za.css | 1 + soul-admin/dist/assets/index-Dv-LWSbq.js | 1006 +++++++++++++++++ soul-admin/dist/index.html | 4 +- .../modules/mbti/MbtiAvatarsManager.tsx | 173 +++ .../modules/user/UserDetailModal.tsx | 270 ++++- soul-admin/src/lib/mbtiAvatarPrompts.ts | 130 +++ .../src/pages/admin-users/AdminUsersPage.tsx | 19 +- .../src/pages/dashboard/DashboardPage.tsx | 341 +++++- soul-admin/src/pages/orders/OrdersPage.tsx | 50 +- .../src/pages/settings/SettingsPage.tsx | 232 ++-- soul-admin/src/pages/users/UsersPage.tsx | 393 ++++++- soul-admin/tsconfig.tsbuildinfo | 2 +- soul-api/internal/database/database.go | 21 + soul-api/internal/handler/admin_dashboard.go | 5 +- soul-api/internal/handler/admin_user_rules.go | 51 +- soul-api/internal/handler/book.go | 47 + soul-api/internal/handler/ckb.go | 56 +- soul-api/internal/handler/cron.go | 34 + soul-api/internal/handler/db.go | 204 +++- soul-api/internal/handler/match.go | 13 +- soul-api/internal/handler/miniprogram.go | 7 + .../handler/miniprogram_mbti_avatars.go | 37 + soul-api/internal/handler/order_webhook.go | 163 +++ soul-api/internal/handler/user.go | 79 +- soul-api/internal/handler/vip.go | 6 +- .../internal/handler/vip_members_admin.go | 106 +- soul-api/internal/model/order.go | 39 +- soul-api/internal/model/user.go | 2 + soul-api/internal/model/user_rule.go | 43 +- soul-api/internal/router/router.go | 6 +- .../scripts/add-persons-pin-and-source.sql | 38 + soul-api/scripts/migrate-user-rules-v2.sql | 42 + 71 files changed, 3848 insertions(+), 1621 deletions(-) create mode 100644 .cursor/agent/开发助理/evolution/2026-03-21-MBTI头像C端全链路兜底.md create mode 100644 miniprogram/assets/images/karuo-link-avatar.png create mode 100644 miniprogram/assets/images/part-books/0.png create mode 100644 miniprogram/assets/images/part-books/1.png create mode 100644 miniprogram/assets/images/part-books/2.png create mode 100644 miniprogram/assets/images/part-books/3.png create mode 100644 miniprogram/assets/images/part-books/4.png create mode 100644 miniprogram/upload-result.json create mode 100644 miniprogram/utils/mbtiAvatar.js create mode 100644 miniprogram/utils/partIcons.js delete mode 100644 soul-admin/dist/assets/index-CDCvtX8z.css delete mode 100644 soul-admin/dist/assets/index-CW7Mmh6Q.js create mode 100644 soul-admin/dist/assets/index-DXojA1Za.css create mode 100644 soul-admin/dist/assets/index-Dv-LWSbq.js create mode 100644 soul-admin/src/components/modules/mbti/MbtiAvatarsManager.tsx create mode 100644 soul-admin/src/lib/mbtiAvatarPrompts.ts create mode 100644 soul-api/internal/handler/miniprogram_mbti_avatars.go create mode 100644 soul-api/internal/handler/order_webhook.go create mode 100644 soul-api/scripts/add-persons-pin-and-source.sql create mode 100644 soul-api/scripts/migrate-user-rules-v2.sql diff --git a/.cursor/agent/开发助理/evolution/2026-03-21-MBTI头像C端全链路兜底.md b/.cursor/agent/开发助理/evolution/2026-03-21-MBTI头像C端全链路兜底.md new file mode 100644 index 00000000..173f3477 --- /dev/null +++ b/.cursor/agent/开发助理/evolution/2026-03-21-MBTI头像C端全链路兜底.md @@ -0,0 +1,13 @@ +# 2026-03-21 MBTI 头像 C 端全链路兜底 + +## 问题 +系统设置瘦身与 MBTI 映射迁到用户管理后,需在小程序多页面与匹配接口统一「无微信头像 → MBTI 映射」行为,避免仅海报单点生效。 + +## 做法 +- 新增 `miniprogram/utils/mbtiAvatar.js`(`resolveAvatarWithMbti`);`app.resolveAvatarWithMbti` 封装全局 map。 +- 我的页 `profileAvatarDisplay`;资料编辑 `avatarPreviewUrl`;profile-show、member-detail、referral 海报复用同一逻辑。 +- 后端 `match.go`:`avatar` 为空时用 `getMbtiAvatar`;响应增加 `mbti` 字段;找伙伴卡片 wxml 增加无图占位。 +- 管理端 `MbtiAvatarsManager` 补充 downloadFile 域名说明。 + +## 可复用规则 +配置驱动展示:公开 `GET /api/miniprogram/config/mbti-avatars` + 本地短时缓存;业务侧只调 `resolveAvatarWithMbti`,避免重复拼接 baseUrl。 diff --git a/.cursor/agent/开发助理/evolution/索引.md b/.cursor/agent/开发助理/evolution/索引.md index 39773d58..7dfccffb 100644 --- a/.cursor/agent/开发助理/evolution/索引.md +++ b/.cursor/agent/开发助理/evolution/索引.md @@ -4,4 +4,5 @@ | 日期 | 摘要 | 文件 | |------|------|------| +| 2026-03-21 | MBTI 头像小程序全链路兜底 + 匹配接口回填 | 2026-03-21-MBTI头像C端全链路兜底.md | | 2026-03-16 | 用户交互习惯分析(基于 agent-transcripts) | 2026-03-16-交互习惯分析.md | diff --git a/.cursor/skills/karuo-party/SKILL.md b/.cursor/skills/karuo-party/SKILL.md index 83681e0b..98f2fd8d 100644 --- a/.cursor/skills/karuo-party/SKILL.md +++ b/.cursor/skills/karuo-party/SKILL.md @@ -7,8 +7,8 @@ description: > triggers: 运营报表、视频切片、多平台分发、飞书视频下载、派对运营、卡若创业派对、派对填表、视频剪辑、一键分发、妙记下载 owner: 水岸 group: 运营 -version: "1.1" -updated: "2026-03-21" +version: "1.2" +updated: "2026-03-23" --- # 卡若创业派对运营 Skill 包 @@ -123,6 +123,14 @@ python3 "$DIST_SCRIPT/distribute_all.py" --now **详细流程**:见 `skills/多平台分发_SKILL.md` +#### 视频号发布前置(强制) + +在执行视频号发布前,固定做以下 3 步: + +1. **账号信息校验**:调用 `auth_data` 校验 `nickname` 与 `headImgUrl`,不一致先改到目标值再发。 +2. **线上失败/重复清理**:先查 `post_list`,删除失败条目;同标题仅保留最新一条(去重后再补发)。 +3. **仅定时发布**:禁止立即发布;若页面定时控件失效,使用 `post_create` 注入定时参数并拦截立即发布。 + --- ## 四、完整流程(派对结束后) @@ -279,5 +287,6 @@ curl -sS -X POST -H "Content-Type: application/json" -d "$TEXT" "$FEISHU_PARTY_C | 版本 | 日期 | 说明 | |:---|:---|:---| +| 1.2 | 2026-03-23 | 新增视频号发布前置三步:头像昵称校验、失败/重复清理、强制定时发布(含请求注入兜底) | | 1.1 | 2026-03-21 | 新增 §九 闭环复盘发群:卡若五块复盘 + 飞书 Webhook v2(msg_type 必填) | | 1.0 | 2026-03-20 | 初版:整合运营报表、视频切片、多平台分发、飞书视频文字下载 4 大技能,统一凭证管理 | diff --git a/.cursor/skills/karuo-party/skills/多平台分发_SKILL.md b/.cursor/skills/karuo-party/skills/多平台分发_SKILL.md index 7717b056..0f61a7b2 100644 --- a/.cursor/skills/karuo-party/skills/多平台分发_SKILL.md +++ b/.cursor/skills/karuo-party/skills/多平台分发_SKILL.md @@ -7,14 +7,14 @@ description: > triggers: 多平台分发、一键分发、全平台发布、批量分发、视频分发 owner: 木叶 group: 木 -version: "4.3" +version: "4.4" updated: "2026-03-23" --- -# 多平台分发 Skill(v4.3) +# 多平台分发 Skill(v4.4) > **核心原则**:API 发布为主,Playwright 为辅。确保确定性地分发到各平台。 -> **v4.3**:默认**静默**(不自动 `channels_login`);需弹窗时 `--auto-channels-login` 或 `CHANNELS_AUTO_LOGIN=1`(独立脚本)。**v4.2**:智能排期与去重下标对齐。 +> **v4.4**:视频号新增发前强制检查(头像昵称校验、失败清理、同标题去重)与“仅定时发布(请求注入兜底)”。**v4.3**:默认静默登录。 ## 〇、执行原则(第一性原理) @@ -89,7 +89,7 @@ python3 distribute_all.py --platforms 视频号 --auto-channels-login --video-di | 平台 | 定时方式 | 参数 | |------|----------|------| | B站 | API `meta.dtime` | Unix 时间戳(秒) | -| 视频号 | API `postTimingInfo.postTime`(秒级 Unix);首条若时间过近则立即发 | `channels_api_publish._scheduled_ts_for_channels` | +| 视频号 | API `postTimingInfo.postTime`(秒级 Unix);过近时间自动顺延,不允许立即发 | `channels_api_publish._scheduled_ts_for_channels` | | 抖音 | API `timing_ts` | Unix 时间戳 | | 快手 | Playwright UI | `schedule_helper.py` | | 小红书 | Playwright UI | `schedule_helper.py` | @@ -148,6 +148,17 @@ meta.hashtags("视频号") # … + #小程序卡若创业派对 #公众号卡 --- +## 六点五、视频号发布前置检查(强制) + +每次发布视频号前,必须先跑: + +1. `auth/auth_data`:校验 `nickname` 与 `headImgUrl`(不一致先改号资料,再执行发布)。 +2. `post/post_list`:筛查失败条目并删除。 +3. 同标题去重:若存在多条,仅保留最新 `objectId`,其余调用 `post/post_delete` 删除。 +4. 发布阶段若页面定时控件失败,改为 `post_create` 请求注入 `postTimingInfo`,继续定时发布;注入也失败则中止该条(防止误发立即)。 + +--- + ## 七、去重机制 - 日志:`publish_log.json`(JSON Lines) diff --git a/miniprogram/app.js b/miniprogram/app.js index 6bc0d36a..2c1f4a66 100644 --- a/miniprogram/app.js +++ b/miniprogram/app.js @@ -12,7 +12,7 @@ const DEFAULT_WITHDRAW_TMPL_ID = 'u3MbZGPRkrZIk-I7QdpwzFxnO_CeQPaCWF2FkiIablE' const PRODUCTION_BASE_URL = 'https://soulapi.quwanzhi.com' const CONFIG_CACHE_KEY = 'mpConfigCacheV1' // 与上传版本号对齐;设置页展示优先用 wx.getAccountInfoSync().miniProgram.version(正式版),否则用本字段 -const APP_DISPLAY_VERSION = '1.7.1' +const APP_DISPLAY_VERSION = '1.7.2' App({ globalData: { @@ -98,6 +98,9 @@ App({ lastVipContactCheck: 0, // 头像昵称检测:上次检测时间戳(与 VIP 检测同周期刷新) lastAvatarNicknameCheck: 0, + /** MBTI → 默认头像 URL(/api/miniprogram/config/mbti-avatars),供推广海报等 */ + mbtiAvatarsMap: {}, + mbtiAvatarsExpires: 0, }, @@ -824,27 +827,58 @@ App({ async loadMpConfig() { try { const res = await this.getConfig() - if (!res) return - const mp = (res && res.mpConfig) || (res && res.configs && res.configs.mp_config) - if (mp && typeof mp === 'object') { - if (mp.appId) this.globalData.appId = mp.appId - if (mp.mchId) this.globalData.mchId = mp.mchId - if (mp.withdrawSubscribeTmplId) this.globalData.withdrawSubscribeTmplId = mp.withdrawSubscribeTmplId - this.globalData.auditMode = !!mp.auditMode - this.globalData.supportWechat = mp.supportWechat || mp.customerWechat || mp.serviceWechat || '' - // 通知当前已加载的页面刷新 auditMode(从后台切回时配置更新后立即生效) - try { - const pages = getCurrentPages() - pages.forEach(p => { - if (p && p.data && 'auditMode' in p.data) { - p.setData({ auditMode: this.globalData.auditMode || false }) - } - }) - } catch (_) {} + if (res) { + const mp = (res && res.mpConfig) || (res && res.configs && res.configs.mp_config) + if (mp && typeof mp === 'object') { + if (mp.appId) this.globalData.appId = mp.appId + if (mp.mchId) this.globalData.mchId = mp.mchId + if (mp.withdrawSubscribeTmplId) this.globalData.withdrawSubscribeTmplId = mp.withdrawSubscribeTmplId + this.globalData.auditMode = !!mp.auditMode + this.globalData.supportWechat = mp.supportWechat || mp.customerWechat || mp.serviceWechat || '' + } } } catch (e) { console.warn('[App] loadMpConfig 失败,使用默认值:', e?.message || e) } + // 审核模式不走 5min 本地 config 缓存:始终以独立接口为准,避免后台已开审核端仍显示支付入口 + try { + await this.getAuditMode() + } catch (_) {} + this.loadMbtiAvatarsMap() + }, + + /** 拉取后台配置的 16 型 MBTI 默认头像(公开接口,约 5 分钟本地缓存) */ + async loadMbtiAvatarsMap() { + try { + const now = Date.now() + if (this.globalData.mbtiAvatarsExpires && this.globalData.mbtiAvatarsExpires > now) return + const res = await this.request({ + url: '/api/miniprogram/config/mbti-avatars', + silent: true, + timeout: 8000, + }) + if (res && res.success && res.avatars && typeof res.avatars === 'object') { + this.globalData.mbtiAvatarsMap = res.avatars + this.globalData.mbtiAvatarsExpires = now + 5 * 60 * 1000 + } + } catch (e) { + console.warn('[App] loadMbtiAvatarsMap:', e?.message || e) + } + }, + + /** 展示用头像:优先用户头像,否则 MBTI 映射(需已 loadMbtiAvatarsMap) */ + resolveAvatarWithMbti(avatar, mbti) { + try { + const { resolveAvatarWithMbti } = require('./utils/mbtiAvatar.js') + return resolveAvatarWithMbti( + avatar, + mbti, + this.globalData.mbtiAvatarsMap || {}, + this.globalData.baseUrl || '' + ) + } catch (_) { + return (avatar && String(avatar).trim()) || '' + } }, /** diff --git a/miniprogram/assets/images/karuo-link-avatar.png b/miniprogram/assets/images/karuo-link-avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..e059c5b68a73d3b2959ae76aa80907d2ef85556a GIT binary patch literal 4387 zcmb7DRan#yu>CDdihxTA?9w4FAuZBKEl4fhNVl-0G)PDb`M&wi&D6~ja7RN`T@?U<008l?fty)C2_PXNA|@gvAtoj! zB_SatrzR)Ab&H&y>J9}p6FroPk)DwO#>UG5W8q<8VB{3y;(_xC2ns+sM8t*p#d-M! z`2Sl1A|WLuCnKjLC#U0QW@P67f7i`-0742x1JPg*2S5M;fgzxqb^rzdAR^Fz=l*Yj z0YV~T5&{tEKUDS(KmY<0fC)*72*70jF+c?Wa0n4QF|{y_BGQJ0mO}&;nf8wJv0l{= zx}RM5eNs^|eOvDr=_CK-j35B~e|G;TCj^N8L7WhPfB*~vK!o7`H3kttz|`!*ii9*A zB1oHeH#5NPe}sQS2p|vqj2M6zrB~7!Rp*%BF=I13HcBYdOr6;jw&7Qd=_R8P;&`~}B6Dy*)*zCI~9_^3z^Q9MaG0B6M_Q>DzO`$y<#ACSq2N$M_ zH7(JiuvFokug(i`XHmxSPH${RS3GV2Sbq4G!t6#ugUi<_{@0xk`~nMY)r1m+u&e6w zbtGJRl04U%4vuLC@ZG-QGh_eLETc&>e$n3avTg@kVQXE}pxa9swdmUFe0`3F-XE!Cq;FQ)!*YyMgJlf{==55Yv2f&DRURtA{SDmT3n8bF)YK~25-XQP@uq}mI z;|>Jh3Dq}@+YbBITDLdqNt>$gK`+@t6w4RVN;Y#;CO^y!wKLWA$P92XV~OQLBAnK> zp!odzWfloKh0LV;i-i-PlL-`291D-{ew*oGu^N_ly^zh~6i*CNU#?`07c2FUeS9LI zI=IF_w%hNZIB2jDdNA7k+^DZ)K3Pd8WmDCT60vqqmW;JSxPW8F`C#NlpZ2^nWkw|p z6w(4`hmI6s(FXc4Vq80Fikd0666duc&Zwl(XximB~+G zf7RUMErF&_f6qJRo~9kqz21`Qhv^V!7b;=R%SJuEJGG=X3lp^-iSYK=B}X2eO`IWr2Pe4LT|feIZ$A{q^JD}{n*ZuM&#Yc zV+1_p7SD_v3Usq{t7~c!@HWjB9b!hGX4_R!sf?`Pvbj@F<#FQ_vDqu8k&*o#&vJyF zK0j~ueak6oVyS@0`8o?Kn#~{aFB<}NR#OJ`ZUBNu{^!P0@|CW6#%`sHk5B3+A~Q$G zNH^BqeGpSq?f`ft=XOn^TM};n8>#h915^B@XHoDa`CtduzX$P&fo@+Q9c<_B(PDmP z7a1Grz37KEk+DYmr@hY5;>T5`E0AnXsS92O;_0*ZnWT%foh~0bjDUMa6j_Hs4QY$tf zQ5(P0jI3aqUdNwB{G;y@RV7_|Xw~9Od<(xovMu)lavb~9ySt`)WH&-zD$c>5O)QT8 z8Yl36HqdwBt=_r7`2GuzF>*Z0rVi9Ow$<^_W+FQ~bt-ww*!^J<0-~l(o!d2$SE6B0 zEQv0XO!83BK(T7r1Dm{?5^sxwW#=Sx$((G~gua0M?hF>M(x8T9CF4$SbwEe4^b?H3&zon>cVG9e{<|IA5Nih^?WJZ8J<5)=O zI>zhzzn>VVx5@wvS2f5iDr4wuRA!30h1evudSsGt_f9@$n9IHRee5gI8{lipo0mEv z;edWS#N@5Xq|Yad)vB`_KwKo5dxiVYn5cC*W!k03U#br`z*$Z%${@bQY@W$0;QSd*3v}`XQ!u9u>Y(;-!Oh6q>pwqA||VF zHtBes$QO!#^$LrHOt#v6rz!v7sWeuJrIhOaJwp6n_QW>9h2mr#UjKq~jdjNJD9zMH z+w*`r<+m3(+Zgxz^G=CLy>UZ)EGDDJ!khBnA_$GWrYmbfmW^|Jd*Pxi#b0z{P(}U; zYn{bt+~zI@kwYVWM(HrS6JP`Nj<->_wS8})CVnlw4_GR8mCrCf@v`ptMgn(NGHFy!^4 z$YxH6_Bm6C0B1{_n0J?l&z&DGB-K0XAx&R>VJIwQNKxu1+r~)#j z1ykL2%#azF&g{I>9_Pjla1pqSrTFR@2EqP-Sz(5BG?PnC_aL*`42o{SL7+AnVRvYY zHeyb%+E~<((C(0K^iIV=Bbbr&N ze*+Bt-rqhUtnhJGPS2et!I$y@veyDfn=&l;lVf4M(nBqiS47uo9<>r+0>_M$u@rrwVtj=oD9`OHR5 zYyD=(LjbZU{DvY=UmLfI$T8Nd{{SMe8X*WW_k4c;Kz_>O%_$D%e+1suN?V1CzI4hA zrs34EPfDAvT68zSVE~`T#U@!7W3pB6FN)GCXvdHOP~(NMGyZh#sm!KxIrb^A-x0`# zSNz^nTrF;s2vTTFSy< z-ZJ+UC+7MW+2u&_RvF?hp(941>TBCIX^fa6n__=EAU&WuwLNinDX4N)lyxM9j1@9w ztm|6IJlg|%tgYiHG7tLgxqIzfI>hiuj{4vS%3Ia;S7lXJU}(N4o7DAU$O{WA)#Qw@ z2^9uvq1KWs-2B1L22#}Z?n7`+p#L60G`PUkz5JAIJ4}wwfi|(iSKVx0ym8k?=KNl+ z>@lB5r5Zaq{KTpK8T?C@Ah@Qyi#q8TJ1hJ-OrJJQ*vf%Y2yp{gw~!$%X;uVOk2!VQ z*L0NTl~cAK;RRoEykl!JS10riMmFdMZ?(zMYt^0=`s$^}10`8(=Dt)&Vf z+O8tY7i^08T0<((SBKCMli?qhHig-1K7E;T;$xQYFWWe>l>{cx2n#Owe6?+2e&kZyXgy}GaA!#yhnRO8WZoEljBkd4Zue%c$42$JA7?3X%FG8 z_rFnUQj7&WoII;!A$#8#>DYjAh>ulb?-o1s5Ruo$7KLOghTk@4-v}RbtMQlS_ei_Dswe3s!BsiY|`%UJsQNQJ+;b&i@`6{PsRPC4-JBtS1IB(VxjQ$ zJ_8hgfR}ds7v&VPp>3N>%Dt8#O$%w&G86+h{+UPYYM4#RRZT;jc!U!n%fV+kIsu0c zsfB__;v#w8ztt?mc5M`SA)DKQLwp(aj^p7zM7>?`FR`3n54-m`-VgL65rK;t&p)w+ z22F%}bY;QLo2%jnLoWlI(d|+Fg@0rGKA)fPjk+bUClXea8KtmIWYrD|$y5hM$-1H#qXrBF~W5NpShX!-wU~YHeR_zRK@SeL6&gk0mWRX#m|b z1+0cW(!Cg-v({f5atC|bptu4kGB#K_kDYj7Zqw%H4;9Qvua#6iv zD?DgY$PeU!H7UPbfS=o~O3bcki_J1V*z1?*1xYvMrd$d?mnOaU} zgi?l$KdT;H8m?V&0*m%`iE1ny6)XknsWCAH7ReF4fQCv;DSGZo2OqLjUK=VcYpE13 zt53-(yK-3b`(5lB&0coY)@I@de|`uHZLN_mvvLd=T1Et&IpUN@-uq}bH@WE@Sjr%q zsLS6%QnDAj7|%!En%hb{4-*iS0+cHnZ zx#J(Wqob0r7bS+?vMt?=Z`3xVYZ1#m7dfcl-@)$vcgQ2(|j^rxPj|43jGFd&<_a}G^2u8xt?e- z_bPSE!^^t5DlMMt8#UK8|FV1idTIsJP^6JBm&1)On?*R*t3w%WzQP|E>(<~>DjpVT ue38qxxupFd^k!m^G_tjOwIQE)vBh9C(3rMNpPqYJQp2Fk;BolP^#1@0ej3mK literal 0 HcmV?d00001 diff --git a/miniprogram/assets/images/part-books/0.png b/miniprogram/assets/images/part-books/0.png new file mode 100644 index 0000000000000000000000000000000000000000..ed3dc4a06595b3094d97bb03e8f9d24cabf81865 GIT binary patch literal 65788 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 literal 0 HcmV?d00001 diff --git a/miniprogram/assets/images/part-books/1.png b/miniprogram/assets/images/part-books/1.png new file mode 100644 index 0000000000000000000000000000000000000000..29cad9175c6970f1483f6d2e410745c2307d4411 GIT binary patch literal 68303 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 z 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 literal 0 HcmV?d00001 diff --git a/miniprogram/assets/images/part-books/2.png b/miniprogram/assets/images/part-books/2.png new file mode 100644 index 0000000000000000000000000000000000000000..0bc8f47e6573d9f6aed1835bc3d6eeaf45136b8b GIT binary patch literal 50260 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
+ {MBTI_TYPES_ORDERED.map((t) => { + const url = avatars[t] ?? '' + const meta = MBTI_AVATAR_PROFILES[t] + return ( +
+
+ {t} + + {meta.title} + +
+ +
+
+ {url ? ( + {t} + ) : ( + 未配 + )} +
+
+ setAvatars((prev) => ({ ...prev, [t]: e.target.value }))} + /> +
+
+ +
+ + +
+
+ ) + })} +
+ + ) +} diff --git a/soul-admin/src/components/modules/user/UserDetailModal.tsx b/soul-admin/src/components/modules/user/UserDetailModal.tsx index 06c04139..4f7cc163 100644 --- a/soul-admin/src/components/modules/user/UserDetailModal.tsx +++ b/soul-admin/src/components/modules/user/UserDetailModal.tsx @@ -83,10 +83,37 @@ interface UserTrack { actionLabel?: string target?: string chapterTitle?: string + module?: string + moduleLabel?: string createdAt: string timeAgo?: string } +interface InboundVisitItem { + seq: number + visitedAt?: string + referrerId?: string + referrerNickname?: string + referrerAvatar?: string + source?: string + page?: string +} + +interface InboundSourceData { + totalVisits?: number + firstVisit?: InboundVisitItem + latestVisit?: InboundVisitItem + activeBinding?: { + referrerId?: string + referrerNickname?: string + referrerAvatar?: string + referralCode?: string + bindingDate?: string + expiryDate?: string + } + visits?: InboundVisitItem[] +} + interface ShensheShouData { rfm_score?: number user_level?: string @@ -152,6 +179,7 @@ export function UserDetailModal({ const [tracks, setTracks] = useState([]) const [trackStats, setTrackStats] = useState>({}) const [referrals, setReferrals] = useState([]) + const [inboundSource, setInboundSource] = useState(null) const [balanceData, setBalanceData] = useState<{ balance: number; transactions: Array<{ id: string; type: string; amount: number; orderId?: string; createdAt: string }> } | null>(null) const [loading, setLoading] = useState(false) const [syncing, setSyncing] = useState(false) @@ -187,9 +215,13 @@ export function UserDetailModal({ const [sssQueryOpenId, setSssQueryOpenId] = useState('') const [batchIngestLoading, setBatchIngestLoading] = useState(false) const [batchIngestResult, setBatchIngestResult] = useState | null>(null) + const [avatarBroken, setAvatarBroken] = useState(false) + const [mbtiAvatarsMap, setMbtiAvatarsMap] = useState>({}) + const [purchaseList, setPurchaseList] = useState<{ orderSn: string; productType: string; productId?: string; amount: number; createdAt: string }[]>([]) useEffect(() => { if (open && userId) { + setAvatarBroken(false) setActiveTab('info') setSssData(null) setSssError(null) @@ -203,6 +235,24 @@ export function UserDetailModal({ } }, [open, userId]) + useEffect(() => { + if (!open) return + get<{ success?: boolean; avatars?: Record }>('/api/admin/mbti-avatars') + .then((r) => { + if (r?.avatars && typeof r.avatars === 'object') setMbtiAvatarsMap(r.avatars) + else setMbtiAvatarsMap({}) + }) + .catch(() => setMbtiAvatarsMap({})) + }, [open]) + + const resolveAvatarByMbti = (avatar?: string | null, mbti?: string | null): string => { + const av = (avatar || '').trim() + if (av) return normalizeImageUrl(av) + const key = (mbti || '').trim().toUpperCase() + if (!/^[EI][NS][FT][JP]$/.test(key)) return '' + return (mbtiAvatarsMap[key] || '').trim() + } + async function loadUserDetail() { if (!userId) return setLoading(true) @@ -259,11 +309,20 @@ export function UserDetailModal({ } // 关系链路 try { - const refData = await get<{ success?: boolean; referrals?: unknown[] }>( + const refData = await get<{ success?: boolean; referrals?: unknown[]; inboundSource?: InboundSourceData }>( `/api/db/users/referrals?userId=${encodeURIComponent(userId)}`, ) - if (refData?.success && refData.referrals) setReferrals(refData.referrals) - } catch { setReferrals([]) } + if (refData?.success) { + setReferrals(refData.referrals || []) + setInboundSource(refData.inboundSource || null) + } else { + setReferrals([]) + setInboundSource(null) + } + } catch { + setReferrals([]) + setInboundSource(null) + } try { const balData = await get<{ success?: boolean; data?: { balance: number; transactions: Array<{ id: string; type: string; amount: number; orderId?: string; createdAt: string }> } }>( `/api/admin/users/${encodeURIComponent(userId)}/balance`, @@ -271,6 +330,13 @@ export function UserDetailModal({ if (balData?.success && balData.data) setBalanceData(balData.data) else setBalanceData(null) } catch { setBalanceData(null) } + try { + const ordersData = await get<{ success?: boolean; orders?: { orderSn: string; productType: string; productId?: string; amount: number; createdAt: string }[] }>( + `/api/orders?userId=${encodeURIComponent(userId)}&status=paid&pageSize=50`, + ) + if (ordersData?.success && ordersData.orders) setPurchaseList(ordersData.orders) + else setPurchaseList([]) + } catch { setPurchaseList([]) } } catch (e) { console.error('Load user detail error:', e) } finally { @@ -434,12 +500,32 @@ export function UserDetailModal({ setBatchIngestLoading(true) setBatchIngestResult(null) try { + // 购买意向:看浏览/购买轨迹,把章节名备注给神射手(需求:便于 wepop/外部侧识别“想买哪章”) + const purchaseIntentChapterTitles = Array.from( + new Set( + tracks + .filter((t) => t.action === 'view_chapter' || t.action === 'purchase' || t.action === 'first_pay') + .map((t) => (t.chapterTitle || t.target || '').trim()) + .filter(Boolean), + ), + ).slice(0, 12) + const purchaseIntentActions = { + viewChapter: trackStats.view_chapter || 0, + purchase: trackStats.purchase || 0, + firstPay: trackStats.first_pay || 0, + } + const purchaseIntentRemark = purchaseIntentChapterTitles.length > 0 + ? `意向章节:${purchaseIntentChapterTitles.join('、')}` + : '' const payload = { users: [{ phone: user.phone || '', name: user.nickname || '', openId: user.openId || '', tags: editTags, + purchaseIntent: purchaseIntentActions, + purchaseIntentChapters: purchaseIntentChapterTitles, + remark: purchaseIntentRemark, }] } const data = await post<{ success?: boolean; data?: Record; error?: string }>( @@ -467,12 +553,30 @@ export function UserDetailModal({ bind_phone: Phone, bind_wechat: MessageCircle, fill_profile: Tag, + fill_avatar: User, visit_page: Navigation, + first_pay: ShoppingBag, + vip_activate: Crown, + click_super: Users, + lead_submit: Phone, + withdraw: Key, + referral_bind: Link2, + card_click: User, + btn_click: Zap, + tab_click: Navigation, + nav_click: Navigation, + page_view: Navigation, + search: Navigation, } const Icon = icons[action] || Clock return } + function trackTargetIsOpaqueId(s: string) { + const t = String(s || '').trim() + return t.length > 22 && /^[a-zA-Z0-9_-]+$/.test(t) + } + const journeyInferredTags = useMemo( () => inferTagsFromJourney(trackStats, user), [trackStats, user], @@ -513,8 +617,13 @@ export function UserDetailModal({
- {user.avatar ? ( - + {resolveAvatarByMbti(user.avatar, user.mbti) && !avatarBroken ? ( + setAvatarBroken(true)} + /> ) : ( user.nickname?.charAt(0) || '?' )} @@ -526,31 +635,29 @@ export function UserDetailModal({ {user.hasFullBook && 全书已购} {user.vipRole && {user.vipRole}}
-

- {user.id} - {user.referralCode && ( - <> - {' · '} - {user.referralCode} - - )} -

-

- OpenID 为微信开放平台用户唯一标识; - 微信标识 填微信号 / wxid(存客宝归属用),与 OpenID 不是同一字段。 -

-
-
- OpenID -

{user.openId || '—'}

+ {user.referralCode && ( +

+ 推荐码 {user.referralCode} +

+ )} +
+
+ 昵称 +

{editNickname || user.nickname || '—'}

-
- 库内手机 -

{user.phone || '—'}

+
+ 手机号 +

{editPhone || '—'}

-
- 库内微信标识 -

{user.wechatId || '—'}

+
+ 微信标识 +

{editWechatId || '—'}

+
+
+ 画像 +

+ {[user.region, user.industry, user.position, user.mbti ? `MBTI ${user.mbti}` : ''].filter(Boolean).join(' · ') || '未完善'} +

@@ -611,8 +718,25 @@ export function UserDetailModal({ - {/* ===== 用户信息(紧凑单屏) ===== */} + {/* ===== 用户信息(紧凑单屏):基础字段 + 超级个体 + 外部同步合并为一屏滚动 ===== */} +
+ + 技术标识 + (用户ID / OpenID,默认折叠) + +
+

+ 用户ID {user.id} +

+

+ OpenID {user.openId || '—'} +

+

+ OpenID 为微信用户标识;下方「微信标识」为微信号/wxid,供存客宝归属,与 OpenID 不同。 +

+
+
@@ -691,7 +815,7 @@ export function UserDetailModal({
- 资料完善 · 神射手 / 存客宝 + 外部资料 · 神射手 / 存客宝(与上方基础信息联动)
setSssQueryPhone(e.target.value)} /> @@ -744,6 +868,27 @@ export function UserDetailModal({ {/* ===== 用户旅程 + 行为轨迹 ===== */} + {purchaseList.length > 0 && ( +
+
+ + 购买清单({purchaseList.length} 笔) +
+
+ {purchaseList.map((o, i) => ( +
+
+ + {o.productType === 'fullbook' || o.productType === 'vip' ? '全书/VIP' : `章节 ${o.productId || ''}`} + + ¥{Number(o.amount || 0).toFixed(2)} +
+ {o.createdAt ? new Date(o.createdAt).toLocaleString('zh-CN') : ''} +
+ ))} +
+
+ )}
@@ -772,11 +917,14 @@ export function UserDetailModal({
{track.actionLabel || track.action} + {track.moduleLabel && · {track.moduleLabel}} {track.chapterTitle && · {track.chapterTitle}}
- {track.target && track.target !== track.chapterTitle && ( -

target: {track.target}

- )} + {track.target && + track.target !== track.chapterTitle && + !trackTargetIsOpaqueId(track.target) && ( +

详情: {track.target}

+ )}

{track.timeAgo ? `${track.timeAgo} · ` : ''} @@ -796,6 +944,62 @@ export function UserDetailModal({ {/* ===== 关系链路 ===== */} +

+
+
+ + 入站关系链路 +
+ + 点击 {inboundSource?.totalVisits || 0} 次 + +
+
+
+

首次来自

+

+ {inboundSource?.firstVisit?.referrerNickname || '—'} + {inboundSource?.firstVisit?.referrerId ? `(${inboundSource.firstVisit.referrerId})` : ''} +

+
+
+

最近来自

+

+ {inboundSource?.latestVisit?.referrerNickname || '—'} + {inboundSource?.latestVisit?.referrerId ? `(${inboundSource.latestVisit.referrerId})` : ''} +

+
+
+ {inboundSource?.activeBinding?.referrerId ? ( +
+

+ 当前绑定: + {inboundSource.activeBinding.referrerNickname || '微信用户'} + {`(${inboundSource.activeBinding.referrerId})`} +

+
+ ) : null} +
+ {(inboundSource?.visits || []).length > 0 ? ( + (inboundSource?.visits || []).map((v, i) => ( +
+
+

+ 第 {v.seq || i + 1} 次 · {v.referrerNickname || '微信用户'} + {v.referrerId ? `(${v.referrerId})` : ''} +

+ {v.page ?

{v.page}

: null} +
+ + {v.visitedAt ? new Date(v.visitedAt).toLocaleString() : ''} + +
+ )) + ) : ( +

暂无来源点击记录

+ )} +
+
diff --git a/soul-admin/src/lib/mbtiAvatarPrompts.ts b/soul-admin/src/lib/mbtiAvatarPrompts.ts new file mode 100644 index 00000000..cbc5d3ca --- /dev/null +++ b/soul-admin/src/lib/mbtiAvatarPrompts.ts @@ -0,0 +1,130 @@ +export const MBTI_TYPES_ORDERED = [ + 'INTJ', + 'INTP', + 'ENTJ', + 'ENTP', + 'INFJ', + 'INFP', + 'ENFJ', + 'ENFP', + 'ISTJ', + 'ISFJ', + 'ESTJ', + 'ESFJ', + 'ISTP', + 'ISFP', + 'ESTP', + 'ESFP', +] as const + +export type MbtiType = (typeof MBTI_TYPES_ORDERED)[number] + +type MbtiGroup = 'NT' | 'NF' | 'SJ' | 'SP' +type MbtiAvatarMood = 'calm' | 'sharp' | 'warm' | 'playful' + +export interface MbtiAvatarProfile { + title: string + group: MbtiGroup + mood: MbtiAvatarMood +} + +/** + * 以用户给的参考图为基准:多边形人物、无中英文字,仅保留人物头像。 + * 颜色与网站深色主题融合(青绿/琥珀/紫青等低饱和高对比)。 + */ +export const MBTI_AVATAR_PROFILES: Record = { + INTJ: { title: '战略家', group: 'NT', mood: 'sharp' }, + INTP: { title: '逻辑学家', group: 'NT', mood: 'calm' }, + ENTJ: { title: '指挥官', group: 'NT', mood: 'sharp' }, + ENTP: { title: '辩论家', group: 'NT', mood: 'playful' }, + INFJ: { title: '提倡者', group: 'NF', mood: 'warm' }, + INFP: { title: '调停者', group: 'NF', mood: 'warm' }, + ENFJ: { title: '主人公', group: 'NF', mood: 'warm' }, + ENFP: { title: '竞选者', group: 'NF', mood: 'playful' }, + ISTJ: { title: '物流师', group: 'SJ', mood: 'calm' }, + ISFJ: { title: '守卫者', group: 'SJ', mood: 'warm' }, + ESTJ: { title: '总经理', group: 'SJ', mood: 'sharp' }, + ESFJ: { title: '执政官', group: 'SJ', mood: 'warm' }, + ISTP: { title: '鉴赏家', group: 'SP', mood: 'sharp' }, + ISFP: { title: '探险家', group: 'SP', mood: 'playful' }, + ESTP: { title: '企业家', group: 'SP', mood: 'playful' }, + ESFP: { title: '表演者', group: 'SP', mood: 'playful' }, +} + +function paletteByGroup(group: MbtiGroup) { + switch (group) { + case 'NT': + return { bg: '#0d1424', body: '#c89a2c', accent: '#ffd66b', hair: '#6d540f', line: '#111827' } + case 'NF': + return { bg: '#0a1721', body: '#2e9f7c', accent: '#84e9c9', hair: '#2d6a4f', line: '#11212a' } + case 'SJ': + return { bg: '#101828', body: '#4f8cb8', accent: '#9bd4ff', hair: '#2e4a66', line: '#111f2d' } + case 'SP': + return { bg: '#161225', body: '#8b6bc0', accent: '#ccb3ff', hair: '#574183', line: '#211832' } + default: + return { bg: '#0e1422', body: '#38bdac', accent: '#7ee7db', hair: '#1f6f66', line: '#10202d' } + } +} + +function faceByMood(mood: MbtiAvatarMood): { eye: string; brow: string; mouth: string; tilt: number } { + switch (mood) { + case 'sharp': + return { eye: 'M222 222 L242 220 M270 220 L290 222', brow: 'M218 210 L244 202 M268 202 L294 210', mouth: 'M234 256 Q256 246 278 256', tilt: -5 } + case 'warm': + return { eye: 'M222 224 Q232 230 242 224 M270 224 Q280 230 290 224', brow: 'M220 210 Q232 206 244 210 M268 210 Q280 206 292 210', mouth: 'M232 254 Q256 272 280 254', tilt: 2 } + case 'playful': + return { eye: 'M222 224 Q232 236 242 224 M270 224 Q280 236 290 224', brow: 'M220 210 Q234 200 246 208 M266 208 Q278 200 292 210', mouth: 'M232 256 Q256 266 280 250', tilt: 8 } + default: + return { eye: 'M222 224 Q232 220 242 224 M270 224 Q280 220 290 224', brow: 'M220 210 Q232 208 244 210 M268 210 Q280 208 292 210', mouth: 'M236 256 Q256 260 276 256', tilt: 0 } + } +} + +function shouldersByMood(mood: MbtiAvatarMood): string { + switch (mood) { + case 'sharp': + return 'M168 370 L206 300 L256 332 L306 300 L344 370 L306 392 L256 374 L206 392 Z' + case 'warm': + return 'M166 368 Q188 318 226 314 L256 340 L286 314 Q324 318 346 368 L314 392 Q286 404 256 396 Q226 404 198 392 Z' + case 'playful': + return 'M164 370 L198 304 L252 332 L318 300 L350 374 L316 394 L258 378 L196 396 Z' + default: + return 'M166 370 L202 306 L256 336 L310 306 L346 370 L310 392 L256 380 L202 392 Z' + } +} + +export function buildMbtiSvgAvatarDataUrl(type: MbtiType): string { + const p = MBTI_AVATAR_PROFILES[type] + const palette = paletteByGroup(p.group) + const face = faceByMood(p.mood) + const shoulder = shouldersByMood(p.mood) + + const svg = ` + + + + + + + + + + + + + + + + + + + + + + + + + +` + + return `data:image/svg+xml;utf8,${encodeURIComponent(svg)}` +} diff --git a/soul-admin/src/pages/admin-users/AdminUsersPage.tsx b/soul-admin/src/pages/admin-users/AdminUsersPage.tsx index 7d09b4cf..8d4cc9e1 100644 --- a/soul-admin/src/pages/admin-users/AdminUsersPage.tsx +++ b/soul-admin/src/pages/admin-users/AdminUsersPage.tsx @@ -44,6 +44,12 @@ interface ListRes { error?: string } +function confirmDangerousDelete(entity: string): boolean { + if (!confirm(`确定删除该${entity}?此操作不可恢复。`)) return false + const verifyText = window.prompt(`请输入「删除」以确认删除${entity}`) + return verifyText === '删除' +} + export function AdminUsersPage() { const [records, setRecords] = useState([]) const [total, setTotal] = useState(0) @@ -72,7 +78,7 @@ export function AdminUsersPage() { pageSize: String(pageSize), }) if (debouncedSearch.trim()) params.set('search', debouncedSearch.trim()) - const data = await get(`/api/admin/admin-users?${params}`) + const data = await get(`/api/admin/users?${params}`) if (data?.success) { setRecords((data as ListRes).records || []) setTotal((data as ListRes).total ?? 0) @@ -130,7 +136,7 @@ export function AdminUsersPage() { setSaving(true) try { if (editingUser) { - const data = await put<{ success?: boolean; error?: string }>('/api/admin/admin-users', { + const data = await put<{ success?: boolean; error?: string }>('/api/admin/users', { id: editingUser.id, password: formPassword || undefined, name: formName.trim(), @@ -144,7 +150,7 @@ export function AdminUsersPage() { setError(data?.error || '保存失败') } } else { - const data = await post<{ success?: boolean; error?: string }>('/api/admin/admin-users', { + const data = await post<{ success?: boolean; error?: string }>('/api/admin/users', { username: formUsername.trim(), password: formPassword, name: formName.trim(), @@ -166,9 +172,12 @@ export function AdminUsersPage() { } const handleDelete = async (id: number) => { - if (!confirm('确定删除该管理员?')) return + if (!confirmDangerousDelete('管理员')) { + setError('已取消删除') + return + } try { - const data = await del<{ success?: boolean; error?: string }>(`/api/admin/admin-users?id=${id}`) + const data = await del<{ success?: boolean; error?: string }>(`/api/admin/users?id=${id}`) if (data?.success) loadList() else setError(data?.error || '删除失败') } catch (e: unknown) { diff --git a/soul-admin/src/pages/dashboard/DashboardPage.tsx b/soul-admin/src/pages/dashboard/DashboardPage.tsx index 7adad202..94810b03 100644 --- a/soul-admin/src/pages/dashboard/DashboardPage.tsx +++ b/soul-admin/src/pages/dashboard/DashboardPage.tsx @@ -50,6 +50,32 @@ interface DashboardOverviewRes { newUsers?: UserRow[] } +interface MatchStatsRes { + success?: boolean + data?: { + totalMatches?: number + todayMatches?: number + uniqueUsers?: number + paidMatchCount?: number + } +} + +interface DistributionOverviewRes { + success?: boolean + overview?: { + todayClicks?: number + todayBindings?: number + todayConversions?: number + monthClicks?: number + monthBindings?: number + monthConversions?: number + totalClicks?: number + totalBindings?: number + totalConversions?: number + conversionRate?: string + } +} + interface UsersRes { success?: boolean users?: UserRow[] @@ -62,6 +88,13 @@ interface OrdersRes { total?: number } +interface VipMemberLite { + id: string + name?: string + nickname?: string + token?: string +} + export function DashboardPage() { const navigate = useNavigate() const [statsLoading, setStatsLoading] = useState(true) @@ -84,12 +117,32 @@ export function DashboardPage() { Array<{ userId: string; nickname?: string; avatar?: string; phone?: string; clicks: number; uniqueClicks: number; leadCount?: number }> >([]) const [superLoading, setSuperLoading] = useState(false) - const [trackPeriod, setTrackPeriod] = useState('week') + const [trackPeriod, setTrackPeriod] = useState('today') const [trackStats, setTrackStats] = useState<{ total: number byModule: Record } | null>(null) const [trackLoading, setTrackLoading] = useState(false) + const [partnerPromoLoading, setPartnerPromoLoading] = useState(true) + const [matchStats, setMatchStats] = useState<{ + totalMatches: number + todayMatches: number + uniqueUsers: number + paidMatchCount: number + } | null>(null) + const [distributionOverview, setDistributionOverview] = useState<{ + todayClicks: number + todayBindings: number + todayConversions: number + monthClicks: number + monthBindings: number + monthConversions: number + totalClicks: number + totalBindings: number + totalConversions: number + conversionRate?: string + } | null>(null) + const [vipMembers, setVipMembers] = useState([]) const showError = (err: unknown) => { const e = err as Error & { status?: number; name?: string } @@ -153,6 +206,60 @@ export function DashboardPage() { setCkbStats(null) } + // 加载「找伙伴 × 推广中心」共统计 + setPartnerPromoLoading(true) + try { + const [matchRes, distRes] = await Promise.allSettled([ + get('/api/db/match-records?stats=true', init), + get('/api/admin/distribution/overview', init), + ]) + + if (matchRes.status === 'fulfilled' && matchRes.value?.success && matchRes.value.data) { + setMatchStats({ + totalMatches: matchRes.value.data.totalMatches ?? 0, + todayMatches: matchRes.value.data.todayMatches ?? 0, + uniqueUsers: matchRes.value.data.uniqueUsers ?? 0, + paidMatchCount: matchRes.value.data.paidMatchCount ?? 0, + }) + } else { + setMatchStats(null) + } + + if (distRes.status === 'fulfilled' && distRes.value?.success && distRes.value.overview) { + setDistributionOverview({ + todayClicks: distRes.value.overview.todayClicks ?? 0, + todayBindings: distRes.value.overview.todayBindings ?? 0, + todayConversions: distRes.value.overview.todayConversions ?? 0, + monthClicks: distRes.value.overview.monthClicks ?? 0, + monthBindings: distRes.value.overview.monthBindings ?? 0, + monthConversions: distRes.value.overview.monthConversions ?? 0, + totalClicks: distRes.value.overview.totalClicks ?? 0, + totalBindings: distRes.value.overview.totalBindings ?? 0, + totalConversions: distRes.value.overview.totalConversions ?? 0, + conversionRate: distRes.value.overview.conversionRate, + }) + } else { + setDistributionOverview(null) + } + } catch { + setMatchStats(null) + setDistributionOverview(null) + } finally { + setPartnerPromoLoading(false) + } + + // 加载超级个体名单(用于点击统计里把 ID 显示为名字) + try { + const vipRes = await get<{ success?: boolean; data?: VipMemberLite[] }>('/api/db/vip-members?limit=500', init) + if (vipRes?.success && Array.isArray(vipRes.data)) { + setVipMembers(vipRes.data) + } else { + setVipMembers([]) + } + } catch { + setVipMembers([]) + } + // 2. 并行加载订单和用户 setOrdersLoading(true) setUsersLoading(true) @@ -220,6 +327,130 @@ export function DashboardPage() { } } + const moduleLabels: Record = { + home: '首页', + chapters: '目录', + read: '阅读页', + my: '我的', + vip: '超级个体', + wallet: '钱包', + match: '找伙伴', + referral: '推广中心', + search: '搜索', + settings: '设置', + about: '关于', + member_detail: '成员详情', + other: '其他', + } + + const actionLabels: Record = { + btn_click: '按钮点击', + nav_click: '导航点击', + card_click: '卡片点击', + tab_click: '标签切换', + page_view: '页面浏览', + share: '分享', + purchase: '购买', + register: '注册', + rule_trigger: '规则触发', + view_chapter: '浏览章节', + link_click: '链接点击', + } + + const normalizeTrackToken = (value?: string) => { + if (!value) return '' + return value + .replace(/^part-/, '') + .replace(/^soulvip_/, '') + .replace(/^super_?/, '') + .replace(/^user_/, '') + .replace(/[_-]+/g, ' ') + .trim() + } + + const resolveVipNameByToken = (value?: string) => { + if (!value) return '' + const key = value.trim().toLowerCase() + if (!key) return '' + const byId = vipMembers.find((m) => { + const id = String(m.id || '').toLowerCase() + return id === key || id.includes(key) || key.includes(id) + }) + if (byId) return byId.name || byId.nickname || '' + const byToken = vipMembers.find((m) => { + const t = String(m.token || '').toLowerCase() + return t && (t === key || t.includes(key) || key.includes(t)) + }) + if (byToken) return byToken.name || byToken.nickname || '' + return '' + } + + const prettyTrackTarget = (target?: string) => { + if (!target) return '未命名点击' + const t = target.trim() + const lower = t.toLowerCase() + + if (/^链接头像[_-]/.test(t)) { + const rawName = normalizeTrackToken(t.replace(/^链接头像[_-]/, '')) + return rawName ? `头像:${rawName}` : '头像点击' + } + if (/^member[_-]?detail$/i.test(lower) || lower.includes('member detail')) return '成员详情' + if (/^giftpay$/i.test(lower) || lower.includes('gift pay')) return '代付入口' + if (/^part[-_]/i.test(lower)) return `章节:${normalizeTrackToken(t)}` + if (lower.includes('soulvip') || lower.includes('super')) { + const raw = t + .replace(/^超级个体[::]?/i, '') + .replace(/^super[_-]?/i, '') + .replace(/^soulvip[_-]?/i, '') + .replace(/^user[_-]?/i, '') + .trim() + const vipName = resolveVipNameByToken(raw) || resolveVipNameByToken(normalizeTrackToken(raw)) + if (vipName) return `超级个体:${vipName}` + return `超级个体:${normalizeTrackToken(raw)}` + } + if (lower.includes('qgdtw') || lower.includes('token') || lower.includes('0000')) return `对象:${normalizeTrackToken(t)}` + + const targetLabels: Record = { + '开始匹配': '开始匹配', + mentor: '导师顾问', + team: '团队招募', + investor: '资源对接', + '充值': '充值', + '退款': '退款', + wallet: '钱包', + '设置': '设置', + 'VIP': 'VIP会员', + '推广': '推广中心', + '目录': '目录', + '搜索': '搜索', + '匹配': '找伙伴', + settings: '设置', + expired: '已过期', + active: '活跃', + converted: '已转化', + fill_profile: '完善资料', + register: '注册', + purchase: '购买', + '链接卡若': '链接卡若', + '更多分享': '更多分享', + '分享朋友圈文案': '分享朋友圈', + '选择金额10': '选择金额10元', + member_detail: '成员详情', + giftPay: '代付入口', + } + if (targetLabels[t]) return targetLabels[t] + + if (/^[a-z0-9_-]+$/i.test(t)) return normalizeTrackToken(t) || t + return t + } + + const buildTrackLocationLabel = (item: { module: string; page: string; action: string; target: string }) => { + const moduleName = moduleLabels[item.module] || moduleLabels[item.page] || item.module || item.page || '其他' + const actionName = actionLabels[item.action] || item.action || '点击' + const targetName = prettyTrackTarget(item.target) + return `${moduleName} · ${actionName} · ${targetName}` + } + async function loadSuperStats() { setSuperLoading(true) try { @@ -342,6 +573,19 @@ export function DashboardPage() { bg: 'bg-cyan-500/20', link: '/users?tab=leads', }, + { + title: '伙伴&推广协同', + value: partnerPromoLoading + ? null + : (matchStats?.totalMatches ?? 0) + (distributionOverview?.totalClicks ?? 0), + sub: partnerPromoLoading + ? null + : `找伙伴 ${(matchStats?.totalMatches ?? 0)} / 推广 ${(distributionOverview?.totalClicks ?? 0)}`, + icon: BarChart3, + color: 'text-emerald-400', + bg: 'bg-emerald-500/20', + link: '/find-partner', + }, ] return ( @@ -359,11 +603,11 @@ export function DashboardPage() {
)} -
+
{stats.map((stat, index) => ( stat.link && navigate(stat.link)} > @@ -433,6 +677,63 @@ export function DashboardPage() {
{bottomTab === 'overview' && ( +
+ + + 找伙伴 × 推广中心(共统计) + + + + {partnerPromoLoading && !matchStats && !distributionOverview ? ( +
+ + 加载中... +
+ ) : ( +
+
+

找伙伴总匹配

+

{matchStats?.totalMatches ?? 0}

+
+
+

找伙伴今日

+

{matchStats?.todayMatches ?? 0}

+
+
+

找伙伴用户数

+

{matchStats?.uniqueUsers ?? 0}

+
+
+

推广总点击

+

{distributionOverview?.totalClicks ?? 0}

+
+
+

推广总绑定

+

{distributionOverview?.totalBindings ?? 0}

+
+
+

推广总转化

+

{distributionOverview?.totalConversions ?? 0}

+
+
+ )} + {distributionOverview?.conversionRate && ( +

+ 推广转化率:{distributionOverview.conversionRate} +

+ )} +
+
+
@@ -488,7 +789,7 @@ export function DashboardPage() { {buyer} { e.currentTarget.style.display = 'none' const next = e.currentTarget.nextElementSibling as HTMLElement @@ -497,7 +798,7 @@ export function DashboardPage() { /> ) : null}
{buyer.charAt(0)}
@@ -537,7 +838,7 @@ export function DashboardPage() {
-
+

+¥{Number(p.amount).toFixed(2)}

@@ -620,6 +921,7 @@ export function DashboardPage() {
+
)} {bottomTab === 'tags' && ( @@ -663,11 +965,6 @@ export function DashboardPage() { .slice(0, 5) .map(([mod, items]) => { const moduleTotal = items.reduce((s, i) => s + i.count, 0) - const moduleLabels: Record = { - home: '首页', chapters: '目录', read: '阅读', my: '我的', - vip: 'VIP', wallet: '钱包', match: '找伙伴', referral: '推广', - search: '搜索', settings: '设置', about: '关于', other: '其他', - } return (
@@ -681,28 +978,10 @@ export function DashboardPage() { .sort((a, b) => b.count - a.count) .slice(0, 8) .map((item, i) => { - const targetLabels: Record = { - '开始匹配': '开始匹配', 'mentor': '导师顾问', 'team': '团队招募', - 'investor': '资源对接', '充值': '充值', '退款': '退款', - 'wallet': '钱包', '设置': '设置', 'VIP': 'VIP会员', - '推广': '推广中心', '目录': '目录', '搜索': '搜索', - '匹配': '找伙伴', 'settings': '设置', 'expired': '已过期', - 'active': '活跃', 'converted': '已转化', 'fill_profile': '完善资料', - 'register': '注册', 'purchase': '购买', 'btn_click': '按钮点击', - 'nav_click': '导航点击', 'card_click': '卡片点击', 'tab_click': '标签切换', - 'rule_trigger': '规则触发', 'view_chapter': '浏览章节', - '链接卡若': '链接卡若', '更多分享': '更多分享', '分享朋友圈文案': '分享朋友圈', - '选择金额10': '选择金额10元', - } - const actionLabels: Record = { - 'btn_click': '按钮点击', 'nav_click': '导航点击', 'card_click': '卡片点击', - 'tab_click': '标签切换', 'purchase': '购买', 'register': '注册', - 'rule_trigger': '规则触发', 'view_chapter': '浏览章节', - } - const label = targetLabels[item.target] || item.target || actionLabels[item.action] || item.action + const label = buildTrackLocationLabel(item) return (
- + {label}
diff --git a/soul-admin/src/pages/orders/OrdersPage.tsx b/soul-admin/src/pages/orders/OrdersPage.tsx index da83bedb..e0634cdf 100644 --- a/soul-admin/src/pages/orders/OrdersPage.tsx +++ b/soul-admin/src/pages/orders/OrdersPage.tsx @@ -44,6 +44,10 @@ interface Purchase { giftPayRequestId?: string payerUserId?: string payerNickname?: string + webhookPushStatus?: 'sent' | 'failed' | '' + webhookPushedAt?: string + webhookPushAttempts?: number + webhookPushError?: string } interface UsersItem { @@ -362,23 +366,35 @@ export function OrdersPage() { : purchase.paymentMethod || '微信支付'} - {purchase.status === 'refunded' ? ( - - 已退款 - - ) : purchase.status === 'paid' || purchase.status === 'completed' ? ( - - 已完成 - - ) : purchase.status === 'pending' || purchase.status === 'created' ? ( - - 待支付 - - ) : ( - - 已失败 - - )} +
+ {purchase.status === 'refunded' ? ( + + 已退款 + + ) : purchase.status === 'paid' || purchase.status === 'completed' ? ( + + 已完成 + + ) : purchase.status === 'pending' || purchase.status === 'created' ? ( + + 待支付 + + ) : ( + + 已失败 + + )} + {(purchase.status === 'paid' || purchase.status === 'completed') && + (purchase.webhookPushStatus === 'sent' ? ( + + 已推送 + + ) : ( + + 待补推 + + ))} +
{purchase.status === 'refunded' && purchase.refundReason ? purchase.refundReason : '-'} diff --git a/soul-admin/src/pages/settings/SettingsPage.tsx b/soul-admin/src/pages/settings/SettingsPage.tsx index 8fc5bf75..b205e160 100644 --- a/soul-admin/src/pages/settings/SettingsPage.tsx +++ b/soul-admin/src/pages/settings/SettingsPage.tsx @@ -36,9 +36,10 @@ import { Link2, FileText, Cloud, - Smile, Eye, EyeOff, + LayoutGrid, + Sparkles, } from 'lucide-react' import { get, post } from '@/api/client' import { AuthorSettingsPage } from '@/pages/author-settings/AuthorSettingsPage' @@ -125,10 +126,12 @@ const MP_UI_TEMPLATE_OBJECT: Record> = { bookTitle: '一场SOUL的创业实验场', bookSubtitle: '来自Soul派对房的真实商业故事', }, + // homePage.linkKaruoAvatar:首页「链接卡若」头像 HTTPS,空则小程序用「卡」字占位 homePage: { logoTitle: '卡若创业派对', logoSubtitle: '来自派对房的真实故事', linkKaruoText: '点击链接卡若', + linkKaruoAvatar: '', searchPlaceholder: '搜索章节标题或内容...', bannerTag: '推荐', bannerReadMoreText: '点击阅读', @@ -154,10 +157,17 @@ const MP_UI_TEMPLATE_OBJECT: Record> = { const TAB_KEYS = ['system', 'author', 'admin', 'api-docs'] as const type TabKey = (typeof TAB_KEYS)[number] +const SYSTEM_SECTION_KEYS = ['basic', 'mp', 'oss', 'features'] as const +type SystemSectionKey = (typeof SYSTEM_SECTION_KEYS)[number] + export function SettingsPage() { const [searchParams, setSearchParams] = useSearchParams() const tabParam = searchParams.get('tab') ?? 'system' const activeTab = TAB_KEYS.includes(tabParam as TabKey) ? (tabParam as TabKey) : 'system' + const systemSectionParam = searchParams.get('section') ?? 'basic' + const systemSection: SystemSectionKey = SYSTEM_SECTION_KEYS.includes(systemSectionParam as SystemSectionKey) + ? (systemSectionParam as SystemSectionKey) + : 'basic' const [localSettings, setLocalSettings] = useState(defaultSettings) const [featureConfig, setFeatureConfig] = useState(defaultFeatures) @@ -172,39 +182,6 @@ export function SettingsPage() { const [dialogIsError, setDialogIsError] = useState(false) const [featureSwitchSaving, setFeatureSwitchSaving] = useState(false) - const MBTI_TYPES = [ - 'INTJ','INTP','ENTJ','ENTP', - 'INFJ','INFP','ENFJ','ENFP', - 'ISTJ','ISFJ','ESTJ','ESFJ', - 'ISTP','ISFP','ESTP','ESFP', - ] - const [mbtiAvatars, setMbtiAvatars] = useState>({}) - const [mbtiLoading, setMbtiLoading] = useState(false) - const [mbtiSaving, setMbtiSaving] = useState(false) - - const loadMbtiAvatars = async () => { - setMbtiLoading(true) - try { - const res = await get<{ success?: boolean; avatars?: Record }>('/api/admin/mbti-avatars') - if (res?.avatars) setMbtiAvatars(res.avatars) - } catch { /* ignore */ } - finally { setMbtiLoading(false) } - } - - const saveMbtiAvatars = async () => { - setMbtiSaving(true) - try { - const res = await post<{ success?: boolean; error?: string }>('/api/admin/mbti-avatars', { avatars: mbtiAvatars }) - if (!res || res.success === false) { - showResult('保存失败', res?.error ?? '未知错误', true) - return - } - showResult('已保存', 'MBTI 头像映射已保存,无头像的超级个体将自动使用对应性格头像。') - } catch (error) { - showResult('保存失败', error instanceof Error ? error.message : String(error), true) - } finally { setMbtiSaving(false) } - } - const showResult = (title: string, message: string, isError = false) => { setDialogTitle(title) setDialogMessage(message) @@ -257,7 +234,6 @@ export function SettingsPage() { } } load() - loadMbtiAvatars() }, []) const saveFeatureConfigOnly = async ( @@ -379,7 +355,23 @@ export function SettingsPage() { } const handleTabChange = (v: string) => { - setSearchParams(v === 'system' ? {} : { tab: v }) + if (v === 'system') { + const sp = new URLSearchParams(searchParams) + sp.delete('tab') + if (!SYSTEM_SECTION_KEYS.includes((sp.get('section') || 'basic') as SystemSectionKey)) { + sp.set('section', 'basic') + } + setSearchParams(sp) + return + } + setSearchParams({ tab: v }) + } + + const handleSystemSectionChange = (v: string) => { + const sp = new URLSearchParams(searchParams) + sp.delete('tab') + sp.set('section', v) + setSearchParams(sp) } if (loading) return
加载中...
@@ -440,7 +432,45 @@ export function SettingsPage() { -
+

+ MBTI 默认头像已迁至{' '} + + 用户管理(用户列表点头像打开) + +

+ + + + + 基础与价格 + + + + 小程序与审核 + + + + OSS + + + + 功能开关 + + + + @@ -641,7 +671,9 @@ export function SettingsPage() {
+
+ @@ -730,6 +762,43 @@ export function SettingsPage() { + + + + + 小程序审核模式 + + + 提交微信审核前开启,审核通过后关闭即可恢复支付功能 + + + +
+
+
+ + +
+

+ {mpConfig.auditMode + ? '当前已隐藏所有支付、VIP、充值、收益等入口,审核员看不到任何付费内容' + : '关闭状态,小程序正常显示所有功能(含支付、VIP 等)'} +

+
+ +
+
+
+
+ + @@ -801,42 +870,9 @@ export function SettingsPage() {
+ - - - - - 小程序审核模式 - - - 提交微信审核前开启,审核通过后关闭即可恢复支付功能 - - - -
-
-
- - -
-

- {mpConfig.auditMode - ? '当前已隐藏所有支付、VIP、充值、收益等入口,审核员看不到任何付费内容' - : '关闭状态,小程序正常显示所有功能(含支付、VIP 等)'} -

-
- -
-
-
- + @@ -933,53 +969,6 @@ export function SettingsPage() { - - - - - MBTI 头像组 - - - 为 16 种 MBTI 性格类型配置默认头像 URL。无头像的超级个体将自动使用对应性格的头像。 - - - - {mbtiLoading ? ( -

加载中...

- ) : ( - <> -
- {MBTI_TYPES.map((t) => ( -
- {t} - {mbtiAvatars[t] && ( - {t} - )} - - setMbtiAvatars((prev) => ({ ...prev, [t]: e.target.value })) - } - /> -
- ))} -
- - - )} -
-
- @@ -998,7 +987,7 @@ export function SettingsPage() { { mod: '搜索', ctrl: '搜索功能开关', icon: }, { mod: '关于页面', ctrl: '关于页面开关', icon: }, { mod: '支付 / VIP / 充值 / 收益', ctrl: '审核模式', icon: }, - { mod: '超级个体名片', ctrl: '审核模式', icon: }, + { mod: '超级个体名片', ctrl: '审核模式', icon: }, { mod: '首页获客入口', ctrl: '已移除', icon: }, ].map((r) => (
@@ -1012,7 +1001,8 @@ export function SettingsPage() {
-
+ + diff --git a/soul-admin/src/pages/users/UsersPage.tsx b/soul-admin/src/pages/users/UsersPage.tsx index 327238e8..f12a3739 100644 --- a/soul-admin/src/pages/users/UsersPage.tsx +++ b/soul-admin/src/pages/users/UsersPage.tsx @@ -48,6 +48,7 @@ import { UserPlus as LeadIcon, } from 'lucide-react' import { UserDetailModal } from '@/components/modules/user/UserDetailModal' +import { MbtiAvatarsManager } from '@/components/modules/mbti/MbtiAvatarsManager' import { Pagination } from '@/components/ui/Pagination' import { useDebounce } from '@/hooks/useDebounce' import { useSearchParams } from 'react-router-dom' @@ -62,6 +63,7 @@ interface User { avatar?: string | null isAdmin?: boolean | number hasFullBook?: boolean | number + purchasedSectionCount?: number referralCode?: string earnings: number | string pendingEarnings?: number | string @@ -83,17 +85,47 @@ interface UserRule { title: string description: string trigger: string + triggerConditions?: string[] + actionType?: string + actionConfig?: Record sort: number enabled: boolean createdAt?: string } +const TRIGGER_OPTIONS: { value: string; label: string; group: string }[] = [ + { value: 'after_login', label: '注册/登录成功', group: '用户状态' }, + { value: 'bind_phone', label: '绑定手机号', group: '用户状态' }, + { value: 'fill_profile', label: '完善资料(头像/MBTI/行业)', group: '用户状态' }, + { value: 'view_chapter', label: '浏览章节', group: '阅读行为' }, + { value: 'browse_5_chapters', label: '累计浏览5个章节', group: '阅读行为' }, + { value: 'purchase_section', label: '购买单章', group: '付费行为' }, + { value: 'purchase_fullbook', label: '购买全书/VIP', group: '付费行为' }, + { value: 'after_pay', label: '任意付款成功', group: '付费行为' }, + { value: 'after_match', label: '完成派对匹配', group: '社交行为' }, + { value: 'click_super_individual', label: '点击超级个体头像', group: '社交行为' }, + { value: 'lead_submit', label: '提交留资/链接', group: '社交行为' }, + { value: 'referral_bind', label: '被推荐人绑定', group: '分销行为' }, + { value: 'share_action', label: '分享给好友/朋友圈', group: '分销行为' }, + { value: 'withdraw_request', label: '申请提现', group: '分销行为' }, + { value: 'add_wechat', label: '添加微信联系方式', group: '用户状态' }, +] + +const ACTION_TYPE_OPTIONS: { value: string; label: string; desc: string }[] = [ + { value: 'popup', label: '弹窗提示', desc: '在小程序内弹窗引导用户完成下一步' }, + { value: 'navigate', label: '跳转页面', desc: '引导用户跳转到指定页面' }, + { value: 'webhook', label: '推送飞书群', desc: '触发后推送消息到飞书群Webhook' }, + { value: 'tag', label: '自动打标签', desc: '触发后自动给用户打上指定标签' }, +] + interface VipMember { id: string name: string avatar?: string | null + mbti?: string | null vipRole?: string | null vipSort?: number | null + webhookUrl?: string | null /** 首页超级个体卡片点击次数(/api/db/vip-members 聚合 user_tracks) */ clickCount?: number | null /** 绑定人物后的去重获客人数 */ @@ -121,10 +153,17 @@ const JOURNEY_STAGES = [ { id: 'distribution', label: '开启分销', icon: '🔗', color: 'bg-[#38bdac]/20 border-[#38bdac]/40 text-[#38bdac]', desc: '生成推广码并推荐好友' }, ] +function confirmDangerousDelete(entity: string): boolean { + if (!confirm(`确定删除该${entity}?此操作不可恢复。`)) return false + const verifyText = window.prompt(`请输入「删除」以确认删除${entity}`) + return verifyText === '删除' +} + export function UsersPage() { const [searchParams, setSearchParams] = useSearchParams() const poolParam = searchParams.get('pool') // 'vip' | 'complete' | 'all' | null - const tabParam = searchParams.get('tab') || 'users' // users | journey | rules | vip-roles | leads + const rawTabParam = searchParams.get('tab') || 'users' + const tabParam = ['users', 'journey', 'rules', 'vip-roles', 'leads'].includes(rawTabParam) ? rawTabParam : 'users' // ===== 用户列表 state ===== const [users, setUsers] = useState([]) @@ -159,6 +198,7 @@ export function UsersPage() { const [selectedUserForReferrals, setSelectedUserForReferrals] = useState(null) const [showDetailModal, setShowDetailModal] = useState(false) const [selectedUserIdForDetail, setSelectedUserIdForDetail] = useState(null) + const [showMbtiAvatarDialog, setShowMbtiAvatarDialog] = useState(false) const [formData, setFormData] = useState({ phone: '', nickname: '', password: '', isAdmin: false, hasFullBook: false }) // ===== 规则管理 ===== @@ -166,7 +206,7 @@ export function UsersPage() { const [rulesLoading, setRulesLoading] = useState(false) const [showRuleModal, setShowRuleModal] = useState(false) const [editingRule, setEditingRule] = useState(null) - const [ruleForm, setRuleForm] = useState({ title: '', description: '', trigger: '', sort: 0, enabled: true }) + const [ruleForm, setRuleForm] = useState({ title: '', description: '', trigger: '', triggerConditions: [] as string[], actionType: 'popup', sort: 0, enabled: true }) // ===== 超级个体(VIP 用户列表) ===== const [vipMembers, setVipMembers] = useState([]) @@ -184,6 +224,7 @@ export function UsersPage() { const [trackUserNick, setTrackUserNick] = useState('') const [userTracks, setUserTracks] = useState<{ id: string; action: string; actionLabel: string; target: string; chapterTitle: string; module: string; createdAt: string; timeAgo: string }[]>([]) const [userTracksLoading, setUserTracksLoading] = useState(false) + const [mbtiAvatarsMap, setMbtiAvatarsMap] = useState>({}) // ===== 获客列表(存客宝) ===== const [leadsRecords, setLeadsRecords] = useState<{ @@ -246,10 +287,56 @@ export function UsersPage() { setLeadsLoading(false) } }, [leadsPage, leadsPageSize, debouncedLeadsSearch, leadsSourceFilter]) + + const loadMbtiAvatarsMap = useCallback(async () => { + try { + const data = await get<{ success?: boolean; avatars?: Record }>('/api/admin/mbti-avatars') + const map = (data?.avatars && typeof data.avatars === 'object') ? data.avatars : {} + setMbtiAvatarsMap(map) + } catch { + setMbtiAvatarsMap({}) + } + }, []) useEffect(() => { if (searchParams.get('tab') === 'leads') loadLeads() }, [searchParams.get('tab'), leadsPage, loadLeads]) + useEffect(() => { + loadMbtiAvatarsMap() + }, [loadMbtiAvatarsMap]) + + const resolveUserAvatarByMbti = useCallback((avatar: string | null | undefined, mbti: string | null | undefined): string => { + const av = (avatar || '').trim() + if (av) return av + const key = (mbti || '').trim().toUpperCase() + if (!/^[EI][NS][FT][JP]$/.test(key)) return '' + return (mbtiAvatarsMap[key] || '').trim() + }, [mbtiAvatarsMap]) + + const getPurchaseState = useCallback((user: User) => { + const hasFull = !!user.hasFullBook + const sectionCount = Number(user.purchasedSectionCount || 0) + if (hasFull) { + return { + tone: 'vip' as const, + main: '已购全书', + sub: sectionCount > 0 ? `另购单章 ${sectionCount} 章` : '购买项:VIP / 全书', + } + } + if (sectionCount > 0) { + return { + tone: 'paid' as const, + main: `已购 ${sectionCount} 章`, + sub: '购买项:章节', + } + } + return { + tone: 'free' as const, + main: '未购买', + sub: '', + } + }, []) + // ===== 在线人数(WSS 占位) ===== const [onlineCount, setOnlineCount] = useState(null) const loadOnlineStats = useCallback(async () => { @@ -344,7 +431,10 @@ export function UsersPage() { } async function handleDelete(userId: string) { - if (!confirm('确定要删除这个用户吗?')) return + if (!confirmDangerousDelete('用户')) { + toast.info('已取消删除') + return + } try { const data = await del<{ success?: boolean; error?: string }>(`/api/db/users?id=${encodeURIComponent(userId)}`) if (data?.success) { @@ -422,7 +512,10 @@ export function UsersPage() { } async function handleDeleteRule(id: number) { - if (!confirm('确定删除?')) return + if (!confirmDangerousDelete('规则')) { + toast.info('已取消删除') + return + } try { const data = await del<{ success?: boolean }>(`/api/db/user-rules?id=${id}`) if (data?.success) loadRules() @@ -461,6 +554,10 @@ export function UsersPage() { const [vipRoleModalMember, setVipRoleModalMember] = useState(null) const [vipRoleInput, setVipRoleInput] = useState('') const [vipRoleSaving, setVipRoleSaving] = useState(false) + const [showVipWebhookModal, setShowVipWebhookModal] = useState(false) + const [vipWebhookModalMember, setVipWebhookModalMember] = useState(null) + const [vipWebhookInput, setVipWebhookInput] = useState('') + const [vipWebhookSaving, setVipWebhookSaving] = useState(false) const VIP_ROLE_PRESETS = ['创业者', '资源整合者', '技术达人', '投资人', '产品经理', '流量操盘手'] @@ -470,6 +567,12 @@ export function UsersPage() { setShowVipRoleModal(true) } + const openVipWebhookModal = (member: VipMember) => { + setVipWebhookModalMember(member) + setVipWebhookInput((member.webhookUrl || '').trim()) + setShowVipWebhookModal(true) + } + const handleSetVipRole = async (value: string) => { const trimmed = value.trim() if (!vipRoleModalMember) return @@ -498,6 +601,34 @@ export function UsersPage() { } } + const handleSetVipWebhook = async () => { + if (!vipWebhookModalMember) return + const val = vipWebhookInput.trim() + if (val && !/^https?:\/\//i.test(val)) { + toast.error('Webhook 地址需以 http/https 开头') + return + } + setVipWebhookSaving(true) + try { + const res = await put<{ success?: boolean; error?: string }>('/api/db/vip-members/webhook', { + userId: vipWebhookModalMember.id, + webhookUrl: val, + }) + if (!res?.success) { + toast.error(res?.error || '保存飞书群 Webhook 失败') + return + } + toast.success(val ? '已保存该超级个体的飞书群 Webhook' : '已清空该超级个体的飞书群 Webhook') + setShowVipWebhookModal(false) + setVipWebhookModalMember(null) + await loadVipMembers() + } catch { + toast.error('保存飞书群 Webhook 失败') + } finally { + setVipWebhookSaving(false) + } + } + const [showVipSortModal, setShowVipSortModal] = useState(false) const [vipSortModalMember, setVipSortModalMember] = useState(null) const [vipSortInput, setVipSortInput] = useState('') @@ -879,34 +1010,48 @@ export function UsersPage() {
-
- {user.avatar ? ( - { - (e.target as HTMLImageElement).style.display = 'none' - const parent = (e.target as HTMLImageElement).parentElement - if (parent) parent.textContent = user.nickname?.charAt(0) || '?' - }} - /> - ) : user.nickname?.charAt(0) || '?'} -
-
+ {(() => { + const avatarUrl = resolveUserAvatarByMbti(user.avatar, user.mbti) + const initial = user.nickname?.charAt(0) || '?' + return ( + + ) + })()} +
{user.isAdmin && 管理员} {user.openId && !user.id?.startsWith('user_') && 微信}
-

- {user.openId ? user.openId.slice(0, 12) + '...' : user.id?.slice(0, 12)} +

+ {user.id?.slice(0, 16)}{(user.id?.length ?? 0) > 16 ? '…' : ''}

@@ -915,16 +1060,38 @@ export function UsersPage() {
{user.phone &&
📱{user.phone}
} {user.wechatId &&
💬{user.wechatId}
} - {user.openId &&
🔗{user.openId.slice(0, 12)}...
} - {!user.phone && !user.wechatId && !user.openId && 未绑定} + {!user.phone && !user.wechatId && 未绑定}
- {user.hasFullBook ? ( - VIP - ) : ( - 未购买 - )} + {(() => { + const purchase = getPurchaseState(user) + if (purchase.tone === 'vip') { + return ( +
+ + {purchase.main} + + {purchase.sub &&

{purchase.sub}

} +
+ ) + } + if (purchase.tone === 'paid') { + return ( +
+ + {purchase.main} + + {purchase.sub &&

{purchase.sub}

} +
+ ) + } + return ( + + {purchase.main} + + ) + })()}
@@ -939,15 +1106,13 @@ export function UsersPage() { {/* RFM 分值列 */} - {user.rfmScore !== undefined ? ( -
-
- {user.rfmScore} - {user.rfmLevel} -
+ {user.rfmScore != null && user.rfmScore !== undefined ? ( +
+ {user.rfmScore} + {user.rfmLevel}
) : ( - 点列头排序 + 无订单 )} @@ -1329,7 +1494,7 @@ export function UsersPage() { -
@@ -1353,17 +1518,34 @@ export function UsersPage() { {rule.title} {rule.trigger && {rule.trigger}} + {(rule.triggerConditions || []).length > 0 && ( +
+ {(rule.triggerConditions || []).slice(0, 3).map((tc) => { + const opt = TRIGGER_OPTIONS.find((o) => o.value === tc) + return {opt?.label || tc} + })} + {(rule.triggerConditions || []).length > 3 && +{(rule.triggerConditions || []).length - 3}} +
+ )} + {rule.actionType && rule.actionType !== 'popup' && ( + + {ACTION_TYPE_OPTIONS.find((o) => o.value === rule.actionType)?.label || rule.actionType} + + )}
handleToggleRule(rule)} /> - +
{rule.description && (
- 查看描述 -

{rule.description}

+ + 查看完整描述 + ({rule.description.length} 字,默认折叠) + +

{rule.description}

)}
@@ -1417,9 +1599,10 @@ export function UsersPage() { 序号 成员 超级个体标签 - 点击数 + 头像点击 获客数 排序值 + 飞书群 操作 @@ -1442,9 +1625,9 @@ export function UsersPage() { {index + 1}
- {m.avatar ? ( + {resolveUserAvatarByMbti(m.avatar, m.mbti) ? ( { @@ -1481,6 +1664,15 @@ export function UsersPage() { {m.vipSort ?? index + 1} + + {m.webhookUrl ? ( + + 已配置 + + ) : ( + 未配置 + )} +
@@ -1523,8 +1712,19 @@ export function UsersPage() { )} + + + + + + MBTI 默认头像库 + + + + + {/* ===== 弹框组件 ===== */} {/* 添加/编辑用户 */} @@ -1603,6 +1803,38 @@ export function UsersPage() { + {/* 设置超级个体飞书群 Webhook */} + { setShowVipWebhookModal(open); if (!open) setVipWebhookModalMember(null) }}> + + + + + 设置飞书群 Webhook — {vipWebhookModalMember?.name} + + +
+ + setVipWebhookInput(e.target.value)} + /> +

+ 当用户点击该超级个体头像并提交链接时,线索将优先推送到这里配置的飞书群。 +

+
+ + + + +
+
+ {editingUser ? : }{editingUser ? '编辑用户' : '添加用户'} @@ -1622,12 +1854,71 @@ export function UsersPage() { {/* 添加/编辑规则 */} - + {editingRule ? '编辑规则' : '添加规则'}
setRuleForm({ ...ruleForm, title: e.target.value })} />
-

O(F7g0r^Fa@Ehf^W{v&-ZNd+TDFY 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 literal 0 HcmV?d00001 diff --git a/miniprogram/assets/images/part-books/3.png b/miniprogram/assets/images/part-books/3.png new file mode 100644 index 0000000000000000000000000000000000000000..ed3dc4a06595b3094d97bb03e8f9d24cabf81865 GIT binary patch literal 65788 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 literal 0 HcmV?d00001 diff --git a/miniprogram/assets/images/part-books/4.png b/miniprogram/assets/images/part-books/4.png new file mode 100644 index 0000000000000000000000000000000000000000..29cad9175c6970f1483f6d2e410745c2307d4411 GIT binary patch literal 68303 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 z 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 literal 0 HcmV?d00001 diff --git a/miniprogram/pages/chapters/chapters.js b/miniprogram/pages/chapters/chapters.js index a48bd084..0a4e0fdd 100644 --- a/miniprogram/pages/chapters/chapters.js +++ b/miniprogram/pages/chapters/chapters.js @@ -7,6 +7,8 @@ const app = getApp() const { trackClick } = require('../../utils/trackClick') +const { partEmojiForBodyIndex } = require('../../utils/partIcons.js') +const { isSafeImageSrc } = require('../../utils/imageUrl.js') Page({ data: { @@ -116,15 +118,21 @@ Page({ { id: 'appendix-2', title: '附录2|创业者自检清单', mid: fixedMap['appendix-2'] }, { id: 'appendix-3', title: '附录3|本书提到的工具和资源', mid: fixedMap['appendix-3'] } ] - const bookData = parts.map((p) => ({ - id: p.id, - icon: p.icon || '', - title: p.title, - subtitle: p.subtitle || '', - chapterCount: p.chapterCount || 0, - chapters: [], - alwaysShow: (p.title || '').indexOf('每日派对干货') > -1 - })) + const bookData = parts.map((p, idx) => { + let icon = String(p.icon || '').trim() + if (icon && !isSafeImageSrc(icon)) icon = '' + const iconEmoji = icon ? '' : partEmojiForBodyIndex(idx) + return { + id: p.id, + icon, + iconEmoji, + title: p.title, + subtitle: p.subtitle || '', + chapterCount: p.chapterCount || 0, + chapters: [], + alwaysShow: (p.title || '').indexOf('每日派对干货') > -1 + } + }) app.globalData.totalSections = totalSections this.setData({ bookData, diff --git a/miniprogram/pages/chapters/chapters.wxml b/miniprogram/pages/chapters/chapters.wxml index 1cc3ff76..b3a972fe 100644 --- a/miniprogram/pages/chapters/chapters.wxml +++ b/miniprogram/pages/chapters/chapters.wxml @@ -72,7 +72,8 @@ - + + {{item.iconEmoji}} {{item.title[0] || '篇'}} {{item.title}} diff --git a/miniprogram/pages/chapters/chapters.wxss b/miniprogram/pages/chapters/chapters.wxss index c2226657..82d3596f 100644 --- a/miniprogram/pages/chapters/chapters.wxss +++ b/miniprogram/pages/chapters/chapters.wxss @@ -356,6 +356,15 @@ color: #ffffff; flex-shrink: 0; } +/* 与管理端 ChapterTree 篇头 emoji 一致 */ +.part-icon-emoji { + font-size: 34rpx; + font-weight: 400; + line-height: 1; + color: #ffffff; + background: linear-gradient(135deg, #1e3a4a 0%, #0f172a 100%); + border: 2rpx solid rgba(0, 206, 209, 0.35); +} .part-icon-img { width: 64rpx; height: 64rpx; border-radius: 16rpx; flex-shrink: 0; } diff --git a/miniprogram/pages/index/index.js b/miniprogram/pages/index/index.js index 29078092..46c28211 100644 --- a/miniprogram/pages/index/index.js +++ b/miniprogram/pages/index/index.js @@ -8,6 +8,10 @@ const app = getApp() const { trackClick } = require('../../utils/trackClick') const { cleanSingleLineField } = require('../../utils/contentParser') const { navigateMpPath } = require('../../utils/mpNavigate.js') +const { isSafeImageSrc } = require('../../utils/imageUrl.js') + +const DEFAULT_KARUO_LINK_AVATAR = '/assets/images/karuo-link-avatar.png' +const KARUO_USER_ID = 'ogpTW5Wbbo9DfSyB3-xCWN6EGc-g' /** 与首页固定「卡若」获客位重复时从横滑列表剔除(含历史误写「卡路」) */ function isKaruoHostDuplicateName(displayName) { @@ -92,11 +96,12 @@ Page({ mpUiLogoTitle: '卡若创业派对', mpUiLogoSubtitle: '来自派对房的真实故事', mpUiLinkKaruoText: '点击链接卡若', + /** 最终展示:后台 linkKaruoAvatar 或本包默认卡若照片 */ + mpUiLinkKaruoDisplay: DEFAULT_KARUO_LINK_AVATAR, mpUiSearchPlaceholder: '搜索章节标题或内容...', mpUiBannerTag: '推荐', mpUiBannerReadMore: '点击阅读', mpUiSuperTitle: '超级个体', - mpUiSuperLinkText: '获客入口', mpUiPickTitle: '精选推荐', mpUiLatestTitle: '最新新增' }, @@ -321,51 +326,62 @@ Page({ _applyHomeMpUi() { const h = app.globalData.configCache?.mpConfig?.mpUi?.homePage || {} + let linkKaruoAvatar = String(h.linkKaruoAvatar || h.linkKaruoImage || '').trim() + if (linkKaruoAvatar && !isSafeImageSrc(linkKaruoAvatar)) linkKaruoAvatar = '' this.setData({ mpUiLogoTitle: String(h.logoTitle || '卡若创业派对').trim() || '卡若创业派对', mpUiLogoSubtitle: String(h.logoSubtitle || '来自派对房的真实故事').trim() || '来自派对房的真实故事', mpUiLinkKaruoText: String(h.linkKaruoText || '点击链接卡若').trim() || '点击链接卡若', + mpUiLinkKaruoDisplay: linkKaruoAvatar || DEFAULT_KARUO_LINK_AVATAR, mpUiSearchPlaceholder: String(h.searchPlaceholder || '搜索章节标题或内容...').trim() || '搜索章节标题或内容...', mpUiBannerTag: String(h.bannerTag || '推荐').trim() || '推荐', mpUiBannerReadMore: String(h.bannerReadMoreText || '点击阅读').trim() || '点击阅读', mpUiSuperTitle: String(h.superSectionTitle || '超级个体').trim() || '超级个体', - mpUiSuperLinkText: String(h.superSectionLinkText || '获客入口').trim() || '获客入口', mpUiPickTitle: String(h.pickSectionTitle || '精选推荐').trim() || '精选推荐', mpUiLatestTitle: String(h.latestSectionTitle || '最新新增').trim() || '最新新增' }) + if (!linkKaruoAvatar) this._loadKaruoAvatarLazy() }, - /** 超级个体右侧文案:默认跳转找伙伴 Tab(路径可由 homePage.superSectionLinkPath 配置) */ - goSuperSectionLink() { - const p = String( - app.globalData.configCache?.mpConfig?.mpUi?.homePage?.superSectionLinkPath || '/pages/match/match' - ).trim() - if (p) navigateMpPath(p) + _loadKaruoAvatarLazy() { + app.request({ url: `/api/miniprogram/user/profile?userId=${KARUO_USER_ID}`, silent: true, timeout: 3000 }) + .then(res => { + if (res?.success && res.data?.avatar && isSafeImageSrc(res.data.avatar)) { + this.setData({ mpUiLinkKaruoDisplay: res.data.avatar }) + } + }) + .catch(() => {}) }, async loadFeatureConfig() { try { const hasCachedFeatures = app.globalData.features && typeof app.globalData.features.searchEnabled === 'boolean' - if (hasCachedFeatures) { - this.setData({ - searchEnabled: app.globalData.features.searchEnabled, - auditMode: app.globalData.auditMode || false - }) - this._applyHomeMpUi() - return + if (!hasCachedFeatures) { + const res = await app.getConfig() + const features = (res && res.features) || (res && res.data && res.data.features) || {} + const searchEnabled = features.searchEnabled !== false + if (!app.globalData.features) app.globalData.features = {} + app.globalData.features.searchEnabled = searchEnabled + if (typeof features.matchEnabled === 'boolean') app.globalData.features.matchEnabled = features.matchEnabled + if (typeof features.referralEnabled === 'boolean') app.globalData.features.referralEnabled = features.referralEnabled + const mp = (res && res.mpConfig) || {} + app.globalData.auditMode = !!mp.auditMode } - const res = await app.getConfig() - const features = (res && res.features) || {} - const mp = (res && res.mpConfig) || {} - const searchEnabled = features.searchEnabled !== false - const auditMode = !!mp.auditMode - if (!app.globalData.features) app.globalData.features = {} - app.globalData.features.searchEnabled = searchEnabled - app.globalData.auditMode = auditMode - this.setData({ searchEnabled, auditMode }) + await app.getAuditMode() + const searchEnabled = app.globalData.features?.searchEnabled !== false + this.setData({ + searchEnabled, + auditMode: app.globalData.auditMode || false + }) this._applyHomeMpUi() } catch (e) { - this.setData({ searchEnabled: true, auditMode: app.globalData.auditMode || false }) + try { + await app.getAuditMode() + } catch (_) {} + this.setData({ + searchEnabled: app.globalData.features?.searchEnabled !== false, + auditMode: app.globalData.auditMode || false + }) this._applyHomeMpUi() } }, @@ -459,6 +475,22 @@ Page({ // 阻止弹窗内部点击事件冒泡到遮罩层 stopPropagation() {}, + preventMove() {}, + + onLeadPrivacyAuthorize() { + this.onAgreePrivacyForLead() + }, + + onDisagreePrivacyForLead() { + if (app._privacyResolve) { + try { + app._privacyResolve({ event: 'disagree' }) + } catch (_) {} + app._privacyResolve = null + } + this.setData({ showPrivacyModal: false }) + }, + onLeadPhoneInput(e) { this.setData({ leadPhone: (e.detail.value || '').trim() }) }, diff --git a/miniprogram/pages/index/index.wxml b/miniprogram/pages/index/index.wxml index 85868358..05222397 100644 --- a/miniprogram/pages/index/index.wxml +++ b/miniprogram/pages/index/index.wxml @@ -16,7 +16,12 @@ {{mpUiLogoSubtitle}} - + + + + {{mpUiLinkKaruoText}} + + @@ -52,7 +57,6 @@ {{mpUiSuperTitle}} - {{mpUiSuperLinkText}} @@ -160,4 +164,30 @@ + + + + 温馨提示 + 使用手机号能力前,请先同意《用户隐私保护指引》 + + 拒绝 + + + + + + + 留下联系方式 + 方便卡若与您联系 + + 或手动输入 + + + + + + + + + diff --git a/miniprogram/pages/index/index.wxss b/miniprogram/pages/index/index.wxss index f8c22e4c..7fc9b66f 100644 --- a/miniprogram/pages/index/index.wxss +++ b/miniprogram/pages/index/index.wxss @@ -85,6 +85,10 @@ font-size: 20rpx; color: rgba(255, 255, 255, 0.7); white-space: nowrap; + max-width: 140rpx; + overflow: hidden; + text-overflow: ellipsis; + text-align: center; } .logo-title { @@ -963,6 +967,61 @@ height: 40rpx; } +/* ===== 隐私授权(与 avatar-nickname 对齐) ===== */ +.privacy-mask { + position: fixed; + inset: 0; + background: rgba(0, 0, 0, 0.6); + z-index: 2000; + display: flex; + align-items: center; + justify-content: center; + padding: 48rpx; + box-sizing: border-box; +} +.privacy-modal { + width: 100%; + max-width: 560rpx; + background: #17212F; + border-radius: 24rpx; + padding: 48rpx; + display: flex; + flex-direction: column; + align-items: center; + box-sizing: border-box; +} +.privacy-title { + font-size: 36rpx; + font-weight: 700; + color: #fff; + margin-bottom: 24rpx; +} +.privacy-desc { + font-size: 28rpx; + color: #94A3B8; + text-align: center; + line-height: 1.5; + margin-bottom: 40rpx; +} +.privacy-btn { + width: 100%; + height: 88rpx; + line-height: 88rpx; + text-align: center; + background: #5EEAD4; + color: #000; + font-size: 30rpx; + font-weight: 600; + border-radius: 16rpx; + border: none; +} +.privacy-btn::after { border: none; } +.privacy-cancel { + margin-top: 24rpx; + font-size: 28rpx; + color: #64748B; +} + /* ===== 链接卡若 - 留资弹窗 ===== */ .lead-mask { position: fixed; @@ -971,7 +1030,7 @@ top: 0; bottom: 0; background: rgba(0, 0, 0, 0.6); - z-index: 1000; + z-index: 2100; display: flex; align-items: center; justify-content: center; diff --git a/miniprogram/pages/match/match.wxml b/miniprogram/pages/match/match.wxml index eb9d8fb5..24d3146b 100644 --- a/miniprogram/pages/match/match.wxml +++ b/miniprogram/pages/match/match.wxml @@ -121,7 +121,8 @@ - + + {{currentMatch.nickname ? currentMatch.nickname[0] : '?'}} {{currentMatch.nickname}} diff --git a/miniprogram/pages/match/match.wxss b/miniprogram/pages/match/match.wxss index 7852ded2..106966af 100644 --- a/miniprogram/pages/match/match.wxss +++ b/miniprogram/pages/match/match.wxss @@ -445,6 +445,20 @@ flex-shrink: 0; } +.match-avatar-fallback { + display: flex; + align-items: center; + justify-content: center; + background: rgba(0, 206, 209, 0.15); + box-sizing: border-box; +} + +.match-avatar-fallback text { + font-size: 48rpx; + font-weight: 600; + color: #00CED1; +} + .match-info { flex: 1; min-width: 0; diff --git a/miniprogram/pages/member-detail/member-detail.js b/miniprogram/pages/member-detail/member-detail.js index 6051a6ff..48a7468a 100644 --- a/miniprogram/pages/member-detail/member-detail.js +++ b/miniprogram/pages/member-detail/member-detail.js @@ -10,6 +10,7 @@ const app = getApp() const { trackClick } = require('../../utils/trackClick') const { isSafeImageSrc } = require('../../utils/imageUrl.js') +const { resolveAvatarWithMbti } = require('../../utils/mbtiAvatar.js') Page({ data: { statusBarHeight: 44, navBarTotalPx: 88, member: null, loading: true, isOwnProfile: false }, @@ -29,6 +30,9 @@ Page({ }, async loadMember(id) { + try { + if (app.loadMbtiAvatarsMap) await app.loadMbtiAvatarsMap() + } catch (_) {} const myId = app.globalData.userInfo?.id const isOwn = !!(myId && id != null && String(id) === String(myId)) if (isOwn && app.globalData.isLoggedIn && myId) { @@ -114,10 +118,19 @@ Page({ enrichAndFormat(raw) { const e = (v) => this._emptyIfPlaceholder(v) const rawAv = raw.avatar || raw.vipAvatar || raw.vip_avatar || '' + let dispAv = isSafeImageSrc(rawAv) ? String(rawAv).trim() : '' + if (!dispAv) { + dispAv = resolveAvatarWithMbti( + '', + raw.mbti, + app.globalData.mbtiAvatarsMap || {}, + app.globalData.baseUrl || '' + ) + } const merged = { id: raw.id, name: raw.nickname || raw.name || raw.vipName || raw.vip_name || '创业者', - avatar: isSafeImageSrc(rawAv) ? String(rawAv).trim() : '', + avatar: dispAv, isVip: !!(raw.isVip || raw.is_vip), mbti: e(raw.mbti), region: e(raw.region), @@ -275,7 +288,7 @@ Page({ const member = this.data.member if (!member) return const nickname = (member.name || 'TA').trim() || 'TA' - trackClick('member_detail', 'btn_click', '链接头像_' + (member.id || '')) + trackClick('member_detail', 'avatar_click', '链接头像_' + (member.id || '')) if (!app.globalData.isLoggedIn || !app.globalData.userInfo) { wx.showModal({ diff --git a/miniprogram/pages/my/my.js b/miniprogram/pages/my/my.js index ac109d75..c4175f1b 100644 --- a/miniprogram/pages/my/my.js +++ b/miniprogram/pages/my/my.js @@ -20,6 +20,8 @@ Page({ // 用户状态 isLoggedIn: false, userInfo: null, + /** 我的页头像展示:微信头像或 MBTI 映射图 */ + profileAvatarDisplay: '', // 统计数据 totalSections: 62, @@ -142,6 +144,16 @@ Page({ }) }, + async _refreshMyAvatarDisplay(safeUser) { + if (!safeUser || !app.globalData.isLoggedIn) return + try { + if (app.loadMbtiAvatarsMap) await app.loadMbtiAvatarsMap() + } catch (_) {} + const url = app.resolveAvatarWithMbti ? app.resolveAvatarWithMbti(safeUser.avatar, safeUser.mbti) : '' + if (!this.data.isLoggedIn) return + this.setData({ profileAvatarDisplay: url || '' }) + }, + async loadFeatureConfig() { try { const res = await app.getConfig() @@ -150,8 +162,9 @@ Page({ const referralEnabled = features.referralEnabled !== false const searchEnabled = features.searchEnabled !== false const mp = (res && res.mpConfig) || {} - const auditMode = !!mp.auditMode - app.globalData.auditMode = auditMode + app.globalData.auditMode = !!mp.auditMode + await app.getAuditMode() + const auditMode = app.globalData.auditMode || false app.globalData.features = { matchEnabled, referralEnabled, searchEnabled } this.setData({ matchEnabled, referralEnabled, searchEnabled, auditMode }) this._applyMyMpUiLabels() @@ -181,10 +194,11 @@ Page({ this.setData({ isLoggedIn: true, userInfo: safeUser, + profileAvatarDisplay: '', userIdShort, userWechat, readCount: 0, - referralCount: userInfo.referralCount || 0, + referralCount: 0, earnings: '-', pendingEarnings: '-', earningsLoading: true, @@ -200,12 +214,14 @@ Page({ this.loadPendingConfirm() this.loadVipStatus() this.loadWalletBalance() + this._refreshMyAvatarDisplay(safeUser) } else { const guestReadCount = app.getReadCount() const guestRecent = this._mergeRecentChaptersFromLocal([]) this.setData({ isLoggedIn: false, userInfo: null, + profileAvatarDisplay: '', userIdShort: '', readCount: guestReadCount, readCountText: formatStatNum(guestReadCount), @@ -644,6 +660,7 @@ Page({ const userInfo = this.data.userInfo userInfo.avatar = avatarUrl this.setData({ userInfo }) + this._refreshMyAvatarDisplay(userInfo) app.globalData.userInfo = userInfo wx.setStorageSync('userInfo', userInfo) @@ -689,9 +706,9 @@ Page({ } }, - // 点击昵称:跳转资料编辑页(type="nickname" 在弹窗内无法触发微信昵称选择器,需在主页面) + // 点击昵称:先进个人资料名片页,再在右上角进入编辑(与需求「编辑收进名片流」一致) editNickname() { - wx.navigateTo({ url: '/pages/profile-edit/profile-edit' }) + wx.navigateTo({ url: '/pages/profile-show/profile-show' }) }, // 关闭昵称弹窗 @@ -916,14 +933,17 @@ Page({ }, // 跳转到推广中心(需登录) - goToReferral() { - trackClick('my', 'nav_click', '推广中心') + goToReferral(e) { + const focus = e && e.currentTarget && e.currentTarget.dataset ? (e.currentTarget.dataset.focus || '') : '' + const action = focus === 'bindings' ? '推荐好友' : focus === 'earnings' ? '我的收益' : '推广中心' + trackClick('my', 'nav_click', action) if (!this.data.isLoggedIn) { this.showLogin() return } if (!this.data.referralEnabled) return - wx.navigateTo({ url: '/pages/referral/referral' }) + const url = focus ? `/pages/referral/referral?focus=${focus}` : '/pages/referral/referral' + wx.navigateTo({ url }) }, // 退出登录 diff --git a/miniprogram/pages/my/my.wxml b/miniprogram/pages/my/my.wxml index eeefac3c..0004fba4 100644 --- a/miniprogram/pages/my/my.wxml +++ b/miniprogram/pages/my/my.wxml @@ -22,7 +22,7 @@ - + {{userInfo.nickname ? userInfo.nickname[0] : '?'}} VIP @@ -32,7 +32,7 @@ {{userInfo.nickname || '点击设置昵称'}} - + {{mpUiCardLabel}} {{isVip ? mpUiVipLabelVip : mpUiVipLabelGuest}} @@ -43,7 +43,7 @@ {{readCountText || '0'}} {{mpUiReadStatLabel}} - + {{referralCount}} 推荐好友 @@ -51,7 +51,7 @@ {{matchHistoryText}} 匹配伙伴 - + {{pendingEarnings || '0.00'}} 我的收益 diff --git a/miniprogram/pages/my/my.wxss b/miniprogram/pages/my/my.wxss index 79ff7e1a..b8dbdede 100644 --- a/miniprogram/pages/my/my.wxss +++ b/miniprogram/pages/my/my.wxss @@ -79,6 +79,8 @@ overflow: hidden; text-overflow: ellipsis; white-space: nowrap; flex: 1; min-width: 0; } .profile-actions-row { display: flex; flex-wrap: wrap; align-items: center; gap: 12rpx; } +/* 名片/会员中心:紧挨昵称下方(在 profile-meta 内) */ +.profile-actions-under-name { margin-top: 4rpx; } /* 名片 / 会员中心:统一品牌青,与 tabBar 选中色一致 */ .profile-action-btn { padding: 12rpx 28rpx; border: 2rpx solid #4FD1C5; color: #4FD1C5; diff --git a/miniprogram/pages/profile-edit/profile-edit.js b/miniprogram/pages/profile-edit/profile-edit.js index 0fdf293e..f9a0cccc 100644 --- a/miniprogram/pages/profile-edit/profile-edit.js +++ b/miniprogram/pages/profile-edit/profile-edit.js @@ -48,6 +48,8 @@ Page({ wizardMode: false, wizardStep: 1, totalWizardSteps: 3, + /** 头像区展示:含 MBTI 默认图 */ + avatarPreviewUrl: '', }, onLoad(options) { @@ -83,6 +85,9 @@ Page({ app.request({ url: `/api/miniprogram/user/profile?userId=${userId}`, silent: true }), app.request({ url: `/api/miniprogram/vip/status?userId=${userId}`, silent: true }), ]) + try { + if (app.loadMbtiAvatarsMap) await app.loadMbtiAvatarsMap() + } catch (_) {} this.setData({ isVip: vipRes?.data?.isVip || false }) const res = profileRes if (res?.success && res.data) { @@ -110,6 +115,7 @@ Page({ loading: false, }) this._applyWizardModeFromProfile(d) + this._syncAvatarPreview() setTimeout(() => this.generateShareCard(), 200) } else { this.setData({ loading: false }) @@ -367,7 +373,22 @@ Page({ onMbtiPickerChange(e) { const i = parseInt(e.detail.value, 10) - this.setData({ mbtiIndex: i, mbti: MBTI_OPTIONS[i] }) + this.setData({ mbtiIndex: i, mbti: MBTI_OPTIONS[i] }, () => this._syncAvatarPreview()) + }, + + _syncAvatarPreview() { + try { + const { resolveAvatarWithMbti } = require('../../utils/mbtiAvatar.js') + const url = resolveAvatarWithMbti( + this.data.avatar, + this.data.mbti, + app.globalData.mbtiAvatarsMap || {}, + app.globalData.baseUrl || '' + ) + this.setData({ avatarPreviewUrl: url || '' }) + } catch (_) { + this.setData({ avatarPreviewUrl: (this.data.avatar || '').trim() }) + } }, // 微信原生 chooseAvatar 回调(点击头像直接弹出原生选择器:用微信头像/从相册选择/拍照) @@ -400,7 +421,7 @@ Page({ if (avatarUrl && !avatarUrl.startsWith('http')) { avatarUrl = app.globalData.baseUrl + avatarUrl } - this.setData({ avatar: avatarUrl }) + this.setData({ avatar: avatarUrl }, () => this._syncAvatarPreview()) const avatarToSave = toAvatarPath(avatarUrl) await app.request({ url: '/api/miniprogram/user/profile', diff --git a/miniprogram/pages/profile-edit/profile-edit.wxml b/miniprogram/pages/profile-edit/profile-edit.wxml index 52fe55d9..851cef9e 100644 --- a/miniprogram/pages/profile-edit/profile-edit.wxml +++ b/miniprogram/pages/profile-edit/profile-edit.wxml @@ -29,7 +29,7 @@ + + + + + +