refactor(数据库): 重命名GroupData为wechatGroup并优化数据库初始化

重构GroupData接口为wechatGroup以更准确描述微信群组数据结构
在数据库初始化时添加调试模式清理数据功能
更新所有相关引用和数据库服务实例名称
This commit is contained in:
超级老白兔
2025-08-30 15:36:03 +08:00
parent 5bdd299dad
commit 8581432bf4
11 changed files with 93 additions and 49 deletions

View File

@@ -11,6 +11,14 @@ async function initializeApp() {
// 确保数据库已打开
await db.open();
console.log("数据库初始化成功");
// 调试模式:清理所有数据
console.log("调试模式:开始清理数据库数据...");
await db.kfUsers.clear();
await db.wechatGroup.clear();
await db.contracts.clear();
await db.newContractList.clear();
console.log("数据库数据清理完成");
} catch (error) {
console.error("数据库初始化失败:", error);
// 可以选择显示错误提示或使用降级方案

View File

@@ -25,7 +25,7 @@ import { DatabaseExamples } from "@/utils/db-examples";
import {
db,
kfUserService,
groupService,
wechatGroupService,
contractService,
DatabaseService,
} from "@/utils/db";
@@ -74,7 +74,7 @@ const DatabaseTestPage: React.FC = () => {
const newContactListService = new DatabaseService(db.newContractList);
const stats = {
kfUsers: await kfUserService.count(),
groups: await groupService.count(),
groups: await wechatGroupService.count(),
contracts: await contractService.count(),
newContactList: await newContactListService.count(),
};
@@ -188,14 +188,14 @@ const DatabaseTestPage: React.FC = () => {
selfDisplyName: "群管理员",
};
const groupId = await groupService.createWithServerId(serverGroup);
const groupId = await wechatGroupService.createWithServerId(serverGroup);
addLog(
"success",
`创建群组成功本地ID: ${groupId}, 服务器ID: ${serverGroup.id}`,
);
// 更新群组
await groupService.update(groupId, {
await wechatGroupService.update(groupId, {
unreadCount: 5,
notice: "更新的群公告",
});

View File

@@ -1,13 +1,13 @@
import React from "react";
import { List, Avatar, Badge } from "antd";
import { UserOutlined, TeamOutlined } from "@ant-design/icons";
import { ContractData, GroupData } from "@/pages/pc/ckbox/data";
import { ContractData, wechatGroup } from "@/pages/pc/ckbox/data";
import styles from "./MessageList.module.scss";
import { formatWechatTime } from "@/utils/common";
interface MessageListProps {
chatSessions: ContractData[] | GroupData[];
currentChat: ContractData | GroupData;
onChatSelect: (chat: ContractData | GroupData) => void;
chatSessions: ContractData[] | wechatGroup[];
currentChat: ContractData | wechatGroup;
onChatSelect: (chat: ContractData | wechatGroup) => void;
}
const MessageList: React.FC<MessageListProps> = ({

View File

@@ -3,12 +3,12 @@ import { List, Avatar, Collapse, Button } from "antd";
import type { CollapseProps } from "antd";
import styles from "./WechatFriends.module.scss";
import { useCkChatStore } from "@/store/module/ckchat/ckchat";
import { ContractData, GroupData } from "@/pages/pc/ckbox/data";
import { ContractData, wechatGroup } from "@/pages/pc/ckbox/data";
interface WechatFriendsProps {
contracts: ContractData[] | GroupData[];
onContactClick: (contract: ContractData | GroupData) => void;
selectedContactId?: ContractData | GroupData;
contracts: ContractData[] | wechatGroup[];
onContactClick: (contract: ContractData | wechatGroup) => void;
selectedContactId?: ContractData | wechatGroup;
}
const ContactListSimple: React.FC<WechatFriendsProps> = ({

View File

@@ -6,17 +6,17 @@ import {
ChromeOutlined,
MessageOutlined,
} from "@ant-design/icons";
import { ContractData, GroupData } from "@/pages/pc/ckbox/data";
import { ContractData, wechatGroup } from "@/pages/pc/ckbox/data";
import WechatFriends from "./WechatFriends";
import MessageList from "./MessageList/index";
import styles from "./SidebarMenu.module.scss";
import { getChatSessions } from "@/store/module/ckchat/ckchat";
interface SidebarMenuProps {
contracts: ContractData[] | GroupData[];
currentChat: ContractData | GroupData;
onContactClick: (contract: ContractData | GroupData) => void;
onChatSelect: (chat: ContractData | GroupData) => void;
contracts: ContractData[] | wechatGroup[];
currentChat: ContractData | wechatGroup;
onContactClick: (contract: ContractData | wechatGroup) => void;
onChatSelect: (chat: ContractData | wechatGroup) => void;
loading?: boolean;
}

View File

@@ -1,3 +1,11 @@
//联系人标签分组
export interface ContactGroupByLabel {
id: number;
accountId?: number;
groupName: string;
tenantId?: number;
[key: string]: any;
}
//终端用户数据接口
export interface KfUserListData {
id: number;
@@ -41,7 +49,7 @@ export interface CkAccount {
}
//群聊数据接口
export interface GroupData {
export interface wechatGroup {
id?: number;
wechatAccountId: number;
tenantId: number;

View File

@@ -10,12 +10,16 @@ import styles from "./index.module.scss";
import { addChatSession } from "@/store/module/ckchat/ckchat";
const { Header, Content, Sider } = Layout;
import { chatInitAPIdata } from "./main";
import { KfUserListData, GroupData, ContractData } from "@/pages/pc/ckbox/data";
import {
KfUserListData,
wechatGroup,
ContractData,
} from "@/pages/pc/ckbox/data";
const CkboxPage: React.FC = () => {
const [messageApi, contextHolder] = message.useMessage();
const [contracts, setContacts] = useState<any[]>([]);
const [currentChat, setCurrentChat] = useState<ContractData | GroupData>(
const [currentChat, setCurrentChat] = useState<ContractData | wechatGroup>(
null,
);
@@ -53,7 +57,7 @@ const CkboxPage: React.FC = () => {
});
}, []);
const handleContactClick = (contract: ContractData | GroupData) => {
const handleContactClick = (contract: ContractData | wechatGroup) => {
addChatSession(contract);
setCurrentChat(contract);
};

View File

@@ -1,5 +1,4 @@
import {
useCkChatStore,
asyncKfUserList,
asyncContractList,
asyncChatSessions,
@@ -16,7 +15,11 @@ import {
} from "./api";
const { sendCommand } = useWebSocketStore.getState();
import { useUserStore } from "@/store/module/user";
import { ContractData, GroupData, KfUserListData } from "@/pages/pc/ckbox/data";
import {
ContractData,
wechatGroup,
KfUserListData,
} from "@/pages/pc/ckbox/data";
const { login2 } = useUserStore.getState();
//获取触客宝基础信息
export const chatInitAPIdata = async () => {
@@ -95,7 +98,7 @@ export const chatInitAPIdata = async () => {
//构建联系人列表标签
export const createContractList = async (
contractList: ContractData[],
groupList: GroupData[],
groupList: wechatGroup[],
) => {
const LablesRes = await Promise.all(
[1, 2].map(item =>
@@ -105,8 +108,25 @@ export const createContractList = async (
),
);
const [friend, group] = LablesRes;
const lastIndex = friend.length + group.length + 1;
const countLables = [
...[
{
id: 0,
groupName: "默认群分组",
},
],
...friend,
...group,
...[
{
id: lastIndex,
groupName: "未分组",
},
],
];
const countLables = [...friend, ...group];
console.log(countLables);
// 根据countLables中的groupName整理contractList数据
// 返回按标签分组的联系人数组,包括未分组标签(在数组最后)
@@ -122,7 +142,7 @@ export const createContractList = async (
export const organizeContactsByLabels = (
countLables: any[],
contractList: ContractData[],
groupList: GroupData[],
groupList: wechatGroup[],
) => {
// 创建结果对象,用于存储按标签分组的联系人
const result: { [key: string]: any[] } = {};

View File

@@ -2,7 +2,7 @@ import { createPersistStore } from "@/store/createPersistStore";
import { CkChatState, CkUserInfo, CkTenant } from "./ckchat.data";
import {
ContractData,
GroupData,
wechatGroup,
CkAccount,
KfUserListData,
} from "@/pages/pc/ckbox/data";
@@ -18,16 +18,11 @@ export const useCkChatStore = createPersistStore<CkChatState>(
newContractList: [], //联系人分组
//客服列表
asyncKfUserList: async data => {
console.log(data);
await kfUserService.createManyWithServerId(data);
// set({ kfUserList: data });
},
// 获取客服列表
getkfUserList: async () => {
return await kfUserService.findAll();
// const state = useCkChatStore.getState();
// return state.kfUserList;
},
asyncKfSelected: (data: number) => {
set({ kfSelected: data });
@@ -78,7 +73,7 @@ export const useCkChatStore = createPersistStore<CkChatState>(
return state.chatSessions;
},
// 添加聊天会话
addChatSession: (session: ContractData | GroupData) => {
addChatSession: (session: ContractData | wechatGroup) => {
set(state => {
// 检查是否已存在相同id的会话
const exists = state.chatSessions.some(item => item.id === session.id);
@@ -86,12 +81,12 @@ export const useCkChatStore = createPersistStore<CkChatState>(
return {
chatSessions: exists
? state.chatSessions
: [...state.chatSessions, session as ContractData | GroupData],
: [...state.chatSessions, session as ContractData | wechatGroup],
};
});
},
// 更新聊天会话
updateChatSession: (session: ContractData | GroupData) => {
updateChatSession: (session: ContractData | wechatGroup) => {
set(state => ({
chatSessions: state.chatSessions.map(item =>
item.id === session.id ? session : item,
@@ -186,9 +181,9 @@ export const getCkAccountName = () =>
export const getCkTenantName = () => useCkChatStore.getState().getTenantName();
export const getChatSessions = () =>
useCkChatStore.getState().getChatSessions();
export const addChatSession = (session: ContractData | GroupData) =>
export const addChatSession = (session: ContractData | wechatGroup) =>
useCkChatStore.getState().addChatSession(session);
export const updateChatSession = (session: ContractData | GroupData) =>
export const updateChatSession = (session: ContractData | wechatGroup) =>
useCkChatStore.getState().updateChatSession(session);
export const deleteChatSession = (sessionId: string) =>
useCkChatStore.getState().deleteChatSession(sessionId);

View File

@@ -1,12 +1,16 @@
import {
db,
kfUserService,
groupService,
wechatGroupService,
contractService,
DatabaseService,
NewContactListData,
} from "./db";
import { KfUserListData, GroupData, ContractData } from "@/pages/pc/ckbox/data";
import {
KfUserListData,
wechatGroup,
ContractData,
} from "@/pages/pc/ckbox/data";
// 创建 newContractList 服务实例
const newContactListService = new DatabaseService(db.newContractList);
@@ -128,7 +132,7 @@ export class DatabaseExamples {
try {
// 使用新方法创建群组
const groupId = await groupService.createWithServerId(serverGroup);
const groupId = await wechatGroupService.createWithServerId(serverGroup);
console.log(
"创建群组成功本地ID:",
groupId,
@@ -137,18 +141,18 @@ export class DatabaseExamples {
);
// 查询群组
const groups = await groupService.findWhere("tenantId", 1);
const groups = await wechatGroupService.findWhere("tenantId", 1);
console.log("租户群组数量:", groups.length);
// 查询有未读消息的群组
const unreadGroups = await groupService.findWhereGreaterThan(
const unreadGroups = await wechatGroupService.findWhereGreaterThan(
"unreadCount",
0,
);
console.log("有未读消息的群组:", unreadGroups.length);
// 批量更新群组
await groupService.updateMany([
await wechatGroupService.updateMany([
{
id: groupId,
data: { unreadCount: 5, notice: "更新的群公告" },

View File

@@ -26,7 +26,11 @@
*/
import Dexie, { Table } from "dexie";
import { KfUserListData, GroupData, ContractData } from "@/pages/pc/ckbox/data";
import {
KfUserListData,
wechatGroup,
ContractData,
} from "@/pages/pc/ckbox/data";
// 数据类型定义使用serverId作为主键
export interface KfUserWithServerId extends Omit<KfUserListData, "id"> {
@@ -34,7 +38,7 @@ export interface KfUserWithServerId extends Omit<KfUserListData, "id"> {
id?: number; // 接口数据的原始ID字段
}
export interface GroupWithServerId extends Omit<GroupData, "id"> {
export interface GroupWithServerId extends Omit<wechatGroup, "id"> {
serverId: number | string; // 服务器ID作为主键
id?: number; // 接口数据的原始ID字段
}
@@ -49,13 +53,14 @@ export interface NewContactListData {
serverId: number | string; // 服务器ID作为主键
id?: number; // 接口数据的原始ID字段
groupName: string;
contacts: ContractData[] | GroupData[];
contacts: ContractData[];
wechatGroup: wechatGroup[];
}
// 数据库类
class CunkebaoDatabase extends Dexie {
kfUsers!: Table<KfUserWithServerId>;
groups!: Table<GroupWithServerId>;
wechatGroup!: Table<GroupWithServerId>;
contracts!: Table<ContractWithServerId>;
newContractList!: Table<NewContactListData>;
@@ -66,7 +71,7 @@ class CunkebaoDatabase extends Dexie {
this.version(1).stores({
kfUsers:
"serverId, id, tenantId, wechatId, nickname, alias, avatar, gender, region, signature, bindQQ, bindEmail, bindMobile, createTime, currentDeviceId, isDeleted, deleteTime, groupId, memo, wechatVersion, lastUpdateTime, isOnline",
groups:
wechatGroup:
"serverId, id, wechatAccountId, tenantId, accountId, chatroomId, chatroomOwner, conRemark, nickname, chatroomAvatar, groupId, config, unreadCount, notice, selfDisplyName",
contracts:
"serverId, id, wechatAccountId, wechatId, alias, conRemark, nickname, quanPin, avatar, gender, region, addFrom, phone, signature, accountId, extendFields, city, lastUpdateTime, isPassed, tenantId, groupId, thirdParty, additionalPicture, desc, config, lastMessageTime, unreadCount, duplicate",
@@ -311,7 +316,7 @@ export class DatabaseService<T> {
// 创建各表的服务实例
export const kfUserService = new DatabaseService(db.kfUsers);
export const groupService = new DatabaseService(db.groups);
export const wechatwechatGroupService = new DatabaseService(db.wechatGroup);
export const contractService = new DatabaseService(db.contracts);
// 默认导出数据库实例