201 lines
9.1 KiB
Plaintext
201 lines
9.1 KiB
Plaintext
<wxs src="../../utils/tools.wxs" module="tools" />
|
|
<view class="profile-page">
|
|
<!-- Sub-views handled by conditional rendering to match prototype single-page feel -->
|
|
|
|
<!-- FAVORITES VIEW -->
|
|
<view wx:if="{{view === 'favorites'}}" class="favorites-page info-view-anim">
|
|
<view class="back-nav sticky-nav">
|
|
<t-button variant="text" icon="arrow-left" bind:tap="setView" data-view="profile">我的收藏</t-button>
|
|
</view>
|
|
|
|
<t-tabs value="{{favTab}}" bind:change="onFavTabChange" theme="card">
|
|
<t-tab-panel label="全部" value="all" />
|
|
<t-tab-panel label="植物" value="plant" />
|
|
<t-tab-panel label="文章" value="article" />
|
|
</t-tabs>
|
|
|
|
<view class="tab-content">
|
|
<view class="fav-grid">
|
|
<block wx:if="{{filteredFavorites.length > 0}}">
|
|
<view wx:for="{{filteredFavorites}}" wx:key="id" class="fav-card">
|
|
<t-image src="{{tools.resolvePath(item.image)}}" class="fav-img" mode="aspectFill" width="100%" height="240rpx" />
|
|
<view class="fav-info">
|
|
<text class="fav-name">{{item.name}}</text>
|
|
<view class="fav-meta-row">
|
|
<t-icon name="{{item.type === 'plant' ? 'heart' : 'book'}}" size="32rpx" color="#90A4AE" />
|
|
<text class="fav-type">{{item.meta}}</text>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</block>
|
|
<block wx:else>
|
|
<view class="empty-state">
|
|
<t-icon name="star" size="64rpx" color="#ccc" />
|
|
<text style="margin-top: 16rpx;">暂无收藏内容</text>
|
|
</view>
|
|
</block>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
|
|
<!-- POSTS VIEW -->
|
|
<view wx:elif="{{view === 'posts'}}" class="posts-page-detail info-view-anim">
|
|
<view class="back-nav sticky-nav">
|
|
<t-button variant="text" icon="arrow-left" bind:tap="setView" data-view="profile">我的发布</t-button>
|
|
</view>
|
|
|
|
<!-- Tabs for Published / Drafts -->
|
|
<t-tabs value="{{postsTab}}" bind:change="onPostsTabChange" theme="card">
|
|
<t-tab-panel label="已发布" value="published" />
|
|
<t-tab-panel label="草稿箱" value="drafts" />
|
|
</t-tabs>
|
|
|
|
<!-- Published Posts -->
|
|
<view wx:if="{{postsTab === 'published'}}" class="my-posts-list">
|
|
<block wx:if="{{myPublishedPosts.length > 0}}">
|
|
<view wx:for="{{myPublishedPosts}}" wx:key="id" class="my-post-card">
|
|
<view class="my-post-time">{{item.time}}</view>
|
|
<view class="my-post-content-wrap">
|
|
<text class="post-text">{{item.content}}</text>
|
|
<view wx:if="{{item.images.length > 0}}" class="my-post-images">
|
|
<t-image wx:for="{{item.images}}" wx:for-item="img" wx:key="*this" src="{{tools.resolvePath(img)}}" mode="aspectFill" width="160rpx" height="160rpx" style="margin-right: 16rpx; display: inline-block; border-radius: 8rpx;" />
|
|
</view>
|
|
<view class="my-post-footer">
|
|
<view class="footer-item"><t-icon name="heart" size="32rpx" /> <text>{{item.likes.length}}</text></view>
|
|
<view class="footer-item"><t-icon name="chat" size="32rpx" /> <text>{{item.comments.length}}</text></view>
|
|
<view class="footer-item delete-btn" bindtap="deletePost" data-id="{{item.id}}"><t-icon name="delete" size="32rpx" color="#EF5350" /></view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</block>
|
|
<view wx:else class="empty-state">
|
|
<t-icon name="file-copy" size="64rpx" color="#ccc" />
|
|
<text style="margin-top: 16rpx;">暂无已发布的动态</text>
|
|
</view>
|
|
</view>
|
|
|
|
<!-- Draft Posts -->
|
|
<view wx:if="{{postsTab === 'drafts'}}" class="my-posts-list">
|
|
<block wx:if="{{myDrafts.length > 0}}">
|
|
<view wx:for="{{myDrafts}}" wx:key="id" class="my-post-card draft-card">
|
|
<view class="draft-badge">草稿</view>
|
|
<view class="my-post-content-wrap">
|
|
<text class="post-text">{{item.content || '(无文字内容)'}}</text>
|
|
<view wx:if="{{item.images.length > 0}}" class="my-post-images">
|
|
<t-image wx:for="{{item.images}}" wx:for-item="img" wx:key="*this" src="{{img}}" mode="aspectFill" width="160rpx" height="160rpx" style="margin-right: 16rpx; display: inline-block; border-radius: 8rpx;" />
|
|
</view>
|
|
<view class="my-post-footer">
|
|
<view class="footer-item edit-btn" bindtap="editDraft" data-index="{{index}}">
|
|
<t-icon name="edit" size="32rpx" color="#558B2F" />
|
|
<text style="color: #558B2F;">编辑</text>
|
|
</view>
|
|
<view class="footer-item delete-btn" bindtap="deleteDraft" data-index="{{index}}">
|
|
<t-icon name="delete" size="32rpx" color="#EF5350" />
|
|
<text style="color: #EF5350;">删除</text>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</block>
|
|
<view wx:else class="empty-state">
|
|
<t-icon name="file-add" size="64rpx" color="#ccc" />
|
|
<text style="margin-top: 16rpx;">暂无草稿</text>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
|
|
<!-- BADGES VIEW -->
|
|
<view wx:elif="{{view === 'badges'}}" class="badges-page info-view-anim">
|
|
<view class="back-nav sticky-nav">
|
|
<t-button variant="text" icon="arrow-left" bind:tap="setView" data-view="profile">成就徽章</t-button>
|
|
</view>
|
|
|
|
<scroll-view scroll-y class="badges-content">
|
|
<view class="level-card-large">
|
|
<view class="level-header">
|
|
<view class="level-info-large">
|
|
<text class="level-label">当前等级</text>
|
|
<text class="level-value">Lv.4 资深植人</text>
|
|
</view>
|
|
<t-icon name="trophy" size="80rpx" color="#FFD700" />
|
|
</view>
|
|
|
|
<view class="level-progress-section">
|
|
<view class="progress-text">
|
|
<text>经验值</text>
|
|
<text>350 / 500</text>
|
|
</view>
|
|
<t-progress percentage="70" theme="plump" color="#FFD700" track-color="rgba(255,255,255,0.3)" />
|
|
<text class="next-level-tip">距离 Lv.5 园艺大师 还需 150 经验</text>
|
|
</view>
|
|
</view>
|
|
|
|
<view class="section-title-badges">所有徽章 (3/6)</view>
|
|
<t-grid column="{{3}}" gutter="24rpx">
|
|
<t-grid-item wx:for="{{badges}}" wx:key="id" text="{{item.name}}" description="{{item.desc}}" image="{{item.unlocked ? '/assets/icons/'+item.icon+'.png' : '/assets/icons/lock.png'}}" />
|
|
<!-- TDesign grid item image might need full path or use slot for svg if needed, using png for now -->
|
|
</t-grid>
|
|
</scroll-view>
|
|
</view>
|
|
|
|
<!-- MAIN PROFILE VIEW -->
|
|
<view wx:else class="main-profile-view">
|
|
<view class="profile-header">
|
|
<view class="user-main">
|
|
<view class="user-avatar">
|
|
<t-avatar image="https://api.dicebear.com/7.x/avataaars/svg?seed=Lucky" size="large" />
|
|
</view>
|
|
<view class="user-text">
|
|
<text class="user-name">布偶猫园长</text>
|
|
<t-tag theme="warning" variant="light" size="small">Lv.4 资深植人</t-tag>
|
|
</view>
|
|
</view>
|
|
<t-icon name="setting" size="48rpx" />
|
|
</view>
|
|
|
|
<scroll-view scroll-y class="profile-content">
|
|
<view class="stats-grid">
|
|
<view class="stat-col">
|
|
<text class="stat-num">12</text>
|
|
<text class="stat-label">植物</text>
|
|
</view>
|
|
<view class="stat-col">
|
|
<text class="stat-num">328</text>
|
|
<text class="stat-label">养护</text>
|
|
</view>
|
|
<view class="stat-col">
|
|
<text class="stat-num">15</text>
|
|
<text class="stat-label">关注</text>
|
|
</view>
|
|
</view>
|
|
|
|
<view class="profile-menu">
|
|
<t-cell-group title="常用功能" theme="card">
|
|
<t-cell title="我的收藏" hover arrow bind:tap="setView" data-view="favorites">
|
|
<t-icon slot="left-icon" name="star" color="#FFA000" style="margin-right: 16rpx;" />
|
|
</t-cell>
|
|
<t-cell title="我的发布" hover arrow bind:tap="setView" data-view="posts">
|
|
<t-icon slot="left-icon" name="file-copy" color="#1976D2" style="margin-right: 16rpx;" />
|
|
</t-cell>
|
|
<t-cell title="识别记录" hover arrow>
|
|
<t-icon slot="left-icon" name="scan" color="#388E3C" style="margin-right: 16rpx;" />
|
|
</t-cell>
|
|
<t-cell title="成就徽章" note="已获 3 个" hover arrow bind:tap="setView" data-view="badges">
|
|
<t-icon slot="left-icon" name="control-platform" color="#AB47BC" style="margin-right: 16rpx;" />
|
|
</t-cell>
|
|
</t-cell-group>
|
|
|
|
<t-cell-group title="更多服务" theme="card" style="margin-top: 24rpx;">
|
|
<t-cell title="帮助与反馈" hover arrow>
|
|
<t-icon slot="left-icon" name="help-circle" color="#757575" style="margin-right: 16rpx;" />
|
|
</t-cell>
|
|
</t-cell-group>
|
|
|
|
</view>
|
|
|
|
<!-- Spacer -->
|
|
<view style="height: 40rpx;"></view>
|
|
</scroll-view>
|
|
</view>
|
|
</view>
|