collabdocchat 2.4.5 → 2.4.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.
Files changed (47) hide show
  1. package/bin/cli.js +1 -1
  2. package/package.json +3 -1
  3. package/scripts/cleanup-scripts.js +140 -0
  4. package/scripts/fix-startup-issues.js +136 -0
  5. package/scripts/start-app.js +11 -5
  6. package/scripts/start-simple.js +96 -0
  7. package/scripts/add-button-hover.js +0 -58
  8. package/scripts/add-missing-braces.js +0 -27
  9. package/scripts/add-missing-functions.js +0 -68
  10. package/scripts/add-more-features.js +0 -429
  11. package/scripts/add-user-functions.js +0 -203
  12. package/scripts/auto-publish.js +0 -65
  13. package/scripts/beautify-buttons.js +0 -47
  14. package/scripts/beautify-ui.js +0 -269
  15. package/scripts/check-brackets.js +0 -50
  16. package/scripts/check-encoding.js +0 -43
  17. package/scripts/check-syntax.js +0 -56
  18. package/scripts/delete-orphan-block.js +0 -27
  19. package/scripts/find-buttons.js +0 -22
  20. package/scripts/find-duplicate.js +0 -37
  21. package/scripts/find-extra-brace.js +0 -63
  22. package/scripts/find-sidebar-buttons.js +0 -23
  23. package/scripts/fix-file-end.js +0 -46
  24. package/scripts/fix-help.js +0 -276
  25. package/scripts/fix-issues-step1.js +0 -75
  26. package/scripts/fix-issues-step2.js +0 -95
  27. package/scripts/fix-issues-step3.js +0 -157
  28. package/scripts/fix-issues-step4.js +0 -152
  29. package/scripts/fix-optimized-views.js +0 -39
  30. package/scripts/fix-ports.js +0 -77
  31. package/scripts/fix-settings.js +0 -260
  32. package/scripts/fix-syntax-error.js +0 -38
  33. package/scripts/fix-user-dashboard.js +0 -62
  34. package/scripts/fix-workflow.js +0 -112
  35. package/scripts/refactor-step1.js +0 -34
  36. package/scripts/refactor-step2.js +0 -257
  37. package/scripts/refactor-step3.js +0 -139
  38. package/scripts/refactor-step4.js +0 -185
  39. package/scripts/refactor-step5.js +0 -183
  40. package/scripts/refactor-step6.js +0 -256
  41. package/scripts/refactor-step7.js +0 -293
  42. package/scripts/remove-bom.js +0 -69
  43. package/scripts/remove-orphan-code.js +0 -57
  44. package/scripts/remove-quill-from-user-dashboard.js +0 -49
  45. package/scripts/remove-quill-imports-only.js +0 -32
  46. package/scripts/update-port-user.js +0 -23
  47. package/scripts/update-port.js +0 -24
