ContactList State

最近更新时间:2025-09-12 18:14:53

我的收藏

概述

ContactListState 是基于状态管理的联系人数据管理 Composable,为 ContactList 组件提供完整的数据管理能力。它支持好友列表、群组列表、黑名单和申请管理等功能。如果自定义组件能力不能支持您的业务,可以使用 ContactListState 实现您的需求。

数据

属性名
类型
说明
friendList
Ref<Friend[]>
好友列表
groupList
Ref<GroupModel[]>
群组列表
blackList
Ref<UserProfile[]>
黑名单列表
friendApplicationUnreadCount
Ref<number>
未读好友申请数量
friendGroupList
Ref<FriendGroup[]>
好友分组列表
friendApplicationList
Ref<FriendApplication[]>
好友申请列表
groupApplicationList
Ref<GroupApplication[]>
群组申请列表

方法

属性名
类型
说明
addFriend
(options: AddFriendParams) => Promise
添加好友
deleteFriend
(options: DeleteFriendParams) => Promise
删除好友
setFriendRemark
(options: FriendRemarkParams) => Promise
设置好友备注
markFriendApplicationAsRead
() => Promise
标记好友申请为已读
acceptFriendApplication
(options: FriendApplicationParams) => Promise
接受好友申请
refuseFriendApplication
(userID: string) => Promise
拒绝好友申请
addToBlacklist
(userIDList: string[]) => Promise
添加到黑名单
removeFromBlacklist
(userIDList: string[]) => Promise
从黑名单移除
createFriendGroup
(options: FriendGroupParams) => Promise
创建好友分组
deleteFriendGroup
(name: string) => Promise
删除好友分组
addToFriendGroup
(options: FriendGroupParams) => Promise
添加好友到分组
removeFromFriendGroup
(options: FriendGroupParams) => Promise
从分组移除好友
renameFriendGroup
(options: RenameFriendGroupParams) => Promise
重命名好友分组
joinGroup
(options: JoinGroupParams) => Promise
申请加入群组
acceptGroupApplication
(options: GroupApplicationParams) => Promise
接受群组申请
refuseGroupApplication
(options: GroupApplicationParams) => Promise
拒绝群组申请

使用示例

<template>
<div class="contact-manager">
<div class="contact-stats">
<div class="stat-item">
<span class="stat-label">好友数量:</span>
<span class="stat-value">{{ friendList.length }}</span>
</div>
<div class="stat-item">
<span class="stat-label">群组数量:</span>
<span class="stat-value">{{ groupList.length }}</span>
</div>
<div class="stat-item">
<span class="stat-label">未读申请:</span>
<span class="stat-value">{{ friendApplicationUnreadCount }}</span>
</div>
</div>

<div class="contact-actions">
<button @click="handleAddFriend" class="action-btn">添加好友</button>
<button @click="handleMarkAsRead" class="action-btn">标记已读</button>
</div>
</div>
</template>

<script setup lang="ts">
import { useContactListState } from '@tencentcloud/chat-uikit-vue3';

const {
friendList,
groupList,
blackList,
friendApplicationUnreadCount,
friendGroupList,
friendApplicationList,
groupApplicationList,
addFriend,
deleteFriend,
setFriendRemark,
markFriendApplicationAsRead,
acceptFriendApplication,
refuseFriendApplication,
addToBlacklist,
removeFromBlacklist,
createFriendGroup,
deleteFriendGroup,
addToFriendGroup,
removeFromFriendGroup,
joinGroup,
acceptGroupApplication,
refuseGroupApplication,
} = useContactListState();

const handleAddFriend = async () => {
try {
await addFriend({
userID: 'user123',
addSource: 'AddSource_Type_Web',
remark: '朋友',
wording: '你好',
});
console.log('好友添加成功');
} catch (error) {
console.error('添加好友失败:', error);
}
};

const handleMarkAsRead = async () => {
try {
await markFriendApplicationAsRead();
console.log('已标记为已读');
} catch (error) {
console.error('标记失败:', error);
}
};
</script>

<style scoped>
.contact-manager {
padding: 20px;
border: 1px solid #e0e0e0;
border-radius: 8px;
}

.contact-stats {
display: flex;
gap: 20px;
margin-bottom: 20px;
}

.stat-item {
display: flex;
flex-direction: column;
align-items: center;
padding: 12px;
background-color: #f5f5f5;
border-radius: 6px;
}

.stat-label {
font-size: 12px;
color: #666;
margin-bottom: 4px;
}

.stat-value {
font-size: 18px;
font-weight: bold;
color: #1890ff;
}

.contact-actions {
display: flex;
gap: 12px;
}

.action-btn {
padding: 8px 16px;
background-color: #1890ff;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
transition: background-color 0.2s;
}

.action-btn:hover {
background-color: #40a9ff;
}
</style>
效果如图: