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
package/src/pages/login.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AuthService } from '../services/auth.js';
|
|
1
|
+
import { AuthService } from '../services/auth.js';
|
|
2
2
|
|
|
3
3
|
export function renderLoginPage(onSuccess) {
|
|
4
4
|
const app = document.getElementById('app');
|
|
@@ -9,18 +9,18 @@ export function renderLoginPage(onSuccess) {
|
|
|
9
9
|
<div class="login-card">
|
|
10
10
|
<div class="login-header">
|
|
11
11
|
<h1 class="logo">CollabDocChat</h1>
|
|
12
|
-
<p class="tagline">实时协作 · 智能沟�?/p>
|
|
12
|
+
<p class="tagline">实时协作 · 智能沟�?/p>
|
|
13
13
|
</div>
|
|
14
14
|
|
|
15
15
|
<div id="loginSection">
|
|
16
16
|
<form id="loginForm" class="auth-form">
|
|
17
17
|
<div class="form-group">
|
|
18
|
-
<label>用户�?/label>
|
|
18
|
+
<label>用户�?/label>
|
|
19
19
|
<input type="text" name="username" required placeholder="请输入用户名">
|
|
20
20
|
</div>
|
|
21
21
|
<div class="form-group">
|
|
22
22
|
<label>密码</label>
|
|
23
|
-
<input type="password" name="password" required placeholder="•••••••�?>
|
|
23
|
+
<input type="password" name="password" required placeholder="•••••••�?>
|
|
24
24
|
</div>
|
|
25
25
|
<button type="submit" class="btn-primary">登录</button>
|
|
26
26
|
<div class="error-message" id="loginError"></div>
|
|
@@ -34,22 +34,22 @@ export function renderLoginPage(onSuccess) {
|
|
|
34
34
|
<div id="registerSection" class="hidden">
|
|
35
35
|
<form id="registerForm" class="auth-form">
|
|
36
36
|
<div class="form-group">
|
|
37
|
-
<label>用户�?/label>
|
|
37
|
+
<label>用户�?/label>
|
|
38
38
|
<input type="text" name="username" required placeholder="请输入用户名">
|
|
39
39
|
</div>
|
|
40
40
|
<div class="form-group">
|
|
41
41
|
<label>密码</label>
|
|
42
|
-
<input type="password" name="password" required placeholder="•••••••�?>
|
|
42
|
+
<input type="password" name="password" required placeholder="•••••••�?>
|
|
43
43
|
</div>
|
|
44
44
|
<div class="register-note">
|
|
45
|
-
<p>注册后将自动分配为普通用�?/p>
|
|
45
|
+
<p>注册后将自动分配为普通用�?/p>
|
|
46
46
|
</div>
|
|
47
47
|
<button type="submit" class="btn-primary">注册</button>
|
|
48
48
|
<div class="error-message" id="registerError"></div>
|
|
49
49
|
</form>
|
|
50
50
|
|
|
51
51
|
<div class="auth-switch">
|
|
52
|
-
<p class="switch-text">已有账号�?button class="link-btn" id="showLogin">返回登录</button></p>
|
|
52
|
+
<p class="switch-text">已有账号�?button class="link-btn" id="showLogin">返回登录</button></p>
|
|
53
53
|
</div>
|
|
54
54
|
</div>
|
|
55
55
|
</div>
|
|
@@ -99,3 +99,4 @@ export function renderLoginPage(onSuccess) {
|
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
|
|
102
|
+
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// 优化后的任务详情界面
|
|
1
|
+
// 优化后的任务详情界面
|
|
2
2
|
// 使用卡片式布局,提升视觉效果和信息层次
|
|
3
3
|
|
|
4
4
|
function renderOptimizedTaskDetail(task, container) {
|
|
@@ -18,7 +18,7 @@ function renderOptimizedTaskDetail(task, container) {
|
|
|
18
18
|
</div>
|
|
19
19
|
</div>
|
|
20
20
|
<button class="btn-close-modern" id="closeTaskDetail">
|
|
21
|
-
<span>�?/span>
|
|
21
|
+
<span>�?/span>
|
|
22
22
|
</button>
|
|
23
23
|
</div>
|
|
24
24
|
|
|
@@ -32,20 +32,20 @@ function renderOptimizedTaskDetail(task, container) {
|
|
|
32
32
|
<div class="info-label-modern">
|
|
33
33
|
<span class="label-icon">👤</span> 任务组长
|
|
34
34
|
</div>
|
|
35
|
-
<div class="info-value-modern">${task.assignedTo || '未分�?}</div>
|
|
35
|
+
<div class="info-value-modern">${task.assignedTo || '未分�?}</div>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
<div class="info-item-modern">
|
|
39
39
|
<div class="info-label-modern">
|
|
40
|
-
<span class="label-icon">👥</span> 所属群�? </div>
|
|
41
|
-
<div class="info-value-modern">${task.group || '未指�?}</div>
|
|
40
|
+
<span class="label-icon">👥</span> 所属群�? </div>
|
|
41
|
+
<div class="info-value-modern">${task.group || '未指�?}</div>
|
|
42
42
|
</div>
|
|
43
43
|
|
|
44
44
|
<div class="info-item-modern">
|
|
45
45
|
<div class="info-label-modern">
|
|
46
46
|
<span class="label-icon">📅</span> 截止日期
|
|
47
47
|
</div>
|
|
48
|
-
<div class="info-value-modern">${task.deadline ? new Date(task.deadline).toLocaleString() : '�?}</div>
|
|
48
|
+
<div class="info-value-modern">${task.deadline ? new Date(task.deadline).toLocaleString() : '�?}</div>
|
|
49
49
|
</div>
|
|
50
50
|
|
|
51
51
|
<div class="info-item-modern">
|
|
@@ -75,23 +75,23 @@ function renderOptimizedTaskDetail(task, container) {
|
|
|
75
75
|
<div class="stat-item-modern stat-total">
|
|
76
76
|
<div class="stat-icon-modern">👥</div>
|
|
77
77
|
<div class="stat-content-modern">
|
|
78
|
-
<div class="stat-label-modern">总人�?/div>
|
|
78
|
+
<div class="stat-label-modern">总人�?/div>
|
|
79
79
|
<div class="stat-value-modern">${task.members?.length || 0}</div>
|
|
80
80
|
</div>
|
|
81
81
|
</div>
|
|
82
82
|
|
|
83
83
|
<div class="stat-item-modern stat-completed">
|
|
84
|
-
<div class="stat-icon-modern">�?/div>
|
|
84
|
+
<div class="stat-icon-modern">�?/div>
|
|
85
85
|
<div class="stat-content-modern">
|
|
86
|
-
<div class="stat-label-modern">已完�?/div>
|
|
86
|
+
<div class="stat-label-modern">已完�?/div>
|
|
87
87
|
<div class="stat-value-modern">${task.completedCount || 0}</div>
|
|
88
88
|
</div>
|
|
89
89
|
</div>
|
|
90
90
|
|
|
91
91
|
<div class="stat-item-modern stat-pending">
|
|
92
|
-
<div class="stat-icon-modern">�?/div>
|
|
92
|
+
<div class="stat-icon-modern">�?/div>
|
|
93
93
|
<div class="stat-content-modern">
|
|
94
|
-
<div class="stat-label-modern">未完�?/div>
|
|
94
|
+
<div class="stat-label-modern">未完�?/div>
|
|
95
95
|
<div class="stat-value-modern">${(task.members?.length || 0) - (task.completedCount || 0)}</div>
|
|
96
96
|
</div>
|
|
97
97
|
</div>
|
|
@@ -99,13 +99,13 @@ function renderOptimizedTaskDetail(task, container) {
|
|
|
99
99
|
<div class="stat-item-modern stat-progress">
|
|
100
100
|
<div class="stat-icon-modern">📈</div>
|
|
101
101
|
<div class="stat-content-modern">
|
|
102
|
-
<div class="stat-label-modern">完成�?/div>
|
|
102
|
+
<div class="stat-label-modern">完成�?/div>
|
|
103
103
|
<div class="stat-value-modern">${calculateProgress(task)}%</div>
|
|
104
104
|
</div>
|
|
105
105
|
</div>
|
|
106
106
|
</div>
|
|
107
107
|
|
|
108
|
-
<!-- 进度�?-->
|
|
108
|
+
<!-- 进度�?-->
|
|
109
109
|
<div class="progress-bar-container-modern">
|
|
110
110
|
<div class="progress-bar-modern">
|
|
111
111
|
<div class="progress-fill-modern" style="width: ${calculateProgress(task)}%">
|
|
@@ -115,7 +115,7 @@ function renderOptimizedTaskDetail(task, container) {
|
|
|
115
115
|
</div>
|
|
116
116
|
</div>
|
|
117
117
|
|
|
118
|
-
<!-- 投票结果卡片(如果有投票�?-->
|
|
118
|
+
<!-- 投票结果卡片(如果有投票�?-->
|
|
119
119
|
${task.poll ? renderPollResults(task.poll) : ''}
|
|
120
120
|
|
|
121
121
|
<!-- 成员完成情况卡片 -->
|
|
@@ -134,10 +134,10 @@ function renderOptimizedTaskDetail(task, container) {
|
|
|
134
134
|
<span>✏️</span> 编辑任务
|
|
135
135
|
</button>
|
|
136
136
|
<button class="btn-action-modern btn-complete" id="completeTask">
|
|
137
|
-
<span>�?/span> 标记完成
|
|
137
|
+
<span>�?/span> 标记完成
|
|
138
138
|
</button>
|
|
139
139
|
<button class="btn-action-modern btn-delete" id="deleteTask">
|
|
140
|
-
<span>🗑�?/span> 删除任务
|
|
140
|
+
<span>🗑�?/span> 删除任务
|
|
141
141
|
</button>
|
|
142
142
|
</div>
|
|
143
143
|
</div>
|
|
@@ -169,7 +169,7 @@ function renderPollResults(poll) {
|
|
|
169
169
|
<div class="poll-option-modern">
|
|
170
170
|
<div class="poll-option-header-modern">
|
|
171
171
|
<span class="poll-option-text-modern">${option.text}</span>
|
|
172
|
-
<span class="poll-option-count-modern">${option.votes || 0} �?(${percentage}%)</span>
|
|
172
|
+
<span class="poll-option-count-modern">${option.votes || 0} �?(${percentage}%)</span>
|
|
173
173
|
</div>
|
|
174
174
|
<div class="poll-option-bar-modern">
|
|
175
175
|
<div class="poll-option-fill-modern" style="width: ${percentage}%"></div>
|
|
@@ -183,9 +183,9 @@ function renderPollResults(poll) {
|
|
|
183
183
|
`;
|
|
184
184
|
}
|
|
185
185
|
|
|
186
|
-
// 渲染成员�?function renderMemberItem(member) {
|
|
186
|
+
// 渲染成员�?function renderMemberItem(member) {
|
|
187
187
|
const isCompleted = member.completed || member.status === 'completed';
|
|
188
|
-
const completedTime = member.completedAt ? new Date(member.completedAt).toLocaleString() : '未完�?;
|
|
188
|
+
const completedTime = member.completedAt ? new Date(member.completedAt).toLocaleString() : '未完�?;
|
|
189
189
|
|
|
190
190
|
return `
|
|
191
191
|
<div class="member-item-modern ${isCompleted ? 'completed' : 'pending'}">
|
|
@@ -195,13 +195,13 @@ function renderPollResults(poll) {
|
|
|
195
195
|
<div class="member-info-modern">
|
|
196
196
|
<div class="member-name-modern">${member.username || '未知用户'}</div>
|
|
197
197
|
<div class="member-time-modern">
|
|
198
|
-
${isCompleted ? `�?${completedTime}` : '�?待完�?}
|
|
198
|
+
${isCompleted ? `�?${completedTime}` : '�?待完�?}
|
|
199
199
|
</div>
|
|
200
200
|
</div>
|
|
201
201
|
<div class="member-status-modern">
|
|
202
202
|
${isCompleted ?
|
|
203
|
-
'<span class="status-badge-small completed">已完�?/span>' :
|
|
204
|
-
'<span class="status-badge-small pending">未完�?/span>'}
|
|
203
|
+
'<span class="status-badge-small completed">已完�?/span>' :
|
|
204
|
+
'<span class="status-badge-small pending">未完�?/span>'}
|
|
205
205
|
</div>
|
|
206
206
|
</div>
|
|
207
207
|
`;
|
|
@@ -214,33 +214,33 @@ function calculateProgress(task) {
|
|
|
214
214
|
return Math.round((completed / task.members.length) * 100);
|
|
215
215
|
}
|
|
216
216
|
|
|
217
|
-
// 获取状态图�?function getStatusIcon(status) {
|
|
217
|
+
// 获取状态图�?function getStatusIcon(status) {
|
|
218
218
|
const icons = {
|
|
219
|
-
'pending': '�?,
|
|
219
|
+
'pending': '�?,
|
|
220
220
|
'in_progress': '🔄',
|
|
221
|
-
'completed': '�?,
|
|
222
|
-
'terminated': '�?
|
|
221
|
+
'completed': '�?,
|
|
222
|
+
'terminated': '�?
|
|
223
223
|
};
|
|
224
224
|
return icons[status] || '📋';
|
|
225
225
|
}
|
|
226
226
|
|
|
227
|
-
// 获取状态文�?function getStatusText(status) {
|
|
227
|
+
// 获取状态文�?function getStatusText(status) {
|
|
228
228
|
const texts = {
|
|
229
|
-
'pending': '待处�?,
|
|
230
|
-
'in_progress': '进行�?,
|
|
231
|
-
'completed': '已完�?,
|
|
232
|
-
'terminated': '已终�?
|
|
229
|
+
'pending': '待处�?,
|
|
230
|
+
'in_progress': '进行�?,
|
|
231
|
+
'completed': '已完�?,
|
|
232
|
+
'terminated': '已终�?
|
|
233
233
|
};
|
|
234
234
|
return texts[status] || '未知';
|
|
235
235
|
}
|
|
236
236
|
|
|
237
|
-
// 获取优先级图�?function getPriorityIcon(priority) {
|
|
237
|
+
// 获取优先级图�?function getPriorityIcon(priority) {
|
|
238
238
|
const icons = {
|
|
239
239
|
'high': '🔴',
|
|
240
240
|
'medium': '🟡',
|
|
241
241
|
'low': '🟢'
|
|
242
242
|
};
|
|
243
|
-
return icons[priority] || '�?;
|
|
243
|
+
return icons[priority] || '�?;
|
|
244
244
|
}
|
|
245
245
|
|
|
246
246
|
// 添加样式
|
|
@@ -262,7 +262,7 @@ function addTaskDetailStyles() {
|
|
|
262
262
|
overflow-x: hidden;
|
|
263
263
|
}
|
|
264
264
|
|
|
265
|
-
/* 滚动条样�?*/
|
|
265
|
+
/* 滚动条样�?*/
|
|
266
266
|
.task-detail-view-modern::-webkit-scrollbar {
|
|
267
267
|
width: 8px;
|
|
268
268
|
}
|
|
@@ -825,13 +825,14 @@ function setupTaskDetailEvents(task, container) {
|
|
|
825
825
|
|
|
826
826
|
// 删除任务
|
|
827
827
|
container.querySelector('#deleteTask')?.addEventListener('click', async () => {
|
|
828
|
-
if (confirm('确定要删除此任务吗?此操作不可撤销�?)) {
|
|
828
|
+
if (confirm('确定要删除此任务吗?此操作不可撤销�?)) {
|
|
829
829
|
// 调用 API 删除任务
|
|
830
|
-
alert('任务已删�?);
|
|
830
|
+
alert('任务已删�?);
|
|
831
831
|
container.closest('.modal')?.remove();
|
|
832
832
|
}
|
|
833
833
|
});
|
|
834
834
|
}
|
|
835
835
|
|
|
836
|
-
// 导出函数供其他模块使�?export { renderOptimizedTaskDetail };
|
|
836
|
+
// 导出函数供其他模块使�?export { renderOptimizedTaskDetail };
|
|
837
837
|
|
|
838
|
+
|