Files
2026-09-09 14:47:29 +08:00

933 lines
46 KiB
Plaintext
Raw Permalink 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.
<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>