【操盘手】 内容库 - 修复选择好友或群直接渲染数据的BUG
This commit is contained in:
@@ -207,9 +207,9 @@ export default function NewContentLibraryPage() {
|
|||||||
>
|
>
|
||||||
<Users className="h-4 w-4" />
|
<Users className="h-4 w-4" />
|
||||||
</Button>
|
</Button>
|
||||||
<Button variant="ghost" size="sm" onClick={() => removeGroup(group.id)}>
|
<Button variant="ghost" size="sm" onClick={() => removeGroup(group.id)}>
|
||||||
<X className="h-4 w-4" />
|
<X className="h-4 w-4" />
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
|
|||||||
@@ -48,13 +48,15 @@ export function WechatFriendSelector({ open, onOpenChange, selectedFriends, onSe
|
|||||||
const [page, setPage] = useState(1)
|
const [page, setPage] = useState(1)
|
||||||
const [totalPages, setTotalPages] = useState(1)
|
const [totalPages, setTotalPages] = useState(1)
|
||||||
const [totalItems, setTotalItems] = useState(0)
|
const [totalItems, setTotalItems] = useState(0)
|
||||||
|
const [tempSelectedFriends, setTempSelectedFriends] = useState<WechatFriend[]>([])
|
||||||
const pageSize = 20
|
const pageSize = 20
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (open) {
|
if (open) {
|
||||||
fetchFriends(1)
|
fetchFriends(1)
|
||||||
|
setTempSelectedFriends([...selectedFriends])
|
||||||
}
|
}
|
||||||
}, [open])
|
}, [open, selectedFriends])
|
||||||
|
|
||||||
const fetchFriends = async (pageNum: number) => {
|
const fetchFriends = async (pageNum: number) => {
|
||||||
setLoading(true)
|
setLoading(true)
|
||||||
@@ -145,12 +147,12 @@ export function WechatFriendSelector({ open, onOpenChange, selectedFriends, onSe
|
|||||||
friends.map((friend) => (
|
friends.map((friend) => (
|
||||||
<div key={friend.id} className="flex items-center space-x-3 p-2 hover:bg-gray-100 rounded-lg">
|
<div key={friend.id} className="flex items-center space-x-3 p-2 hover:bg-gray-100 rounded-lg">
|
||||||
<Checkbox
|
<Checkbox
|
||||||
checked={selectedFriends.some((f) => f.id === friend.id)}
|
checked={tempSelectedFriends.some((f) => f.id === friend.id)}
|
||||||
onCheckedChange={(checked) => {
|
onCheckedChange={(checked) => {
|
||||||
if (checked) {
|
if (checked) {
|
||||||
onSelect([...selectedFriends, friend])
|
setTempSelectedFriends([...tempSelectedFriends, friend])
|
||||||
} else {
|
} else {
|
||||||
onSelect(selectedFriends.filter((f) => f.id !== friend.id))
|
setTempSelectedFriends(tempSelectedFriends.filter((f) => f.id !== friend.id))
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
@@ -204,7 +206,12 @@ export function WechatFriendSelector({ open, onOpenChange, selectedFriends, onSe
|
|||||||
<Button variant="outline" onClick={() => onOpenChange(false)}>
|
<Button variant="outline" onClick={() => onOpenChange(false)}>
|
||||||
取消
|
取消
|
||||||
</Button>
|
</Button>
|
||||||
<Button onClick={() => onOpenChange(false)}>确定 ({selectedFriends.length})</Button>
|
<Button onClick={() => {
|
||||||
|
onSelect(tempSelectedFriends)
|
||||||
|
onOpenChange(false)
|
||||||
|
}}>
|
||||||
|
确定 ({tempSelectedFriends.length})
|
||||||
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
</DialogContent>
|
</DialogContent>
|
||||||
</Dialog>
|
</Dialog>
|
||||||
|
|||||||
@@ -43,13 +43,15 @@ export function WechatGroupMemberSelector({
|
|||||||
const [page, setPage] = useState(1)
|
const [page, setPage] = useState(1)
|
||||||
const [totalPages, setTotalPages] = useState(1)
|
const [totalPages, setTotalPages] = useState(1)
|
||||||
const [totalItems, setTotalItems] = useState(0)
|
const [totalItems, setTotalItems] = useState(0)
|
||||||
|
const [tempSelectedMembers, setTempSelectedMembers] = useState<WechatGroupMember[]>([])
|
||||||
const pageSize = 20
|
const pageSize = 20
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (open && groupId) {
|
if (open && groupId) {
|
||||||
fetchGroupMembers(1)
|
fetchGroupMembers(1)
|
||||||
|
setTempSelectedMembers([...selectedMembers])
|
||||||
}
|
}
|
||||||
}, [open, groupId])
|
}, [open, groupId, selectedMembers])
|
||||||
|
|
||||||
const fetchGroupMembers = async (pageNum: number) => {
|
const fetchGroupMembers = async (pageNum: number) => {
|
||||||
setLoading(true)
|
setLoading(true)
|
||||||
@@ -64,14 +66,26 @@ export function WechatGroupMemberSelector({
|
|||||||
const response = await api.get<ApiResponse<GroupMemberListResponse>>(`/v1/chatroom/getMemberList?${queryParams.toString()}`)
|
const response = await api.get<ApiResponse<GroupMemberListResponse>>(`/v1/chatroom/getMemberList?${queryParams.toString()}`)
|
||||||
|
|
||||||
if (response.code === 200 && response.data) {
|
if (response.code === 200 && response.data) {
|
||||||
const membersList = response.data.list.map((item: any) => ({
|
const membersList = response.data.list.map((item: any) => {
|
||||||
id: item.id || `member-${Math.random()}`,
|
// 确定角色类型
|
||||||
nickname: item.nickname || '未知成员',
|
let role: "owner" | "admin" | "member" | undefined;
|
||||||
wechatId: item.identifier || '',
|
if (item.isOwner) {
|
||||||
avatar: item.avatar || '/placeholder.svg',
|
role = "owner";
|
||||||
role: item.isOwner ? 'owner' : (item.isAdmin ? 'admin' : 'member'),
|
} else if (item.isAdmin) {
|
||||||
joinTime: item.createTime ? new Date(item.createTime * 1000).toLocaleString() : '--'
|
role = "admin";
|
||||||
}))
|
} else {
|
||||||
|
role = "member";
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
id: item.id || `member-${Math.random()}`,
|
||||||
|
nickname: item.name || item.ownerNickname || '未知成员',
|
||||||
|
wechatId: item.ownerWechatId || item.identifier || '',
|
||||||
|
avatar: item.ownerAvatar || item.avatar || '/placeholder.svg',
|
||||||
|
role: role,
|
||||||
|
joinTime: item.createTime ? new Date(item.createTime * 1000).toLocaleString() : '--'
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
setMembers(membersList)
|
setMembers(membersList)
|
||||||
setTotalItems(response.data.total)
|
setTotalItems(response.data.total)
|
||||||
@@ -139,12 +153,12 @@ export function WechatGroupMemberSelector({
|
|||||||
members.map((member) => (
|
members.map((member) => (
|
||||||
<div key={member.id} className="flex items-center space-x-3 p-2 hover:bg-gray-100 rounded-lg">
|
<div key={member.id} className="flex items-center space-x-3 p-2 hover:bg-gray-100 rounded-lg">
|
||||||
<Checkbox
|
<Checkbox
|
||||||
checked={selectedMembers.some((m) => m.id === member.id)}
|
checked={tempSelectedMembers.some((m) => m.id === member.id)}
|
||||||
onCheckedChange={(checked) => {
|
onCheckedChange={(checked) => {
|
||||||
if (checked) {
|
if (checked) {
|
||||||
onSelect([...selectedMembers, member])
|
setTempSelectedMembers([...tempSelectedMembers, member])
|
||||||
} else {
|
} else {
|
||||||
onSelect(selectedMembers.filter((m) => m.id !== member.id))
|
setTempSelectedMembers(tempSelectedMembers.filter((m) => m.id !== member.id))
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
@@ -201,8 +215,11 @@ export function WechatGroupMemberSelector({
|
|||||||
<Button variant="outline" onClick={() => onOpenChange(false)}>
|
<Button variant="outline" onClick={() => onOpenChange(false)}>
|
||||||
取消
|
取消
|
||||||
</Button>
|
</Button>
|
||||||
<Button onClick={() => onOpenChange(false)}>
|
<Button onClick={() => {
|
||||||
确定 ({selectedMembers.length})
|
onSelect(tempSelectedMembers)
|
||||||
|
onOpenChange(false)
|
||||||
|
}}>
|
||||||
|
确定 ({tempSelectedMembers.length})
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
</DialogContent>
|
</DialogContent>
|
||||||
|
|||||||
@@ -36,13 +36,15 @@ export function WechatGroupSelector({ open, onOpenChange, selectedGroups, onSele
|
|||||||
const [page, setPage] = useState(1)
|
const [page, setPage] = useState(1)
|
||||||
const [totalPages, setTotalPages] = useState(1)
|
const [totalPages, setTotalPages] = useState(1)
|
||||||
const [totalItems, setTotalItems] = useState(0)
|
const [totalItems, setTotalItems] = useState(0)
|
||||||
|
const [tempSelectedGroups, setTempSelectedGroups] = useState<WechatGroup[]>([])
|
||||||
const pageSize = 20
|
const pageSize = 20
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (open) {
|
if (open) {
|
||||||
fetchGroups(1)
|
fetchGroups(1)
|
||||||
|
setTempSelectedGroups([...selectedGroups])
|
||||||
}
|
}
|
||||||
}, [open])
|
}, [open, selectedGroups])
|
||||||
|
|
||||||
const fetchGroups = async (pageNum: number) => {
|
const fetchGroups = async (pageNum: number) => {
|
||||||
setLoading(true)
|
setLoading(true)
|
||||||
@@ -130,12 +132,12 @@ export function WechatGroupSelector({ open, onOpenChange, selectedGroups, onSele
|
|||||||
groups.map((group) => (
|
groups.map((group) => (
|
||||||
<div key={group.id} className="flex items-center space-x-3 p-2 hover:bg-gray-100 rounded-lg">
|
<div key={group.id} className="flex items-center space-x-3 p-2 hover:bg-gray-100 rounded-lg">
|
||||||
<Checkbox
|
<Checkbox
|
||||||
checked={selectedGroups.some((g) => g.id === group.id)}
|
checked={tempSelectedGroups.some((g) => g.id === group.id)}
|
||||||
onCheckedChange={(checked) => {
|
onCheckedChange={(checked) => {
|
||||||
if (checked) {
|
if (checked) {
|
||||||
onSelect([...selectedGroups, group])
|
setTempSelectedGroups([...tempSelectedGroups, group])
|
||||||
} else {
|
} else {
|
||||||
onSelect(selectedGroups.filter((g) => g.id !== group.id))
|
setTempSelectedGroups(tempSelectedGroups.filter((g) => g.id !== group.id))
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
@@ -188,7 +190,12 @@ export function WechatGroupSelector({ open, onOpenChange, selectedGroups, onSele
|
|||||||
<Button variant="outline" onClick={() => onOpenChange(false)}>
|
<Button variant="outline" onClick={() => onOpenChange(false)}>
|
||||||
取消
|
取消
|
||||||
</Button>
|
</Button>
|
||||||
<Button onClick={() => onOpenChange(false)}>确定 ({selectedGroups.length})</Button>
|
<Button onClick={() => {
|
||||||
|
onSelect(tempSelectedGroups)
|
||||||
|
onOpenChange(false)
|
||||||
|
}}>
|
||||||
|
确定 ({tempSelectedGroups.length})
|
||||||
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
</DialogContent>
|
</DialogContent>
|
||||||
</Dialog>
|
</Dialog>
|
||||||
|
|||||||
Reference in New Issue
Block a user