collabdocchat 2.0.4 → 2.0.6

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.
@@ -1,6 +1,5 @@
1
- /**
2
- * 功能集成器
3
- * 将所有增强功能集成到仪表板中
1
+ /**
2
+ * 功能集成�? * 将所有增强功能集成到仪表板中
4
3
  */
5
4
 
6
5
  import { ChatEnhancements, OnlineStatusManager, MessageNotificationManager } from './chat-enhancements.js';
@@ -16,18 +15,15 @@ export class FeatureIntegrator {
16
15
  this.wsService = wsService;
17
16
  this.user = user;
18
17
 
19
- // 初始化各个功能模块
20
- this.chatEnhancements = new ChatEnhancements(apiService, wsService, user.id || user._id);
18
+ // 初始化各个功能模�? this.chatEnhancements = new ChatEnhancements(apiService, wsService, user.id || user._id);
21
19
  this.onlineStatus = new OnlineStatusManager(wsService);
22
20
  this.notifications = new MessageNotificationManager();
23
21
  this.aiAssistant = new AIAssistant(apiService);
24
22
  this.collaboration = new CollaborationEnhancer(apiService, wsService);
25
23
 
26
- // 初始化主题
27
- themeManager.init();
24
+ // 初始化主�? themeManager.init();
28
25
 
29
- // 设置在线状态监听
30
- this.onlineStatus.setupListeners();
26
+ // 设置在线状态监�? this.onlineStatus.setupListeners();
31
27
  }
32
28
 
