Files
Mycontent/miniprogram/utils/mpPagePopups.js
2026-04-02 19:20:19 +08:00

130 lines
5.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 从 mpConfig.mpUi.pagePopupItems 按 pagePath + key 取文案(管理端 CRUD
* 兼容旧版 mpUi.memberDetailPage / readPage 字段。
* 云端未配置或 content 为空时,使用本文件内写死兜底(与种子文案一致)。
*
* 当前代码显式引用的键(与 soul-admin 默认种子 / db.defaultMpUi 一致,勿改 key 除非双端同步):
* - MEMBER_PATH unlockIntroTitle, unlockIntroBody → member-detail.js _showUnlockIntroThenLogin
* - READ_PATH beforeLoginHint, singlePageTitle, singlePagePaywallHint → read.js onLoad
* - READ_PATH global* → app.js getGlobalPopupContent与 pagePopupItems 同页路径存全局键)
*/
const MEMBER_PATH = '/pages/member-detail/member-detail'
const READ_PATH = '/pages/read/read'
/** 阅读页 mpUi 兜底pagePopupItems / readPage 均无或为空时) */
const READ_PAGE_FALLBACK = {
beforeLoginHint: '试读进度与下方百分比以后台配置为准;登录后可购买解锁全文。',
singlePageTitle: '解锁完整内容',
singlePagePaywallHint:
'当前为朋友圈单页预览,无法在此登录或付款。请点击底部「前往小程序」进入完整版后再解锁本章。',
}
/** 成员详情解锁说明兜底 */
const MEMBER_DETAIL_FALLBACK = {
unlockIntroTitle: '解锁与链接说明',
unlockIntroBody:
'「链接」用于提交留资,由对方通过获客计划跟进;「解锁」用于复制手机/微信号后自行添加好友。\n\n请确认已了解后再登录。',
}
/**
* 全局弹窗键与 app.js showModal 兜底一致pagePath 仍为 READ_PATHkey 以 global 开头)
*/
const GLOBAL_POPUP_FALLBACK = {
globalSinglePageAuthTitle: '请打开完整小程序',
globalSinglePageAuthBody:
'当前是朋友圈预览,无法在这里登录或付款。请先点击屏幕底部「前往小程序」,进入完整版后再解锁本章。',
globalAvatarGuideTitle: '设置头像与昵称',
globalAvatarGuideBody: '头像与昵称会出现在名片与匹配卡片上,方便伙伴认出你。',
globalVipProfileHintTitle: '补全对外展示信息',
globalVipProfileHintBody: 'VIP 名片与派对场景会展示头像与昵称,补全后对方更容易认出你。',
globalVipPhoneTitle: '补全手机号',
globalVipPhoneBody: '手机号用于找伙伴、提现验证与重要通知,仅本人可见。',
globalVipWechatOptionalTitle: '补全微信号(可选)',
globalVipWechatOptionalBody: '填写微信号后,对方在允许的场景下能更快加到你;不填也可继续使用。',
globalAppUpdateTitle: '更新提示',
globalAppUpdateBody: '新版本已准备好,重启后即可使用',
}
function getList(app) {
const mpUi = app.globalData.configCache && app.globalData.configCache.mpConfig
? app.globalData.configCache.mpConfig.mpUi
: null
const list = mpUi && mpUi.pagePopupItems
return Array.isArray(list) ? list : []
}
/**
* @param {object} app getApp()
* @param {string} pagePath 如 /pages/read/read
* @param {string} key 英文键
* @returns {string} 文案,未配置时返回空串
*/
function getPagePopupContent(app, pagePath, key) {
const list = getList(app)
const it = list.find(function (p) {
return p && p.pagePath === pagePath && p.key === key
})
if (it && typeof it.content === 'string') return it.content.trim()
return ''
}
/**
* 带旧版 readPage / memberDetailPage 兜底
*/
function getReadPageContent(app, key) {
const v = getPagePopupContent(app, READ_PATH, key)
if (v) return v
const rp = (app.globalData.configCache && app.globalData.configCache.mpConfig &&
app.globalData.configCache.mpConfig.mpUi &&
app.globalData.configCache.mpConfig.mpUi.readPage) || {}
if (key === 'beforeLoginHint') {
const s = String(rp.beforeLoginHint || '').trim()
return s || READ_PAGE_FALLBACK.beforeLoginHint
}
if (key === 'singlePageTitle') {
const s = String(rp.singlePageTitle || '').trim()
return s || READ_PAGE_FALLBACK.singlePageTitle
}
if (key === 'singlePagePaywallHint') {
const s = String(rp.singlePagePaywallHint || '').trim()
return s || READ_PAGE_FALLBACK.singlePagePaywallHint
}
return ''
}
function getMemberDetailContent(app, key) {
const v = getPagePopupContent(app, MEMBER_PATH, key)
if (v) return v
const md = (app.globalData.configCache && app.globalData.configCache.mpConfig &&
app.globalData.configCache.mpConfig.mpUi &&
app.globalData.configCache.mpConfig.mpUi.memberDetailPage) || {}
if (key === 'unlockIntroTitle') {
const s = String(md.unlockIntroTitle || '').trim()
return s || MEMBER_DETAIL_FALLBACK.unlockIntroTitle
}
if (key === 'unlockIntroBody') {
const s = String(md.unlockIntroBody || '').trim()
return s || MEMBER_DETAIL_FALLBACK.unlockIntroBody
}
return ''
}
/**
* 全局弹窗文案:与阅读页共用 pagePath后台种子挂在 /pages/read/readkey 为 global* 开头
*/
function getGlobalPopupContent(app, key) {
const v = getPagePopupContent(app, READ_PATH, key)
if (v) return v
return GLOBAL_POPUP_FALLBACK[key] || ''
}
module.exports = {
getPagePopupContent,
getReadPageContent,
getMemberDetailContent,
getGlobalPopupContent,
MEMBER_PATH,
READ_PATH,
}