refactor(数据库): 重命名GroupData为wechatGroup并优化数据库初始化
重构GroupData接口为wechatGroup以更准确描述微信群组数据结构 在数据库初始化时添加调试模式清理数据功能 更新所有相关引用和数据库服务实例名称
This commit is contained in:
@@ -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);
|
||||
// 可以选择显示错误提示或使用降级方案
|
||||
|
||||
@@ -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: "更新的群公告",
|
||||
});
|
||||
|
||||
@@ -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> = ({
|
||||
|
||||
@@ -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> = ({
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
};
|
||||
|
||||
@@ -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[] } = {};
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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: "更新的群公告" },
|
||||
|
||||
@@ -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);
|
||||
|
||||
// 默认导出数据库实例
|
||||
|
||||
Reference in New Issue
Block a user