refactor(websocket/wechat): 优化客服列表排序并简化初始化逻辑

- 在msgManage.ts中按在线状态排序客服列表
- 在main.ts中简化初始化逻辑,使用getAgentList和getChatroomList替代原有复杂逻辑
- 在api.ts中新增相关API接口并统一使用request2
This commit is contained in:
超级老白兔
2025-09-15 15:21:24 +08:00
parent a270b8ce3e
commit c91e54370f
3 changed files with 81 additions and 66 deletions

View File

@@ -1,4 +1,5 @@
import request from "@/api/request2";
import request2 from "@/api/request2";
import request from "@/api/request";
import {
MessageData,
ChatHistoryResponse,
@@ -11,6 +12,16 @@ import {
ChatSettings,
} from "./data";
//群、好友聊天记录列表
export function getChatroomList() {
return request("/v1/kefu/wechatChatroom/list", {}, "GET");
}
//获取客服列表
export function getAgentList() {
return request("/v1/kefu/customerService/list", {}, "GET");
}
//读取聊天信息
//kf.quwanzhi.com:9991/api/WechatFriend/clearUnreadCount
function jsonToQueryString(json) {
@@ -30,7 +41,7 @@ export function WechatFriendAllot(params: {
notifyReceiver: boolean;
comment: string;
}) {
return request(
return request2(
"/api/wechatFriend/allot?" + jsonToQueryString(params),
undefined,
"PUT",
@@ -39,7 +50,7 @@ export function WechatFriendAllot(params: {
//获取可转移客服列表
export function getTransferableAgentList() {
return request("/api/account/myDepartmentAccountsForTransfer", {}, "GET");
return request2("/api/account/myDepartmentAccountsForTransfer", {}, "GET");
}
// 微信好友列表
@@ -47,7 +58,7 @@ export function WechatFriendRebackAllot(params: {
wechatFriendId?: number;
wechatChatroomId?: number;
}) {
return request(
return request2(
"/api/wechatFriend/rebackAllot?" + jsonToQueryString(params),
undefined,
"PUT",
@@ -56,17 +67,17 @@ export function WechatFriendRebackAllot(params: {
// 微信群列表
export function WechatGroup(params) {
return request("/api/WechatGroup/list", params, "GET");
return request2("/api/WechatGroup/list", params, "GET");
}
//获取聊天记录-1 清除未读
export function clearUnreadCount(params) {
return request("/api/WechatFriend/clearUnreadCount", params, "PUT");
return request2("/api/WechatFriend/clearUnreadCount", params, "PUT");
}
//更新配置
export function updateConfig(params) {
return request("/api/WechatFriend/updateConfig", params, "PUT");
return request2("/api/WechatFriend/updateConfig", params, "PUT");
}
//获取聊天记录-2 获取列表
export function getChatMessages(params: {
@@ -78,7 +89,7 @@ export function getChatMessages(params: {
Count: number;
olderData: boolean;
}) {
return request("/api/FriendMessage/SearchMessage", params, "GET");
return request2("/api/FriendMessage/SearchMessage", params, "GET");
}
export function getChatroomMessages(params: {
wechatAccountId: number;
@@ -89,12 +100,12 @@ export function getChatroomMessages(params: {
Count: number;
olderData: boolean;
}) {
return request("/api/ChatroomMessage/SearchMessage", params, "GET");
return request2("/api/ChatroomMessage/SearchMessage", params, "GET");
}
//获取群列表
export function getGroupList(params: { prevId: number; count: number }) {
return request(
return request2(
"/api/wechatChatroom/listExcludeMembersByPage?",
params,
"GET",
@@ -103,7 +114,7 @@ export function getGroupList(params: { prevId: number; count: number }) {
//获取群成员
export function getGroupMembers(params: { id: number }) {
return request(
return request2(
"/api/WechatChatroom/listMembersByWechatChatroomId",
params,
"GET",
@@ -112,7 +123,7 @@ export function getGroupMembers(params: { id: number }) {
//触客宝登陆
export function loginWithToken(params: any) {
return request(
return request2(
"/token",
params,
"POST",
@@ -127,17 +138,17 @@ export function loginWithToken(params: any) {
// 获取触客宝用户信息
export function getChuKeBaoUserInfo() {
return request("/api/account/self", {}, "GET");
return request2("/api/account/self", {}, "GET");
}
// 获取联系人列表
export const getContactList = (params: { prevId: number; count: number }) => {
return request("/api/wechatFriend/list", params, "GET");
return request2("/api/wechatFriend/list", params, "GET");
};
//获取控制终端列表
export const getControlTerminalList = params => {
return request("/api/wechataccount", params, "GET");
return request2("/api/wechataccount", params, "GET");
};
// 获取聊天历史
@@ -146,7 +157,7 @@ export const getChatHistory = (
page: number = 1,
pageSize: number = 50,
): Promise<ChatHistoryResponse> => {
return request(`/v1/chats/${chatId}/messages`, { page, pageSize }, "GET");
return request2(`/v1/chats/${chatId}/messages`, { page, pageSize }, "GET");
};
// 发送消息
@@ -155,7 +166,7 @@ export const sendMessage = (
content: string,
type: MessageType = MessageType.TEXT,
): Promise<MessageData> => {
return request(`/v1/chats/${chatId}/messages`, { content, type }, "POST");
return request2(`/v1/chats/${chatId}/messages`, { content, type }, "POST");
};
// 发送文件消息
@@ -167,17 +178,17 @@ export const sendFileMessage = (
const formData = new FormData();
formData.append("file", file);
formData.append("type", type);
return request(`/v1/chats/${chatId}/messages/file`, formData, "POST");
return request2(`/v1/chats/${chatId}/messages/file`, formData, "POST");
};
// 标记消息为已读
export const markMessageAsRead = (messageId: string): Promise<void> => {
return request(`/v1/messages/${messageId}/read`, {}, "PUT");
return request2(`/v1/messages/${messageId}/read`, {}, "PUT");
};
// 标记聊天为已读
export const markChatAsRead = (chatId: string): Promise<void> => {
return request(`/v1/chats/${chatId}/read`, {}, "PUT");
return request2(`/v1/chats/${chatId}/read`, {}, "PUT");
};
// 添加群组成员
@@ -185,7 +196,7 @@ export const addGroupMembers = (
groupId: string,
memberIds: string[],
): Promise<void> => {
return request(`/v1/groups/${groupId}/members`, { memberIds }, "POST");
return request2(`/v1/groups/${groupId}/members`, { memberIds }, "POST");
};
// 移除群组成员
@@ -193,34 +204,34 @@ export const removeGroupMembers = (
groupId: string,
memberIds: string[],
): Promise<void> => {
return request(`/v1/groups/${groupId}/members`, { memberIds }, "DELETE");
return request2(`/v1/groups/${groupId}/members`, { memberIds }, "DELETE");
};
// 获取在线状态
export const getOnlineStatus = (userId: string): Promise<OnlineStatus> => {
return request(`/v1/users/${userId}/status`, {}, "GET");
return request2(`/v1/users/${userId}/status`, {}, "GET");
};
// 获取消息状态
export const getMessageStatus = (messageId: string): Promise<MessageStatus> => {
return request(`/v1/messages/${messageId}/status`, {}, "GET");
return request2(`/v1/messages/${messageId}/status`, {}, "GET");
};
// 上传文件
export const uploadFile = (file: File): Promise<FileUploadResponse> => {
const formData = new FormData();
formData.append("file", file);
return request("/v1/upload", formData, "POST");
return request2("/v1/upload", formData, "POST");
};
// 获取表情包列表
export const getEmojiList = (): Promise<EmojiData[]> => {
return request("/v1/emojis", {}, "GET");
return request2("/v1/emojis", {}, "GET");
};
// 获取快捷回复列表
export const getQuickReplies = (): Promise<QuickReply[]> => {
return request("/v1/quick-replies", {}, "GET");
return request2("/v1/quick-replies", {}, "GET");
};
// 添加快捷回复
@@ -228,49 +239,49 @@ export const addQuickReply = (data: {
content: string;
category: string;
}): Promise<QuickReply> => {
return request("/v1/quick-replies", data, "POST");
return request2("/v1/quick-replies", data, "POST");
};
// 删除快捷回复
export const deleteQuickReply = (id: string): Promise<void> => {
return request(`/v1/quick-replies/${id}`, {}, "DELETE");
return request2(`/v1/quick-replies/${id}`, {}, "DELETE");
};
// 获取聊天设置
export const getChatSettings = (): Promise<ChatSettings> => {
return request("/v1/chat/settings", {}, "GET");
return request2("/v1/chat/settings", {}, "GET");
};
// 更新聊天设置
export const updateChatSettings = (
settings: Partial<ChatSettings>,
): Promise<ChatSettings> => {
return request("/v1/chat/settings", settings, "PUT");
return request2("/v1/chat/settings", settings, "PUT");
};
// 删除聊天会话
export const deleteChatSession = (chatId: string): Promise<void> => {
return request(`/v1/chats/${chatId}`, {}, "DELETE");
return request2(`/v1/chats/${chatId}`, {}, "DELETE");
};
// 置顶聊天会话
export const pinChatSession = (chatId: string): Promise<void> => {
return request(`/v1/chats/${chatId}/pin`, {}, "PUT");
return request2(`/v1/chats/${chatId}/pin`, {}, "PUT");
};
// 取消置顶聊天会话
export const unpinChatSession = (chatId: string): Promise<void> => {
return request(`/v1/chats/${chatId}/unpin`, {}, "PUT");
return request2(`/v1/chats/${chatId}/unpin`, {}, "PUT");
};
// 静音聊天会话
export const muteChatSession = (chatId: string): Promise<void> => {
return request(`/v1/chats/${chatId}/mute`, {}, "PUT");
return request2(`/v1/chats/${chatId}/mute`, {}, "PUT");
};
// 取消静音聊天会话
export const unmuteChatSession = (chatId: string): Promise<void> => {
return request(`/v1/chats/${chatId}/unmute`, {}, "PUT");
return request2(`/v1/chats/${chatId}/unmute`, {}, "PUT");
};
// 转发消息
@@ -278,10 +289,10 @@ export const forwardMessage = (
messageId: string,
targetChatIds: string[],
): Promise<void> => {
return request("/v1/messages/forward", { messageId, targetChatIds }, "POST");
return request2("/v1/messages/forward", { messageId, targetChatIds }, "POST");
};
// 撤回消息
export const recallMessage = (messageId: string): Promise<void> => {
return request(`/v1/messages/${messageId}/recall`, {}, "PUT");
return request2(`/v1/messages/${messageId}/recall`, {}, "PUT");
};

View File

@@ -13,6 +13,8 @@ import {
getControlTerminalList,
getContactList,
getGroupList,
getAgentList,
getChatroomList,
} from "./api";
import { useUserStore } from "@/store/module/user";
@@ -39,15 +41,7 @@ export const chatInitAPIdata = async () => {
await asyncWeChatGroup(groupList);
// 提取不重复的wechatAccountId组
const uniqueWechatAccountIds: number[] = getUniqueWechatAccountIds(
contractList,
groupList,
);
//获取控制终端列表
const kfUserList: KfUserListData[] =
await getControlTerminalListByWechatAccountIds(uniqueWechatAccountIds);
const kfUserList: KfUserListData[] = await getAgentList();
//获取用户列表
await asyncKfUserList(kfUserList);
@@ -64,28 +58,30 @@ export const chatInitAPIdata = async () => {
v => v?.config && v.config?.chat,
);
//排序功能
const sortedSessions = [...filterUserSessions, ...filterGroupSessions].sort(
(a, b) => {
// 如果lastUpdateTime不存在则将其排在最后
if (!a.lastUpdateTime) return 1;
if (!b.lastUpdateTime) return -1;
// const sortedSessions = [...filterUserSessions, ...filterGroupSessions].sort(
// (a, b) => {
// // 如果lastUpdateTime不存在则将其排在最后
// if (!a.lastUpdateTime) return 1;
// if (!b.lastUpdateTime) return -1;
// 首先按时间降序排列(最新的在前面)
const timeCompare =
new Date(b.lastUpdateTime).getTime() -
new Date(a.lastUpdateTime).getTime();
// // 首先按时间降序排列(最新的在前面)
// const timeCompare =
// new Date(b.lastUpdateTime).getTime() -
// new Date(a.lastUpdateTime).getTime();
// 如果时间相同,则按未读消息数量降序排列
if (timeCompare === 0) {
// 如果unreadCount不存在则将其排在后面
const aUnread = a.unreadCount || 0;
const bUnread = b.unreadCount || 0;
return bUnread - aUnread; // 未读消息多的排在前面
}
// // 如果时间相同,则按未读消息数量降序排列
// if (timeCompare === 0) {
// // 如果unreadCount不存在则将其排在后面
// const aUnread = a.unreadCount || 0;
// const bUnread = b.unreadCount || 0;
// return bUnread - aUnread; // 未读消息多的排在前面
// }
return timeCompare;
},
);
// return timeCompare;
// },
// );
const sortedSessions = await getChatroomList();
console.log("sortedSessions", sortedSessions);
//会话数据同步
asyncChatSessions(sortedSessions);

View File

@@ -23,6 +23,14 @@ const messageHandlers: Record<string, MessageHandler> = {
kfUserList.forEach(kfUser => {
kfUser.isOnline = wechatAccountsAliveStatus[kfUser.id];
});
// 按在线状态排序,在线的排在前面
kfUserList.sort((a, b) => {
if (a.isOnline && !b.isOnline) return -1;
if (!a.isOnline && b.isOnline) return 1;
return 0;
});
asyncKfUserList(kfUserList);
},
// 发送消息响应