@qnote/q-ai-note 1.0.14 → 1.0.16
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/dist/server/api/sandbox.d.ts.map +1 -1
- package/dist/server/api/sandbox.js +299 -0
- package/dist/server/api/sandbox.js.map +1 -1
- package/dist/web/app.js +138 -22
- package/dist/web/index.html +20 -16
- package/dist/web/vueRenderers.js +25 -16
- package/package.json +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../../src/server/api/sandbox.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../../src/server/api/sandbox.ts"],"names":[],"mappings":"AASA,QAAA,MAAM,MAAM,4CAAW,CAAC;AAosBxB,eAAe,MAAM,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Router } from 'express';
|
|
2
2
|
import { v4 as uuidv4 } from 'uuid';
|
|
3
|
+
import * as XLSX from 'xlsx';
|
|
3
4
|
import { db } from '../db.js';
|
|
4
5
|
import { canCreateSandbox, canReadSandbox, canWriteSandbox } from '../accessControl.js';
|
|
5
6
|
import { forbid, getAccessContextFromResponse, ensurePageAccess } from './accessHelpers.js';
|
|
@@ -20,6 +21,254 @@ function isHttpUrl(value) {
|
|
|
20
21
|
function toBool(value) {
|
|
21
22
|
return value === true || value === 1 || value === '1';
|
|
22
23
|
}
|
|
24
|
+
function safeParseObject(value) {
|
|
25
|
+
if (value && typeof value === 'object')
|
|
26
|
+
return value;
|
|
27
|
+
if (typeof value === 'string' && value.trim()) {
|
|
28
|
+
try {
|
|
29
|
+
const parsed = JSON.parse(value);
|
|
30
|
+
if (parsed && typeof parsed === 'object')
|
|
31
|
+
return parsed;
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// Ignore invalid JSON content and fallback to empty object.
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return {};
|
|
38
|
+
}
|
|
39
|
+
function toMarkdownPlainText(value) {
|
|
40
|
+
return String(value || '').replace(/\r\n/g, '\n').trim();
|
|
41
|
+
}
|
|
42
|
+
function parseMarkdownExportWorkItem(row) {
|
|
43
|
+
return {
|
|
44
|
+
id: String(row.id || ''),
|
|
45
|
+
parent_id: row.parent_id === null ? null : String(row.parent_id || ''),
|
|
46
|
+
name: String(row.name || '').trim(),
|
|
47
|
+
description: String(row.description || '').trim(),
|
|
48
|
+
assignee: String(row.assignee || '').trim(),
|
|
49
|
+
status: String(row.status || 'pending').trim() || 'pending',
|
|
50
|
+
priority: String(row.priority || 'medium').trim() || 'medium',
|
|
51
|
+
extra_data: safeParseObject(row.extra_data),
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function sanitizeFileName(rawName) {
|
|
55
|
+
const normalized = String(rawName || '').trim() || 'sandbox';
|
|
56
|
+
return normalized
|
|
57
|
+
.replace(/[\\/:*?"<>|]/g, '-')
|
|
58
|
+
.replace(/\s+/g, '-')
|
|
59
|
+
.replace(/-+/g, '-')
|
|
60
|
+
.replace(/^-|-$/g, '')
|
|
61
|
+
.slice(0, 64) || 'sandbox';
|
|
62
|
+
}
|
|
63
|
+
function toAsciiFilename(rawFileName, fallbackExt = '.txt') {
|
|
64
|
+
const normalized = String(rawFileName || `sandbox${fallbackExt}`)
|
|
65
|
+
.replace(/[^\x20-\x7E]/g, '-')
|
|
66
|
+
.replace(/["\\]/g, '')
|
|
67
|
+
.replace(/\s+/g, '-')
|
|
68
|
+
.replace(/-+/g, '-')
|
|
69
|
+
.replace(/^-|-$/g, '');
|
|
70
|
+
const withExt = normalized.endsWith(fallbackExt) ? normalized : `${normalized}${fallbackExt}`;
|
|
71
|
+
return withExt === fallbackExt ? `sandbox${fallbackExt}` : withExt;
|
|
72
|
+
}
|
|
73
|
+
function buildSandboxMarkdownExport(sandboxId) {
|
|
74
|
+
const sandbox = db.prepare('SELECT * FROM sandboxes WHERE id = ?').get(sandboxId);
|
|
75
|
+
if (!sandbox)
|
|
76
|
+
return null;
|
|
77
|
+
const workItems = db.prepare('SELECT * FROM work_items WHERE sandbox_id = ? ORDER BY created_at ASC').all(sandboxId);
|
|
78
|
+
const parsedItems = workItems.map(parseMarkdownExportWorkItem);
|
|
79
|
+
const nodeEntities = listNodeEntities({ sandbox_id: sandboxId })
|
|
80
|
+
.sort((a, b) => String(a.created_at || '').localeCompare(String(b.created_at || '')));
|
|
81
|
+
const diaries = db.prepare('SELECT * FROM diaries WHERE 1=1 AND sandbox_id = ? ORDER BY created_at ASC').all(sandboxId);
|
|
82
|
+
const childrenByParent = new Map();
|
|
83
|
+
const entitiesByWorkItem = new Map();
|
|
84
|
+
const diariesByWorkItem = new Map();
|
|
85
|
+
const rootKey = '__root__';
|
|
86
|
+
parsedItems.forEach((item) => {
|
|
87
|
+
const key = item.parent_id || rootKey;
|
|
88
|
+
if (!childrenByParent.has(key))
|
|
89
|
+
childrenByParent.set(key, []);
|
|
90
|
+
childrenByParent.get(key)?.push(item);
|
|
91
|
+
});
|
|
92
|
+
nodeEntities.forEach((entity) => {
|
|
93
|
+
const key = String(entity.work_item_id || '');
|
|
94
|
+
if (!key)
|
|
95
|
+
return;
|
|
96
|
+
if (!entitiesByWorkItem.has(key))
|
|
97
|
+
entitiesByWorkItem.set(key, []);
|
|
98
|
+
entitiesByWorkItem.get(key)?.push(entity);
|
|
99
|
+
});
|
|
100
|
+
diaries.forEach((row) => {
|
|
101
|
+
const key = String(row.work_item_id || '').trim();
|
|
102
|
+
if (!key)
|
|
103
|
+
return;
|
|
104
|
+
if (!diariesByWorkItem.has(key))
|
|
105
|
+
diariesByWorkItem.set(key, []);
|
|
106
|
+
diariesByWorkItem.get(key)?.push(row);
|
|
107
|
+
});
|
|
108
|
+
const lines = [];
|
|
109
|
+
if (sandbox.description) {
|
|
110
|
+
lines.push(toMarkdownPlainText(sandbox.description));
|
|
111
|
+
lines.push('');
|
|
112
|
+
}
|
|
113
|
+
const appendItem = (item, depth) => {
|
|
114
|
+
const headingLevel = depth;
|
|
115
|
+
const isDirectoryLevel = depth <= 3;
|
|
116
|
+
const indent = ' '.repeat(Math.max(0, depth - 4));
|
|
117
|
+
const todo = safeParseObject(item.extra_data.todo);
|
|
118
|
+
const todoStart = String(todo.planned_start_date || item.extra_data.planned_start_date || '').trim();
|
|
119
|
+
const todoDue = String(todo.due_date || item.extra_data.due_date || '').trim();
|
|
120
|
+
const metaParts = [
|
|
121
|
+
`状态: ${item.status || '-'}`,
|
|
122
|
+
`优先级: ${item.priority || '-'}`,
|
|
123
|
+
`负责人: ${item.assignee || '-'}`,
|
|
124
|
+
];
|
|
125
|
+
if (todoStart || todoDue) {
|
|
126
|
+
metaParts.push(`计划启动: ${todoStart || '-'}`);
|
|
127
|
+
metaParts.push(`截止: ${todoDue || '-'}`);
|
|
128
|
+
}
|
|
129
|
+
if (isDirectoryLevel) {
|
|
130
|
+
lines.push(`${'#'.repeat(Math.min(6, headingLevel))} ${item.name || '未命名工作项'}`);
|
|
131
|
+
lines.push('');
|
|
132
|
+
lines.push(`- ${metaParts.join(' | ')}`);
|
|
133
|
+
if (item.description) {
|
|
134
|
+
lines.push(`- 描述: ${toMarkdownPlainText(item.description)}`);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
lines.push(`${indent}- **${item.name || '未命名工作项'}**(L${depth})`);
|
|
139
|
+
lines.push(`${indent} - ${metaParts.join(' | ')}`);
|
|
140
|
+
if (item.description) {
|
|
141
|
+
lines.push(`${indent} - 描述: ${toMarkdownPlainText(item.description)}`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
const entities = entitiesByWorkItem.get(item.id) || [];
|
|
145
|
+
if (entities.length) {
|
|
146
|
+
if (isDirectoryLevel) {
|
|
147
|
+
lines.push('- 关联记录:');
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
lines.push(`${indent} - 关联记录:`);
|
|
151
|
+
}
|
|
152
|
+
entities.forEach((entity) => {
|
|
153
|
+
const entityType = String(entity.entity_type || '').trim() || 'record';
|
|
154
|
+
const title = String(entity.title || '').trim() || '未命名记录';
|
|
155
|
+
const status = String(entity.status || '').trim();
|
|
156
|
+
const assignee = String(entity.assignee || '').trim();
|
|
157
|
+
const dueDate = String(entity.due_date || '').trim();
|
|
158
|
+
const details = [status ? `状态 ${status}` : '', assignee ? `负责人 ${assignee}` : '', dueDate ? `截止 ${dueDate}` : '']
|
|
159
|
+
.filter(Boolean)
|
|
160
|
+
.join(' | ');
|
|
161
|
+
const prefix = isDirectoryLevel ? ' ' : `${indent} `;
|
|
162
|
+
lines.push(`${prefix}- [${entityType}] ${title}${details ? `(${details})` : ''}`);
|
|
163
|
+
const contentMd = toMarkdownPlainText(entity.content_md);
|
|
164
|
+
if (contentMd) {
|
|
165
|
+
lines.push(`${prefix} - 内容: ${contentMd}`);
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
const itemDiaries = diariesByWorkItem.get(item.id) || [];
|
|
170
|
+
if (itemDiaries.length) {
|
|
171
|
+
if (isDirectoryLevel) {
|
|
172
|
+
lines.push('- 关联日记:');
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
lines.push(`${indent} - 关联日记:`);
|
|
176
|
+
}
|
|
177
|
+
itemDiaries.forEach((row) => {
|
|
178
|
+
const createdAt = String(row.created_at || '').trim();
|
|
179
|
+
const diaryContent = toMarkdownPlainText(row.content);
|
|
180
|
+
const firstLine = diaryContent.split('\n')[0] || '';
|
|
181
|
+
const prefix = isDirectoryLevel ? ' ' : `${indent} `;
|
|
182
|
+
lines.push(`${prefix}- ${createdAt || '-'} ${firstLine}`.trim());
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
lines.push('');
|
|
186
|
+
const children = childrenByParent.get(item.id) || [];
|
|
187
|
+
children.forEach((child) => appendItem(child, depth + 1));
|
|
188
|
+
};
|
|
189
|
+
const roots = childrenByParent.get(rootKey) || [];
|
|
190
|
+
roots.forEach((item) => appendItem(item, 1));
|
|
191
|
+
if (!roots.length) {
|
|
192
|
+
lines.push('_当前沙盘暂无工作项_');
|
|
193
|
+
}
|
|
194
|
+
return {
|
|
195
|
+
filename: `${sanitizeFileName(sandbox.name)}.md`,
|
|
196
|
+
content: `${lines.join('\n').trim()}\n`,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
function buildSandboxExcelExport(sandboxId) {
|
|
200
|
+
const sandbox = db.prepare('SELECT * FROM sandboxes WHERE id = ?').get(sandboxId);
|
|
201
|
+
if (!sandbox)
|
|
202
|
+
return null;
|
|
203
|
+
const workItems = db.prepare('SELECT * FROM work_items WHERE sandbox_id = ? ORDER BY created_at ASC').all(sandboxId);
|
|
204
|
+
const parsedItems = workItems.map(parseMarkdownExportWorkItem);
|
|
205
|
+
const nodeEntities = listNodeEntities({ sandbox_id: sandboxId })
|
|
206
|
+
.sort((a, b) => String(a.created_at || '').localeCompare(String(b.created_at || '')));
|
|
207
|
+
const diaries = db.prepare('SELECT * FROM diaries WHERE 1=1 AND sandbox_id = ? ORDER BY created_at ASC').all(sandboxId);
|
|
208
|
+
const childrenByParent = new Map();
|
|
209
|
+
const entitiesByWorkItem = new Map();
|
|
210
|
+
const diariesByWorkItem = new Map();
|
|
211
|
+
const rootKey = '__root__';
|
|
212
|
+
parsedItems.forEach((item) => {
|
|
213
|
+
const key = item.parent_id || rootKey;
|
|
214
|
+
if (!childrenByParent.has(key))
|
|
215
|
+
childrenByParent.set(key, []);
|
|
216
|
+
childrenByParent.get(key)?.push(item);
|
|
217
|
+
});
|
|
218
|
+
nodeEntities.forEach((entity) => {
|
|
219
|
+
const key = String(entity.work_item_id || '');
|
|
220
|
+
if (!key)
|
|
221
|
+
return;
|
|
222
|
+
if (!entitiesByWorkItem.has(key))
|
|
223
|
+
entitiesByWorkItem.set(key, []);
|
|
224
|
+
entitiesByWorkItem.get(key)?.push(entity);
|
|
225
|
+
});
|
|
226
|
+
diaries.forEach((row) => {
|
|
227
|
+
const key = String(row.work_item_id || '').trim();
|
|
228
|
+
if (!key)
|
|
229
|
+
return;
|
|
230
|
+
if (!diariesByWorkItem.has(key))
|
|
231
|
+
diariesByWorkItem.set(key, []);
|
|
232
|
+
diariesByWorkItem.get(key)?.push(row);
|
|
233
|
+
});
|
|
234
|
+
const rows = [];
|
|
235
|
+
rows.push(['层级', '类型', '标题', '状态', '优先级', '负责人', '计划启动', '截止日期', '内容']);
|
|
236
|
+
const appendRow = (level, type, title, status = '', priority = '', assignee = '', plannedStart = '', dueDate = '', content = '') => {
|
|
237
|
+
const indentedTitle = `${' '.repeat(Math.max(0, level - 1))}${title}`;
|
|
238
|
+
rows.push([level, type, indentedTitle, status, priority, assignee, plannedStart, dueDate, content]);
|
|
239
|
+
};
|
|
240
|
+
const appendItem = (item, depth) => {
|
|
241
|
+
const todo = safeParseObject(item.extra_data.todo);
|
|
242
|
+
const plannedStart = String(todo.planned_start_date || item.extra_data.planned_start_date || '').trim();
|
|
243
|
+
const dueDate = String(todo.due_date || item.extra_data.due_date || '').trim();
|
|
244
|
+
appendRow(depth, 'work_item', item.name || '未命名工作项', item.status || '-', item.priority || '-', item.assignee || '-', plannedStart, dueDate, item.description || '');
|
|
245
|
+
const entities = entitiesByWorkItem.get(item.id) || [];
|
|
246
|
+
entities.forEach((entity) => {
|
|
247
|
+
appendRow(depth + 1, String(entity.entity_type || 'record'), String(entity.title || '未命名记录'), String(entity.status || ''), String(entity.priority || ''), String(entity.assignee || ''), '', String(entity.due_date || ''), toMarkdownPlainText(entity.content_md));
|
|
248
|
+
});
|
|
249
|
+
const itemDiaries = diariesByWorkItem.get(item.id) || [];
|
|
250
|
+
itemDiaries.forEach((row) => {
|
|
251
|
+
const createdAt = String(row.created_at || '').trim();
|
|
252
|
+
const diaryContent = toMarkdownPlainText(row.content);
|
|
253
|
+
appendRow(depth + 1, 'diary', createdAt || '日记', '', '', '', '', '', diaryContent);
|
|
254
|
+
});
|
|
255
|
+
const children = childrenByParent.get(item.id) || [];
|
|
256
|
+
children.forEach((child) => appendItem(child, depth + 1));
|
|
257
|
+
};
|
|
258
|
+
const roots = childrenByParent.get(rootKey) || [];
|
|
259
|
+
roots.forEach((item) => appendItem(item, 1));
|
|
260
|
+
if (!roots.length) {
|
|
261
|
+
appendRow(1, 'work_item', '当前沙盘暂无工作项');
|
|
262
|
+
}
|
|
263
|
+
const sheet = XLSX.utils.aoa_to_sheet(rows);
|
|
264
|
+
const workbook = XLSX.utils.book_new();
|
|
265
|
+
XLSX.utils.book_append_sheet(workbook, sheet, 'Sandbox');
|
|
266
|
+
const arrayBuffer = XLSX.write(workbook, { bookType: 'xlsx', type: 'buffer' });
|
|
267
|
+
return {
|
|
268
|
+
filename: `${sanitizeFileName(sandbox.name)}.xlsx`,
|
|
269
|
+
buffer: Buffer.isBuffer(arrayBuffer) ? arrayBuffer : Buffer.from(arrayBuffer),
|
|
270
|
+
};
|
|
271
|
+
}
|
|
23
272
|
function buildSandboxCopyPayload(sandboxId) {
|
|
24
273
|
const sandbox = db.prepare('SELECT * FROM sandboxes WHERE id = ?').get(sandboxId);
|
|
25
274
|
if (!sandbox)
|
|
@@ -193,6 +442,56 @@ router.get('/:id/copy-payload', (req, res) => {
|
|
|
193
442
|
res.status(500).json(response);
|
|
194
443
|
}
|
|
195
444
|
});
|
|
445
|
+
router.get('/:id/export-markdown', (req, res) => {
|
|
446
|
+
try {
|
|
447
|
+
if (!ensurePageAccess(res, 'sandboxes')) {
|
|
448
|
+
return forbid(res, 'No permission to export sandbox markdown');
|
|
449
|
+
}
|
|
450
|
+
const access = getAccessContextFromResponse(res);
|
|
451
|
+
if (!canReadSandbox(access, req.params.id)) {
|
|
452
|
+
return forbid(res, 'No permission to export sandbox markdown');
|
|
453
|
+
}
|
|
454
|
+
const payload = buildSandboxMarkdownExport(req.params.id);
|
|
455
|
+
if (!payload) {
|
|
456
|
+
const response = { success: false, error: 'Sandbox not found' };
|
|
457
|
+
return res.status(404).json(response);
|
|
458
|
+
}
|
|
459
|
+
const asciiFilename = toAsciiFilename(payload.filename, '.md');
|
|
460
|
+
const encodedUtf8Filename = encodeURIComponent(payload.filename);
|
|
461
|
+
res.setHeader('Content-Type', 'text/markdown; charset=utf-8');
|
|
462
|
+
res.setHeader('Content-Disposition', `attachment; filename="${asciiFilename}"; filename*=UTF-8''${encodedUtf8Filename}`);
|
|
463
|
+
res.send(payload.content);
|
|
464
|
+
}
|
|
465
|
+
catch (error) {
|
|
466
|
+
const response = { success: false, error: String(error) };
|
|
467
|
+
res.status(500).json(response);
|
|
468
|
+
}
|
|
469
|
+
});
|
|
470
|
+
router.get('/:id/export-excel', (req, res) => {
|
|
471
|
+
try {
|
|
472
|
+
if (!ensurePageAccess(res, 'sandboxes')) {
|
|
473
|
+
return forbid(res, 'No permission to export sandbox excel');
|
|
474
|
+
}
|
|
475
|
+
const access = getAccessContextFromResponse(res);
|
|
476
|
+
if (!canReadSandbox(access, req.params.id)) {
|
|
477
|
+
return forbid(res, 'No permission to export sandbox excel');
|
|
478
|
+
}
|
|
479
|
+
const payload = buildSandboxExcelExport(req.params.id);
|
|
480
|
+
if (!payload) {
|
|
481
|
+
const response = { success: false, error: 'Sandbox not found' };
|
|
482
|
+
return res.status(404).json(response);
|
|
483
|
+
}
|
|
484
|
+
const asciiFilename = toAsciiFilename(payload.filename, '.xlsx');
|
|
485
|
+
const encodedUtf8Filename = encodeURIComponent(payload.filename);
|
|
486
|
+
res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
|
|
487
|
+
res.setHeader('Content-Disposition', `attachment; filename="${asciiFilename}"; filename*=UTF-8''${encodedUtf8Filename}`);
|
|
488
|
+
res.send(payload.buffer);
|
|
489
|
+
}
|
|
490
|
+
catch (error) {
|
|
491
|
+
const response = { success: false, error: String(error) };
|
|
492
|
+
res.status(500).json(response);
|
|
493
|
+
}
|
|
494
|
+
});
|
|
196
495
|
router.post('/:id/copy-link', (req, res) => {
|
|
197
496
|
try {
|
|
198
497
|
if (!ensurePageAccess(res, 'sandboxes')) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../../src/server/api/sandbox.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../../src/server/api/sandbox.ts"],"names":[],"mappings":"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"}
|
package/dist/web/app.js
CHANGED
|
@@ -1545,15 +1545,26 @@ function ensureMermaidRuntime() {
|
|
|
1545
1545
|
}
|
|
1546
1546
|
if (mermaidLoadPromise) return mermaidLoadPromise;
|
|
1547
1547
|
mermaidLoadPromise = new Promise((resolve, reject) => {
|
|
1548
|
+
const timeoutId = window.setTimeout(() => {
|
|
1549
|
+
reject(new Error('Mermaid script load timeout'));
|
|
1550
|
+
}, 2000);
|
|
1551
|
+
const finalizeResolve = () => {
|
|
1552
|
+
window.clearTimeout(timeoutId);
|
|
1553
|
+
resolve(window.mermaid);
|
|
1554
|
+
};
|
|
1555
|
+
const finalizeReject = (error) => {
|
|
1556
|
+
window.clearTimeout(timeoutId);
|
|
1557
|
+
reject(error);
|
|
1558
|
+
};
|
|
1548
1559
|
const existing = document.querySelector('script[data-mermaid-runtime="1"]');
|
|
1549
1560
|
if (existing) {
|
|
1550
1561
|
existing.addEventListener('load', () => {
|
|
1551
1562
|
if (window.mermaid && typeof window.mermaid.initialize === 'function') {
|
|
1552
1563
|
window.mermaid.initialize({ startOnLoad: false, securityLevel: 'strict' });
|
|
1553
1564
|
}
|
|
1554
|
-
|
|
1565
|
+
finalizeResolve();
|
|
1555
1566
|
}, { once: true });
|
|
1556
|
-
existing.addEventListener('error', () =>
|
|
1567
|
+
existing.addEventListener('error', () => finalizeReject(new Error('Mermaid script load failed')), { once: true });
|
|
1557
1568
|
return;
|
|
1558
1569
|
}
|
|
1559
1570
|
const script = document.createElement('script');
|
|
@@ -1564,11 +1575,15 @@ function ensureMermaidRuntime() {
|
|
|
1564
1575
|
if (window.mermaid && typeof window.mermaid.initialize === 'function') {
|
|
1565
1576
|
window.mermaid.initialize({ startOnLoad: false, securityLevel: 'strict' });
|
|
1566
1577
|
}
|
|
1567
|
-
|
|
1578
|
+
finalizeResolve();
|
|
1568
1579
|
}, { once: true });
|
|
1569
|
-
script.addEventListener('error', () =>
|
|
1580
|
+
script.addEventListener('error', () => finalizeReject(new Error('Mermaid script load failed')), { once: true });
|
|
1570
1581
|
document.head.appendChild(script);
|
|
1571
1582
|
});
|
|
1583
|
+
mermaidLoadPromise = mermaidLoadPromise.catch((error) => {
|
|
1584
|
+
mermaidLoadPromise = null;
|
|
1585
|
+
throw error;
|
|
1586
|
+
});
|
|
1572
1587
|
return mermaidLoadPromise;
|
|
1573
1588
|
}
|
|
1574
1589
|
|
|
@@ -1733,6 +1748,14 @@ function getNodeDiariesByNodeId(nodeId) {
|
|
|
1733
1748
|
return (state.currentSandbox?.diaries || []).filter((row) => row.work_item_id === nodeId);
|
|
1734
1749
|
}
|
|
1735
1750
|
|
|
1751
|
+
function getEntityTypeLabel(type) {
|
|
1752
|
+
const normalized = String(type || '').trim().toLowerCase();
|
|
1753
|
+
if (normalized === 'issue') return '问题';
|
|
1754
|
+
if (normalized === 'knowledge') return '知识';
|
|
1755
|
+
if (normalized === 'capability') return '能力';
|
|
1756
|
+
return String(type || '');
|
|
1757
|
+
}
|
|
1758
|
+
|
|
1736
1759
|
function closeNodeEntityDrawer() {
|
|
1737
1760
|
const drawer = document.getElementById('node-entity-drawer');
|
|
1738
1761
|
if (!drawer) return;
|
|
@@ -1776,10 +1799,10 @@ function renderNodeEntitySummary(nodeId) {
|
|
|
1776
1799
|
const todos = getNodeTodoItems(nodeId);
|
|
1777
1800
|
const openIssues = issues.filter((row) => row.status === 'open' || row.status === 'in_progress' || row.status === 'blocked').length;
|
|
1778
1801
|
container.innerHTML = `
|
|
1779
|
-
<div class="summary-card"><div class="label"
|
|
1780
|
-
<div class="summary-card"><div class="label"
|
|
1781
|
-
<div class="summary-card"><div class="label"
|
|
1782
|
-
<div class="summary-card"><div class="label"
|
|
1802
|
+
<div class="summary-card"><div class="label">问题</div><div class="value">${issues.length}</div></div>
|
|
1803
|
+
<div class="summary-card"><div class="label">开放问题</div><div class="value">${openIssues}</div></div>
|
|
1804
|
+
<div class="summary-card"><div class="label">知识</div><div class="value">${knowledges.length}</div></div>
|
|
1805
|
+
<div class="summary-card"><div class="label">能力</div><div class="value">${capabilities.length}</div></div>
|
|
1783
1806
|
<div class="summary-card"><div class="label">Todo</div><div class="value">${todos.length}</div></div>
|
|
1784
1807
|
<div class="summary-card"><div class="label">Diary</div><div class="value">${diaries.length}</div></div>
|
|
1785
1808
|
`;
|
|
@@ -1875,7 +1898,7 @@ function renderNodeEntityList(nodeId) {
|
|
|
1875
1898
|
<div class="entity-card">
|
|
1876
1899
|
<div class="entity-card-header">
|
|
1877
1900
|
<div>
|
|
1878
|
-
<span class="entity-type-pill">${safeText(row.entity_type)}</span>
|
|
1901
|
+
<span class="entity-type-pill">${safeText(getEntityTypeLabel(row.entity_type))}</span>
|
|
1879
1902
|
<strong>${safeText(row.title || '-')}</strong>
|
|
1880
1903
|
</div>
|
|
1881
1904
|
${state.readonly ? '' : `
|
|
@@ -2100,7 +2123,7 @@ function getStatusOptionsByEntityType(entityType) {
|
|
|
2100
2123
|
}
|
|
2101
2124
|
if (entityType === 'issue') {
|
|
2102
2125
|
return [
|
|
2103
|
-
{ value: '', label: '
|
|
2126
|
+
{ value: '', label: '状态(问题,默认 open)' },
|
|
2104
2127
|
{ value: 'open', label: 'open' },
|
|
2105
2128
|
{ value: 'in_progress', label: 'in_progress' },
|
|
2106
2129
|
{ value: 'blocked', label: 'blocked' },
|
|
@@ -2110,12 +2133,12 @@ function getStatusOptionsByEntityType(entityType) {
|
|
|
2110
2133
|
}
|
|
2111
2134
|
if (entityType === 'capability') {
|
|
2112
2135
|
return [
|
|
2113
|
-
{ value: '', label: '
|
|
2136
|
+
{ value: '', label: '状态(能力,默认 building)' },
|
|
2114
2137
|
{ value: 'building', label: 'building' },
|
|
2115
2138
|
{ value: 'ready', label: 'ready' },
|
|
2116
2139
|
];
|
|
2117
2140
|
}
|
|
2118
|
-
return [{ value: '', label: '
|
|
2141
|
+
return [{ value: '', label: '无状态(知识)' }];
|
|
2119
2142
|
}
|
|
2120
2143
|
|
|
2121
2144
|
function applyEntityFormMode() {
|
|
@@ -2148,10 +2171,10 @@ function applyEntityFormMode() {
|
|
|
2148
2171
|
hint.textContent = type === 'todo'
|
|
2149
2172
|
? 'Todo 将作为当前节点子任务创建。'
|
|
2150
2173
|
: type === 'issue'
|
|
2151
|
-
? '
|
|
2174
|
+
? '问题推荐填写状态/优先级/负责人。'
|
|
2152
2175
|
: type === 'knowledge'
|
|
2153
|
-
? '
|
|
2154
|
-
: '
|
|
2176
|
+
? '知识可仅保存链接或少量 Markdown。'
|
|
2177
|
+
: '能力建议填写能力类型与简述。';
|
|
2155
2178
|
}
|
|
2156
2179
|
}
|
|
2157
2180
|
|
|
@@ -2398,7 +2421,7 @@ function renderSandboxes() {
|
|
|
2398
2421
|
onOpen: (id) => {
|
|
2399
2422
|
window.location.hash = `/sandbox/${id}`;
|
|
2400
2423
|
},
|
|
2401
|
-
onEdit: (
|
|
2424
|
+
onEdit: (id) => {
|
|
2402
2425
|
const current = state.sandboxes.find((sandbox) => sandbox.id === id);
|
|
2403
2426
|
if (!current) return;
|
|
2404
2427
|
const dialog = document.getElementById('sandbox-dialog');
|
|
@@ -2412,7 +2435,7 @@ function renderSandboxes() {
|
|
|
2412
2435
|
document.getElementById('new-sandbox-desc').value = String(current.description || '');
|
|
2413
2436
|
dialog.showModal();
|
|
2414
2437
|
},
|
|
2415
|
-
onCopyLink:
|
|
2438
|
+
onCopyLink: async (id) => {
|
|
2416
2439
|
try {
|
|
2417
2440
|
const data = await apiRequest(`${API_BASE}/sandboxes/${id}/copy-link`, { method: 'POST' });
|
|
2418
2441
|
const copyLink = String(data?.copy_link || '');
|
|
@@ -2423,7 +2446,7 @@ function renderSandboxes() {
|
|
|
2423
2446
|
alert(`复制链接失败: ${error.message}`);
|
|
2424
2447
|
}
|
|
2425
2448
|
},
|
|
2426
|
-
onDelete:
|
|
2449
|
+
onDelete: async (id) => {
|
|
2427
2450
|
const current = state.sandboxes.find((sandbox) => String(sandbox.id || '') === String(id || ''));
|
|
2428
2451
|
if (!current) return;
|
|
2429
2452
|
const expectedName = String(current.name || '').trim();
|
|
@@ -2436,7 +2459,10 @@ function renderSandboxes() {
|
|
|
2436
2459
|
await apiRequest(`${API_BASE}/sandboxes/${id}`, { method: 'DELETE' });
|
|
2437
2460
|
await loadSandboxes();
|
|
2438
2461
|
},
|
|
2439
|
-
|
|
2462
|
+
canEdit: (sandbox) => canWriteSandboxById(sandbox?.id),
|
|
2463
|
+
canDelete: (sandbox) => canWriteSandboxById(sandbox?.id),
|
|
2464
|
+
canCopyLink: (sandbox) => canReadSandboxById(sandbox?.id),
|
|
2465
|
+
readonly: state.readonly,
|
|
2440
2466
|
});
|
|
2441
2467
|
}
|
|
2442
2468
|
|
|
@@ -2449,7 +2475,7 @@ function renderTaskBoardList(containerId, rows = []) {
|
|
|
2449
2475
|
}
|
|
2450
2476
|
container.innerHTML = rows.map((row) => `
|
|
2451
2477
|
<article class="task-board-item">
|
|
2452
|
-
<div><strong>${safeText(row.name || '-')}</strong> <span class="entity-type-pill">${safeText(row.record_type || 'todo')}</span></div>
|
|
2478
|
+
<div><strong>${safeText(row.name || '-')}</strong> <span class="entity-type-pill">${safeText(getEntityTypeLabel(row.record_type || 'todo'))}</span></div>
|
|
2453
2479
|
<div class="task-board-item-meta">沙盘:${safeText(row.sandbox_name || row.sandbox_id || '-')}</div>
|
|
2454
2480
|
<div class="task-board-item-meta">负责人:${safeText(row.assignee || '我(未指派)')} · 状态:${safeText(row.status || '-')}</div>
|
|
2455
2481
|
<div class="task-board-item-meta">计划启动:${safeText(row.planned_start_date || '-')} · 截止:${safeText(row.due_date || '-')}</div>
|
|
@@ -2563,8 +2589,8 @@ function renderSandboxOverview() {
|
|
|
2563
2589
|
<div class="summary-card"><div class="label">待处理/进行中</div><div class="value">${byStatus.pending}/${byStatus.inProgress}</div></div>
|
|
2564
2590
|
<div class="summary-card"><div class="label">已完成</div><div class="value">${byStatus.done}</div></div>
|
|
2565
2591
|
<div class="summary-card"><div class="label">关联日记</div><div class="value">${diaries.length}</div></div>
|
|
2566
|
-
<div class="summary-card"><div class="label"
|
|
2567
|
-
<div class="summary-card"><div class="label"
|
|
2592
|
+
<div class="summary-card"><div class="label">问题(开放)</div><div class="value">${entityStats.issue?.total || 0}(${(entityStats.issue?.open || 0) + (entityStats.issue?.in_progress || 0) + (entityStats.issue?.blocked || 0)})</div></div>
|
|
2593
|
+
<div class="summary-card"><div class="label">知识 / 能力</div><div class="value">${entityStats.knowledge?.total || 0} / ${entityStats.capability?.total || 0}</div></div>
|
|
2568
2594
|
`;
|
|
2569
2595
|
}
|
|
2570
2596
|
|
|
@@ -3291,6 +3317,25 @@ function collectProjectSettingsPayload() {
|
|
|
3291
3317
|
};
|
|
3292
3318
|
}
|
|
3293
3319
|
|
|
3320
|
+
function collectIneffectiveProfileNames(payload) {
|
|
3321
|
+
const profiles = Array.isArray(payload?.profiles) ? payload.profiles : [];
|
|
3322
|
+
const bindings = Array.isArray(payload?.bindings) ? payload.bindings : [];
|
|
3323
|
+
const boundProfileIds = new Set();
|
|
3324
|
+
bindings.forEach((binding) => {
|
|
3325
|
+
const profileIds = Array.isArray(binding?.profile_ids) ? binding.profile_ids : [];
|
|
3326
|
+
profileIds.forEach((id) => boundProfileIds.add(String(id || '').trim()));
|
|
3327
|
+
});
|
|
3328
|
+
return profiles
|
|
3329
|
+
.filter((profile) => {
|
|
3330
|
+
const id = String(profile?.id || '').trim();
|
|
3331
|
+
const applyAll = Boolean(profile?.apply_to_all_users);
|
|
3332
|
+
if (!id || applyAll) return false;
|
|
3333
|
+
return !boundProfileIds.has(id);
|
|
3334
|
+
})
|
|
3335
|
+
.map((profile) => String(profile?.name || profile?.id || '').trim())
|
|
3336
|
+
.filter(Boolean);
|
|
3337
|
+
}
|
|
3338
|
+
|
|
3294
3339
|
function createSettingHeaderRow(key = '', value = '') {
|
|
3295
3340
|
const row = document.createElement('div');
|
|
3296
3341
|
row.className = 'settings-kv-row';
|
|
@@ -3646,6 +3691,9 @@ async function initApp() {
|
|
|
3646
3691
|
};
|
|
3647
3692
|
document.getElementById('import-sandbox-dialog')?.addEventListener('submit', importSandboxByLink);
|
|
3648
3693
|
document.getElementById('confirm-import-sandbox-btn')?.addEventListener('click', importSandboxByLink);
|
|
3694
|
+
document.getElementById('refresh-sandboxes-btn')?.addEventListener('click', async () => {
|
|
3695
|
+
await loadSandboxes();
|
|
3696
|
+
});
|
|
3649
3697
|
|
|
3650
3698
|
document.getElementById('add-item-btn')?.addEventListener('click', () => {
|
|
3651
3699
|
if (state.readonly) return;
|
|
@@ -3667,6 +3715,11 @@ async function initApp() {
|
|
|
3667
3715
|
applySandboxLayoutHeight();
|
|
3668
3716
|
});
|
|
3669
3717
|
|
|
3718
|
+
document.getElementById('refresh-sandbox-detail-btn')?.addEventListener('click', async () => {
|
|
3719
|
+
if (!state.currentSandbox?.id) return;
|
|
3720
|
+
await loadSandbox(state.currentSandbox.id);
|
|
3721
|
+
});
|
|
3722
|
+
|
|
3670
3723
|
document.getElementById('toggle-sandbox-fullscreen-btn')?.addEventListener('click', async () => {
|
|
3671
3724
|
await toggleSandboxFullscreen();
|
|
3672
3725
|
applySandboxFullscreenState();
|
|
@@ -4383,6 +4436,15 @@ async function initApp() {
|
|
|
4383
4436
|
if (state.readonly || (!state.fullAccess && !state.pageAccess.settings)) return;
|
|
4384
4437
|
try {
|
|
4385
4438
|
const payload = collectProjectSettingsPayload();
|
|
4439
|
+
const ineffectiveProfiles = collectIneffectiveProfileNames(payload);
|
|
4440
|
+
if (ineffectiveProfiles.length) {
|
|
4441
|
+
const preview = ineffectiveProfiles.slice(0, 3).join('、');
|
|
4442
|
+
const more = ineffectiveProfiles.length > 3 ? ` 等 ${ineffectiveProfiles.length} 个` : '';
|
|
4443
|
+
const proceed = confirm(
|
|
4444
|
+
`检测到未生效的 Profile:${preview}${more}。\n这些 Profile 既未勾选 apply_to_all_users,也未被任何 Binding 绑定。\n是否仍然继续保存?`,
|
|
4445
|
+
);
|
|
4446
|
+
if (!proceed) return;
|
|
4447
|
+
}
|
|
4386
4448
|
await apiRequest(`${API_BASE}/project-settings`, {
|
|
4387
4449
|
method: 'PUT',
|
|
4388
4450
|
body: JSON.stringify(payload),
|
|
@@ -4470,6 +4532,60 @@ async function initApp() {
|
|
|
4470
4532
|
alert('汇报已复制');
|
|
4471
4533
|
});
|
|
4472
4534
|
|
|
4535
|
+
const parseDownloadFilename = (contentDisposition, fallbackName) => {
|
|
4536
|
+
const encodedMatch = String(contentDisposition || '').match(/filename\*=UTF-8''([^;]+)/i);
|
|
4537
|
+
if (encodedMatch?.[1]) {
|
|
4538
|
+
try {
|
|
4539
|
+
return decodeURIComponent(encodedMatch[1]);
|
|
4540
|
+
} catch {
|
|
4541
|
+
// Ignore malformed encoding and fallback.
|
|
4542
|
+
}
|
|
4543
|
+
}
|
|
4544
|
+
const plainMatch = String(contentDisposition || '').match(/filename="([^"]+)"/i);
|
|
4545
|
+
if (plainMatch?.[1]) return plainMatch[1];
|
|
4546
|
+
return fallbackName;
|
|
4547
|
+
};
|
|
4548
|
+
|
|
4549
|
+
document.getElementById('export-sandbox-markdown-btn')?.addEventListener('click', async () => {
|
|
4550
|
+
if (!state.currentSandbox) return;
|
|
4551
|
+
const response = await fetch(`${API_BASE}/sandboxes/${encodeURIComponent(state.currentSandbox.id)}/export-markdown`);
|
|
4552
|
+
if (!response.ok) {
|
|
4553
|
+
alert('导出失败');
|
|
4554
|
+
return;
|
|
4555
|
+
}
|
|
4556
|
+
const blob = await response.blob();
|
|
4557
|
+
const contentDisposition = response.headers.get('content-disposition') || '';
|
|
4558
|
+
const filename = parseDownloadFilename(contentDisposition, `${state.currentSandbox.name || 'sandbox'}.md`);
|
|
4559
|
+
const href = URL.createObjectURL(blob);
|
|
4560
|
+
const link = document.createElement('a');
|
|
4561
|
+
link.href = href;
|
|
4562
|
+
link.download = filename;
|
|
4563
|
+
document.body.appendChild(link);
|
|
4564
|
+
link.click();
|
|
4565
|
+
link.remove();
|
|
4566
|
+
URL.revokeObjectURL(href);
|
|
4567
|
+
});
|
|
4568
|
+
|
|
4569
|
+
document.getElementById('export-sandbox-excel-btn')?.addEventListener('click', async () => {
|
|
4570
|
+
if (!state.currentSandbox) return;
|
|
4571
|
+
const response = await fetch(`${API_BASE}/sandboxes/${encodeURIComponent(state.currentSandbox.id)}/export-excel`);
|
|
4572
|
+
if (!response.ok) {
|
|
4573
|
+
alert('导出失败');
|
|
4574
|
+
return;
|
|
4575
|
+
}
|
|
4576
|
+
const blob = await response.blob();
|
|
4577
|
+
const contentDisposition = response.headers.get('content-disposition') || '';
|
|
4578
|
+
const filename = parseDownloadFilename(contentDisposition, `${state.currentSandbox.name || 'sandbox'}.xlsx`);
|
|
4579
|
+
const href = URL.createObjectURL(blob);
|
|
4580
|
+
const link = document.createElement('a');
|
|
4581
|
+
link.href = href;
|
|
4582
|
+
link.download = filename;
|
|
4583
|
+
document.body.appendChild(link);
|
|
4584
|
+
link.click();
|
|
4585
|
+
link.remove();
|
|
4586
|
+
URL.revokeObjectURL(href);
|
|
4587
|
+
});
|
|
4588
|
+
|
|
4473
4589
|
document.getElementById('generate-insight-btn')?.addEventListener('click', async () => {
|
|
4474
4590
|
if (!state.currentSandbox) return;
|
|
4475
4591
|
const output = document.getElementById('sandbox-insight-output');
|
package/dist/web/index.html
CHANGED
|
@@ -53,6 +53,7 @@
|
|
|
53
53
|
<option value="name_asc">名称(A -> Z)</option>
|
|
54
54
|
</select>
|
|
55
55
|
</label>
|
|
56
|
+
<button class="btn btn-secondary" id="refresh-sandboxes-btn" type="button">刷新</button>
|
|
56
57
|
<button class="btn btn-primary" id="add-sandbox-btn">+ 新建沙盘</button>
|
|
57
58
|
<button class="btn btn-secondary" id="import-sandbox-btn">复制笔记</button>
|
|
58
59
|
</div>
|
|
@@ -63,8 +64,11 @@
|
|
|
63
64
|
<h2 id="sandbox-title">沙盘</h2>
|
|
64
65
|
<div class="summary-strip" id="sandbox-overview"></div>
|
|
65
66
|
<div class="action-strip">
|
|
67
|
+
<button class="btn btn-secondary btn-sm" id="refresh-sandbox-detail-btn" type="button">刷新</button>
|
|
66
68
|
<button class="btn btn-secondary btn-sm" id="generate-insight-btn">智能总结</button>
|
|
67
69
|
<button class="btn btn-secondary btn-sm" id="generate-report-btn">生成汇报</button>
|
|
70
|
+
<button class="btn btn-secondary btn-sm" id="export-sandbox-markdown-btn">导出Markdown</button>
|
|
71
|
+
<button class="btn btn-secondary btn-sm" id="export-sandbox-excel-btn">导出Excel</button>
|
|
68
72
|
<button class="btn btn-secondary btn-sm ai-toggle-btn" id="toggle-sandbox-chat-btn" type="button">
|
|
69
73
|
<span class="icon" aria-hidden="true">🤖</span>
|
|
70
74
|
<span>显示 AI 助手</span>
|
|
@@ -95,9 +99,9 @@
|
|
|
95
99
|
</select>
|
|
96
100
|
<select id="work-item-element-preview-mode">
|
|
97
101
|
<option value="none">能力要素:不显示</option>
|
|
98
|
-
<option value="issue"
|
|
99
|
-
<option value="knowledge"
|
|
100
|
-
<option value="capability"
|
|
102
|
+
<option value="issue">能力要素:问题</option>
|
|
103
|
+
<option value="knowledge">能力要素:知识</option>
|
|
104
|
+
<option value="capability">能力要素:能力</option>
|
|
101
105
|
<option value="all">能力要素:全部</option>
|
|
102
106
|
</select>
|
|
103
107
|
<label class="inline-checkbox">
|
|
@@ -118,9 +122,9 @@
|
|
|
118
122
|
<div class="work-tree-legend">
|
|
119
123
|
<span class="legend-title">图例</span>
|
|
120
124
|
<span class="legend-chip">1/2/3</span>
|
|
121
|
-
<span class="legend-text"
|
|
122
|
-
<span class="legend-state issue-open"><span class="dot"></span
|
|
123
|
-
<span class="legend-state issue-closed"><span class="dot"></span
|
|
125
|
+
<span class="legend-text">顺序:问题 / 知识 / 能力</span>
|
|
126
|
+
<span class="legend-state issue-open"><span class="dot"></span>问题有未关闭项</span>
|
|
127
|
+
<span class="legend-state issue-closed"><span class="dot"></span>问题已关闭</span>
|
|
124
128
|
</div>
|
|
125
129
|
<div class="work-tree" id="work-tree"></div>
|
|
126
130
|
</div>
|
|
@@ -170,22 +174,22 @@
|
|
|
170
174
|
<div class="entity-filter-tabs" id="entity-filter-tabs">
|
|
171
175
|
<button class="btn btn-secondary btn-sm active" data-entity-filter="all">全部</button>
|
|
172
176
|
<button class="btn btn-secondary btn-sm" data-entity-filter="todo">Todo</button>
|
|
173
|
-
<button class="btn btn-secondary btn-sm" data-entity-filter="issue"
|
|
174
|
-
<button class="btn btn-secondary btn-sm" data-entity-filter="knowledge"
|
|
175
|
-
<button class="btn btn-secondary btn-sm" data-entity-filter="capability"
|
|
177
|
+
<button class="btn btn-secondary btn-sm" data-entity-filter="issue">问题</button>
|
|
178
|
+
<button class="btn btn-secondary btn-sm" data-entity-filter="knowledge">知识</button>
|
|
179
|
+
<button class="btn btn-secondary btn-sm" data-entity-filter="capability">能力</button>
|
|
176
180
|
<button class="btn btn-secondary btn-sm" data-entity-filter="diary">Diary</button>
|
|
177
181
|
</div>
|
|
178
182
|
|
|
179
183
|
<div class="drawer-create-form hidden" id="drawer-create-form">
|
|
180
184
|
<select id="entity-type-select">
|
|
181
185
|
<option value="todo">Todo</option>
|
|
182
|
-
<option value="issue"
|
|
183
|
-
<option value="knowledge"
|
|
184
|
-
<option value="capability"
|
|
186
|
+
<option value="issue">问题</option>
|
|
187
|
+
<option value="knowledge">知识</option>
|
|
188
|
+
<option value="capability">能力</option>
|
|
185
189
|
</select>
|
|
186
190
|
<input type="text" id="entity-title-input" placeholder="标题(必填)">
|
|
187
191
|
<div class="entity-field-group" id="entity-assignee-group">
|
|
188
|
-
<input type="text" id="entity-assignee-input" placeholder="
|
|
192
|
+
<input type="text" id="entity-assignee-input" placeholder="负责人(问题可选)">
|
|
189
193
|
</div>
|
|
190
194
|
<div class="entity-field-group hidden" id="entity-due-date-group">
|
|
191
195
|
<input type="date" id="entity-due-date-input">
|
|
@@ -207,7 +211,7 @@
|
|
|
207
211
|
</div>
|
|
208
212
|
<div class="entity-field-group" id="entity-priority-group">
|
|
209
213
|
<select id="entity-priority-select">
|
|
210
|
-
<option value=""
|
|
214
|
+
<option value="">优先级(问题可选)</option>
|
|
211
215
|
<option value="low">low</option>
|
|
212
216
|
<option value="medium">medium</option>
|
|
213
217
|
<option value="high">high</option>
|
|
@@ -216,7 +220,7 @@
|
|
|
216
220
|
</div>
|
|
217
221
|
<div class="entity-field-group" id="entity-capability-type-group">
|
|
218
222
|
<select id="entity-capability-type-input">
|
|
219
|
-
<option value=""
|
|
223
|
+
<option value="">能力类型(能力项可选)</option>
|
|
220
224
|
<option value="workflow">workflow(流程能力)</option>
|
|
221
225
|
<option value="automation">automation(自动化能力)</option>
|
|
222
226
|
<option value="tooling">tooling(工具能力)</option>
|
|
@@ -227,7 +231,7 @@
|
|
|
227
231
|
<option value="other">other(其他)</option>
|
|
228
232
|
</select>
|
|
229
233
|
</div>
|
|
230
|
-
<textarea id="entity-content-input" rows="4" placeholder="Markdown
|
|
234
|
+
<textarea id="entity-content-input" rows="4" placeholder="Markdown 内容(知识/能力 推荐)"></textarea>
|
|
231
235
|
<div class="entity-form-hint" id="entity-form-hint"></div>
|
|
232
236
|
<div class="entity-form-actions">
|
|
233
237
|
<button class="btn btn-secondary btn-sm hidden" id="cancel-edit-entity-btn" type="button">取消编辑</button>
|
package/dist/web/vueRenderers.js
CHANGED
|
@@ -22,6 +22,9 @@ export function mountSandboxGrid(targetId, options) {
|
|
|
22
22
|
onDelete,
|
|
23
23
|
onCopyLink,
|
|
24
24
|
readonly = false,
|
|
25
|
+
canEdit,
|
|
26
|
+
canDelete,
|
|
27
|
+
canCopyLink,
|
|
25
28
|
} = options || {};
|
|
26
29
|
|
|
27
30
|
if (!sandboxes.length) {
|
|
@@ -29,23 +32,29 @@ export function mountSandboxGrid(targetId, options) {
|
|
|
29
32
|
return;
|
|
30
33
|
}
|
|
31
34
|
|
|
32
|
-
container.innerHTML = sandboxes.map((sandbox) =>
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
35
|
+
container.innerHTML = sandboxes.map((sandbox) => {
|
|
36
|
+
const editable = !readonly && Boolean(onEdit) && (typeof canEdit === 'function' ? Boolean(canEdit(sandbox)) : true);
|
|
37
|
+
const copyable = !readonly && Boolean(onCopyLink) && (typeof canCopyLink === 'function' ? Boolean(canCopyLink(sandbox)) : true);
|
|
38
|
+
const deletable = !readonly && Boolean(onDelete) && (typeof canDelete === 'function' ? Boolean(canDelete(sandbox)) : true);
|
|
39
|
+
const hasActions = editable || copyable || deletable;
|
|
40
|
+
return `
|
|
41
|
+
<div class="card sandbox-card" data-open-id="${esc(sandbox.id)}">
|
|
42
|
+
<h3>${esc(sandbox.name)}</h3>
|
|
43
|
+
<p>${esc(sandbox.description || '暂无描述')}</p>
|
|
44
|
+
<div class="sandbox-meta">
|
|
45
|
+
<span>创建:${esc(new Date(sandbox.created_at).toLocaleDateString())}</span>
|
|
46
|
+
<span>更新:${esc(new Date(sandbox.updated_at).toLocaleDateString())}</span>
|
|
47
|
+
</div>
|
|
48
|
+
${hasActions ? `
|
|
49
|
+
<div class="sandbox-actions">
|
|
50
|
+
${editable ? `<button class="btn btn-secondary btn-sm" data-edit-id="${esc(sandbox.id)}">编辑</button>` : ''}
|
|
51
|
+
${copyable ? `<button class="btn btn-secondary btn-sm" data-copy-link-id="${esc(sandbox.id)}">复制链接</button>` : ''}
|
|
52
|
+
${deletable ? `<button class="btn btn-secondary btn-sm sandbox-delete-weak" data-delete-id="${esc(sandbox.id)}">删除</button>` : ''}
|
|
53
|
+
</div>
|
|
54
|
+
` : ''}
|
|
45
55
|
</div>
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
`).join('');
|
|
56
|
+
`;
|
|
57
|
+
}).join('');
|
|
49
58
|
|
|
50
59
|
container.querySelectorAll('[data-open-id]').forEach((el) => {
|
|
51
60
|
el.addEventListener('click', () => onOpen?.(el.getAttribute('data-open-id')));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@qnote/q-ai-note",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.16",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "AI-assisted personal work sandbox and diary system",
|
|
6
6
|
"main": "dist/server/index.js",
|
|
@@ -30,7 +30,8 @@
|
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"express": "^4.18.2",
|
|
32
32
|
"uuid": "^9.0.0",
|
|
33
|
-
"vue": "^3.5.29"
|
|
33
|
+
"vue": "^3.5.29",
|
|
34
|
+
"xlsx": "^0.18.5"
|
|
34
35
|
},
|
|
35
36
|
"devDependencies": {
|
|
36
37
|
"@playwright/test": "^1.58.2",
|