// 云函数入口文件 const cloud = require('wx-server-sdk') cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) const db = cloud.database() const _ = db.command exports.main = async (event, context) => { const wxContext = cloud.getWXContext() const openid = wxContext.OPENID const { roomId, memberOpenid } = event if (!roomId) { return { success: false, msg: '缺少 roomId' } } try { const roomRef = db.collection('rooms').doc(roomId) const room = await roomRef.get() if (!room.data) { return { success: false, msg: '房间不存在' } } const roomData = room.data const members = roomData.members || [] // 确定要移除的成员 const targetOpenid = memberOpenid || openid // 如果没有指定,默认移除自己 // 检查是否在房间内 const memberIndex = members.findIndex(m => m.openid === targetOpenid) if (memberIndex === -1) { return { success: false, msg: '该成员不在房间内' } } // 权限检查:只有创建者可以移除其他人,任何人都可以退出自己 if (targetOpenid !== openid && roomData._openid !== openid) { return { success: false, msg: '只有创建者可以移除其他成员' } } // 检查是否是创建者试图退出 if (targetOpenid === roomData._openid) { return { success: false, msg: '创建者不能退出,请删除聚会' } } // 移除成员 const updatedMembers = members.filter(m => m.openid !== targetOpenid) await roomRef.update({ data: { members: _.set(updatedMembers) } }) // 如果房间已有计算结果,清除结果(因为成员变化了) if (roomData.status === 'calculated') { await roomRef.update({ data: { status: _.set('active'), lastCalculatedMembers: _.set('') // 清除成员快照 } }) } return { success: true, msg: targetOpenid === openid ? '已退出聚会' : '已移除成员' } } catch (err) { console.error('RemoveMember Error:', err) return { success: false, msg: '操作失败', error: err.message || err.toString() } } }