@@ -1,260 +0,0 @@
1
- import fs from 'fs';
2
- import path from 'path';
3
- import { fileURLToPath } from 'url';
4
-
5
- const __filename = fileURLToPath(import.meta.url);
6
- const __dirname = path.dirname(__filename);
7
-
8
- const filePath = path.join(__dirname, '../src/pages/admin-dashboard.js');
9
-
10
- console.log('读取文件...');
11
- let content = fs.readFileSync(filePath, 'utf8');
12
-
13
- // 1. 美化设置页面
14
- console.log('美化设置页面...');
15
- const oldSettings = ` // 设置
16
- async function renderSettingsView(container) {
17
- container.innerHTML = \`
18
- <div class="view-header">
19
- <h2>⚙️ 设置</h2>
20
- </div>
21
- <div class="settings-container">
22
- <div class="settings-section">
23
- <h3>个人设置</h3>
24
- <div class="setting-item">
25
- <label>用户名</label>
26
- <input type="text" value="\${user.username}" disabled>
27
- </div>
28
- <div class="setting-item">
29
- <label>邮箱</label>
30
- <input type="email" value="\${user.email || '未设置'}" placeholder="请输入邮箱">
31
- </div>
32
- <div class="setting-item">
33
- <label>修改密码</label>
34
- <button class="btn-secondary" id="changePasswordBtn">修改密码</button>
35
- </div>
36
- </div>
37
-
38
- <div class="settings-section">
39
- <h3>通知设置</h3>
40
- <div class="setting-item">
41
- <label>
42
- <input type="checkbox" id="emailNotifications" checked>
43
- 邮件通知
44
- </label>
45
- </div>
46
- <div class="setting-item">
47
- <label>
48
- <input type="checkbox" id="desktopNotifications" checked>
49
- 桌面通知
50
- </label>
51
- </div>
52
- <div class="setting-item">
53
- <label>
54
- <input type="checkbox" id="soundNotifications" checked>
55
- 声音提示
56
- </label>
57
- </div>
58
- </div>
59
-
60
- <div class="settings-section">
61
- <h3>系统设置</h3>
62
- <div class="setting-item">
63
- <label>主题</label>
64
- <select id="themeSelect">
65
- <option value="light">浅色</option>
66
- <option value="dark">深色</option>
67
- <option value="auto">跟随系统</option>
68
- </select>
69
- </div>
70
- <div class="setting-item">
71
- <label>语言</label>
72
- <select id="languageSelect">
73
- <option value="zh-CN">简体中文</option>
74
- <option value="en-US">English</option>
75
- </select>
76
- </div>
77
- </div>
78
-
79
- <div class="settings-actions">
80
- <button class="btn-primary" id="saveSettingsBtn">保存设置</button>
81
- </div>
82
- </div>
83
- \`;
84
-
85
- document.getElementById('changePasswordBtn').addEventListener('click', () => {
86
- alert('修改密码功能开发中...');
87
- });
88
-
89
- document.getElementById('saveSettingsBtn').addEventListener('click', () => {
90
- alert('设置已保存!');
91
- });
92
- }`;
93
-
94
- const newSettings = ` // 设置
95
- async function renderSettingsView(container) {
96
- container.innerHTML = \`
97
- <div class="view-header" style="margin-bottom: 30px;">
98
- <h2 style="display: flex; align-items: center; gap: 12px; font-size: 28px;">
99
- <span style="background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent;">⚙️ 设置中心</span>
100
- </h2>
101
- <p style="color: var(--text-tertiary); margin-top: 8px;">管理您的个人偏好和系统配置</p>
102
- </div>
103
- <div class="settings-container" style="display: grid; gap: 24px; max-width: 900px;">
104
- <!-- 个人设置卡片 -->
105
- <div class="settings-card" style="background: var(--bg-secondary); padding: 28px; border-radius: 16px; border: 1px solid var(--border); box-shadow: 0 2px 8px rgba(0,0,0,0.05); transition: transform 0.2s, box-shadow 0.2s;">
106
- <div style="display: flex; align-items: center; gap: 12px; margin-bottom: 24px;">
107
- <div style="width: 48px; height: 48px; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); border-radius: 12px; display: flex; align-items: center; justify-content: center; font-size: 24px;">👤</div>
108
- <h3 style="margin: 0; font-size: 20px; font-weight: 600;">个人设置</h3>
109
- </div>
110
- <div class="setting-item" style="margin-bottom: 20px;">
111
- <label style="display: block; margin-bottom: 8px; font-weight: 600; color: var(--text-secondary); font-size: 14px;">👤 用户名</label>
112
- <input type="text" value="\${user.username}" disabled style="width: 100%; padding: 12px 16px; border: 2px solid var(--border); border-radius: 10px; font-size: 14px; background: var(--bg-tertiary); cursor: not-allowed;">
113
- </div>
114
- <div class="setting-item" style="margin-bottom: 20px;">
115
- <label style="display: block; margin-bottom: 8px; font-weight: 600; color: var(--text-secondary); font-size: 14px;">📧 邮箱</label>
116
- <input type="email" id="userEmail" value="\${user.email || ''}" placeholder="请输入邮箱地址" style="width: 100%; padding: 12px 16px; border: 2px solid var(--border); border-radius: 10px; font-size: 14px; transition: border-color 0.2s;">
117
- </div>
118
- <div class="setting-item">
119
- <label style="display: block; margin-bottom: 8px; font-weight: 600; color: var(--text-secondary); font-size: 14px;">🔐 密码</label>
120
- <button class="btn-secondary" id="changePasswordBtn" style="padding: 10px 20px; border-radius: 8px; font-weight: 600; transition: all 0.2s;">修改密码</button>
121
- </div>
122
- </div>
123
-
124
- <!-- 通知设置卡片 -->
125
- <div class="settings-card" style="background: var(--bg-secondary); padding: 28px; border-radius: 16px; border: 1px solid var(--border); box-shadow: 0 2px 8px rgba(0,0,0,0.05); transition: transform 0.2s, box-shadow 0.2s;">
126
- <div style="display: flex; align-items: center; gap: 12px; margin-bottom: 24px;">
127
- <div style="width: 48px; height: 48px; background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%); border-radius: 12px; display: flex; align-items: center; justify-content: center; font-size: 24px;">🔔</div>
128
- <h3 style="margin: 0; font-size: 20px; font-weight: 600;">通知设置</h3>
129
- </div>
130
- <div class="setting-item" style="margin-bottom: 16px;">
131
- <label style="display: flex; align-items: center; gap: 12px; cursor: pointer; padding: 12px; border-radius: 8px; transition: background 0.2s;" onmouseenter="this.style.background='var(--bg-tertiary)'" onmouseleave="this.style.background='transparent'">
132
- <input type="checkbox" id="emailNotifications" checked style="width: 20px; height: 20px; cursor: pointer;">
133
- <div>
134
- <div style="font-weight: 600; color: var(--text-primary);">📧 邮件通知</div>
135
- <div style="font-size: 12px; color: var(--text-tertiary); margin-top: 2px;">接收重要事件的邮件提醒</div>
136
- </div>
137
- </label>
138
- </div>
139
- <div class="setting-item" style="margin-bottom: 16px;">
140
- <label style="display: flex; align-items: center; gap: 12px; cursor: pointer; padding: 12px; border-radius: 8px; transition: background 0.2s;" onmouseenter="this.style.background='var(--bg-tertiary)'" onmouseleave="this.style.background='transparent'">
141
- <input type="checkbox" id="desktopNotifications" checked style="width: 20px; height: 20px; cursor: pointer;">
142
- <div>
143
- <div style="font-weight: 600; color: var(--text-primary);">🖥️ 桌面通知</div>
144
- <div style="font-size: 12px; color: var(--text-tertiary); margin-top: 2px;">在桌面显示通知消息</div>
145
- </div>
146
- </label>
147
- </div>
148
- <div class="setting-item">
149
- <label style="display: flex; align-items: center; gap: 12px; cursor: pointer; padding: 12px; border-radius: 8px; transition: background 0.2s;" onmouseenter="this.style.background='var(--bg-tertiary)'" onmouseleave="this.style.background='transparent'">
150
- <input type="checkbox" id="soundNotifications" checked style="width: 20px; height: 20px; cursor: pointer;">
151
- <div>
152
- <div style="font-weight: 600; color: var(--text-primary);">🔊 声音提示</div>
153
- <div style="font-size: 12px; color: var(--text-tertiary); margin-top: 2px;">播放通知提示音</div>
154
- </div>
155
- </label>
156
- </div>
157
- </div>
158
-
159
- <!-- 系统设置卡片 -->
160
- <div class="settings-card" style="background: var(--bg-secondary); padding: 28px; border-radius: 16px; border: 1px solid var(--border); box-shadow: 0 2px 8px rgba(0,0,0,0.05); transition: transform 0.2s, box-shadow 0.2s;">
161
- <div style="display: flex; align-items: center; gap: 12px; margin-bottom: 24px;">
162
- <div style="width: 48px; height: 48px; background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%); border-radius: 12px; display: flex; align-items: center; justify-content: center; font-size: 24px;">🎨</div>
163
- <h3 style="margin: 0; font-size: 20px; font-weight: 600;">系统设置</h3>
164
- </div>
165
- <div class="setting-item" style="margin-bottom: 20px;">
166
- <label style="display: block; margin-bottom: 8px; font-weight: 600; color: var(--text-secondary); font-size: 14px;">🎨 主题</label>
167
- <select id="themeSelect" style="width: 100%; padding: 12px 16px; border: 2px solid var(--border); border-radius: 10px; font-size: 14px; cursor: pointer; transition: border-color 0.2s;">
168
- <option value="light">☀️ 浅色模式</option>
169
- <option value="dark" selected>🌙 深色模式</option>
170
- <option value="auto">🔄 跟随系统</option>
171
- </select>
172
- </div>
173
- <div class="setting-item">
174
- <label style="display: block; margin-bottom: 8px; font-weight: 600; color: var(--text-secondary); font-size: 14px;">🌐 语言</label>
175
- <select id="languageSelect" style="width: 100%; padding: 12px 16px; border: 2px solid var(--border); border-radius: 10px; font-size: 14px; cursor: pointer; transition: border-color 0.2s;">
176
- <option value="zh-CN" selected>🇨🇳 简体中文</option>
177
- <option value="en-US">🇺🇸 English</option>
178
- <option value="ja-JP">🇯🇵 日本語</option>
179
- </select>
180
- </div>
181
- </div>
182
-
183
- <!-- 保存按钮 -->
184
- <div class="settings-actions" style="display: flex; gap: 12px; justify-content: flex-end;">
185
- <button class="btn-secondary" id="resetSettingsBtn" style="padding: 12px 24px; border-radius: 10px; font-weight: 600; transition: all 0.2s;">重置</button>
186
- <button class="btn-primary" id="saveSettingsBtn" style="padding: 12px 32px; border-radius: 10px; font-weight: 600; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); border: none; cursor: pointer; transition: transform 0.2s;">💾 保存设置</button>
187
- </div>
188
- </div>
189
- \`;
190
-
191
- // 添加卡片悬停效果
192
- document.querySelectorAll('.settings-card').forEach(card => {
193
- card.addEventListener('mouseenter', () => {
194
- card.style.transform = 'translateY(-4px)';
195
- card.style.boxShadow = '0 8px 24px rgba(0,0,0,0.12)';
196
- });
197
- card.addEventListener('mouseleave', () => {
198
- card.style.transform = 'translateY(0)';
199
- card.style.boxShadow = '0 2px 8px rgba(0,0,0,0.05)';
200
- });
201
- });
202
-
203
- // 输入框聚焦效果
204
- document.querySelectorAll('input[type="email"], select').forEach(input => {
205
- input.addEventListener('focus', () => {
206
- input.style.borderColor = 'var(--primary)';
207
- });
208
- input.addEventListener('blur', () => {
209
- input.style.borderColor = 'var(--border)';
210
- });
211
- });
212
-
213
- document.getElementById('changePasswordBtn').addEventListener('click', () => {
214
- const newPassword = prompt('请输入新密码:');
215
- if (newPassword) {
216
- alert('密码修改功能开发中...');
217
- }
218
- });
219
-
220
- document.getElementById('resetSettingsBtn').addEventListener('click', () => {
221
- if (confirm('确定要重置所有设置吗?')) {
222
- location.reload();
223
- }
224
- });
225
-
226
- document.getElementById('saveSettingsBtn').addEventListener('click', () => {
227
- const settings = {
228
- email: document.getElementById('userEmail').value,
229
- emailNotifications: document.getElementById('emailNotifications').checked,
230
- desktopNotifications: document.getElementById('desktopNotifications').checked,
231
- soundNotifications: document.getElementById('soundNotifications').checked,
232
- theme: document.getElementById('themeSelect').value,
233
- language: document.getElementById('languageSelect').value
234
- };
235
- localStorage.setItem('userSettings', JSON.stringify(settings));
236
- alert('✅ 设置已保存!');
237
- });
238
-
239
- // 加载保存的设置
240
- const savedSettings = localStorage.getItem('userSettings');
241
- if (savedSettings) {
242
- const settings = JSON.parse(savedSettings);
243
- if (settings.email) document.getElementById('userEmail').value = settings.email;
244
- document.getElementById('emailNotifications').checked = settings.emailNotifications !== false;
245
- document.getElementById('desktopNotifications').checked = settings.desktopNotifications !== false;
246
- document.getElementById('soundNotifications').checked = settings.soundNotifications !== false;
247
- if (settings.theme) document.getElementById('themeSelect').value = settings.theme;
248
- if (settings.language) document.getElementById('languageSelect').value = settings.language;
249
- }
250
- }`;
251
-
252
- content = content.replace(oldSettings, newSettings);
253
-
254
- console.log('写入文件...');
255
- fs.writeFileSync(filePath, content, 'utf8');
256
-
257
- console.log('✅ 设置页面已美化!');
258
-
259
-
260
-
@@ -1,38 +0,0 @@
1
- import fs from 'fs';
2
- import path from 'path';
3
- import { fileURLToPath } from 'url';
4
-
5
- const __filename = fileURLToPath(import.meta.url);
6
- const __dirname = path.dirname(__filename);
7
-
8
- const filePath = path.join(__dirname, '../src/pages/admin-dashboard.js');
9
-
10
- console.log('修复语法错误...');
11
- let content = fs.readFileSync(filePath, 'utf8');
12
-
13
- // 删除孤立的 aiInputText 相关代码
14
- const linesToRemove = [
15
- ` const input = document.getElementById('aiInputText');`,
16
- ` if (input) {`,
17
- ` input.addEventListener('keypress', (e) => {`,
18
- ` if (e.key === 'Enter' && !e.shiftKey) {`,
19
- ` e.preventDefault();`,
20
- ` document.getElementById('aiSendBtn').click();`,
21
- ` }`,
22
- ` });`,
23
- ` }`
24
- ];
25
-
26
- linesToRemove.forEach(line => {
27
- content = content.replace(line, '');
28
- });
29
-
30
- // 删除多余的空行
31
- content = content.replace(/\n\n\n+/g, '\n\n');
32
-
33
- fs.writeFileSync(filePath, content, 'utf8');
34
-
35
- console.log('✅ 语法错误已修复');
36
-
37
-
38
-
@@ -1,62 +0,0 @@
1
- import fs from 'fs';
2
- import path from 'path';
3
- import { fileURLToPath } from 'url';
4
-
5
- const __filename = fileURLToPath(import.meta.url);
6
- const __dirname = path.dirname(__filename);
7
-
8
- const filePath = path.join(__dirname, '../src/pages/user-dashboard.js');
9
-
10
- console.log('正在读取文件...');
11
- let content = fs.readFileSync(filePath, 'utf8');
12
-
13
- console.log('移除 Quill 导入...');
14
- // 移除 Quill 导入
15
- content = content.replace(/import Quill from 'quill';\r?\n/g, '');
16
- content = content.replace(/import 'quill\/dist\/quill\.snow\.css';\r?\n/g, '');
17
-
18
- console.log('查找并替换 Quill 编辑器代码...');
19
-
20
- // 查找 renderDocumentEditor 函数中的 Quill 代码
21
- // 替换编辑器 HTML 结构
22
- content = content.replace(
23
- /<div id="editor"><\/div>/g,
24
- '<textarea id="editor" style="width: 100%; min-height: 400px; padding: 10px; font-family: monospace; border: 1px solid #ddd; border-radius: 4px; resize: vertical;"></textarea>'
25
- );
26
-
27
- // 替换 Quill 初始化代码块
28
- const quillInitPattern = /\/\/ 初始化 Quill 编辑器[\s\S]*?const quill = new Quill\('#editor', \{[\s\S]*?\}\);[\s\S]*?\/\/ 设置初始内容[\s\S]*?quill\.root\.innerHTML = doc\.content \|\| '';/;
29
- const textareaInit = `// 使用原生 textarea
30
- const editor = document.getElementById('editor');
31
-
32
- // 设置初始内容
33
- editor.value = doc.content || '';`;
34
-
35
- content = content.replace(quillInitPattern, textareaInit);
36
-
37
- // 替换 quill.on('text-change' 为 editor.addEventListener('input'
38
- content = content.replace(
39
- /quill\.on\('text-change', \(\) => \{/g,
40
- "editor.addEventListener('input', () => {"
41
- );
42
-
43
- // 替换 quill.root.innerHTML 为 editor.value
44
- content = content.replace(/quill\.root\.innerHTML/g, 'editor.value');
45
-
46
- // 替换 quill.getSelection() 和 quill.setSelection() 的代码块
47
- const selectionPattern = /const selection = quill\.getSelection\(\);\s*quill\.root\.innerHTML = data\.content;\s*if \(selection\) \{\s*quill\.setSelection\(selection\);\s*\}/g;
48
- const textareaSelection = `const cursorPos = editor.selectionStart;
49
- editor.value = data.content;
50
- editor.setSelectionRange(cursorPos, cursorPos);`;
51
-
52
- content = content.replace(selectionPattern, textareaSelection);
53
-
54
- console.log('写入文件...');
55
- fs.writeFileSync(filePath, content, 'utf8');
56
-
57
- console.log('✅ 完成!已移除 Quill 依赖并替换为原生 textarea');
58
- console.log('📝 文件已保存,中文字符已保留');
59
-
60
-
61
-
62
-
@@ -1,112 +0,0 @@
1
- import fs from 'fs';
2
- import path from 'path';
3
- import { fileURLToPath } from 'url';
4
-
5
- const __filename = fileURLToPath(import.meta.url);
6
- const __dirname = path.dirname(__filename);
7
-
8
- const filePath = path.join(__dirname, '../src/pages/admin-dashboard.js');
9
-
10
- console.log('读取文件...');
11
- let content = fs.readFileSync(filePath, 'utf8');
12
-
13
- // 1. 替换工作流模态框,添加更多选项
14
- console.log('丰富工作流功能...');
15
- const oldWorkflowModal = ` <div id="workflowModal" class="modal hidden">
16
- <div class="modal-content">
17
- <h3>创建工作流</h3>
18
- <form id="workflowForm">
19
- <div class="form-group">
20
- <label>⚙️ 工作流名称</label>
21
- <input type="text" name="name" required style="width: 100%; padding: 10px; border: 1px solid var(--border); border-radius: 8px;">
22
- </div>
23
- <div class="form-group">
24
- <label>📝 描述</label>
25
- <textarea name="description" rows="3" style="width: 100%; padding: 10px; border: 1px solid var(--border); border-radius: 8px;"></textarea>
26
- </div>
27
- <div class="form-group">
28
- <label>🔔 触发条件</label>
29
- <select name="trigger" style="width: 100%; padding: 10px; border: 1px solid var(--border); border-radius: 8px;">
30
- <option value="document_create">文档创建时</option>
31
- <option value="document_update">文档更新时</option>
32
- <option value="task_complete">任务完成时</option>
33
- <option value="manual">手动触发</option>
34
- </select>
35
- </div>
36
- <div style="display: flex; gap: 10px; margin-top: 20px;">
37
- <button type="submit" class="btn-primary" style="flex: 1;">创建</button>
38
- <button type="button" class="btn-secondary" id="closeWorkflowModal" style="flex: 1;">取消</button>
39
- </div>
40
- </form>
41
- </div>
42
- </div>`;
43
-
44
- const newWorkflowModal = ` <div id="workflowModal" class="modal hidden">
45
- <div class="modal-content" style="max-width: 700px;">
46
- <div class="modal-header" style="background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%); color: white; padding: 20px; border-radius: 12px 12px 0 0; margin: -20px -20px 20px -20px;">
47
- <h3 style="margin: 0; display: flex; align-items: center; gap: 10px;">
48
- <span style="font-size: 24px;">⚙️</span>
49
- <span>创建工作流</span>
50
- </h3>
51
- </div>
52
- <form id="workflowForm">
53
- <div class="form-group" style="margin-bottom: 20px;">
54
- <label style="display: block; margin-bottom: 8px; font-weight: 600; color: var(--text-secondary);">⚙️ 工作流名称</label>
55
- <input type="text" name="name" required placeholder="例如:文档审批流程" style="width: 100%; padding: 12px; border: 2px solid var(--border); border-radius: 8px; font-size: 14px; transition: border-color 0.2s;">
56
- </div>
57
- <div class="form-group" style="margin-bottom: 20px;">
58
- <label style="display: block; margin-bottom: 8px; font-weight: 600; color: var(--text-secondary);">📝 描述</label>
59
- <textarea name="description" rows="3" placeholder="描述这个工作流的用途..." style="width: 100%; padding: 12px; border: 2px solid var(--border); border-radius: 8px; font-size: 14px; resize: vertical; transition: border-color 0.2s;"></textarea>
60
- </div>
61
- <div class="form-group" style="margin-bottom: 20px;">
62
- <label style="display: block; margin-bottom: 8px; font-weight: 600; color: var(--text-secondary);">⚡ 触发条件</label>
63
- <select name="trigger" style="width: 100%; padding: 12px; border: 2px solid var(--border); border-radius: 8px; font-size: 14px; cursor: pointer; transition: border-color 0.2s;">
64
- <option value="document_create">📄 文档创建时</option>
65
- <option value="document_update">✏️ 文档更新时</option>
66
- <option value="document_delete">🗑️ 文档删除时</option>
67
- <option value="task_create">📋 任务创建时</option>
68
- <option value="task_complete">✅ 任务完成时</option>
69
- <option value="task_overdue">⏰ 任务逾期时</option>
70
- <option value="member_join">👥 成员加入时</option>
71
- <option value="group_create">🏢 群组创建时</option>
72
- <option value="scheduled">⏱️ 定时触发</option>
73
- <option value="manual">🖱️ 手动触发</option>
74
- </select>
75
- </div>
76
- <div class="form-group" style="margin-bottom: 20px;">
77
- <label style="display: block; margin-bottom: 8px; font-weight: 600; color: var(--text-secondary);">🎯 执行操作</label>
78
- <select name="action" style="width: 100%; padding: 12px; border: 2px solid var(--border); border-radius: 8px; font-size: 14px; cursor: pointer; transition: border-color 0.2s;">
79
- <option value="send_notification">📧 发送通知</option>
80
- <option value="send_email">✉️ 发送邮件</option>
81
- <option value="create_task">📋 创建任务</option>
82
- <option value="update_status">🔄 更新状态</option>
83
- <option value="assign_permission">🔐 分配权限</option>
84
- <option value="backup_data">💾 备份数据</option>
85
- <option value="generate_report">📊 生成报告</option>
86
- <option value="call_api">🔗 调用外部API</option>
87
- </select>
88
- </div>
89
- <div class="form-group" style="margin-bottom: 20px;">
90
- <label style="display: block; margin-bottom: 8px; font-weight: 600; color: var(--text-secondary);">⚙️ 操作参数 (JSON格式)</label>
91
- <textarea name="actionParams" rows="4" placeholder='{"message": "任务已完成", "recipients": ["user1"]}' style="width: 100%; padding: 12px; border: 2px solid var(--border); border-radius: 8px; font-size: 13px; font-family: monospace; resize: vertical; transition: border-color 0.2s;"></textarea>
92
- <div style="margin-top: 8px; font-size: 12px; color: var(--text-tertiary);">
93
- 💡 提示:使用 JSON 格式配置操作参数
94
- </div>
95
- </div>
96
- <div style="display: flex; gap: 12px; margin-top: 25px;">
97
- <button type="submit" class="btn-primary" style="flex: 1; padding: 12px; border-radius: 8px; font-weight: 600; background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%); border: none; cursor: pointer; transition: transform 0.2s;">创建</button>
98
- <button type="button" class="btn-secondary" id="closeWorkflowModal" style="flex: 1; padding: 12px; border-radius: 8px; font-weight: 600;">取消</button>
99
- </div>
100
- </form>
101
- </div>
102
- </div>`;
103
-
104
- content = content.replace(oldWorkflowModal, newWorkflowModal);
105
-
106
- console.log('写入文件...');
107
- fs.writeFileSync(filePath, content, 'utf8');
108
-
109
- console.log('✅ 工作流功能已丰富!');
110
-
111
-
112
-
@@ -1,34 +0,0 @@
1
- import fs from 'fs';
2
- import path from 'path';
3
- import { fileURLToPath } from 'url';
4
-
5
- const __filename = fileURLToPath(import.meta.url);
6
- const __dirname = path.dirname(__filename);
7
-
8
- const filePath = path.join(__dirname, '../src/pages/admin-dashboard.js');
9
-
10
- console.log('读取文件...');
11
- let content = fs.readFileSync(filePath, 'utf8');
12
-
13
- // 1. 从导航菜单中删除 AI助手、数据导出、协作白板、集成管理
14
- console.log('删除菜单项...');
15
- content = content.replace(/<button class="nav-item" data-view="ai">[\s\S]*?AI助手[\s\S]*?<\/button>\s*/g, '');
16
- content = content.replace(/<button class="nav-item" data-view="export">[\s\S]*?数据导出[\s\S]*?<\/button>\s*/g, '');
17
- content = content.replace(/<button class="nav-item" data-view="whiteboard">[\s\S]*?协作白板[\s\S]*?<\/button>\s*/g, '');
18
- content = content.replace(/<button class="nav-item" data-view="integrations">[\s\S]*?集成管理[\s\S]*?<\/button>\s*/g, '');
19
-
20
- // 2. 从 switch 语句中删除对应的 case
21
- console.log('删除 switch case...');
22
- content = content.replace(/case 'integrations':[\s\S]*?await renderIntegrationsView\(contentArea\);[\s\S]*?break;\s*/g, '');
23
-
24
- // 3. 删除 renderIntegrationsView 函数
25
- console.log('删除集成管理函数...');
26
- content = content.replace(/\/\/ 集成管理[\s\S]*?async function renderIntegrationsView\(container\)[\s\S]*?}\s*}\s*;[\s\S]*?}\s*}\s*;/g, '');
27
-
28
- console.log('写入文件...');
29
- fs.writeFileSync(filePath, content, 'utf8');
30
-
31
- console.log('✅ 第一步完成!已删除不需要的菜单项');
32
-
33
-
34
-