933 lines
46 KiB
Plaintext
933 lines
46 KiB
Plaintext
<view
|
||
wx:if="{{chapter}}"
|
||
class="chapter-page font-{{fontScale}} {{compactHeight ? 'compact-height' : ''}}"
|
||
style="{{pageStyle}}"
|
||
>
|
||
<view class="comic-topbar {{storyFirstComicMode ? ((chapterOneBackOpen || (chapterOneEmotionOpen && emotionResult) || (decisionOpen && resultMode === 'correct')) ? 'c1-book-topbar is-back' : ('c1-book-topbar is-front ' + (frontControlsRevealed ? 'is-controls-revealed' : 'is-controls-hidden'))) : ''}}" style="{{topbarStyle}}">
|
||
<block wx:if="{{!storyFirstComicMode || chapterOneBackOpen || (chapterOneEmotionOpen && emotionResult) || (decisionOpen && resultMode === 'correct') || frontControlsRevealed}}">
|
||
<button class="comic-catalog-button" bindtap="goCatalog" aria-label="返回目录">‹ 目录</button>
|
||
<button
|
||
wx:if="{{storyFirstComicMode && !comicPreviousDisabled}}"
|
||
class="comic-top-previous-button"
|
||
bindtap="previousComicPage"
|
||
aria-label="上一张画"
|
||
>‹</button>
|
||
<view class="comic-bookmark">
|
||
<text class="comic-bookmark-label">
|
||
第{{chapterNumber < 10 ? '0' + chapterNumber : chapterNumber}}回{{compactHeight ? '' : ' · ' + chapter.year}}
|
||
</text>
|
||
<text class="comic-page-count">{{currentPageNumber}}/{{comicPageCount}}</text>
|
||
</view>
|
||
<button
|
||
wx:if="{{!storyFirstComicMode && !currentPage.audioAvailable && !currentPage.audioCompanionAvailable}}"
|
||
class="comic-page-audio-slot is-text-mode {{storyFirstComicMode ? 'c1-audio-slot' : ''}}"
|
||
bindtap="openTextReading"
|
||
aria-label="本页可以直接看文字"
|
||
>
|
||
<text class="comic-page-audio-icon" aria-hidden="true">阅</text>
|
||
<view class="comic-page-audio-copy">
|
||
<text class="comic-page-audio-label">直接看文字</text>
|
||
<text class="comic-page-audio-meta">按页慢慢看</text>
|
||
</view>
|
||
</button>
|
||
<button
|
||
wx:elif="{{currentPage.audioAvailable || currentPage.audioCompanionAvailable}}"
|
||
class="comic-page-audio-slot {{storyFirstComicMode ? 'c1-audio-slot' : ''}} {{audioLoading ? 'is-loading' : audioPlaying ? 'is-playing' : audioPercent > 0 ? 'is-replay' : 'is-ready'}}"
|
||
disabled="{{audioLoading}}"
|
||
bindtap="toggleComicPageAudio"
|
||
data-audio-cue-count="{{currentPage.audioCueCount}}"
|
||
aria-label="本页语音播放控制"
|
||
>
|
||
<text class="comic-page-audio-icon" aria-hidden="true">
|
||
{{audioPlaying ? 'Ⅱ' : '▶'}}
|
||
</text>
|
||
<view class="comic-page-audio-copy">
|
||
<text wx:if="{{audioLoading}}" class="comic-page-audio-label">准备中</text>
|
||
<text wx:elif="{{audioPlaying}}" class="comic-page-audio-label">暂停</text>
|
||
<text wx:elif="{{audioPercent > 0}}" class="comic-page-audio-label">重听</text>
|
||
<text wx:else class="comic-page-audio-label">听一听</text>
|
||
<text class="comic-page-audio-meta">
|
||
{{audioCurrent}} / {{audioDuration === '0:00' ? currentPage.audioDurationLabel : audioDuration}}
|
||
</text>
|
||
</view>
|
||
</button>
|
||
<button
|
||
wx:if="{{!storyFirstComicMode || chapterOneBackOpen || (chapterOneEmotionOpen && emotionResult) || (decisionOpen && resultMode === 'correct')}}"
|
||
class="comic-font-button"
|
||
bindtap="toggleFont"
|
||
aria-label="{{fontScale === 'large' ? '把整页文字再放大' : '恢复标准大字'}}"
|
||
>
|
||
{{fontScale === 'large' ? '大字' : '标准字'}}
|
||
</button>
|
||
<button
|
||
wx:if="{{storyFirstComicMode && !chapterOneBackOpen && !decisionOpen && !chapterOneEmotionOpen}}"
|
||
class="c1-front-action-button"
|
||
bindtap="openCurrentFrontAction"
|
||
aria-label="{{currentPage.type === 'event'
|
||
? (currentEventCompleted ? '点一下,再看背面' : '点点人物,翻到背面')
|
||
: currentPage.type === 'emotion'
|
||
? (chapterFinished ? '点一下,看看章末' : '点一下,听听心里话')
|
||
: '点一下,翻到背面'}}"
|
||
>
|
||
{{currentPage.type === 'event'
|
||
? (currentEventCompleted ? '再看背面' : '点点人物')
|
||
: currentPage.type === 'emotion'
|
||
? (chapterFinished ? '看看章末' : '听听心里话')
|
||
: '翻到背面'}}
|
||
</button>
|
||
</block>
|
||
</view>
|
||
|
||
<view class="comic-reader">
|
||
<block wx:if="{{storyFirstComicMode}}">
|
||
<view class="c1-comic-page {{chapterOneBackOpen ? 'is-back' : 'is-front'}}">
|
||
<block wx:if="{{chapterOneBackOpen}}">
|
||
<view class="c1-back-paper">
|
||
<view class="c1-back-evidence">
|
||
<image
|
||
wx:if="{{comicImageSrc}}"
|
||
class="c1-back-image"
|
||
src="{{comicImageSrc}}"
|
||
mode="aspectFit"
|
||
></image>
|
||
<view wx:else class="c1-back-image-fallback">{{currentPage.sceneAlt}}</view>
|
||
<text class="c1-back-stamp">
|
||
{{currentPage.type === 'memory' ? '桂香记忆' : currentPage.type === 'event' ? '这回事' : '画背后的事'}}
|
||
</text>
|
||
</view>
|
||
|
||
<scroll-view class="c1-back-copy" scroll-y enhanced show-scrollbar="{{true}}">
|
||
<view wx:if="{{currentPage.type === 'memory'}}" class="c1-back-copy-inner">
|
||
<text class="c1-back-kicker">第{{chapterNumber < 10 ? '0' + chapterNumber : chapterNumber}}回 · 章末记忆</text>
|
||
<text class="c1-back-title">{{currentPage.headline}}</text>
|
||
<text class="c1-back-body">{{currentPage.caption}}</text>
|
||
<view class="c1-back-callout">
|
||
<text class="c1-back-label">桌边回声</text>
|
||
<text>{{currentPage.memoryCard.tableEcho}}</text>
|
||
</view>
|
||
<view class="c1-back-action">
|
||
<text class="c1-back-label">带回生活里</text>
|
||
<text>{{currentPage.memoryCard.lifeAction}}</text>
|
||
</view>
|
||
<text class="c1-back-family">“{{currentPage.memoryCard.familyLine}}”</text>
|
||
<view class="c1-memory-secondary-actions">
|
||
<button
|
||
class="c1-memory-secondary-action"
|
||
bindtap="openLifeReport"
|
||
aria-label="查看本回桂香生活观察"
|
||
>看看生活观察</button>
|
||
<button
|
||
class="c1-memory-secondary-action"
|
||
open-type="share"
|
||
aria-label="发给家人,一起聊聊这一页"
|
||
>发给家人聊聊</button>
|
||
</view>
|
||
</view>
|
||
|
||
<view wx:elif="{{currentPage.type === 'event' && currentEventCompleted && chapterOneReviewEvent}}" class="c1-back-copy-inner">
|
||
<text class="c1-back-kicker">{{currentPage.actorName}} · 刚才看见的</text>
|
||
<text class="c1-back-title">{{currentPage.headline}}</text>
|
||
<text class="c1-back-body">{{chapterOneReviewEvent.actionDescription}}</text>
|
||
<view class="c1-back-callout">
|
||
<text class="c1-back-label">您刚才瞧见的</text>
|
||
<text>{{chapterOneReviewEvent.evidence}}</text>
|
||
</view>
|
||
<view class="c1-back-action">
|
||
<text class="c1-back-label">下回遇到这事</text>
|
||
<text>{{chapterOneReviewEvent.actionAdvice}}</text>
|
||
</view>
|
||
</view>
|
||
|
||
<view wx:elif="{{currentPage.type === 'event' && chapterOneReviewEvent}}" class="c1-back-copy-inner">
|
||
<text class="c1-back-kicker">{{currentPage.actorName}} · 这回事</text>
|
||
<text class="c1-back-title">{{currentPage.headline}}</text>
|
||
<text class="c1-back-body">{{currentPage.caption}}</text>
|
||
<view wx:if="{{currentPage.shortDialogue}}" class="c1-back-callout">
|
||
<text class="c1-back-label">桌边一句话</text>
|
||
<text>“{{currentPage.shortDialogue}}”</text>
|
||
</view>
|
||
</view>
|
||
|
||
<view wx:else class="c1-back-copy-inner">
|
||
<text class="c1-back-kicker">{{currentPage.eyebrow || chapter.year + ' · ' + chapter.location}}</text>
|
||
<text class="c1-back-title">{{currentPage.headline}}</text>
|
||
<text class="c1-back-body">{{currentPage.displayCaption}}</text>
|
||
<text wx:if="{{currentPage.secondaryCaption}}" class="c1-back-secondary">{{currentPage.secondaryCaption}}</text>
|
||
</view>
|
||
</scroll-view>
|
||
<text
|
||
wx:if="{{currentPage.type === 'memory' || (currentPage.type === 'event' && currentEventCompleted)}}"
|
||
class="c1-scroll-hint"
|
||
>上划接着看 ↑</text>
|
||
|
||
<view wx:if="{{currentPage.type === 'memory'}}" class="c1-back-footer c1-memory-footer">
|
||
<button class="c1-back-button secondary" aria-label="回头再看一遍画面" bindtap="closeChapterOneBack">回去看画</button>
|
||
<button wx:if="{{chapterNumber >= chapterCount}}" class="c1-back-button primary" bindtap="goCatalog">回到目录</button>
|
||
<button wx:else class="c1-back-button primary" bindtap="nextChapter">翻下一回</button>
|
||
</view>
|
||
<view wx:else class="c1-back-footer">
|
||
<button class="c1-back-button secondary" aria-label="回头再看一遍画面" bindtap="closeChapterOneBack">回去看画</button>
|
||
<button
|
||
wx:if="{{currentPage.type === 'event' && !currentEventCompleted}}"
|
||
class="c1-back-button primary"
|
||
bindtap="startChapterOneDecisionFromBack"
|
||
>聊聊这事</button>
|
||
<button
|
||
wx:else
|
||
class="c1-back-button primary"
|
||
bindtap="nextChapterOnePageFromBack"
|
||
>翻下一张</button>
|
||
</view>
|
||
</view>
|
||
</block>
|
||
|
||
<block wx:elif="{{currentPage.type === 'emotion' && chapterOneEmotionOpen && emotionResult}}">
|
||
<view class="c1-back-paper">
|
||
<view class="c1-back-evidence">
|
||
<image
|
||
wx:if="{{comicImageSrc}}"
|
||
class="c1-back-image"
|
||
src="{{comicImageSrc}}"
|
||
mode="aspectFit"
|
||
></image>
|
||
<view wx:else class="c1-back-image-fallback">{{currentPage.sceneAlt}}</view>
|
||
<text class="c1-back-stamp">桌边回声</text>
|
||
</view>
|
||
<scroll-view class="c1-back-copy" scroll-y enhanced show-scrollbar="{{true}}">
|
||
<view class="c1-back-copy-inner">
|
||
<text class="c1-back-kicker">没有标准答案</text>
|
||
<text class="c1-back-title">{{currentPage.headline}}</text>
|
||
<text class="c1-back-body">{{emotionResult.feedback}}</text>
|
||
<view class="c1-back-callout">
|
||
<text class="c1-back-label">这一桌记住了</text>
|
||
<text>{{emotionResult.echo}}</text>
|
||
</view>
|
||
</view>
|
||
</scroll-view>
|
||
<view class="c1-back-footer">
|
||
<button class="c1-back-button secondary" aria-label="回头再看一遍画面" bindtap="closeChapterOneEmotion">回去看画</button>
|
||
<button class="c1-back-button primary" bindtap="finishChapterOneEmotionAndTurn">收下这句话</button>
|
||
</view>
|
||
</view>
|
||
</block>
|
||
|
||
<block wx:elif="{{currentPage.type === 'emotion' && chapterOneEmotionOpen && !emotionResult}}">
|
||
<view class="c1-interaction-paper c1-emotion-interaction-paper">
|
||
<view class="c1-interaction-evidence">
|
||
<image
|
||
wx:if="{{comicImageSrc}}"
|
||
class="c1-interaction-image"
|
||
src="{{comicImageSrc}}"
|
||
mode="aspectFit"
|
||
></image>
|
||
<view wx:else class="c1-back-image-fallback">{{currentPage.sceneAlt}}</view>
|
||
<text class="c1-back-stamp">桌边一句话</text>
|
||
</view>
|
||
<view class="c1-interaction-panel">
|
||
<button class="c1-tray-close" bindtap="closeChapterOneEmotion" aria-label="收起选择,先回画面">先看画</button>
|
||
<view class="c1-tray-heading">
|
||
<text class="c1-tray-kicker">这一刻,您想怎么说?</text>
|
||
<text class="c1-tray-question">{{currentPage.prompt}}</text>
|
||
</view>
|
||
<view class="c1-choice-stack">
|
||
<button
|
||
wx:for="{{chapter.emotionMoment.playerChoices}}"
|
||
wx:key="choiceId"
|
||
class="c1-natural-choice"
|
||
data-choice="{{item.choiceId}}"
|
||
bindtap="chooseEmotion"
|
||
>{{item.text}}</button>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</block>
|
||
|
||
<block wx:else>
|
||
<view class="c1-front-stage">
|
||
<image
|
||
wx:if="{{comicImageSrc}}"
|
||
class="c1-front-image"
|
||
src="{{comicImageSrc}}"
|
||
mode="aspectFit"
|
||
bindload="onComicImageLoad"
|
||
binderror="onComicImageError"
|
||
></image>
|
||
<view wx:else class="c1-front-fallback">
|
||
<text>{{comicImageError}}</text>
|
||
<text>{{currentPage.sceneAlt}}</text>
|
||
</view>
|
||
<view class="c1-front-grain"></view>
|
||
|
||
<button
|
||
wx:if="{{!frontControlsRevealed}}"
|
||
class="c1-front-reveal-gate"
|
||
bindtap="revealCurrentFrontControls"
|
||
aria-label="轻点画面,显示阅读按钮"
|
||
></button>
|
||
|
||
<block wx:else>
|
||
<button
|
||
wx:if="{{frontControlsRevealed && currentInteractionEnabled && currentPage.type === 'event' && !comicImageUsingFallback}}"
|
||
class="c1-person-hotspot"
|
||
style="{{currentPage.actorHotspot.style}}"
|
||
bindtap="openComicActor"
|
||
aria-label="点点{{currentPage.actorName}},翻到这一幕背面"
|
||
><view class="c1-hotspot-ring"></view></button>
|
||
|
||
<button
|
||
wx:elif="{{frontControlsRevealed && currentPage.type === 'event' && currentEventCompleted}}"
|
||
class="c1-full-page-tap"
|
||
bindtap="openChapterOneBack"
|
||
aria-label="翻到这一幕的背面"
|
||
></button>
|
||
|
||
<button
|
||
wx:elif="{{frontControlsRevealed && currentPage.type === 'emotion'}}"
|
||
class="c1-full-page-tap"
|
||
bindtap="openChapterOneEmotion"
|
||
aria-label="{{chapterFinished ? '轻触画面,翻到章末' : '轻触画面,听听这一桌心里话'}}"
|
||
></button>
|
||
|
||
<button
|
||
wx:else
|
||
class="c1-full-page-tap"
|
||
bindtap="openChapterOneBack"
|
||
aria-label="轻触画面,翻到这一页背面"
|
||
></button>
|
||
</block>
|
||
|
||
<text wx:if="{{frontHintVisible}}" class="c1-front-first-hint">轻点画面,按钮就出来了</text>
|
||
|
||
</view>
|
||
</block>
|
||
</view>
|
||
</block>
|
||
|
||
<block wx:elif="{{currentPage.type === 'emotion'}}">
|
||
<view class="comic-special-page emotion-page template-{{currentPage.templateKey}} layout-{{currentPage.layoutVariant}}">
|
||
<view class="special-art">
|
||
<image
|
||
wx:if="{{comicImageSrc}}"
|
||
class="special-art-image"
|
||
src="{{comicImageSrc}}"
|
||
mode="aspectFit"
|
||
bindload="onComicImageLoad"
|
||
binderror="onComicImageError"
|
||
></image>
|
||
<view wx:else class="special-art-fallback">
|
||
<text>{{comicImageError}}</text>
|
||
<text>{{currentPage.sceneAlt}}</text>
|
||
</view>
|
||
<view class="comic-paper-grain"></view>
|
||
</view>
|
||
<view class="emotion-panel">
|
||
<scroll-view class="emotion-paper" scroll-y enhanced show-scrollbar="{{true}}">
|
||
<view class="emotion-context">
|
||
<text class="emotion-context-kicker">听听这一桌心里话</text>
|
||
<text class="emotion-context-title">{{currentPage.headline}}</text>
|
||
<text class="emotion-context-caption">{{currentPage.caption}}</text>
|
||
</view>
|
||
<text class="emotion-prompt">{{currentPage.prompt}}</text>
|
||
<text
|
||
wx:if="{{!emotionResult && !chapterFinished}}"
|
||
class="emotion-note"
|
||
>没有标准答案,选您更愿意说的话。</text>
|
||
<view wx:if="{{emotionResult || chapterFinished}}" class="comic-emotion-result">
|
||
<text wx:if="{{emotionResult}}" class="feedback">{{emotionResult.feedback}}</text>
|
||
<view class="table-echo">
|
||
<text class="echo-label">桌边回声</text>
|
||
<text>{{emotionResult ? emotionResult.echo : chapter.emotionMoment.tableEcho}}</text>
|
||
</view>
|
||
</view>
|
||
</scroll-view>
|
||
<view
|
||
wx:if="{{!emotionResult && !chapterFinished}}"
|
||
class="emotion-choice-dock"
|
||
>
|
||
<button
|
||
wx:for="{{chapter.emotionMoment.playerChoices}}"
|
||
wx:key="choiceId"
|
||
class="emotion-choice"
|
||
data-choice="{{item.choiceId}}"
|
||
bindtap="chooseEmotion"
|
||
>
|
||
<text class="choice-number">{{index + 1}}</text>
|
||
<text>{{item.text}}</text>
|
||
</button>
|
||
</view>
|
||
<view class="special-page-footer emotion-page-footer {{emotionResult || chapterFinished ? 'has-primary' : 'single-action'}}">
|
||
<button
|
||
class="special-page-button secondary {{comicPreviousDisabled ? 'is-disabled' : ''}}"
|
||
bindtap="previousComicPage"
|
||
aria-label="返回前一页"
|
||
aria-disabled="{{comicPreviousDisabled}}"
|
||
>
|
||
<text class="comic-control-visible">上页</text>
|
||
</button>
|
||
<button
|
||
wx:if="{{emotionResult || chapterFinished}}"
|
||
class="special-page-button primary"
|
||
bindtap="finishComicEmotion"
|
||
aria-label="{{chapterFinished ? '查看记忆卡' : '收下这一桌的回声'}}"
|
||
>
|
||
<text class="comic-control-visible">{{chapterFinished ? '查看记忆卡' : '收下这一桌的回声'}}</text>
|
||
</button>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</block>
|
||
|
||
<block wx:elif="{{currentPage.isSeasonClose}}">
|
||
<view class="season-close-page template-{{currentPage.templateKey}} layout-{{currentPage.layoutVariant}}">
|
||
<view class="season-close-body">
|
||
<view class="season-close-art">
|
||
<image
|
||
wx:if="{{comicImageSrc}}"
|
||
class="season-close-main-image"
|
||
src="{{comicImageSrc}}"
|
||
mode="aspectFit"
|
||
bindload="onComicImageLoad"
|
||
binderror="onComicImageError"
|
||
></image>
|
||
<view wx:else class="season-close-art-fallback">
|
||
<text>{{comicImageError}}</text>
|
||
<text>{{currentPage.sceneAlt}}</text>
|
||
</view>
|
||
<view
|
||
wx:if="{{comicImageSrc && !comicImageUsingFallback && currentPage.detailInset}}"
|
||
class="season-close-detail-inset {{currentPage.detailInset.anchorClass}}"
|
||
aria-label="{{currentPage.detailInset.label}}近景"
|
||
>
|
||
<image
|
||
class="season-close-detail-image"
|
||
src="{{comicImageSrc}}"
|
||
mode="{{currentPage.detailInset.imageMode}}"
|
||
style="{{currentPage.detailInset.imageStyle}}"
|
||
></image>
|
||
<text class="season-close-detail-label">{{currentPage.detailInset.label}}</text>
|
||
</view>
|
||
</view>
|
||
<scroll-view
|
||
class="season-close-copy"
|
||
scroll-y
|
||
enhanced
|
||
show-scrollbar="{{true}}"
|
||
>
|
||
<view class="season-close-copy-sheet">
|
||
<text class="season-close-kicker">第一季 · 季终</text>
|
||
<text class="season-close-caption">{{currentPage.seasonCloseCaption}}</text>
|
||
<view class="season-close-memory-card">
|
||
<text class="season-close-card-label">桂香记忆卡</text>
|
||
<text class="season-close-era">{{currentPage.memoryCard.eraLine}}</text>
|
||
<text class="season-close-quote">{{currentPage.memoryCard.tableEcho}}</text>
|
||
<view class="season-close-life-line">
|
||
<text class="season-close-line-label">今天可以这样做</text>
|
||
<text>{{currentPage.memoryCard.lifeAction}}</text>
|
||
</view>
|
||
<view class="season-close-family-line">
|
||
<text class="season-close-line-label">带回家聊一聊</text>
|
||
<text>“{{currentPage.memoryCard.familyLine}}”</text>
|
||
</view>
|
||
</view>
|
||
<text class="season-close-tail">{{currentPage.seasonCloseTail}}</text>
|
||
</view>
|
||
</scroll-view>
|
||
</view>
|
||
<view class="memory-actions season-close-actions">
|
||
<button
|
||
class="memory-action-cell secondary {{comicPreviousDisabled ? 'is-disabled' : ''}}"
|
||
bindtap="previousComicPage"
|
||
aria-label="返回前一页"
|
||
aria-disabled="{{comicPreviousDisabled}}"
|
||
>
|
||
<text class="memory-action-visible">上页</text>
|
||
</button>
|
||
<button
|
||
class="memory-action-cell report"
|
||
bindtap="openLifeReport"
|
||
aria-label="查看本回桂香生活观察"
|
||
>
|
||
<text class="memory-action-visible">生活观察</text>
|
||
</button>
|
||
<button
|
||
class="memory-action-cell share"
|
||
open-type="share"
|
||
aria-label="发给家人,一起聊聊这一页"
|
||
>
|
||
<text class="memory-action-visible">发给家人</text>
|
||
</button>
|
||
<button
|
||
class="memory-action-cell primary"
|
||
bindtap="goCatalog"
|
||
aria-label="第一季读完,回到目录"
|
||
>
|
||
<text class="memory-action-visible">回到目录</text>
|
||
</button>
|
||
</view>
|
||
</view>
|
||
</block>
|
||
|
||
<block wx:elif="{{currentPage.type === 'memory'}}">
|
||
<view class="comic-special-page memory-page template-{{currentPage.templateKey}} layout-{{currentPage.layoutVariant}} {{currentPage.pageId === 'S01-C09-P08' ? 'c09-p08' : ''}}">
|
||
<view class="memory-art">
|
||
<image
|
||
wx:if="{{comicImageSrc}}"
|
||
class="memory-art-image"
|
||
src="{{comicImageSrc}}"
|
||
mode="aspectFit"
|
||
bindload="onComicImageLoad"
|
||
binderror="onComicImageError"
|
||
></image>
|
||
<view wx:else class="special-art-fallback">
|
||
<text>{{comicImageError}}</text>
|
||
<text>{{currentPage.sceneAlt}}</text>
|
||
</view>
|
||
<view class="comic-paper-grain"></view>
|
||
</view>
|
||
<view class="memory-panel">
|
||
<scroll-view class="memory-paper {{currentPage.pageId === 'S01-C09-P08' ? 'is-complete' : ''}}" scroll-y="{{currentPage.pageId !== 'S01-C09-P08'}}" enhanced show-scrollbar="{{currentPage.pageId !== 'S01-C09-P08'}}">
|
||
<view class="memory-paper-content">
|
||
<view class="memory-cliffhanger-copy"><text class="memory-ending-label">下一回的门缝</text><text>{{currentPage.caption}}</text></view>
|
||
<view class="memory-card-sheet"><text class="memory-stamp">桂香记忆卡</text>
|
||
<text class="memory-era">{{currentPage.memoryCard.eraLine}}</text><text class="memory-person">{{currentPage.memoryCard.characterName}}</text>
|
||
<view wx:if="{{currentPage.pageId === 'S01-C09-P08'}}" class="memory-short-lines">
|
||
<text wx:for="{{currentPage.memoryCard.displayLines}}" wx:key="*this" class="memory-short-line">{{item}}</text>
|
||
</view>
|
||
<block wx:else>
|
||
<text class="memory-quote">{{currentPage.memoryCard.tableEcho}}</text>
|
||
<view class="memory-action"><text class="memory-label">今天可以这样做</text><text>{{currentPage.memoryCard.lifeAction}}</text></view>
|
||
<button class="memory-family-toggle" bindtap="toggleMemoryFamily" aria-label="打开带回家聊一聊">
|
||
{{memoryFamilyOpen ? '收起这一句' : '带回家聊一聊'}}
|
||
</button>
|
||
<view wx:if="{{memoryFamilyOpen}}" class="memory-family"><text class="memory-label">带回家聊一聊</text><text>“{{currentPage.memoryCard.familyLine}}”</text></view>
|
||
</block>
|
||
</view>
|
||
</view>
|
||
</scroll-view>
|
||
<view class="memory-actions">
|
||
<button
|
||
class="memory-action-cell secondary {{comicPreviousDisabled ? 'is-disabled' : ''}}"
|
||
bindtap="previousComicPage"
|
||
aria-label="返回前一页"
|
||
aria-disabled="{{comicPreviousDisabled}}"
|
||
>
|
||
<text class="memory-action-visible">上页</text>
|
||
</button>
|
||
<button
|
||
class="memory-action-cell report"
|
||
bindtap="openLifeReport"
|
||
aria-label="查看本回桂香生活观察"
|
||
>
|
||
<text class="memory-action-visible">生活观察</text>
|
||
</button>
|
||
<button
|
||
class="memory-action-cell share"
|
||
open-type="share"
|
||
aria-label="发给家人,一起聊聊这一页"
|
||
>
|
||
<text class="memory-action-visible">发给家人</text>
|
||
</button>
|
||
<button
|
||
wx:if="{{chapterNumber >= chapterCount}}"
|
||
class="memory-action-cell primary"
|
||
bindtap="goCatalog"
|
||
aria-label="全书读完,回到目录"
|
||
>
|
||
<text class="memory-action-visible">回到目录</text>
|
||
</button>
|
||
<button
|
||
wx:else
|
||
class="memory-action-cell primary"
|
||
bindtap="nextChapter"
|
||
aria-label="翻到下一回"
|
||
>
|
||
<text class="memory-action-visible">翻到下一回</text>
|
||
</button>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</block>
|
||
|
||
<block wx:else>
|
||
<view
|
||
class="comic-normal-page template-{{currentPage.templateKey}} layout-{{currentPage.layoutVariant}}"
|
||
bindtouchstart="onComicTouchStart"
|
||
bindtouchend="onComicTouchEnd"
|
||
>
|
||
<view class="comic-art-column">
|
||
<view class="comic-art-stage" style="{{comicArtStageStyle}}">
|
||
<image
|
||
wx:if="{{comicImageSrc}}"
|
||
class="comic-art-image"
|
||
src="{{comicImageSrc}}"
|
||
mode="{{comicPageImageMode}}"
|
||
style="{{comicPageImageStyle}}"
|
||
bindload="onComicImageLoad"
|
||
binderror="onComicImageError"
|
||
></image>
|
||
<view wx:else class="comic-art-fallback">
|
||
<text>{{comicImageError}}</text>
|
||
<text>{{currentPage.sceneAlt}}</text>
|
||
</view>
|
||
<view class="comic-paper-grain"></view>
|
||
<view
|
||
wx:if="{{currentPage.playableVisual.kind === 'evidence-composite'}}"
|
||
class="comic-evidence-composite"
|
||
aria-label="{{currentPage.playableVisual.subject}}的手边证据"
|
||
>
|
||
<text class="comic-evidence-kicker">手边证据</text>
|
||
<text class="comic-evidence-label">{{currentPage.playableVisual.evidenceLabel}}</text>
|
||
<text class="comic-evidence-detail">{{currentPage.playableVisual.evidenceDetail}}</text>
|
||
</view>
|
||
|
||
<button
|
||
wx:if="{{currentInteractionEnabled && !comicImageUsingFallback}}"
|
||
class="comic-actor-hotspot is-quiet"
|
||
style="{{currentPage.actorHotspot.style}}"
|
||
bindtap="openComicActor"
|
||
aria-label="看看{{currentPage.actorName}}的手边,了解这一页发生了什么"
|
||
></button>
|
||
</view>
|
||
</view>
|
||
|
||
<view class="comic-caption-strip {{currentInteractionEnabled && compactHeight ? 'has-outside-actor-guide' : ''}}">
|
||
<scroll-view class="comic-caption-copy" scroll-y enhanced show-scrollbar="{{false}}">
|
||
<view wx:if="{{currentPage.type === 'cover'}}" class="comic-cover-caption-layout">
|
||
<view class="comic-cover-caption-heading">
|
||
<text class="comic-caption-kicker">{{chapter.year}}</text>
|
||
<text class="comic-caption-heading">{{currentPage.headline}}</text>
|
||
</view>
|
||
<text class="comic-caption comic-cover-caption-text">{{currentPage.displayCaption}}</text>
|
||
</view>
|
||
<view wx:elif="{{currentPage.type === 'ensemble'}}" class="comic-ensemble-caption-layout">
|
||
<text class="comic-caption-heading">{{currentPage.headline}}</text>
|
||
<view class="comic-ensemble-caption-copy">
|
||
<text class="comic-caption">{{currentPage.displayCaption}}</text>
|
||
<text wx:if="{{currentPage.secondaryCaption}}" class="comic-secondary-caption">{{currentPage.secondaryCaption}}</text>
|
||
</view>
|
||
</view>
|
||
<view wx:elif="{{currentPage.type === 'event'}}" class="comic-event-caption-layout {{currentEventCompleted ? 'is-completed' : ''}}">
|
||
<view class="comic-event-caption-copy">
|
||
<text class="comic-caption">{{currentPage.displayCaption}}</text>
|
||
<text wx:if="{{currentPage.secondaryCaption}}" class="comic-secondary-caption">{{currentPage.secondaryCaption}}</text>
|
||
</view>
|
||
<view class="comic-event-cue">
|
||
<text
|
||
wx:if="{{currentInteractionEnabled && !compactHeight && currentPage.artTapHint}}"
|
||
class="comic-art-tap-note"
|
||
>再看看{{currentPage.actorName}}的手边</text>
|
||
<button
|
||
wx:if="{{currentInteractionEnabled && !compactHeight}}"
|
||
class="comic-outside-actor-button"
|
||
bindtap="openComicActor"
|
||
aria-label="{{currentPage.playableVisual.kind === 'evidence-composite' ? '看看桌上的东西' : (currentPage.playableVisual.kind === 'actor-portrait' ? '看看' + currentPage.actorName + '的手边' : '看看发生了什么')}}"
|
||
>
|
||
<text wx:if="{{currentPage.playableVisual.kind === 'evidence-composite'}}">看看桌上的东西</text>
|
||
<text wx:elif="{{currentPage.artTapHint}}">再看看{{currentPage.actorName}}的手边</text>
|
||
<text wx:elif="{{currentPage.playableVisual.kind === 'actor-portrait'}}">看看{{currentPage.actorName}}的手边</text>
|
||
<text wx:else>看看发生了什么</text>
|
||
</button>
|
||
<view wx:elif="{{currentEventCompleted}}" class="comic-seen-row">
|
||
<text class="seen-chip">看见了</text>
|
||
<text class="comic-tap-prompt is-seen">可以翻到下一页。</text>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</scroll-view>
|
||
|
||
<view
|
||
wx:if="{{currentInteractionEnabled && compactHeight}}"
|
||
class="comic-outside-action-dock {{currentPage.artTapHint ? 'has-art-tap-note' : ''}}"
|
||
>
|
||
<text
|
||
wx:if="{{currentPage.artTapHint}}"
|
||
class="comic-art-tap-note"
|
||
>再看看{{currentPage.actorName}}的手边</text>
|
||
<button
|
||
class="comic-outside-actor-button comic-outside-actor-dock"
|
||
bindtap="openComicActor"
|
||
aria-label="{{currentPage.playableVisual.kind === 'evidence-composite' ? '看看桌上的东西' : (currentPage.playableVisual.kind === 'actor-portrait' ? '看看' + currentPage.actorName + '的手边' : '看看发生了什么')}}"
|
||
>
|
||
<text wx:if="{{currentPage.playableVisual.kind === 'evidence-composite'}}">看看桌上的东西</text>
|
||
<text wx:elif="{{currentPage.artTapHint}}">再看看{{currentPage.actorName}}的手边</text>
|
||
<text wx:elif="{{currentPage.playableVisual.kind === 'actor-portrait'}}">看看{{currentPage.actorName}}的手边</text>
|
||
<text wx:else>看看发生了什么</text>
|
||
</button>
|
||
</view>
|
||
|
||
<view class="comic-page-nav">
|
||
<button
|
||
class="page-turn-button {{comicPreviousDisabled ? 'is-disabled' : ''}}"
|
||
bindtap="previousComicPage"
|
||
aria-label="上一页"
|
||
aria-disabled="{{comicPreviousDisabled}}"
|
||
>
|
||
<text class="comic-control-visible">上页</text>
|
||
</button>
|
||
<text wx:if="{{!compactHeight}}" class="folio">{{currentPageNumber}}/{{comicPageCount}}</text>
|
||
<button
|
||
class="page-turn-button next {{comicNextLocked ? 'is-locked' : ''}} {{comicNextDisabled ? 'is-disabled' : ''}}"
|
||
bindtap="nextComicPage"
|
||
aria-label="{{comicNextLocked ? '先看看这一页的画面' : '下一页'}}"
|
||
aria-disabled="{{comicNextLocked || comicNextDisabled}}"
|
||
>
|
||
<text class="comic-control-visible">
|
||
{{comicNextLocked ? (currentPage.playableVisual.kind === 'evidence-composite' ? '看看桌上' : '看看画面') : '下页'}}
|
||
</text>
|
||
</button>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</block>
|
||
</view>
|
||
|
||
<view wx:if="{{textReadingOpen}}" class="dialog-backdrop text-reading-backdrop">
|
||
<view
|
||
class="text-reading-dialog paper-panel"
|
||
aria-role="dialog"
|
||
aria-label="本页大字文字"
|
||
>
|
||
<button
|
||
class="dialog-close"
|
||
bindtap="closeTextReading"
|
||
aria-label="关闭文字阅读"
|
||
>×</button>
|
||
<text class="text-reading-kicker">
|
||
第{{chapterNumber < 10 ? '0' + chapterNumber : chapterNumber}}回 · 第{{currentPageNumber}}页
|
||
</text>
|
||
<scroll-view
|
||
class="text-reading-scroll"
|
||
scroll-y
|
||
enhanced
|
||
show-scrollbar="{{true}}"
|
||
>
|
||
<view class="text-reading-sheet">
|
||
<text wx:if="{{currentPage.headline}}" class="text-reading-title">{{currentPage.headline}}</text>
|
||
<text wx:if="{{currentPage.displayCaption}}" class="text-reading-body">{{currentPage.displayCaption}}</text>
|
||
<text wx:elif="{{currentPage.caption}}" class="text-reading-body">{{currentPage.caption}}</text>
|
||
<text wx:if="{{currentPage.secondaryCaption}}" class="text-reading-secondary">{{currentPage.secondaryCaption}}</text>
|
||
<view wx:if="{{currentPage.prompt}}" class="text-reading-prompt">
|
||
<text class="text-reading-label">这一页想和您聊</text>
|
||
<text>{{currentPage.prompt}}</text>
|
||
</view>
|
||
<view wx:if="{{currentPage.question}}" class="text-reading-prompt">
|
||
<text class="text-reading-label">看看画里发生了什么</text>
|
||
<text>{{currentPage.question}}</text>
|
||
</view>
|
||
</view>
|
||
</scroll-view>
|
||
<button
|
||
class="text-reading-return"
|
||
bindtap="closeTextReading"
|
||
aria-label="回到连环画"
|
||
>回到画里</button>
|
||
</view>
|
||
</view>
|
||
|
||
<view wx:if="{{decisionOpen && storyFirstComicMode}}" class="c1-decision-layer">
|
||
<view wx:if="{{resultMode === ''}}" class="c1-interaction-paper">
|
||
<view class="c1-interaction-evidence">
|
||
<image
|
||
wx:if="{{comicImageSrc}}"
|
||
class="c1-interaction-image"
|
||
src="{{comicImageSrc}}"
|
||
mode="aspectFit"
|
||
></image>
|
||
<view wx:else class="c1-back-image-fallback">{{currentPage.sceneAlt}}</view>
|
||
<text class="c1-back-stamp">画里的线索</text>
|
||
</view>
|
||
<view class="c1-interaction-panel">
|
||
<button class="c1-tray-close" bindtap="closeDecision" aria-label="收起选择,先回画面">先看画</button>
|
||
<view class="c1-tray-heading">
|
||
<text class="c1-tray-kicker">碰上这事,您怎么做?</text>
|
||
<text class="c1-tray-question">{{activeEvent.question}}</text>
|
||
</view>
|
||
<view class="c1-choice-stack">
|
||
<button
|
||
wx:for="{{activeEvent.choiceOptions}}"
|
||
wx:key="value"
|
||
class="c1-natural-choice"
|
||
data-value="{{item.value}}"
|
||
bindtap="answer"
|
||
>{{item.label}}</button>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
|
||
<view wx:elif="{{resultMode === 'retry'}}" class="c1-interaction-paper">
|
||
<view class="c1-interaction-evidence">
|
||
<image
|
||
wx:if="{{comicImageSrc}}"
|
||
class="c1-interaction-image"
|
||
src="{{comicImageSrc}}"
|
||
mode="aspectFit"
|
||
></image>
|
||
<view wx:else class="c1-back-image-fallback">{{currentPage.sceneAlt}}</view>
|
||
<text class="c1-back-stamp">再看看画里</text>
|
||
</view>
|
||
<view class="c1-interaction-panel c1-retry-panel">
|
||
<button class="c1-tray-close" bindtap="closeDecision" aria-label="回到画里">先看画</button>
|
||
<text class="c1-retry-title">别着急,再瞧瞧画里。</text>
|
||
<text class="c1-retry-copy">{{activeEvent.retryHint}}</text>
|
||
<button class="c1-retry-button" bindtap="retryAnswer">再看一眼</button>
|
||
</view>
|
||
</view>
|
||
|
||
<view wx:else class="c1-back-paper c1-event-result-back">
|
||
<view class="c1-back-evidence">
|
||
<image
|
||
wx:if="{{comicImageSrc}}"
|
||
class="c1-back-image"
|
||
src="{{comicImageSrc}}"
|
||
mode="aspectFit"
|
||
></image>
|
||
<view wx:else class="c1-back-image-fallback">{{currentPage.sceneAlt}}</view>
|
||
<text class="c1-back-stamp">这下有眉目了</text>
|
||
</view>
|
||
<scroll-view class="c1-back-copy" scroll-y enhanced show-scrollbar="{{true}}">
|
||
<view class="c1-back-copy-inner">
|
||
<text class="c1-back-kicker">{{activeEvent.actorName}} · 这一页背面</text>
|
||
<text class="c1-back-title">{{currentPage.headline}}</text>
|
||
<text class="c1-back-body">{{activeEvent.actionDescription}}</text>
|
||
<view wx:if="{{activeEvent.hotspotId === 'S01-H36' && !resultDetailOpen}}" class="c1-back-action">
|
||
<text class="c1-back-label">先把眼前这一步做好</text>
|
||
<text>先停酒、移开危险物,并留下人陪伴。</text>
|
||
</view>
|
||
<text wx:if="{{activeEvent.hotspotId === 'S01-H36' && !resultDetailOpen}}" class="c1-back-reason">这些表现不能仅凭外观确定原因,先保证安全。</text>
|
||
<block wx:else>
|
||
<view class="c1-back-callout">
|
||
<text class="c1-back-label">您刚才瞧见的</text>
|
||
<text>{{activeEvent.evidence}}</text>
|
||
</view>
|
||
<text class="c1-back-reason">{{activeEvent.reason}}</text>
|
||
<view class="c1-back-action">
|
||
<text class="c1-back-label">下回遇到这事</text>
|
||
<text>{{activeEvent.actionAdvice}}</text>
|
||
</view>
|
||
</block>
|
||
</view>
|
||
</scroll-view>
|
||
<text class="c1-scroll-hint">上划接着看 ↑</text>
|
||
<view class="c1-back-footer">
|
||
<button
|
||
wx:if="{{!(activeEvent.hotspotId === 'S01-H36' && !resultDetailOpen)}}"
|
||
class="c1-back-button secondary"
|
||
aria-label="回头再看一遍画面"
|
||
bindtap="returnFromChapterOneDecision"
|
||
>回去看画</button>
|
||
<button wx:if="{{activeEvent.hotspotId === 'S01-H36' && !resultDetailOpen}}" class="c1-back-button primary" bindtap="openResultDetail">再看不同情况怎么办</button>
|
||
<button wx:else class="c1-back-button primary" bindtap="nextFromChapterOneDecision">翻下一张</button>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
|
||
<view wx:elif="{{decisionOpen}}" class="dialog-backdrop">
|
||
<view
|
||
class="decision-dialog paper-panel comic-decision"
|
||
aria-role="dialog"
|
||
aria-label="{{activeEvent.actorName}}这一幕的互动选择"
|
||
>
|
||
<button
|
||
wx:if="{{!(resultMode === 'correct' && activeEvent.hotspotId === 'S01-H36' && !resultDetailOpen)}}"
|
||
class="dialog-close"
|
||
bindtap="closeDecision"
|
||
aria-label="回到画里"
|
||
>×</button>
|
||
|
||
<scroll-view class="character-story" scroll-y enhanced show-scrollbar="{{true}}">
|
||
<view class="character-story-inner">
|
||
<view class="comic-focus-visual">
|
||
<image
|
||
wx:if="{{comicImageSrc}}"
|
||
class="comic-focus-scene"
|
||
src="{{comicImageSrc}}"
|
||
mode="aspectFit"
|
||
style="{{comicFocusImageStyle}}"
|
||
></image>
|
||
<view class="comic-focus-shade"></view>
|
||
<view class="comic-focus-name">
|
||
<text>{{activePerson.eraLabel}} · 画中人物</text>
|
||
<text class="focus-name">{{activeEvent.actorName}}</text>
|
||
</view>
|
||
</view>
|
||
|
||
<text class="story-label">这一幕发生了什么</text>
|
||
<text class="action-description">{{activeEvent.actionDescription}}</text>
|
||
|
||
<view class="evidence-box">
|
||
<text class="story-label">手边证据</text>
|
||
<text>{{activeEvent.evidence}}</text>
|
||
</view>
|
||
|
||
<view class="speech-box">
|
||
<text class="story-label">桌边说话</text>
|
||
<text>{{activeEvent.speech}}</text>
|
||
</view>
|
||
</view>
|
||
</scroll-view>
|
||
|
||
<view class="judgement-side {{resultMode === '' ? 'is-choice' : 'has-result'}}">
|
||
<scroll-view
|
||
class="judgement-scroll"
|
||
scroll-y
|
||
enhanced
|
||
show-scrollbar="{{decisionResultNeedsScroll}}"
|
||
>
|
||
<view class="judgement-scroll-inner {{resultMode === '' ? 'is-choice' : 'is-result'}}">
|
||
<text class="judgement-lead">故事走到这里,您想怎么做?</text>
|
||
<text wx:if="{{resultMode === ''}}" class="judgement-question">{{activeEvent.question}}</text>
|
||
|
||
<view wx:if="{{resultMode === ''}}" class="judgement-options">
|
||
<button class="judgement-button observe" data-value="caution" bindtap="answer">
|
||
<text class="judgement-icon">A</text>
|
||
<view class="judgement-button-copy">
|
||
<text class="judgement-title">先看看现场细节</text>
|
||
</view>
|
||
</button>
|
||
<button class="judgement-button continue" data-value="safer" bindtap="answer">
|
||
<text class="judgement-icon">B</text>
|
||
<view class="judgement-button-copy">
|
||
<text class="judgement-title">继续按画里的做法</text>
|
||
</view>
|
||
</button>
|
||
</view>
|
||
|
||
<view wx:if="{{resultMode === 'retry'}}" class="result-box retry">
|
||
<text class="result-title">没关系,再看看画里的细节。</text>
|
||
<text>{{activeEvent.retryHint}}</text>
|
||
</view>
|
||
|
||
<view wx:if="{{resultMode === 'correct'}}" class="result-box correct" aria-live="polite">
|
||
<text class="result-title">这处线索对上了。</text>
|
||
<view wx:if="{{activeEvent.hotspotId === 'S01-H36' && !resultDetailOpen}}" class="action-advice">
|
||
<text class="advice-label">先把眼前这一步做好</text>
|
||
<text>先停酒、移开危险物,并留下人陪伴。</text>
|
||
</view>
|
||
<text wx:if="{{activeEvent.hotspotId === 'S01-H36' && !resultDetailOpen}}" class="reason">这些表现不能仅凭外观确定原因,先保证安全。</text>
|
||
<view wx:else class="action-advice">
|
||
<text class="advice-label">现在可以怎么做</text>
|
||
<text>{{activeEvent.actionAdvice}}</text>
|
||
</view>
|
||
<text wx:if="{{activeEvent.hotspotId !== 'S01-H36' || resultDetailOpen}}" class="reason">{{activeEvent.reason}}</text>
|
||
</view>
|
||
</view>
|
||
</scroll-view>
|
||
<view wx:if="{{resultMode === 'retry'}}" class="decision-footer">
|
||
<button class="decision-footer-button retry" bindtap="retryAnswer">再看一眼现场</button>
|
||
</view>
|
||
<view wx:if="{{resultMode === 'correct' && activeEvent.hotspotId === 'S01-H36' && !resultDetailOpen}}" class="decision-footer">
|
||
<button class="decision-footer-button primary" bindtap="openResultDetail">
|
||
再看不同情况怎么办
|
||
</button>
|
||
</view>
|
||
<view wx:elif="{{resultMode === 'correct'}}" class="decision-footer">
|
||
<button class="decision-footer-button primary" bindtap="continueAfterDecision">
|
||
回到画里
|
||
</button>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
|
||
</view>
|