feat: 初始化 ChatOA 企业协作 OA 系统

This commit is contained in:
2026-08-20 19:36:07 +08:00
commit 6d7a1f6e63
90 changed files with 20067 additions and 0 deletions
+112
View File
@@ -0,0 +1,112 @@
# 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/ # IMREST + 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-<version>-x64.exe` | NSIS 安装版,可自定义安装目录、生成桌面快捷方式 |
| `ChatOA-Portable-<version>-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 / 上传接口传输,未做压缩与断点续传
- 支持单聊,群聊、已读回执细粒度、消息撤回等留待后续版本