feat: deliver V1.1 dual-client UI fidelity milestone

This commit is contained in:
2026-09-10 16:06:11 +08:00
parent 5b51d5b3f1
commit 45ca118453
82 changed files with 682 additions and 1167 deletions
+11 -1
View File
@@ -36,6 +36,7 @@ Page({
logoutAction: DANGER_ACTION.LOGOUT,
loginActions: [{ text: '微信登录', event: 'login', variant: 'primary' }],
hasOperatorToken: false,
profileCompleteness: 78,
},
onLoad() {
@@ -48,7 +49,6 @@ Page({
onShow() {
// 检测红娘工作台登录状态
this.setData({ hasOperatorToken: !!wx.getStorageSync('operatorToken') });
if (authStore.state.isLoggedIn) {
userStore.fetchStatus().catch((err) => appStore.toastError(err));
userStore.fetchProfile().catch(() => {});
@@ -173,6 +173,16 @@ Page({
}
},
onGoFate() { wx.navigateTo({ url: ROUTE.MAIN.FATE_CENTER }); },
onGoMatchmaker() { wx.navigateTo({ url: ROUTE.MAIN.MATCHMAKER }); },
onGoCounseling() { wx.navigateTo({ url: ROUTE.SERVICE.COUNSELING }); },
onGoActivities() { wx.navigateTo({ url: ROUTE.DETAIL.MY_ACTIVITIES }); },
onGoAppointments() { wx.navigateTo({ url: ROUTE.SERVICE.MY_APPOINTMENTS }); },
onGoServiceHistory() { wx.navigateTo({ url: ROUTE.SERVICE.HISTORY }); },
onGoSafety() { wx.navigateTo({ url: ROUTE.SETTINGS.MY_REPORTS }); },
onGoClassroom() { wx.navigateTo({ url: ROUTE.SERVICE.CLASSROOM }); },
onGoAntiFraud() { wx.navigateTo({ url: ROUTE.SERVICE.ANTI_FRAUD }); },
onGoStation() { wx.navigateTo({ url: ROUTE.SERVICE.STATION }); },
// ============ 其他 ============
onGoSettings() {
+14 -162
View File
@@ -1,170 +1,22 @@
<!-- 我的页 U30-U33(重构:userStore 派生状态 + ui-section-header) -->
<view class="page">
<!-- 未登录 -->
<ui-empty
wx:if="{{!isLoggedIn}}"
illustration="default"
title="未登录"
description="登录后可管理资料、查看匹配与消息。"
actions="{{loginActions}}"
bind:action="onLoginAction"
/>
<!-- 加载中(首次且无缓存资料) -->
<ui-loading
wx:elif="{{loadStatus === 'loading' && !profile}}"
mode="skeleton"
rows="6"
/>
<!-- 已登录:个人中心 -->
<ui-empty wx:if="{{!isLoggedIn}}" illustration="default" title="登录后查看我的服务" description="管理资料、缘分与公益服务记录" actions="{{loginActions}}" bind:action="onLoginAction"/>
<ui-loading wx:elif="{{loadStatus === 'loading' && !profile}}" mode="skeleton" rows="6"/>
<block wx:else>
<!-- 个人资料卡 -->
<view class="profile-card">
<ui-avatar
src="{{profile.avatarUrl || ''}}"
size="xl"
default-text="{{profile.displayName || ''}}"
verified="{{isRealNameVerified}}"
reviewed="{{isProfileApproved}}"
/>
<view class="profile-info">
<view class="profile-name">{{profile.displayName || '未填写昵称'}}</view>
<view class="profile-meta">{{profile.regionName || '丹阳'}}</view>
<view class="profile-badges">
<ui-status-badge
wx:if="{{isRealNameVerified}}"
kind="success"
label="已实名"
icon
/>
<ui-status-badge
wx:elif="{{verificationStatus === 'pending'}}"
kind="warning"
label="认证中"
icon
/>
<ui-status-badge
wx:else
kind="disabled"
label="未实名"
icon
/>
</view>
</view>
</view>
<view class="profile-card"><ui-avatar src="{{profile.avatarUrl || ''}}" size="xl" default-text="{{profile.displayName || ''}}" verified="{{isRealNameVerified}}" reviewed="{{isProfileApproved}}"/><view class="profile-info"><view class="profile-name">{{profile.displayName || '未填写昵称'}}</view><view class="profile-complete">资料完整度 {{profileCompleteness}}%</view><view class="profile-progress"><view style="width:{{profileCompleteness}}%"></view></view><view class="profile-badges"><ui-status-badge kind="{{isRealNameVerified ? 'success' : 'warning'}}" label="{{isRealNameVerified ? '已实名' : '未实名'}}"/><ui-status-badge kind="success" label="本地资格"/><ui-status-badge kind="{{isProfileApproved ? 'success' : 'warning'}}" label="{{isProfileApproved ? '资料已审核' : '资料待审核'}}"/></view></view></view>
<!-- 婚恋状态 -->
<ui-section-header title="婚恋状态" subtitle="{{relationshipText}}" />
<view class="action-row">
<ui-button
wx:if="{{canPause}}"
variant="secondary"
size="md"
block
bind:tap="onPause"
>暂停寻找</ui-button>
<ui-button
wx:if="{{canResume}}"
variant="primary"
size="md"
block
bind:tap="onResume"
>恢复寻找</ui-button>
<view wx:if="{{!canPause && !canResume}}" class="action-hint">
<text>当前状态不支持切换</text>
</view>
</view>
<ui-section-header title="我的" subtitle="资料与缘分"/>
<view class="list-group"><view class="list-row" bindtap="onEditProfile"><text class="list-label">我的资料</text><text class="list-value">{{reviewStatusText}}</text><text class="list-arrow">›</text></view><view class="list-row" bindtap="onEditPreference"><text class="list-label">择偶条件</text><text class="list-arrow">›</text></view><view class="list-row" bindtap="onGoFate"><text class="list-label">我的缘分</text><text class="list-arrow">›</text></view></view>
<!-- 我的资料 -->
<ui-section-header title="我的资料" subtitle="{{reviewStatusText}}" />
<view class="list-group">
<view class="list-row" bindtap="onEditProfile">
<text class="list-label">编辑基本资料</text>
<text class="list-arrow">›</text>
</view>
<view class="list-row" bindtap="onEditPreference">
<text class="list-label">择偶条件</text>
<text class="list-arrow">›</text>
</view>
<view class="list-row" bindtap="onEditPhotos">
<text class="list-label">生活照管理</text>
<text class="list-arrow">›</text>
</view>
<view class="list-row" bindtap="onGoAccountStatus">
<text class="list-label">审核与账号状态</text>
<text class="list-arrow">›</text>
</view>
</view>
<ui-section-header title="公益服务"/>
<view class="list-group"><view class="list-row" bindtap="onGoMatchmaker"><text class="list-label">我的红娘</text><text class="list-arrow">›</text></view><view class="list-row" bindtap="onGoCounseling"><text class="list-label">我的咨询</text><text class="list-arrow">›</text></view><view class="list-row" bindtap="onGoActivities"><text class="list-label">我的活动</text><text class="list-arrow">›</text></view><view class="list-row" bindtap="onGoAppointments"><text class="list-label">我的预约</text><text class="list-arrow">›</text></view><view class="list-row" bindtap="onGoServiceHistory"><text class="list-label">公益服务记录</text><text class="list-arrow">›</text></view></view>
<!-- 我的匹配 -->
<ui-section-header title="我的匹配" />
<view class="list-group">
<view class="list-row" bindtap="onGoMessages">
<text class="list-label">互相喜欢</text>
<text class="list-arrow">›</text>
</view>
<view class="list-row" bindtap="onGoLikers">
<text class="list-label">喜欢我的人</text>
<text class="list-value">{{likersCount > 0 ? likersCount + ' 人' : ''}}</text>
<text class="list-arrow">›</text>
</view>
</view>
<ui-section-header title="安全与隐私"/>
<view class="list-group"><view class="list-row" bindtap="onGoPrivacy"><text class="list-label">隐私设置</text><text class="list-arrow">›</text></view><view class="list-row" bindtap="onGoBlacklist"><text class="list-label">黑名单</text><text class="list-arrow">›</text></view><view class="list-row" bindtap="onGoSafety"><text class="list-label">举报与安全</text><text class="list-arrow">›</text></view><view class="list-row" bindtap="onGoSettings"><text class="list-label">账号设置</text><text class="list-arrow">›</text></view></view>
<!-- 账户与安全 -->
<ui-section-header title="账户与安全" />
<view class="list-group">
<view class="list-row" bindtap="onGoVerification">
<text class="list-label">实名认证</text>
<text class="list-value">{{isRealNameVerified ? '已认证' : (verificationStatus === 'pending' ? '认证中' : '未认证')}}</text>
<text class="list-arrow">›</text>
</view>
<view class="list-row" bindtap="onGoPrivacy">
<text class="list-label">隐私设置</text>
<text class="list-arrow">›</text>
</view>
<view class="list-row" bindtap="onGoBlacklist">
<text class="list-label">黑名单</text>
<text class="list-arrow">›</text>
</view>
</view>
<ui-section-header title="公益信息"/>
<view class="list-group"><view class="list-row" bindtap="onGoClassroom"><text class="list-label">婚恋课堂</text><text class="list-arrow">›</text></view><view class="list-row" bindtap="onGoAntiFraud"><text class="list-label">婚恋反诈</text><text class="list-arrow">›</text></view><view class="list-row" bindtap="onGoStation"><text class="list-label">善缘服务站</text><text class="list-arrow">›</text></view><view class="list-row" bindtap="onGoAbout"><text class="list-label">关于善缘丹阳</text><text class="list-arrow">›</text></view></view>
<!-- 其他 -->
<ui-section-header title="其他" />
<view class="list-group">
<view class="list-row" bindtap="onGoSettings">
<text class="list-label">设置</text>
<text class="list-arrow">›</text>
</view>
<view class="list-row" bindtap="onGoHelp">
<text class="list-label">帮助中心</text>
<text class="list-arrow">›</text>
</view>
<view class="list-row" bindtap="onGoAbout">
<text class="list-label">关于我们</text>
<text class="list-arrow">›</text>
</view>
</view>
<!-- 红娘工作台独立入口按钮 -->
<view class="workbench-btn" bindtap="onSwitchRole">
<text class="workbench-icon">👩</text>
<text class="workbench-text">{{hasOperatorToken ? '进入红娘工作台' : '红娘工作台登录'}}</text>
</view>
<!-- 退出登录 -->
<view class="list-group" style="margin-top: 24rpx;">
<view class="list-row danger" bindtap="onLogout">
<text class="list-label">退出登录</text>
</view>
</view>
<!-- 退出登录确认 -->
<ui-danger-action-dialog
visible="{{showLogoutDialog}}"
action="{{logoutAction}}"
bind:confirm="onConfirmLogout"
bind:cancel="onCancelLogout"
/>
<view class="list-group"><view class="list-row danger" bindtap="onLogout"><text class="list-label">退出登录</text></view></view>
<ui-danger-action-dialog visible="{{showLogoutDialog}}" action="{{logoutAction}}" bind:confirm="onConfirmLogout" bind:cancel="onCancelLogout"/>
</block>
</view>
</view>
+1 -28
View File
@@ -98,31 +98,4 @@
width: 100%;
}
/* ============ 红娘工作台入口按钮 ============ */
.workbench-btn {
margin: 32rpx var(--spacing-page-x);
display: flex;
align-items: center;
justify-content: center;
gap: 12rpx;
background: linear-gradient(135deg, #E96B6B 0%, #ff9a9a 100%);
color: #fff;
height: 88rpx;
border-radius: 44rpx;
font-size: 30rpx;
font-weight: 600;
box-shadow: 0 4rpx 16rpx rgba(233, 107, 107, 0.3);
}
.workbench-btn:active {
opacity: 0.85;
transform: scale(0.98);
}
.workbench-icon {
font-size: 36rpx;
}
.workbench-text {
color: #fff;
}
.profile-complete{font-size:22rpx;color:var(--color-text-tertiary);margin-top:4rpx}.profile-progress{height:8rpx;margin:10rpx 0 14rpx;border-radius:999rpx;background:var(--color-divider);overflow:hidden}.profile-progress view{height:100%;background:var(--color-primary);border-radius:999rpx}.list-row{min-height:88rpx;box-sizing:border-box}.page ui-section-header{display:block;padding:0 var(--spacing-page-x)}