Files
miniprogram-1/miniprogram/pages/upload/upload.wxml
2025-12-30 20:37:59 +08:00

170 lines
11 KiB
Plaintext
Executable File

<!-- upload.wxml - 主功能页面 -->
<navigation-bar title="" back="{{false}}" color="{{day_type === 'night' ? 'white' : 'black'}}" background="{{day_type === 'night' ? '#0E1330' : '#FDFDFC'}}">
<view slot="left">
<t-icon class="user-home" name="user-circle" size="46rpx" bind:tap="goProfile" />
</view>
</navigation-bar>
<view class="{{['upload-container', day_type]}}">
<!-- 主功能界面 -->
<view class="main-content">
<view class="sunny-wrap" wx:if="{{ day_type !== 'night' }}">
<image src="{{sunSvgData}}" class="sunny-icon" />
<image class="face {{facePosition}}" src="{{avatarSvgData}}" mode="aspectFit"></image>
</view>
<view wx:else>
<view class="moon-wrap">
<t-icon name="moon-filled" class="moon-icon" size="160rpx" />
</view>
<div class="star-icon">★</div>
<div class="star-icon-2">★</div>
</view>
<t-icon name="cloud-filled" class="cloud-icon" size="220rpx" />
<view class="feature-section">
<!-- <view class="date">{{ current_date }}</view> -->
<!-- <view class="hello">{{DayTypeMap[day_type]}}</view> -->
<!-- <view class="begin-text">用一个新单词, 开启美好的一天</view> -->
<view class="camera-wrawpper {{!isLoading && todaySummary.length == 0 && groupedHistory.length == 0 && !takePhoto ? 'default' : ''}} {{takePhoto ? 'action' : ''}}">
<view class="camera" bindtap="handleImageSelect">
<view class="strip"></view>
<view class="lens">
<view class="lens-shutter"></view>
</view>
<view class="led"></view>
<view class="btn"></view>
<view class="bottom"></view>
</view>
<view class="photo-wrapper" wx:if="{{(!isLoading && todaySummary.length == 0 && groupedHistory.length == 0) || takePhoto}}">
<view class="photo">
<view class="photo-inner">
<image class="photo-image" src="{{takePhoto ? photoPath : photoSvgData}}" mode="{{takePhoto ? 'widthFix' : 'aspectFit'}}" bindload="onPhotoImageLoad" binderror="onPhotoImageError"></image>
</view>
</view>
</view>
<view wx:if="{{takePhoto && showExpandLayer }}" class="photo-expand-layer" style="{{photoExpandTransform}} {{photoExpandTransition}}">
<!-- <view class="photo-expand-inner" style="{{photoExpandCurrentWidth ? ('width: ' + photoExpandCurrentWidth + 'px;') : ''}} {{photoExpandCurrentHeight ? ('height: ' + photoExpandCurrentHeight + 'px;') : ''}}"> -->
<view class="photo-expand-inner" style="{{photoExpandCurrentWidth ? ('width: ' + photoExpandCurrentWidth + 'px;') : ''}} {{photoExpandCurrentHeight ? ('height: ' + photoExpandCurrentHeight + 'px;') : ''}}">
<image class="photo-expand-image {{photoExpandLoaded ? 'visible' : 'hidden'}}" src="{{takePhoto ? photoExpandSrc : photoSvgData}}" mode="widthFix" bindload="onPhotoExpandLoaded" binderror="onPhotoExpandError"></image>
<view class="scanner {{scannerVisible ? 'scanner-visible' : 'scanner-hidden'}}">
<view class="star star1"></view>
<view class="star star2"></view>
<view class="star star3"></view>
</view>
</view>
</view>
<t-action-sheet id="t-action-sheet" bind:selected="handleSelected" />
</view>
</view>
<view wx:if="{{!takePhoto && dateStripItems && dateStripItems.length > 0}}" class="date-section">
<view class="date-strip-header">
<text class="month-title">{{selectedMonthTitle}}</text>
<!-- <t-icon name="calendar" size="40rpx" /> -->
</view>
<scroll-view class="date-strip" scroll-x scroll-with-animation="{{true}}" scroll-left="{{dateStripScrollLeft}}">
<view class="date-strip-inner {{stripCentered ? 'strip-center' : 'strip-default'}}" style="gap: {{dateItemGapRpx}}rpx; {{dateStripTransform}}">
<block wx:for="{{dateStripItems}}" wx:key="index">
<view wx:if="{{item.type === 'day'}}" id="date-item-{{item.key}}" class="date-item {{item.key === selectedDateKey ? 'active' : ''}}" data-key="{{item.key}}" bindtap="onDateTap" style="width: {{dateItemWidthRpx}}rpx; flex: 0 0 {{dateItemWidthRpx}}rpx;">
<view class="weekday">{{item.weekday}}</view>
<view class="day">{{item.day}}</view>
</view>
<view wx:elif="{{item.type === 'ym'}}" id="date-item-{{item.key}}" class="date-item label" style="width: {{dateItemWidthRpx}}rpx; flex: 0 0 {{dateItemWidthRpx}}rpx;">
<view class="weekday">{{item.year}}</view>
<view class="day">{{item.month}}</view>
</view>
</block>
</view>
</scroll-view>
</view>
<view wx:if="{{!takePhoto && selectedDateImages && selectedDateImages.length > 0}}" class="history-wrap">
<view class="history-card-item white-card">
<scroll-view scroll-y>
<block wx:if="{{!useWaterfall}}">
<view class="image-list">
<view class="list-item {{animateWaterfall ? 'fade-in' : ''}}" wx:for="{{selectedDateImages}}" wx:for-item="image" wx:for-index="k" wx:key="image_id" catch:tap="onImageTap" data-image-id="{{image.image_id}}" style="animation-delay: {{k * 0.15}}s;">
<t-skeleton wx:if="{{image.thumbnail_loading}}" class="full-image" row-col="{{[1]}}" animation="gradient" loading></t-skeleton>
<image wx:else class="full-image" src="{{image.thumbnail_url}}" mode="widthFix" bindload="onThumbLoaded" data-image-id="{{image.image_id}}"/>
<view wx:if="{{image.thumbnail_url}}" class="image-more-wrap" catchtap="noop">
<view class="mini-button" bindtap="onImageMoreTap" data-image-id="{{image.image_id}}">
<view class="ul-mini {{image.more_open ? 'active' : ''}}">
<view class="dot1"></view>
<view class="dot2"></view>
<view class="dot3"></view>
</view>
</view>
<view wx:if="{{image.more_open || image.menu_closing}}" class="image-more-menu {{image.menu_closing ? 'closing' : 'opening'}}">
<view class="more-item-mini" bindtap="onImageSceneSentenceTap" data-image-id="{{image.image_id}}">场景句型</view>
<view class="more-item-mini" bindtap="onImageQaExerciseTap" data-image-id="{{image.image_id}}" data-thumbnail-id="{{image.thumbnail_file_id}}">场景练习</view>
</view>
</view>
</view>
</view>
</block>
<block wx:else>
<view class="waterfall">
<view class="wf-col">
<view class="wf-item {{animateWaterfall ? 'fade-in' : ''}}" wx:for="{{waterfallLeft}}" wx:for-index="i" wx:key="image_id" catch:tap="onImageTap" data-image-id="{{item.image_id}}" style="animation-delay: {{i * 0.15}}s;">
<t-skeleton wx:if="{{item.thumbnail_loading}}" class="wf-image" row-col="{{[1]}}" animation="gradient" loading></t-skeleton>
<image wx:else class="wf-image" src="{{item.thumbnail_url}}" mode="widthFix" bindload="onWfThumbLoaded" data-image-id="{{item.image_id}}"/>
<view wx:if="{{item.thumbnail_url}}" class="image-more-wrap" catchtap="noop">
<view class="mini-button" bindtap="onImageMoreTap" data-image-id="{{item.image_id}}">
<view class="ul-mini {{item.more_open ? 'active' : ''}}">
<view class="dot1"></view>
<view class="dot2"></view>
<view class="dot3"></view>
</view>
</view>
<view wx:if="{{item.more_open || item.menu_closing}}" class="image-more-menu {{item.menu_closing ? 'closing' : 'opening'}}">
<view class="more-item-mini" bindtap="onImageSceneSentenceTap" data-image-id="{{item.image_id}}">场景句型</view>
<view class="more-item-mini" bindtap="onImageQaExerciseTap" data-image-id="{{item.image_id}}" data-thumbnail-id="{{item.thumbnail_file_id}}">场景练习</view>
</view>
</view>
</view>
</view>
<view class="wf-col">
<view class="wf-item {{animateWaterfall ? 'fade-in' : ''}}" wx:for="{{waterfallRight}}" wx:for-index="j" wx:key="image_id" catch:tap="onImageTap" data-image-id="{{item.image_id}}" style="animation-delay: {{j * 0.15 + 0.15}}s;">
<t-skeleton wx:if="{{item.thumbnail_loading}}" class="wf-image" row-col="{{[1]}}" animation="gradient" loading></t-skeleton>
<image wx:else class="wf-image" src="{{item.thumbnail_url}}" mode="widthFix" bindload="onWfThumbLoaded" data-image-id="{{item.image_id}}"/>
<view wx:if="{{item.thumbnail_url}}" class="image-more-wrap" catchtap="noop">
<view class="mini-button" bindtap="onImageMoreTap" data-image-id="{{item.image_id}}">
<view class="ul-mini {{item.more_open ? 'active' : ''}}">
<view class="dot1"></view>
<view class="dot2"></view>
<view class="dot3"></view>
</view>
</view>
<view wx:if="{{item.more_open || item.menu_closing}}" class="image-more-menu {{item.menu_closing ? 'closing' : 'opening'}}">
<view class="more-item-mini" bindtap="onImageSceneSentenceTap" data-image-id="{{item.image_id}}">场景句型</view>
<view class="more-item-mini" bindtap="onImageQaExerciseTap" data-image-id="{{item.image_id}}">场景练习</view>
</view>
</view>
</view>
</view>
</view>
</block>
</scroll-view>
</view>
</view>
<view wx:if="{{!isLoadingToday && !takePhoto && selectedDateKey === todayKey && (!selectedDateImages || selectedDateImages.length === 0)}}" class="history-wrap">
<view class="history-card-item blank-card">
<view class="blank-content {{animateWaterfall ? 'visible' : ''}}" bindtap="handleImageSelect">
<view class="photo-inner">
<image class="blank-image" src="{{photoSvgData}}" mode="{{'aspectFit'}}"></image>
</view>
</view>
</view>
</view>
<!-- 历史记录区域 -->
<!-- 仅在加载更多时显示骨架屏 -->
<!-- <t-skeleton wx:if="{{isLoading && page >= 1}}" theme="paragraph" animation="gradient" loading="{{true}}"></t-skeleton> -->
<!-- 使用提示 -->
<!-- <view class="tips-section">
<view class="tips-card">
<text class="tips-title">使用提示</text>
<view class="tips-list">
<text class="tip-item">• 拍照时请确保光线充足</text>
<text class="tip-item">• 图片会自动压缩以提高识别速度</text>
</view>
</view>
</view> -->
</view>
</view>