更新首页逻辑以支持动态标题生成,优化用户体验。调整管理后台资源文件,替换旧的 JavaScript 和 CSS 文件,提升页面性能和样式一致性。同时,更新数据库结构以支持更细粒度的推送状态。
This commit is contained in:
@@ -321,8 +321,11 @@ Page({
|
||||
|
||||
_applyHomeMpUi() {
|
||||
const h = app.globalData.configCache?.mpConfig?.mpUi?.homePage || {}
|
||||
const baseTitle = String(h.logoTitle || '卡若创业派对').trim() || '卡若创业派对'
|
||||
const prefix = String(h.pinnedTitlePrefix != null ? h.pinnedTitlePrefix : '派对会员').trim()
|
||||
const tpl = String(h.pinnedMainTitleTemplate || '').trim()
|
||||
const patch = {
|
||||
mpUiLogoTitle: String(h.logoTitle || '卡若创业派对').trim() || '卡若创业派对',
|
||||
mpUiLogoTitle: baseTitle,
|
||||
mpUiLogoSubtitle: String(h.logoSubtitle || '来自派对房的真实故事').trim() || '来自派对房的真实故事',
|
||||
mpUiSearchPlaceholder: String(h.searchPlaceholder || '搜索章节标题或内容...').trim() || '搜索章节标题或内容...',
|
||||
mpUiBannerTag: String(h.bannerTag || '推荐').trim() || '推荐',
|
||||
@@ -335,13 +338,29 @@ Page({
|
||||
if (pinned && pinned.token) {
|
||||
const displayAv =
|
||||
pinned.avatar && isSafeImageSrc(pinned.avatar) ? pinned.avatar : DEFAULT_KARUO_LINK_AVATAR
|
||||
patch.mpUiLinkKaruoText = `点击链接${pinned.name || '好友'}`
|
||||
const nm = pinned.name || '好友'
|
||||
patch.mpUiLinkKaruoText = `点击链接${nm}`
|
||||
patch.mpUiLinkKaruoDisplay = displayAv
|
||||
let mainTitle = baseTitle
|
||||
if (tpl) {
|
||||
mainTitle = tpl
|
||||
.replace(/\{\{name\}\}/g, nm)
|
||||
.replace(/\{\{prefix\}\}/g, prefix)
|
||||
.trim() || baseTitle
|
||||
} else if (prefix) {
|
||||
mainTitle = `${prefix} · ${nm}`
|
||||
} else {
|
||||
mainTitle = `@${nm}`
|
||||
}
|
||||
patch.mpUiLogoTitle = mainTitle
|
||||
} else {
|
||||
patch.mpUiLinkKaruoText = ''
|
||||
patch.mpUiLinkKaruoDisplay = DEFAULT_KARUO_LINK_AVATAR
|
||||
}
|
||||
this.setData(patch)
|
||||
try {
|
||||
wx.setNavigationBarTitle({ title: patch.mpUiLogoTitle || '首页' })
|
||||
} catch (_) {}
|
||||
},
|
||||
|
||||
/** 拉取后台置顶 @人物,合并到首页右上角「链接」区 */
|
||||
|
||||
@@ -30,6 +30,28 @@ Page({
|
||||
wx.navigateTo({ url: '/pages/profile-edit/profile-edit?full=1' })
|
||||
},
|
||||
|
||||
/**
|
||||
* 未登录解锁前:先展示后台可配的「链接 vs 解锁」说明,用户确认后再弹出登录引导(mpUi.memberDetailPage)
|
||||
*/
|
||||
_showUnlockIntroThenLogin(afterConfirm) {
|
||||
const mp = app.globalData.configCache?.mpConfig?.mpUi?.memberDetailPage || {}
|
||||
const title = String(mp.unlockIntroTitle || '解锁与链接说明').trim() || '解锁与链接说明'
|
||||
const body = String(
|
||||
mp.unlockIntroBody ||
|
||||
'「链接」用于提交留资,由对方通过获客计划跟进;「解锁」用于复制手机/微信号后自行添加好友。\n\n请确认已了解后再登录。',
|
||||
).trim()
|
||||
wx.showModal({
|
||||
title,
|
||||
content: body,
|
||||
confirmText: '我知道了',
|
||||
cancelText: '取消',
|
||||
success: (r) => {
|
||||
if (!r.confirm) return
|
||||
if (typeof afterConfirm === 'function') afterConfirm()
|
||||
},
|
||||
})
|
||||
},
|
||||
|
||||
async loadMember(id) {
|
||||
try {
|
||||
if (app.loadMbtiAvatarsMap) await app.loadMbtiAvatarsMap()
|
||||
@@ -377,14 +399,16 @@ Page({
|
||||
if (field === 'wechat' && member.wechatUnlocked) return true
|
||||
if (field === 'contact' && member.contactUnlocked) return true
|
||||
if (!app.globalData.isLoggedIn) {
|
||||
wx.showModal({
|
||||
title: '需要登录',
|
||||
content: field === 'wechat'
|
||||
? '登录后可解锁并复制对方微信号,再按步骤去微信添加好友。'
|
||||
: '登录后可解锁并复制对方手机号,便于添加好友或回拨。',
|
||||
confirmText: '去登录',
|
||||
cancelText: '取消',
|
||||
success: (res) => { if (res.confirm) wx.switchTab({ url: '/pages/my/my' }) }
|
||||
this._showUnlockIntroThenLogin(() => {
|
||||
wx.showModal({
|
||||
title: '需要登录',
|
||||
content: field === 'wechat'
|
||||
? '登录后可解锁并复制对方微信号,再按步骤去微信添加好友。'
|
||||
: '登录后可解锁并复制对方手机号,便于添加好友或回拨。',
|
||||
confirmText: '去登录',
|
||||
cancelText: '取消',
|
||||
success: (res) => { if (res.confirm) wx.switchTab({ url: '/pages/my/my' }) },
|
||||
})
|
||||
})
|
||||
return false
|
||||
}
|
||||
@@ -445,12 +469,14 @@ Page({
|
||||
if (!member?.id || (field !== 'contact' && field !== 'wechat')) return
|
||||
const isLoggedIn = app.globalData.isLoggedIn
|
||||
if (!isLoggedIn) {
|
||||
wx.showModal({
|
||||
title: '需要登录',
|
||||
content: '请先登录后再解锁超级个体联系方式',
|
||||
confirmText: '去登录',
|
||||
cancelText: '取消',
|
||||
success: (res) => { if (res.confirm) wx.switchTab({ url: '/pages/my/my' }) }
|
||||
this._showUnlockIntroThenLogin(() => {
|
||||
wx.showModal({
|
||||
title: '需要登录',
|
||||
content: '请先登录后再解锁超级个体联系方式',
|
||||
confirmText: '去登录',
|
||||
cancelText: '取消',
|
||||
success: (res) => { if (res.confirm) wx.switchTab({ url: '/pages/my/my' }) },
|
||||
})
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
@@ -115,4 +115,11 @@ Page({
|
||||
goBack() {
|
||||
getApp().goBackOrToHome()
|
||||
},
|
||||
|
||||
/** 与超级个体同款名片:后台为导师绑定 userId 后展示 */
|
||||
goMemberCard() {
|
||||
const id = this.data.mentor && this.data.mentor.userId
|
||||
if (!id) return
|
||||
wx.navigateTo({ url: `/pages/member-detail/member-detail?id=${encodeURIComponent(String(id))}` })
|
||||
},
|
||||
})
|
||||
|
||||
@@ -17,6 +17,10 @@
|
||||
<text class="mentor-name">{{mentor.name}}</text>
|
||||
<text class="mentor-intro">{{mentor.intro}}</text>
|
||||
<view class="mentor-quote" wx:if="{{mentor.quote}}">{{mentor.quote}}</view>
|
||||
<view class="mentor-card-link" wx:if="{{mentor.userId}}" bindtap="goMemberCard">
|
||||
<text class="mentor-card-link-text">查看派对会员名片(与超级个体同页)</text>
|
||||
<icon name="chevron-right" size="28" color="rgba(0,206,209,0.85)" customClass="mentor-card-link-arrow"></icon>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="block" wx:if="{{mentor.whyFind}}">
|
||||
|
||||
@@ -15,6 +15,22 @@
|
||||
.mentor-intro { font-size: 28rpx; color: #4FD1C5; font-weight: 500; margin-bottom: 24rpx; }
|
||||
.mentor-quote { padding: 32rpx; background: #1E1E1E; border-left: 8rpx solid #4FD1C5; border-radius: 24rpx; font-size: 28rpx; color: #d4d4d8; text-align: left; width: 100%; max-width: 600rpx; box-sizing: border-box; }
|
||||
|
||||
.mentor-card-link {
|
||||
margin-top: 24rpx;
|
||||
padding: 20rpx 28rpx;
|
||||
background: rgba(79, 209, 197, 0.08);
|
||||
border: 1rpx solid rgba(79, 209, 197, 0.35);
|
||||
border-radius: 16rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
width: 100%;
|
||||
max-width: 600rpx;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.mentor-card-link-text { font-size: 26rpx; color: #4FD1C5; flex: 1; padding-right: 16rpx; text-align: left; }
|
||||
.mentor-card-link-arrow { flex-shrink: 0; }
|
||||
|
||||
.block { padding: 0 24rpx 64rpx; }
|
||||
.block-header { display: flex; align-items: center; margin-bottom: 24rpx; }
|
||||
.block-num { background: #4FD1C5; color: #000; font-size: 24rpx; font-weight: bold; padding: 8rpx 20rpx; border-radius: 999rpx; margin-right: 16rpx; }
|
||||
|
||||
@@ -614,6 +614,16 @@ Page({
|
||||
wx.navigateTo({ url: '/pages/profile-edit/profile-edit' })
|
||||
},
|
||||
|
||||
/** 资料卡右侧齿轮:进入资料编辑(完整一页编辑,与分步向导区分) */
|
||||
goToProfileEdit() {
|
||||
if (!this.data.isLoggedIn) {
|
||||
this.showLogin()
|
||||
return
|
||||
}
|
||||
trackClick('my', 'btn_click', '资料编辑')
|
||||
wx.navigateTo({ url: '/pages/profile-edit/profile-edit?full=1&wizard=0' })
|
||||
},
|
||||
|
||||
async onChooseAvatar(e) {
|
||||
const tempAvatarUrl = e.detail?.avatarUrl
|
||||
if (!tempAvatarUrl) return
|
||||
|
||||
@@ -28,13 +28,18 @@
|
||||
<view class="vip-badge" wx:if="{{isVip}}">VIP</view>
|
||||
<view class="vip-badge vip-badge-gray" wx:else>VIP</view>
|
||||
</view>
|
||||
<view class="profile-meta">
|
||||
<view class="profile-name-row">
|
||||
<text class="user-name" bindtap="editNickname">{{userInfo.nickname || '点击设置昵称'}}</text>
|
||||
<view class="profile-meta-row">
|
||||
<view class="profile-meta">
|
||||
<view class="profile-name-row">
|
||||
<text class="user-name" bindtap="editNickname">{{userInfo.nickname || '点击设置昵称'}}</text>
|
||||
</view>
|
||||
<view class="profile-actions-row profile-actions-under-name" wx:if="{{!auditMode}}">
|
||||
<view class="profile-action-btn" catchtap="goToMySuperCard">{{mpUiCardLabel}}</view>
|
||||
<view class="profile-action-btn" catchtap="goToVip">{{isVip ? mpUiVipLabelVip : mpUiVipLabelGuest}}</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="profile-actions-row profile-actions-under-name" wx:if="{{!auditMode}}">
|
||||
<view class="profile-action-btn" catchtap="goToMySuperCard">{{mpUiCardLabel}}</view>
|
||||
<view class="profile-action-btn" catchtap="goToVip">{{isVip ? mpUiVipLabelVip : mpUiVipLabelGuest}}</view>
|
||||
<view class="profile-settings-hit" catchtap="goToProfileEdit" hover-class="profile-settings-hit-active" aria-label="编辑资料">
|
||||
<icon name="setting" size="44" color="#4FD1C5" customClass="profile-settings-icon"></icon>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
@@ -72,7 +72,25 @@
|
||||
padding: 4rpx 12rpx; border-radius: 8rpx;
|
||||
}
|
||||
.vip-badge-gray { background: rgba(255,255,255,0.2); color: rgba(255,255,255,0.5); }
|
||||
/* 昵称区 + 右侧设置:齿轮与名片/会员按钮整体垂直居中 */
|
||||
.profile-meta-row {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
gap: 8rpx;
|
||||
}
|
||||
.profile-meta { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 12rpx; }
|
||||
.profile-settings-hit {
|
||||
flex-shrink: 0;
|
||||
padding: 12rpx 8rpx 12rpx 12rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
.profile-settings-hit-active { opacity: 0.72; }
|
||||
.profile-settings-icon { display: block; opacity: 0.92; }
|
||||
.profile-name-row { display: flex; align-items: center; justify-content: flex-start; gap: 16rpx; flex-wrap: wrap; }
|
||||
.user-name {
|
||||
font-size: 44rpx; font-weight: bold; color: #fff;
|
||||
|
||||
@@ -127,6 +127,21 @@ Page({
|
||||
|
||||
goBack() { getApp().goBackOrToHome() },
|
||||
|
||||
/** 分步向导时:齿轮 → 一页完整编辑(与「派对会员」资料同路径) */
|
||||
onOpenFullEdit() {
|
||||
if (!this.data.wizardMode) return
|
||||
wx.showModal({
|
||||
title: '切换到完整编辑',
|
||||
content: '将在一页中展示全部资料项,便于一次性填写。当前分步进度不会丢失,可随时返回。',
|
||||
confirmText: '进入完整编辑',
|
||||
cancelText: '取消',
|
||||
success: (r) => {
|
||||
if (!r.confirm) return
|
||||
wx.redirectTo({ url: '/pages/profile-edit/profile-edit?full=1&wizard=0' })
|
||||
},
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* 是否走三步向导:资料未「手机号+昵称」齐全且未标记完成,且非 full=1、非 VIP 开通页强制单页。
|
||||
* 老用户已齐全则自动写 DONE,避免重复向导。
|
||||
|
||||
@@ -3,7 +3,12 @@
|
||||
<view class="nav-bar" style="padding-top: {{statusBarHeight}}px;">
|
||||
<view class="nav-back" bindtap="goBack"><icon name="chevron-left" size="44" color="#5EEAD4" customClass="back-icon"></icon></view>
|
||||
<text class="nav-title">{{wizardMode ? '分步档案(' + wizardStep + '/3)' : '编辑资料'}}</text>
|
||||
<view class="nav-placeholder"></view>
|
||||
<view class="nav-right">
|
||||
<view wx:if="{{wizardMode}}" class="nav-gear" bindtap="onOpenFullEdit" hover-class="nav-gear-hover" aria-label="切换完整编辑">
|
||||
<icon name="setting" size="40" color="#5EEAD4" customClass="gear-icon"></icon>
|
||||
</view>
|
||||
<view wx:else class="nav-right-spacer"></view>
|
||||
</view>
|
||||
</view>
|
||||
<view style="height: {{statusBarHeight + 44}}px;"></view>
|
||||
|
||||
|
||||
@@ -7,14 +7,22 @@
|
||||
.nav-bar {
|
||||
position: fixed; top: 0; left: 0; right: 0; z-index: 100;
|
||||
display: flex; align-items: center; justify-content: space-between;
|
||||
height: 44px; padding: 0 24rpx;
|
||||
height: 44px; padding: 0 16rpx 0 8rpx;
|
||||
background: rgba(5,11,20,0.9); backdrop-filter: blur(8rpx);
|
||||
border-bottom: 1rpx solid rgba(255,255,255,0.08);
|
||||
}
|
||||
.nav-back { width: 60rpx; padding: 16rpx 0; }
|
||||
.nav-back { width: 56rpx; padding: 16rpx 8rpx; flex-shrink: 0; }
|
||||
.back-icon { font-size: 44rpx; color: #5EEAD4; }
|
||||
.nav-title { font-size: 36rpx; font-weight: 600; }
|
||||
.nav-placeholder { width: 60rpx; }
|
||||
.nav-title {
|
||||
flex: 1; min-width: 0; font-size: 32rpx; font-weight: 600;
|
||||
text-align: center; padding: 0 8rpx;
|
||||
overflow: hidden; white-space: nowrap; text-overflow: ellipsis;
|
||||
}
|
||||
.nav-right { width: 56rpx; flex-shrink: 0; display: flex; align-items: center; justify-content: flex-end; }
|
||||
.nav-right-spacer { width: 100%; height: 1px; }
|
||||
.nav-gear { padding: 12rpx 8rpx; }
|
||||
.nav-gear-hover { opacity: 0.75; }
|
||||
.gear-icon { display: block; }
|
||||
|
||||
.loading { padding: 96rpx; text-align: center; color: #94A3B8; }
|
||||
|
||||
|
||||
@@ -66,6 +66,42 @@ function normalizeMentionSegments(segments) {
|
||||
})
|
||||
}
|
||||
|
||||
function normalizeLinkTagLabel(raw) {
|
||||
return String(raw || '')
|
||||
.replace(/^[##\s\u00a0\u200b\u3000]+/u, '')
|
||||
.replace(/[\s\u00a0\u200b\u3000]+$/u, '')
|
||||
.trim()
|
||||
.toLowerCase()
|
||||
}
|
||||
|
||||
function resolveLinkTagByLabel(label) {
|
||||
const normalized = normalizeLinkTagLabel(label)
|
||||
if (!normalized) return null
|
||||
const tags = Array.isArray(app.globalData.linkTagsConfig) ? app.globalData.linkTagsConfig : []
|
||||
for (const t of tags) {
|
||||
if (!t) continue
|
||||
const candidates = [t.label]
|
||||
if (typeof t.aliases === 'string' && t.aliases.trim()) {
|
||||
candidates.push(...t.aliases.split(','))
|
||||
}
|
||||
for (const c of candidates) {
|
||||
if (normalizeLinkTagLabel(c) === normalized) return t
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
function pickLinkTagField(tag, keys, defaultValue = '') {
|
||||
if (!tag || typeof tag !== 'object') return defaultValue
|
||||
for (const key of keys) {
|
||||
const v = tag[key]
|
||||
if (v == null) continue
|
||||
const s = String(v).trim()
|
||||
if (s) return s
|
||||
}
|
||||
return defaultValue
|
||||
}
|
||||
|
||||
Page({
|
||||
data: {
|
||||
// 系统信息
|
||||
@@ -100,6 +136,11 @@ Page({
|
||||
readingProgress: 0,
|
||||
/** 未解锁付费墙:合并 data.previewPercent(章节)与顶层 previewPercent(全局) */
|
||||
previewPercent: 20,
|
||||
/** mpUi.readPage.beforeLoginHint:未登录付费墙上方说明文案 */
|
||||
readBeforeLoginHint: '',
|
||||
/** 朋友圈单页:标题与说明(mpUi.readPage.singlePageTitle / singlePagePaywallHint) */
|
||||
readSinglePageTitle: '解锁全文',
|
||||
readSinglePageHint: '',
|
||||
showPaywall: false,
|
||||
|
||||
// 上一篇/下一篇
|
||||
@@ -209,7 +250,18 @@ Page({
|
||||
const mp = (cfg && cfg.mpConfig) || {}
|
||||
const auditMode = !!mp.auditMode
|
||||
app.globalData.auditMode = auditMode
|
||||
if (typeof this.setData === 'function') this.setData({ auditMode })
|
||||
const rp = (mp.mpUi && mp.mpUi.readPage) || {}
|
||||
const readBeforeLoginHint = String(rp.beforeLoginHint || '').trim()
|
||||
const readSinglePageTitle = String(rp.singlePageTitle || '解锁全文').trim() || '解锁全文'
|
||||
const readSinglePageHint = String(rp.singlePagePaywallHint || '').trim()
|
||||
if (typeof this.setData === 'function') {
|
||||
this.setData({
|
||||
auditMode,
|
||||
readBeforeLoginHint,
|
||||
readSinglePageTitle,
|
||||
readSinglePageHint,
|
||||
})
|
||||
}
|
||||
}
|
||||
if (extras && Array.isArray(extras.linkTags)) {
|
||||
app.globalData.linkTagsConfig = extras.linkTags
|
||||
@@ -660,18 +712,18 @@ Page({
|
||||
onLinkTagTap(e) {
|
||||
let url = (e.currentTarget.dataset.url || '').trim()
|
||||
const label = (e.currentTarget.dataset.label || '').trim()
|
||||
let tagType = (e.currentTarget.dataset.tagType || '').trim()
|
||||
let tagType = (e.currentTarget.dataset.tagType || '').trim().toLowerCase()
|
||||
let pagePath = (e.currentTarget.dataset.pagePath || '').trim()
|
||||
let mpKey = (e.currentTarget.dataset.mpKey || '').trim()
|
||||
|
||||
// 旧格式(<a href>)tagType 为空 → 按 label 从缓存 linkTags 补充类型信息
|
||||
if (!tagType && label) {
|
||||
const cached = (app.globalData.linkTagsConfig || []).find(t => t.label === label)
|
||||
const cached = resolveLinkTagByLabel(label)
|
||||
if (cached) {
|
||||
tagType = cached.type || 'url'
|
||||
pagePath = cached.pagePath || ''
|
||||
if (!url) url = cached.url || ''
|
||||
if (cached.mpKey) mpKey = cached.mpKey
|
||||
tagType = pickLinkTagField(cached, ['type', 'tagType'], 'url').toLowerCase()
|
||||
pagePath = pickLinkTagField(cached, ['pagePath', 'page_path'], '')
|
||||
if (!url) url = pickLinkTagField(cached, ['url', 'linkUrl', 'link_url'], '')
|
||||
if (!mpKey) mpKey = pickLinkTagField(cached, ['mpKey', 'mp_key', 'appId', 'app_id'], '')
|
||||
}
|
||||
}
|
||||
|
||||
@@ -685,8 +737,8 @@ Page({
|
||||
// 小程序类型:用密钥查 linkedMiniprograms 得 appId,再唤醒(需在 app.json 的 navigateToMiniProgramAppIdList 中配置)
|
||||
if (tagType === 'miniprogram') {
|
||||
if (!mpKey && label) {
|
||||
const cached = (app.globalData.linkTagsConfig || []).find(t => t.label === label)
|
||||
if (cached) mpKey = cached.mpKey || ''
|
||||
const cached = resolveLinkTagByLabel(label)
|
||||
if (cached) mpKey = pickLinkTagField(cached, ['mpKey', 'mp_key', 'appId', 'app_id'], '')
|
||||
}
|
||||
const linked = (app.globalData.linkedMiniprograms || []).find(m => m.key === mpKey)
|
||||
if (linked && linked.appId) {
|
||||
|
||||
@@ -127,7 +127,8 @@
|
||||
<view class="paywall-icon"><icon name="lock" size="80" color="#00CED1"></icon></view>
|
||||
|
||||
<block wx:if="{{readSinglePageMode}}">
|
||||
<text class="paywall-title">解锁全文</text>
|
||||
<text class="paywall-title">{{readSinglePageTitle}}</text>
|
||||
<text class="paywall-desc" wx:if="{{!auditMode}}">试读 {{previewPercent}}%(与后台试读比例一致)</text>
|
||||
<view class="purchase-options" wx:if="{{!auditMode}}">
|
||||
<view class="purchase-btn purchase-section" bindtap="onUnlockTapInSinglePage">
|
||||
<text class="btn-label">购买本章</text>
|
||||
@@ -135,11 +136,12 @@
|
||||
</view>
|
||||
</view>
|
||||
<view class="paywall-audit-tip" wx:if="{{auditMode}}">审核中,暂不支持购买</view>
|
||||
<text class="paywall-desc paywall-desc--moments-expanded" wx:if="{{momentsPaywallExpanded}}">预览不可付款,请点底部「前往小程序」。</text>
|
||||
<text class="paywall-desc paywall-desc--moments-expanded" wx:if="{{momentsPaywallExpanded}}">{{readSinglePageHint || '预览不可付款,请点底部「前往小程序」。'}}</text>
|
||||
</block>
|
||||
|
||||
<block wx:else>
|
||||
<text class="paywall-title">解锁完整内容</text>
|
||||
<text class="paywall-desc paywall-desc--pre" wx:if="{{readBeforeLoginHint}}">{{readBeforeLoginHint}}</text>
|
||||
<text class="paywall-desc">已阅读{{previewPercent}}%,登录并支付 ¥{{section && section.price != null ? section.price : sectionPrice}} 后阅读全文</text>
|
||||
<view class="purchase-options" wx:if="{{!auditMode}}">
|
||||
<view class="purchase-btn purchase-section" bindtap="handlePurchaseSection">
|
||||
@@ -199,7 +201,8 @@
|
||||
<view class="paywall-icon"><icon name="lock" size="80" color="#00CED1"></icon></view>
|
||||
|
||||
<block wx:if="{{readSinglePageMode}}">
|
||||
<text class="paywall-title">解锁全文</text>
|
||||
<text class="paywall-title">{{readSinglePageTitle}}</text>
|
||||
<text class="paywall-desc" wx:if="{{!auditMode}}">试读 {{previewPercent}}%(与后台试读比例一致)</text>
|
||||
<view class="purchase-options" wx:if="{{!auditMode}}">
|
||||
<view class="purchase-btn purchase-section" bindtap="onUnlockTapInSinglePage">
|
||||
<text class="btn-label">购买本章</text>
|
||||
@@ -207,7 +210,7 @@
|
||||
</view>
|
||||
</view>
|
||||
<view class="paywall-audit-tip" wx:if="{{auditMode}}">审核中,暂不支持购买</view>
|
||||
<text class="paywall-desc paywall-desc--moments-expanded" wx:if="{{momentsPaywallExpanded}}">预览不可付款,请点底部「前往小程序」。</text>
|
||||
<text class="paywall-desc paywall-desc--moments-expanded" wx:if="{{momentsPaywallExpanded}}">{{readSinglePageHint || '预览不可付款,请点底部「前往小程序」。'}}</text>
|
||||
</block>
|
||||
|
||||
<block wx:else>
|
||||
|
||||
Reference in New Issue
Block a user