新增: 灵感归档箱与任务归档动线

- ideasStore/taskStore: archiveIdea/archiveTask IPC 封装(本地移除/本地更新,对齐 delete 语义)
- project.ts 组合 store 显式透传 archiveIdea/archiveTask
- Ideas.vue: 筛选栏归档箱 Tab(独立数据源 ideaApi.listArchived,主查询不受扰);archiveCurrentIdea 处理器(归档确认+归档箱内取消归档自动清选中);IdeaDetail 传 in-archive-box prop
- IdeaDetail.vue: inArchiveBox prop + archive emit;操作区归档/取消归档按钮,归档箱模式隐藏删除(防误删归档记忆)
- i18n zh-CN/en ideas 补 filterArchived/archiveBoxEmpty/quickArchive/quickUnarchive/confirmArchive/toast 键(前批遗留)
验收: vue-tsc --noEmit EXIT 0
This commit is contained in:
lxy
2026-10-05 00:35:02 +08:00
parent c6ebf15407
commit 83e86cd6b7
13 changed files with 201 additions and 9 deletions
+2
View File
@@ -179,6 +179,7 @@ function createStore() {
createTask: tasksStore.createTask,
updateTask: tasksStore.updateTask,
deleteTask: tasksStore.deleteTask,
archiveTask: tasksStore.archiveTask,
// P1-b A0:统计独立通道(Dashboard 卡片 + ActiveProjectsPanel 各项目任务数)
loadStats,
// idea actions
@@ -186,6 +187,7 @@ function createStore() {
createIdea: ideasStore.createIdea,
updateIdea: ideasStore.updateIdea,
deleteIdea: ideasStore.deleteIdea,
archiveIdea: ideasStore.archiveIdea,
evaluateIdea: ideasStore.evaluateIdea,
promoteIdea: ideasStore.promoteIdea,
relateIdeas: ideasStore.relateIdeas,
+14
View File
@@ -70,6 +70,19 @@ export function createIdeasStore() {
})
}
/**
* 归档/取消归档灵感(归档功能 P1)。归档=移出主视图(list_by_query 恒带 archived=0),
* 本地同步从列表移除(取消归档时调 loadIdeas 重拉)。返回后端命中布尔。
*/
async function archiveIdea(id: string, archived: boolean): Promise<boolean> {
const ok = await runWithCatch(state, t('ideas.err.archiveFailed'), async () => {
const hit = await ideaApi.archive(id, archived)
if (hit && archived) state.ideas = state.ideas.filter(x => x.id !== id)
return hit
})
return ok === true
}
return {
loadIdeas,
createIdea,
@@ -78,5 +91,6 @@ export function createIdeasStore() {
evaluateIdea,
promoteIdea,
relateIdeas,
archiveIdea,
}
}
+14
View File
@@ -69,10 +69,24 @@ export function createTasksStore() {
return ok === true
}
/**
* 归档/取消归档任务(归档功能 P1)。归档=移出主视图(后端活跃查询恒过滤),
* 本地同步从列表移除(取消归档时调 loadTasks 重拉)。返回后端命中布尔。
*/
async function archiveTask(id: string, archived: boolean): Promise<boolean> {
const ok = await runWithCatch(state, t('tasks.err.archiveFailed'), async () => {
const hit = await taskApi.archive(id, archived)
if (hit && archived) state.tasks = state.tasks.filter(x => x.id !== id)
return hit
})
return ok === true
}
return {
loadTasks,
createTask,
updateTask,
deleteTask,
archiveTask,
}
}