gengxin
This commit is contained in:
@@ -0,0 +1,112 @@
|
||||
const memoryCards = require('../../data/memoryCards')
|
||||
const { chapterRoute } = require('../../utils/chapterRoute')
|
||||
|
||||
const MEMORY_CARD_ID_PATTERN = /^S\d{2}-C\d{2}-MC\d{2}$/
|
||||
const INVALID_CARD_MESSAGE = '这张桂香记忆卡暂时没有找到。回到封面,还可以慢慢翻一回。'
|
||||
const SHARE_PREVIEW_IMAGE = '/assets/share/guixiang-story-share-preview-v1.jpg'
|
||||
|
||||
function memoryCardSharePath(memoryCard) {
|
||||
const cardId = String(memoryCard && memoryCard.cardId || '').trim()
|
||||
if (!cardId) return '/pages/home/home'
|
||||
return `/pages/share/share?cardId=${encodeURIComponent(cardId)}&source=family-memory`
|
||||
}
|
||||
|
||||
function normalizeCardId(value) {
|
||||
const raw = String(value || '').trim()
|
||||
if (!raw || raw.length > 64) return ''
|
||||
let decoded = raw
|
||||
try {
|
||||
decoded = decodeURIComponent(raw)
|
||||
} catch (error) {
|
||||
return ''
|
||||
}
|
||||
return MEMORY_CARD_ID_PATTERN.test(decoded) ? decoded : ''
|
||||
}
|
||||
|
||||
function findMemoryCard(value) {
|
||||
const cardId = normalizeCardId(value)
|
||||
if (!cardId) return null
|
||||
return memoryCards.find((card) => card.cardId === cardId) || null
|
||||
}
|
||||
|
||||
function twoDigits(value) {
|
||||
return String(value).padStart(2, '0')
|
||||
}
|
||||
|
||||
Page({
|
||||
data: {
|
||||
memoryCard: null,
|
||||
chapterLabel: '',
|
||||
characterInitial: '',
|
||||
invalidCard: false,
|
||||
invalidCardMessage: INVALID_CARD_MESSAGE,
|
||||
},
|
||||
|
||||
onLoad(options = {}) {
|
||||
const memoryCard = findMemoryCard(options.cardId)
|
||||
if (!memoryCard) {
|
||||
this.setData({
|
||||
memoryCard: null,
|
||||
chapterLabel: '',
|
||||
characterInitial: '',
|
||||
invalidCard: true,
|
||||
})
|
||||
return
|
||||
}
|
||||
this.setData({
|
||||
memoryCard: { ...memoryCard },
|
||||
chapterLabel: `第${twoDigits(memoryCard.chapterNumber)}回`,
|
||||
characterInitial: String(memoryCard.characterName || '桂').slice(0, 1),
|
||||
invalidCard: false,
|
||||
})
|
||||
},
|
||||
|
||||
openChapter() {
|
||||
const memoryCard = this.data.memoryCard
|
||||
if (!memoryCard || !memoryCard.chapterNumber) {
|
||||
this.goHome()
|
||||
return
|
||||
}
|
||||
wx.navigateTo({
|
||||
url: chapterRoute(memoryCard.chapterNumber),
|
||||
})
|
||||
},
|
||||
|
||||
goHome() {
|
||||
const target = { url: '/pages/home/home' }
|
||||
if (typeof wx.reLaunch === 'function') {
|
||||
wx.reLaunch(target)
|
||||
return
|
||||
}
|
||||
wx.redirectTo(target)
|
||||
},
|
||||
|
||||
onShareAppMessage() {
|
||||
const memoryCard = this.data.memoryCard
|
||||
if (!memoryCard) {
|
||||
return {
|
||||
title: '唐侦探:饭桌边,也有值得带回家说的话',
|
||||
path: '/pages/home/home',
|
||||
imageUrl: SHARE_PREVIEW_IMAGE,
|
||||
}
|
||||
}
|
||||
return {
|
||||
title: `带回家的一句话:${memoryCard.familyLine}`,
|
||||
path: memoryCardSharePath(memoryCard),
|
||||
imageUrl: SHARE_PREVIEW_IMAGE,
|
||||
}
|
||||
},
|
||||
|
||||
onShareTimeline() {
|
||||
const memoryCard = this.data.memoryCard
|
||||
return memoryCard
|
||||
? {
|
||||
title: `桂香记忆:${memoryCard.tableEcho}`,
|
||||
query: `cardId=${encodeURIComponent(memoryCard.cardId)}&source=family-memory`,
|
||||
}
|
||||
: {
|
||||
title: '唐侦探:饭桌边,也有值得带回家说的话',
|
||||
query: '',
|
||||
}
|
||||
},
|
||||
})
|
||||
Reference in New Issue
Block a user