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: '', } }, })