From f082ae82768757538f5bbc4a1240c8c31bc8f52c Mon Sep 17 00:00:00 2001
From: xcbyy <2578898740@qq.com>
Date: Fri, 23 Oct 2026 09:05:32 +0800
Subject: [PATCH] =?UTF-8?q?fix(theme):=20=E4=BF=AE=E5=A4=8D=E9=97=A8?=
=?UTF-8?q?=E7=A5=A8=E9=A1=B5=E5=AF=BC=E8=88=AA=E6=A0=8F=E4=B8=BB=E9=A2=98?=
=?UTF-8?q?=E8=84=B1=E8=8A=82=E4=B8=8E=E4=B8=AA=E4=BA=BA=E4=B8=AD=E5=BF=83?=
=?UTF-8?q?=E5=8F=8C=E8=BA=AB=E4=BB=BD=E5=8D=A1=E7=89=87=E6=B5=81=E5=85=89?=
=?UTF-8?q?=E5=8A=A8=E7=94=BB=EF=BC=8C=E5=8A=A0=E5=9B=BA=E6=B4=BB=E5=8A=A8?=
=?UTF-8?q?=E5=8F=82=E4=B8=8E=E4=BA=BA=E7=94=BB=E5=83=8F=E4=B8=8E=E5=A4=A7?=
=?UTF-8?q?=E7=A5=9E=E9=9A=90=E7=A7=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pwuniapp/common/api.js | 6 +--
pwuniapp/pages/activity/detail.vue | 20 ++++++-
pwuniapp/pages/activity/list.vue | 25 +++++++--
pwuniapp/pages/expert/hall.vue | 36 ++++++++++---
pwuniapp/pages/expert/workspace.vue | 7 +++
pwuniapp/pages/index/index.vue | 2 +-
server/src/db/mysql.ts | 16 ++++++
server/src/db/repository.ts | 53 ++++++++++++-------
server/src/index.ts | 5 +-
server/tests/companion-detail-privacy.spec.ts | 2 +-
.../companions-directory-privacy.spec.ts | 2 +-
server/tests/expert-stats-scope.spec.ts | 2 +
server/tests/lbs-match.spec.ts | 9 ++++
server/tests/read-scope.spec.ts | 2 +
14 files changed, 147 insertions(+), 40 deletions(-)
diff --git a/pwuniapp/common/api.js b/pwuniapp/common/api.js
index 99336aa..584f7ca 100644
--- a/pwuniapp/common/api.js
+++ b/pwuniapp/common/api.js
@@ -38,7 +38,8 @@ export function formatActivityData(raw) {
startTime: raw.startTime || '',
location: raw.location || '',
creatorId: raw.creatorId != null ? Number(raw.creatorId) : (raw.creator_id != null ? Number(raw.creator_id) : 0),
- creatorNickname: raw.creatorNickname || '',
+ // 创建人已被删除时给出真实状态,避免列表显示空白局长
+ creatorNickname: raw.creatorNickname || '局长已注销',
creatorAvatar: raw.creatorAvatar || '',
status: raw.status || (joinedCount >= (raw.maxParticipants || 4) ? 'FULL' : 'RECRUITING'),
allowDynamicPrice: Boolean(raw.allowDynamicPrice),
@@ -236,7 +237,7 @@ export async function getCompanions(keyword) {
price: Number(c.hourlyRate) || 0,
rating: Number(c.rating) || 0,
orderCount: Number(c.orderCount) || 0,
- isOnline: c.status === '接单中',
+ isOnline: c.isOnline !== undefined ? Boolean(c.isOnline) : c.status === '接单中',
voiceDuration: Number(c.voiceDuration) || 0,
voiceType: 'voice',
voiceTitle: c.voiceTitle || '',
@@ -267,7 +268,6 @@ export async function matchCompanions(options = {}) {
const list = Array.isArray(res) ? res : (res && Array.isArray(res.list) ? res.list : []);
return list.map((c) => ({
id: String(c.id),
- userId: Number(c.userId) || 0,
nickname: c.nickname || '',
avatar: c.avatar || '',
gender: c.gender === '男' ? 'male' : (c.gender === '女' ? 'female' : ''),
diff --git a/pwuniapp/pages/activity/detail.vue b/pwuniapp/pages/activity/detail.vue
index 906fe40..e8d2da7 100644
--- a/pwuniapp/pages/activity/detail.vue
+++ b/pwuniapp/pages/activity/detail.vue
@@ -72,7 +72,10 @@
组局阵地与发起人
-
+
+
+ ?
+
{{ activity.creatorNickname }}
@@ -1147,6 +1150,21 @@ const handleJoin = () => {
height: 80rpx;
border-radius: 40rpx;
margin-right: 16rpx;
+ flex-shrink: 0;
+ }
+
+ .creator-avatar-empty {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background: rgba(148, 163, 184, 0.18);
+ border: 1px solid rgba(148, 163, 184, 0.3);
+
+ .creator-avatar-placeholder {
+ font-size: 30rpx;
+ color: #94A3B8;
+ font-weight: 700;
+ }
}
.creator-info {
diff --git a/pwuniapp/pages/activity/list.vue b/pwuniapp/pages/activity/list.vue
index 1289ef9..a3b2e28 100644
--- a/pwuniapp/pages/activity/list.vue
+++ b/pwuniapp/pages/activity/list.vue
@@ -140,7 +140,10 @@