33
29
  /**
@@ -40,7 +36,7 @@ export class FeatureIntegrator {
40
36
  <span class="icon">⚙️</span> 设置
41
37
  </button>
42
38
  <button class="nav-item" data-view="help">
43
- <span class="icon">❓</span> 帮助
39
+ <span class="icon">�?/span> 帮助
44
40
  </button>
45
41
  </div>
46
42
  `;
@@ -49,8 +45,7 @@ export class FeatureIntegrator {
49
45
  }
50
46
 
51
47
  /**
52
- * 渲染设置页面(优化后的卡片式布局)
53
- */
48
+ * 渲染设置页面(优化后的卡片式布局�? */
54
49
  renderSettingsView(container) {
55
50
  container.innerHTML = `
56
51
  <div class="view-header">
@@ -61,51 +56,51 @@ export class FeatureIntegrator {
61
56
  <div class="setting-card" data-setting="theme">
62
57
  <div class="setting-icon">🎨</div>
63
58
  <h3>主题设置</h3>
64
- <p>选择主题风格和颜色方案</p>
65
- <button class="btn-card-action">进入设置 →</button>
59
+ <p>选择主题风格和颜色方�?/p>
60
+ <button class="btn-card-action">进入设置 �?/button>
66
61
  </div>
67
62
 
68
63
  <div class="setting-card" data-setting="notifications">
69
64
  <div class="setting-icon">🔔</div>
70
65
  <h3>通知设置</h3>
71
- <p>管理通知偏好和提醒方式</p>
72
- <button class="btn-card-action">进入设置 →</button>
66
+ <p>管理通知偏好和提醒方�?/p>
67
+ <button class="btn-card-action">进入设置 �?/button>
73
68
  </div>
74
69
 
75
70
  <div class="setting-card" data-setting="ai">
76
71
  <div class="setting-icon">🤖</div>
77
72
  <h3>AI 助手</h3>
78
- <p>配置 AI 功能和智能建议</p>
79
- <button class="btn-card-action">进入设置 →</button>
73
+ <p>配置 AI 功能和智能建�?/p>
74
+ <button class="btn-card-action">进入设置 �?/button>
80
75
  </div>
81
76
 
82
77
  ${this.user.role === 'admin' ? `
83
78
  <div class="setting-card" data-setting="permissions">
84
79
  <div class="setting-icon">🔒</div>
85
80
  <h3>权限管理</h3>
86
- <p>设置用户权限和访问控制</p>
87
- <button class="btn-card-action">进入设置 →</button>
81
+ <p>设置用户权限和访问控�?/p>
82
+ <button class="btn-card-action">进入设置 �?/button>
88
83
  </div>
89
84
  ` : ''}
90
85
 
91
86
  <div class="setting-card" data-setting="data">
92
87
  <div class="setting-icon">📊</div>
93
88
  <h3>数据管理</h3>
94
- <p>导出数据和备份管理</p>
95
- <button class="btn-card-action">进入设置 →</button>
89
+ <p>导出数据和备份管�?/p>
90
+ <button class="btn-card-action">进入设置 �?/button>
96
91
  </div>
97
92
 
98
93
  <div class="setting-card" data-setting="language">
99
94
  <div class="setting-icon">🌐</div>
100
95
  <h3>语言设置</h3>
101
96
  <p>选择界面显示语言</p>
102
- <button class="btn-card-action">进入设置 →</button>
97
+ <button class="btn-card-action">进入设置 �?/button>
103
98
  </div>
104
99
  </div>
105
100
 
106
101
  <!-- 详细设置面板 -->
107
102
  <div class="setting-detail-panel hidden" id="settingDetailPanel">
108
- <button class="btn-back" id="backToSettings">← 返回</button>
103
+ <button class="btn-back" id="backToSettings">�?返回</button>
109
104
  <div id="settingDetailContent"></div>
110
105
  </div>
111
106
  `;
@@ -131,7 +126,7 @@ export class FeatureIntegrator {
131
126
  const style = document.createElement('style');
132
127
  style.id = 'settings-modern-styles';
133
128
  style.textContent = `
134
- /* 设置页面容器 - 添加高度限制和滚动 */
129
+ /* 设置页面容器 - 添加高度限制和滚�?*/
135
130
  #contentArea {
136
131
  max-height: calc(100vh - 40px);
137
132
  overflow-y: auto;
@@ -364,7 +359,7 @@ export class FeatureIntegrator {
364
359
  line-height: 1.6;
365
360
  }
366
361
 
367
- /* 切换开关 */
362
+ /* 切换开�?*/
368
363
  .toggle-switch {
369
364
  position: relative;
370
365
  display: inline-block;
@@ -615,7 +610,7 @@ export class FeatureIntegrator {
615
610
  box-shadow: 0 4px 12px rgba(239,68,68,0.4);
616
611
  }
617
612
 
618
- /* 语言选择器 */
613
+ /* 语言选择�?*/
619
614
  .language-selector-modern {
620
615
  display: grid;
621
616
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
@@ -689,7 +684,7 @@ export class FeatureIntegrator {
689
684
  animation: scaleIn 0.3s ease;
690
685
  }
691
686
 
692
- /* 信息提示框 */
687
+ /* 信息提示�?*/
693
688
  .language-info-box {
694
689
  background: linear-gradient(135deg, rgba(99,102,241,0.1) 0%, rgba(99,102,241,0.05) 100%);
695
690
  border: 2px solid rgba(99,102,241,0.3);
@@ -740,7 +735,7 @@ export class FeatureIntegrator {
740
735
  }
741
736
  }
742
737
 
743
- /* 响应式 */
738
+ /* 响应�?*/
744
739
  @media (max-width: 768px) {
745
740
  .settings-header-modern {
746
741
  padding: 30px 20px;
@@ -801,8 +796,7 @@ export class FeatureIntegrator {
801
796
  grid.style.display = 'none';
802
797
  panel.classList.remove('hidden');
803
798
 
804
- // 加载对应的设置内容
805
- this.loadSettingsTab(setting, content);
799
+ // 加载对应的设置内�? this.loadSettingsTab(setting, content);
806
800
 
807
801
  // 返回按钮
808
802
  container.querySelector('#backToSettings').addEventListener('click', () => {
@@ -840,8 +834,7 @@ export class FeatureIntegrator {
840
834
  }
841
835
 
842
836
  /**
843
- * 渲染数据管理设置(优化后)
844
- */
837
+ * 渲染数据管理设置(优化后�? */
845
838
  renderDataSettings(container) {
846
839
  container.innerHTML = `
847
840
  <div class="settings-detail-modern">
@@ -882,7 +875,7 @@ export class FeatureIntegrator {
882
875
  <div class="setting-card-icon">📤</div>
883
876
  <div class="setting-card-content">
884
877
  <h4>导出数据</h4>
885
- <p>导出您的聊天记录、文档和其他数据为 JSON CSV 格式</p>
878
+ <p>导出您的聊天记录、文档和其他数据�?JSON �?CSV 格式</p>
886
879
  <div class="export-options">
887
880
  <button class="btn-export" data-type="messages">
888
881
  <span>💬</span> 导出消息
@@ -898,12 +891,12 @@ export class FeatureIntegrator {
898
891
  </div>
899
892
 
900
893
  <div class="setting-card-detail">
901
- <div class="setting-card-icon">🗑️</div>
894
+ <div class="setting-card-icon">🗑�?/div>
902
895
  <div class="setting-card-content">
903
896
  <h4>清除缓存</h4>
904
- <p>清除本地缓存数据以释放空间,不会删除服务器数据</p>
897
+ <p>清除本地缓存数据以释放空间,不会删除服务器数�?/p>
905
898
  <button class="btn-danger-outline" id="clearCache">
906
- <span>🗑️</span> 清除缓存
899
+ <span>🗑�?/span> 清除缓存
907
900
  </button>
908
901
  </div>
909
902
  </div>
@@ -912,7 +905,7 @@ export class FeatureIntegrator {
912
905
  <div class="setting-card-icon">🔄</div>
913
906
  <div class="setting-card-content">
914
907
  <h4>自动备份</h4>
915
- <p>定期自动备份您的重要数据,确保数据安全</p>
908
+ <p>定期自动备份您的重要数据,确保数据安�?/p>
916
909
  <label class="toggle-switch">
917
910
  <input type="checkbox" id="autoBackup" checked>
918
911
  <span class="toggle-slider"></span>
@@ -931,11 +924,11 @@ export class FeatureIntegrator {
931
924
  btn.addEventListener('click', () => {
932
925
  const type = btn.dataset.type;
933
926
  const originalText = btn.innerHTML;
934
- btn.innerHTML = '<span>⏳</span> 导出中...';
927
+ btn.innerHTML = '<span>�?/span> 导出�?..';
935
928
  btn.disabled = true;
936
929
 
937
930
  setTimeout(() => {
938
- btn.innerHTML = '<span>✅</span> 导出成功!';
931
+ btn.innerHTML = '<span>�?/span> 导出成功�?;
939
932
  setTimeout(() => {
940
933
  btn.innerHTML = originalText;
941
934
  btn.disabled = false;
@@ -948,14 +941,14 @@ export class FeatureIntegrator {
948
941
 
949
942
  // 清除缓存
950
943
  container.querySelector('#clearCache')?.addEventListener('click', () => {
951
- if (confirm('确定要清除缓存吗?这不会删除服务器上的数据。')) {
944
+ if (confirm('确定要清除缓存吗?这不会删除服务器上的数据�?)) {
952
945
  const btn = container.querySelector('#clearCache');
953
- btn.innerHTML = '<span>⏳</span> 清除中...';
946
+ btn.innerHTML = '<span>�?/span> 清除�?..';
954
947
  btn.disabled = true;
955
948
 
956
949
  setTimeout(() => {
957
950
  localStorage.clear();
958
- alert('缓存已清除!页面将刷新...');
951
+ alert('缓存已清除!页面将刷�?..');
959
952
  window.location.reload();
960
953
  }, 1000);
961
954
  }
@@ -963,8 +956,7 @@ export class FeatureIntegrator {
963
956
  }
964
957
 
965
958
  /**
966
- * 渲染语言设置(优化后)
967
- */
959
+ * 渲染语言设置(优化后�? */
968
960
  renderLanguageSettings(container) {
969
961
  const currentLang = localStorage.getItem('language') || 'zh-CN';
970
962
 
@@ -980,11 +972,11 @@ export class FeatureIntegrator {
980
972
  <div class="language-card ${currentLang === 'zh-CN' ? 'selected' : ''}" data-lang="zh-CN">
981
973
  <div class="language-flag">🇨🇳</div>
982
974
  <div class="language-info">
983
- <h4>简体中文</h4>
975
+ <h4>简体中�?/h4>
984
976
  <p>Simplified Chinese</p>
985
977
  </div>
986
978
  <div class="language-check">
987
- ${currentLang === 'zh-CN' ? '<span class="check-icon">✓</span>' : ''}
979
+ ${currentLang === 'zh-CN' ? '<span class="check-icon">�?/span>' : ''}
988
980
  </div>
989
981
  </div>
990
982
 
@@ -995,7 +987,7 @@ export class FeatureIntegrator {
995
987
  <p>Traditional Chinese</p>
996
988
  </div>
997
989
  <div class="language-check">
998
- ${currentLang === 'zh-TW' ? '<span class="check-icon">✓</span>' : ''}
990
+ ${currentLang === 'zh-TW' ? '<span class="check-icon">�?/span>' : ''}
999
991
  </div>
1000
992
  </div>
1001
993
 
@@ -1006,29 +998,29 @@ export class FeatureIntegrator {
1006
998
  <p>United States</p>
1007
999
  </div>
1008
1000
  <div class="language-check">
1009
- ${currentLang === 'en-US' ? '<span class="check-icon">✓</span>' : ''}
1001
+ ${currentLang === 'en-US' ? '<span class="check-icon">�?/span>' : ''}
1010
1002
  </div>
1011
1003
  </div>
1012
1004
 
1013
1005
  <div class="language-card ${currentLang === 'ja-JP' ? 'selected' : ''}" data-lang="ja-JP">
1014
1006
  <div class="language-flag">🇯🇵</div>
1015
1007
  <div class="language-info">
1016
- <h4>日本語</h4>
1008
+ <h4>日本�?/h4>
1017
1009
  <p>Japanese</p>
1018
1010
  </div>
1019
1011
  <div class="language-check">
1020
- ${currentLang === 'ja-JP' ? '<span class="check-icon">✓</span>' : ''}
1012
+ ${currentLang === 'ja-JP' ? '<span class="check-icon">�?/span>' : ''}
1021
1013
  </div>
1022
1014
  </div>
1023
1015
 
1024
1016
  <div class="language-card ${currentLang === 'ko-KR' ? 'selected' : ''}" data-lang="ko-KR">
1025
1017
  <div class="language-flag">🇰🇷</div>
1026
1018
  <div class="language-info">
1027
- <h4>한국어</h4>
1019
+ <h4>한국�?/h4>
1028
1020
  <p>Korean</p>
1029
1021
  </div>
1030
1022
  <div class="language-check">
1031
- ${currentLang === 'ko-KR' ? '<span class="check-icon">✓</span>' : ''}
1023
+ ${currentLang === 'ko-KR' ? '<span class="check-icon">�?/span>' : ''}
1032
1024
  </div>
1033
1025
  </div>
1034
1026
 
@@ -1039,7 +1031,7 @@ export class FeatureIntegrator {
1039
1031
  <p>French</p>
1040
1032
  </div>
1041
1033
  <div class="language-check">
1042
- ${currentLang === 'fr-FR' ? '<span class="check-icon">✓</span>' : ''}
1034
+ ${currentLang === 'fr-FR' ? '<span class="check-icon">�?/span>' : ''}
1043
1035
  </div>
1044
1036
  </div>
1045
1037
  </div>
@@ -1048,14 +1040,13 @@ export class FeatureIntegrator {
1048
1040
  <div class="info-icon">ℹ️</div>
1049
1041
  <div class="info-content">
1050
1042
  <h4>语言切换说明</h4>
1051
- <p>更改语言后,页面将自动刷新以应用新的语言设置。部分内容可能需要重新加载。</p>
1043
+ <p>更改语言后,页面将自动刷新以应用新的语言设置。部分内容可能需要重新加载�?/p>
1052
1044
  </div>
1053
1045
  </div>
1054
1046
 
1055
1047
  <div class="settings-actions">
1056
1048
  <button class="btn-primary-large" id="saveLanguage">
1057
- <span>💾</span> 保存并应用
1058
- </button>
1049
+ <span>💾</span> 保存并应�? </button>
1059
1050
  </div>
1060
1051
  </div>
1061
1052
  `;
@@ -1066,15 +1057,13 @@ export class FeatureIntegrator {
1066
1057
  // 语言卡片点击效果
1067
1058
  container.querySelectorAll('.language-card').forEach(card => {
1068
1059
  card.addEventListener('click', () => {
1069
- // 移除所有选中状态
1070
- container.querySelectorAll('.language-card').forEach(c => {
1060
+ // 移除所有选中状�? container.querySelectorAll('.language-card').forEach(c => {
1071
1061
  c.classList.remove('selected');
1072
1062
  c.querySelector('.language-check').innerHTML = '';
1073
1063
  });
1074
1064
 
1075
- // 添加选中状态
1076
- card.classList.add('selected');
1077
- card.querySelector('.language-check').innerHTML = '<span class="check-icon">✓</span>';
1065
+ // 添加选中状�? card.classList.add('selected');
1066
+ card.querySelector('.language-check').innerHTML = '<span class="check-icon">�?/span>';
1078
1067
  });
1079
1068
  });
1080
1069
 
@@ -1085,12 +1074,12 @@ export class FeatureIntegrator {
1085
1074
 
1086
1075
  const btn = container.querySelector('#saveLanguage');
1087
1076
  const originalText = btn.innerHTML;
1088
- btn.innerHTML = '<span>⏳</span> 应用中...';
1077
+ btn.innerHTML = '<span>�?/span> 应用�?..';
1089
1078
  btn.disabled = true;
1090
1079
 
1091
1080
  setTimeout(() => {
1092
1081
  localStorage.setItem('language', selectedLang);
1093
- btn.innerHTML = '<span>✅</span> 应用成功!';
1082
+ btn.innerHTML = '<span>�?/span> 应用成功�?;
1094
1083
 
1095
1084
  setTimeout(() => {
1096
1085
  window.location.reload();
@@ -1100,8 +1089,7 @@ export class FeatureIntegrator {
1100
1089
  }
1101
1090
 
1102
1091
  /**
1103
- * 渲染通知设置(优化后)
1104
- */
1092
+ * 渲染通知设置(优化后�? */
1105
1093
  renderNotificationSettings(container) {
1106
1094
  const settings = {
1107
1095
  desktop: localStorage.getItem('notif_desktop') !== 'false',
@@ -1115,12 +1103,12 @@ export class FeatureIntegrator {
1115
1103
  <div class="settings-header-modern">
1116
1104
  <div class="settings-icon-large">🔔</div>
1117
1105
  <h2>通知设置</h2>
1118
- <p>管理您的通知偏好和提醒方式</p>
1106
+ <p>管理您的通知偏好和提醒方�?/p>
1119
1107
  </div>
1120
1108
 
1121
1109
  <div class="settings-cards-container">
1122
1110
  <div class="setting-card-detail ${settings.desktop ? 'active' : ''}">
1123
- <div class="setting-card-icon">🖥️</div>
1111
+ <div class="setting-card-icon">🖥�?/div>
1124
1112
  <div class="setting-card-content">
1125
1113
  <div class="setting-card-header">
1126
1114
  <h4>桌面通知</h4>
@@ -1129,7 +1117,7 @@ export class FeatureIntegrator {
1129
1117
  <span class="toggle-slider"></span>
1130
1118
  </label>
1131
1119
  </div>
1132
- <p>在桌面显示新消息通知,即使浏览器在后台运行</p>
1120
+ <p>在桌面显示新消息通知,即使浏览器在后台运�?/p>
1133
1121
  </div>
1134
1122
  </div>
1135
1123
 
@@ -1157,7 +1145,7 @@ export class FeatureIntegrator {
1157
1145
  <span class="toggle-slider"></span>
1158
1146
  </label>
1159
1147
  </div>
1160
- <p>有人@提及您时发送特别通知,确保及时回复</p>
1148
+ <p>有人@提及您时发送特别通知,确保及时回�?/p>
1161
1149
  </div>
1162
1150
  </div>
1163
1151
 
@@ -1171,7 +1159,7 @@ export class FeatureIntegrator {
1171
1159
  <span class="toggle-slider"></span>
1172
1160
  </label>
1173
1161
  </div>
1174
- <p>收到新消息时发送通知,保持与团队的实时沟通</p>
1162
+ <p>收到新消息时发送通知,保持与团队的实时沟�?/p>
1175
1163
  </div>
1176
1164
  </div>
1177
1165
  </div>
@@ -1190,8 +1178,7 @@ export class FeatureIntegrator {
1190
1178
  // 添加详细设置样式
1191
1179
  this.addDetailSettingsStyles();
1192
1180
 
1193
- // 切换开关效果
1194
- container.querySelectorAll('.toggle-switch input').forEach(input => {
1181
+ // 切换开关效�? container.querySelectorAll('.toggle-switch input').forEach(input => {
1195
1182
  input.addEventListener('change', (e) => {
1196
1183
  const card = e.target.closest('.setting-card-detail');
1197
1184
  if (e.target.checked) {
@@ -1212,7 +1199,7 @@ export class FeatureIntegrator {
1212
1199
  // 显示成功提示
1213
1200
  const btn = container.querySelector('#saveNotifSettings');
1214
1201
  const originalText = btn.innerHTML;
1215
- btn.innerHTML = '<span>✅</span> 保存成功!';
1202
+ btn.innerHTML = '<span>�?/span> 保存成功�?;
1216
1203
  btn.style.background = 'linear-gradient(135deg, #10b981 0%, #059669 100%)';
1217
1204
 
1218
1205
  setTimeout(() => {
@@ -1227,7 +1214,7 @@ export class FeatureIntegrator {
1227
1214
  Notification.requestPermission().then(permission => {
1228
1215
  if (permission === 'granted') {
1229
1216
  new Notification('CollabDocChat', {
1230
- body: '这是一条测试通知!',
1217
+ body: '这是一条测试通知�?,
1231
1218
  icon: '/favicon.ico'
1232
1219
  });
1233
1220
  } else {
@@ -1241,8 +1228,7 @@ export class FeatureIntegrator {
1241
1228
  }
1242
1229
 
1243
1230
  /**
1244
- * 渲染AI设置(优化后)
1245
- */
1231
+ * 渲染AI设置(优化后�? */
1246
1232
  renderAISettings(container) {
1247
1233
  const aiEnabled = localStorage.getItem('ai_enabled') !== 'false';
1248
1234
  const smartReplies = localStorage.getItem('ai_smart_replies') !== 'false';
@@ -1253,12 +1239,12 @@ export class FeatureIntegrator {
1253
1239
  <div class="settings-header-modern">
1254
1240
  <div class="settings-icon-large">🤖</div>
1255
1241
  <h2>AI 助手设置</h2>
1256
- <p>配置 AI 功能,提升您的工作效率</p>
1242
+ <p>配置 AI 功能,提升您的工作效�?/p>
1257
1243
  </div>
1258
1244
 
1259
1245
  <div class="settings-cards-container">
1260
1246
  <div class="setting-card-detail ${aiEnabled ? 'active' : ''}">
1261
- <div class="setting-card-icon">⚡</div>
1247
+ <div class="setting-card-icon">�?/div>
1262
1248
  <div class="setting-card-content">
1263
1249
  <div class="setting-card-header">
1264
1250
  <h4>启用 AI 助手</h4>
@@ -1281,12 +1267,12 @@ export class FeatureIntegrator {
1281
1267
  <span class="toggle-slider"></span>
1282
1268
  </label>
1283
1269
  </div>
1284
- <p>根据消息内容自动生成回复建议,快速响应对话</p>
1270
+ <p>根据消息内容自动生成回复建议,快速响应对�?/p>
1285
1271
  </div>
1286
1272
  </div>
1287
1273
 
1288
1274
  <div class="setting-card-detail ${autoComplete ? 'active' : ''}">
1289
- <div class="setting-card-icon">✨</div>
1275
+ <div class="setting-card-icon">�?/div>
1290
1276
  <div class="setting-card-content">
1291
1277
  <div class="setting-card-header">
1292
1278
  <h4>自动完成</h4>
@@ -1301,22 +1287,22 @@ export class FeatureIntegrator {
1301
1287
  </div>
1302
1288
 
1303
1289
  <div class="ai-features-showcase">
1304
- <h3>✨ AI 功能展示</h3>
1290
+ <h3>�?AI 功能展示</h3>
1305
1291
  <div class="features-grid">
1306
1292
  <div class="feature-item">
1307
1293
  <div class="feature-icon">📝</div>
1308
1294
  <h4>智能摘要</h4>
1309
- <p>自动生成会议和文档摘要</p>
1295
+ <p>自动生成会议和文档摘�?/p>
1310
1296
  </div>
1311
1297
  <div class="feature-item">
1312
1298
  <div class="feature-icon">🔍</div>
1313
1299
  <h4>智能搜索</h4>
1314
- <p>理解语义的智能搜索</p>
1300
+ <p>理解语义的智能搜�?/p>
1315
1301
  </div>
1316
1302
  <div class="feature-item">
1317
1303
  <div class="feature-icon">🎯</div>
1318
1304
  <h4>任务建议</h4>
1319
- <p>智能推荐任务优先级</p>
1305
+ <p>智能推荐任务优先�?/p>
1320
1306
  </div>
1321
1307
  <div class="feature-item">
1322
1308
  <div class="feature-icon">📊</div>
@@ -1343,8 +1329,7 @@ export class FeatureIntegrator {
1343
1329
  // 添加详细设置样式
1344
1330
  this.addDetailSettingsStyles();
1345
1331
 
1346
- // 切换开关效果
1347
- container.querySelectorAll('.toggle-switch input').forEach(input => {
1332
+ // 切换开关效�? container.querySelectorAll('.toggle-switch input').forEach(input => {
1348
1333
  input.addEventListener('change', (e) => {
1349
1334
  const card = e.target.closest('.setting-card-detail');
1350
1335
  if (e.target.checked) {
@@ -1363,7 +1348,7 @@ export class FeatureIntegrator {
1363
1348
 
1364
1349
  const btn = container.querySelector('#saveAISettings');
1365
1350
  const originalText = btn.innerHTML;
1366
- btn.innerHTML = '<span>✅</span> 保存成功!';
1351
+ btn.innerHTML = '<span>�?/span> 保存成功�?;
1367
1352
  btn.style.background = 'linear-gradient(135deg, #10b981 0%, #059669 100%)';
1368
1353
 
1369
1354
  setTimeout(() => {
@@ -1376,11 +1361,11 @@ export class FeatureIntegrator {
1376
1361
  container.querySelector('#testAI').addEventListener('click', () => {
1377
1362
  const btn = container.querySelector('#testAI');
1378
1363
  const originalText = btn.innerHTML;
1379
- btn.innerHTML = '<span>⏳</span> 测试中...';
1364
+ btn.innerHTML = '<span>�?/span> 测试�?..';
1380
1365
  btn.disabled = true;
1381
1366
 
1382
1367
  setTimeout(() => {
1383
- btn.innerHTML = '<span>✅</span> AI 正常运行!';
1368
+ btn.innerHTML = '<span>�?/span> AI 正常运行�?;
1384
1369
  setTimeout(() => {
1385
1370
  btn.innerHTML = originalText;
1386
1371
  btn.disabled = false;
@@ -1425,10 +1410,10 @@ export class FeatureIntegrator {
1425
1410
  🤖 AI
1426
1411
  </button>
1427
1412
  <button class="btn-secondary" id="showCollabTools" title="协作工具">
1428
- 🛠️ 工具
1413
+ 🛠�?工具
1429
1414
  </button>
1430
- <button class="btn-secondary" id="markAllRead" title="全部标记为已读">
1431
- ✓ 已读
1415
+ <button class="btn-secondary" id="markAllRead" title="全部标记为已�?>
1416
+ �?已读
1432
1417
  </button>
1433
1418
  </div>
1434
1419
  `;
@@ -1493,7 +1478,7 @@ export class FeatureIntegrator {
1493
1478
  modal.innerHTML = `
1494
1479
  <div class="modal-content" style="max-width: 1000px;">
1495
1480
  <div class="modal-header">
1496
- <h3>🛠️ 协作工具</h3>
1481
+ <h3>🛠�?协作工具</h3>
1497
1482
  <button class="modal-close" id="closeCollabTools">×</button>
1498
1483
  </div>
1499
1484
  <div class="collab-tools-tabs-modern">
@@ -1722,3 +1707,4 @@ export class FeatureIntegrator {
1722
1707
  }
1723
1708
  }
1724
1709
 
1710
+