新增: 项目归档
This commit is contained in:
@@ -77,6 +77,34 @@ export function createProjectsStore() {
|
||||
}
|
||||
}
|
||||
|
||||
// ── 归档功能 P2(V48):归档箱三动作,对标 tasks/ideas 子 store 同款 ──
|
||||
|
||||
/** 归档/取消归档。归档=退出主列表;取消归档=从归档箱移回主列表(两端各刷一份) */
|
||||
async function archiveProject(id: string, archived: boolean) {
|
||||
await runWithCatch(state, t('projects.err.archiveFailed'), async () => {
|
||||
await projectApi.archive(id, archived)
|
||||
if (archived) {
|
||||
// 从主列表移出,归档箱按需懒加载(打开归档箱时 loadArchivedProjects)
|
||||
state.projects = state.projects.filter(p => p.id !== id)
|
||||
} else {
|
||||
state.archivedProjects = state.archivedProjects.filter(p => p.id !== id)
|
||||
await loadProjects() // 取消归档回主列表
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/** 加载归档项目(归档箱 Tab 数据源) */
|
||||
async function loadArchivedProjects() {
|
||||
await runWithCatch(state, t('projects.err.loadArchivedFailed'), async () => {
|
||||
state.archivedProjects = await projectApi.listArchived()
|
||||
})
|
||||
}
|
||||
|
||||
/** 归档箱内恢复到主列表(取消归档语义的 UI 别名,动线用词更自然) */
|
||||
async function unarchiveProject(id: string) {
|
||||
await archiveProject(id, false)
|
||||
}
|
||||
|
||||
async function purgeProject(id: string) {
|
||||
try {
|
||||
await projectApi.purge(id) // 彻底删(级联物理删,不可恢复)
|
||||
@@ -96,6 +124,9 @@ export function createProjectsStore() {
|
||||
loadDeletedProjects,
|
||||
restoreProject,
|
||||
purgeProject,
|
||||
archiveProject,
|
||||
loadArchivedProjects,
|
||||
unarchiveProject,
|
||||
// clearError 来自 state(供 barrel re-export)
|
||||
clearError,
|
||||
}
|
||||
|
||||
@@ -16,6 +16,8 @@ export interface PendingApproval {
|
||||
export const state = reactive({
|
||||
projects: [] as ProjectRecord[],
|
||||
deletedProjects: [] as ProjectRecord[],
|
||||
// 归档箱数据源(归档功能 P2,V48;独立于 projects——主列表后端已默认排除 archived)
|
||||
archivedProjects: [] as ProjectRecord[],
|
||||
tasks: [] as TaskRecord[],
|
||||
// 统计缓存,与 tasks 数组解耦,供 Dashboard,不被 Tasks 分页/筛选污染(P1-b A0)
|
||||
activeTaskCount: 0 as number,
|
||||
|
||||
Reference in New Issue
Block a user