chore: establish V1.1 recovery baseline

This commit is contained in:
2026-09-09 22:05:00 +08:00
commit b46b48eb33
947 changed files with 155471 additions and 0 deletions
@@ -0,0 +1,86 @@
/**
* 我的婚恋状态页 U41
* 展示当前状态,提供退出服务/正在了解/成功牵手入口
*/
const api = require('../../utils/api');
Page({
data: {
relationshipStatus: 'searching', // searching, paused, getting_to_know, matched_successfully
recommendationEnabled: true,
matchCount: 0,
loading: false
},
onLoad() {
this.loadStatus();
},
onShow() {
this.loadStatus();
},
async loadStatus() {
try {
const token = wx.getStorageSync('accessToken');
const res = await api.get('/account/status', {}, { Authorization: `Bearer ${token}` });
this.setData({
relationshipStatus: res.relationshipStatus || 'searching',
recommendationEnabled: res.recommendationEnabled !== false,
matchCount: res.activeMatchCount || 0
});
} catch (err) {
console.error(err);
}
},
async withdrawService() {
wx.showModal({
title: '退出婚恋服务',
content: '退出后您的资料将不再展示,系统不再为您推荐对象,但账号保留。是否继续?',
success: async (ret) => {
if (ret.confirm) {
try {
const token = wx.getStorageSync('accessToken');
await api.post('/account/withdraw', {}, { Authorization: `Bearer ${token}` });
this.setData({ recommendationEnabled: false, relationshipStatus: 'paused' });
wx.showToast({ title: '已退出婚恋服务', icon: 'success' });
} catch (err) {
wx.showToast({ title: err.message || '操作失败', icon: 'none' });
}
}
}
});
},
async resumeService() {
try {
const token = wx.getStorageSync('accessToken');
await api.post('/account/resume', {}, { Authorization: `Bearer ${token}` });
this.setData({ recommendationEnabled: true, relationshipStatus: 'searching' });
wx.showToast({ title: '已重新开启', icon: 'success' });
} catch (err) {
wx.showToast({ title: err.message || '操作失败', icon: 'none' });
}
},
goSuccessConfirm() {
wx.navigateTo({ url: '/pages/success-confirm/success-confirm' });
},
goPrivacy() {
wx.navigateTo({ url: '/pages/privacy-settings/privacy-settings' });
},
goLogout() {
wx.showModal({
title: '注销账号',
content: '注销后所有数据将被删除且不可恢复,是否继续?',
success: (ret) => {
if (ret.confirm) {
wx.navigateTo({ url: '/pages/account-logout/account-logout' });
}
}
});
}
});
@@ -0,0 +1,4 @@
{
"navigationBarTitleText": "我的婚恋状态",
"usingComponents": {}
}
@@ -0,0 +1,35 @@
<!-- 我的婚恋状态页 U41 -->
<view class="page">
<view class="status-card" wx:if="{{recommendationEnabled}}">
<view class="status-icon">💚</view>
<text class="status-title">正在寻找</text>
<text class="status-hint">您的资料正在推荐给潜在对象,共 {{matchCount}} 个活跃匹配</text>
<button class="btn-withdraw" bindtap="withdrawService">退出婚恋服务</button>
</view>
<view class="status-card paused" wx:if="{{!recommendationEnabled}}">
<view class="status-icon">⏸</view>
<text class="status-title">婚恋服务已暂停</text>
<text class="status-hint">您的资料已隐藏,系统不再为您推荐对象。您可随时重新开启。</text>
<button class="btn-resume" bindtap="resumeService">重新开启婚恋服务</button>
</view>
<view class="menu-list">
<view class="menu-item" bindtap="goSuccessConfirm">
<text class="menu-icon">💍</text>
<text class="menu-text">成功牵手确认</text>
<text class="menu-arrow">›</text>
</view>
<view class="menu-item" bindtap="goPrivacy">
<text class="menu-icon">🔒</text>
<text class="menu-text">隐私设置</text>
<text class="menu-arrow">›</text>
</view>
<view class="menu-item danger" bindtap="goLogout">
<text class="menu-icon">🗑</text>
<text class="menu-text">注销账号</text>
<text class="menu-hint">注销后数据不可恢复</text>
<text class="menu-arrow">›</text>
</view>
</view>
</view>
@@ -0,0 +1,59 @@
.page { padding: 32rpx; background: #FFF8F7; min-height: 100vh; }
.status-card {
background: #fff;
border-radius: 24rpx;
padding: 48rpx 32rpx;
text-align: center;
margin-bottom: 32rpx;
box-shadow: 0 2rpx 12rpx rgba(0,0,0,0.04);
}
.status-card.paused {
background: #F9F9F9;
}
.status-icon { font-size: 72rpx; display: block; margin-bottom: 16rpx; }
.status-title { font-size: 32rpx; font-weight: bold; color: #1A1A1A; display: block; }
.status-hint { font-size: 24rpx; color: #999; display: block; margin-top: 12rpx; line-height: 1.5; }
.btn-withdraw, .btn-resume {
width: 80%;
height: 72rpx;
line-height: 72rpx;
border-radius: 36rpx;
font-size: 28rpx;
margin-top: 32rpx;
border: none;
}
.btn-withdraw {
background: #FFF3F2;
color: #E96B6B;
}
.btn-resume {
background: #E96B6B;
color: #fff;
}
.menu-list {
background: #fff;
border-radius: 24rpx;
overflow: hidden;
}
.menu-item {
display: flex;
align-items: center;
padding: 32rpx 28rpx;
border-bottom: 1rpx solid #f5f5f5;
}
.menu-item:last-child { border-bottom: none; }
.menu-item.danger .menu-text { color: #E96B6B; }
.menu-icon { font-size: 36rpx; margin-right: 20rpx; }
.menu-text { flex: 1; font-size: 28rpx; color: #1A1A1A; }
.menu-hint { font-size: 22rpx; color: #999; margin-right: 12rpx; }
.menu-arrow { font-size: 32rpx; color: #CCC; }