Initial Commit

This commit is contained in:
Rajuahamedkst 2025-09-12 16:08:17 +08:00
commit 1d71a02738
237 changed files with 64293 additions and 0 deletions

View file

@ -0,0 +1,433 @@
// 👥 群成员管理页面逻辑
const app = getApp();
const groupChatManager = require('../../../utils/group-chat-manager.js');
const apiClient = require('../../../utils/api-client.js');
Page({
data: {
// 系统信息
statusBarHeight: 44,
navBarHeight: 88,
// 群信息
groupId: '',
groupInfo: {},
// 成员数据
allMembers: [],
groupOwner: null,
admins: [],
members: [],
// 筛选后的数据
filteredAdmins: [],
filteredMembers: [],
// 统计数据
memberCount: 0,
adminCount: 0,
normalMemberCount: 0,
// 用户权限
currentUserId: '',
userRole: 'member',
isOwner: false,
isOwnerOrAdmin: false,
canInviteMembers: false,
// 搜索和筛选
searchKeyword: '',
currentFilter: 'all', // all, admin, member
// 成员操作
showMemberActionModal: false,
selectedMember: {},
canRemoveMember: false,
// 加载状态
loading: false,
loadingText: '加载中...'
},
onLoad(options) {
console.log('👥 群成员管理页面加载:', options);
// 获取系统信息
this.getSystemInfo();
// 获取群ID
if (options.groupId) {
this.setData({
groupId: options.groupId
});
// 加载群成员
this.loadGroupMembers();
} else {
wx.showToast({
title: '群聊ID不能为空',
icon: 'none'
});
setTimeout(() => {
wx.navigateBack();
}, 1500);
}
},
onShow() {
console.log('👥 群成员管理页面显示');
// 刷新成员列表
if (this.data.groupId) {
this.loadGroupMembers();
}
},
// 获取系统信息
getSystemInfo() {
const systemInfo = wx.getSystemInfoSync();
this.setData({
statusBarHeight: systemInfo.statusBarHeight || 44,
navBarHeight: 88,
currentUserId: wx.getStorageSync('userId')
});
},
// 加载群成员
async loadGroupMembers() {
try {
this.setData({
loading: true,
loadingText: '加载成员列表中...'
});
// 获取群基本信息
const groupResponse = await apiClient.request({
url: `/api/v1/groups/${this.data.groupId}`,
method: 'GET'
});
if (!groupResponse.success) {
throw new Error(groupResponse.error || '获取群信息失败');
}
// 获取群成员列表
const membersResult = await groupChatManager.getGroupMembers(this.data.groupId, false);
if (!membersResult.success) {
throw new Error(membersResult.error || '获取群成员失败');
}
const allMembers = membersResult.data;
// 分类成员
const groupOwner = allMembers.find(member => member.role === 'owner');
const admins = allMembers.filter(member => member.role === 'admin');
const members = allMembers.filter(member => member.role === 'member');
// 获取当前用户角色
const currentUser = allMembers.find(member => member.userId === this.data.currentUserId);
const userRole = currentUser ? currentUser.role : 'member';
// 计算权限
const isOwner = userRole === 'owner';
const isOwnerOrAdmin = userRole === 'owner' || userRole === 'admin';
const canInviteMembers = isOwnerOrAdmin || groupResponse.data.settings?.allowMemberInvite;
this.setData({
groupInfo: groupResponse.data,
allMembers: allMembers,
groupOwner: groupOwner,
admins: admins,
members: members,
memberCount: allMembers.length,
adminCount: admins.length + (groupOwner ? 1 : 0),
normalMemberCount: members.length,
userRole: userRole,
isOwner: isOwner,
isOwnerOrAdmin: isOwnerOrAdmin,
canInviteMembers: canInviteMembers,
loading: false
});
// 应用当前筛选
this.applyFilter();
console.log('✅ 群成员加载完成');
} catch (error) {
this.setData({
loading: false
});
console.error('❌ 加载群成员失败:', error);
wx.showToast({
title: error.message || '加载群成员失败',
icon: 'none'
});
}
},
// 🔍 ===== 搜索和筛选 =====
// 搜索输入
onSearchInput(e) {
const keyword = e.detail.value;
this.setData({
searchKeyword: keyword
});
this.applyFilter();
},
// 清除搜索
clearSearch() {
this.setData({
searchKeyword: ''
});
this.applyFilter();
},
// 切换筛选
switchFilter(e) {
const filter = e.currentTarget.dataset.filter;
console.log('🔍 切换筛选:', filter);
this.setData({
currentFilter: filter
});
this.applyFilter();
},
// 应用筛选
applyFilter() {
const keyword = this.data.searchKeyword.toLowerCase();
// 筛选管理员
let filteredAdmins = this.data.admins;
if (keyword) {
filteredAdmins = this.data.admins.filter(member => {
const name = (member.nickname || member.username || '').toLowerCase();
return name.includes(keyword);
});
}
// 筛选普通成员
let filteredMembers = this.data.members;
if (keyword) {
filteredMembers = this.data.members.filter(member => {
const name = (member.nickname || member.username || '').toLowerCase();
return name.includes(keyword);
});
}
this.setData({
filteredAdmins: filteredAdmins,
filteredMembers: filteredMembers
});
},
// 👤 ===== 成员操作 =====
// 邀请成员
inviteMembers() {
if (!this.data.canInviteMembers) {
wx.showToast({
title: '没有邀请权限',
icon: 'none'
});
return;
}
console.log('👤 邀请成员');
// 跳转到邀请成员页面
wx.navigateTo({
url: `/pages/group/invite-members/invite-members?groupId=${this.data.groupId}`
});
},
// 查看成员资料
viewMemberProfile(e) {
const userId = e.currentTarget.dataset.userId;
console.log('👤 查看成员资料:', userId);
// 关闭操作弹窗
this.closeMemberActionModal();
if (userId === this.data.currentUserId) {
// 查看自己的资料
wx.navigateTo({
url: '/pages/profile/profile'
});
} else {
// 查看其他成员资料
wx.navigateTo({
url: `/pages/social/user-profile/user-profile?userId=${userId}`
});
}
},
// 显示成员操作菜单
showMemberActions(e) {
const member = e.currentTarget.dataset.member;
if (!member || member.userId === this.data.currentUserId) {
return;
}
console.log('👤 显示成员操作菜单:', member);
// 计算是否可以移除成员
const canRemoveMember = this.data.isOwnerOrAdmin &&
member.role !== 'owner' &&
(this.data.isOwner || member.role !== 'admin');
this.setData({
selectedMember: member,
canRemoveMember: canRemoveMember,
showMemberActionModal: true
});
},
// 关闭成员操作弹窗
closeMemberActionModal() {
this.setData({
showMemberActionModal: false,
selectedMember: {},
canRemoveMember: false
});
},
// 发送消息给成员
sendMessageToMember() {
const member = this.data.selectedMember;
console.log('💬 发送消息给成员:', member);
// 关闭弹窗
this.closeMemberActionModal();
// 跳转到私聊页面
wx.navigateTo({
url: `/pages/message/chat/chat?chatType=0&targetId=${member.userId}&chatName=${encodeURIComponent(member.nickname || member.username)}`
});
},
// 切换成员管理员状态
async toggleMemberAdmin() {
const member = this.data.selectedMember;
const isAdmin = member.role === 'admin';
console.log('👑 切换成员管理员状态:', member, !isAdmin);
try {
this.setData({
loading: true,
loadingText: isAdmin ? '取消管理员中...' : '设置管理员中...'
});
const result = await groupChatManager.setAdmin(this.data.groupId, member.userId, !isAdmin);
this.setData({
loading: false
});
if (result.success) {
wx.showToast({
title: isAdmin ? '已取消管理员' : '已设为管理员',
icon: 'success'
});
// 关闭弹窗
this.closeMemberActionModal();
// 刷新成员列表
this.loadGroupMembers();
} else {
throw new Error(result.error || '操作失败');
}
} catch (error) {
this.setData({
loading: false
});
console.error('❌ 切换管理员状态失败:', error);
wx.showToast({
title: error.message || '操作失败',
icon: 'none'
});
}
},
// 移出群聊
removeMemberFromGroup() {
const member = this.data.selectedMember;
console.log('🚫 移出群聊:', member);
wx.showModal({
title: '移出群聊',
content: `确定要将"${member.nickname || member.username}"移出群聊吗?`,
confirmText: '移出',
confirmColor: '#FF3B30',
success: (res) => {
if (res.confirm) {
this.performRemoveMember(member);
}
}
});
},
// 执行移出成员
async performRemoveMember(member) {
try {
this.setData({
loading: true,
loadingText: '移出成员中...'
});
const result = await groupChatManager.removeMember(this.data.groupId, member.userId);
this.setData({
loading: false
});
if (result.success) {
wx.showToast({
title: '成员已移出',
icon: 'success'
});
// 关闭弹窗
this.closeMemberActionModal();
// 刷新成员列表
this.loadGroupMembers();
} else {
throw new Error(result.error || '移出成员失败');
}
} catch (error) {
this.setData({
loading: false
});
console.error('❌ 移出成员失败:', error);
wx.showToast({
title: error.message || '移出成员失败',
icon: 'none'
});
}
},
// 阻止事件冒泡
stopPropagation() {
// 阻止点击事件冒泡
},
// 🧭 ===== 页面导航 =====
// 返回上一页
goBack() {
wx.navigateBack();
}
});