@lih-x-x/kmr 1.0.20 → 1.0.21
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/index.js +47 -0
- package/dist/public/app.js +4 -2
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1066,6 +1066,24 @@ var TaskCreator = class {
|
|
|
1066
1066
|
console.log(`[task] \u4EFB\u52A1\u521B\u5EFA\u6210\u529F: taskId=${taskId}`);
|
|
1067
1067
|
return { taskId, url };
|
|
1068
1068
|
}
|
|
1069
|
+
/**
|
|
1070
|
+
* 查询飞书任务的最新状态
|
|
1071
|
+
*/
|
|
1072
|
+
async getTaskStatus(taskId) {
|
|
1073
|
+
try {
|
|
1074
|
+
const response = await this.client.task.v2.task.get({
|
|
1075
|
+
path: { task_guid: taskId }
|
|
1076
|
+
});
|
|
1077
|
+
const task = response.data?.task;
|
|
1078
|
+
if (!task) return null;
|
|
1079
|
+
const completedAt = task.completed_at || "";
|
|
1080
|
+
const status = completedAt ? "completed" : "open";
|
|
1081
|
+
return { status, completedAt: completedAt || void 0 };
|
|
1082
|
+
} catch (err) {
|
|
1083
|
+
console.error(`[task-sync] \u67E5\u8BE2\u4EFB\u52A1\u72B6\u6001\u5931\u8D25: taskId=${taskId}`, err.message);
|
|
1084
|
+
return null;
|
|
1085
|
+
}
|
|
1086
|
+
}
|
|
1069
1087
|
};
|
|
1070
1088
|
|
|
1071
1089
|
// src/lark/userResolver.ts
|
|
@@ -1328,5 +1346,34 @@ async function main() {
|
|
|
1328
1346
|
console.error("[notify] \u5411\u7BA1\u7406\u5458\u63A8\u9001\u542F\u52A8\u901A\u77E5\u5931\u8D25:", err.message);
|
|
1329
1347
|
});
|
|
1330
1348
|
}
|
|
1349
|
+
async function syncTaskStatuses() {
|
|
1350
|
+
console.log("[task-sync] \u5F00\u59CB\u540C\u6B65\u98DE\u4E66\u4EFB\u52A1\u72B6\u6001...");
|
|
1351
|
+
try {
|
|
1352
|
+
const meetings = await store.list();
|
|
1353
|
+
let updatedCount = 0;
|
|
1354
|
+
for (const meeting of meetings) {
|
|
1355
|
+
if (!meeting.createdTasks || meeting.createdTasks.length === 0) continue;
|
|
1356
|
+
let changed = false;
|
|
1357
|
+
for (const task of meeting.createdTasks) {
|
|
1358
|
+
if (!task.taskId || task.status === "completed") continue;
|
|
1359
|
+
const result = await taskCreator.getTaskStatus(task.taskId);
|
|
1360
|
+
if (result && result.status !== (task.status || "open")) {
|
|
1361
|
+
task.status = result.status;
|
|
1362
|
+
task.completedAt = result.completedAt;
|
|
1363
|
+
changed = true;
|
|
1364
|
+
}
|
|
1365
|
+
}
|
|
1366
|
+
if (changed) {
|
|
1367
|
+
await store.save(meeting);
|
|
1368
|
+
updatedCount++;
|
|
1369
|
+
}
|
|
1370
|
+
}
|
|
1371
|
+
console.log(`[task-sync] \u540C\u6B65\u5B8C\u6210, \u66F4\u65B0\u4E86 ${updatedCount} \u6761\u4F1A\u8BAE\u8BB0\u5F55`);
|
|
1372
|
+
} catch (err) {
|
|
1373
|
+
console.error("[task-sync] \u540C\u6B65\u5931\u8D25:", err.message);
|
|
1374
|
+
}
|
|
1375
|
+
}
|
|
1376
|
+
syncTaskStatuses();
|
|
1377
|
+
setInterval(syncTaskStatuses, 60 * 60 * 1e3);
|
|
1331
1378
|
}
|
|
1332
1379
|
main().catch(console.error);
|
package/dist/public/app.js
CHANGED
|
@@ -129,9 +129,11 @@ async function renderMeetings() {
|
|
|
129
129
|
if (m.createdTasks && m.createdTasks.length > 0) {
|
|
130
130
|
detail += '<div class="detail-section"><h4>📋 已创建任务</h4><ul>' +
|
|
131
131
|
m.createdTasks.map(function (t) {
|
|
132
|
-
|
|
132
|
+
var statusIcon = t.status === 'completed' ? '✅' : '⏳';
|
|
133
|
+
return '<li>' + statusIcon + ' ' + escapeHtml(t.summary) +
|
|
133
134
|
(t.url ? ' <a class="detail-link" href="' + escapeAttr(t.url) + '" target="_blank">查看 →</a>' : '') +
|
|
134
|
-
'<br><span class="insight-source">创建于 ' + escapeHtml(t.createdAt) +
|
|
135
|
+
'<br><span class="insight-source">创建于 ' + escapeHtml(t.createdAt) +
|
|
136
|
+
(t.completedAt ? ' | 完成于 ' + escapeHtml(t.completedAt) : '') + '</span></li>';
|
|
135
137
|
}).join('') + '</ul></div>';
|
|
136
138
|
}
|
|
137
139
|
|