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. 启动服务端

cd server
npm install
npm run start:dev      # http://localhost:3000

2. 启动客户端(浏览器调试模式)

cd client
npm install
npm run dev:web        # http://localhost:5173

3. 启动客户端(Electron 桌面模式)

cd client
npm run dev            # 同时启动 Vite + Electron

4. 打包 Windows 桌面客户端

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 / 上传接口传输,未做压缩与断点续传
  • 支持单聊,群聊、已读回执细粒度、消息撤回等留待后续版本
S
Description
No description provided
Readme
672 KiB
Languages
TypeScript 99.4%
JavaScript 0.4%
CSS 0.1%