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 +0 -535
- package/install-and-start.bat +47 -0
- package/install-and-start.sh +49 -0
- package/package.json +9 -5
- package/scripts/quick-start.js +50 -0
package/README.md
CHANGED
|
@@ -1,535 +0,0 @@
|
|
|
1
|
-
# CollabDocChat
|
|
2
|
-
|
|
3
|
-
<div align="center">
|
|
4
|
-
|
|
5
|
-

|
|
6
|
-

|
|
7
|
-

|
|
8
|
-

|
|
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.
|
|
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": "^
|
|
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": "^
|
|
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
|
+
|