Files

118 lines
4.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 状态
```
## 开发文档
- `项目要求.md` —— 需求基线 + 每条完成状态
- `开发进度存档.md` —— **新环境接手必读**:快速启动、功能清单、架构约定、踩坑记录、git 状态
## 快速开始
### 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 / 上传接口传输,未做压缩与断点续传
- 支持单聊,群聊、已读回执细粒度、消息撤回等留待后续版本