# ChatOA — 基于 IM 的 OA 客户端工具 通过即时通讯的方式实现对话、文件互传、表单签批等,面向办公室人员,整体结构参考微信电脑端(三列布局)。 ## 功能规划 | 模块 | 优先级 | 状态 | | ---- | ------ | ---- | | 1. 即时通讯(单聊 + 文字/图片消息) | P0 | 第一阶段完成 | | 2. 联系人 | P0 | 第一阶段完成 | | 3. 日程 | P0 | 第一阶段完成 | | 4. 表单(自定义表单,Json 存储) | P1 | Demo 版 | | 5. 笔记 | P1 | Demo 版 | | 6. 应用 | P2 | 扩展,导航占位 | | 7. 网盘 | P2 | 扩展,导航占位 | ## 技术栈 - **客户端**:Electron + React + TypeScript + Ant Design 5 + Zustand + Socket.IO Client - **服务端**:Node.js + NestJS + TypeScript + Socket.IO - **数据库(规划)**:MongoDB + Redis - **当前存储**:开发期使用「内存 + JSON 文件持久化」模拟存储,业务层通过统一的存储抽象接口访问,后续无缝切换到 MongoDB / Redis ## 目录结构 ``` ChatOA/ ├── server/ # NestJS 服务端(端口 3000) │ ├── data/ # JSON 持久化文件(自动生成) │ ├── uploads/ # 图片上传目录(自动生成) │ └── src/ │ ├── common/storage/ # 存储抽象层(内存 + JSON 持久化) │ ├── auth/ # JWT 认证 │ ├── users/ # 用户 │ ├── contacts/ # 联系人 │ ├── chat/ # IM(REST + Socket.IO 网关) │ ├── presence/ # 在线状态(模拟 Redis) │ ├── schedule/ # 日程 │ ├── forms/ # 表单 Demo │ ├── knowledge/ # 笔记 Demo │ └── seed/ # 演示数据初始化 └── client/ # Electron + React 客户端 ├── electron/ # 主进程 / preload └── src/ ├── layout/ # 三列布局 ├── pages/ # 登录 / 聊天 / 联系人 / 日程 / 表单 / 笔记 ├── api/ # HTTP 客户端 ├── socket/ # Socket.IO 客户端 └── store/ # Zustand 状态 ``` ## 快速开始 ### 1. 启动服务端 ```bash cd server npm install npm run start:dev # http://localhost:3000 ``` ### 2. 启动客户端(浏览器调试模式) ```bash cd client npm install npm run dev:web # http://localhost:5173 ``` ### 3. 启动客户端(Electron 桌面模式) ```bash cd client npm run dev # 同时启动 Vite + Electron ``` ### 4. 打包 Windows 桌面客户端 ```bash cd client npm run build # 仅前端构建(dist/) npm run build:win # 构建并打包,产物在 client/release/ ``` 打包产物(需服务端在 3000 端口运行): | 文件 | 说明 | | ---- | ---- | | `ChatOA-Setup--x64.exe` | NSIS 安装版,可自定义安装目录、生成桌面快捷方式 | | `ChatOA-Portable--x64.exe` | 免安装版,双击即用 | > 打包后的客户端以 `file://` 加载页面,会自动直连 `http://localhost:3000` 的 API 与 Socket;也可用 `VITE_API_BASE` / `VITE_SOCKET_URL` 环境变量覆盖服务端地址。 > Windows 打包若遇 `win-unpacked.tmp` 重命名被占用(Defender 实时扫描),已在构建配置中通过 `electronDist` 复用本地 Electron 绕过。 ## 演示账号 服务端启动时会自动初始化以下账号(密码均为 `123456`): | 用户名 | 昵称 | | ------ | ---- | | demo | 演示用户 | | alice | 小艾 | | bob | 小波 | | carol | 小卡 | 登录后可在联系人页找到其他用户发起单聊、发送文字/图片消息;日程、表单、笔记均为可用 Demo。 ## 当前已知限制(开发期) - 存储为 JSON 文件,重启服务数据保留;未接 MongoDB / Redis - 图片消息通过 base64 / 上传接口传输,未做压缩与断点续传 - 支持单聊,群聊、已读回执细粒度、消息撤回等留待后续版本