From 82acdee645c843945c7cc7455b9cfdb544330212 Mon Sep 17 00:00:00 2001 From: 18631081161 <2088094923@qq.com> Date: Fri, 23 Jan 2026 19:38:29 +0800 Subject: [PATCH] =?UTF-8?q?=E8=81=8A=E5=A4=A9=E6=90=9C=E7=B4=A2=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- admin/src/api/user.ts | 11 + admin/src/views/user/detail.vue | 111 +++- admin/src/views/user/list.vue | 80 +-- miniapp/api/chat.js | 2 +- miniapp/components/Popup/index.vue | 38 +- miniapp/components/UserCard/index.vue | 4 +- miniapp/pages.json | 3 + miniapp/pages/chat/index.vue | 271 ++++---- miniapp/pages/interact/favoritedMe.vue | 581 +++++++++++------ miniapp/pages/interact/unlockedMe.vue | 581 +++++++++++------ miniapp/pages/interact/viewedMe.vue | 588 ++++++++++++------ miniapp/pages/search/result.vue | 494 ++++++++++++--- .../Controllers/AdminUserController.cs | 30 + .../DTOs/Responses/InteractResponses.cs | 195 ++++++ .../Interfaces/IAdminUserService.cs | 10 + .../Services/AdminUserService.cs | 45 ++ .../Services/InteractService.cs | 110 ++++ 17 files changed, 2353 insertions(+), 801 deletions(-) diff --git a/admin/src/api/user.ts b/admin/src/api/user.ts index 9028f51..2b1f6d0 100644 --- a/admin/src/api/user.ts +++ b/admin/src/api/user.ts @@ -76,3 +76,14 @@ export function deleteUser(id: number): Promise { export function updateContactCount(id: number, contactCount: number): Promise { return request.put(`/admin/users/${id}/contact-count`, { contactCount }) } + +/** + * 更新用户会员等级 + * @param id 用户ID + * @param memberLevel 会员等级:0非会员 1不限时会员 2诚意会员 3家庭版会员 + * @param memberExpireTime 会员到期时间(等级2、3需要) + * @returns 操作结果 + */ +export function updateMemberLevel(id: number, memberLevel: number, memberExpireTime?: string): Promise { + return request.put(`/admin/users/${id}/member-level`, { memberLevel, memberExpireTime }) +} diff --git a/admin/src/views/user/detail.vue b/admin/src/views/user/detail.vue index 7772e57..28e6a8b 100644 --- a/admin/src/views/user/detail.vue +++ b/admin/src/views/user/detail.vue @@ -8,7 +8,7 @@ import { useRoute, useRouter } from 'vue-router' import { ElMessage, ElMessageBox } from 'element-plus' import { ArrowLeft } from '@element-plus/icons-vue' import StatusTag from '@/components/StatusTag/index.vue' -import { getUserDetail, updateUserStatus, updateContactCount } from '@/api/user' +import { getUserDetail, updateUserStatus, updateContactCount, updateMemberLevel } from '@/api/user' import { getFullImageUrl } from '@/utils/image' import type { UserDetail } from '@/types/user.d' @@ -106,6 +106,54 @@ const handleEditContactCount = async () => { } } +// 会员等级选项 +const memberLevelOptions = [ + { value: 0, label: '非会员' }, + { value: 1, label: '不限时会员' }, + { value: 2, label: '诚意会员' }, + { value: 3, label: '家庭版会员' } +] + +// 修改会员等级对话框 +const memberLevelDialogVisible = ref(false) +const memberLevelForm = ref({ + memberLevel: 0, + memberExpireTime: '' +}) + +// 打开修改会员等级对话框 +const handleEditMemberLevel = () => { + if (!userDetail.value) return + memberLevelForm.value = { + memberLevel: userDetail.value.memberLevel, + memberExpireTime: userDetail.value.memberExpireTime ? userDetail.value.memberExpireTime.substring(0, 10) : '' + } + memberLevelDialogVisible.value = true +} + +// 确认修改会员等级 +const handleConfirmMemberLevel = async () => { + try { + const { memberLevel, memberExpireTime } = memberLevelForm.value + // 等级2、3需要到期时间 + if (memberLevel > 1 && !memberExpireTime) { + ElMessage.warning('请选择会员到期时间') + return + } + await updateMemberLevel( + userId.value, + memberLevel, + memberLevel > 1 ? memberExpireTime : undefined + ) + ElMessage.success('修改成功') + memberLevelDialogVisible.value = false + fetchUserDetail() + } catch (error) { + console.error('修改会员等级失败:', error) + ElMessage.error('修改失败') + } +} + // 格式化时间 const formatTime = (time: string) => { if (!time) return '-' @@ -303,6 +351,15 @@ onMounted(() => { {{ userDetail.memberLevelText }} 非会员 + + 修改 + {{ formatTime(userDetail.memberExpireTime) }} @@ -591,6 +648,58 @@ onMounted(() => { v-else-if="!loading" description="用户不存在" /> + + + + + + + + + + + + + + + 不限时会员无需设置到期时间 + + + + + diff --git a/admin/src/views/user/list.vue b/admin/src/views/user/list.vue index 0172eaf..821a17a 100644 --- a/admin/src/views/user/list.vue +++ b/admin/src/views/user/list.vue @@ -341,16 +341,19 @@ onMounted(() => { stripe border style="width: 100%" + table-layout="auto" >