collabdocchat 2.0.5 → 2.0.7
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/package.json +1 -1
- package/scripts/fix-ports.js +71 -0
- package/src/components/knowledge-modal.js +14 -13
- package/src/components/optimized-poll-detail.js +19 -18
- package/src/main.js +3 -2
- package/src/pages/admin-dashboard.js +256 -255
- package/src/pages/login.js +9 -8
- package/src/pages/optimized-backup-view.js +2 -1
- package/src/pages/optimized-knowledge-view.js +2 -1
- package/src/pages/optimized-task-detail.js +38 -37
- package/src/pages/optimized-workflow-view.js +2 -1
- package/src/pages/simplified-workflows.js +62 -61
- package/src/pages/user-dashboard.js +82 -81
- package/src/services/api.js +5 -4
- package/src/services/auth.js +2 -1
- package/src/services/websocket.js +13 -12
- package/src/styles/collaboration-modern.js +10 -9
- package/src/utils/ai-assistant.js +76 -75
- package/src/utils/chat-enhancements.js +20 -19
- package/src/utils/collaboration-enhancer.js +86 -85
- package/src/utils/feature-integrator.js +80 -79
- package/src/utils/onboarding-guide.js +84 -83
- package/src/utils/performance.js +11 -10
- package/src/utils/permission-manager.js +41 -40
- package/src/utils/responsive-handler.js +24 -23
- package/src/utils/theme-manager.js +39 -38
- package/src/utils/ui-enhancements-loader.js +32 -31
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
2
|
* 新手引导系统
|
|
3
|
-
* 提供交互式的新手引导和帮�? */
|
|
3
|
+
* 提供交互式的新手引导和帮�? */
|
|
4
4
|
|
|
5
5
|
export class OnboardingGuide {
|
|
6
6
|
constructor() {
|
|
@@ -40,45 +40,45 @@ export class OnboardingGuide {
|
|
|
40
40
|
return [
|
|
41
41
|
{
|
|
42
42
|
target: '.sidebar',
|
|
43
|
-
title: '欢迎使用 CollabDocChat�?,
|
|
44
|
-
content: '这是侧边栏,您可以在这里访问所有主要功能�?,
|
|
43
|
+
title: '欢迎使用 CollabDocChat�?,
|
|
44
|
+
content: '这是侧边栏,您可以在这里访问所有主要功能�?,
|
|
45
45
|
position: 'right'
|
|
46
46
|
},
|
|
47
47
|
{
|
|
48
48
|
target: '.nav-item[data-view="groups"]',
|
|
49
49
|
title: '群组管理',
|
|
50
|
-
content: '点击这里可以创建和管理群组,邀请成员加入�?,
|
|
50
|
+
content: '点击这里可以创建和管理群组,邀请成员加入�?,
|
|
51
51
|
position: 'right'
|
|
52
52
|
},
|
|
53
53
|
{
|
|
54
54
|
target: '.nav-item[data-view="chat"]',
|
|
55
55
|
title: '群聊功能',
|
|
56
|
-
content: '在这里可以与团队成员实时聊天,支持@提及、消息撤回等功能�?,
|
|
56
|
+
content: '在这里可以与团队成员实时聊天,支持@提及、消息撤回等功能�?,
|
|
57
57
|
position: 'right'
|
|
58
58
|
},
|
|
59
59
|
{
|
|
60
60
|
target: '.nav-item[data-view="documents"]',
|
|
61
61
|
title: '文档协作',
|
|
62
|
-
content: '创建和编辑文档,支持多人实时协作编辑�?,
|
|
62
|
+
content: '创建和编辑文档,支持多人实时协作编辑�?,
|
|
63
63
|
position: 'right'
|
|
64
64
|
},
|
|
65
65
|
{
|
|
66
66
|
target: '.nav-item[data-view="tasks"]',
|
|
67
67
|
title: '任务管理',
|
|
68
|
-
content: '创建任务、分配给团队成员,跟踪任务进度�?,
|
|
68
|
+
content: '创建任务、分配给团队成员,跟踪任务进度�?,
|
|
69
69
|
position: 'right'
|
|
70
70
|
},
|
|
71
71
|
{
|
|
72
72
|
target: '.user-info',
|
|
73
73
|
title: '个人信息',
|
|
74
|
-
content: '这里显示您的个人信息和在线状态�?,
|
|
74
|
+
content: '这里显示您的个人信息和在线状态�?,
|
|
75
75
|
position: 'right'
|
|
76
76
|
}
|
|
77
77
|
];
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
/**
|
|
81
|
-
* 开始引�? */
|
|
81
|
+
* 开始引�? */
|
|
82
82
|
start() {
|
|
83
83
|
if (this.hasCompleted) {
|
|
84
84
|
const restart = confirm('您已经完成过新手引导,是否重新开始?');
|
|
@@ -104,9 +104,9 @@ export class OnboardingGuide {
|
|
|
104
104
|
const step = steps[stepIndex];
|
|
105
105
|
this.currentStep = stepIndex;
|
|
106
106
|
|
|
107
|
-
// 移除之前的引导元�? this.removeGuideElements();
|
|
107
|
+
// 移除之前的引导元�? this.removeGuideElements();
|
|
108
108
|
|
|
109
|
-
// 创建遮罩�? const overlay = document.createElement('div');
|
|
109
|
+
// 创建遮罩�? const overlay = document.createElement('div');
|
|
110
110
|
overlay.className = 'onboarding-overlay';
|
|
111
111
|
overlay.id = 'onboardingOverlay';
|
|
112
112
|
document.body.appendChild(overlay);
|
|
@@ -126,7 +126,7 @@ export class OnboardingGuide {
|
|
|
126
126
|
|
|
127
127
|
document.body.appendChild(spotlight);
|
|
128
128
|
|
|
129
|
-
// 创建提示�? const tooltip = document.createElement('div');
|
|
129
|
+
// 创建提示�? const tooltip = document.createElement('div');
|
|
130
130
|
tooltip.className = 'onboarding-tooltip';
|
|
131
131
|
tooltip.id = 'onboardingTooltip';
|
|
132
132
|
|
|
@@ -143,15 +143,15 @@ export class OnboardingGuide {
|
|
|
143
143
|
${stepIndex + 1} / ${steps.length}
|
|
144
144
|
</div>
|
|
145
145
|
<div class="tooltip-actions">
|
|
146
|
-
${stepIndex > 0 ? '<button class="btn-secondary" id="prevStep">上一�?/button>' : ''}
|
|
146
|
+
${stepIndex > 0 ? '<button class="btn-secondary" id="prevStep">上一�?/button>' : ''}
|
|
147
147
|
${stepIndex < steps.length - 1 ?
|
|
148
|
-
'<button class="btn-primary" id="nextStep">下一�?/button>' :
|
|
148
|
+
'<button class="btn-primary" id="nextStep">下一�?/button>' :
|
|
149
149
|
'<button class="btn-primary" id="finishOnboarding">完成</button>'}
|
|
150
150
|
</div>
|
|
151
151
|
</div>
|
|
152
152
|
`;
|
|
153
153
|
|
|
154
|
-
// 定位提示�? this.positionTooltip(tooltip, rect, step.position);
|
|
154
|
+
// 定位提示�? this.positionTooltip(tooltip, rect, step.position);
|
|
155
155
|
document.body.appendChild(tooltip);
|
|
156
156
|
|
|
157
157
|
// 添加事件监听
|
|
@@ -160,7 +160,7 @@ export class OnboardingGuide {
|
|
|
160
160
|
}
|
|
161
161
|
|
|
162
162
|
/**
|
|
163
|
-
* 定位提示�? */
|
|
163
|
+
* 定位提示�? */
|
|
164
164
|
positionTooltip(tooltip, targetRect, position) {
|
|
165
165
|
document.body.appendChild(tooltip);
|
|
166
166
|
const tooltipRect = tooltip.getBoundingClientRect();
|
|
@@ -189,7 +189,7 @@ export class OnboardingGuide {
|
|
|
189
189
|
left = targetRect.right + 20;
|
|
190
190
|
}
|
|
191
191
|
|
|
192
|
-
// 确保提示框在视口�? if (left < 10) left = 10;
|
|
192
|
+
// 确保提示框在视口�? if (left < 10) left = 10;
|
|
193
193
|
if (left + tooltipRect.width > window.innerWidth - 10) {
|
|
194
194
|
left = window.innerWidth - tooltipRect.width - 10;
|
|
195
195
|
}
|
|
@@ -244,7 +244,7 @@ export class OnboardingGuide {
|
|
|
244
244
|
* 跳过引导
|
|
245
245
|
*/
|
|
246
246
|
skip() {
|
|
247
|
-
if (confirm('确定要跳过新手引导吗?您可以稍后在帮助菜单中重新开始�?)) {
|
|
247
|
+
if (confirm('确定要跳过新手引导吗?您可以稍后在帮助菜单中重新开始�?)) {
|
|
248
248
|
this.removeGuideElements();
|
|
249
249
|
this.isActive = false;
|
|
250
250
|
}
|
|
@@ -258,11 +258,11 @@ export class OnboardingGuide {
|
|
|
258
258
|
this.markCompleted();
|
|
259
259
|
this.isActive = false;
|
|
260
260
|
|
|
261
|
-
alert('恭喜!您已完成新手引导。现在可以开始使�?CollabDocChat 了!');
|
|
261
|
+
alert('恭喜!您已完成新手引导。现在可以开始使�?CollabDocChat 了!');
|
|
262
262
|
}
|
|
263
263
|
|
|
264
264
|
/**
|
|
265
|
-
* 显示帮助中心(优化后的卡片式布局�? */
|
|
265
|
+
* 显示帮助中心(优化后的卡片式布局�? */
|
|
266
266
|
showHelpCenter(container) {
|
|
267
267
|
container.innerHTML = `
|
|
268
268
|
<div class="view-header">
|
|
@@ -272,25 +272,25 @@ export class OnboardingGuide {
|
|
|
272
272
|
<div class="help-cards-grid">
|
|
273
273
|
<div class="help-card">
|
|
274
274
|
<div class="help-icon">🚀</div>
|
|
275
|
-
<h3>快速开�?/h3>
|
|
275
|
+
<h3>快速开�?/h3>
|
|
276
276
|
<ul>
|
|
277
277
|
<li><a href="#" data-action="start-guide">新手引导</a></li>
|
|
278
|
-
<li><a href="#" data-action="show-shortcuts">键盘快捷�?/a></li>
|
|
279
|
-
<li><a href="#" data-action="show-tips">使用技�?/a></li>
|
|
278
|
+
<li><a href="#" data-action="show-shortcuts">键盘快捷�?/a></li>
|
|
279
|
+
<li><a href="#" data-action="show-tips">使用技�?/a></li>
|
|
280
280
|
</ul>
|
|
281
|
-
<button class="btn-help-detail" data-topic="quickstart">查看详情 �?/button>
|
|
281
|
+
<button class="btn-help-detail" data-topic="quickstart">查看详情 �?/button>
|
|
282
282
|
</div>
|
|
283
283
|
|
|
284
284
|
<div class="help-card">
|
|
285
285
|
<div class="help-icon">💬</div>
|
|
286
286
|
<h3>聊天功能</h3>
|
|
287
287
|
<ul>
|
|
288
|
-
<li>如何发送消�?/li>
|
|
288
|
+
<li>如何发送消�?/li>
|
|
289
289
|
<li>如何@提及用户</li>
|
|
290
290
|
<li>如何撤回消息</li>
|
|
291
|
-
<li>如何查看已读状�?/li>
|
|
291
|
+
<li>如何查看已读状�?/li>
|
|
292
292
|
</ul>
|
|
293
|
-
<button class="btn-help-detail" data-topic="chat">查看详情 �?/button>
|
|
293
|
+
<button class="btn-help-detail" data-topic="chat">查看详情 �?/button>
|
|
294
294
|
</div>
|
|
295
295
|
|
|
296
296
|
<div class="help-card">
|
|
@@ -298,11 +298,11 @@ export class OnboardingGuide {
|
|
|
298
298
|
<h3>文档协作</h3>
|
|
299
299
|
<ul>
|
|
300
300
|
<li>如何创建文档</li>
|
|
301
|
-
<li>如何邀请协�?/li>
|
|
301
|
+
<li>如何邀请协�?/li>
|
|
302
302
|
<li>如何查看编辑历史</li>
|
|
303
303
|
<li>如何导出文档</li>
|
|
304
304
|
</ul>
|
|
305
|
-
<button class="btn-help-detail" data-topic="documents">查看详情 �?/button>
|
|
305
|
+
<button class="btn-help-detail" data-topic="documents">查看详情 �?/button>
|
|
306
306
|
</div>
|
|
307
307
|
|
|
308
308
|
<div class="help-card">
|
|
@@ -314,7 +314,7 @@ export class OnboardingGuide {
|
|
|
314
314
|
<li>如何跟踪进度</li>
|
|
315
315
|
<li>如何设置提醒</li>
|
|
316
316
|
</ul>
|
|
317
|
-
<button class="btn-help-detail" data-topic="tasks">查看详情 �?/button>
|
|
317
|
+
<button class="btn-help-detail" data-topic="tasks">查看详情 �?/button>
|
|
318
318
|
</div>
|
|
319
319
|
|
|
320
320
|
<div class="help-card">
|
|
@@ -326,24 +326,24 @@ export class OnboardingGuide {
|
|
|
326
326
|
<li>如何设置权限</li>
|
|
327
327
|
<li>如何导出数据</li>
|
|
328
328
|
</ul>
|
|
329
|
-
<button class="btn-help-detail" data-topic="settings">查看详情 �?/button>
|
|
329
|
+
<button class="btn-help-detail" data-topic="settings">查看详情 �?/button>
|
|
330
330
|
</div>
|
|
331
331
|
|
|
332
332
|
<div class="help-card">
|
|
333
|
-
<div class="help-icon">�?/div>
|
|
333
|
+
<div class="help-icon">�?/div>
|
|
334
334
|
<h3>常见问题</h3>
|
|
335
335
|
<ul>
|
|
336
336
|
<li>忘记密码怎么办?</li>
|
|
337
|
-
<li>如何邀请新成员�?/li>
|
|
338
|
-
<li>如何删除群组�?/li>
|
|
339
|
-
<li>如何联系支持�?/li>
|
|
337
|
+
<li>如何邀请新成员�?/li>
|
|
338
|
+
<li>如何删除群组�?/li>
|
|
339
|
+
<li>如何联系支持�?/li>
|
|
340
340
|
</ul>
|
|
341
|
-
<button class="btn-help-detail" data-topic="faq">查看详情 �?/button>
|
|
341
|
+
<button class="btn-help-detail" data-topic="faq">查看详情 �?/button>
|
|
342
342
|
</div>
|
|
343
343
|
</div>
|
|
344
344
|
|
|
345
345
|
<div class="help-footer-actions">
|
|
346
|
-
<h3>还有其他问题�?/h3>
|
|
346
|
+
<h3>还有其他问题�?/h3>
|
|
347
347
|
<div class="help-action-buttons">
|
|
348
348
|
<button class="btn-primary" id="contactSupport">
|
|
349
349
|
<span>📧</span> 联系支持
|
|
@@ -378,7 +378,7 @@ export class OnboardingGuide {
|
|
|
378
378
|
});
|
|
379
379
|
|
|
380
380
|
container.querySelector('#contactSupport')?.addEventListener('click', () => {
|
|
381
|
-
alert('请发送邮件至 support@collabdocchat.com 或在 GitHub 提交 Issue�?);
|
|
381
|
+
alert('请发送邮件至 support@collabdocchat.com 或在 GitHub 提交 Issue�?);
|
|
382
382
|
});
|
|
383
383
|
|
|
384
384
|
container.querySelector('#videoTutorials')?.addEventListener('click', () => {
|
|
@@ -532,99 +532,99 @@ export class OnboardingGuide {
|
|
|
532
532
|
showHelpDetail(topic, container) {
|
|
533
533
|
const details = {
|
|
534
534
|
quickstart: {
|
|
535
|
-
title: '🚀 快速开�?,
|
|
535
|
+
title: '🚀 快速开�?,
|
|
536
536
|
content: `
|
|
537
|
-
<h4>欢迎使用 CollabDocChat�?/h4>
|
|
538
|
-
<p>这是一个功能强大的团队协作平台,支持实时聊天、文档协作、任务管理等功能�?/p>
|
|
537
|
+
<h4>欢迎使用 CollabDocChat�?/h4>
|
|
538
|
+
<p>这是一个功能强大的团队协作平台,支持实时聊天、文档协作、任务管理等功能�?/p>
|
|
539
539
|
|
|
540
540
|
<h4>第一步:创建群组</h4>
|
|
541
|
-
<p>点击左侧菜单�?群组管理",创建您的第一个群组并邀请成员�?/p>
|
|
541
|
+
<p>点击左侧菜单�?群组管理",创建您的第一个群组并邀请成员�?/p>
|
|
542
542
|
|
|
543
|
-
<h4>第二步:开始聊�?/h4>
|
|
544
|
-
<p>在群组中发送消息,使用 @ 符号提及成员,支持文件上传和表情符号�?/p>
|
|
543
|
+
<h4>第二步:开始聊�?/h4>
|
|
544
|
+
<p>在群组中发送消息,使用 @ 符号提及成员,支持文件上传和表情符号�?/p>
|
|
545
545
|
|
|
546
546
|
<h4>第三步:创建文档</h4>
|
|
547
|
-
<p>点击"文档管理"创建协作文档,支持多人实时编辑�?/p>
|
|
547
|
+
<p>点击"文档管理"创建协作文档,支持多人实时编辑�?/p>
|
|
548
548
|
`
|
|
549
549
|
},
|
|
550
550
|
chat: {
|
|
551
551
|
title: '💬 聊天功能详解',
|
|
552
552
|
content: `
|
|
553
|
-
<h4>发送消�?/h4>
|
|
554
|
-
<p>在输入框中输入消息,�?Enter 或点击发送按钮即可发送�?/p>
|
|
553
|
+
<h4>发送消�?/h4>
|
|
554
|
+
<p>在输入框中输入消息,�?Enter 或点击发送按钮即可发送�?/p>
|
|
555
555
|
|
|
556
556
|
<h4>@提及用户</h4>
|
|
557
|
-
<p>输入 @ 符号会弹出成员列表,选择要提及的成员即可�?/p>
|
|
557
|
+
<p>输入 @ 符号会弹出成员列表,选择要提及的成员即可�?/p>
|
|
558
558
|
|
|
559
559
|
<h4>撤回消息</h4>
|
|
560
|
-
<p>鼠标悬停在消息上,点�?撤回"按钮可以撤回消息�?分钟内)�?/p>
|
|
560
|
+
<p>鼠标悬停在消息上,点�?撤回"按钮可以撤回消息�?分钟内)�?/p>
|
|
561
561
|
|
|
562
|
-
<h4>查看已读状�?/h4>
|
|
563
|
-
<p>消息右下角会显示已读/未读状态,点击可查看详细信息�?/p>
|
|
562
|
+
<h4>查看已读状�?/h4>
|
|
563
|
+
<p>消息右下角会显示已读/未读状态,点击可查看详细信息�?/p>
|
|
564
564
|
`
|
|
565
565
|
},
|
|
566
566
|
documents: {
|
|
567
567
|
title: '📄 文档协作指南',
|
|
568
568
|
content: `
|
|
569
569
|
<h4>创建文档</h4>
|
|
570
|
-
<p>点击"文档管理" �?"创建文档",输入标题和内容即可�?/p>
|
|
570
|
+
<p>点击"文档管理" �?"创建文档",输入标题和内容即可�?/p>
|
|
571
571
|
|
|
572
|
-
<h4>邀请协�?/h4>
|
|
573
|
-
<p>在文档详情页点击"邀请协�?,选择要邀请的成员�?/p>
|
|
572
|
+
<h4>邀请协�?/h4>
|
|
573
|
+
<p>在文档详情页点击"邀请协�?,选择要邀请的成员�?/p>
|
|
574
574
|
|
|
575
575
|
<h4>实时编辑</h4>
|
|
576
|
-
<p>多人可以同时编辑文档,所有更改会实时同步�?/p>
|
|
576
|
+
<p>多人可以同时编辑文档,所有更改会实时同步�?/p>
|
|
577
577
|
|
|
578
578
|
<h4>查看历史</h4>
|
|
579
|
-
<p>点击"编辑历史"可以查看所有修改记录,支持版本回退�?/p>
|
|
579
|
+
<p>点击"编辑历史"可以查看所有修改记录,支持版本回退�?/p>
|
|
580
580
|
`
|
|
581
581
|
},
|
|
582
582
|
tasks: {
|
|
583
583
|
title: '📋 任务管理教程',
|
|
584
584
|
content: `
|
|
585
585
|
<h4>创建任务</h4>
|
|
586
|
-
<p>点击"任务管理" �?"创建任务",填写任务信息�?/p>
|
|
586
|
+
<p>点击"任务管理" �?"创建任务",填写任务信息�?/p>
|
|
587
587
|
|
|
588
588
|
<h4>分配任务</h4>
|
|
589
|
-
<p>在任务详情中选择负责人,可以分配给多个成员�?/p>
|
|
589
|
+
<p>在任务详情中选择负责人,可以分配给多个成员�?/p>
|
|
590
590
|
|
|
591
591
|
<h4>跟踪进度</h4>
|
|
592
|
-
<p>任务状态包括:待处理、进行中、已完成、已终止�?/p>
|
|
592
|
+
<p>任务状态包括:待处理、进行中、已完成、已终止�?/p>
|
|
593
593
|
|
|
594
594
|
<h4>设置提醒</h4>
|
|
595
|
-
<p>可以设置任务截止时间,系统会自动发送提醒�?/p>
|
|
595
|
+
<p>可以设置任务截止时间,系统会自动发送提醒�?/p>
|
|
596
596
|
`
|
|
597
597
|
},
|
|
598
598
|
settings: {
|
|
599
599
|
title: '⚙️ 设置指南',
|
|
600
600
|
content: `
|
|
601
601
|
<h4>更改主题</h4>
|
|
602
|
-
<p>点击"设置" �?"主题设置",选择您喜欢的主题风格�?/p>
|
|
602
|
+
<p>点击"设置" �?"主题设置",选择您喜欢的主题风格�?/p>
|
|
603
603
|
|
|
604
604
|
<h4>管理通知</h4>
|
|
605
|
-
<p>�?通知设置"中可以配置桌面通知、声音提示等�?/p>
|
|
605
|
+
<p>�?通知设置"中可以配置桌面通知、声音提示等�?/p>
|
|
606
606
|
|
|
607
607
|
<h4>设置权限</h4>
|
|
608
|
-
<p>管理员可以在"权限管理"中设置用户权限�?/p>
|
|
608
|
+
<p>管理员可以在"权限管理"中设置用户权限�?/p>
|
|
609
609
|
|
|
610
610
|
<h4>导出数据</h4>
|
|
611
|
-
<p>�?数据管理"中可以导出您的聊天记录和文档�?/p>
|
|
611
|
+
<p>�?数据管理"中可以导出您的聊天记录和文档�?/p>
|
|
612
612
|
`
|
|
613
613
|
},
|
|
614
614
|
faq: {
|
|
615
|
-
title: '�?常见问题解答',
|
|
615
|
+
title: '�?常见问题解答',
|
|
616
616
|
content: `
|
|
617
617
|
<h4>忘记密码怎么办?</h4>
|
|
618
|
-
<p>点击登录页面�?忘记密码",输入邮箱即可重置密码�?/p>
|
|
618
|
+
<p>点击登录页面�?忘记密码",输入邮箱即可重置密码�?/p>
|
|
619
619
|
|
|
620
|
-
<h4>如何邀请新成员�?/h4>
|
|
621
|
-
<p>在群组管理页面点�?管理成员" �?"添加成员"�?/p>
|
|
620
|
+
<h4>如何邀请新成员�?/h4>
|
|
621
|
+
<p>在群组管理页面点�?管理成员" �?"添加成员"�?/p>
|
|
622
622
|
|
|
623
|
-
<h4>如何删除群组�?/h4>
|
|
624
|
-
<p>只有群组创建者可以删除群组,在群组设置中操作�?/p>
|
|
623
|
+
<h4>如何删除群组�?/h4>
|
|
624
|
+
<p>只有群组创建者可以删除群组,在群组设置中操作�?/p>
|
|
625
625
|
|
|
626
|
-
<h4>如何联系支持�?/h4>
|
|
627
|
-
<p>发送邮件至 support@collabdocchat.com 或在 GitHub 提交 Issue�?/p>
|
|
626
|
+
<h4>如何联系支持�?/h4>
|
|
627
|
+
<p>发送邮件至 support@collabdocchat.com 或在 GitHub 提交 Issue�?/p>
|
|
628
628
|
`
|
|
629
629
|
}
|
|
630
630
|
};
|
|
@@ -666,14 +666,14 @@ export class OnboardingGuide {
|
|
|
666
666
|
}
|
|
667
667
|
|
|
668
668
|
/**
|
|
669
|
-
* 显示快捷�? */
|
|
669
|
+
* 显示快捷�? */
|
|
670
670
|
showShortcuts() {
|
|
671
671
|
const shortcuts = [
|
|
672
672
|
{ key: 'Ctrl + S', action: '保存文档' },
|
|
673
|
-
{ key: 'Ctrl + Enter', action: '发送消�? },
|
|
673
|
+
{ key: 'Ctrl + Enter', action: '发送消�? },
|
|
674
674
|
{ key: 'Ctrl + K', action: '搜索' },
|
|
675
|
-
{ key: 'Ctrl + /', action: '显示快捷�? },
|
|
676
|
-
{ key: 'Esc', action: '关闭对话�? },
|
|
675
|
+
{ key: 'Ctrl + /', action: '显示快捷�? },
|
|
676
|
+
{ key: 'Esc', action: '关闭对话�? },
|
|
677
677
|
{ key: '@', action: '提及用户' }
|
|
678
678
|
];
|
|
679
679
|
|
|
@@ -681,7 +681,7 @@ export class OnboardingGuide {
|
|
|
681
681
|
modal.className = 'modal';
|
|
682
682
|
modal.innerHTML = `
|
|
683
683
|
<div class="modal-content">
|
|
684
|
-
<h3>⌨️ 键盘快捷�?/h3>
|
|
684
|
+
<h3>⌨️ 键盘快捷�?/h3>
|
|
685
685
|
<table class="shortcuts-table">
|
|
686
686
|
${shortcuts.map(s => `
|
|
687
687
|
<tr>
|
|
@@ -702,13 +702,13 @@ export class OnboardingGuide {
|
|
|
702
702
|
}
|
|
703
703
|
|
|
704
704
|
/**
|
|
705
|
-
* 显示使用技�? */
|
|
705
|
+
* 显示使用技�? */
|
|
706
706
|
showTips() {
|
|
707
707
|
const tips = [
|
|
708
|
-
'💡 使用 @ 符号可以快速提及团队成�?,
|
|
709
|
-
'💡 双击消息可以快速回�?,
|
|
710
|
-
'💡 拖拽文件到聊天框可以快速上�?,
|
|
711
|
-
'💡 使用 Ctrl+Enter 可以快速发送消�?,
|
|
708
|
+
'💡 使用 @ 符号可以快速提及团队成�?,
|
|
709
|
+
'💡 双击消息可以快速回�?,
|
|
710
|
+
'💡 拖拽文件到聊天框可以快速上�?,
|
|
711
|
+
'💡 使用 Ctrl+Enter 可以快速发送消�?,
|
|
712
712
|
'💡 点击用户头像可以查看详细信息',
|
|
713
713
|
'💡 长按消息可以显示更多操作'
|
|
714
714
|
];
|
|
@@ -721,3 +721,4 @@ export class OnboardingGuide {
|
|
|
721
721
|
export const onboardingGuide = new OnboardingGuide();
|
|
722
722
|
|
|
723
723
|
|
|
724
|
+
|
package/src/utils/performance.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
2
|
* 虚拟滚动实现
|
|
3
3
|
* 用于优化长列表渲染性能
|
|
4
4
|
*/
|
|
@@ -59,7 +59,7 @@ export class VirtualScroller {
|
|
|
59
59
|
// 清空内容
|
|
60
60
|
this.content.innerHTML = '';
|
|
61
61
|
|
|
62
|
-
// 渲染可见�?
|
|
62
|
+
// 渲染可见�?
|
|
63
63
|
for (let i = this.visibleStart; i < this.visibleEnd; i++) {
|
|
64
64
|
const item = this.items[i];
|
|
65
65
|
const element = this.renderItem(item, i);
|
|
@@ -83,7 +83,7 @@ export class VirtualScroller {
|
|
|
83
83
|
}
|
|
84
84
|
|
|
85
85
|
/**
|
|
86
|
-
* 图片懒加�?
|
|
86
|
+
* 图片懒加�?
|
|
87
87
|
*/
|
|
88
88
|
export class LazyLoader {
|
|
89
89
|
constructor(options = {}) {
|
|
@@ -115,7 +115,7 @@ export class LazyLoader {
|
|
|
115
115
|
// 添加加载中类
|
|
116
116
|
element.classList.add(this.loadingClass);
|
|
117
117
|
|
|
118
|
-
// 开始观�?
|
|
118
|
+
// 开始观�?
|
|
119
119
|
this.observer.observe(element);
|
|
120
120
|
}
|
|
121
121
|
|
|
@@ -199,7 +199,7 @@ export function throttle(func, limit = 300) {
|
|
|
199
199
|
}
|
|
200
200
|
|
|
201
201
|
/**
|
|
202
|
-
* 请求动画帧节�?
|
|
202
|
+
* 请求动画帧节�?
|
|
203
203
|
*/
|
|
204
204
|
export function rafThrottle(func) {
|
|
205
205
|
let rafId = null;
|
|
@@ -214,7 +214,7 @@ export function rafThrottle(func) {
|
|
|
214
214
|
}
|
|
215
215
|
|
|
216
216
|
/**
|
|
217
|
-
* 代码分割 - 动态导�?
|
|
217
|
+
* 代码分割 - 动态导�?
|
|
218
218
|
*/
|
|
219
219
|
export async function loadModule(modulePath) {
|
|
220
220
|
try {
|
|
@@ -227,7 +227,7 @@ export async function loadModule(modulePath) {
|
|
|
227
227
|
}
|
|
228
228
|
|
|
229
229
|
/**
|
|
230
|
-
* 资源预加�?
|
|
230
|
+
* 资源预加�?
|
|
231
231
|
*/
|
|
232
232
|
export function preloadResource(url, type = 'fetch') {
|
|
233
233
|
const link = document.createElement('link');
|
|
@@ -302,7 +302,7 @@ export class PerformanceMonitor {
|
|
|
302
302
|
firstPaint: paint.find(p => p.name === 'first-paint')?.startTime || 0,
|
|
303
303
|
// 首次内容绘制
|
|
304
304
|
firstContentfulPaint: paint.find(p => p.name === 'first-contentful-paint')?.startTime || 0,
|
|
305
|
-
// 自定义测�?
|
|
305
|
+
// 自定义测�?
|
|
306
306
|
customMeasures: this.measures
|
|
307
307
|
};
|
|
308
308
|
}
|
|
@@ -321,7 +321,7 @@ export class PerformanceMonitor {
|
|
|
321
321
|
}
|
|
322
322
|
|
|
323
323
|
/**
|
|
324
|
-
* 内存优化 - 对象�?
|
|
324
|
+
* 内存优化 - 对象�?
|
|
325
325
|
*/
|
|
326
326
|
export class ObjectPool {
|
|
327
327
|
constructor(factory, reset, initialSize = 10) {
|
|
@@ -329,7 +329,7 @@ export class ObjectPool {
|
|
|
329
329
|
this.reset = reset;
|
|
330
330
|
this.pool = [];
|
|
331
331
|
|
|
332
|
-
// 预创建对�?
|
|
332
|
+
// 预创建对�?
|
|
333
333
|
for (let i = 0; i < initialSize; i++) {
|
|
334
334
|
this.pool.push(this.factory());
|
|
335
335
|
}
|
|
@@ -392,3 +392,4 @@ export class BatchUpdater {
|
|
|
392
392
|
}
|
|
393
393
|
|
|
394
394
|
|
|
395
|
+
|