From 8581432bf4d0bfbcf1918dd9a7c5c78dace05a43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B6=85=E7=BA=A7=E8=80=81=E7=99=BD=E5=85=94?= Date: Sat, 30 Aug 2025 15:36:03 +0800 Subject: [PATCH] =?UTF-8?q?refactor(=E6=95=B0=E6=8D=AE=E5=BA=93):=20?= =?UTF-8?q?=E9=87=8D=E5=91=BD=E5=90=8DGroupData=E4=B8=BAwechatGroup?= =?UTF-8?q?=E5=B9=B6=E4=BC=98=E5=8C=96=E6=95=B0=E6=8D=AE=E5=BA=93=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 重构GroupData接口为wechatGroup以更准确描述微信群组数据结构 在数据库初始化时添加调试模式清理数据功能 更新所有相关引用和数据库服务实例名称 --- Cunkebao/src/main.tsx | 8 +++++ Cunkebao/src/pages/mobile/test/db.tsx | 8 ++--- .../SidebarMenu/MessageList/index.tsx | 8 ++--- .../SidebarMenu/WechatFriends/index.tsx | 8 ++--- .../pc/ckbox/components/SidebarMenu/index.tsx | 10 +++---- Cunkebao/src/pages/pc/ckbox/data.ts | 10 ++++++- Cunkebao/src/pages/pc/ckbox/index.tsx | 10 +++++-- Cunkebao/src/pages/pc/ckbox/main.ts | 30 +++++++++++++++---- Cunkebao/src/store/module/ckchat/ckchat.ts | 17 ++++------- Cunkebao/src/utils/db-examples.ts | 16 ++++++---- Cunkebao/src/utils/db.ts | 17 +++++++---- 11 files changed, 93 insertions(+), 49 deletions(-) diff --git a/Cunkebao/src/main.tsx b/Cunkebao/src/main.tsx index 49a04054..612fb438 100644 --- a/Cunkebao/src/main.tsx +++ b/Cunkebao/src/main.tsx @@ -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); // 可以选择显示错误提示或使用降级方案 diff --git a/Cunkebao/src/pages/mobile/test/db.tsx b/Cunkebao/src/pages/mobile/test/db.tsx index 1c551148..b8d076e7 100644 --- a/Cunkebao/src/pages/mobile/test/db.tsx +++ b/Cunkebao/src/pages/mobile/test/db.tsx @@ -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: "更新的群公告", }); diff --git a/Cunkebao/src/pages/pc/ckbox/components/SidebarMenu/MessageList/index.tsx b/Cunkebao/src/pages/pc/ckbox/components/SidebarMenu/MessageList/index.tsx index ab399177..b25b1f86 100644 --- a/Cunkebao/src/pages/pc/ckbox/components/SidebarMenu/MessageList/index.tsx +++ b/Cunkebao/src/pages/pc/ckbox/components/SidebarMenu/MessageList/index.tsx @@ -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 = ({ diff --git a/Cunkebao/src/pages/pc/ckbox/components/SidebarMenu/WechatFriends/index.tsx b/Cunkebao/src/pages/pc/ckbox/components/SidebarMenu/WechatFriends/index.tsx index 730f3ede..76107e53 100644 --- a/Cunkebao/src/pages/pc/ckbox/components/SidebarMenu/WechatFriends/index.tsx +++ b/Cunkebao/src/pages/pc/ckbox/components/SidebarMenu/WechatFriends/index.tsx @@ -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 = ({ diff --git a/Cunkebao/src/pages/pc/ckbox/components/SidebarMenu/index.tsx b/Cunkebao/src/pages/pc/ckbox/components/SidebarMenu/index.tsx index 98c5c712..fc649d2a 100644 --- a/Cunkebao/src/pages/pc/ckbox/components/SidebarMenu/index.tsx +++ b/Cunkebao/src/pages/pc/ckbox/components/SidebarMenu/index.tsx @@ -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; } diff --git a/Cunkebao/src/pages/pc/ckbox/data.ts b/Cunkebao/src/pages/pc/ckbox/data.ts index 20e79c83..8487b251 100644 --- a/Cunkebao/src/pages/pc/ckbox/data.ts +++ b/Cunkebao/src/pages/pc/ckbox/data.ts @@ -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; diff --git a/Cunkebao/src/pages/pc/ckbox/index.tsx b/Cunkebao/src/pages/pc/ckbox/index.tsx index c8f50eff..45f63da5 100644 --- a/Cunkebao/src/pages/pc/ckbox/index.tsx +++ b/Cunkebao/src/pages/pc/ckbox/index.tsx @@ -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([]); - const [currentChat, setCurrentChat] = useState( + const [currentChat, setCurrentChat] = useState( null, ); @@ -53,7 +57,7 @@ const CkboxPage: React.FC = () => { }); }, []); - const handleContactClick = (contract: ContractData | GroupData) => { + const handleContactClick = (contract: ContractData | wechatGroup) => { addChatSession(contract); setCurrentChat(contract); }; diff --git a/Cunkebao/src/pages/pc/ckbox/main.ts b/Cunkebao/src/pages/pc/ckbox/main.ts index ff62d021..e324fbcc 100644 --- a/Cunkebao/src/pages/pc/ckbox/main.ts +++ b/Cunkebao/src/pages/pc/ckbox/main.ts @@ -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[] } = {}; diff --git a/Cunkebao/src/store/module/ckchat/ckchat.ts b/Cunkebao/src/store/module/ckchat/ckchat.ts index 899bb9f7..e5bb1fe6 100644 --- a/Cunkebao/src/store/module/ckchat/ckchat.ts +++ b/Cunkebao/src/store/module/ckchat/ckchat.ts @@ -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( 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( 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( 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); diff --git a/Cunkebao/src/utils/db-examples.ts b/Cunkebao/src/utils/db-examples.ts index 4387431e..0127da81 100644 --- a/Cunkebao/src/utils/db-examples.ts +++ b/Cunkebao/src/utils/db-examples.ts @@ -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: "更新的群公告" }, diff --git a/Cunkebao/src/utils/db.ts b/Cunkebao/src/utils/db.ts index 943e3b44..e779d99d 100644 --- a/Cunkebao/src/utils/db.ts +++ b/Cunkebao/src/utils/db.ts @@ -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 { @@ -34,7 +38,7 @@ export interface KfUserWithServerId extends Omit { id?: number; // 接口数据的原始ID字段 } -export interface GroupWithServerId extends Omit { +export interface GroupWithServerId extends Omit { 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; - groups!: Table; + wechatGroup!: Table; contracts!: Table; newContractList!: Table; @@ -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 { // 创建各表的服务实例 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); // 默认导出数据库实例