collabdocchat 1.1.1 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,535 +0,0 @@
1
- # CollabDocChat
2
-
3
- <div align="center">
4
-
5
- ![CollabDocChat Logo](https://img.shields.io/badge/CollabDocChat-v1.0.0-blue)
6
- ![License](https://img.shields.io/badge/license-MIT-green)
7
- ![Node](https://img.shields.io/badge/node-%3E%3D16.0.0-brightgreen)
8
- ![MongoDB](https://img.shields.io/badge/MongoDB-%3E%3D5.0-green)
9
-
10
- **开源的实时协作文档聊天平台**
11
-
12
- 集成任务管理 · 多人文档编辑 · 智能点名 · 即时通讯
13
-
14
- [快速开始](#快速开始) · [功能特性](#功能特性) · [技术栈](#技术栈) · [贡献指南](#贡献指南)
15
-
16
- </div>
17
-
18
- ---
19
-
20
- ## 📖 项目简介
21
-
22
- **CollabDocChat** 是一个轻量级的开源协作平台,专为学习和办公场景设计。它将即时通讯、多人实时文档编辑、任务管理和互动点名功能整合在一起,提供一站式的群体协作解决方案。
23
-
24
- ### 🎯 核心定位
25
-
26
- - **轻量级**:相比飞书、钉钉等重型工具,更加简洁易用
27
- - **开源免费**:完全开源,可自由部署和定制
28
- - **实时协作**:基于 WebSocket 的实时同步技术
29
- - **双端权限**:管理员和用户角色分离,权限清晰
30
-
31
- ---
32
-
33
- ## ✨ 功能特性
34
-
35
- ### 👨‍💼 管理员端
36
-
37
- - **群组管理**
38
- - 创建/管理群组
39
- - 添加/移除成员
40
- - 查看成员在线状态
41
-
42
- - **任务管理**
43
- - 发布/编辑/终止任务
44
- - 关联文档到任务
45
- - 查看任务完成进度
46
-
47
- - **文档管理**
48
- - 上传/共享文档
49
- - 设置文档权限(只读/可编辑)
50
- - 查看文档编辑日志
51
-
52
- - **随机点名**
53
- - 单次/批量随机点名
54
- - 查看点名历史记录
55
- - 实时响应提醒
56
-
57
- ### 👥 用户端
58
-
59
- - **任务接收**
60
- - 实时接收任务通知
61
- - 查看待完成/已完成任务
62
- - 更新任务状态
63
-
64
- - **文档协作**
65
- - 多人实时编辑文档
66
- - 自动同步内容
67
- - 查看版本历史
68
- - 显示其他用户编辑状态
69
-
70
- - **即时通讯**
71
- - 群组聊天
72
- - 实时消息推送
73
- - 点名响应
74
-
75
- - **个人中心**
76
- - 查看个人任务
77
- - 编辑记录
78
- - 群组列表
79
-
80
- ---
81
-
82
- ## 🛠 技术栈
83
-
84
- ### 后端
85
- - **Node.js** + **Express** - 服务器框架
86
- - **MongoDB** + **Mongoose** - 数据库
87
- - **WebSocket (ws)** - 实时通信
88
- - **JWT** - 身份认证
89
- - **Yjs** - CRDT 实时协作算法
90
-
91
- ### 前端
92
- - **原生 JavaScript** - 无框架依赖
93
- - **Vite** - 构建工具
94
- - **CSS3** - 现代化 UI 设计
95
- - **WebSocket API** - 实时通信
96
-
97
- ### 核心技术
98
- - **CRDT (Conflict-free Replicated Data Type)** - 无冲突文档同步
99
- - **WebSocket** - 双向实时通信
100
- - **JWT** - 无状态身份验证
101
-
102
- ---
103
-
104
- ## 🚀 快速开始
105
-
106
- ### 环境要求
107
-
108
- - Node.js >= 16.0.0
109
- - MongoDB >= 5.0
110
- - npm 或 yarn
111
-
112
- ### 安装步骤
113
-
114
- #### 方式一:通过 npm 安装(推荐)
115
-
116
- ```bash
117
- # 安装包
118
- npm install collabdocchat
119
-
120
- # 进入安装目录
121
- cd node_modules/collabdocchat
122
-
123
- # 启动应用(自动打开浏览器)
124
- npm start
125
- ```
126
-
127
- #### 方式二:从源码安装
128
-
129
- 1. **克隆项目**
130
-
131
- ```bash
132
- git clone https://github.com/shijinghao/collabdocchat.git
133
- cd collabdocchat
134
- ```
135
-
136
- 2. **安装依赖**
137
-
138
- ```bash
139
- npm install
140
- ```
141
-
142
- 3. **配置环境变量**
143
-
144
- 复制 `.env.example` 为 `.env` 并修改配置:
145
-
146
- ```bash
147
- cp .env.example .env
148
- ```
149
-
150
- 编辑 `.env` 文件:
151
-
152
- ```env
153
- PORT=3000
154
- MONGODB_URI=mongodb://localhost:27017/collabdocchat
155
- JWT_SECRET=your_super_secret_jwt_key_change_this
156
- CLIENT_URL=http://localhost:5173
157
- ```
158
-
159
- 4. **启动 MongoDB**
160
-
161
- ```bash
162
- # Windows
163
- mongod
164
-
165
- # macOS/Linux
166
- sudo systemctl start mongod
167
- ```
168
-
169
- 5. **启动项目**
170
-
171
- ```bash
172
- # 一键启动(推荐)- 自动启动服务器和客户端,并打开浏览器
173
- npm start
174
-
175
- # 开发模式(同时启动前后端,使用 nodemon 自动重启)
176
- npm run dev
177
-
178
- # 或分别启动
179
- npm run server # 后端服务器
180
- npm run client # 前端开发服务器
181
- ```
182
-
183
- 6. **访问应用**
184
-
185
- 运行 `npm start` 后,浏览器会自动打开并访问 `http://localhost:5173`
186
-
187
- 或手动访问:`http://localhost:5173`
188
-
189
- 7. **停止服务**
190
-
191
- ```bash
192
- # 停止所有 CollabDocChat 服务
193
- npm run stop
194
-
195
- # 或手动停止(Windows)
196
- taskkill /F /IM node.exe
197
-
198
- # 或手动停止(Linux/Mac)
199
- pkill -f "node.*server/index.js"
200
- pkill -f vite
201
- ```
202
-
203
- ---
204
-
205
- ## 📁 项目结构
206
-
207
- ```
208
- CollabDocChat/
209
- ├── server/ # 后端代码
210
- │ ├── models/ # 数据模型
211
- │ │ ├── User.js
212
- │ │ ├── Group.js
213
- │ │ ├── Document.js
214
- │ │ └── Task.js
215
- │ ├── routes/ # API 路由
216
- │ │ ├── auth.js
217
- │ │ ├── groups.js
218
- │ │ ├── documents.js
219
- │ │ └── tasks.js
220
- │ ├── middleware/ # 中间件
221
- │ │ └── auth.js
222
- │ ├── websocket/ # WebSocket 处理
223
- │ │ └── index.js
224
- │ └── index.js # 服务器入口
225
- ├── src/ # 前端代码
226
- │ ├── pages/ # 页面组件
227
- │ │ ├── login.js
228
- │ │ ├── admin-dashboard.js
229
- │ │ └── user-dashboard.js
230
- │ ├── services/ # 服务层
231
- │ │ ├── api.js
232
- │ │ ├── auth.js
233
- │ │ └── websocket.js
234
- │ ├── styles/ # 样式文件
235
- │ │ └── main.css
236
- │ └── main.js # 前端入口
237
- ├── package.json
238
- ├── vite.config.js
239
- ├── .env.example
240
- └── README.md
241
- ```
242
-
243
- ---
244
-
245
- ## 🔌 API 文档
246
-
247
- ### 认证接口
248
-
249
- #### 注册
250
- ```http
251
- POST /api/auth/register
252
- Content-Type: application/json
253
-
254
- {
255
- "username": "string",
256
- "email": "string",
257
- "password": "string",
258
- "role": "admin" | "user"
259
- }
260
- ```
261
-
262
- #### 登录
263
- ```http
264
- POST /api/auth/login
265
- Content-Type: application/json
266
-
267
- {
268
- "email": "string",
269
- "password": "string"
270
- }
271
- ```
272
-
273
- ### 群组接口
274
-
275
- #### 获取群组列表
276
- ```http
277
- GET /api/groups
278
- Authorization: Bearer {token}
279
- ```
280
-
281
- #### 创建群组(管理员)
282
- ```http
283
- POST /api/groups
284
- Authorization: Bearer {token}
285
- Content-Type: application/json
286
-
287
- {
288
- "name": "string",
289
- "description": "string",
290
- "members": ["userId1", "userId2"]
291
- }
292
- ```
293
-
294
- #### 随机点名(管理员)
295
- ```http
296
- POST /api/groups/:id/call
297
- Authorization: Bearer {token}
298
- Content-Type: application/json
299
-
300
- {
301
- "count": 1
302
- }
303
- ```
304
-
305
- ### 文档接口
306
-
307
- #### 获取群组文档
308
- ```http
309
- GET /api/documents/group/:groupId
310
- Authorization: Bearer {token}
311
- ```
312
-
313
- #### 创建文档
314
- ```http
315
- POST /api/documents
316
- Authorization: Bearer {token}
317
- Content-Type: application/json
318
-
319
- {
320
- "title": "string",
321
- "content": "string",
322
- "groupId": "string",
323
- "permission": "readonly" | "editable"
324
- }
325
- ```
326
-
327
- #### 更新文档
328
- ```http
329
- PATCH /api/documents/:id
330
- Authorization: Bearer {token}
331
- Content-Type: application/json
332
-
333
- {
334
- "content": "string"
335
- }
336
- ```
337
-
338
- ### 任务接口
339
-
340
- #### 获取我的任务
341
- ```http
342
- GET /api/tasks/my
343
- Authorization: Bearer {token}
344
- ```
345
-
346
- #### 创建任务(管理员)
347
- ```http
348
- POST /api/tasks
349
- Authorization: Bearer {token}
350
- Content-Type: application/json
351
-
352
- {
353
- "title": "string",
354
- "description": "string",
355
- "groupId": "string",
356
- "assignedTo": ["userId1"],
357
- "relatedDocument": "documentId",
358
- "deadline": "2024-12-31"
359
- }
360
- ```
361
-
362
- ---
363
-
364
- ## 🔄 WebSocket 事件
365
-
366
- ### 客户端发送
367
-
368
- ```javascript
369
- // 认证
370
- { type: 'auth', token: 'jwt_token' }
371
-
372
- // 加入群组
373
- { type: 'join_group', groupId: 'group_id' }
374
-
375
- // 发送聊天消息
376
- { type: 'chat_message', groupId: 'group_id', username: 'user', content: 'message' }
377
-
378
- // 同步文档
379
- { type: 'document_sync', documentId: 'doc_id', content: 'text', cursorPosition: 0 }
380
-
381
- // 响应点名
382
- { type: 'call_response', groupId: 'group_id', username: 'user' }
383
-
384
- // 输入状态
385
- { type: 'typing', documentId: 'doc_id', username: 'user', isTyping: true }
386
- ```
387
-
388
- ### 服务器推送
389
-
390
- ```javascript
391
- // 认证成功
392
- { type: 'auth_success', userId: 'user_id', role: 'admin' }
393
-
394
- // 聊天消息
395
- { type: 'chat_message', groupId: 'group_id', userId: 'user_id', username: 'user', content: 'message', timestamp: 'ISO8601' }
396
-
397
- // 文档更新
398
- { type: 'document_update', documentId: 'doc_id', content: 'text', userId: 'user_id', timestamp: 'ISO8601' }
399
-
400
- // 用户离线
401
- { type: 'user_offline', userId: 'user_id' }
402
- ```
403
-
404
- ---
405
-
406
- ## 🎨 界面预览
407
-
408
- ### 登录页面
409
- - 现代化渐变背景
410
- - 流畅的动画效果
411
- - 登录/注册切换
412
-
413
- ### 管理员仪表板
414
- - 群组管理面板
415
- - 任务发布界面
416
- - 文档权限控制
417
- - 随机点名功能
418
-
419
- ### 用户仪表板
420
- - 任务列表
421
- - 实时文档编辑器
422
- - 群组聊天
423
- - 在线状态显示
424
-
425
- ---
426
-
427
- ## 🤝 贡献指南
428
-
429
- 我们欢迎所有形式的贡献!
430
-
431
- ### 如何贡献
432
-
433
- 1. Fork 本项目
434
- 2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
435
- 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
436
- 4. 推送到分支 (`git push origin feature/AmazingFeature`)
437
- 5. 开启 Pull Request
438
-
439
- ### 代码规范
440
-
441
- - 使用 ES6+ 语法
442
- - 遵循 ESLint 规则
443
- - 添加必要的注释
444
- - 编写清晰的提交信息
445
-
446
- ---
447
-
448
- ## 📦 发布到 npm
449
-
450
- ### 准备发布
451
-
452
- 1. **更新版本号**
453
-
454
- ```bash
455
- npm version patch # 1.0.0 -> 1.0.1
456
- npm version minor # 1.0.0 -> 1.1.0
457
- npm version major # 1.0.0 -> 2.0.0
458
- ```
459
-
460
- 2. **登录 npm**
461
-
462
- ```bash
463
- npm login
464
- ```
465
-
466
- 3. **发布包**
467
-
468
- ```bash
469
- npm publish
470
- ```
471
-
472
- ### 使用 npm 包
473
-
474
- ```bash
475
- npm install collabdocchat
476
- ```
477
-
478
- ---
479
-
480
- ## 📄 开源协议
481
-
482
- 本项目采用 [MIT License](LICENSE) 开源协议。
483
-
484
- ---
485
-
486
- ## 🙏 致谢
487
-
488
- 感谢以下开源项目:
489
-
490
- - [Express](https://expressjs.com/) - Web 框架
491
- - [MongoDB](https://www.mongodb.com/) - 数据库
492
- - [Yjs](https://github.com/yjs/yjs) - CRDT 算法
493
- - [Vite](https://vitejs.dev/) - 构建工具
494
-
495
- ---
496
-
497
- ## 📞 联系方式
498
-
499
- - **项目主页**: [https://github.com/yourusername/collabdocchat](https://github.com/yourusername/collabdocchat)
500
- - **问题反馈**: [Issues](https://github.com/yourusername/collabdocchat/issues)
501
- - **邮箱**: your.email@example.com
502
-
503
- ---
504
-
505
- ## 🗺 路线图
506
-
507
- ### v1.1.0 (计划中)
508
- - [ ] 文件上传功能
509
- - [ ] 富文本编辑器
510
- - [ ] 消息通知系统
511
- - [ ] 移动端适配
512
-
513
- ### v1.2.0 (计划中)
514
- - [ ] 视频会议集成
515
- - [ ] 屏幕共享
516
- - [ ] 白板功能
517
- - [ ] 插件系统
518
-
519
- ### v2.0.0 (未来)
520
- - [ ] 微服务架构
521
- - [ ] Docker 部署
522
- - [ ] 多语言支持
523
- - [ ] AI 助手集成
524
-
525
- ---
526
-
527
- <div align="center">
528
-
529
- **⭐ 如果这个项目对你有帮助,请给我们一个 Star!⭐**
530
-
531
- Made with ❤️ by CollabDocChat Team
532
-
533
- </div>
534
-
535
-
@@ -0,0 +1,47 @@
1
+ @echo off
2
+ echo ========================================
3
+ echo CollabDocChat 一键安装并启动
4
+ echo ========================================
5
+ echo.
6
+
7
+ echo [1/3] 正在安装 CollabDocChat...
8
+ call npm install collabdocchat@latest --ignore-scripts
9
+ if %errorlevel% neq 0 (
10
+ echo 安装失败!
11
+ pause
12
+ exit /b 1
13
+ )
14
+
15
+ echo.
16
+ echo [2/3] 安装完成!正在启动应用...
17
+ cd node_modules\collabdocchat
18
+
19
+ echo.
20
+ echo [3/3] 启动服务器和客户端...
21
+ start /B node server/index.js
22
+ timeout /t 3 /nobreak >nul
23
+ start /B cmd /c "npm run client"
24
+
25
+ echo.
26
+ echo 等待服务器启动...
27
+ timeout /t 8 /nobreak
28
+
29
+ echo.
30
+ echo 正在打开浏览器...
31
+ start http://localhost:5173
32
+
33
+ echo.
34
+ echo ========================================
35
+ echo 启动完成!
36
+ echo ========================================
37
+ echo.
38
+ echo 浏览器已打开,访问: http://localhost:5173
39
+ echo.
40
+ echo 提示:
41
+ echo - 服务器运行在端口 3000
42
+ echo - 客户端运行在端口 5173
43
+ echo - 关闭此窗口不会停止服务
44
+ echo - 要停止服务,请关闭所有 node 进程
45
+ echo.
46
+ pause
47
+
@@ -0,0 +1,49 @@
1
+ #!/bin/bash
2
+
3
+ echo "========================================"
4
+ echo " CollabDocChat 一键安装并启动"
5
+ echo "========================================"
6
+ echo ""
7
+
8
+ echo "[1/3] 正在安装 CollabDocChat..."
9
+ npm install collabdocchat@latest --ignore-scripts
10
+ if [ $? -ne 0 ]; then
11
+ echo "安装失败!"
12
+ exit 1
13
+ fi
14
+
15
+ echo ""
16
+ echo "[2/3] 安装完成!正在启动应用..."
17
+ cd node_modules/collabdocchat
18
+
19
+ echo ""
20
+ echo "[3/3] 启动服务器和客户端..."
21
+ node server/index.js &
22
+ sleep 3
23
+ npm run client &
24
+
25
+ echo ""
26
+ echo "等待服务器启动..."
27
+ sleep 8
28
+
29
+ echo ""
30
+ echo "正在打开浏览器..."
31
+ if [[ "$OSTYPE" == "darwin"* ]]; then
32
+ open http://localhost:5173
33
+ elif [[ "$OSTYPE" == "linux-gnu"* ]]; then
34
+ xdg-open http://localhost:5173
35
+ fi
36
+
37
+ echo ""
38
+ echo "========================================"
39
+ echo " 启动完成!"
40
+ echo "========================================"
41
+ echo ""
42
+ echo "浏览器已打开,访问: http://localhost:5173"
43
+ echo ""
44
+ echo "提示:"
45
+ echo " - 服务器运行在端口 3000"
46
+ echo " - 客户端运行在端口 5173"
47
+ echo " - 按 Ctrl+C 停止服务"
48
+ echo ""
49
+
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "collabdocchat",
3
- "version": "1.1.1",
3
+ "version": "1.2.0",
4
4
  "description": "开源的实时协作文档聊天平台 - 集成任务管理、多人文档编辑、智能点名功能",
5
5
  "main": "./server/index.js",
6
6
  "type": "module",
@@ -13,7 +13,10 @@
13
13
  "package.json",
14
14
  "vite.config.js",
15
15
  "index.html",
16
- ".gitignore"
16
+ ".gitignore",
17
+ "install-and-start.bat",
18
+ "install-and-start.sh",
19
+ "QUICK_START.md"
17
20
  ],
18
21
  "keywords": [
19
22
  "collaboration",
@@ -47,6 +50,8 @@
47
50
  "postinstall": "node scripts/postinstall.js",
48
51
  "dev": "concurrently \"npm run server\" \"npm run client\" \"npm run open-browser\"",
49
52
  "start": "node scripts/start-app.js",
53
+ "quick-start": "node scripts/quick-start.js",
54
+ "stop": "node scripts/stop-app.js",
50
55
  "server": "nodemon server/index.js",
51
56
  "client": "vite",
52
57
  "open-browser": "node scripts/open-browser.js",
@@ -57,13 +62,12 @@
57
62
  },
58
63
  "dependencies": {
59
64
  "bcryptjs": "^2.4.3",
60
- "collabdocchat": "^1.0.0",
61
65
  "cors": "^2.8.5",
62
66
  "dotenv": "^16.3.1",
63
67
  "express": "^4.18.2",
64
68
  "jsonwebtoken": "^9.0.2",
65
69
  "mongoose": "^8.0.3",
66
- "quill": "^2.0.3",
70
+ "quill": "^1.3.7",
67
71
  "quill-cursors": "^4.0.2",
68
72
  "ws": "^8.14.2",
69
73
  "y-websocket": "^1.5.0",
@@ -73,6 +77,6 @@
73
77
  "concurrently": "^8.2.2",
74
78
  "nodemon": "^3.0.2",
75
79
  "open": "^11.0.0",
76
- "vite": "^7.3.1"
80
+ "vite": "^5.0.8"
77
81
  }
78
82
  }
@@ -0,0 +1,50 @@
1
+ import { spawn } from 'child_process';
2
+ import { platform } from 'os';
3
+ import { fileURLToPath } from 'url';
4
+ import { dirname, join } from 'path';
5
+
6
+ const __filename = fileURLToPath(import.meta.url);
7
+ const __dirname = dirname(__filename);
8
+ const rootDir = join(__dirname, '..');
9
+ const CLIENT_URL = 'http://localhost:5173';
10
+ const isWindows = platform() === 'win32';
11
+
12
+ // 打开浏览器
13
+ function openBrowser(url) {
14
+ const command = isWindows ? 'cmd' : (platform() === 'darwin' ? 'open' : 'xdg-open');
15
+ const args = isWindows ? ['/c', 'start', url] : [url];
16
+ const browser = spawn(command, args, { stdio: 'ignore', detached: true });
17
+ browser.unref();
18
+ }
19
+
20
+ console.log('\n📦 CollabDocChat 快速启动\n');
21
+ console.log('🚀 正在启动服务器和客户端...\n');
22
+
23
+ // 启动服务器
24
+ const server = spawn('node', ['server/index.js'], {
25
+ cwd: rootDir,
26
+ stdio: 'inherit',
27
+ detached: true,
28
+ windowsHide: true
29
+ });
30
+ server.unref();
31
+
32
+ // 启动客户端
33
+ const client = spawn(isWindows ? 'npm.cmd' : 'npm', ['run', 'client'], {
34
+ cwd: rootDir,
35
+ stdio: 'inherit',
36
+ detached: true,
37
+ windowsHide: true
38
+ });
39
+ client.unref();
40
+
41
+ // 8秒后打开浏览器
42
+ setTimeout(() => {
43
+ console.log(`\n🌐 正在打开浏览器: ${CLIENT_URL}`);
44
+ openBrowser(CLIENT_URL);
45
+ console.log('\n✅ 应用正在启动中,浏览器已打开!');
46
+ console.log(' 如果页面未加载,请稍等片刻后刷新页面。');
47
+ console.log('\n💡 提示:服务器和客户端正在后台运行');
48
+ console.log(' 要停止服务,运行: npm run stop');
49
+ }, 8000);
50
+