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