121 lines
6.0 KiB
Plaintext
121 lines
6.0 KiB
Plaintext
<view class="page">
|
||
<scroll-view scroll-y class="content">
|
||
<canvas canvas-id="avatar-canvas" class="avatar-canvas"></canvas>
|
||
<view wx:if="{{loading}}" class="empty-state">
|
||
<text class="empty-title">加载中...</text>
|
||
<text class="empty-subtitle">正在获取个人信息</text>
|
||
</view>
|
||
|
||
<view wx:elif="{{!username}}" class="empty-state">
|
||
<text class="empty-title">账号登录</text>
|
||
<text class="empty-subtitle">使用账号密码登录,或先注册一个新账号</text>
|
||
<view class="auth-switch">
|
||
<view class="auth-chip {{authMode === 'login' ? 'active' : ''}}" data-mode="login" bindtap="onAuthModeChange">登录</view>
|
||
<view class="auth-chip {{authMode === 'register' ? 'active' : ''}}" data-mode="register" bindtap="onAuthModeChange">注册</view>
|
||
</view>
|
||
<view class="auth-card">
|
||
<input class="auth-input" placeholder="请输入账号" value="{{authForm.username}}" data-field="username" bindinput="onAuthInput" />
|
||
<input class="auth-input" password="true" placeholder="请输入密码" value="{{authForm.password}}" data-field="password" bindinput="onAuthInput" />
|
||
<input wx:if="{{authMode === 'register'}}" class="auth-input" placeholder="请输入昵称" value="{{authForm.nickname}}" data-field="nickname" bindinput="onAuthInput" />
|
||
<button class="auth-submit" bindtap="submitAuth">{{authMode === 'register' ? '注册并登录' : '登录'}}</button>
|
||
</view>
|
||
</view>
|
||
|
||
<view wx:elif="{{error}}" class="error-banner">
|
||
<text class="error-text">{{error}}</text>
|
||
<button class="secondary-btn error-btn" bindtap="loadProfile">重试</button>
|
||
</view>
|
||
|
||
<view wx:else class="hero-section">
|
||
<button class="hero-avatar-wrap avatar-choose-btn" hover-class="none" open-type="chooseAvatar" bindchooseavatar="onChooseAvatar">
|
||
<view class="hero-avatar-border">
|
||
<image class="hero-avatar" src="{{avatarUrl || defaultAvatarUrl}}" mode="aspectFill" binderror="onAvatarError" />
|
||
<view class="avatar-mask">
|
||
<text class="avatar-mask-text">选择头像</text>
|
||
</view>
|
||
</view>
|
||
</button>
|
||
<view class="hero-info">
|
||
<text class="hero-name" bindtap="openNicknameModal">{{name}}</text>
|
||
<view class="hero-badge">
|
||
<view class="pulse-dot"></view>
|
||
<text class="badge-text">坚持了 {{days}} 天</text>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
|
||
<view wx:if="{{username && badges === 0}}" class="empty-state small">
|
||
<text class="empty-title">还没有解锁成就</text>
|
||
<text class="empty-subtitle">继续复习和打卡,成就会逐渐点亮</text>
|
||
</view>
|
||
|
||
<view wx:if="{{username}}" class="grid-2">
|
||
<view class="glass-card accent-tertiary" bindtap="goTo" data-url="/package-stats/pages/achievements/achievements">
|
||
<view class="card-glow"></view>
|
||
<view class="card-icon icon-tertiary">🏅</view>
|
||
<text class="card-title">成就墙</text>
|
||
<text class="card-subtitle">已解锁 {{badges}} 枚勋章</text>
|
||
</view>
|
||
<view class="glass-card accent-secondary" bindtap="goTo" data-url="/package-stats/pages/checkin-detail/checkin-detail">
|
||
<view class="card-glow"></view>
|
||
<view class="card-icon icon-secondary">📅</view>
|
||
<text class="card-title">打卡详情</text>
|
||
<text class="card-subtitle">查看坚持记录</text>
|
||
</view>
|
||
</view>
|
||
|
||
<view class="divider-row">
|
||
<view class="divider"></view>
|
||
<text class="section-kicker">数据管理</text>
|
||
<view class="divider"></view>
|
||
</view>
|
||
|
||
<view class="grid-2 management-grid">
|
||
<view class="small-action" bindtap="goTo" data-url="/package-vocab/pages/vocab-manage/vocab-manage">
|
||
<view class="small-icon primary">📚</view>
|
||
<text class="small-text">词库管理</text>
|
||
</view>
|
||
<view class="small-action" bindtap="goTo" data-url="/package-vocab/pages/entry-edit/entry-edit">
|
||
<view class="small-icon secondary">+</view>
|
||
<text class="small-text">手动新增</text>
|
||
</view>
|
||
<view class="small-action" bindtap="goTo" data-url="/package-vocab/pages/batch-upload/batch-upload">
|
||
<view class="small-icon tertiary">☁</view>
|
||
<text class="small-text">批量上传</text>
|
||
</view>
|
||
<view class="small-action" bindtap="goTo" data-url="/package-stats/pages/progress-list/progress-list">
|
||
<view class="small-icon primary-fixed">≡</view>
|
||
<text class="small-text">进度列表</text>
|
||
</view>
|
||
</view>
|
||
|
||
<view class="settings-card" bindtap="goTo" data-url="/package-stats/pages/settings/settings">
|
||
<view class="settings-icon">⚙</view>
|
||
<text class="settings-text">设置中心</text>
|
||
<view class="chevron">›</view>
|
||
</view>
|
||
|
||
<button wx:if="{{username}}" class="logout-btn" bindtap="logout">退出登录</button>
|
||
</scroll-view>
|
||
|
||
<view wx:if="{{showNicknameModal}}" class="modal-mask" bindtap="closeNicknameModal">
|
||
<view class="modal-card" catchtap="noop">
|
||
<view class="modal-header">
|
||
<text class="modal-title">修改昵称</text>
|
||
<text class="modal-close" bindtap="closeNicknameModal">×</text>
|
||
</view>
|
||
<input class="modal-input" type="nickname" value="{{nicknameDraft}}" placeholder="请输入昵称" maxlength="100" focus="true" bindinput="onNicknameInput" />
|
||
<view class="modal-actions">
|
||
<button class="modal-btn ghost" bindtap="closeNicknameModal">取消</button>
|
||
<button class="modal-btn primary" bindtap="saveNickname">保存</button>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
|
||
<view class="bottom-nav">
|
||
<view class="nav-item" bindtap="goHome"><text class="nav-icon">⌂</text><text class="nav-label">首页</text></view>
|
||
<view class="nav-item" bindtap="goToReview"><text class="nav-icon">↻</text><text class="nav-label">复习</text></view>
|
||
<view class="nav-item active"><text class="nav-icon">☺</text><text class="nav-label">我的</text></view>
|
||
</view>
|
||
</view>
|