diff --git a/Cunkebao/src/pages/pc/ckbox/components/ChatWindow/components/ProfileCard/index.tsx b/Cunkebao/src/pages/pc/ckbox/components/ChatWindow/components/ProfileCard/index.tsx index 39a829b6..055b3554 100644 --- a/Cunkebao/src/pages/pc/ckbox/components/ChatWindow/components/ProfileCard/index.tsx +++ b/Cunkebao/src/pages/pc/ckbox/components/ChatWindow/components/ProfileCard/index.tsx @@ -33,6 +33,11 @@ import { useCkChatStore } from "@/store/module/ckchat/ckchat"; import { useWebSocketStore } from "@/store/module/websocket/websocket"; import styles from "./Person.module.scss"; import { useWeChatStore } from "@/store/module/weChat/weChat"; +import FriendSelection from "@/components/FriendSelection"; +import TwoColumnSelection from "@/components/FriendSelection/TwoColumnSelection"; +import MemberSelection from "@/components/MemberSelection"; +import TwoColumnMemberSelection from "@/components/MemberSelection/TwoColumnMemberSelection"; +import { FriendSelectionItem } from "@/components/FriendSelection/data"; const { Sider } = Layout; @@ -83,12 +88,60 @@ const Person: React.FC = ({ const [selectedMember, setSelectedMember] = useState(null); const [greeting, setGreeting] = useState(""); + // 群管理弹窗状态 + const [isFriendSelectionVisible, setIsFriendSelectionVisible] = useState(false); + const [isMemberSelectionVisible, setIsMemberSelectionVisible] = useState(false); + const [isAdminSelectionVisible, setIsAdminSelectionVisible] = useState(false); + const [isRemoveAdminSelectionVisible, setIsRemoveAdminSelectionVisible] = useState(false); + const [isTransferOwnerSelectionVisible, setIsTransferOwnerSelectionVisible] = useState(false); + const [selectedFriends, setSelectedFriends] = useState([]); + const handleAddFriend = (member) => { setSelectedMember(member); setGreeting(`你好, 我来自群聊${contractInfo.name}`); setIsAddFriendModalVisible(true); }; + // 群管理操作处理函数 + const handleAddMember = (selectedIds: number[], selectedItems: FriendSelectionItem[]) => { + console.log('添加成员:', selectedIds, selectedItems); + // TODO: 实现添加成员的WebSocket命令 + messageApi.success(`已添加 ${selectedItems.length} 个成员`); + setIsFriendSelectionVisible(false); + }; + + const handleRemoveMember = (selectedIds: string[]) => { + console.log('删除成员:', selectedIds); + // TODO: 实现删除成员的WebSocket命令 + messageApi.success(`已删除 ${selectedIds.length} 个成员`); + setIsMemberSelectionVisible(false); + }; + + const handleAddAdmin = (selectedIds: string[]) => { + console.log('添加管理员:', selectedIds); + // TODO: 实现添加管理员的WebSocket命令 + messageApi.success(`已添加 ${selectedIds.length} 个管理员`); + setIsAdminSelectionVisible(false); + }; + + const handleRemoveAdmin = (selectedIds: string[]) => { + console.log('删除管理员:', selectedIds); + // TODO: 实现删除管理员的WebSocket命令 + messageApi.success(`已删除 ${selectedIds.length} 个管理员`); + setIsRemoveAdminSelectionVisible(false); + }; + + const handleTransferOwner = (selectedIds: string[]) => { + if (selectedIds.length !== 1) { + messageApi.error('只能选择一个成员作为新群主'); + return; + } + console.log('转让群主:', selectedIds[0]); + // TODO: 实现转让群主的WebSocket命令 + messageApi.success('群主转让成功'); + setIsTransferOwnerSelectionVisible(false); + }; + const handleSendFriendRequest = () => { if (!selectedMember) return; @@ -115,6 +168,13 @@ const Person: React.FC = ({ ); const { sendCommand } = useWebSocketStore(); + // 权限控制:检查当前客服是否有群管理权限 + const hasGroupManagePermission = () => { + if (!kfSelectedUser || !contract) return false; + // 当客服的wechatId与contract的chatroomOwner相同时,才有完整的群管理权限 + return kfSelectedUser.wechatId === (contract as any).chatroomOwner; + }; + // 获取所有可用标签 useEffect(() => { const fetchAvailableTags = async () => { @@ -773,13 +833,13 @@ const Person: React.FC = ({ display: 'flex', gap: '12px' }}> - - - -
- - - + {hasGroupManagePermission() && ( + + )}
+ {hasGroupManagePermission() && ( +
+ + + +
+ )}
= ({ ))}
- + {hasGroupManagePermission() && ( + + )} )} @@ -919,19 +985,7 @@ const Person: React.FC = ({ /> - {/* 操作按钮 */} -
- - -
+ @@ -961,6 +1015,74 @@ const Person: React.FC = ({ rows={6} /> + + {/* 群管理弹窗组件 */} + {/* 添加成员弹窗 */} + setIsFriendSelectionVisible(false)} + onConfirm={(selectedIds, selectedItems) => { + setSelectedFriends(selectedItems); + handleAddMember(selectedIds.map(id => parseInt(id)), selectedItems); + }} + title="添加群成员" + /> + + {/* 删除成员弹窗 */} + ({ + id: member.wechatId, + nickname: member.nickname, + avatar: member.avatar + }))} + onCancel={() => setIsMemberSelectionVisible(false)} + onConfirm={handleRemoveMember} + title="删除群成员" + allowMultiple={true} + /> + + {/* 添加管理员弹窗 */} + ({ + id: member.wechatId, + nickname: member.nickname, + avatar: member.avatar + }))} + onCancel={() => setIsAdminSelectionVisible(false)} + onConfirm={handleAddAdmin} + title="添加管理员" + allowMultiple={false} + /> + + {/* 删除管理员弹窗 */} + ({ + id: member.wechatId, + nickname: member.nickname, + avatar: member.avatar + }))} + onCancel={() => setIsRemoveAdminSelectionVisible(false)} + onConfirm={handleRemoveAdmin} + title="删除管理员" + allowMultiple={false} + /> + + {/* 转让群主弹窗 */} + ({ + id: member.wechatId, + nickname: member.nickname, + avatar: member.avatar + }))} + onCancel={() => setIsTransferOwnerSelectionVisible(false)} + onConfirm={handleTransferOwner} + title="转让群主" + allowMultiple={false} + /> ); };