diff --git a/miniapp/components/conversation-item/index.js b/miniapp/components/conversation-item/index.js
index 8050018..f0fcfc3 100644
--- a/miniapp/components/conversation-item/index.js
+++ b/miniapp/components/conversation-item/index.js
@@ -18,6 +18,8 @@ Component({
this.triggerEvent('tap', {
conversationId: this.data.conversation.conversationId,
targetUserId: this.data.conversation.targetUserId,
+ canSendMessage: this.data.conversation.canSendMessage,
+ relationStatus: this.data.conversation.relationStatus,
});
},
},
diff --git a/miniapp/components/conversation-item/index.wxss b/miniapp/components/conversation-item/index.wxss
index 8a62925..190ade9 100644
--- a/miniapp/components/conversation-item/index.wxss
+++ b/miniapp/components/conversation-item/index.wxss
@@ -1,8 +1,8 @@
.ui-conv {
display: flex;
- align-items: flex-start;
+ align-items: center;
background: var(--color-bg-card);
- padding: var(--spacing-3) var(--spacing-page-x);
+ padding: 18rpx 20rpx;
border-bottom: 1rpx solid var(--color-divider);
}
.ui-conv--disabled {
@@ -19,13 +19,13 @@
align-items: baseline;
}
.ui-conv__name {
- font-size: var(--font-size-lg);
- font-weight: var(--font-weight-medium);
- color: var(--color-text-primary);
+ color: #222746;
+ font-size: 26rpx;
+ font-weight: 650;
}
.ui-conv__time {
- font-size: var(--font-size-xs);
- color: var(--color-text-tertiary);
+ color: #8b90a5;
+ font-size: 19rpx;
flex-shrink: 0;
margin-left: var(--spacing-2);
}
@@ -38,8 +38,8 @@
.ui-conv__last {
flex: 1;
min-width: 0;
- font-size: var(--font-size-sm);
- color: var(--color-text-tertiary);
+ color: #7a8097;
+ font-size: 21rpx;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
diff --git a/miniapp/components/user-card/index.wxml b/miniapp/components/user-card/index.wxml
index 5a941d7..ec79bb6 100644
--- a/miniapp/components/user-card/index.wxml
+++ b/miniapp/components/user-card/index.wxml
@@ -1,9 +1,9 @@
-
+
{{user.displayName}}
{{user.age}}岁
+ 在线
{{user.heightCm}}cm ·
@@ -23,6 +24,9 @@
{{user.occupationCode}}
+
+ {{item}}
+
{{user.maritalStatus}}
· 有孩
diff --git a/miniapp/components/user-card/index.wxss b/miniapp/components/user-card/index.wxss
index 806192d..cb62dc8 100644
--- a/miniapp/components/user-card/index.wxss
+++ b/miniapp/components/user-card/index.wxss
@@ -2,40 +2,20 @@
display: flex;
align-items: center;
background: var(--color-bg-card);
- padding: var(--spacing-3) var(--spacing-page-x);
- border-bottom: 1rpx solid var(--color-divider);
+ min-height: 148rpx;
+ padding: 14rpx 18rpx;
+ border-bottom: 1rpx solid #F0F1F6;
}
.ui-user-card__select {
margin-right: var(--spacing-3);
}
.ui-user-card__checkbox {
- width: 40rpx;
- height: 40rpx;
- border-radius: 50%;
- border: 2rpx solid var(--color-text-disabled);
- position: relative;
- background: var(--color-bg-card);
- transition: all var(--motion-fast) var(--ease-standard);
-}
-.ui-user-card__checkbox--checked {
- background: var(--color-primary);
- border-color: var(--color-primary);
-}
-.ui-user-card__checkbox--checked::after {
- content: '';
- position: absolute;
- left: 12rpx;
- top: 6rpx;
- width: 10rpx;
- height: 18rpx;
- border: solid #FFFFFF;
- border-width: 0 3rpx 3rpx 0;
- transform: rotate(45deg);
+ transform: scale(.82);
}
.ui-user-card__body {
flex: 1;
min-width: 0;
- margin-left: var(--spacing-3);
+ margin-left: 16rpx;
}
.ui-user-card__name-row {
display: flex;
@@ -43,22 +23,28 @@
margin-bottom: var(--spacing-1);
}
.ui-user-card__name {
- font-size: var(--font-size-lg);
- font-weight: var(--font-weight-semibold);
- color: var(--color-text-primary);
+ font-size: 26rpx;
+ font-weight: 700;
+ color: #222746;
margin-right: var(--spacing-2);
}
.ui-user-card__age {
- font-size: var(--font-size-sm);
- color: var(--color-text-tertiary);
+ font-size: 21rpx;
+ color: #596079;
+}
+.ui-user-card__online {
+ margin-left: auto;
+ color: #39A987;
+ font-size: 18rpx;
}
.ui-user-card__meta {
- font-size: var(--font-size-sm);
- color: var(--color-text-secondary);
- line-height: var(--line-height-normal);
+ font-size: 20rpx;
+ color: #767C94;
+ line-height: 1.4;
margin-top: 4rpx;
}
.ui-user-card__actions {
flex-shrink: 0;
margin-left: var(--spacing-2);
}
+.ui-user-card__tags{display:flex;gap:7rpx;margin-top:8rpx;overflow:hidden}.ui-user-card__tag{flex:none;padding:4rpx 9rpx;border-radius:12rpx;background:#F3EEFF;color:#7860AE;font-size:17rpx;white-space:nowrap}
diff --git a/miniapp/pages/discover/discover.json b/miniapp/pages/discover/discover.json
index 70eb77a..55d3771 100644
--- a/miniapp/pages/discover/discover.json
+++ b/miniapp/pages/discover/discover.json
@@ -1,7 +1,8 @@
{
"navigationBarTitleText": "找对象",
+ "navigationStyle": "custom",
"enablePullDownRefresh": true,
- "backgroundColor": "#F7F8FA",
+ "backgroundColor": "#1D205F",
"backgroundTextStyle": "dark",
"usingComponents": {
"ui-user-card": "/components/user-card/index",
diff --git a/miniapp/pages/discover/discover.wxml b/miniapp/pages/discover/discover.wxml
index 1fc1030..e11aa8e 100644
--- a/miniapp/pages/discover/discover.wxml
+++ b/miniapp/pages/discover/discover.wxml
@@ -1,131 +1,24 @@
-
-
-
-
- 搜索
-
-
-
- 筛选
-
+
+ 找对象
+
+ 搜索
+ 推荐丹阳本地附近年龄学历更多筛选
-
-
- 年龄范围
-
- {{tempAgeMin}} 岁
-
- {{tempAgeMax}} 岁
-
-
-
-
-
- 地区
-
- {{item}}
-
-
-
-
- 重置
- 应用筛选
-
+ 年龄范围{{tempAgeMin}}–{{tempAgeMax}} 岁
+ 地区{{item}}
+ 重置应用筛选
-
-
-
-
-
-
-
-
-
-
-
- 喜欢
-
-
-
-
-
-
- 没有更多了
-
-
-
-
-
-
+ 为你推荐{{hasActiveFilter ? '已按当前条件筛选' : '认真认识,再做选择'}}{{users.length}} 位
+
+
+
+
+ 真诚相遇,认真选择
+
+ 暂无符合条件的人选Required 条件不会自动放宽,可以调整筛选后再看看清空筛选
diff --git a/miniapp/pages/discover/discover.wxss b/miniapp/pages/discover/discover.wxss
index 3f5d872..69b6c2b 100644
--- a/miniapp/pages/discover/discover.wxss
+++ b/miniapp/pages/discover/discover.wxss
@@ -1,157 +1,4 @@
-/**
- * 找对象页样式(重构后大幅简化,用户卡片主体样式封装在 ui-user-card 内)
- */
-.page {
- min-height: 100vh;
- background: var(--color-bg-page);
-}
-
-/* ============ 搜索栏 ============ */
-.search-bar {
- display: flex;
- align-items: center;
- padding: var(--spacing-3) var(--spacing-page-x);
- background: var(--color-bg-card);
- gap: var(--spacing-2);
- border-bottom: var(--border-width) solid var(--color-divider);
-}
-
-.search-input {
- flex: 1;
- height: 72rpx;
- background: var(--color-bg-page);
- border-radius: var(--radius-full);
- display: flex;
- align-items: center;
- padding: 0 var(--spacing-3);
- gap: var(--spacing-2);
-}
-
-.search-icon {
- font-size: var(--font-size-md);
- color: var(--color-text-placeholder);
-}
-
-.search-field {
- flex: 1;
- font-size: var(--font-size-md);
- color: var(--color-text-primary);
-}
-
-.search-placeholder {
- color: var(--color-text-placeholder);
- font-size: var(--font-size-md);
-}
-
-.filter-btn {
- min-width: 120rpx;
- height: 72rpx;
- background: var(--color-primary-light);
- border-radius: var(--radius-full);
- display: flex;
- align-items: center;
- justify-content: center;
- font-size: var(--font-size-sm);
- color: var(--color-primary);
- position: relative;
- padding: 0 var(--spacing-3);
-}
-
-.filter-btn.active {
- background: var(--color-primary);
- color: #FFFFFF;
-}
-
-.filter-dot {
- width: 12rpx;
- height: 12rpx;
- background: var(--color-primary);
- border-radius: 50%;
- position: absolute;
- top: 12rpx;
- right: 12rpx;
-}
-
-.filter-btn.active .filter-dot {
- background: #FFFFFF;
-}
-
-/* ============ 筛选面板 ============ */
-.filter-panel {
- background: var(--color-bg-card);
- padding: var(--spacing-4) var(--spacing-page-x);
- border-bottom: var(--border-width) solid var(--color-divider);
-}
-
-.filter-section {
- margin-bottom: var(--spacing-4);
-}
-
-.filter-label {
- font-size: var(--font-size-md);
- font-weight: var(--font-weight-semibold);
- color: var(--color-text-primary);
- display: block;
- margin-bottom: var(--spacing-2);
-}
-
-.range-row {
- display: flex;
- align-items: center;
- gap: var(--spacing-2);
-}
-
-.range-value {
- min-width: 96rpx;
- font-size: var(--font-size-sm);
- color: var(--color-text-secondary);
- text-align: center;
-}
-
-.range-slider {
- flex: 1;
-}
-
-.tag-group {
- display: flex;
- flex-wrap: wrap;
- gap: var(--spacing-2);
-}
-
-.tag {
- padding: var(--spacing-1) var(--spacing-3);
- border-radius: var(--radius-full);
- font-size: var(--font-size-sm);
- background: var(--color-bg-page);
- color: var(--color-text-secondary);
- border: 2rpx solid transparent;
-}
-
-.tag.selected {
- background: var(--color-primary);
- color: #FFFFFF;
-}
-
-.filter-actions {
- display: flex;
- gap: var(--spacing-3);
- margin-top: var(--spacing-2);
-}
-
-/* ============ 用户列表 ============ */
-.user-list {
- background: var(--color-bg-card);
- margin-top: var(--spacing-2);
-}
-
-.card-action {
- display: flex;
- align-items: center;
-}
-
-.list-end-hint {
- text-align: center;
- padding: var(--spacing-3);
- color: var(--color-text-tertiary);
- font-size: var(--font-size-xs);
-}
+.page{min-height:100vh;background:#F4F5FA}.discover-hero{padding:env(safe-area-inset-top) 24rpx 24rpx;background:linear-gradient(160deg,var(--mini-night-start),var(--mini-night-end));border-radius:0 0 34rpx 34rpx;box-shadow:var(--mini-shadow)}.discover-nav{height:88rpx;display:flex;align-items:center;justify-content:center;position:relative;color:#fff}.nav-title{font-size:31rpx;font-weight:700}.nav-search{position:absolute;right:0;width:64rpx;height:64rpx;display:flex;align-items:center;justify-content:center;border:1rpx solid rgba(255,255,255,.18);border-radius:32rpx;background:rgba(255,255,255,.08)}.nav-search image{width:38rpx;height:38rpx;filter:brightness(0) invert(1)}
+.search-bar{display:flex;align-items:center}.search-input{height:70rpx;flex:1;display:flex;align-items:center;padding:0 20rpx;border-radius:35rpx;background:rgba(255,255,255,.12);border:1rpx solid rgba(255,255,255,.14)}.search-label{margin-right:14rpx;padding-right:14rpx;border-right:1rpx solid rgba(255,255,255,.2);font-size:20rpx;color:#fff}.search-field{flex:1;font-size:23rpx;color:#fff}.search-placeholder{font-size:23rpx;color:rgba(255,255,255,.52)}.filter-scroll{margin-top:16rpx;white-space:nowrap}.filter-chips{display:inline-flex;gap:12rpx}.filter-chip{padding:11rpx 20rpx;border-radius:25rpx;background:rgba(255,255,255,.1);color:rgba(255,255,255,.72);font-size:20rpx}.filter-chip.active{background:#fff;color:var(--mini-accent-pink);font-weight:650}
+.filter-panel{position:relative;z-index:3;margin:-8rpx 24rpx 0;padding:28rpx;background:#fff;border-radius:0 0 26rpx 26rpx;box-shadow:0 14rpx 36rpx rgba(31,32,89,.12)}.filter-section{margin-bottom:28rpx}.filter-heading{display:flex;justify-content:space-between}.filter-label{display:block;font-size:24rpx;font-weight:650;color:#282D4E}.filter-value{font-size:21rpx;color:#777E99}.range-slider{margin:8rpx 0}.tag-group{display:flex;gap:14rpx;margin-top:16rpx}.tag{padding:10rpx 22rpx;border-radius:22rpx;background:#F1F2F7;color:#626981;font-size:21rpx}.tag.selected{background:#FCEBF3;color:var(--mini-accent-pink)}.filter-actions{display:flex;gap:18rpx}
+.result-head{padding:30rpx 26rpx 16rpx;display:flex;align-items:flex-end;justify-content:space-between}.result-head>view{display:flex;flex-direction:column}.result-title{font-size:30rpx;font-weight:700;color:#252A49}.result-subtitle{margin-top:5rpx;font-size:20rpx;color:#8A8FA4}.result-count{font-size:20rpx;color:#8A8FA4}.user-list{margin:0 24rpx;padding:4rpx 0;background:#fff;border-radius:28rpx;overflow:hidden;box-shadow:0 10rpx 32rpx rgba(34,35,91,.08)}.card-action{display:flex;align-items:center}.like-button{width:62rpx;height:62rpx;display:flex;align-items:center;justify-content:center;border-radius:31rpx;background:#FFF0F5;box-shadow:0 6rpx 18rpx rgba(255,79,145,.16)}.like-button image{width:42rpx;height:42rpx}.like-button.loading{opacity:.45}.list-end-hint{text-align:center;padding:24rpx;font-size:20rpx;color:#9A9EB0}.discover-empty{margin:70rpx 40rpx 0;padding:34rpx;display:flex;flex-direction:column;align-items:center;background:#fff;border-radius:28rpx;box-shadow:0 10rpx 32rpx rgba(34,35,91,.08)}.discover-empty image{width:112rpx;height:112rpx}.empty-title{margin-top:12rpx;font-size:28rpx;font-weight:650;color:#252A49}.empty-desc{margin-top:10rpx;text-align:center;font-size:21rpx;line-height:1.55;color:#858A9E}.empty-action{margin-top:24rpx;min-width:180rpx;height:64rpx;display:flex;align-items:center;justify-content:center;border-radius:32rpx;background:linear-gradient(135deg,var(--mini-accent-coral),var(--mini-accent-pink));color:#fff;font-size:23rpx;font-weight:650}
diff --git a/miniapp/pages/messages/messages.js b/miniapp/pages/messages/messages.js
index e6ce6b3..917dcb2 100644
--- a/miniapp/pages/messages/messages.js
+++ b/miniapp/pages/messages/messages.js
@@ -57,10 +57,27 @@ Page({
},
onGoChat(e) {
- const { conversationId } = e.detail;
+ const { conversationId, canSendMessage } = e.detail;
+ if (!canSendMessage) {
+ appStore.toastError('当前会话已停用,无法继续聊天');
+ return;
+ }
wx.navigateTo({ url: to.chat(conversationId) });
},
+ onShortcutTap(e) {
+ const key = e.currentTarget.dataset.key;
+ if (key === 'new-friends') {
+ wx.switchTab({ url: ROUTE.TAB.DISCOVER });
+ return;
+ }
+ if (key === 'system') {
+ wx.navigateTo({ url: ROUTE.SETTINGS.NOTIFICATIONS });
+ return;
+ }
+ wx.navigateTo({ url: ROUTE.MAIN.FATE_CENTER });
+ },
+
onEmptyAction(e) {
if (e.detail.event === 'home') {
wx.switchTab({ url: ROUTE.TAB.HOME });
diff --git a/miniapp/pages/messages/messages.json b/miniapp/pages/messages/messages.json
index cdcd112..1e6e770 100644
--- a/miniapp/pages/messages/messages.json
+++ b/miniapp/pages/messages/messages.json
@@ -1,5 +1,6 @@
{
"navigationBarTitleText": "消息",
+ "navigationStyle": "custom",
"enablePullDownRefresh": true,
"backgroundColor": "#F7F8FA",
"backgroundTextStyle": "dark",
diff --git a/miniapp/pages/messages/messages.wxml b/miniapp/pages/messages/messages.wxml
index 68bdb84..7fa5c2b 100644
--- a/miniapp/pages/messages/messages.wxml
+++ b/miniapp/pages/messages/messages.wxml
@@ -1,42 +1,52 @@
-
-
-
+
+
+
+
+ 消息
+
+
+
+
+
+ 新朋友
+
+
+
+ 互动喜欢
+
+
+
+ 我的关注
+
+
+
+ 系统通知
+
+
+
-
-
+
+
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
+
diff --git a/miniapp/pages/messages/messages.wxss b/miniapp/pages/messages/messages.wxss
index 59871fc..77ddc4e 100644
--- a/miniapp/pages/messages/messages.wxss
+++ b/miniapp/pages/messages/messages.wxss
@@ -1,7 +1,79 @@
-/**
- * 消息列表页样式(重构后大幅简化,主体样式封装在 ui-conversation-item 内)
- */
.page {
min-height: 100vh;
- background: var(--color-bg-page);
+ background: #f4f5fa;
+}
+
+.messages-hero {
+ padding: env(safe-area-inset-top) 24rpx 34rpx;
+ border-radius: 0 0 36rpx 36rpx;
+ background: linear-gradient(160deg, var(--mini-night-start), var(--mini-night-end));
+ box-shadow: var(--mini-shadow);
+}
+
+.messages-nav {
+ position: relative;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 88rpx;
+}
+
+.messages-title {
+ color: #fff;
+ font-size: 31rpx;
+ font-weight: 700;
+}
+
+.messages-search {
+ position: absolute;
+ right: 14rpx;
+ width: 34rpx;
+ height: 34rpx;
+}
+
+.message-shortcuts {
+ display: grid;
+ grid-template-columns: repeat(4, 1fr);
+ padding: 22rpx 8rpx 4rpx;
+}
+
+.message-shortcut {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ color: rgba(255, 255, 255, .88);
+ font-size: 20rpx;
+}
+
+.shortcut-icon {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 72rpx;
+ height: 72rpx;
+ margin-bottom: 12rpx;
+ border: 1rpx solid rgba(255, 255, 255, .2);
+ border-radius: 26rpx;
+}
+
+.shortcut-icon image {
+ width: 45rpx;
+ height: 45rpx;
+}
+
+.shortcut-icon--blue { background: rgba(79, 139, 255, .28); }
+.shortcut-icon--pink { background: rgba(255, 92, 130, .28); }
+.shortcut-icon--purple { background: rgba(154, 107, 255, .28); }
+.shortcut-icon--coral { background: rgba(240, 106, 100, .28); }
+
+.messages-content {
+ padding: 16rpx 24rpx 40rpx;
+}
+
+.conversation-list {
+ overflow: hidden;
+ margin-top: 8rpx;
+ border-radius: 28rpx;
+ background: #fff;
+ box-shadow: 0 10rpx 32rpx rgba(34, 35, 91, .08);
}
diff --git a/ui-tests/miniapp-reference-contracts.mjs b/ui-tests/miniapp-reference-contracts.mjs
index 1e9b6c6..0fc58ff 100644
--- a/ui-tests/miniapp-reference-contracts.mjs
+++ b/ui-tests/miniapp-reference-contracts.mjs
@@ -54,6 +54,19 @@ for (const code of quickEntryCodes) {
previousIndex = index
}
+const discoverTemplate = read('miniapp/pages/discover/discover.wxml')
+assert.match(discoverTemplate, /discover-filter-chips/, '找对象页缺少参考图胶囊筛选区')
+assert.match(discoverTemplate, /candidate-list/, '找对象页缺少参考图候选人列表')
+assert.match(discoverTemplate, /\/assets\/icons\/ui\/search\.png/, '找对象页必须使用独立搜索图标')
+
+const messagesTemplate = read('miniapp/pages/messages/messages.wxml')
+const messagesLogic = read('miniapp/pages/messages/messages.js')
+assert.match(messagesTemplate, /message-shortcuts/, '消息页缺少四项快捷入口')
+assert.match(messagesTemplate, /conversation-list/, '消息页缺少会话列表容器')
+assert.match(messagesTemplate, /ui-conv__badge|unreadTotal/, '消息页缺少未读提示')
+assert.match(messagesTemplate, /互相喜欢后/, '消息页缺少无 Mutual 状态说明')
+assert.match(messagesLogic, /canSendMessage/, '消息页进入聊天前必须校验服务端会话能力')
+
const theme = read('miniapp/app.wxss')
for (const token of [
'--mini-night-start',