微信小程序:自定义底栏接入 AI 入口(含图标与样式)、AI 聊天相关页面与历史/报告等能力;审核模式与配置联动;资料/企业/首页/授权等页面与 app 入口配合调整。
后端 API:AI 对话/报告/余额告警 等服务与路由;小程序 tabBar 配置与分润相关能力;出站推送 Webhook 与管理端调试;飞书留资、小程序数据分析 等支撑;多份 数据库迁移(AI 聊天、灵魂文章、tabBar、分润等)。 管理端 / 超管:看板、用户/订单/分销/财务、设置与 小程序 tabBar 管理、分润规则、灵魂文章、AI 配置与监控 等大量页面与能力扩展;主题与布局更新。 抖音小程序:与微信侧在 结果页/购买/个人中心 等方向做了同步或优化。 另含 部署/脚本、开发文档 等配套更新。 邀请码与解锁:后端 分销/邀请码 接口与 add_invite_codes 等 SQL;小程序侧 邀请码弹窗组件、个人中心/推广/多类结果页 的填写入口与 解锁门控(inviteCodeGate、unlockGate);并补充 《小程序解锁引导与邀请码方案》 文档。 超管后台:路由与 企业中心(EnterpriseHub) 等交互与结构优化。 小程序体验:在 首页结果、推广、各测评结果页 上继续打磨;与 邀请码门控、审核门控 小步联动。
This commit is contained in:
@@ -8,6 +8,9 @@ const {
|
||||
needsResultProfileGate,
|
||||
navigateToCompleteProfileAfterPhoneIfNeeded
|
||||
} = require('../../utils/phoneAuth.js')
|
||||
const unlockGate = require('../../utils/unlockGate.js')
|
||||
const inviteCodeGate = require('../../utils/inviteCodeGate.js')
|
||||
const { shouldHideInviteCodeEntry } = require('../../utils/miniprogramAuditGate.js')
|
||||
const {
|
||||
slicePreviewText,
|
||||
slicePreviewList,
|
||||
@@ -79,7 +82,9 @@ Page({
|
||||
{ id: 'sec-cta', label: '深度方案', emoji: '💎' }
|
||||
],
|
||||
scrollTarget: '',
|
||||
activeSection: ''
|
||||
activeSection: '',
|
||||
showInviteCodeDialog: false,
|
||||
hideInviteCodeEntry: false
|
||||
},
|
||||
|
||||
onTapSectionNav(e) {
|
||||
@@ -208,7 +213,11 @@ Page({
|
||||
},
|
||||
|
||||
onShow() {
|
||||
this.setData({ hasPhone: hasPhone() })
|
||||
const gd = app.globalData || {}
|
||||
this.setData({
|
||||
hasPhone: hasPhone(),
|
||||
hideInviteCodeEntry: shouldHideInviteCodeEntry(gd)
|
||||
})
|
||||
if (this.data.testResultId && this.data.result) {
|
||||
this._syncDiscGate()
|
||||
} else if (!this.data.testResultId) {
|
||||
@@ -280,8 +289,9 @@ Page({
|
||||
onTapReadFull() {
|
||||
try { require('../../utils/analytics').track('tap_read_full', { type: 'disc' }) } catch (e) {}
|
||||
if (this.data.profileGate) {
|
||||
unlockGate.scrollToUnlockAnchor(this, { scrollIntoView: true })
|
||||
wx.showToast({
|
||||
title: this.data.hasPhone ? '请先完善头像与昵称' : '请先点击下方「登录解锁全文」',
|
||||
title: this.data.hasPhone ? '请先完善头像与昵称' : '请在上滑区域内完成手机号授权',
|
||||
icon: 'none'
|
||||
})
|
||||
return
|
||||
@@ -356,22 +366,46 @@ Page({
|
||||
try { require('../../utils/analytics').track('tap_unlock_full', { type: 'disc', amountYuan: payInfo.amountYuan }) } catch (e) {}
|
||||
app.ensureLogin && app.ensureLogin().then((logged) => {
|
||||
if (!logged) { wx.showToast({ title: '请先登录', icon: 'none' }); return }
|
||||
payment.purchaseDiscTest({
|
||||
testResultId: testResultId || undefined,
|
||||
success: () => {
|
||||
wx.showToast({ title: '已解锁完整报告', icon: 'success' })
|
||||
this.setData({ 'payInfo.isPaid': true })
|
||||
this._syncJourney()
|
||||
if (testResultId && !hasReloadedAfterPay) {
|
||||
this.setData({ hasReloadedAfterPay: true })
|
||||
setTimeout(() => this.loadDetail(testResultId), 500)
|
||||
}
|
||||
},
|
||||
fail: () => {}
|
||||
unlockGate.ensureUnlockPrerequisitesBeforePay(this, { scrollIntoView: true }).then((ok) => {
|
||||
if (!ok) return
|
||||
inviteCodeGate.ensureInviteCodeGate(this).then((go) => {
|
||||
if (!go) return
|
||||
payment.purchaseDiscTest({
|
||||
testResultId: testResultId || undefined,
|
||||
success: () => {
|
||||
wx.showToast({ title: '已解锁完整报告', icon: 'success' })
|
||||
this.setData({ 'payInfo.isPaid': true })
|
||||
this._syncJourney()
|
||||
if (testResultId && !hasReloadedAfterPay) {
|
||||
this.setData({ hasReloadedAfterPay: true })
|
||||
setTimeout(() => this.loadDetail(testResultId), 500)
|
||||
}
|
||||
},
|
||||
fail: () => {}
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
openInviteCodeFill() {
|
||||
app.ensureLogin().then((ok) => {
|
||||
if (!ok) {
|
||||
wx.showToast({ title: '请先登录', icon: 'none' })
|
||||
return
|
||||
}
|
||||
inviteCodeGate.openInviteCodeDialog(this)
|
||||
})
|
||||
},
|
||||
|
||||
onInviteCodeSkip() {
|
||||
inviteCodeGate.finishInviteCodeGate(this, true)
|
||||
},
|
||||
|
||||
onInviteCodeSuccess() {
|
||||
inviteCodeGate.finishInviteCodeGate(this, true)
|
||||
},
|
||||
|
||||
retakeTest() {
|
||||
if (!this.data.testResultId) {
|
||||
wx.removeStorageSync('discResult')
|
||||
|
||||
Reference in New Issue
Block a user