后端 API:AI 对话/报告/余额告警 等服务与路由;小程序 tabBar 配置与分润相关能力;出站推送 Webhook 与管理端调试;飞书留资、小程序数据分析 等支撑;多份 数据库迁移(AI 聊天、灵魂文章、tabBar、分润等)。 管理端 / 超管:看板、用户/订单/分销/财务、设置与 小程序 tabBar 管理、分润规则、灵魂文章、AI 配置与监控 等大量页面与能力扩展;主题与布局更新。 抖音小程序:与微信侧在 结果页/购买/个人中心 等方向做了同步或优化。 另含 部署/脚本、开发文档 等配套更新。 邀请码与解锁:后端 分销/邀请码 接口与 add_invite_codes 等 SQL;小程序侧 邀请码弹窗组件、个人中心/推广/多类结果页 的填写入口与 解锁门控(inviteCodeGate、unlockGate);并补充 《小程序解锁引导与邀请码方案》 文档。 超管后台:路由与 企业中心(EnterpriseHub) 等交互与结构优化。 小程序体验:在 首页结果、推广、各测评结果页 上继续打磨;与 邀请码门控、审核门控 小步联动。
84 lines
2.7 KiB
JavaScript
84 lines
2.7 KiB
JavaScript
/**
|
||
* 超管审核相关:隐藏神仙 AI Tab/入口;提审模式下另由后端/各页关闭虚拟商品与「了解自己」深度套餐。
|
||
* - miniprogramAuditMode:提审专用(含虚拟支付合规)
|
||
* - maintenanceMode / reviewMode:面相审核(用户口语「审核模式」常指其一)
|
||
*/
|
||
|
||
/** 临时:为 true 时在客户端忽略审核/提审隐藏逻辑。平时必须为 false,由 runtime 与后端 miniprogramAuditMode 等决定展示 */
|
||
const TEMP_FORCE_SHOW_ALL_HIDDEN_UI = false
|
||
|
||
/**
|
||
* 在 getRuntimeConfig 写入 globalData 之后调用:把审核相关开关置为关闭,供各页与 TabBar 使用。
|
||
*/
|
||
function applyAuditUiOverride(app) {
|
||
if (!TEMP_FORCE_SHOW_ALL_HIDDEN_UI || !app || !app.globalData) return
|
||
app.globalData.reviewMode = false
|
||
app.globalData.maintenanceMode = false
|
||
app.globalData.miniprogramAuditMode = false
|
||
}
|
||
|
||
/** 是否因审核/面相权限隐藏中间凸起 Tab(拍摄) */
|
||
function shouldHideTabBarHighlightFab(gd) {
|
||
if (TEMP_FORCE_SHOW_ALL_HIDDEN_UI) return false
|
||
if (!gd) return false
|
||
const ep = gd.enterprisePermissions
|
||
const faceOff = !!(ep && ep.face === false)
|
||
return !!(gd.reviewMode || gd.maintenanceMode) || faceOff
|
||
}
|
||
|
||
function isAuditHideAiMode(gd) {
|
||
if (TEMP_FORCE_SHOW_ALL_HIDDEN_UI) return false
|
||
if (!gd) return false
|
||
return !!(gd.miniprogramAuditMode || gd.maintenanceMode || gd.reviewMode)
|
||
}
|
||
|
||
/**
|
||
* 隐藏「填写邀请码 / 展示我的邀请码」等分销向入口(与「我的」页推广区策略一致:
|
||
* reviewMode / maintenanceMode / miniprogramAuditMode 任一开启即隐藏)
|
||
*/
|
||
function shouldHideInviteCodeEntry(gd) {
|
||
if (TEMP_FORCE_SHOW_ALL_HIDDEN_UI) return false
|
||
if (!gd) return false
|
||
return !!(gd.reviewMode || gd.maintenanceMode || gd.miniprogramAuditMode)
|
||
}
|
||
|
||
function redirectIfMiniprogramAudit(message) {
|
||
const app = getApp()
|
||
const gd = app && app.globalData
|
||
if (!isAuditHideAiMode(gd)) return false
|
||
wx.showToast({ title: message || '功能升级中', icon: 'none' })
|
||
setTimeout(() => {
|
||
wx.switchTab({ url: '/pages/index/index' })
|
||
}, 300)
|
||
return true
|
||
}
|
||
|
||
/**
|
||
* 先拉 runtime(若存在),再若提审则踢回首页;否则执行 callback。
|
||
*/
|
||
function ensureRuntimeThenGate(callback) {
|
||
const app = getApp()
|
||
const run = () => {
|
||
if (isAuditHideAiMode(app.globalData)) {
|
||
redirectIfMiniprogramAudit()
|
||
return
|
||
}
|
||
if (typeof callback === 'function') callback()
|
||
}
|
||
if (app && typeof app.getRuntimeConfig === 'function') {
|
||
app.getRuntimeConfig().then(run).catch(run)
|
||
return
|
||
}
|
||
run()
|
||
}
|
||
|
||
module.exports = {
|
||
TEMP_FORCE_SHOW_ALL_HIDDEN_UI,
|
||
applyAuditUiOverride,
|
||
shouldHideTabBarHighlightFab,
|
||
isAuditHideAiMode,
|
||
shouldHideInviteCodeEntry,
|
||
redirectIfMiniprogramAudit,
|
||
ensureRuntimeThenGate
|
||
}
|